diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index d29a4c2d96ea..46492e19abe6 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -30,7 +30,7 @@ jobs: run_linters: name: Run Linters needs: start_gate - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 timeout-minutes: 10 steps: @@ -75,6 +75,7 @@ jobs: bash tools/ci/install_node.sh bash tools/ci/install/install_spaceman_dmm.sh dreamchecker bash tools/ci/install_ripgrep.sh + sudo apt install -y python3-pip tools/bootstrap/python -c '' - name: Give Linters A Go id: linter-setup @@ -140,19 +141,25 @@ jobs: options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v4 + - name: Restore Flyway + uses: actions/cache@v4 + with: + path: ~/flyway + key: ${{ runner.os }}-flyway-${{ hashFiles('dependencies.sh') }} - name: Restore BYOND cache uses: actions/cache@v4 with: path: ~/BYOND key: ${{ runner.os }}-byond-${{ hashFiles('dependencies.sh') }} + - name: Install flyway + run: | + bash tools/ci/install/install_flyway.sh - name: Setup database run: | sudo systemctl start mysql - mysql -u root -proot -e 'CREATE DATABASE ss13_ci;' - mysql -u root -proot ss13_ci < SQL/database_schema_prefixed.sql - mysql -u root -proot ss13_ci < SQL/unified_schema.sql - # mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;' - # mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql + mysql -u root -proot -e 'CREATE DATABASE ss13;' + source dependencies.sh + ~/flyway/flyway-$FLYWAY_VERSION/flyway -user=root -password=root -url=jdbc:mariadb://localhost:3306/ss13 -locations="filesystem:sql/migrations" migrate - name: Install rust-g run: | bash tools/ci/install/install_rust_g.sh diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 87869168fcf6..44df201905e9 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -8,6 +8,7 @@ "donkie.vscode-tgstation-test-adapter", "anturk.dmi-editor", "aaron-bond.better-comments", - "ss13.opendream" + "ss13.opendream", + "tamasfe.even-better-toml" ] } diff --git a/README.md b/README.md index b0228569fead..a957b846c105 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,12 @@ On **May 9, 2022** we have changed the way to compile the codebase. ## SQL Setup The SQL backend for the library and stats tracking requires a MariaDB server. -Your server details go in /config/legacy/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql. -More detailed setup instructions arecoming soon, for now ask in our Discord. +Your server details go in /config/legacy/dbconfig.txt. + +Flyway is used for setup and migration. Run the migrations in `sql/migrations` against your database, and everything should just work. +We do not use table prefixes. + +More detailed setup instructions are coming soon, for now ask in our Discord. todo: update this section @@ -62,6 +66,7 @@ These are also the folders you are likely going to encounter while managing the - /players: player data, like saves and characters get dumped in here - /tmp: server scratch space - /assets - for asset generation + - /config - used as scratch space for config You only need to make the top level folders (e.g. config, data) static folders in TGS4. diff --git a/SQL/database_schema.sql b/SQL/database_schema.sql deleted file mode 100644 index f1b50df6fd40..000000000000 --- a/SQL/database_schema.sql +++ /dev/null @@ -1,439 +0,0 @@ -/** - * make sure to bump schema version and mark changes in database_changelog.md! - * - * default prefix is rp_ - * find replace case sensitive %_PREFIX_% - * PRESERVE ANY vr_'s! We need to replace those tables and features at some point, that's how we konw. - **/ - --- core -- - --- --- Table structure for table `schema_revision` --- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%schema_revision` ( - `major` TINYINT(3) unsigned NOT NULL, - `minor` TINYINT(3) unsigned NOT NULL, - `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`major`, `minor`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- persistence -- - --- SSpersistence modules/bulk_entity -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_bulk_entity` ( - `id` INT(24) NOT NULL AUTO_INCREMENT, - `generation` INT(11) NOT NULL, - `persistence_key` VARCHAR(64) NOT NULL, - `level_id` VARCHAR(64) NOT NULL, - `data` MEDIUMTEXT, - `round_id` INT(11) NOT NULL, - PRIMARY KEY (`id`), - INDEX(`level_id`, `generation`, `persistence_key`), - INDEX(`level_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- SSpersistence modules/level_objects -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_static_level_objects` ( - `generation` INT(11) NOT NULL, - `object_id` VARCHAR(64) NOT NULL, - `level_id` VARCHAR(64) NOT NULL, - `data` MEDIUMTEXT NOT NULL, - PRIMARY KEY(`generation`, `object_id`, `level_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- SSpersistence modules/level_objects -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_static_map_objects` ( - `generation` INT(11) NOT NULL, - `object_id` VARCHAR(64) NOT NULL, - `map_id` VARCHAR(64) NOT NULL, - `data` MEDIUMTEXT NOT NULL, - PRIMARY KEY(`generation`, `object_id`, `map_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- SSpersistence modules/level_objects -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_static_global_objects` ( - `generation` INT(11) NOT NULL, - `object_id` VARCHAR(64) NOT NULL, - `data` MEDIUMTEXT NOT NULL, - PRIMARY KEY(`generation`, `object_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- SSpersistence modules/level_objects -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_dynamic_objects` ( - `generation` INT(11) NOT NULL, - `object_id` INT(24) NOT NULL AUTO_INCREMENT, - `level_id` VARCHAR(64) NOT NULL, - `prototype_id` VARCHAR(256) NOT NULL, - `status` INT(24) NOT NULL DEFAULT 0, - `data` MEDIUMTEXT NOT NULL, - `x` INT(8) NOT NULL, - `y` INT(8) NoT NULL, - PRIMARY KEY(`object_id`, `generation`), - INDEX(`object_id`), - INDEX(`level_id`, `generation`), - INDEX(`prototype_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- SSpersistence modules/spatial_metadata -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_level_metadata` ( - `created` DATETIME NOT NULL DEFAULT Now(), - `saved` DATETIME NOT NULL, - `saved_round_id` INT(11) NOT NULL, - `level_id` VARCHAR(64) NOT NULL, - `data` MEDIUMTEXT NOT NULL, - `generation` INT(11) NOT NULL, - PRIMARY KEY(`level_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- SSpersistence modules/string_kv -CREATE TABLE IF NOT EXISTS `%_PREFIX_%persistence_string_kv` ( - `created` DATETIME NOT NULL DEFAULT Now(), - `modified` DATETIME NOT NULL, - `key` VARCHAR(64) NOT NULL, - `value` MEDIUMTEXT NULL, - `group` VARCHAR(64) NOT NULL, - `revision` INT(11) NOT NULL, - PRIMARY KEY(`key`, `group`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- photography -- - --- picture table -- --- used to store data about pictures -- --- hash is in sha1 format. -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%pictures` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `hash` char(40) NOT NULL, - `created` datetime NOT NULL DEFAULT Now(), - `width` int NOT NULL, - `height` int NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `hash` (`hash`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- photograph table -- --- used to store data about photographs -- --- picture is picture hash in picture table -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%photographs` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `picture` char(40) NOT NULL, - `created` datetime NOT NULL DEFAULT Now(), - `scene` MEDIUMTEXT null, - `desc` MEDIUMTEXT null, - CONSTRAINT `linked_picture` FOREIGN KEY (`picture`) - REFERENCES `%_PREFIX_%pictures` (`hash`) - ON DELETE CASCADE - ON UPDATE CASCADE, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- Players -- - --- Player lookup table -- --- Used to look up player ID from ckey, as well as -- --- store last computerid/ip for a ckey. -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%player_lookup` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ckey` varchar(32) NOT NULL, - `firstseen` datetime NOT NULL, - `lastseen` datetime NOT NULL, - `ip` varchar(18) NOT NULL, - `computerid` varchar(32) NOT NULL, - `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', - `playerid` int(11), - PRIMARY KEY (`id`), - UNIQUE KEY `ckey` (`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- Primary player table -- --- Allows for one-to-many player-ckey association. -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%player` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `flags` int(24) NOT NULL DEFAULT 0, - `firstseen` datetime NOT NULL DEFAULT Now(), - `lastseen` datetime NOT NULL, - `misc` MEDIUMTEXT NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- Playtime / JEXP -- - --- Role Time Table - Master -- --- Stores total role time. -- - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%playtime` ( - `player` INT(11) NOT NULL, - `roleid` VARCHAR(64) NOT NULL, - `minutes` INT UNSIGNED NOT NULL, - PRIMARY KEY(`player`, `roleid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- Role Time - Logging -- --- Stores changes in role time -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%playtime_log` ( - `player` INT(11), - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, - `roleid` VARCHAR(64) NOT NULL, - `delta` INT(11) NOT NULL, - `datetime` TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW(), - PRIMARY KEY (`id`), - KEY `player` (`player`), - KEY `roleid` (`roleid`), - KEY `datetime` (`datetime`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -DELIMITER $$ -CREATE TRIGGER `playtimeTlogupdate` AFTER UPDATE ON `%_PREFIX_%playtime` FOR EACH ROW BEGIN INSERT into `%_PREFIX_%playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes-OLD.minutes); -END -$$ -CREATE TRIGGER `playtimeTloginsert` AFTER INSERT ON `%_PREFIX_%playtime` FOR EACH ROW BEGIN INSERT into `%_PREFIX_%playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes); -END -$$ -CREATE TRIGGER `playtimeTlogdelete` AFTER DELETE ON `%_PREFIX_%playtime` FOR EACH ROW BEGIN INSERT into `%_PREFIX_%playtime_log` (player, roleid, delta) VALUES (OLD.player, OLD.roleid, 0-OLD.minutes); -END -$$ -DELIMITER ; - - --- Preferences -- - --- Stores game preferences -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%game_preferences` ( - `player` INT(11) NOT NULL, - `entries` MEDIUMTEXT NOT NULL, - `misc` MEDIUMTEXT NOT NULL, - `keybinds` MEDIUMTEXT NOT NULL, - `toggles` MEDIUMTEXT NOT NULL, - `modified` DATETIME NOT NULL, - `version` INT(11) NOT NULL, - PRIMARY KEY (`player`), - CONSTRAINT `linked_player` FOREIGN KEY (`player`) - REFERENCES `%_PREFIX_%player` (`id`) - ON DELETE CASCADE - ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- Security - Ipintel -- - --- Ipintel Cache Table -- --- Stores cache entries for IPIntel -- --- IP is in INET_ATON. -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%ipintel` ( - `ip` INT(10) unsigned NOT NULL, - `date` TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW(), - `intel` double NOT NULL DEFAULT '0', - PRIMARY KEY (`ip`), - KEY `idx_ipintel` (`ip`, `intel`, `date`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- --- Table structure for table `round` --- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%round` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `initialize_datetime` DATETIME NOT NULL, - `start_datetime` DATETIME NULL, - `shutdown_datetime` DATETIME NULL, - `end_datetime` DATETIME NULL, - `server_ip` INT(10) UNSIGNED NOT NULL, - `server_port` SMALLINT(5) UNSIGNED NOT NULL, - `commit_hash` CHAR(40) NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- Connection log -- --- Logs all connections to the server. -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%connection_log` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `serverip` varchar(45) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` varchar(45) NOT NULL, - `computerid` varchar(32) NOT NULL, - PRIMARY KEY(`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- /datum/character - Character Table -- -CREATE TABLE IF NOT EXISTS `%_PREFIX_%character` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `created` DATETIME NOT NULL DEFAULT Now(), - `last_played` DATETIME NULL, - `last_persisted` DATETIME NULL, - `playerid` INT(11) NOT NULL, - `canonical_name` VARCHAR(128) NOT NULL, - `persist_data` MEDIUMTEXT NULL, - `character_type` VARCHAR(64) NOT NULL, - PRIMARY KEY(`id`), - CONSTRAINT `character_has_player` FOREIGN KEY (`playerid`) - REFERENCES `%_PREFIX_%player` (`id`) - ON DELETE CASCADE - ON UPDATE CASCADE, - UNIQUE (`playerid`, `canonical_name`, `character_type`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%admin` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ckey` varchar(32) NOT NULL, - `rank` varchar(32) NOT NULL DEFAULT 'Administrator', - `level` int(2) NOT NULL DEFAULT '0', - `flags` int(16) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%admin_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `adminckey` varchar(32) NOT NULL, - `adminip` varchar(18) NOT NULL, - `log` text NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%ban` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `bantime` datetime NOT NULL, - `serverip` varchar(32) NOT NULL, - `bantype` varchar(32) NOT NULL, - `reason` text NOT NULL, - `job` varchar(32) DEFAULT NULL, - `duration` int(11) NOT NULL, - `rounds` int(11) DEFAULT NULL, - `expiration_time` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `computerid` varchar(32) NOT NULL, - `ip` varchar(32) NOT NULL, - `a_ckey` varchar(32) NOT NULL, - `a_computerid` varchar(32) NOT NULL, - `a_ip` varchar(32) NOT NULL, - `who` text NOT NULL, - `adminwho` text NOT NULL, - `edits` text, - `unbanned` tinyint(1) DEFAULT NULL, - `unbanned_datetime` datetime DEFAULT NULL, - `unbanned_ckey` varchar(32) DEFAULT NULL, - `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` varchar(32) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%feedback` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `time` datetime NOT NULL, - `round_id` int(8) NOT NULL, - `var_name` varchar(32) NOT NULL, - `var_value` int(16) DEFAULT NULL, - `details` text, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 ; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%poll_option` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `pollid` int(11) NOT NULL, - `text` varchar(255) NOT NULL, - `percentagecalc` tinyint(1) NOT NULL DEFAULT '1', - `minval` int(3) DEFAULT NULL, - `maxval` int(3) DEFAULT NULL, - `descmin` varchar(32) DEFAULT NULL, - `descmid` varchar(32) DEFAULT NULL, - `descmax` varchar(32) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%poll_question` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `polltype` varchar(16) NOT NULL DEFAULT 'OPTION', - `starttime` datetime NOT NULL, - `endtime` datetime NOT NULL, - `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%poll_textreply` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` varchar(18) NOT NULL, - `replytext` text NOT NULL, - `adminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%poll_vote` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `optionid` int(11) NOT NULL, - `ckey` varchar(255) NOT NULL, - `ip` varchar(16) NOT NULL, - `adminrank` varchar(32) NOT NULL, - `rating` int(2) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%privacy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `option` varchar(128) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%death` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `pod` TEXT NOT NULL COMMENT 'Place of death' , - `coord` TEXT NOT NULL COMMENT 'X, Y, Z POD' , - `tod` DATETIME NOT NULL COMMENT 'Time of death' , - `job` TEXT NOT NULL , - `special` TEXT NOT NULL , - `name` TEXT NOT NULL , - `byondkey` TEXT NOT NULL , - `laname` TEXT NOT NULL COMMENT 'Last attacker name' , - `lakey` TEXT NOT NULL COMMENT 'Last attacker key' , - `gender` TEXT NOT NULL , - `bruteloss` INT(11) NOT NULL , - `brainloss` INT(11) NOT NULL , - `fireloss` INT(11) NOT NULL , - `oxyloss` INT(11) NOT NULL , - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%karma` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `spendername` TEXT NOT NULL , - `spenderkey` TEXT NOT NULL , - `receivername` TEXT NOT NULL , - `receiverkey` TEXT NOT NULL , - `receiverrole` TEXT NOT NULL , - `receiverspecial` TEXT NOT NULL , - `isnegative` TINYINT(1) NOT NULL , - `spenderip` TEXT NOT NULL , - `time` DATETIME NOT NULL , - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%karmatotals` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `byondkey` TEXT NOT NULL , - `karma` INT(11) NOT NULL , - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%library` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `author` TEXT NOT NULL , - `title` TEXT NOT NULL , - `content` TEXT NOT NULL , - `category` TEXT NOT NULL , - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE IF NOT EXISTS `%_PREFIX_%population` ( - `id` INT(11) NOT NULL AUTO_INCREMENT , - `playercount` INT(11) NULL DEFAULT NULL , - `admincount` INT(11) NULL DEFAULT NULL , - `time` DATETIME NOT NULL , - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/SQL/unified_schema.sql b/SQL/unified_schema.sql deleted file mode 100644 index 32441c5e22e6..000000000000 --- a/SQL/unified_schema.sql +++ /dev/null @@ -1,17 +0,0 @@ -/** - * make sure to bump schema version and mark changes in database_changelog.md! - * - * you MUST use unified_ as a prefix. - * - * unified schema for citadel, **sync changes to both servers.** - **/ - --- --- Table structure for table `schema_revision` --- -CREATE TABLE IF NOT EXISTS `unified_schema_revision` ( - `major` TINYINT(3) unsigned NOT NULL, - `minor` TINYINT(3) unsigned NOT NULL, - `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`major`, `minor`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/citadel.dme b/citadel.dme index abf6e2030471..7c7f9707d0ac 100644 --- a/citadel.dme +++ b/citadel.dme @@ -51,6 +51,7 @@ #include "code\__DEFINES\fonts.dm" #include "code\__DEFINES\frames.dm" #include "code\__DEFINES\gamemode.dm" +#include "code\__DEFINES\gradient.dm" #include "code\__DEFINES\holidays.dm" #include "code\__DEFINES\holomap.dm" #include "code\__DEFINES\icon_smoothing.dm" @@ -428,7 +429,6 @@ #include "code\__HELPERS\game\turfs\offsets.dm" #include "code\__HELPERS\graphs\astar.dm" #include "code\__HELPERS\icons\alpha.dm" -#include "code\__HELPERS\icons\color.dm" #include "code\__HELPERS\icons\download.dm" #include "code\__HELPERS\icons\flatten.dm" #include "code\__HELPERS\icons\hologram.dm" @@ -686,6 +686,10 @@ #include "code\controllers\subsystem\sound\_sound.dm" #include "code\controllers\subsystem\sound\channel_manager.dm" #include "code\controllers\subsystem\sound\soundbyte_manager.dm" +#include "code\controllers\toml_config\toml_config_entry.dm" +#include "code\controllers\toml_config\toml_configuration.dm" +#include "code\controllers\toml_config\entries\backend.dm" +#include "code\controllers\toml_config\entries\backend.repository.dm" #include "code\datums\ability.dm" #include "code\datums\ability_handler.dm" #include "code\datums\access.dm" @@ -2249,6 +2253,7 @@ #include "code\modules\admin\verbs\debug\fucky_wucky.dm" #include "code\modules\admin\verbs\debug\profiling.dm" #include "code\modules\admin\verbs\debug\reestablish_db_connection.dm" +#include "code\modules\admin\verbs\debug\reload_configuration.dm" #include "code\modules\admin\verbs\debug\spawn.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2.dm" #include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm" @@ -4355,6 +4360,7 @@ #include "code\modules\paperwork\faxmachine_vr.dm" #include "code\modules\paperwork\filingcabinet.dm" #include "code\modules\paperwork\folders.dm" +#include "code\modules\paperwork\folders_premade.dm" #include "code\modules\paperwork\handlabeler.dm" #include "code\modules\paperwork\paper_bundle.dm" #include "code\modules\paperwork\paperbin.dm" diff --git a/code/__DEFINES/controllers/_repository.dm b/code/__DEFINES/controllers/_repository.dm index b2f5702f7524..9f08048dc8d8 100644 --- a/code/__DEFINES/controllers/_repository.dm +++ b/code/__DEFINES/controllers/_repository.dm @@ -7,6 +7,9 @@ //* This is here in [code/__DEFINES/controllers/_repositories.dm] for compile order reasons. *// /datum/controller/subsystem/repository/proc/__init_repositories() +//* This is here in [code/__DEFINES/controllers/_repositories.dm] for compile order reasons. *// +/datum/controller/subsystem/repository/proc/__get_all_repositories() + // todo: redo recover logic; maybe /datum/controller as a whole should be brushed up #define REPOSITORY_DEF(what) \ GLOBAL_REAL(RS##what, /datum/controller/repository/##what); \ @@ -27,4 +30,12 @@ GLOBAL_REAL(RS##what, /datum/controller/repository/##what); \ ..(); \ RS##what.Initialize(); \ } \ +/datum/controller/subsystem/repository/__get_all_repositories() { \ + . = ..(); \ + . += RS##what; \ +} \ /datum/controller/repository/##what + +/// Returned from /datum/controller/repository's fetch_or_defer() if we don't have something +/// on hand, but also don't know that it doesn't exist. +#define REPOSITORY_FETCH_DEFER "defer" diff --git a/code/__DEFINES/controllers/dbcore.dm b/code/__DEFINES/controllers/dbcore.dm index afc6709805cc..19df14d5588f 100644 --- a/code/__DEFINES/controllers/dbcore.dm +++ b/code/__DEFINES/controllers/dbcore.dm @@ -17,6 +17,11 @@ */ #define DB_MINOR_VERSION 3 +//* Tables *// + +/// Prefixes are currently disabled. +#define DB_PREFIX_TABLE_NAME(TABLE) TABLE + //* Misc *// /// pass this into duplicate_key on mass_insert() to overwrite old values diff --git a/code/__DEFINES/gradient.dm b/code/__DEFINES/gradient.dm new file mode 100644 index 000000000000..573a339880b9 --- /dev/null +++ b/code/__DEFINES/gradient.dm @@ -0,0 +1,4 @@ +// spacemandmm doesn't really implement gradient() right, so let's just handle that here yeah? +#define rgb_gradient(index, args...) UNLINT(gradient(args, index)) +#define hsl_gradient(index, args...) UNLINT(gradient(args, space = COLORSPACE_HSL, index)) +#define hsv_gradient(index, args...) UNLINT(gradient(args, space = COLORSPACE_HSV, index)) diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index 36b814968752..cfb41fa39325 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -15,25 +15,36 @@ // On Windows, looks in the standard places for `rust_g.dll`. // On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of // `librust_g.so` (preferred) or `rust_g` (old). +// On OpenDream, `rust_g64.dll` / `librust_g64.so` are used instead. /* This comment bypasses grep checks */ /var/__rust_g +#ifndef OPENDREAM +#define RUST_G_BASE "rust_g" +#else +#define RUST_G_BASE "rust_g64" +#endif + /proc/__detect_rust_g() if (world.system_type == UNIX) - if (fexists("./librust_g.so")) + if (fexists("./lib[RUST_G_BASE].so")) // No need for LD_LIBRARY_PATH badness. - return __rust_g = "./librust_g.so" - else if (fexists("./rust_g")) + return __rust_g = "./lib[RUST_G_BASE].so" +#ifndef OPENDREAM + else if (fexists("./[RUST_G_BASE]")) // Old dumb filename. - return __rust_g = "./rust_g" - else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g")) + return __rust_g = "./[RUST_G_BASE]" + else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/[RUST_G_BASE]")) // Old dumb filename in `~/.byond/bin`. - return __rust_g = "rust_g" + return __rust_g = RUST_G_BASE +#endif else // It's not in the current directory, so try others - return __rust_g = "librust_g.so" + return __rust_g = "lib[RUST_G_BASE].so" else - return __rust_g = "rust_g" + return __rust_g = RUST_G_BASE + +#undef RUST_G_BASE #define RUST_G (__rust_g || __detect_rust_g()) #endif @@ -135,7 +146,7 @@ #define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) #define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname) -#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname) +#define rustg_file_exists(fname) (RUSTG_CALL(RUST_G, "file_exists")(fname) == "true") #define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname) #define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname) #define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname)) @@ -146,35 +157,15 @@ #define text2file(text, fname) rustg_file_append(text, "[fname]") #endif -/** - * Please see code/datums/math/vec2.dm. - */ -#define rustg_geometry_delaunay_triangulate_to_graph(point_json) RUSTG_CALL(RUST_G, "geometry_delaunay_triangulate_to_graph")(point_json) +/// Returns the git hash of the given revision, ex. "HEAD". +#define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev) /** - * Please see code/datums/math/vec2.dm. + * Returns the date of the given revision in the format YYYY-MM-DD. + * Returns null if the revision is invalid. */ -#define rustg_geometry_delaunay_voronoi_graph(packed) RUSTG_CALL(RUST_G, "geometry_delaunay_voronoi_graph")(packed) - -#define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev) #define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev) -#define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text) -#define rustg_hash_file(algorithm, fname) RUSTG_CALL(RUST_G, "hash_file")(algorithm, fname) -#define rustg_hash_generate_totp(seed) RUSTG_CALL(RUST_G, "generate_totp")(seed) -#define rustg_hash_generate_totp_tolerance(seed, tolerance) RUSTG_CALL(RUST_G, "generate_totp_tolerance")(seed, tolerance) - -#define RUSTG_HASH_MD5 "md5" -#define RUSTG_HASH_SHA1 "sha1" -#define RUSTG_HASH_SHA256 "sha256" -#define RUSTG_HASH_SHA512 "sha512" -#define RUSTG_HASH_XXH64 "xxh64" -#define RUSTG_HASH_BASE64 "base64" - -#ifdef RUSTG_OVERRIDE_BUILTINS - #define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing)) -#endif - #define RUSTG_HTTP_METHOD_GET "get" #define RUSTG_HTTP_METHOD_PUT "put" #define RUSTG_HTTP_METHOD_DELETE "delete" @@ -196,6 +187,74 @@ #define rustg_noise_get_at_coordinates(seed, x, y) RUSTG_CALL(RUST_G, "noise_get_at_coordinates")(seed, x, y) +#define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options) +#define rustg_sql_query_async(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_async")(handle, query, params) +#define rustg_sql_query_blocking(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_blocking")(handle, query, params) +#define rustg_sql_connected(handle) RUSTG_CALL(RUST_G, "sql_connected")(handle) +#define rustg_sql_disconnect_pool(handle) RUSTG_CALL(RUST_G, "sql_disconnect_pool")(handle) +#define rustg_sql_check_query(job_id) RUSTG_CALL(RUST_G, "sql_check_query")("[job_id]") + +#define rustg_time_microseconds(id) text2num(RUSTG_CALL(RUST_G, "time_microseconds")(id)) +#define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id)) +#define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id) + +/// Returns the timestamp as a string +/proc/rustg_unix_timestamp() + return RUSTG_CALL(RUST_G, "unix_timestamp")() + +#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null") + +/proc/rustg_read_toml_file(path) + var/list/output = rustg_raw_read_toml_file(path) + if (output["success"]) + return json_decode(output["content"]) + else + CRASH(output["content"]) + +#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value))) + +/proc/rustg_toml_encode(value) + var/list/output = rustg_raw_toml_encode(value) + if (output["success"]) + return output["content"] + else + CRASH(output["content"]) + +#define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]") +#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text) + +#ifdef RUSTG_OVERRIDE_BUILTINS + #define url_encode(text) rustg_url_encode(text) + #define url_decode(text) rustg_url_decode(text) +#endif + +//! Citadel rust-g addons +/** + * Please see code/datums/math/vec2.dm. + */ +#define rustg_geometry_delaunay_triangulate_to_graph(point_json) RUSTG_CALL(RUST_G, "geometry_delaunay_triangulate_to_graph")(point_json) + +/** + * Please see code/datums/math/vec2.dm. + */ +#define rustg_geometry_delaunay_voronoi_graph(packed) RUSTG_CALL(RUST_G, "geometry_delaunay_voronoi_graph")(packed) + +#define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text) +#define rustg_hash_file(algorithm, fname) RUSTG_CALL(RUST_G, "hash_file")(algorithm, fname) +#define rustg_hash_generate_totp(seed) RUSTG_CALL(RUST_G, "generate_totp")(seed) +#define rustg_hash_generate_totp_tolerance(seed, tolerance) RUSTG_CALL(RUST_G, "generate_totp_tolerance")(seed, tolerance) + +#define RUSTG_HASH_MD5 "md5" +#define RUSTG_HASH_SHA1 "sha1" +#define RUSTG_HASH_SHA256 "sha256" +#define RUSTG_HASH_SHA512 "sha512" +#define RUSTG_HASH_XXH64 "xxh64" +#define RUSTG_HASH_BASE64 "base64" + +#ifdef RUSTG_OVERRIDE_BUILTINS + #define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing)) +#endif + /** * Register a list of nodes into a rust library. This list of nodes must have been serialized in a json. * Node {// Index of this node in the list of nodes @@ -275,65 +334,3 @@ * Note: `count` was added in Redis version 6.2.0 */ #define rustg_redis_lpop(key, count) RUSTG_CALL(RUST_G, "redis_lpop")(key, count) - -#define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options) -#define rustg_sql_query_async(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_async")(handle, query, params) -#define rustg_sql_query_blocking(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_blocking")(handle, query, params) -#define rustg_sql_connected(handle) RUSTG_CALL(RUST_G, "sql_connected")(handle) -#define rustg_sql_disconnect_pool(handle) RUSTG_CALL(RUST_G, "sql_disconnect_pool")(handle) -#define rustg_sql_check_query(job_id) RUSTG_CALL(RUST_G, "sql_check_query")("[job_id]") - -#define rustg_time_microseconds(id) text2num(RUSTG_CALL(RUST_G, "time_microseconds")(id)) -#define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id)) -#define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id) - -/// Returns the timestamp as a string -/proc/rustg_unix_timestamp() - return RUSTG_CALL(RUST_G, "unix_timestamp")() - -#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null") - -/proc/rustg_read_toml_file(path) - var/list/output = rustg_raw_read_toml_file(path) - if (output["success"]) - return json_decode(output["content"]) - else - CRASH(output["content"]) - -#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value))) - -/proc/rustg_toml_encode(value) - var/list/output = rustg_raw_toml_encode(value) - if (output["success"]) - return output["content"] - else - CRASH(output["content"]) - -#define rustg_unzip_download_async(url, unzip_directory) RUSTG_CALL(RUST_G, "unzip_download_async")(url, unzip_directory) -#define rustg_unzip_check(job_id) RUSTG_CALL(RUST_G, "unzip_check")("[job_id]") - -#define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]") -#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text) - -#ifdef RUSTG_OVERRIDE_BUILTINS - #define url_encode(text) rustg_url_encode(text) - #define url_decode(text) rustg_url_decode(text) -#endif - -/** - * This proc generates a noise grid using worley noise algorithm - * - * Returns a single string that goes row by row, with values of 1 representing an alive cell, and a value of 0 representing a dead cell. - * - * Arguments: - * * region_size: The size of regions - * * threshold: the value that determines wether a cell is dead or alive - * * node_per_region_chance: chance of a node existiing in a region - * * size: size of the returned grid - * * node_min: minimum amount of nodes in a region (after the node_per_region_chance is applied) - * * node_max: maximum amount of nodes in a region - */ -#define rustg_worley_generate(region_size, threshold, node_per_region_chance, size, node_min, node_max) \ - RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max) - - diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 7b1d6e8a71af..44c21c2b069d 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -18,98 +18,88 @@ remember you first need to setup an /icon var like so: GLOBAL_DATUM_INIT(my_icon, /icon, new('iconfile.dmi')) icon/ChangeOpacity(amount = 1) - A very common operation in DM is to try to make an icon more or less transparent. Making an icon more - transparent is usually much easier than making it less so, however. This proc basically is a frontend - for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() - can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. - If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. + A very common operation in DM is to try to make an icon more or less transparent. Making an icon more + transparent is usually much easier than making it less so, however. This proc basically is a frontend + for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() + can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. + If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. +icon/GrayScale() + Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact. icon/ColorTone(tone) - Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an - RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. - See also the global ColorTone() proc. + Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an + RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. + See also the global ColorTone() proc. icon/MinColors(icon) - The icon is blended with a second icon where the minimum of each RGB pixel is the result. - Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. + The icon is blended with a second icon where the minimum of each RGB pixel is the result. + Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. icon/MaxColors(icon) - The icon is blended with a second icon where the maximum of each RGB pixel is the result. - Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. -icon/Opaque(background = "#000000") - All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. + The icon is blended with a second icon where the maximum of each RGB pixel is the result. + Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. +icon/Opaque(background = COLOR_BLACK) + All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. icon/BecomeAlphaMask() - You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. - The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. + You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. + The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. icon/AddAlphaMask(mask) - The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, - the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. - Where the mask is translucent, the current icon becomes more transparent. + The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, + the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. + Where the mask is translucent, the current icon becomes more transparent. icon/UseAlphaMask(mask, mode) - Sometimes you may want to take the alpha values from one icon and use them on a different icon. - This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change - so it has the same colors as before but uses the mask for opacity. + Sometimes you may want to take the alpha values from one icon and use them on a different icon. + This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change + so it has the same colors as before but uses the mask for opacity. COLOR MANAGEMENT AND HSV RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. - * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to - cyan to blue to magenta and back to red. - * The saturation of a color is how much color is in it. A color with low saturation will be more gray, - and with no saturation at all it is a shade of gray. - * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, - and no value at all is black. + * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to + cyan to blue to magenta and back to red. + * The saturation of a color is how much color is in it. A color with low saturation will be more gray, + and with no saturation at all it is a shade of gray. + * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, + and no value at all is black. -Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three -hex digits because it ranges from 0 to 0x5FF. +While rgb is typically stored in the #rrggbb" format (with optional "aa" on the end), HSV never needs to be displayed. +Most procs that work in HSV "space" will simply accept RGB inputs and convert them in place using rgb2num(color, space = COLORSPACE_HSV). - * 0 to 0xFF - red to yellow - * 0x100 to 0x1FF - yellow to green - * 0x200 to 0x2FF - green to cyan - * 0x300 to 0x3FF - cyan to blue - * 0x400 to 0x4FF - blue to magenta - * 0x500 to 0x5FF - magenta to red +That said, if you want to manually modify these values rgb2hsv() will hand you back a list in the format list(hue, saturation, value, alpha). +Converting back is simple, just a hsv2rgb(hsv) call -Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), -value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". +Hue ranges from 0 to 360 (it's in degrees of a color wheel) +Saturation ranges from 0 to 100 +Value ranges from 0 to 100 -More than one HSV color can match the same RGB color. +Knowing this, you can figure out that red is list(0, 100, 100) in HSV format, which is hue 0 (red), saturation 100 (as colorful as possible), +value 255 (as bright as possible). Green is list(120, 100, 100) and blue is list(240, 100, 100). + +It is worth noting that while we do not have helpers for them currently, these same ideas apply to all of byond's color spaces +HSV (hue saturation value), HSL (hue satriation luminosity) and HCY (hue chroma luminosity) Here are some procs you can use for color management: -ReadRGB(rgb) - Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used - that includes alpha, the list will have a fourth item for the alpha value. -hsv(hue, sat, val, apha) - Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" - format. Alpha is not included in the result if null. -ReadHSV(rgb) - Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that - includes alpha, the list will have a fourth item for the alpha value. -RGBtoHSV(rgb) - Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". -HSVtoRGB(hsv) - Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". BlendRGB(rgb1, rgb2, amount) - Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; - if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an RGB or RGBA color. -BlendHSV(hsv1, hsv2, amount) - Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB - blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, - the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an HSV or HSVA color. -BlendRGBasHSV(rgb1, rgb2, amount) - Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. + Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; + if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. + Returns an RGB or RGBA string +BlendHSV(rgb1, rgb2, amount) + Blends between two RGB or RGBA colors using HSV blending, which tends to produce nicer results than regular RGB + blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, + the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. + Returns an RGB or RGBA string HueToAngle(hue) - Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. + Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. AngleToHue(hue) - Converts an angle to a hue in the valid range. -RotateHue(hsv, angle) - Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. - (Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value - as the original, but a different hue. + Converts an angle to a hue in the valid range. +RotateHue(rgb, angle) + Takes an RGB or RGBA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. + (Rotating red by 60° produces yellow.) + Returns an RGB or RGBA string +GrayScale(rgb) + Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. ColorTone(rgb, tone) - Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of - using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. + Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of + using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. */ #define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) @@ -124,14 +114,18 @@ ColorTone(rgb, tone) Shift(SOUTH,6) Shift(EAST,1) - // Multiply all alpha values by this float +// Multiply all alpha values by this float /icon/proc/ChangeOpacity(opacity = 1) MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) +// Convert to grayscale +/icon/proc/GrayScale() + MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0) + /icon/proc/ColorTone(tone) - greyscale() + GrayScale() - var/list/TONE = ReadRGB(tone) + var/list/TONE = rgb2num(tone) var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) var/icon/upper = (255-gray) ? new(src) : null @@ -147,36 +141,36 @@ ColorTone(rgb, tone) // Take the minimum color of two icons; combine transparency as if blending with ICON_ADD /icon/proc/MinColors(icon) - var/icon/I = new(src) - I.Opaque() - I.Blend(icon, ICON_SUBTRACT) - Blend(I, ICON_SUBTRACT) + var/icon/new_icon = new(src) + new_icon.Opaque() + new_icon.Blend(icon, ICON_SUBTRACT) + Blend(new_icon, ICON_SUBTRACT) // Take the maximum color of two icons; combine opacity as if blending with ICON_OR /icon/proc/MaxColors(icon) - var/icon/I + var/icon/new_icon if(isicon(icon)) - I = new(icon) + new_icon = new(icon) else // solid color - I = new(src) - I.Blend("#000000", ICON_OVERLAY) - I.SwapColor("#000000", null) - I.Blend(icon, ICON_OVERLAY) - var/icon/J = new(src) - J.Opaque() - I.Blend(J, ICON_SUBTRACT) - Blend(I, ICON_OR) + new_icon = new(src) + new_icon.Blend(COLOR_BLACK, ICON_OVERLAY) + new_icon.SwapColor(COLOR_BLACK, null) + new_icon.Blend(icon, ICON_OVERLAY) + var/icon/blend_icon = new(src) + blend_icon.Opaque() + new_icon.Blend(blend_icon, ICON_SUBTRACT) + Blend(new_icon, ICON_OR) // make this icon fully opaque--transparent pixels become black -/icon/proc/Opaque(background = "#000000") +/icon/proc/Opaque(background = COLOR_BLACK) SwapColor(null, background) MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1) // Change a grayscale icon into a white icon where the original color becomes the alpha // I.e., black -> transparent, gray -> translucent white, white -> solid white /icon/proc/BecomeAlphaMask() - SwapColor(null, "#000000ff") // don't let transparent become gray + SwapColor(null, "#000000ff") // don't let transparent become gray MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) /icon/proc/UseAlphaMask(mask) @@ -184,254 +178,29 @@ ColorTone(rgb, tone) AddAlphaMask(mask) /icon/proc/AddAlphaMask(mask) - var/icon/M = new(mask) - M.Blend("#ffffff", ICON_SUBTRACT) + var/icon/mask_icon = new(mask) + mask_icon.Blend("#ffffff", ICON_SUBTRACT) // apply mask - Blend(M, ICON_ADD) + Blend(mask_icon, ICON_ADD) + +/// Converts an rgb color into a list storing hsva +/// Exists because it's useful to have a guaranteed alpha value +/proc/rgb2hsv(rgb) + var/list/hsv = rgb2num(rgb, COLORSPACE_HSV) + if(length(hsv) < 4) + hsv += 255 // Max alpha, just to make life easy + return hsv + +/// Converts a list storing hsva into an rgb color +/proc/hsv2rgb(hsv) + if(length(hsv) < 3) + return COLOR_BLACK + if(length(hsv) == 3) + return rgb(hsv[1], hsv[2], hsv[3], space = COLORSPACE_HSV) + return rgb(hsv[1], hsv[2], hsv[3], hsv[4], space = COLORSPACE_HSV) /* - HSV format is represented as "#hhhssvv" or "#hhhssvvaa" - - Hue ranges from 0 to 0x5ff (1535) - - 0x000 = red - 0x100 = yellow - 0x200 = green - 0x300 = cyan - 0x400 = blue - 0x500 = magenta - - Saturation is from 0 to 0xff (255) - - More saturation = more color - Less saturation = more gray - - Value ranges from 0 to 0xff (255) - - Higher value means brighter color - */ - -/** - * reads RGB or RGBA values to list - * @return list(r, g, b) or list(r, g, b, a), values 0 to 255. - */ -/proc/ReadRGB(rgb) - if(!rgb) - return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(rgb) == 35) ++start // skip opening # - var/ch,which=0,r=0,g=0,b=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(rgb), ++i) - ch = text2ascii(rgb, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) - break - ++digits - if(digits == 8) - break - - var/single = digits < 6 - if(digits != 3 && digits != 4 && digits != 6 && digits != 8) - return - if(digits == 4 || digits == 8) - usealpha = 1 - for(i=start, digits>0, ++i) - ch = text2ascii(rgb, i) - if(ch >= 48 && ch <= 57) - ch -= 48 - else if(ch >= 65 && ch <= 70) - ch -= 55 - else if(ch >= 97 && ch <= 102) - ch -= 87 - else - break - --digits - switch(which) - if(0) - r = (r << 4) | ch - if(single) - r |= r << 4 - ++which - else if(!(digits & 1)) - ++which - if(1) - g = (g << 4) | ch - if(single) - g |= g << 4 - ++which - else if(!(digits & 1)) - ++which - if(2) - b = (b << 4) | ch - if(single) - b |= b << 4 - ++which - else if(!(digits & 1)) - ++which - if(3) - alpha = (alpha << 4) | ch - if(single) - alpha |= alpha << 4 - - . = list(r, g, b) - if(usealpha) - . += alpha - -/proc/ReadHSV(hsv) - if(!hsv) - return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(hsv) == 35) - ++start // skip opening # - var/ch,which=0,hue=0,sat=0,val=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(hsv), ++i) - ch = text2ascii(hsv, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) - break - ++digits - if(digits == 9) - break - if(digits > 7) - usealpha = 1 - if(digits <= 4) - ++which - if(digits <= 2) - ++which - for(i=start, digits>0, ++i) - ch = text2ascii(hsv, i) - if(ch >= 48 && ch <= 57) - ch -= 48 - else if(ch >= 65 && ch <= 70) - ch -= 55 - else if(ch >= 97 && ch <= 102) - ch -= 87 - else - break - --digits - switch(which) - if(0) - hue = (hue << 4) | ch - if(digits == (usealpha ? 6 : 4)) - ++which - if(1) - sat = (sat << 4) | ch - if(digits == (usealpha ? 4 : 2)) - ++which - if(2) - val = (val << 4) | ch - if(digits == (usealpha ? 2 : 0)) - ++which - if(3) - alpha = (alpha << 4) | ch - - . = list(hue, sat, val) - if(usealpha) - . += alpha - -/proc/HSVtoRGB(hsv) - if(!hsv) - return "#000000" - var/list/HSV = ReadHSV(hsv) - if(!HSV) - return "#000000" - - var/hue = HSV[1] - var/sat = HSV[2] - var/val = HSV[3] - - // Compress hue into easier-to-manage range - hue -= hue >> 8 - if(hue >= 0x5fa) - hue -= 0x5fa - - var/hi,mid,lo,r,g,b - hi = val - lo = round((255 - sat) * val / 255, 1) - mid = lo + round(abs(round(hue, 510) - hue) * (hi - lo) / 255, 1) - if(hue >= 765) - if(hue >= 1275) {r=hi; g=lo; b=mid} - else if(hue >= 1020) {r=mid; g=lo; b=hi } - else {r=lo; g=mid; b=hi } - else - if(hue >= 510) {r=lo; g=hi; b=mid} - else if(hue >= 255) {r=mid; g=hi; b=lo } - else {r=hi; g=mid; b=lo } - - return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) - -/proc/RGBtoHSV(rgb) - if(!rgb) - return "#0000000" - var/list/RGB = ReadRGB(rgb) - if(!RGB) - return "#0000000" - - var/r = RGB[1] - var/g = RGB[2] - var/b = RGB[3] - var/hi = max(r,g,b) - var/lo = min(r,g,b) - - var/val = hi - var/sat = hi ? round((hi-lo) * 255 / hi, 1) : 0 - var/hue = 0 - - if(sat) - var/dir - var/mid - if(hi == r) - if(lo == b) {hue=0; dir=1; mid=g} - else {hue=1535; dir=-1; mid=b} - else if(hi == g) - if(lo == r) {hue=512; dir=1; mid=b} - else {hue=511; dir=-1; mid=r} - else if(hi == b) - if(lo == g) {hue=1024; dir=1; mid=r} - else {hue=1023; dir=-1; mid=g} - hue += dir * round((mid-lo) * 255 / (hi-lo), 1) - - return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) - -/proc/hsv(hue, sat, val, alpha) - if(hue < 0 || hue >= 1536) - hue %= 1536 - if(hue < 0) - hue += 1536 - if((hue & 0xFF) == 0xFF) - ++hue - if(hue >= 1536) - hue = 0 - if(sat < 0) - sat = 0 - if(sat > 255) - sat = 255 - if(val < 0) - val = 0 - if(val > 255) - val = 255 - . = "#" - . += TO_HEX_DIGIT(hue >> 8) - . += TO_HEX_DIGIT(hue >> 4) - . += TO_HEX_DIGIT(hue) - . += TO_HEX_DIGIT(sat >> 4) - . += TO_HEX_DIGIT(sat) - . += TO_HEX_DIGIT(val >> 4) - . += TO_HEX_DIGIT(val) - if(!isnull(alpha)) - if(alpha < 0) - alpha = 0 - if(alpha > 255) - alpha = 255 - . += TO_HEX_DIGIT(alpha >> 4) - . += TO_HEX_DIGIT(alpha) - -/* - Smooth blend between HSV colors + Smooth blend between RGB colors interpreted as HSV amount=0 is the first color amount=1 is the second color @@ -440,63 +209,7 @@ ColorTone(rgb, tone) amount<0 or amount>1 are allowed */ /proc/BlendHSV(hsv1, hsv2, amount) - var/list/HSV1 = ReadHSV(hsv1) - var/list/HSV2 = ReadHSV(hsv2) - - // add missing alpha if needed - if(HSV1.len < HSV2.len) - HSV1 += 255 - else if(HSV2.len < HSV1.len) - HSV2 += 255 - var/usealpha = HSV1.len > 3 - - // normalize hsv values in case anything is screwy - if(HSV1[1] > 1536) - HSV1[1] %= 1536 - if(HSV2[1] > 1536) - HSV2[1] %= 1536 - if(HSV1[1] < 0) - HSV1[1] += 1536 - if(HSV2[1] < 0) - HSV2[1] += 1536 - if(!HSV1[3]) {HSV1[1] = 0; HSV1[2] = 0} - if(!HSV2[3]) {HSV2[1] = 0; HSV2[2] = 0} - - // no value for one color means don't change saturation - if(!HSV1[3]) - HSV1[2] = HSV2[2] - if(!HSV2[3]) - HSV2[2] = HSV1[2] - // no saturation for one color means don't change hues - if(!HSV1[2]) - HSV1[1] = HSV2[1] - if(!HSV2[2]) - HSV2[1] = HSV1[1] - - // Compress hues into easier-to-manage range - HSV1[1] -= HSV1[1] >> 8 - HSV2[1] -= HSV2[1] >> 8 - - var/hue_diff = HSV2[1] - HSV1[1] - if(hue_diff > 765) - hue_diff -= 1530 - else if(hue_diff <= -765) - hue_diff += 1530 - - var/hue = round(HSV1[1] + hue_diff * amount, 1) - var/sat = round(HSV1[2] + (HSV2[2] - HSV1[2]) * amount, 1) - var/val = round(HSV1[3] + (HSV2[3] - HSV1[3]) * amount, 1) - var/alpha = usealpha ? round(HSV1[4] + (HSV2[4] - HSV1[4]) * amount, 1) : null - - // normalize hue - if(hue < 0 || hue >= 1530) - hue %= 1530 - if(hue < 0) - hue += 1530 - // decompress hue - hue += round(hue / 255) - - return hsv(hue, sat, val, alpha) + return hsv_gradient(amount, 0, hsv1, 1, hsv2, "loop") /* Smooth blend between RGB colors @@ -508,25 +221,7 @@ ColorTone(rgb, tone) amount<0 or amount>1 are allowed */ /proc/BlendRGB(rgb1, rgb2, amount) - var/list/RGB1 = ReadRGB(rgb1) - var/list/RGB2 = ReadRGB(rgb2) - - // add missing alpha if needed - if(RGB1.len < RGB2.len) - RGB1 += 255 - else if(RGB2.len < RGB1.len) - RGB2 += 255 - var/usealpha = RGB1.len > 3 - - var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) - var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) - var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) - var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null - - return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) - -/proc/BlendRGBasHSV(rgb1, rgb2, amount) - return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) + return rgb_gradient(amount, 0, rgb1, 1, rgb2, "loop") /proc/HueToAngle(hue) // normalize hsv in case anything is screwy @@ -547,10 +242,9 @@ ColorTone(rgb, tone) hue += round(hue / 255) return hue - // positive angle rotates forward through red->green->blue -/proc/RotateHue(hsv, angle) - var/list/HSV = ReadHSV(hsv) +/proc/RotateHue(rgb, angle) + var/list/HSV = rgb2hsv(rgb) // normalize hsv in case anything is screwy if(HSV[1] >= 1536) @@ -573,18 +267,24 @@ ColorTone(rgb, tone) // decompress hue HSV[1] += round(HSV[1] / 255) - return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) + return hsv2rgb(HSV) + +// Convert an rgb color to grayscale +/proc/GrayScale(rgb) + var/list/RGB = rgb2num(rgb) + var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 + return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) // Change grayscale color to black->tone->white range /proc/ColorTone(rgb, tone) - var/list/RGB = ReadRGB(rgb) - var/list/TONE = ReadRGB(tone) + var/list/RGB = rgb2num(rgb) + var/list/TONE = rgb2num(tone) var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11 if(gray <= tone_gray) - return BlendRGB("#000000", tone, gray/(tone_gray || 1)) + return BlendRGB(COLOR_BLACK, tone, gray/(tone_gray || 1)) else return BlendRGB(tone, "#ffffff", (gray-tone_gray)/((255-tone_gray) || 1)) @@ -603,45 +303,45 @@ ColorTone(rgb, tone) var/lo3 = text2ascii(hex, 7) // B var/hi4 = text2ascii(hex, 8) // A var/lo4 = text2ascii(hex, 9) // A - return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48), + return list(((hi1 >= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48), ((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48), ((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48), ((hi4 >= 65 ? hi4-55 : hi4-48)<<4) | (lo4 >= 65 ? lo4-55 : lo4-48)) -/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N - var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. - for(var/V in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. - var/image/I = V - if(I.layer>A.layer) +/proc/getIconMask(atom/atom_to_mask)//By yours truly. Creates a dynamic mask for a mob/whatever. /N + var/icon/alpha_mask = new(atom_to_mask.icon, atom_to_mask.icon_state)//So we want the default icon and icon state of atom_to_mask. + for(var/iterated_image in atom_to_mask.overlays)//For every image in overlays. var/image/image will not work, don't try it. + var/image/image = iterated_image + if(image.layer > atom_to_mask.layer) continue//If layer is greater than what we need, skip it. - var/icon/image_overlay = new(I.icon,I.icon_state)//Blend only works with icon objects. + var/icon/image_overlay = new(image.icon, image.icon_state)//Blend only works with icon objects. //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. - alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. + alpha_mask.Blend(image_overlay, ICON_OR)//OR so they are lumped together in a nice overlay. return alpha_mask//And now return the mask. /mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. //Now we need to culculate overlays+underlays and add them together to form an image for a mask. - var/icon/alpha_mask = getIconMask(src)//get_flat_icon(src) is accurate but SLOW. Not designed for running each tick. This is also a little slow since it's blending a bunch of icons together but good enough. + var/icon/alpha_mask = getIconMask(src)//getFlatIcon(src) is accurate but SLOW. Not designed for running each tick. This is also a little slow since it's blending a bunch of icons together but good enough. opacity_icon.AddAlphaMask(alpha_mask)//Likely the main source of lag for this proc. Probably not designed to run each tick. opacity_icon.ChangeOpacity(0.4)//Front end for MapColors so it's fast. 0.5 means half opacity and looks the best in my opinion. - for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it. - var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. + for(var/i in 1 to 5)//And now we add it as overlays. It's faster than creating an icon and then merging it. + var/image/camo_image = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. switch(i)//Now to determine offset so the result is somewhat blurred. - if(1) - I.pixel_x-- if(2) - I.pixel_x++ + camo_image.pixel_x-- if(3) - I.pixel_y-- + camo_image.pixel_x++ if(4) - I.pixel_y++ - add_overlay(I)//And finally add the overlay. + camo_image.pixel_y-- + if(5) + camo_image.pixel_y++ + add_overlay(camo_image)//And finally add the overlay. -/proc/getHologramIcon(icon/A, safety = TRUE)//If safety is on, a new icon is not created. +/proc/getHologramIcon(icon/A, safety = TRUE, opacity = 0.5)//If safety is on, a new icon is not created. var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. // flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - // flat_icon.ChangeOpacity(0.5)//Make it half transparent. + // flat_icon.ChangeOpacity(opacity) var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect. flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. return flat_icon @@ -691,7 +391,7 @@ ColorTone(rgb, tone) letter = lowertext(letter) var/image/text_image = new(loc = A) - text_image.maptext = "[letter]" + text_image.maptext = MAPTEXT("[letter]") text_image.pixel_x = 7 text_image.pixel_y = 5 qdel(atom_icon) @@ -724,64 +424,53 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) */ //Interface for using DrawBox() to draw 1 pixel on a coordinate. //Returns the same icon specifed in the argument, but with the pixel drawn -/proc/DrawPixel(icon/I,colour,drawX,drawY) - if(!I) +/proc/DrawPixel(icon/icon_to_use, colour, drawX, drawY) + if(!icon_to_use) return 0 - var/Iwidth = I.Width() - var/Iheight = I.Height() + var/icon_width = icon_to_use.Width() + var/icon_height = icon_to_use.Height() - if(drawX > Iwidth || drawX <= 0) + if(drawX > icon_width || drawX <= 0) return 0 - if(drawY > Iheight || drawY <= 0) + if(drawY > icon_height || drawY <= 0) return 0 - I.DrawBox(colour,drawX, drawY) - return I - + icon_to_use.DrawBox(colour, drawX, drawY) + return icon_to_use //Interface for easy drawing of one pixel on an atom. /atom/proc/DrawPixelOn(colour, drawX, drawY) - var/icon/I = new(icon) - var/icon/J = DrawPixel(I, colour, drawX, drawY) - if(J) //Only set the icon if it succeeded, the icon without the pixel is 1000x better than a black square. - icon = J - return J - return 0 -/* -//For creating consistent icons for human looking simple animals -/proc/get_flat_human_icon(icon_id, datum/role/job/J, datum/preferences/prefs, dummy_key, showDirs = GLOB.cardinals, outfit_override = null) - var/static/list/humanoid_icon_cache = list() - if(!icon_id || !humanoid_icon_cache[icon_id]) - var/mob/living/carbon/human/dummy/body = generate_or_wait_for_human_dummy(dummy_key) - - if(prefs) - prefs.copy_to(body,TRUE,FALSE) - if(J) - J.equip(body, TRUE, FALSE, outfit_override = outfit_override) - else if (outfit_override) - body.equipOutfit(outfit_override,visualsOnly = TRUE) - - - var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing") - for(var/D in showDirs) - body.setDir(D) - body.compile_overlays() - var/icon/partial = get_flat_icon(body) - out_icon.Insert(partial,dir=D) - - humanoid_icon_cache[icon_id] = out_icon - dummy_key? unset_busy_human_dummy(dummy_key) : qdel(body) - return out_icon - else - return humanoid_icon_cache[icon_id] -*/ + var/icon/icon_one = new(icon) + var/icon/result = DrawPixel(icon_one, colour, drawX, drawY) + if(result) //Only set the icon if it succeeded, the icon without the pixel is 1000x better than a black square. + icon = result + return result + return FALSE + //Hook, override to run code on- wait this is images //Images have dir without being an atom, so they get their own definition. //Lame. /image/proc/setDir(newdir) dir = newdir +/// Gets a dummy savefile for usage in icon generation. +/// Savefiles generated from this proc will be empty. +/proc/get_dummy_savefile(from_failure = FALSE) + var/static/next_id = 0 + if(next_id++ > 9) + next_id = 0 + var/savefile_path = "tmp/dummy-save-[next_id].sav" + try + if(fexists(savefile_path)) + fdel(savefile_path) + return new /savefile(savefile_path) + catch(var/exception/error) + // if we failed to create a dummy once, try again; maybe someone slept somewhere they shouldn't have + if(from_failure) // this *is* the retry, something fucked up + CRASH("get_dummy_savefile failed to create a dummy savefile: '[error]'") + return get_dummy_savefile(from_failure = TRUE) + /** * Converts an icon to base64. Operates by putting the icon in the iconCache savefile, * exporting it as text, and then parsing the base64 from that. @@ -790,21 +479,31 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) /proc/icon2base64(icon/icon) if (!isicon(icon)) return FALSE - var/savefile/dummySave = new("tmp/dummySave.sav") + var/savefile/dummySave = get_dummy_savefile() WRITE_FILE(dummySave["dummy"], icon) var/iconData = dummySave.ExportText("dummy") var/list/partial = splittext(iconData, "{") - . = replacetext(copytext_char(partial[2], 3, -5), "\n", "") //if cleanup fails we want to still return the correct base64 - dummySave.Unlock() - dummySave = null - fdel("tmp/dummySave.sav") //if you get the idea to try and make this more optimized, make sure to still call unlock on the savefile after every write to unlock it. + return replacetext(copytext_char(partial[2], 3, -5), "\n", "") //if cleanup fails we want to still return the correct base64 -/proc/icon2html(thing, target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null) +/** + * generate an asset for the given icon or the icon of the given appearance for [thing], and send it to any clients in target. + * Arguments: + * * thing - either a /icon object, or an object that has an appearance (atom, image, mutable_appearance). + * * target - either a reference to or a list of references to /client's or mobs with clients + * * icon_state - string to force a particular icon_state for the icon to be used + * * dir - dir number to force a particular direction for the icon to be used + * * frame - what frame of the icon_state's animation for the icon being used + * * moving - whether or not to use a moving state for the given icon + * * sourceonly - if TRUE, only generate the asset and send back the asset url, instead of tags that display the icon to players + * * extra_clases - string of extra css classes to use when returning the icon string + */ +/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null) if (!thing) return // if(SSlag_switch.measures[DISABLE_USR_ICON2HTML] && usr && !HAS_TRAIT(usr, TRAIT_BYPASS_MEASURES)) // return - var/icon/I = thing + + var/icon/icon2collapse = thing if (!target) return @@ -816,33 +515,34 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) targets = list(target) else targets = target - if (!targets.len) - return + if(!length(targets)) + return - if (!isicon(I)) + if (!isicon(icon2collapse)) if (isfile(thing)) //special snowflake - var/url = SSassets.send_anonymous_file(targets, I, "png") + var/url = SSassets.send_anonymous_file(targets, icon2collapse, "png") if(sourceonly) return url return "" - var/atom/A = thing - I = A.icon + //its either an atom, image, or mutable_appearance, we want its icon var + icon2collapse = thing.icon if (isnull(icon_state)) - icon_state = A.icon_state - if (!(icon_state in icon_states(I, 1))) - icon_state = initial(A.icon_state) + icon_state = thing.icon_state + //Despite casting to atom, this code path supports mutable appearances, so let's be nice to them + if (isnull(icon_state) || !(icon_state in icon_states(icon2collapse, 1))) + icon_state = initial(thing.icon_state) if (isnull(dir)) - dir = initial(A.dir) + dir = initial(thing.dir) if (isnull(dir)) - dir = A.dir + dir = thing.dir if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) + var/icon/temp = icon2collapse + icon2collapse = icon() + icon2collapse.Insert(temp, dir = SOUTH) dir = SOUTH else if (isnull(dir)) @@ -850,45 +550,43 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) if (isnull(icon_state)) icon_state = "" - I = icon(I, icon_state, dir, frame, moving) + icon2collapse = icon(icon2collapse, icon_state, dir, frame, moving) - var/url = SSassets.send_anonymous_file(targets, I, "png") + var/url = SSassets.send_anonymous_file(targets, icon2collapse, "png") if(sourceonly) return url return "" -/proc/icon2base64html(thing) - if (!thing) +/proc/icon2base64html(target) + if (!target) return var/static/list/bicon_cache = list() - if (isicon(thing)) - var/icon/I = thing - var/icon_base64 = icon2base64(I) + if (isicon(target)) + var/icon/target_icon = target + var/icon_base64 = icon2base64(target_icon) - if (I.Height() > world.icon_size || I.Width() > world.icon_size) + if (target_icon.Height() > world.icon_size || target_icon.Width() > world.icon_size) var/icon_md5 = md5(icon_base64) icon_base64 = bicon_cache[icon_md5] if (!icon_base64) // Doesn't exist yet, make it. - bicon_cache[icon_md5] = icon_base64 = icon2base64(I) - + bicon_cache[icon_md5] = icon_base64 = icon2base64(target_icon) return "" // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = thing - var/key = "[istype(A.icon, /icon) ? "[REF(A.icon)]" : A.icon]:[A.icon_state]" - + var/atom/target_atom = target + var/key = "[istype(target_atom.icon, /icon) ? "[REF(target_atom.icon)]" : target_atom.icon]:[target_atom.icon_state]" if (!bicon_cache[key]) // Doesn't exist, make it. - var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - if (ishuman(thing)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) + var/icon/target_icon = icon(target_atom.icon, target_atom.icon_state, SOUTH, 1) + if (ishuman(target)) // Shitty workaround for a BYOND issue. + var/icon/temp = target_icon + target_icon = icon() + target_icon.Insert(temp, dir = SOUTH) - bicon_cache[key] = icon2base64(I) + bicon_cache[key] = icon2base64(target_icon) - return "" + return "" /// Costlier version of icon2html() that uses get_flat_icon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs. /proc/costly_icon2html(thing, target, sourceonly = FALSE) @@ -903,16 +601,41 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/icon/I = get_flat_icon(thing) return icon2html(I, target, sourceonly = sourceonly) +/// Perform a shake on an atom, resets its position afterwards +/atom/proc/Shake(pixelshiftx = 2, pixelshifty = 2, duration = 2.5 SECONDS, shake_interval = 0.02 SECONDS) + var/initialpixelx = pixel_x + var/initialpixely = pixel_y + animate(src, pixel_x = initialpixelx + rand(-pixelshiftx,pixelshiftx), pixel_y = initialpixelx + rand(-pixelshifty,pixelshifty), time = shake_interval, flags = ANIMATION_PARALLEL) + for (var/i in 3 to ((duration / shake_interval))) // Start at 3 because we already applied one, and need another to reset + animate(pixel_x = initialpixelx + rand(-pixelshiftx,pixelshiftx), pixel_y = initialpixely + rand(-pixelshifty,pixelshifty), time = shake_interval) + animate(pixel_x = initialpixelx, pixel_y = initialpixely, time = shake_interval) -/// VSTATION SPECIFIC /// +// citadel edit: use this so we can VV it at a negligible performance hit. +GLOBAL_LIST_EMPTY(icon_exists_cache) + +///Checks if the given iconstate exists in the given file, caching the result. Setting scream to TRUE will print a stack trace ONCE. +/proc/icon_exists(file, state, scream) + if(GLOB.icon_exists_cache[file]?[state]) + return TRUE + + if(GLOB.icon_exists_cache[file]?[state] == FALSE) + return FALSE + + var/list/states = icon_states(file) + + if(!GLOB.icon_exists_cache[file]) + GLOB.icon_exists_cache[file] = list() + + if(state in states) + GLOB.icon_exists_cache[file][state] = TRUE + return TRUE + else + GLOB.icon_exists_cache[file][state] = FALSE + if(scream) + stack_trace("Icon Lookup for state: [state] in file [file] failed.") + return FALSE -//For photo camera. -/proc/build_composite_icon(atom/A) - var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) - for(var/O in A.overlays) - var/image/I = O - composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) - return composite +/// VSTATION SPECIFIC /// /proc/adjust_brightness(color, value) if (!color) @@ -920,7 +643,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) if (!value) return color - var/list/RGB = ReadRGB(color) + var/list/RGB = rgb2num(color) RGB[1] = clamp(RGB[1]+value,0,255) RGB[2] = clamp(RGB[2]+value,0,255) RGB[3] = clamp(RGB[3]+value,0,255) @@ -945,87 +668,6 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) swapped = 1 return result -/proc/gen_hud_image(file, person, state, plane) - var/image/img = image(file, person, state) - img.plane = plane //Thanks Byond. - img.layer = MOB_LAYER-0.2 - img.appearance_flags = APPEARANCE_UI - return img - -/** - * Animate a 'halo' around an object. - * - * This proc is not exactly cheap. You'd be well advised to set up many-loops rather than call this super-often. get_compound_icon is - * mostly to blame for this. If Byond ever implements a way to get something's icon more 'gently' than this, do that instead. - * - * * A - This is the atom to put the halo on - * * simple_icons - If set to TRUE, will just perform a very basic icon and icon_state steal. DO USE when possible. - * * color - This is the color for the halo - * * anim_duration - This decides how fast (or slow) the animation plays - * * offset - Mysterious variable that determines size of the halo's gap from icon - * * loops - How many times the animation loops - * * grow_to - Relative to the size of the icon, how big the halo grows while fading (don't use negatives for inward halos, use < 1) - * * pixel_scale - If you'd like the halo to use pixel scale or the default 'fuzzy' scale - */ -/proc/animate_aura(atom/A, simple_icons, color = "#00FF22", anim_duration = 5, offset = 1, loops = 1, grow_to = 2, pixel_scale = FALSE) - ASSERT(A) - - //Take a guess at this, if they didn't set it - if(isnull(simple_icons)) - if(ismob(A)) - simple_icons = FALSE - else - simple_icons = TRUE - - //Get their icon - var/icon/hole - - if(simple_icons) - hole = icon(A.icon, A.icon_state) - else - hole = get_compound_icon(A) - - hole.MapColors(0,0,0, 0,0,0, 0,0,0, 1,1,1) //White. - - //Make a bigger version - var/icon/grower = new(hole) - var/orig_width = grower.Width() - var/orig_height = grower.Height() - var/end_width = orig_width+(offset*2) - var/end_height = orig_height+(offset*2) - var/half_diff_width = (end_width-orig_width)*0.5 - var/half_diff_height = (end_height-orig_height)*0.5 - - //Make icon black - grower.SwapColor("#FFFFFF","#000000") //Black. - - //Scale both icons big so we don't have to deal with low-pixel garbage issues - grower.Scale(orig_width*10,orig_height*10) - hole.Scale(orig_width*9,orig_height*9) - - //Blend the hole in - grower.Blend(hole,ICON_OVERLAY, x = ((orig_width*10-orig_width*9)*0.5)+1, y = ((orig_height*10-orig_height*9)*0.5)+1) - - //Swap white to zero alpha - grower.SwapColor("#FFFFFF","#00000000") - - //Color it - grower.SwapColor("#000000",color) - - //Scale it to final height - grower.Scale(end_width,end_height) - - //Flick it onto them - var/image/img = image(grower,A) - if(pixel_scale) - img.appearance_flags |= PIXEL_SCALE - img.pixel_x = half_diff_width*-1 - img.pixel_y = half_diff_height*-1 - A.flick_overlay_view(img, anim_duration*loops, TRUE) - - //Animate it growing - animate(img, alpha = 0, transform = matrix()*grow_to, time = anim_duration, loop = loops) - /* * * Accurate - Use more accurate color averaging, usually has better results and prevents muddied or overly dark colors. Mad thanks to wwjnc. * * ignoreGreyscale - Excempts greyscale colors from the color list, useful for filtering outlines or plate overlays. @@ -1042,14 +684,14 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/final_average if (accurate) //keeping it legible for(var/i = 1 to total) - RGB = ReadRGB(colors[i]) + RGB = rgb2num(colors[i]) colorsum[1] += RGB[1]*RGB[1] colorsum[2] += RGB[2]*RGB[2] colorsum[3] += RGB[3]*RGB[3] final_average = rgb(sqrt(colorsum[1]/total), sqrt(colorsum[2]/total), sqrt(colorsum[3]/total)) else for(var/i = 1 to total) - RGB = ReadRGB(colors[i]) + RGB = rgb2num(colors[i]) colorsum[1] += RGB[1] colorsum[2] += RGB[2] colorsum[3] += RGB[3] @@ -1062,7 +704,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) for(var/y_pixel = 1 to I.Height()) var/this_color = I.GetPixel(x_pixel, y_pixel) if(this_color) - if (ignoreGreyscale && ReadHSV(RGBtoHSV(this_color))[2] == 0) //If saturation is 0, must be greyscale + if (ignoreGreyscale && rgb2hsv(this_color)[2] == 0) //If saturation is 0, must be greyscale continue colors.Add(this_color) return colors @@ -1084,36 +726,8 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) for(var/i in 1 to (12 - cm.len)) cm += 0 if(!islist(color)) - color = ReadRGB(color) + color = rgb2num(color) color[1] = color[1] * cm[1] + color[2] * cm[2] + color[3] * cm[3] + cm[10] * 255 color[2] = color[1] * cm[4] + color[2] * cm[5] + color[3] * cm[6] + cm[11] * 255 color[3] = color[1] * cm[7] + color[2] * cm[8] + color[3] * cm[9] + cm[12] * 255 return rgb(color[1], color[2], color[3]) - -// citadel edit: use this so we can VV it at a negligible performance hit. -GLOBAL_LIST_EMPTY(icon_exists_cache) -/** - * Checks if the given iconstate exists in the given file, caching the result. - * Setting scream to TRUE will print a stack trace ONCE. - * Written by Kapu1178 - */ -/proc/icon_exists(file, state, scream) - if(GLOB.icon_exists_cache[file]?[state]) - return TRUE - - if(GLOB.icon_exists_cache[file]?[state] == FALSE) - return FALSE - - var/list/states = icon_states(file) - - if(!GLOB.icon_exists_cache[file]) - GLOB.icon_exists_cache[file] = list() - - if(state in states) - GLOB.icon_exists_cache[file][state] = TRUE - return TRUE - else - GLOB.icon_exists_cache[file][state] = FALSE - if(scream) - stack_trace("Icon Lookup for state: [state] in file [file] failed.") - return FALSE diff --git a/code/__HELPERS/icons/color.dm b/code/__HELPERS/icons/color.dm deleted file mode 100644 index 63ecf63c08a6..000000000000 --- a/code/__HELPERS/icons/color.dm +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Turns the icon into a greyscaled icon. Alpha masks are untouched. - */ -/icon/proc/greyscale() - MapColors( - GREYSCALE_MULT_R, GREYSCALE_MULT_R, GREYSCALE_MULT_R, - GREYSCALE_MULT_G, GREYSCALE_MULT_G, GREYSCALE_MULT_G, - GREYSCALE_MULT_B, GREYSCALE_MULT_B, GREYSCALE_MULT_B - ) - -/** - * rgb value to greyscale - */ -/proc/rgb_greyscale(rgb) - var/list/unpacked = ReadRGB(rgb) - var/gray = unpacked[1] * GREYSCALE_MULT_R + unpacked[2] *GREYSCALE_MULT_G + unpacked[3] * GREYSCALE_MULT_B - return (unpacked.len > 3) ? rgb(gray, gray, gray, unpacked[4]) : rgb(gray, gray, gray) diff --git a/code/__HELPERS/nameof.dm b/code/__HELPERS/nameof.dm index 7cd5777f4652..6e625578ae60 100644 --- a/code/__HELPERS/nameof.dm +++ b/code/__HELPERS/nameof.dm @@ -4,6 +4,12 @@ * datum may be null, but it does need to be a typed var. **/ #define NAMEOF(datum, X) (#X || ##datum.##X) +/** + * NAMEOF: Compile time checked variable name to string conversion + * evaluates to a string equal to "X", but compile errors if X isn't a var on datum. + * datum may be null, but it does need to be a typed var. + **/ +#define NAMEOF_PROC(datum, X) (#X || ##datum.##X()) /** * NAMEOF that actually works in static definitions because src::type requires src to be defined diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 7fcdc575e3a9..5c4a63dc189a 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -1,23 +1,12 @@ /** * Holds procs designed to help with filtering text * Contains groups: - * ! SQL sanitization * ! Text sanitization * ! Text searches * ! Text modification * ! Misc */ -/** - *! SQL sanitization - */ - -/proc/format_table_name(table) - return CONFIG_GET(string/sql_server_prefix) + table - -/proc/format_unified_table_name(table) - return CONFIG_GET(string/sql_unified_prefix) + table - /** *! Text sanitization */ diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 96cb0f30f932..0b4a527fc430 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1372,15 +1372,6 @@ var/list/WALLITEMS = list( if(337.5) return "North-Northwest" -/atom/proc/Shake(pixelshiftx = 15, pixelshifty = 15, duration = 250) - var/initialpixelx = pixel_x - var/initialpixely = pixel_y - var/shiftx = rand(-pixelshiftx,pixelshiftx) - var/shifty = rand(-pixelshifty,pixelshifty) - animate(src, pixel_x = pixel_x + shiftx, pixel_y = pixel_y + shifty, time = 0.2, loop = duration) - pixel_x = initialpixelx - pixel_y = initialpixely - /** * get_holder_at_turf_level(): Similar to get_turf(), will return the "highest up" holder of this atom, excluding the turf. * Example: A fork inside a box inside a locker will return the locker. Essentially, get_just_before_turf(). diff --git a/code/___compile_options.dm b/code/___compile_options.dm index 3e1a9d6c87f3..f0e40b346275 100644 --- a/code/___compile_options.dm +++ b/code/___compile_options.dm @@ -113,26 +113,43 @@ #endif // ## CBT BUILD DEFINES - -#ifdef CIBUILDING - #define UNIT_TESTS +#if defined(CIBUILDING) && !defined(OPENDREAM) +#define UNIT_TESTS #endif #ifdef CITESTING - #define TESTING +#define TESTING #endif +#if defined(UNIT_TESTS) + //Hard del testing defines + // TODO: enable once reftrack is back + // #define REFERENCE_TRACKING + // #define REFERENCE_TRACKING_DEBUG + // #define FIND_REF_NO_CHECK_TICK + // #define GC_FAILURE_HARD_LOOKUP + //Ensures all early assets can actually load early + #define DO_NOT_DEFER_ASSETS + //Test at full capacity, the extra cost doesn't matter + #define TIMER_DEBUG +#endif #ifdef TGS // TGS performs its own build of dm.exe, but includes a prepended TGS define. #define CBT #endif -// ## LEGACY WARNING -#if !(defined(CBT) || defined(SPACEMAN_DMM) || defined(OPENDREAM)) - #warn Building with Dream Maker is no longer supported and will result in errors. - #warn In order to build, run BUILD.bat in the root directory. - #warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. +#if defined(OPENDREAM) + #if !defined(CIBUILDING) + #warn You are building with OpenDream. Remember to build TGUI manually. + #warn You can do this by running tgui-build.cmd from the bin directory. + #endif +#else + #if !defined(CBT) && !defined(SPACEMAN_DMM) + #warn Building with Dream Maker is no longer supported and will result in errors. + #warn In order to build, run BUILD.cmd in the root directory. + #warn Consider switching to VSCode editor instead, where you can press Ctrl+Shift+B to build. + #endif #endif /** diff --git a/code/controllers/README.md b/code/controllers/README.md new file mode 100644 index 000000000000..1364ca595eea --- /dev/null +++ b/code/controllers/README.md @@ -0,0 +1,13 @@ +# Controllers + +Backend controllers orchestrating the game. + +## Globals + +Many, but not all, controllers are accessible from anywhere in the code with standardized names. + +- Master: As the name implies, the Master Controller performs init, shutdown, and acts as a process scheduler during a round. +- Failsafe: A controller that ensures the Master Controller is running properly. +- Configuration: A global datum that holds server configuration. +- RSname: Repository controllers storing /datum/prototype's that can be queried. +- SSname: Subsystems that handle init behavior, ticking, and other game functions.. diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index b933dea3bd4f..5474503030a5 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -8,19 +8,6 @@ var/list/entries var/list/entries_by_type - // var/list/maplist - // var/datum/map_config/defaultmap - - /* - var/list/modes // allowed modes - var/list/gamemode_cache - var/list/votable_modes // votable modes - var/list/storyteller_cache - var/list/mode_names - var/list/mode_reports - var/list/mode_false_report_weight - */ - var/motd /// If the configuration is loaded @@ -59,7 +46,7 @@ loaded = TRUE if (Master) - Master.OnConfigLoad() + Master.on_config_loaded() /datum/controller/configuration/proc/full_wipe() if(IsAdminAdvancedProcCall()) diff --git a/code/controllers/configuration/entries/database.dm b/code/controllers/configuration/entries/database.dm index 3fbc32d38fe7..f930d31acbfb 100644 --- a/code/controllers/configuration/entries/database.dm +++ b/code/controllers/configuration/entries/database.dm @@ -4,9 +4,6 @@ /datum/config_entry/string/sql_server_prefix protection = CONFIG_ENTRY_LOCKED -/datum/config_entry/string/sql_unified_prefix - protection = CONFIG_ENTRY_LOCKED - /datum/config_entry/string/sql_address protection = CONFIG_ENTRY_HIDDEN | CONFIG_ENTRY_LOCKED config_entry_value = "localhost" diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm index 93d5897ff453..252845318f52 100644 --- a/code/controllers/controller.dm +++ b/code/controllers/controller.dm @@ -15,6 +15,9 @@ // todo: kil var/verbose_logging = FALSE +/datum/controller/vv_delete() + return FALSE + /** * Called to initialize a controller. * diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 7d0c002dad77..60a8334a375b 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -117,6 +117,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new load_configuration() if(!config) config = new + if(!Configuration) + Configuration = new + Configuration.Initialize() //# 2. set up random seed if(!random_seed) @@ -883,10 +886,12 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/datum/controller/subsystem/SS = S SS.StopLoadingMap() -/datum/controller/master/proc/OnConfigLoad() +/datum/controller/master/proc/on_config_loaded() for (var/thing in subsystems) var/datum/controller/subsystem/SS = thing - SS.OnConfigLoad() + SS.on_config_loaded() + for(var/datum/controller/repository/repository in SSrepository.get_all_repositories()) + repository.on_config_loaded() /** * CitRP snowflake special: Check if any subsystems are sleeping. diff --git a/code/controllers/repository.dm b/code/controllers/repository.dm index 402a48e30dd4..a53aa8e7ffc2 100644 --- a/code/controllers/repository.dm +++ b/code/controllers/repository.dm @@ -26,6 +26,17 @@ /// expected type of prototype var/expected_type + /// database key; this is immutable. + /// * persistence is disabled if this is not set + var/database_key + /// store version + /// * persistence is disabled if this is not set + /// * migration is triggered if this doesn't match a loaded entry + /// * this should only ever be incremented. + var/store_version + /// store enabled? Updated by config reloads. + var/store_enabled = FALSE + /// by-id lookup var/list/id_lookup /// by-type lookup @@ -34,6 +45,11 @@ /// fetched subtype lists var/tmp/list/subtype_lists + /// 'doesn't exist' cache for DB loads + var/tmp/list/doesnt_exist_cache + var/const/doesnt_exist_cache_trim_at = 1000 + var/const/doesnt_exist_cache_trim_to = 500 + /// temporary id to path lookup used during init // todo: figure out a way to not do this, this is bad var/tmp/list/init_reverse_lookup_shim @@ -43,6 +59,7 @@ type_lookup = list() subtype_lists = list() init_reverse_lookup_shim = list() + doesnt_exist_cache = list() for(var/datum/prototype/casted as anything in subtypesof(expected_type)) if(initial(casted.abstract_type) == casted) continue @@ -57,6 +74,14 @@ init_reverse_lookup_shim = null return ..() +/datum/controller/repository/vv_edit_var(var_name, var_value, mass_edit, raw_edit) + switch(var_name) + if(NAMEOF(src, store_version), NAMEOF(src, database_key), NAMEOF(src, store_enabled)) + return FALSE + if(NAMEOF(src, expected_type)) + return FALSE + return ..() + /** * Repository Recover() * @@ -82,6 +107,13 @@ . = FALSE src.subtype_lists = list() +/** + * Called when config is reloaded. + */ +/datum/controller/repository/proc/on_config_loaded() + SHOULD_CALL_PARENT(TRUE) + store_enabled = Configuration.get_entry(/datum/toml_config_entry/backend/repository/persistence) && database_key && store_version + /** * regenerates entries, kicking out anything that's in the way */ @@ -105,6 +137,7 @@ * * * Allows passing in a prototype instance which will be returned as itself. * Useful for procs that should accept types, IDs, *and* instances. + * * Unlike fetch local / fetch or defer, this **can** sleep! * * prototypes returned should never, ever be modified * @@ -119,7 +152,102 @@ if(init_reverse_lookup_shim) var/potential_path = init_reverse_lookup_shim[type_or_id] return fetch(potential_path) - return id_lookup[type_or_id] + . = id_lookup[type_or_id] + if(.) + return + if(!store_enabled) + return + if(doesnt_exist_cache[type_or_id]) + return + return handle_db_load(type_or_id) + else if(ispath(type_or_id)) + . = type_lookup[type_or_id] + if(.) + return + if(initial(type_or_id.abstract_type) == type_or_id) + CRASH("tried to fetch an abstract prototype") + var/datum/prototype/loading = new type_or_id + loading.hardcoded = TRUE + load(loading) + return loading + else if(istype(type_or_id)) + return type_or_id + else + CRASH("what?") + +/** + * Fetches a prototype by type or ID. + * + * * Allows passing in a prototype instance which will be returned as itself. + * Useful for procs that should accept types, IDs, *and* instances. + * * If something doesn't exist and we don't know if it exists in the database, we throw a runtime error. + * * If fetching a hardcoded path, this should generally be used as it never sleeps. + * + * prototypes returned should never, ever be modified + * + * @return prototype instance or null + */ +/datum/controller/repository/proc/fetch_local_or_throw(datum/prototype/type_or_id) as /datum/prototype + RETURN_TYPE(/datum/prototype) + // todo: optimize + if(isnull(type_or_id)) + return + else if(istext(type_or_id)) + if(init_reverse_lookup_shim) + var/potential_path = init_reverse_lookup_shim[type_or_id] + return fetch_local_or_throw(potential_path) + . = id_lookup[type_or_id] + if(.) + return + if(!store_enabled) + return + if(doesnt_exist_cache[type_or_id]) + return + CRASH("fetch_local_or_throw of [type_or_id] couldn't determine if id existed without a fetch.") + else if(ispath(type_or_id)) + . = type_lookup[type_or_id] + if(.) + return + if(initial(type_or_id.abstract_type) == type_or_id) + CRASH("tried to fetch an abstract prototype") + var/datum/prototype/loading = new type_or_id + loading.hardcoded = TRUE + load(loading) + return loading + else if(istype(type_or_id)) + return type_or_id + else + CRASH("what?") + +/** + * Fetches a prototype by type or ID. + * + * * Allows passing in a prototype instance which will be returned as itself. + * Useful for procs that should accept types, IDs, *and* instances. + * * If something doesn't exist and we don't know if it exists in the database, we return + * REPOSITORY_FETCH_DEFER. The caller should invoke normal fetch() at a time when sleeping is allowed. + * + * prototypes returned should never, ever be modified + * + * @return prototype instance or null + */ +/datum/controller/repository/proc/fetch_or_defer(datum/prototype/type_or_id) as /datum/prototype + RETURN_TYPE(/datum/prototype) + // todo: optimize + if(isnull(type_or_id)) + return + else if(istext(type_or_id)) + if(init_reverse_lookup_shim) + var/potential_path = init_reverse_lookup_shim[type_or_id] + return fetch_or_defer(potential_path) + . = id_lookup[type_or_id] + if(.) + return + if(!store_enabled) + return + if(doesnt_exist_cache[type_or_id]) + return + return REPOSITORY_FETCH_DEFER else if(ispath(type_or_id)) . = type_lookup[type_or_id] if(.) @@ -165,7 +293,7 @@ for(var/datum/prototype/casted as anything in subtypesof(path)) if(initial(casted.abstract_type) == casted) continue - var/datum/prototype/instance = fetch(casted) + var/datum/prototype/instance = fetch_local_or_throw(casted) generating += instance return generating @@ -184,7 +312,11 @@ * After this call, the repository now owns the instance, not whichever system created it. */ /datum/controller/repository/proc/register(datum/prototype/instance) - return load(instance) + . = load(instance) + if(!.) + return + if(store_enabled) + handle_db_store(instance) //* Private API *// @@ -203,7 +335,7 @@ CRASH("attempted to load an instance that collides with a currently loaded instance on type.") if(!instance.register()) . = FALSE - CRASH("instance refused to unregister. this is undefined behavior.") + CRASH("instance failed to register. this is undefined behavior.") id_lookup[instance.id] = instance if(instance.hardcoded) // invalidate cache @@ -222,7 +354,7 @@ PROTECTED_PROC(TRUE) if(!instance.unregister()) . = FALSE - CRASH("instance refused to unregister. this is undefined behavior.") + CRASH("instance failed to unregister. this is undefined behavior.") id_lookup -= instance.id if(instance.hardcoded) // invalidate cache @@ -230,3 +362,90 @@ subtype_lists = list() type_lookup -= instance.type return TRUE + +/** + * Perform migration on a data-list from the database. + * + * * Edit the passed in list directly. + * * This should update to latest. + * + * todo: proc to auto-migrate everything. + */ +/datum/controller/repository/proc/migrate(list/modifying, from_version) + PROTECTED_PROC(TRUE) + +/datum/controller/repository/proc/handle_db_store(datum/prototype/instance) + doesnt_exist_cache -= instance.id + + // intentionally allow admin proccalls to bypass checks in NewQuery() + var/old_usr = usr + usr = null + + var/datum/db_query/store_query = SSdbcore.NewQuery( + "INSERT INTO " + DB_PREFIX_TABLE_NAME("backend_repository") + "(repository, id, version, data) VALUES \ + (:repo, :id, :version, :data) ON DUPLICATE KEY UPDATE data = :data, modifiedTime = Now(), version = :version", + list( + "repo" = database_key, + "id" = instance.id, + "version" = store_version, + "data" = json_encode(instance.serialize()), + ), + ) + + usr = old_usr + + store_query.Execute(TRUE) + qdel(store_query) + +/datum/controller/repository/proc/handle_db_load(instance_id) + if(doesnt_exist_cache[instance_id]) + return + + // intentionally allow admin proccalls to bypass checks in NewQuery() + var/old_usr = usr + usr = null + + var/datum/db_query/load_query = SSdbcore.NewQuery( + "SELECT version, data FROM " + DB_PREFIX_TABLE_NAME("backend_repository") + " WHERE repository = :repo, id = :id", + list( + "repo" = database_key, + "id" = instance_id, + ), + ) + + usr = old_usr + + load_query.Execute(TRUE) + + if(!length(load_query.item)) + mark_doesnt_exist(instance_id) + else + var/list/fetched = load_query.item[1] + var/version = fetched[1] + var/encoded_data = fetched[2] + var/list/decoded_data = json_decode(encoded_data) + var/migrated = FALSE + + if(version < store_version) + migrate(decoded_data, version) + migrated = TRUE + else if(version == store_version) + mark_doesnt_exist(instance_id) + CRASH("[version] was not less or eq to [store_version]. something's very wrong!") + + var/datum/prototype/loaded_instance = new expected_type + loaded_instance.deserialize(decoded_data) + if(!load(loaded_instance)) + mark_doesnt_exist(instance_id) + CRASH("[instance_id] failed to load into the repository during database load!") + . = loaded_instance + + if(migrated) + handle_db_store(loaded_instance) + + qdel(load_query) + +/datum/controller/repository/proc/mark_doesnt_exist(instance_id) + doesnt_exist_cache[instance_id] = TRUE + if(length(doesnt_exist_cache) > doesnt_exist_cache_trim_at) + doesnt_exist_cache.len = doesnt_exist_cache_trim_to diff --git a/code/controllers/repository/designs.dm b/code/controllers/repository/designs.dm index 23ed3186a240..2667472b765f 100644 --- a/code/controllers/repository/designs.dm +++ b/code/controllers/repository/designs.dm @@ -4,6 +4,7 @@ REPOSITORY_DEF(designs) name = "Repository - Designs" expected_type = /datum/prototype/design + database_key = "design" //* caches *// diff --git a/code/controllers/repository/guidebook.dm b/code/controllers/repository/guidebook.dm index f5ea86eb1870..33c878a9fb77 100644 --- a/code/controllers/repository/guidebook.dm +++ b/code/controllers/repository/guidebook.dm @@ -1,6 +1,7 @@ //* This file is explicitly licensed under the MIT license. *// //* Copyright (c) 2023 Citadel Station developers. *// +// todo: this shouldn't be a repository, it can just be a controller REPOSITORY_DEF(guidebook) name = "Repository - Guidebook" expected_type = /datum/prototype/guidebook_section diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index bf1333d28b4e..3287b34004fc 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -421,7 +421,7 @@ state = SS_PAUSING /// Called after the config has been loaded or reloaded. -/datum/controller/subsystem/proc/OnConfigLoad() +/datum/controller/subsystem/proc/on_config_loaded() return /** diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index eff83427a200..ff29b03f16ef 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -191,7 +191,7 @@ SUBSYSTEM_DEF(assets) /datum/controller/subsystem/assets/proc/get_dynamic_item_url_by_name(name) return dynamic_asset_items_by_name[name]?.get_url() -/datum/controller/subsystem/assets/OnConfigLoad() +/datum/controller/subsystem/assets/on_config_loaded() var/newtransporttype = /datum/asset_transport/browse_rsc switch (CONFIG_GET(string/asset_transport)) if ("webroot") diff --git a/code/controllers/subsystem/characters/storage.dm b/code/controllers/subsystem/characters/storage.dm index 5a1b6045010c..bb84401ee120 100644 --- a/code/controllers/subsystem/characters/storage.dm +++ b/code/controllers/subsystem/characters/storage.dm @@ -33,7 +33,7 @@ // last played is not updated by this proc // everything else can though! var/datum/db_query/update_query = SSdbcore.NewQuery( - "UPDATE [format_table_name("character")] \ + "UPDATE [DB_PREFIX_TABLE_NAME("character")] \ SET[persisting? " last_persisted = NOW()," : ""] canonical_name = :name, persist_data = :data, \ playerid = :pid \ WHERE id = :id", @@ -48,7 +48,7 @@ qdel(update_query) else var/datum/db_query/insert_query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("character")] \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("character")] \ (`created`, `last_played`, `last_persisted`, `playerid`, `canonical_name`, \ `persist_data`, `character_type`) \ VALUES (NOW(), NULL, [persisting? "NOW" : "NULL"], :pid, :name, :data, :type)", @@ -85,7 +85,7 @@ var/datum/db_query/load_query = SSdbcore.NewQuery( "SELECT `id` FROM \ - [format_table_name("character")] WHERE playerid = :id AND canonical_name = :name AND character_type = :type", + [DB_PREFIX_TABLE_NAME("character")] WHERE playerid = :id AND canonical_name = :name AND character_type = :type", list( "id" = playerid, "canonical_name" = name, @@ -134,7 +134,7 @@ var/datum/db_query/load_query = SSdbcore.NewQuery( "SELECT `created`, `last_played`, `last_persisted`, `playerid`, `canonical_name`, `persist_data`, `character_type` FROM \ - [format_table_name("character")] WHERE id = :id", + [DB_PREFIX_TABLE_NAME("character")] WHERE id = :id", list( "id" = id, ) @@ -190,7 +190,7 @@ . = list() var/datum/db_query/iteration_query = SSdbcore.ExecuteQuery( - "SELECT id FROM [format_table_name("character")] WHERE playerid = :id", + "SELECT id FROM [DB_PREFIX_TABLE_NAME("character")] WHERE playerid = :id", list( "id" = playerid ) @@ -223,7 +223,7 @@ // section below can never be allowed to runtime var/datum/db_query/mark_query = SSdbcore.ExecuteQuery( - "UPDATE [format_table_name("character")] SET last_played = NOW() WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("character")] SET last_played = NOW() WHERE id = :id", list( "id" = id ) diff --git a/code/controllers/subsystem/dbcore/_dbcore.dm b/code/controllers/subsystem/dbcore/_dbcore.dm index 106a7fe09119..7e2b57d43fef 100644 --- a/code/controllers/subsystem/dbcore/_dbcore.dm +++ b/code/controllers/subsystem/dbcore/_dbcore.dm @@ -46,7 +46,7 @@ SUBSYSTEM_DEF(dbcore) //This is as close as we can get to the true round end before Disconnect() without changing where it's called, defeating the reason this is a subsystem if(SSdbcore.Connect()) var/datum/db_query/query_round_shutdown = SSdbcore.NewQuery( - "UPDATE [format_table_name("round")] SET shutdown_datetime = Now() WHERE id = :round_id", + "UPDATE [DB_PREFIX_TABLE_NAME("round")] SET shutdown_datetime = Now() WHERE id = :round_id", list("round_id" = GLOB.round_id) ) query_round_shutdown.Execute() @@ -114,7 +114,7 @@ SUBSYSTEM_DEF(dbcore) if(CONFIG_GET(flag/sql_enabled)) if(Connect()) log_world("Database connection established.") - var/datum/db_query/query_db_version = NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") + var/datum/db_query/query_db_version = NewQuery("SELECT major, minor FROM [DB_PREFIX_TABLE_NAME("schema_revision")] ORDER BY date DESC LIMIT 1") query_db_version.Execute() if(query_db_version.NextRow()) db_major = text2num(query_db_version.item[1]) @@ -135,7 +135,7 @@ SUBSYSTEM_DEF(dbcore) if(!Connect()) return var/datum/db_query/query_round_initialize = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("round")] (initialize_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(:internet_address), :port)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("round")] (initialize_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(:internet_address), :port)", list("internet_address" = world.internet_address || "0", "port" = "[world.port]") ) query_round_initialize.Execute(async = FALSE) @@ -147,7 +147,7 @@ SUBSYSTEM_DEF(dbcore) if(!Connect()) return var/datum/db_query/query_round_start = SSdbcore.NewQuery( - "UPDATE [format_table_name("round")] SET start_datetime = Now() WHERE id = :round_id", + "UPDATE [DB_PREFIX_TABLE_NAME("round")] SET start_datetime = Now() WHERE id = :round_id", list("round_id" = GLOB.round_id) ) query_round_start.Execute() @@ -157,7 +157,7 @@ SUBSYSTEM_DEF(dbcore) if(!Connect()) return var/datum/db_query/query_round_end = SSdbcore.NewQuery( - "UPDATE [format_table_name("round")] SET end_datetime = Now() WHERE id = :round_id", + "UPDATE [DB_PREFIX_TABLE_NAME("round")] SET end_datetime = Now() WHERE id = :round_id", list("round_id" = GLOB.round_id) ) query_round_end.Execute() diff --git a/code/controllers/subsystem/ipintel.dm b/code/controllers/subsystem/ipintel.dm index 170e520e4cfe..e0f1dfd5cbb7 100644 --- a/code/controllers/subsystem/ipintel.dm +++ b/code/controllers/subsystem/ipintel.dm @@ -20,7 +20,7 @@ SUBSYSTEM_DEF(ipintel) /// max retries var/max_retries = 1 -/datum/controller/subsystem/ipintel/OnConfigLoad() +/datum/controller/subsystem/ipintel/on_config_loaded() . = ..() enabled = !!CONFIG_GET(flag/ipintel_enabled) consequetive_errors = 0 @@ -139,7 +139,7 @@ SUBSYSTEM_DEF(ipintel) /datum/controller/subsystem/ipintel/proc/ipintel_cache_fetch_impl(address) PRIVATE_PROC(TRUE) var/datum/db_query/fetch = SSdbcore.NewQuery( - "SELECT date, intel, TIMESTAMPDIFF(MINUTE,date,NOW()) FROM [format_table_name("ipintel")] WHERE ip = INET_ATON(:ip)", + "SELECT date, intel, TIMESTAMPDIFF(MINUTE,date,NOW()) FROM [DB_PREFIX_TABLE_NAME("ipintel")] WHERE ip = INET_ATON(:ip)", list( "ip" = address, ) @@ -167,7 +167,7 @@ SUBSYSTEM_DEF(ipintel) /datum/controller/subsystem/ipintel/proc/ipintel_cache_store_impl(datum/ipintel/entry) PRIVATE_PROC(TRUE) var/datum/db_query/update = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON(:ip), :intel) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("ipintel")] (ip, intel) VALUES (INET_ATON(:ip), :intel) \ ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()", list( "ip" = entry.address, diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 4cd8fae04146..edd53d804671 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -108,12 +108,16 @@ SUBSYSTEM_DEF(materials) // todo: optimize . = list() for(var/i in 1 to length(L)) - var/key = L[i] - var/datum/prototype/material/resolved = RSmaterials.fetch(key) - if(isnull(resolved)) - continue + var/datum/prototype/material/key = L[i] var/value = L[key] - .[resolved.id] = value + if(istype(key)) + key = key.id + else if(ispath(key)) + key = initial(key.id) + else if(istext(key)) + else + CRASH("what? '[key]'") + .[key] = value /** * ensures a list is full of material references for keys @@ -126,10 +130,14 @@ SUBSYSTEM_DEF(materials) . = list() for(var/i in 1 to length(L)) var/key = L[i] - var/datum/prototype/material/resolved = RSmaterials.fetch(key) - if(isnull(resolved)) - continue var/value = L[key] + var/datum/prototype/material/resolved = RSmaterials.fetch_or_defer(key) + switch(resolved) + if(null) + continue + if(REPOSITORY_FETCH_DEFER) + // todo: handle this + continue .[resolved] = value /** @@ -142,9 +150,15 @@ SUBSYSTEM_DEF(materials) . = list() for(var/i in 1 to length(L)) var/key = L[i] - var/value = L[key] - var/datum/prototype/material/resolved = RSmaterials.fetch(value) - .[key] = resolved?.id + var/datum/prototype/material/value = L[key] + if(istype(value)) + value = value.id + else if(ispath(value)) + value = initial(value.id) + else if(istext(value)) + else + CRASH("what? '[value]'") + .[key] = value /** * ensures a list is full of material references for values @@ -157,7 +171,12 @@ SUBSYSTEM_DEF(materials) for(var/i in 1 to length(L)) var/key = L[i] var/value = L[key] - var/datum/prototype/material/resolved = RSmaterials.fetch(value) + var/datum/prototype/material/resolved = RSmaterials.fetch_or_defer(value) + switch(resolved) + if(REPOSITORY_FETCH_DEFER) + // todo: handle this + else + value = resolved .[key] = resolved /** diff --git a/code/controllers/subsystem/persistence/modules/bulk_entity.dm b/code/controllers/subsystem/persistence/modules/bulk_entity.dm index 7d04d37568ee..a17d389e00be 100644 --- a/code/controllers/subsystem/persistence/modules/bulk_entity.dm +++ b/code/controllers/subsystem/persistence/modules/bulk_entity.dm @@ -19,7 +19,7 @@ for(var/datum/bulk_entity_chunk/chunk as anything in chunks) var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_bulk_entity")] \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_bulk_entity")] \ (generation, persistence_key, level_id, data, round_id) \ VALUES (:generation, :persistence, :level, :data, :round)", list( @@ -47,7 +47,7 @@ usr = null var/datum/db_query/query = SSdbcore.NewQuery( - "SELECT data FROM [format_table_name("persistence_bulk_entity")] \ + "SELECT data FROM [DB_PREFIX_TABLE_NAME("persistence_bulk_entity")] \ WHERE generation = :generation AND persistence_key = :persistence AND level_id = :level", list( "generation" = generation, @@ -85,7 +85,7 @@ SSdbcore.dangerously_block_on_multiple_unsanitized_queries( list( - "TRUNCATE TABLE [format_table_name("persistence_bulk_entity")]", + "TRUNCATE TABLE [DB_PREFIX_TABLE_NAME("persistence_bulk_entity")]", ), ) @@ -99,7 +99,7 @@ usr = null SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_bulk_entity")] WHERE level_id = :level", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_bulk_entity")] WHERE level_id = :level", list( "level" = level_id, ), diff --git a/code/controllers/subsystem/persistence/modules/level_objects.dm b/code/controllers/subsystem/persistence/modules/level_objects.dm index 43072527d789..8016594e6314 100644 --- a/code/controllers/subsystem/persistence/modules/level_objects.dm +++ b/code/controllers/subsystem/persistence/modules/level_objects.dm @@ -20,7 +20,7 @@ switch(entity.obj_persist_static_mode) if(OBJ_PERSIST_STATIC_MODE_LEVEL) query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_static_level_objects")] (generation, object_id, level_id, data) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_static_level_objects")] (generation, object_id, level_id, data) \ VALUES (:generation, :object_id, :level_id, :data) ON DUPLICATE KEY UPDATE \ data = VALUES(data)", list( @@ -32,7 +32,7 @@ ) if(OBJ_PERSIST_STATIC_MODE_MAP) query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_static_map_objects")] (generation, object_id, map_id, data) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_static_map_objects")] (generation, object_id, map_id, data) \ VALUES (:generation, :object_id, :map_id, :data) ON DUPLICATE KEY UPDATE \ data = VALUES(data)", list( @@ -44,7 +44,7 @@ ) if(OBJ_PERSIST_STATIC_MODE_GLOBAL) query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_static_global_objects")] (generation, object_id, data) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_static_global_objects")] (generation, object_id, data) \ VALUES (:generation, :object_id, :data) ON DUPLICATE KEY UPDATE \ data = VALUES(data)", list( @@ -79,7 +79,7 @@ var/datum/db_query/query if(entity.obj_persist_dynamic_id != PERSISTENCE_DYNAMIC_ID_AUTOSET) query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_dynamic_objects")] (id, generation, status, data, prototype_id, level_id, x, y) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_dynamic_objects")] (id, generation, status, data, prototype_id, level_id, x, y) \ VALUES (:status, :data, :prototype, :level, :x, :y) ON DUPLICATE KEY UPDATE \ x = VALUES(x), y = VALUES(y), data = VALUES(data), prototype = VALUES(prototype), level = VALUES(level), \ status = VALUES(status)", @@ -97,7 +97,7 @@ query.warn_execute() else query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_dynamic_objects")] (status, data, prototype_id, level_id, x, y) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_dynamic_objects")] (status, data, prototype_id, level_id, x, y) \ VALUES (:status, :data, :prototype, :level, :x, :y)", list( "status" = entity.obj_persist_dynamic_status, @@ -139,7 +139,7 @@ var/datum/db_query/query = SSdbcore.NewQuery( "SELECT object_id, prototype_id, status, data, x, y \ - FROM [format_table_name("persistence_dynamic_objects")] \ + FROM [DB_PREFIX_TABLE_NAME("persistence_dynamic_objects")] \ WHERE level_id = :level AND generation = :generation", list( "generation" = generation, @@ -200,7 +200,7 @@ switch(entity.obj_persist_static_mode) if(OBJ_PERSIST_STATIC_MODE_GLOBAL) query = SSdbcore.NewQuery( - "SELECT data FROM [format_table_name("persistence_static_global_objects")] \ + "SELECT data FROM [DB_PREFIX_TABLE_NAME("persistence_static_global_objects")] \ WHERE object_id = :object AND generation = :generation", list( "object" = entity.obj_persist_static_id, @@ -209,7 +209,7 @@ ) if(OBJ_PERSIST_STATIC_MODE_LEVEL) query = SSdbcore.NewQuery( - "SELECT data FROM [format_table_name("persistence_static_level_objects")] \ + "SELECT data FROM [DB_PREFIX_TABLE_NAME("persistence_static_level_objects")] \ WHERE object_id = :object AND level_id = :level AND generation = :generation", list( "object" = entity.obj_persist_static_id, @@ -220,7 +220,7 @@ bind_id = level_id if(OBJ_PERSIST_STATIC_MODE_MAP) query = SSdbcore.NewQuery( - "SELECT data FROM [format_table_name("persistence_static_map_objects")] \ + "SELECT data FROM [DB_PREFIX_TABLE_NAME("persistence_static_map_objects")] \ WHERE object_id = :object AND map_id = :map AND generation = :generation", list( "object" = entity.obj_persist_static_id, @@ -258,9 +258,9 @@ SSdbcore.dangerously_block_on_multiple_unsanitized_queries( list( - "TRUNCATE TABLE [format_table_name("persistence_static_map_objects")]", - "TRUNCATE TABLE [format_table_name("persistence_static_level_objects")]", - "TRUNCATE TABLE [format_table_name("persistence_static_global_objects")]", + "TRUNCATE TABLE [DB_PREFIX_TABLE_NAME("persistence_static_map_objects")]", + "TRUNCATE TABLE [DB_PREFIX_TABLE_NAME("persistence_static_level_objects")]", + "TRUNCATE TABLE [DB_PREFIX_TABLE_NAME("persistence_static_global_objects")]", ), ) @@ -276,7 +276,7 @@ usr = null SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_static_level_objects")] WHERE level_id = :level", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_static_level_objects")] WHERE level_id = :level", list( "level" = level_id, ), @@ -294,7 +294,7 @@ usr = null SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_static_map_objects")] WHERE map_id = :map", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_static_map_objects")] WHERE map_id = :map", list( "map" = map_id, ), @@ -312,7 +312,7 @@ usr = null SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_static_global_objects")]", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_static_global_objects")]", ) usr = intentionally_allow_admin_proccall @@ -327,7 +327,7 @@ usr = null SSdbcore.RunQuery( - "TRUNCATE TABLE [format_table_name("persistence_dynamic_objects")]", + "TRUNCATE TABLE [DB_PREFIX_TABLE_NAME("persistence_dynamic_objects")]", ) usr = intentionally_allow_admin_proccall @@ -342,7 +342,7 @@ usr = null SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_dynamic_objects")] WHERE level_id = :level", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_dynamic_objects")] WHERE level_id = :level", list( "level" = level_id, ), diff --git a/code/controllers/subsystem/persistence/modules/spatial_metadata.dm b/code/controllers/subsystem/persistence/modules/spatial_metadata.dm index 8318e210040a..22d8c1a1b4b6 100644 --- a/code/controllers/subsystem/persistence/modules/spatial_metadata.dm +++ b/code/controllers/subsystem/persistence/modules/spatial_metadata.dm @@ -66,7 +66,7 @@ var/datum/db_query/query = SSdbcore.NewQuery( "SELECT TIMESTAMPDIFF(HOUR, saved, NOW()), saved_round_id, data, generation \ - FROM [format_table_name("persistence_level_metadata")] \ + FROM [DB_PREFIX_TABLE_NAME("persistence_level_metadata")] \ WHERE level_id = :level", list( "level" = level_id, @@ -103,7 +103,7 @@ src.round_id_saved = GLOB.round_number SSdbcore.RunQuery( - "INSERT INTO [format_table_name("persistence_level_metadata")] (saved, saved_round_id, level_id, data, generation) \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_level_metadata")] (saved, saved_round_id, level_id, data, generation) \ VALUES (Now(), :round, :level, :data, :generation) ON DUPLICATE KEY UPDATE \ data = VALUES(data), generation = VALUES(generation), saved_round_id = VALUES(saved_round_id), saved = VALUES(saved)", list( diff --git a/code/controllers/subsystem/persistence/modules/string_kkv.dm b/code/controllers/subsystem/persistence/modules/string_kkv.dm index 6ae51d36a225..66b1ff79468d 100644 --- a/code/controllers/subsystem/persistence/modules/string_kkv.dm +++ b/code/controllers/subsystem/persistence/modules/string_kkv.dm @@ -60,7 +60,7 @@ var/oldusr = usr usr = null var/datum/db_query/query = SSdbcore.NewQuery( - "SELECT `value` FROM [format_table_name("persistence_string_kkv")] WHERE `group` = :group AND `key` = :key", + "SELECT `value` FROM [DB_PREFIX_TABLE_NAME("persistence_string_kkv")] WHERE `group` = :group AND `key` = :key", list( "group" = group, "key" = key @@ -79,7 +79,7 @@ var/oldusr = usr usr = null var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("persistence_string_kkv")] (`group`, `key`, `value`) VALUES (:group, :key, :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`), `modified` = Now(), `revision` = `revision` + 1", + "INSERT INTO [DB_PREFIX_TABLE_NAME("persistence_string_kkv")] (`group`, `key`, `value`) VALUES (:group, :key, :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`), `modified` = Now(), `revision` = `revision` + 1", list( "group" = group, "key" = key, diff --git a/code/controllers/subsystem/persistence/world.dm b/code/controllers/subsystem/persistence/world.dm index 30ec4b2cfd2a..e1f82acdc8dd 100644 --- a/code/controllers/subsystem/persistence/world.dm +++ b/code/controllers/subsystem/persistence/world.dm @@ -234,21 +234,21 @@ for(var/datum/map_level_persistence/level_metadata as anything in ordered_level_metadata) SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_bulk_entity")] WHERE level_id = :level, generation != :generation", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_bulk_entity")] WHERE level_id = :level, generation != :generation", list( "level" = level_metadata.level_id, "generation" = level_metadata.generation, ), ) SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_static_level_objects")] WHERE level_id = :level, generation != :generation", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_static_level_objects")] WHERE level_id = :level, generation != :generation", list( "level" = level_metadata.level_id, "generation" = level_metadata.generation, ), ) SSdbcore.RunQuery( - "DELETE FROM [format_table_name("persistence_dynamic_objects")] WHERE level_id = :level, generation != :generation", + "DELETE FROM [DB_PREFIX_TABLE_NAME("persistence_dynamic_objects")] WHERE level_id = :level, generation != :generation", list( "level" = level_metadata.level_id, "generation" = level_metadata.generation, diff --git a/code/controllers/subsystem/photography.dm b/code/controllers/subsystem/photography.dm index 7e4fbbcbccd4..37f23abe4c9a 100644 --- a/code/controllers/subsystem/photography.dm +++ b/code/controllers/subsystem/photography.dm @@ -115,7 +115,7 @@ SUBSYSTEM_DEF(photography) var/datum/db_query/query = SSdbcore.NewQuery( {" - INSERT INTO [format_table_name("pictures")] + INSERT INTO [DB_PREFIX_TABLE_NAME("pictures")] (`hash`, `width`, `height`) VALUES (:hash, :width, :height) "}, @@ -140,7 +140,7 @@ SUBSYSTEM_DEF(photography) var/datum/db_query/query = SSdbcore.NewQuery( {" SELECT `width`, `height` - FROM [format_table_name("pictures")] + FROM [DB_PREFIX_TABLE_NAME("pictures")] WHERE `hash` = :hash "}, list( @@ -195,7 +195,7 @@ SUBSYSTEM_DEF(photography) var/datum/db_query/query = SSdbcore.NewQuery( {" - INSERT INTO [format_table_name("photographs")] + INSERT INTO [DB_PREFIX_TABLE_NAME("photographs")] (`picture`, `scene`, `desc`) VALUES (:hash, :scene, :desc) "}, @@ -220,7 +220,7 @@ SUBSYSTEM_DEF(photography) var/datum/db_query/query = SSdbcore.NewQuery( {" SELECT `picture`, `scene`, `desc` - FROM [format_table_name("photographs")] + FROM [DB_PREFIX_TABLE_NAME("photographs")] WHERE `id` = :id "}, list( diff --git a/code/controllers/subsystem/playtime.dm b/code/controllers/subsystem/playtime.dm index 617cdbf03350..5f1d1c2ec220 100644 --- a/code/controllers/subsystem/playtime.dm +++ b/code/controllers/subsystem/playtime.dm @@ -46,7 +46,7 @@ SUBSYSTEM_DEF(playtime) "player" = playerid ) C.persistent.playtime_queued = list() - SSdbcore.MassInsertLegacy(format_table_name("playtime"), built, duplicate_key = "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)") + SSdbcore.MassInsertLegacy(DB_PREFIX_TABLE_NAME("playtime"), built, duplicate_key = "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)") /** * returns a list of playtime roles diff --git a/code/controllers/subsystem/repository.dm b/code/controllers/subsystem/repository.dm index 04db037a4973..4464288f229d 100644 --- a/code/controllers/subsystem/repository.dm +++ b/code/controllers/subsystem/repository.dm @@ -11,3 +11,6 @@ SUBSYSTEM_DEF(repository) __create_repositories() __init_repositories() return SS_INIT_SUCCESS + +/datum/controller/subsystem/repository/proc/get_all_repositories() + return __get_all_repositories() diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 44f7944a2b98..5a204c1320d3 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -89,6 +89,10 @@ SUBSYSTEM_DEF(statpanels) STATPANEL_DATA_CLICK(config.stat_key(), config.stat_entry(), "\ref[config]") else STATPANEL_DATA_LINE("FATAL - NO CONFIG") + if(config) + STATPANEL_DATA_CLICK(Configuration.stat_key(), Configuration.stat_entry(), "\ref[Configuration]") + else + STATPANEL_DATA_LINE("FATAL - NO CONFIG (NEW)") STATPANEL_DATA_ENTRY("BYOND:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%)) (Internal Tick Usage: [round(MAPTICK_LAST_INTERNAL_TICK_USAGE,0.1)]%)") if(Master) STATPANEL_DATA_CLICK(Master.stat_key(), Master.stat_entry(), "\ref[Master]") diff --git a/code/controllers/toml_config/README.md b/code/controllers/toml_config/README.md new file mode 100644 index 000000000000..025e5b593f15 --- /dev/null +++ b/code/controllers/toml_config/README.md @@ -0,0 +1,3 @@ +# Configuration Module + +Experimental new TOML configuration to replace old configuration with eventually. diff --git a/code/controllers/toml_config/entries/backend.dm b/code/controllers/toml_config/entries/backend.dm new file mode 100644 index 000000000000..25e66949ac30 --- /dev/null +++ b/code/controllers/toml_config/entries/backend.dm @@ -0,0 +1,6 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/datum/toml_config_entry/backend + abstract_type = /datum/toml_config_entry/backend + category = "backend" diff --git a/code/controllers/toml_config/entries/backend.repository.dm b/code/controllers/toml_config/entries/backend.repository.dm new file mode 100644 index 000000000000..9c812b38a105 --- /dev/null +++ b/code/controllers/toml_config/entries/backend.repository.dm @@ -0,0 +1,14 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/datum/toml_config_entry/backend/repository + abstract_type = /datum/toml_config_entry/backend/repository + category = "backend.repository" + +/datum/toml_config_entry/backend/repository/persistence + key = "persistence" + desc = {" + Enable repository persistence. This requires the database to be available. Without this, most persistence + features will not function. + "} + default = TRUE diff --git a/code/controllers/toml_config/toml_config_entry.dm b/code/controllers/toml_config/toml_config_entry.dm new file mode 100644 index 000000000000..88eb4e6039a5 --- /dev/null +++ b/code/controllers/toml_config/toml_config_entry.dm @@ -0,0 +1,107 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +/** + * Config entry. + * + * Supports at time of writing: + * * numbers + * * strings + * * (nested) lists + * * (nested) dictionaries + * + * Supports at time of writing auditing VV edits to: + * * numbers + * * strings + */ +/datum/toml_config_entry + abstract_type = /datum/toml_config_entry + /// key / name + var/key + /// category / where this is + var/category + + /// description of this entry + var/desc + + /// default value + var/default + /// current value + var/value + + /// vv edit disallowed + /// * Does not stop get_entry and set_entry from setting our value. Those are not considered vv-protected. + var/vv_locked = FALSE + /// vv read disallowed + /// * Does not automatically imply [vv_locked]. + /// * Does not stop get_entry and set_entry from pulling our value. Those are not considered vv-protected. + var/vv_secret = FALSE + /// sensitive + /// * Requires get_sensitive_entry() and set_sensitive_entry() to read/write. + /// * Does not actually imply [vv_locked] and [vv_secret]. + var/sensitive = FALSE + +/datum/toml_config_entry/vv_edit_var(var_name, var_value, mass_edit, raw_edit) + switch(var_name) + if(NAMEOF(src, default)) + return FALSE + if(NAMEOF(src, value)) + if(vv_locked) + return FALSE + if(NAMEOF(src, key)) + return FALSE + if(NAMEOF(src, category)) + return FALSE + if(NAMEOF(src, desc)) + return FALSE + if(NAMEOF(src, vv_locked)) + return FALSE + if(NAMEOF(src, vv_secret)) + return FALSE + if(NAMEOF(src, sensitive)) + return FALSE + return ..() + +/datum/toml_config_entry/vv_get_var(var_name, resolve) + switch(var_name) + if(NAMEOF(src, value)) + if(vv_locked) + return "-- secret --" + return ..() + +/datum/toml_config_entry/CanProcCall(procname) + switch(procname) + if(NAMEOF_PROC(src, New), NAMEOF_PROC(src, Destroy)) + return FALSE + if(NAMEOF_PROC(src, reset)) + return FALSE + if(NAMEOF_PROC(src, apply)) + return FALSE + return ..() + +/datum/toml_config_entry/vv_delete() + return FALSE + +/** + * Called once when resetting. + */ +/datum/toml_config_entry/proc/reset() + if(isnum(default)) + value = default + else if(istext(default)) + value = default + else if(islist(default)) + value = deep_copy_list(default) + else + CRASH("unexpected value in default.") + +/** + * Called once with the value from each load. + * + * Can be used to overlay values. + * + * @params + * * raw_config_value - Raw parsed data. We own the reference to this once this proc is called. + */ +/datum/toml_config_entry/proc/apply(raw_config_value) + value = raw_config_value diff --git a/code/controllers/toml_config/toml_configuration.dm b/code/controllers/toml_config/toml_configuration.dm new file mode 100644 index 000000000000..ec2984bcdde6 --- /dev/null +++ b/code/controllers/toml_config/toml_configuration.dm @@ -0,0 +1,169 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +// todo: maybe rename to config? or keep it as Configuration to keep with naming scheme of other 'system / backend' modules like the MC? +GLOBAL_REAL(Configuration, /datum/controller/toml_configuration) + +// todo: /datum/controller/configuration +/datum/controller/toml_configuration + /// Entries by type. + VAR_PRIVATE/list/datum/toml_config_entry/typed_entries + /// Entries as same structure as the underlying toml/json + VAR_PRIVATE/list/datum/toml_config_entry/keyed_entries + +/datum/controller/toml_configuration/CanProcCall(procname) + switch(procname) + if(NAMEOF_PROC(src, New), NAMEOF_PROC(src, Destroy), NAMEOF_PROC(src, Initialize)) + return FALSE + if(NAMEOF_PROC(src, get_entry), NAMEOF_PROC(src, set_entry)) + return FALSE + if(NAMEOF_PROC(src, get_sensitive_entry), NAMEOF_PROC(src, set_sensitive_entry)) + return FALSE + if(NAMEOF_PROC(src, reload), NAMEOF_PROC(src, reset), NAMEOF_PROC(src, load), NAMEOF_PROC(src, recursively_load_from_list)) + return FALSE + return ..() + +/datum/controller/toml_configuration/vv_edit_var(var_name, var_value, mass_edit, raw_edit) + switch(var_name) + if(NAMEOF(src, keyed_entries)) + return FALSE + return ..() + +/datum/controller/toml_configuration/New() + if(Configuration != src) + if(Configuration) + qdel(Configuration) + Configuration = src + +/datum/controller/toml_configuration/Initialize() + keyed_entries = list() + typed_entries = list() + for(var/datum/toml_config_entry/path as anything in typesof(/datum/toml_config_entry)) + if(initial(path.abstract_type) == path) + continue + var/datum/toml_config_entry/entry = new path + typed_entries[entry.type] = entry + var/list/nesting = splittext(entry.category, ".") + var/list/current_list = keyed_entries + for(var/i in 1 to length(nesting)) + LAZYINITLIST(current_list[nesting[i]]) + current_list = current_list[nesting[i]] + current_list[entry.key] = entry + reload() + +/datum/controller/toml_configuration/stat_key() + return "Configuration (New):" + +/datum/controller/toml_configuration/stat_entry() + return "Edit" + +/** + * HEY! LISTEN! By calling this proc you are affirming that: + * + * * The entry type you are passing in is static and not a variable that can be tampered with. + * * The value you get will be immediately consumed in a non-VV-able manner. + */ +/datum/controller/toml_configuration/proc/get_sensitive_entry(datum/toml_config_entry/entry_type) + // todo: cache / optimize + var/datum/toml_config_entry/entry = typed_entries[entry_type] + if(!entry) + return + if(!entry.sensitive) + CRASH("attempted to get sensitive entry with sensitive get entry.") + return entry.value + +/** + * HEY! LISTEN! By calling this proc you are affirming that: + * + * * The entry type you are passing in is static and not a variable that can be tampered with. + * * The value you are passing in is trusted and validated and not a variable that can be tampered with. + */ +/datum/controller/toml_configuration/proc/set_sensitive_entry(datum/toml_config_entry/entry_type, value) + // todo: cache / optimize + var/datum/toml_config_entry/entry = typed_entries[entry_type] + if(!entry) + return + if(entry.sensitive) + CRASH("attempted to set non-sensitive entry with sensitive set entry.") + entry.value = value + +/datum/controller/toml_configuration/proc/get_entry(datum/toml_config_entry/entry_type) + // todo: cache / optimize + var/datum/toml_config_entry/entry = typed_entries[entry_type] + if(!entry) + return + if(entry.sensitive) + CRASH("attempted to get sensitive entry with normal get entry.") + return entry.value + +/datum/controller/toml_configuration/proc/set_entry(datum/toml_config_entry/entry_type, value) + // todo: cache / optimize + var/datum/toml_config_entry/entry = typed_entries[entry_type] + if(!entry) + return + if(entry.sensitive) + CRASH("attempted to set sensitive entry with normal set entry.") + entry.value = value + +/datum/controller/toml_configuration/proc/admin_reload() + reload() + +/** + * Automatically loads default config, and the server's config file. + * + * todo: allow for overriding directories + */ +/datum/controller/toml_configuration/proc/reload() + reset() + load("config.default/config.toml") + load("config/config.toml") + +/** + * Resets the configuration. + */ +/datum/controller/toml_configuration/proc/reset() + for(var/path in typed_entries) + var/datum/toml_config_entry/entry = typed_entries[path] + entry.reset() + +/** + * Loads from a given layer. + * * This will not reset the configuration. Repeated calls to load will allow for layered configuration. + * + * HEY! LISTEN! By calling this proc you are affirming that: + * * The file you are passing in is trusted and not a variable that can be tampered with via VV. + */ +/datum/controller/toml_configuration/proc/load(filelike) + var/list/decoded + if(istext(filelike)) + if(!fexists(filelike)) + CRASH("failed to load [filelike]: does not exist") + decoded = rustg_read_toml_file(filelike) + else if(isfile(filelike)) + // noa path, it might be rsc cache; rust_g can't read that directly. + fdel("tmp/config/loading.toml") + fcopy(filelike, "tmp/config/loading.toml") + decoded = rustg_read_toml_file("tmp/config/loading.toml") + fdel("tmp/config/loading.toml") + if(!decoded) + CRASH("failed to decode config [filelike]!") + + recursively_load_from_list(decoded, keyed_entries) + +/datum/controller/toml_configuration/proc/recursively_load_from_list(list/decoded_list, list/entry_list) + if(!decoded_list || !entry_list) + return + for(var/key in decoded_list) + var/value = decoded_list[key] + if(islist(value)) + var/list/next_entry_list = entry_list[key] + if(!islist(next_entry_list)) + // todo: warn + else + recursively_load_from_list(value, next_entry_list[key]) + else + var/datum/toml_config_entry/entry = entry_list[key] + if(!istype(entry)) + // todo: warn + else + entry.apply(value) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index c93c2373e7b9..745ad7051e49 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -1,3 +1,10 @@ +/** + * Called when an admin attempts to delete us with introspection tools. + */ +/datum/proc/vv_delete() + . = TRUE + qdel(src) + /datum/proc/CanProcCall(procname) return TRUE diff --git a/code/game/machinery/gear_painter.dm b/code/game/machinery/gear_painter.dm index 4989687346ae..8b23bdfd0507 100644 --- a/code/game/machinery/gear_painter.dm +++ b/code/game/machinery/gear_painter.dm @@ -285,7 +285,7 @@ /obj/machinery/gear_painter/proc/check_valid_color(list/cm, mob/user) if(!islist(cm)) // normal - var/list/HSV = ReadHSV(RGBtoHSV(cm)) + var/list/HSV = rgb2hsv(cm) if(HSV[3] < minimum_normal_lightness) temp = "[cm] is too dark (Minimum lightness: [minimum_normal_lightness])" return FALSE @@ -294,7 +294,7 @@ // We test using full red, green, blue, and white // A predefined number of them must pass to be considered valid var/passed = 0 -#define COLORTEST(thestring, thematrix) passed += (ReadHSV(RGBtoHSV(RGBMatrixTransform(thestring, thematrix)))[3] >= minimum_matrix_lightness) +#define COLORTEST(thestring, thematrix) passed += (rgb2hsv(RGBMatrixTransform(thestring, thematrix))[3] >= minimum_matrix_lightness) COLORTEST("FF0000", cm) COLORTEST("00FF00", cm) COLORTEST("0000FF", cm) diff --git a/code/game/machinery/telecomms/blackbox.dm b/code/game/machinery/telecomms/blackbox.dm index 61e83517e4c9..fb9cef3c7c4f 100644 --- a/code/game/machinery/telecomms/blackbox.dm +++ b/code/game/machinery/telecomms/blackbox.dm @@ -182,7 +182,7 @@ var/obj/machinery/blackbox_recorder/blackbox var/round_id var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]", + "SELECT MAX(round_id) AS round_id FROM [DB_PREFIX_TABLE_NAME("feedback")]", list() ) @@ -195,7 +195,7 @@ var/obj/machinery/blackbox_recorder/blackbox for(var/datum/feedback_variable/FV in feedback) SSdbcore.RunQuery( - "INSERT INTO [format_table_name("feedback")] VALUES (null, Now(), :round_id, :variable, :value, :details)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("feedback")] VALUES (null, Now(), :round_id, :variable, :value, :details)", list( "round_id" = "[round_id]", "variable" = "[FV.get_variable()]", diff --git a/code/game/objects/items/storage/medical/hypokit.dm b/code/game/objects/items/storage/medical/hypokit.dm index 6409bb530a8e..055f3d68c0a5 100644 --- a/code/game/objects/items/storage/medical/hypokit.dm +++ b/code/game/objects/items/storage/medical/hypokit.dm @@ -13,7 +13,7 @@ var/hypospray_path = /obj/item/hypospray var/vial_path = /obj/item/reagent_containers/glass/hypovial - var/vial_amount = 6 + var/vial_amount = 0 /obj/item/storage/hypokit/legacy_spawn_contents() . = ..() @@ -54,6 +54,7 @@ inhand_state = "normal" hypospray_path = /obj/item/hypospray/advanced/loaded vial_path = /obj/item/reagent_containers/glass/hypovial/large + vial_amount = 6 max_combined_volume = STORAGE_VOLUME_BOX * 2 weight_volume = WEIGHT_VOLUME_NORMAL * 1.5 diff --git a/code/game/objects/items/stream_projector/medichine.dm b/code/game/objects/items/stream_projector/medichine.dm index 4583723dc05b..21c1652bc25b 100644 --- a/code/game/objects/items/stream_projector/medichine.dm +++ b/code/game/objects/items/stream_projector/medichine.dm @@ -182,7 +182,7 @@ GLOBAL_LIST_EMPTY(medichine_cell_datums) entity_beam.segmentation.color = beam_color /obj/item/stream_projector/medichine/proc/beam_color(color) - var/list/decoded = ReadRGB(color) + var/list/decoded = rgb2num(color) return list( decoded[1] / 255, decoded[2] / 255, decoded[3] / 255, 0, 0, 0, @@ -539,7 +539,7 @@ GLOBAL_LIST_EMPTY(medichine_cell_datums) var/list/color_rgb_list /datum/medichine_cell/New() - color_rgb_list = ReadRGB(color) + color_rgb_list = rgb2num(color) for(var/i in 1 to length(effects)) var/datum/medichine_effect/effect = effects[i] if(istype(effect)) diff --git a/code/game/objects/materials.dm b/code/game/objects/materials.dm index 8f6e73ce51cd..7a8c5573657d 100644 --- a/code/game/objects/materials.dm +++ b/code/game/objects/materials.dm @@ -91,7 +91,12 @@ if(islist(material_parts)) var/list/parts = list() for(var/key in material_parts) - parts[key] = RSmaterials.fetch(key) + var/datum/prototype/material/result = RSmaterials.fetch_or_defer(key) + switch(result) + if(REPOSITORY_FETCH_DEFER) + // todo: handle this + result = null + parts[key] = result update_material_multi(parts) else if(material_parts == MATERIAL_DEFAULT_DISABLED) else if(material_parts == MATERIAL_DEFAULT_ABSTRACTED) @@ -99,7 +104,12 @@ // skip specifying parts because abstracted update_material_multi() else - update_material_single((material_parts = RSmaterials.fetch(material_parts))) + var/datum/prototype/material/result = RSmaterials.fetch_or_defer(material_parts) + switch(result) + if(REPOSITORY_FETCH_DEFER) + // todo: handle this + result = null + update_material_single((material_parts = result)) /** * forces a material update diff --git a/code/game/objects/obj.dm b/code/game/objects/obj.dm index 33ebad602a1f..1d820365df08 100644 --- a/code/game/objects/obj.dm +++ b/code/game/objects/obj.dm @@ -619,8 +619,8 @@ color = colors[1] if(COLORATION_MODE_RG_MATRIX) ASSERT(length(colors) == 2) - var/list/red_decoded = ReadRGB(colors[1]) - var/list/green_decoded = ReadRGB(colors[2]) + var/list/red_decoded = rgb2num(colors[1]) + var/list/green_decoded = rgb2num(colors[2]) color = list( red_decoded[1] / 255, red_decoded[2] / 255, red_decoded[3] / 255, 0, green_decoded[1] / 255, green_decoded[2] / 255, green_decoded[3] / 255, 0, @@ -629,8 +629,8 @@ ) if(COLORATION_MODE_GB_MATRIX) ASSERT(length(colors) == 2) - var/list/green_decoded = ReadRGB(colors[1]) - var/list/blue_decoded = ReadRGB(colors[2]) + var/list/green_decoded = rgb2num(colors[1]) + var/list/blue_decoded = rgb2num(colors[2]) color = list( 0, 0, 0, 0, green_decoded[1] / 255, green_decoded[2] / 255, green_decoded[3] / 255, 0, @@ -639,8 +639,8 @@ ) if(COLORATION_MODE_RB_MATRIX) ASSERT(length(colors) == 2) - var/list/red_decoded = ReadRGB(colors[1]) - var/list/blue_decoded = ReadRGB(colors[2]) + var/list/red_decoded = rgb2num(colors[1]) + var/list/blue_decoded = rgb2num(colors[2]) color = list( red_decoded[1] / 255, red_decoded[2] / 255, red_decoded[3] / 255, 0, 0, 0, 0, 0, @@ -649,9 +649,9 @@ ) if(COLORATION_MODE_RGB_MATRIX) ASSERT(length(colors) == 3) - var/list/red_decoded = ReadRGB(colors[1]) - var/list/green_decoded = ReadRGB(colors[2]) - var/list/blue_decoded = ReadRGB(colors[3]) + var/list/red_decoded = rgb2num(colors[1]) + var/list/green_decoded = rgb2num(colors[2]) + var/list/blue_decoded = rgb2num(colors[3]) color = list( red_decoded[1] / 255, red_decoded[2] / 255, red_decoded[3] / 255, 0, green_decoded[1] / 255, green_decoded[2] / 255, green_decoded[3] / 255, 0, diff --git a/code/game/objects/structures/barricade.dm b/code/game/objects/structures/barricade.dm index e490a2965fa4..e34557966bd6 100644 --- a/code/game/objects/structures/barricade.dm +++ b/code/game/objects/structures/barricade.dm @@ -13,7 +13,12 @@ /obj/structure/barricade/Initialize(mapload, datum/prototype/material/material_like) if(!isnull(material_like)) - set_primary_material(RSmaterials.fetch(material_like)) + var/resolved_material = RSmaterials.fetch_or_defer(material_like) + switch(resolved_material) + if(REPOSITORY_FETCH_DEFER) + // todo: handle + else + set_primary_material(resolved_material) return ..() /obj/structure/barricade/update_material_single(datum/prototype/material/material) diff --git a/code/game/objects/structures/low_wall.dm b/code/game/objects/structures/low_wall.dm index e3419164af54..e3d4b324711c 100644 --- a/code/game/objects/structures/low_wall.dm +++ b/code/game/objects/structures/low_wall.dm @@ -48,9 +48,14 @@ GLOBAL_LIST_INIT(wallframe_typecache, typecacheof(list( paint_color = COLOR_WALL_GUNMETAL stripe_color = COLOR_WALL_GUNMETAL -/obj/structure/wall_frame/Initialize(mapload, material) - if(!isnull(material)) - set_primary_material(RSmaterials.fetch(material)) +/obj/structure/wall_frame/Initialize(mapload, datum/prototype/material/material_like) + if(!isnull(material_like)) + var/resolved_material = RSmaterials.fetch_or_defer(material_like) + switch(resolved_material) + if(REPOSITORY_FETCH_DEFER) + // todo: handle + else + set_primary_material(resolved_material) . = ..() update_overlays() diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 9a710c58a5f2..0bc1d2b3538c 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -1,40 +1,52 @@ +#define MAX_NOTICES 8 + /obj/structure/noticeboard name = "notice board" desc = "A board for pinning important notices upon." icon = 'icons/obj/stationobjs.dmi' - icon_state = "nboard00" - density = 0 - anchored = 1 + icon_state = "noticeboard" + density = FALSE + anchored = TRUE + integrity_max = 150 + /// Current number of a pinned notices var/notices = 0 /obj/structure/noticeboard/Initialize(mapload, dir, building = FALSE) + . = ..() + if(building) pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 - update_icon() - if(mapload) - for(var/obj/item/I in loc) - if(notices > 4) - break - if(istype(I, /obj/item/paper)) - I.forceMove(src) - notices++ - icon_state = "nboard0[notices]" - . = ..() + update_appearance(UPDATE_ICON) + + if(!mapload) + return + + for(var/obj/item/I in loc) + if(notices > MAX_NOTICES) + break + if(istype(I, /obj/item/paper)) + I.forceMove(src) + notices++ + update_appearance(UPDATE_ICON) //attaching papers!! -/obj/structure/noticeboard/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/paper)) - if(notices < 5) - if(!user.attempt_insert_item_for_installation(O, src)) +/obj/structure/noticeboard/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/paper) || istype(O, /obj/item/photo)) + if(!allowed(user)) + to_chat(user, SPAN_WARNING("You are not authorized to add notices!")) + return + if(notices < MAX_NOTICES) + if(!user.transfer_item_to_loc(O, src)) return - O.add_fingerprint(user) - add_fingerprint(user) notices++ - icon_state = "nboard0[notices]" //update sprite - to_chat(user, "You pin the paper to the noticeboard.") + update_appearance(UPDATE_ICON) + to_chat(user, SPAN_NOTICE("You pin the [O] to the noticeboard.")) else - to_chat(user, "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.") + to_chat(user, SPAN_WARNING("The notice board is full!")) + // else + // return ..() + if(O.is_wrench()) to_chat(user, "You start to unwrench the noticeboard.") playsound(src.loc, O.tool_sound, 50, 1) @@ -43,52 +55,77 @@ new /obj/item/frame/noticeboard( src.loc ) qdel(src) -/obj/structure/noticeboard/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) - user.do_examinate(src) - -// Since Topic() never seems to interact with usr on more than a superficial -// level, it should be fine to let anyone mess with the board other than ghosts. -/obj/structure/noticeboard/examine(mob/user, dist) //why the fuck is this shit on examine - if(!user) - user = usr - if(user.Adjacent(src)) - var/dat = "Noticeboard
" - for(var/obj/item/paper/P in src) - dat += "[P.name] Write Remove
" - user << browse("Notices[dat]","window=noticeboard") - onclose(user, "noticeboard") +/obj/structure/noticeboard/ui_state(mob/user) + return GLOB.physical_state + +/obj/structure/noticeboard/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "NoticeBoard", name) + ui.open() + +/obj/structure/noticeboard/ui_data(mob/user) + var/list/data = list() + data["allowed"] = allowed(user) + data["items"] = list() + for(var/obj/item/content in contents) + var/list/content_data = list( + name = content.name, + ref = REF(content) + ) + data["items"] += list(content_data) + return data + +/obj/structure/noticeboard/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/obj/item/item = locate(params["ref"]) in contents + if(!istype(item) || item.loc != src) + return + + var/mob/user = usr + + switch(action) + if("examine") + // if(istype(item, /obj/item/paper)) + // item.ui_interact(user) // not using tguipaper + // else + user.examinate(item) + return TRUE + if("remove") + if(!allowed(user)) + return + remove_item(item, user) + return TRUE + +/obj/structure/noticeboard/update_overlays() + . = ..() + if(notices) + . += "notices_[notices]" + +/** + * Removes an item from the notice board + * + * Arguments: + * * item - The item that is to be removed + * * user - The mob that is trying to get the item removed, if there is one + */ +/obj/structure/noticeboard/proc/remove_item(obj/item/item, mob/user) + item.forceMove(drop_location()) + if(user) + user.put_in_hands(item) + to_chat(user, SPAN_NOTICE("Removed from board.")) + notices-- + update_appearance(UPDATE_ICON) + +/obj/structure/noticeboard/deconstructed(disassembled = TRUE) + if(!disassembled) + new /obj/item/stack/material/wood(loc) else - ..() + new /obj/item/frame/noticeboard(loc) + for(var/obj/item/content in contents) + remove_item(content) -/obj/structure/noticeboard/Topic(href, href_list) - ..() - usr.set_machine(src) - if(href_list["remove"]) - if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open - return - var/obj/item/P = locate(href_list["remove"]) - if(P && P.loc == src) - P.loc = get_turf(src) //dump paper on the floor because you're a clumsy fuck - P.add_fingerprint(usr) - add_fingerprint(usr) - notices-- - icon_state = "nboard0[notices]" - if(href_list["write"]) - if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open - return - var/obj/item/P = locate(href_list["write"]) - if((P && P.loc == src)) //ifthe paper's on the board - var/mob/living/M = usr - if(istype(M)) - var/obj/item/pen/E = M.get_held_item_of_type(/obj/item/pen) - if(E) - add_fingerprint(M) - P.attackby(E, usr) - else - to_chat(M, "You'll need something to write with!") - if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) - if((P && P.loc == src)) - usr << browse("[P.name][P.info]", "window=[P.name]") - onclose(usr, "[P.name]") - return +#undef MAX_NOTICES diff --git a/code/game/objects/structures/props/puzzledoor.dm b/code/game/objects/structures/props/puzzledoor.dm index 66c6b1736827..a73e4cd16311 100644 --- a/code/game/objects/structures/props/puzzledoor.dm +++ b/code/game/objects/structures/props/puzzledoor.dm @@ -36,7 +36,7 @@ /obj/machinery/door/blast/puzzle/Initialize(mapload) . = ..() - implicit_material = RSmaterials.fetch(/datum/prototype/material/alienalloy/dungeonium) + implicit_material = RSmaterials.fetch_local_or_throw(/datum/prototype/material/alienalloy/dungeonium) if(locks.len) return var/check_range = world.view * checkrange_mult diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index 273b68e575f6..09824f2a6936 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -15,9 +15,14 @@ var/isSwitchingStates = 0 var/oreAmount = 7 -/obj/structure/simple_door/Initialize(mapload, material) - if(!isnull(material)) - set_primary_material(RSmaterials.fetch(material)) +/obj/structure/simple_door/Initialize(mapload, datum/prototype/material/material_like) + if(!isnull(material_like)) + var/resolved_material = RSmaterials.fetch_or_defer(material_like) + switch(resolved_material) + if(REPOSITORY_FETCH_DEFER) + // todo: handle + else + set_primary_material(resolved_material) return ..() /obj/structure/simple_door/update_material_single(datum/prototype/material/material) diff --git a/code/game/statistics.dm b/code/game/statistics.dm index e8f73892bd62..2a67a26b9058 100644 --- a/code/game/statistics.dm +++ b/code/game/statistics.dm @@ -9,7 +9,7 @@ log_game("SQL ERROR during population polling. Failed to connect.") else var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("population")] (playercount, admincount, time) VALUES (:pc, :ac, NOW())", + "INSERT INTO [DB_PREFIX_TABLE_NAME("population")] (playercount, admincount, time) VALUES (:pc, :ac, NOW())", list( "pc" = sanitizeSQL(playercount), "ac" = sanitizeSQL(admincount), @@ -48,7 +48,7 @@ log_game("SQL ERROR during death reporting. Failed to connect.") else var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES \ (:name, :key, :job, :special, :pod, :time, :laname, :lakey, :gender, :bruteloss, :fireloss, :brainloss, :oxyloss, :coord)", list( "name" = sqlname, @@ -98,7 +98,7 @@ log_game("SQL ERROR during death reporting. Failed to connect.") else var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("death")] (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) VALUES \ (:name, :key, :job, :special, :pod, :time, :laname, :lakey, :geender, :bruteloss, :fireloss, :brainloss, :oxyloss, :coord)", list( "name" = sqlname, @@ -146,7 +146,7 @@ else var/datum/db_query/max_query = SSdbcore.RunQuery( - "SELECT MAX(roundid) AS max_round_id FROM [format_table_name("feedback")]", + "SELECT MAX(roundid) AS max_round_id FROM [DB_PREFIX_TABLE_NAME("feedback")]", list(), ) @@ -168,7 +168,7 @@ var/value = item.get_value() var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("feedback")] (id, roundid, time, variable, value) VALUES (null, :rid, Now(), :var, :val)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("feedback")] (id, roundid, time, variable, value) VALUES (null, :rid, Now(), :var, :val)", list( "rid" = newroundid, "var" = sanitizeSQL(variable), diff --git a/code/game/turfs/simulated/floor/floor.dm b/code/game/turfs/simulated/floor/floor.dm index 793169f852d6..98b2f44c5577 100644 --- a/code/game/turfs/simulated/floor/floor.dm +++ b/code/game/turfs/simulated/floor/floor.dm @@ -73,7 +73,7 @@ CRASH("additional arg detected in /floor Initialize. turfs do not have init arguments as ChangeTurf does not accept them.") var/datum/prototype/flooring/set_flooring_to - if(initial_flooring && (set_flooring_to = RSflooring.fetch(initial_flooring))) + if(initial_flooring && (set_flooring_to = RSflooring.fetch_local_or_throw(initial_flooring))) set_flooring(set_flooring_to, TRUE) else // todo: these are only here under else because set flooring will trigger it diff --git a/code/game/turfs/simulated/floor_types/water.dm b/code/game/turfs/simulated/floor_types/water.dm index 3e1fd52501f9..beaee03cc0e9 100644 --- a/code/game/turfs/simulated/floor_types/water.dm +++ b/code/game/turfs/simulated/floor_types/water.dm @@ -24,7 +24,7 @@ /turf/simulated/floor/water/Initialize(mapload) . = ..() - var/datum/prototype/flooring/F = RSflooring.fetch(/datum/prototype/flooring/water) + var/datum/prototype/flooring/F = RSflooring.fetch_local_or_throw(/datum/prototype/flooring/water) footstep_sounds = F?.footstep_sounds update_icon() diff --git a/code/game/turfs/simulated/wall/materials.dm b/code/game/turfs/simulated/wall/materials.dm index 507a17b1032d..1867c7a0725b 100644 --- a/code/game/turfs/simulated/wall/materials.dm +++ b/code/game/turfs/simulated/wall/materials.dm @@ -1,7 +1,7 @@ /turf/simulated/wall/proc/init_materials(datum/prototype/material/outer = material_outer, datum/prototype/material/reinforcing = material_reinf, datum/prototype/material/girder = material_girder) - outer = RSmaterials.fetch(outer) - reinforcing = RSmaterials.fetch(reinforcing) - girder = RSmaterials.fetch(girder) + outer = RSmaterials.fetch_local_or_throw(outer) + reinforcing = RSmaterials.fetch_local_or_throw(reinforcing) + girder = RSmaterials.fetch_local_or_throw(girder) if(!isnull(outer)) material_outer = outer diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 6d439de3b5aa..93ceaf8ba586 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -682,3 +682,8 @@ thing.update_hiding_underfloor( (thing.hides_underfloor != OBJ_UNDERFLOOR_NEVER) && we_should_cover, ) + +//* VV *// + +/turf/vv_delete() + ScrapeAway() diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 0f195dd1d715..e332f48c88f2 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -72,7 +72,7 @@ computerid = "" if(isnull(ip)) ip = "" - var/sql = "INSERT INTO [format_table_name("ban")] \ + var/sql = "INSERT INTO [DB_PREFIX_TABLE_NAME("ban")] \ (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`) \ VALUES (null, Now(), :serverip, :type, :reason, :job, :duration, :rounds, Now() + INTERVAL :duration MINUTE, :ckey, :cid, :ip, :a_ckey, :a_cid, :a_ip, :who, :adminwho, '', null, null, null, null, null)" SSdbcore.RunQuery( @@ -133,7 +133,7 @@ else bantype_sql = "bantype = '[bantype_str]'" - var/sql = "SELECT id FROM [format_table_name("ban")] WHERE ckey = :ckey AND [bantype_sql] AND (unbanned is null OR unbanned = false)" + var/sql = "SELECT id FROM [DB_PREFIX_TABLE_NAME("ban")] WHERE ckey = :ckey AND [bantype_sql] AND (unbanned is null OR unbanned = false)" if(job) sql += " AND job = :job" @@ -183,7 +183,7 @@ return var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = :id", + "SELECT ckey, duration, reason FROM [DB_PREFIX_TABLE_NAME("ban")] WHERE id = :id", list( "id" = banid ) @@ -215,7 +215,7 @@ return SSdbcore.RunQuery( - "UPDATE [format_table_name("ban")] SET reason = :reason, \ + "UPDATE [DB_PREFIX_TABLE_NAME("ban")] SET reason = :reason, \ edits = CONCAT(edits, '- :ckey changed ban reason from \\\":oldreason\\\" to \\\":reason\\\"
') \ WHERE id = :id", list( @@ -233,7 +233,7 @@ to_chat(usr, "Cancelled") return SSdbcore.RunQuery( - "UPDATE [format_table_name("ban")] SET duration = :duration, \ + "UPDATE [DB_PREFIX_TABLE_NAME("ban")] SET duration = :duration, \ edits = CONCAT(edits, '- :ckey changed ban duration from :oldduration to :duration
'), expiration_time = DATE_ADD(bantime, INTERVAL :duration MINUTE) \ WHERE id = :id", list( @@ -264,7 +264,7 @@ var/pckey var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT ckey FROM [format_table_name("ban")] WHERE id = :id", + "SELECT ckey FROM [DB_PREFIX_TABLE_NAME("ban")] WHERE id = :id", list( "id" = id ) @@ -292,7 +292,7 @@ message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) SSdbcore.RunQuery( - "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = :ckey, unbanned_computerid = :cid, unbanned_ip = :ip WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = :ckey, unbanned_computerid = :cid, unbanned_ip = :ip WHERE id = :id", list( "ckey" = unban_ckey, "cid" = unban_computerid, @@ -458,7 +458,7 @@ var/datum/db_query/select_query = SSdbcore.RunQuery( "SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, ip, computerid \ - FROM [format_table_name("ban")] \ + FROM [DB_PREFIX_TABLE_NAME("ban")] \ WHERE 1 [playersearch] [adminsearch] [ipsearch] [cidsearch] [bantypesearch] ORDER BY bantime DESC LIMIT 100", search_params ) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 2eb8325ac572..42bfc1dc3650 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -88,7 +88,7 @@ cidquery = " OR computerid = ':cid' " var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = :ckey [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)", + "SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [DB_PREFIX_TABLE_NAME("ban")] WHERE (ckey = :ckey [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)", list( "ckey" = ckeytext, "ip" = address, diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 29500fb71be7..58583b9bad28 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -113,7 +113,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights return var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT ckey, rank, level, flags FROM [format_table_name("admin")]", + "SELECT ckey, rank, level, flags FROM [DB_PREFIX_TABLE_NAME("admin")]", list() ) diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 147e5c3cd7cc..65148f569a98 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -74,7 +74,7 @@ DEBUG //Job permabans var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)", + "SELECT ckey, job FROM [DB_PREFIX_TABLE_NAME("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)", list() ) @@ -86,7 +86,7 @@ DEBUG //Job tempbans var/datum/db_query/query1 = SSdbcore.RunQuery( - "SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()", + "SELECT ckey, job FROM [DB_PREFIX_TABLE_NAME("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()", list() ) diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index fad215244819..d3a701a40555 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -78,7 +78,7 @@ return var/datum/db_query/select_query = SSdbcore.RunQuery( - "SELECT id FROM [format_table_name("admin")] WHERE ckey = :ckey", + "SELECT id FROM [DB_PREFIX_TABLE_NAME("admin")] WHERE ckey = :ckey", list( "ckey" = adm_ckey ) @@ -92,14 +92,14 @@ if(new_admin) SSdbcore.RunQuery( - "INSERT INTO [format_table_name("admin")] (id, ckey, rank, level, flags) VALUES (null, :ckey, :rank, -1, 0)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("admin")] (id, ckey, rank, level, flags) VALUES (null, :ckey, :rank, -1, 0)", list( "ckey" = adm_ckey, "rank" = new_rank ) ) SSdbcore.RunQuery( - "INSERT INTO [format_table_name("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, NOW(), :ckey, :ip, :logstr)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, NOW(), :ckey, :ip, :logstr)", list( "ckey" = sanitizeSQL(usr.ckey), "ip" = sanitizeSQL(usr.client.address), @@ -110,14 +110,14 @@ else if(!isnull(admin_id) && isnum(admin_id)) SSdbcore.RunQuery( - "UPDATE [format_table_name("admin")] SET rank = :rank WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("admin")] SET rank = :rank WHERE id = :id", list( "rank" = new_rank, "id" = admin_id ) ) SSdbcore.RunQuery( - "INSERT INTO [format_table_name("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, Now(), :ckey, :addr, :log)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, Now(), :ckey, :addr, :log)", list( "ckey" = usr.ckey, "addr" = usr.client.address, @@ -155,7 +155,7 @@ return var/datum/db_query/select_query = SSdbcore.RunQuery( - "SELECT id, flags FROM [format_table_name("admin")] WHERE ckey = :ckey", + "SELECT id, flags FROM [DB_PREFIX_TABLE_NAME("admin")] WHERE ckey = :ckey", list( "ckey" = adm_ckey ) @@ -172,14 +172,14 @@ if(admin_rights & new_permission) //This admin already has this permission, so we are removing it. SSdbcore.RunQuery( - "UPDATE [format_table_name("admin")] SET flags = :flags WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("admin")] SET flags = :flags WHERE id = :id", list( "flags" = admin_rights & ~new_permission, "id" = admin_id ) ) SSdbcore.RunQuery( - "INSERT INTO [format_table_name("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, Now(), :ckey, :addr, :log)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, Now(), :ckey, :addr, :log)", list( "ckey" = usr.ckey, "addr" = usr.client.address, @@ -189,14 +189,14 @@ to_chat(usr, "Permission removed.") else //This admin doesn't have this permission, so we are adding it. SSdbcore.RunQuery( - "UPDATE [format_table_name("admin")] SET flags = :flags WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("admin")] SET flags = :flags WHERE id = :id", list( "flags" = admin_rights | new_permission, "id" = admin_id ) ) SSdbcore.RunQuery( - "INSERT INTO [format_table_name("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, Now(), :ckey, :addr, :log)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("admin_log")] (id, datetime, adminckey, adminip, log) VALUES (NULL, Now(), :ckey, :addr, :log)", list( "ckey" = usr.ckey, "addr" = usr.client.address, diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm index 02e577d13e4d..6b329a5fadb0 100644 --- a/code/modules/admin/verbs/check_customitem_activity.dm +++ b/code/modules/admin/verbs/check_customitem_activity.dm @@ -55,7 +55,7 @@ var/inactive_keys = "None
" var/list/inactive_ckeys = list() if(ckeys_with_customitems.len) var/datum/db_query/query_inactive = SSdbcore.RunQuery( - "SELECT ckey, lastseen FROM [format_table_name("player_lookup")] WHERE datediff(Now(), lastseen) > 60", + "SELECT ckey, lastseen FROM [DB_PREFIX_TABLE_NAME("player_lookup")] WHERE datediff(Now(), lastseen) > 60", list() ) while(query_inactive.NextRow()) @@ -69,7 +69,7 @@ var/inactive_keys = "None
" if(ckeys_with_customitems.len) for(var/cur_ckey in ckeys_with_customitems) var/datum/db_query/query_inactive = SSdbcore.RunQuery( - "SELECT ckey FROM [format_table_name("player_lookup")] WHERE ckey = :ckey", + "SELECT ckey FROM [DB_PREFIX_TABLE_NAME("player_lookup")] WHERE ckey = :ckey", list( "ckey" = cur_ckey ) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index fa96e39a4c46..5b40ba3bc97f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -687,16 +687,6 @@ message_admins(log) log_admin(log) -/client/proc/reload_configuration() - set category = "Debug" - set name = "Reload Configuration" - set desc = "Force config reload to world default" - if(!check_rights(R_DEBUG)) - return - if(alert(usr, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modificatoins?", "Really reset?", "No", "Yes") == "Yes") - config.admin_reload() - load_configuration() //for legacy - /datum/admins/proc/quick_nif() set category = "Fun" set name = "Quick NIF" diff --git a/code/modules/admin/verbs/debug/reload_configuration.dm b/code/modules/admin/verbs/debug/reload_configuration.dm new file mode 100644 index 000000000000..fd80f16133f8 --- /dev/null +++ b/code/modules/admin/verbs/debug/reload_configuration.dm @@ -0,0 +1,12 @@ + +/client/proc/reload_configuration() + set category = "Debug" + set name = "Reload Configuration" + set desc = "Force config reload to world default" + if(!check_rights(R_DEBUG)) + return + if(alert(usr, "Are you absolutely sure you want to reload the configuration from the default path on the disk, wiping any in-round modificatoins?", "Really reset?", "No", "Yes") == "Yes") + log_and_message_admins("[key_name(usr)] reloaded server configuration.") + config.admin_reload() + Configuration.admin_reload() + load_configuration() //for legacy diff --git a/code/modules/admin/view_variables/admin_delete.dm b/code/modules/admin/view_variables/admin_delete.dm index 7157a1cce2bd..16c84012c99f 100644 --- a/code/modules/admin/view_variables/admin_delete.dm +++ b/code/modules/admin/view_variables/admin_delete.dm @@ -16,9 +16,9 @@ //SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(isturf(D)) var/turf/T = D - T.ScrapeAway() + T.vv_delete() else vv_update_display(D, "deleted", VV_MSG_DELETED) - qdel(D) + D.vv_delete() if(!QDELETED(D)) vv_update_display(D, "deleted", "") diff --git a/code/modules/artwork/items/poster.dm b/code/modules/artwork/items/poster.dm index be689b6a4f99..d1be0da56d4d 100644 --- a/code/modules/artwork/items/poster.dm +++ b/code/modules/artwork/items/poster.dm @@ -26,7 +26,7 @@ poster_design_id = pick(RSposter_designs.fetch_by_tag_mutable(poster_random_tag)) if(poster_design_id != src.poster_design_id) src.poster_design_id = poster_design_id - set_poster_design(RSposter_designs.fetch(poster_design_id)) + set_poster_design(RSposter_designs.fetch_local_or_throw(poster_design_id)) /obj/item/poster/proc/set_poster_design(datum/prototype/poster_design/design) src.name = "rolled-up-poster - [design.name]" diff --git a/code/modules/artwork/structures/poster.dm b/code/modules/artwork/structures/poster.dm index 4b707581a185..0c2f3147a1e8 100644 --- a/code/modules/artwork/structures/poster.dm +++ b/code/modules/artwork/structures/poster.dm @@ -41,7 +41,7 @@ poster_design_id = pick(RSposter_designs.fetch_by_tag_mutable(poster_random_tag)) if(poster_design_id != src.poster_design_id) src.poster_design_id = poster_design_id - set_poster_design(RSposter_designs.fetch(poster_design_id)) + set_poster_design(RSposter_designs.fetch_local_or_throw(poster_design_id)) /obj/structure/poster/proc/set_poster_design(datum/prototype/poster_design/design) src.name = "rolled-up-poster - [design.name]" diff --git a/code/modules/artwork/structures/sculpting_block.dm b/code/modules/artwork/structures/sculpting_block.dm index d9e53ef0ced6..b8598d4cbbde 100644 --- a/code/modules/artwork/structures/sculpting_block.dm +++ b/code/modules/artwork/structures/sculpting_block.dm @@ -78,9 +78,15 @@ /// sculpting mask for our block var/icon/sculpting_rolldown_mask -/obj/structure/sculpting_block/Initialize(mapload, material) +/obj/structure/sculpting_block/Initialize(mapload, datum/prototype/material/material_like) // todo: materials system - src.material = RSmaterials.fetch(material || src.material) + if(!isnull(material_like)) + var/resolved_material = RSmaterials.fetch_or_defer(material_like) + switch(resolved_material) + if(REPOSITORY_FETCH_DEFER) + // todo: handle + else + src.material = resolved_material || RSmaterials.fetch_local_or_throw(/datum/prototype/material/steel) // todo: if it autoinit'd, don't do this reset_sculpting() return ..() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index bb1edf8d647a..8d20b0cbcad9 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -467,7 +467,7 @@ var/sql_system_ckey = sanitizeSQL(system_ckey) var/sql_ckey = sanitizeSQL(ckey) //check to see if we noted them in the last day. - var/datum/DBQuery/query_get_notes = SSdbcore.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[sql_system_ckey]' AND timestamp + INTERVAL 1 DAY < NOW() AND deleted = 0 AND expire_timestamp > NOW()") + var/datum/DBQuery/query_get_notes = SSdbcore.NewQuery("SELECT id FROM [DB_PREFIX_TABLE_NAME("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[sql_system_ckey]' AND timestamp + INTERVAL 1 DAY < NOW() AND deleted = 0 AND expire_timestamp > NOW()") if(!query_get_notes.Execute()) qdel(query_get_notes) return @@ -476,7 +476,7 @@ return qdel(query_get_notes) //regardless of above, make sure their last note is not from us, as no point in repeating the same note over and over. - query_get_notes = SSdbcore.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' AND deleted = 0 AND expire_timestamp > NOW() ORDER BY timestamp DESC LIMIT 1") + query_get_notes = SSdbcore.NewQuery("SELECT adminckey FROM [DB_PREFIX_TABLE_NAME("messages")] WHERE targetckey = '[sql_ckey]' AND deleted = 0 AND expire_timestamp > NOW() ORDER BY timestamp DESC LIMIT 1") if(!query_get_notes.Execute()) qdel(query_get_notes) return diff --git a/code/modules/client/connection.dm b/code/modules/client/connection.dm index 5e45f624d366..8f52aebf6ecb 100644 --- a/code/modules/client/connection.dm +++ b/code/modules/client/connection.dm @@ -7,7 +7,7 @@ return var/datum/db_query/lookup = SSdbcore.NewQuery( - "SELECT id FROM [format_table_name("player_lookup")] WHERE ckey = :ckey", + "SELECT id FROM [DB_PREFIX_TABLE_NAME("player_lookup")] WHERE ckey = :ckey", list( "ckey" = ckey, ) @@ -20,7 +20,7 @@ if(sql_id) var/datum/db_query/update = SSdbcore.NewQuery( - "UPDATE [format_table_name("player_lookup")] SET lastseen = Now(), ip = :ip, computerid = :computerid, lastadminrank = :lastadminrank WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("player_lookup")] SET lastseen = Now(), ip = :ip, computerid = :computerid, lastadminrank = :lastadminrank WHERE id = :id", list( "ip" = address, "computerid" = computer_id, @@ -33,7 +33,7 @@ else //New player!! Need to insert all the stuff var/datum/db_query/insert = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("player_lookup")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, :ckey, Now(), Now(), :ip, :cid, :rank)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("player_lookup")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, :ckey, Now(), Now(), :ip, :cid, :rank)", list( "ckey" = ckey, "ip" = address, @@ -55,7 +55,7 @@ return SSdbcore.RunQuery( - "INSERT INTO [format_table_name("connection_log")] (id, datetime, serverip, ckey, ip, computerid) VALUES (null, Now(), :server, :ckey, :ip, :cid)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("connection_log")] (id, datetime, serverip, ckey, ip, computerid) VALUES (null, Now(), :server, :ckey, :ip, :cid)", list( "server" = "[world.internet_address]:[world.port]", "ckey" = ckey, diff --git a/code/modules/client/data/client_data.dm b/code/modules/client/data/client_data.dm index 8b74a28b368e..b1f70aec30eb 100644 --- a/code/modules/client/data/client_data.dm +++ b/code/modules/client/data/client_data.dm @@ -136,7 +136,7 @@ GLOBAL_LIST_EMPTY(client_data) playtime_mutex = FALSE return var/datum/db_query/query = SSdbcore.NewQuery( - "SELECT `roleid`, `minutes` FROM [format_table_name("playtime")] WHERE player = :player", + "SELECT `roleid`, `minutes` FROM [DB_PREFIX_TABLE_NAME("playtime")] WHERE player = :player", list( "player" = player_id, ) diff --git a/code/modules/client/data/player_data.dm b/code/modules/client/data/player_data.dm index dfbc4c6faa97..591ed3bb33b5 100644 --- a/code/modules/client/data/player_data.dm +++ b/code/modules/client/data/player_data.dm @@ -94,7 +94,7 @@ GLOBAL_LIST_EMPTY(player_data) return var/datum/db_query/lookup lookup = SSdbcore.ExecuteQuery( - "SELECT id, playerid, firstseen FROM [format_table_name("player_lookup")] WHERE ckey = :ckey", + "SELECT id, playerid, firstseen FROM [DB_PREFIX_TABLE_NAME("player_lookup")] WHERE ckey = :ckey", list( "ckey" = ckey ) @@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(player_data) lookup_pid = text2num(lookup_pid) qdel(lookup) lookup = SSdbcore.ExecuteQuery( - "SELECT id, flags, datediff(Now(), firstseen), firstseen, misc FROM [format_table_name("player")] WHERE id = :id", + "SELECT id, flags, datediff(Now(), firstseen), firstseen, misc FROM [DB_PREFIX_TABLE_NAME("player")] WHERE id = :id", list( "id" = lookup_pid ) @@ -147,7 +147,7 @@ GLOBAL_LIST_EMPTY(player_data) var/datum/db_query/insert if(migrate_firstseen) insert = SSdbcore.ExecuteQuery( - "INSERT INTO [format_table_name("player")] (flags, firstseen, lastseen, misc) VALUES (:flags, :fs, Now(), :misc)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("player")] (flags, firstseen, lastseen, misc) VALUES (:flags, :fs, Now(), :misc)", list( "flags" = player_flags, "fs" = migrate_firstseen, @@ -157,7 +157,7 @@ GLOBAL_LIST_EMPTY(player_data) player_first_seen = migrate_firstseen else insert = SSdbcore.ExecuteQuery( - "INSERT INTO [format_table_name("player")] (flags, firstseen, lastseen, misc) VALUES (:flags, Now(), Now(), :misc)", + "INSERT INTO [DB_PREFIX_TABLE_NAME("player")] (flags, firstseen, lastseen, misc) VALUES (:flags, Now(), Now(), :misc)", list( "flags" = player_flags, "misc" = safe_json_encode(player_misc), @@ -173,7 +173,7 @@ GLOBAL_LIST_EMPTY(player_data) qdel(insert) // now update lookup insert = SSdbcore.ExecuteQuery( - "UPDATE [format_table_name("player_lookup")] SET playerid = :pid WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("player_lookup")] SET playerid = :pid WHERE id = :id", list( "id" = lookup_id, "pid" = insert_id @@ -211,7 +211,7 @@ GLOBAL_LIST_EMPTY(player_data) /datum/player_data/proc/_save() qdel(SSdbcore.ExecuteQuery( - "UPDATE [format_table_name("player")] SET flags = :flags, misc = :misc WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("player")] SET flags = :flags, misc = :misc WHERE id = :id", list( "flags" = player_flags, "id" = player_id, @@ -232,7 +232,7 @@ GLOBAL_LIST_EMPTY(player_data) if(!block_on_available()) return FALSE qdel(SSdbcore.ExecuteQuery( - "UPDATE [format_table_name("player")] SET lastseen = Now() WHERE id = :id", + "UPDATE [DB_PREFIX_TABLE_NAME("player")] SET lastseen = Now() WHERE id = :id", list( "id" = player_id, ) diff --git a/code/modules/client/game_preferences/game_preferences.dm b/code/modules/client/game_preferences/game_preferences.dm index c54d71592dc4..667a98c8d4ed 100644 --- a/code/modules/client/game_preferences/game_preferences.dm +++ b/code/modules/client/game_preferences/game_preferences.dm @@ -369,7 +369,7 @@ usr = null var/datum/db_query/query = SSdbcore.NewQuery( - "SELECT `toggles`, `entries`, `misc`, `keybinds`, `version` FROM [format_table_name("game_preferences")] \ + "SELECT `toggles`, `entries`, `misc`, `keybinds`, `version` FROM [DB_PREFIX_TABLE_NAME("game_preferences")] \ WHERE `player` = :player", list( "player" = authoritative_player_id, @@ -413,7 +413,7 @@ usr = null var/datum/db_query/query = SSdbcore.NewQuery( - "INSERT INTO [format_table_name("game_preferences")] \ + "INSERT INTO [DB_PREFIX_TABLE_NAME("game_preferences")] \ (`player`, `toggles`, `entries`, `misc`, `keybinds`, `version`, `modified`) VALUES \ (:player, :toggles, :entries, :misc, :keybinds, :version, Now()) ON DUPLICATE KEY UPDATE \ `player` = VALUES(player), `toggles` = VALUES(toggles), `entries` = VALUES(entries), `misc` = VALUES(misc), \ diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index af736577488a..88fc5e8f7790 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -2419,6 +2419,16 @@ worn_has_rolldown = UNIFORM_HAS_NO_ROLL worn_has_rollsleeve = UNIFORM_HAS_NO_ROLL +/obj/item/clothing/under/replika/sakr + name = "medical replikant bodysuit" + desc = "A skin-tight bodysuit designed for 2nd generation biosynthetics of the medical variety. Comes with default interfacing ports and a conspicuous lack of leg coverage." + description_fluff = "These purpose-made interfacing bodysuits are designed and produced by the Singheim Bureau of Biosynthetic Development for their long-running second generation of Biosynthetics, commonly known by the term Replikant. Although anyone could wear these, their overall cut and metallic ports along the spine make it rather uncomfortable to most." + icon = 'icons/clothing/uniform/misc/replika.dmi' + icon_state = "sakr" + worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL + worn_has_rolldown = UNIFORM_HAS_NO_ROLL + worn_has_rollsleeve = UNIFORM_HAS_NO_ROLL + /obj/item/clothing/under/replika/fklr name = "command replikant bodysuit" desc = "A skin-tight bodysuit designed for 2nd generation biosynthetics of the command variety. Comes with interfacing ports, an air of formality, and a conspicuous lack of leg coverage." diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 4df26d733387..ab0df67f8899 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -339,10 +339,10 @@ a creative player the means to solve many problems. Circuits are held inside an if(!check_power()) power_fail() return FALSE + do_work(ord) //Moved it behind next use incase the cooldown is modified in do_work next_use = world.time + cooldown_per_use if(assembly) assembly.ext_next_use = world.time + ext_cooldown - do_work(ord) return TRUE /obj/item/integrated_circuit/proc/do_work(ord) diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm index 3ed86bb8ddca..1225cb657346 100644 --- a/code/modules/integrated_electronics/subtypes/converters.dm +++ b/code/modules/integrated_electronics/subtypes/converters.dm @@ -458,7 +458,7 @@ /obj/item/integrated_circuit/converter/hsv2hex name = "hsv to hexadecimal converter" desc = "This circuit can convert a HSV (Hue, Saturation, and Value) color to a Hexadecimal RGB color." - extended_desc = "The first pin controls tint (0-359), the second pin controls how intense the tint is (0-255), \ + extended_desc = "The first pin controls tint (0-360), the second pin controls how intense the tint is (0-255), \ and the third controls how bright the tint is (0 for black, 127 for normal, 255 for white)." icon_state = "hsv-hex" inputs = list( @@ -476,7 +476,7 @@ var/saturation = get_pin_data(IC_INPUT, 2) var/value = get_pin_data(IC_INPUT, 3) if(isnum(hue) && isnum(saturation) && isnum(value)) - result = HSVtoRGB(hsv(AngleToHue(hue),saturation,value)) + result = hsv2rgb(list(hue, saturation, value)) set_pin_data(IC_OUTPUT, 1, result) push_data() diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 5679c18b6a82..2dd9e32b12b2 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -213,32 +213,93 @@ name = "integrated advanced medical analyzer" desc = "A very small version of the medibot's medical analyzer. This allows the machine to know how healthy someone is. \ - - This type is much more precise, allowing the machine to know much more about the target than a normal analyzer." + This type is much more precise, allowing the machine to know much more about the target than a normal analyzer. \ + A better health scanner can be installed to expand functionality. T1 for brain damage, bleeding and infection. \ + T2 For fractions and internal bleeding. T3 for non medical reagents." icon_state = "medscan_adv" complexity = 12 inputs = list("target" = IC_PINTYPE_REF) outputs = list( - "brain activity" = IC_PINTYPE_BOOLEAN, - "is conscious" = IC_PINTYPE_BOOLEAN, - "total health %" = IC_PINTYPE_NUMBER, - "total missing health" = IC_PINTYPE_NUMBER, - "brute damage" = IC_PINTYPE_NUMBER, - "burn damage" = IC_PINTYPE_NUMBER, - "tox damage" = IC_PINTYPE_NUMBER, - "oxy damage" = IC_PINTYPE_NUMBER, - "clone damage" = IC_PINTYPE_NUMBER, - "blood loss" = IC_PINTYPE_NUMBER, - "pain level" = IC_PINTYPE_NUMBER, - "radiation" = IC_PINTYPE_NUMBER, - "nutrition" = IC_PINTYPE_NUMBER, - "list of reagents" = IC_PINTYPE_LIST, - "quantity of reagents" = IC_PINTYPE_LIST + "brain activity" = IC_PINTYPE_BOOLEAN, //1 + "is conscious" = IC_PINTYPE_BOOLEAN, //2 + "total health %" = IC_PINTYPE_NUMBER, //3 + "total missing health" = IC_PINTYPE_NUMBER, //4 + "brute damage" = IC_PINTYPE_NUMBER, //5 + "burn damage" = IC_PINTYPE_NUMBER, //6 + "tox damage" = IC_PINTYPE_NUMBER, //7 + "oxy damage" = IC_PINTYPE_NUMBER, //8 + "clone damage" = IC_PINTYPE_NUMBER, //9 + "blood loss" = IC_PINTYPE_NUMBER, //10 + "pain level" = IC_PINTYPE_NUMBER, //11 + "radiation" = IC_PINTYPE_NUMBER, //12 + "nutrition" = IC_PINTYPE_NUMBER, //13 + "list of reagents" = IC_PINTYPE_LIST, //14 + "quantity of reagents" = IC_PINTYPE_LIST, //15 + "health scan tier" = IC_PINTYPE_NUMBER, //16 + "brain damage" = IC_PINTYPE_NUMBER, //17 + "bleeding limbs" = IC_PINTYPE_LIST, //18 + "infected limbs" = IC_PINTYPE_LIST, //19 + "internal bleeding" = IC_PINTYPE_LIST, //20 + "fractured limbs" = IC_PINTYPE_LIST //21 ) activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_RESEARCH origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_BIO = 4) power_draw_per_use = 80 + can_be_asked_input = TRUE + var/obj/item/healthanalyzer/current_healthanalyzer + var/advscan = 0 + //T1: brain damage, bleeding, infection. T2: show location of IB and fracture. T3: show non medical reagents + +/obj/item/integrated_circuit/input/adv_med_scanner/ask_for_input(mob/living/user, obj/item/I, a_intent) + if(!current_healthanalyzer) + if(!isobj(I)) + return FALSE + attackby_react(I, user, a_intent) + else + attack_self(user) + +/obj/item/integrated_circuit/input/adv_med_scanner/attackby_react(var/obj/item/healthanalyzer/I, var/mob/living/user) + //Check if it truly is a health scanner + if(!(istype(I,/obj/item/healthanalyzer))) + to_chat(user,"The [I.name] doesn't seem to fit in here.") + return + + //Check if there is no other health scanner already inside + if(current_healthanalyzer) + to_chat(user,"There is already a health scanner inside.") + return + + if(!user.attempt_insert_item_for_installation(I, src)) + return + + //The health scanner is the one we just attached, its location is inside the circuit + current_healthanalyzer = I + + to_chat(user,"You slot in the [I.name] inside the assembly.") + + //Set the pin to a weak reference of the current beaker + set_pin_data(IC_OUTPUT, 16, I.advscan) + advscan = I.advscan + push_data() + +/obj/item/integrated_circuit/input/adv_med_scanner/attack_self(mob/user) + . = ..() + if(.) + return + //Check if no health scanner is attached + if(!current_healthanalyzer) + to_chat(user, "There is currently no health scanner attached.") + return + + //Remove beaker and put in user's hands/location + to_chat(user, "You yank the [current_healthanalyzer] out of the slot.") + user.put_in_hands(current_healthanalyzer) + current_healthanalyzer = null + //Reset to 0 + set_pin_data(IC_OUTPUT, 16, 0) + advscan = 0 + push_data() /obj/item/integrated_circuit/input/adv_med_scanner/do_work(ord) if(ord == 1) @@ -267,11 +328,38 @@ var/cont[0] var/amt[0] for(var/datum/reagent/RE in H.reagents.reagent_list) - if(RE.scannable) + if(RE.scannable || advscan >= 3) cont += RE.id amt += round(H.reagents.get_reagent_amount(RE.id), 1) set_pin_data(IC_OUTPUT, 14, cont) set_pin_data(IC_OUTPUT, 15, amt) + var/frac[0] + var/ib[0] + var/bleed[0] + var/infec[0] + if(advscan >= 1) + set_pin_data(IC_OUTPUT, 17, H.getBrainLoss()) + for(var/obj/item/organ/external/e in H.organs) + if(!e) + continue + // Bleeding + if(e.status & ORGAN_BLEEDING) + bleed += e.name + // Infections + if(e.has_infected_wound()) + infec += e.name + if(advscan >= 2) + // Broken limbs + if(e.status & ORGAN_BROKEN) + frac += e.name + // IB + for(var/datum/wound/W as anything in e.wounds) + if(W.internal) + ib += e.name + set_pin_data(IC_OUTPUT, 18, bleed) + set_pin_data(IC_OUTPUT, 19, infec) + set_pin_data(IC_OUTPUT, 20, ib) + set_pin_data(IC_OUTPUT, 21, frac) push_data() activate_pin(2) diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index 1853251f7c19..acee9d66a4f8 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -635,12 +635,12 @@ name = "mining drill" desc = "A mining drill that can drill through rocks." extended_desc = "A mining drill to strike the earth. It takes some time to get the job done and \ - must remain stationary until complete." + must remain stationary until complete. By default an advanced mining drill is installed but better once can be attached." category_text = "Manipulation" - ext_cooldown = 1 + ext_cooldown = 5 //Required to not make instant death circuits complexity = 40 - cooldown_per_use = 3 SECONDS - ext_cooldown = 6 SECONDS + cooldown_per_use = 1 //We have 'busy' as our safty net + can_be_asked_input = TRUE inputs = list( "target" = IC_PINTYPE_REF ) @@ -653,6 +653,9 @@ spawn_flags = IC_SPAWN_RESEARCH power_draw_per_use = 1000 + var/obj/item/pickaxe/current_pickaxe + var/digspeed = 3 SECONDS + var/busy = FALSE var/targetlock var/usedx @@ -662,15 +665,57 @@ var/drill_force = 15 var/turf/simulated/mineral +/obj/item/integrated_circuit/mining/mining_drill/proc/ask_for_input(mob/living/user, obj/item/I, a_intent) + if(!current_pickaxe) + if(!isobj(I)) + return FALSE + attackby_react(I, user, a_intent) + else + attack_self(user) + +/obj/item/integrated_circuit/mining/mining_drill/attackby_react(var/obj/item/pickaxe/I, var/mob/living/user) + //Check if it truly is a pickaxe + if(!(istype(I,/obj/item/pickaxe))) + to_chat(user,"The [I.name] doesn't seem to fit in here.") + return + + //Check if there is no other pickaxe already inside + if(current_pickaxe) + to_chat(user,"There is already a [current_pickaxe.name] inside.") + return + + if(!user.attempt_insert_item_for_installation(I, src)) + return + + current_pickaxe = I + to_chat(user,"You attach the [I.name] inside the assembly.") + digspeed = I.digspeed + +/obj/item/integrated_circuit/mining/mining_drill/attack_self(mob/user) + . = ..() + if(.) + return + //Check if no drill is attached + if(!current_pickaxe) + to_chat(user, "There is currently no mining tool attached.") + return + + //Remove beaker and put in user's hands/location + to_chat(user, "You yank the [current_pickaxe] out of the slot.") + user.put_in_hands(current_pickaxe) + current_pickaxe = null + //Reset to default + digspeed = 3 SECONDS + /obj/item/integrated_circuit/mining/mining_drill/do_work(ord) if(ord == 1) var/atom/target = get_pin_data(IC_INPUT, 1) var/drill_delay = null - if(!target || busy) + if(!target || busy || !target.Adjacent(assembly)) activate_pin(3) return src.assembly.visible_message(SPAN_DANGER("[assembly] starts to drill [target]!"), null, SPAN_WARNING("You hear a drill.")) - drill_delay = isturf(target)? 6 SECONDS : isliving(target) ? issimple(target) ? 2 SECONDS : 3 SECONDS : 4 SECONDS + drill_delay = isturf(target)? digspeed : isliving(target) ? issimple(target) ? 2 SECONDS : 3 SECONDS : 4 SECONDS busy = TRUE targetlock = target usedx = assembly.loc.x diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 489e89379262..d3116a6ab077 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -177,16 +177,18 @@ desc = "A miniature speaker is attached to this component." icon_state = "speaker" complexity = 8 - cooldown_per_use = 4 SECONDS + cooldown_per_use = 1 SECONDS //The cooldown is adjusted by sound length + var/cooldown_after_use = 1 SECONDS //Extra cooldown added to the sound length inputs = list( "sound ID" = IC_PINTYPE_STRING, "volume" = IC_PINTYPE_NUMBER, "frequency" = IC_PINTYPE_BOOLEAN ) - outputs = list() - activators = list("play sound" = IC_PINTYPE_PULSE_IN) + outputs = list("cooldown duration" = IC_PINTYPE_NUMBER) + activators = list("play sound" = IC_PINTYPE_PULSE_IN, "on played" = IC_PINTYPE_PULSE_OUT) power_draw_per_use = 20 var/list/sounds = list() + var/list/durations = list() //Audacity works decently well to finding out deciseconds /obj/item/integrated_circuit/output/sound/Initialize(mapload) . = ..() @@ -205,8 +207,13 @@ var/selected_sound = sounds[ID] if(!selected_sound) return + var/selected_cooldown = durations[ID] vol = clamp( vol, 0, 100) playsound(get_turf(src), selected_sound, vol, freq, -1) + cooldown_per_use = selected_cooldown + cooldown_after_use + set_pin_data(IC_OUTPUT, 1, cooldown_per_use) + push_data() + activate_pin(2) /obj/item/integrated_circuit/output/sound/beeper name = "beeper circuit" @@ -223,6 +230,16 @@ "synth no" = 'sound/machines/synth_no.ogg', "warning buzz" = 'sound/machines/warning-buzzer.ogg' ) + durations = list( + "beep" = 3, + "chime" = 4, + "buzz sigh" = 3, + "buzz twice" = 6, + "ping" = 5, + "synth yes" = 4, + "synth no" = 4, + "warning buzz" = 35 + ) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH /obj/item/integrated_circuit/output/sound/beepsky @@ -238,6 +255,16 @@ "radio" = 'sound/voice/bradio.ogg', "secure day" = 'sound/voice/bsecureday.ogg', ) + durations = list( + "creep" = 16, + "criminal" = 11, + "freeze" = 10, + "god" = 30, + "i am the law" = 22, + "insult" = 141, //Yeah it is that long + "radio" = 18, + "secure day" = 12, + ) spawn_flags = IC_SPAWN_RESEARCH origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_ILLEGAL = 1) @@ -261,9 +288,86 @@ "apple" = 'sound/voice/medibot/mapple.ogg', "no" = 'sound/voice/medibot/mno.ogg', ) + durations = list( + "surgeon" = 39, + "radar" = 16, + "feel better" = 14, + "patched up" = 11, + "injured" = 21, + "insult" = 155, + "coming" = 20, + "help" = 13, + "live" = 15, + "lost" = 45, + "flies" = 50, + "catch" = 38, + "delicious" = 7, + "apple" = 23, + "no" = 16, + ) spawn_flags = IC_SPAWN_RESEARCH origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 1) +/obj/item/integrated_circuit/output/sound/hev + name = "HEV sound circuit" + desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is similar to those used in some old RIG suit" + cooldown_after_use = 5 + sounds = list( + "bio_warn" = 'sound/voice/Hevsounds/biohazard_detected.wav', + "chem_warn" = 'sound/voice/Hevsounds/chemical_detected.wav', + "rad_warn" = 'sound/voice/Hevsounds/radiation_detected.wav', + "near_death" = 'sound/voice/Hevsounds/near_death.wav', + "seek_medic" = 'sound/voice/Hevsounds/seek_medic.wav', + "shock_damage" = 'sound/voice/Hevsounds/shock_damage.wav', + "blood_loss" = 'sound/voice/Hevsounds/blood_loss.wav', + "blood_plasma" = 'sound/voice/Hevsounds/blood_plasma.wav', + "blood_toxins" = 'sound/voice/Hevsounds/blood_toxins.wav', + "health_critical" = 'sound/voice/Hevsounds/health_critical.wav', + "health_dropping" = 'sound/voice/Hevsounds/health_dropping.wav', + "health_dropping2" = 'sound/voice/Hevsounds/health_dropping2.wav', + "minor_fracture" = 'sound/voice/Hevsounds/minor_fracture.wav', + "minor_lacerations" = 'sound/voice/Hevsounds/minor_lacerations.wav', + "major_fracture" = 'sound/voice/Hevsounds/major_fracture.wav', + "major_lacerations" = 'sound/voice/Hevsounds/major_lacerations.wav', + "wound_sterilized" = 'sound/voice/Hevsounds/wound_sterilized.wav', + "administering_medical" = 'sound/voice/Hevsounds/administering_medical.wav', + "adrenaline_shot" = 'sound/voice/Hevsounds/adrenaline_shot.wav', + "automedic_on" = 'sound/voice/Hevsounds/automedic_on.wav', + "antitoxin_shot" = 'sound/voice/Hevsounds/antitoxin_shot.wav', + "heat_damage" = 'sound/voice/Hevsounds/heat_damage.wav', + "morphine_shot" = 'sound/voice/Hevsounds/morphine_shot.wav', + "innsuficient_medical" = 'sound/voice/Hevsounds/innsuficient_medical.wav', + "internal_bleeding" = 'sound/voice/Hevsounds/internal_bleeding.wav' + ) + durations = list( + "bio_warn" = 31, + "chem_warn" = 38, + "rad_warn" = 45, + "near_death" = 36, + "seek_medic" = 25, + "shock_damage" = 23, + "blood_loss" = 22, + "blood_plasma" = 26, + "blood_toxins" = 38, + "health_critical" = 32, + "health_dropping" = 35, + "health_dropping2" = 29, + "minor_fracture" = 24, + "minor_lacerations" = 29, + "major_fracture" = 24, + "major_lacerations" = 30, + "wound_sterilized" = 20, + "administering_medical" = 31, + "adrenaline_shot" = 20, + "automedic_on" = 35, + "antitoxin_shot" = 22, + "heat_damage" = 30, + "morphine_shot" = 20, + "innsuficient_medical" = 45, + "internal_bleeding" = 24 + ) + spawn_flags = IC_SPAWN_RESEARCH + /obj/item/integrated_circuit/output/video_camera name = "video camera circuit" desc = "This small camera allows a remote viewer to see what it sees." diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index be809af403a0..ecb4d2eada44 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -232,7 +232,7 @@ // Language handling. /mob/proc/add_language(var/language) - var/datum/prototype/language/new_language = RSlanguages.fetch(language) || RSlanguages.legacy_resolve_language_name(language) + var/datum/prototype/language/new_language = RSlanguages.fetch_or_defer(language) || RSlanguages.legacy_resolve_language_name(language) if(!istype(new_language) || (new_language in languages)) return 0 @@ -241,12 +241,12 @@ return 1 /mob/proc/remove_language(var/rem_language) - var/datum/prototype/language/L = RSlanguages.fetch(rem_language) + var/datum/prototype/language/L = RSlanguages.fetch_or_defer(rem_language) . = (L in languages) languages.Remove(L) /mob/living/remove_language(rem_language) - var/datum/prototype/language/L = RSlanguages.fetch(rem_language) + var/datum/prototype/language/L = RSlanguages.fetch_or_defer(rem_language) if(default_language == L) default_language = null return ..() diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 3980cecb08d0..c9b60e2e4b91 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -49,7 +49,7 @@ AUTHORTITLECATEGORYSS13BN"} var/datum/db_query/query = SSdbcore.RunQuery( - "SELECT author, title, category, id FROM [format_table_name("library")] WHERE author LIKE '%:author%' AND title LIKE '%:title%'[category == "Any"? "" : " AND category = :category"]", + "SELECT author, title, category, id FROM [DB_PREFIX_TABLE_NAME("library")] WHERE author LIKE '%:author%' AND title LIKE '%:title%'[category == "Any"? "" : " AND category = :category"]", category == "Any"? list("author" = author, "title" = title) : list("author" = author, "title" = title, "category" = category) ) @@ -229,7 +229,7 @@
TITLEYou clip the [W] onto \the [src].") - update_icon() - - else if(istype(toppaper) && istype(W, /obj/item/pen)) - toppaper.attackby(W, usr) - update_icon() +/// Take out the topmost paper +/obj/item/clipboard/proc/remove_paper(obj/item/paper/paper, mob/user) + if(!istype(paper)) return + paper.forceMove(user.loc) + user.put_in_hands(paper) + to_chat(user, SPAN_NOTICE("You remove [paper] from [src].")) + var/obj/item/paper/toppaper = toppaper_ref?.resolve() + if(paper == toppaper) + UnregisterSignal(toppaper, COMSIG_ATOM_UPDATED_ICON) + toppaper_ref = null + var/obj/item/paper/newtop = locate(/obj/item/paper) in src + if(newtop && (newtop != paper)) + toppaper_ref = WEAKREF(newtop) + else + toppaper_ref = null + update_icon() - return ..() +/obj/item/clipboard/proc/remove_pen(mob/user) + pen.forceMove(user.loc) + user.put_in_hands(pen) + to_chat(user, SPAN_NOTICE("You remove [pen] from [src].")) + pen = null + update_icon() -/obj/item/clipboard/attack_self(mob/user, datum/event_args/actor/actor) +/obj/item/clipboard/AltClick(mob/user) . = ..() if(.) return - var/dat = "Clipboard" - if(haspen) - dat += "Remove Pen

" - else - dat += "Add Pen

" - - //The topmost paper. I don't think there's any way to organise contents in byond, so this is what we're stuck with. -Pete - if(toppaper) - var/obj/item/paper/P = toppaper - dat += "Write Remove Rename - [P.name]

" - - for(var/obj/item/paper/P in src) - if(P==toppaper) - continue - dat += "Remove Rename - [P.name]
" - for(var/obj/item/photo/Ph in src) - dat += "Remove Rename - [Ph.name]
" - user << browse(dat, "window=clipboard") - onclose(user, "clipboard") - add_fingerprint(usr) - return - -/obj/item/clipboard/Topic(href, href_list) - ..() - if((usr.stat || usr.restrained())) + if(isnull(pen)) return - if(src.loc == usr) - - if(href_list["pen"]) - if(istype(haspen) && (haspen.loc == src)) - haspen.loc = usr.loc - usr.put_in_hands(haspen) - haspen = null - - else if(href_list["addpen"]) - if(!haspen) - var/obj/item/pen/W = usr.get_active_held_item() - if(istype(W, /obj/item/pen)) - if(!usr.attempt_insert_item_for_installation(W, src)) - return - haspen = W - to_chat(usr, "You slot the pen into \the [src].") - - else if(href_list["write"]) - var/obj/item/P = locate(href_list["write"]) - - if(P && (P.loc == src) && istype(P, /obj/item/paper) && (P == toppaper) ) - - var/obj/item/I = usr.get_active_held_item() - - if(istype(I, /obj/item/pen)) - - P.attackby(I, usr) + if(integrated_pen) + to_chat(user, SPAN_WARNING("You can't seem to find a way to remove [src]'s [pen].")) + return - else if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) + remove_pen(user) + return TRUE - if(P && (P.loc == src) && (istype(P, /obj/item/paper) || istype(P, /obj/item/photo)) ) +/obj/item/clipboard/update_overlays() + . = ..() + var/obj/item/paper/toppaper = toppaper_ref?.resolve() + if(toppaper) + . += toppaper.icon_state + . += toppaper.overlays + if(pen) + . += "clipboard_pen" + . += "clipboard_over" + +/obj/item/clipboard/attackby(obj/item/weapon, mob/user, params) + var/obj/item/paper/toppaper = toppaper_ref?.resolve() + if(istype(weapon, /obj/item/paper) || istype(weapon, /obj/item/photo)) + //Add paper into the clipboard + if(!user.transfer_item_to_loc(weapon, src)) + return + if(toppaper) + UnregisterSignal(toppaper, COMSIG_ATOM_UPDATED_ICON) + if(istype(weapon, /obj/item/paper)) // since we can stuff photos, only update if image + RegisterSignal(weapon, COMSIG_ATOM_UPDATED_ICON, PROC_REF(on_top_paper_change)) + toppaper_ref = WEAKREF(weapon) + to_chat(user, SPAN_NOTICE("You clip [weapon] onto [src].")) + + else if(istype(weapon, /obj/item/pen) && !pen) + //Add a pen into the clipboard, attack (write) if there is already one + if(!usr.transfer_item_to_loc(weapon, src)) + return + pen = weapon + to_chat(usr, SPAN_NOTICE("You slot [weapon] into [src].")) + else if(toppaper) + toppaper.attackby(user.get_active_held_item(), user) + update_appearance() - P.loc = usr.loc - usr.put_in_hands(P) - if(P == toppaper) - toppaper = null - var/obj/item/paper/newtop = locate(/obj/item/paper) in src - if(newtop && (newtop != P)) - toppaper = newtop - else - toppaper = null +/obj/item/clipboard/attack_self(mob/user) + add_fingerprint(usr) + ui_interact(user) + return - else if(href_list["rename"]) - var/obj/item/O = locate(href_list["rename"]) +/obj/item/clipboard/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Clipboard") + ui.open() + +/obj/item/clipboard/ui_data(mob/user) + // prepare data for TGUI + var/list/data = list() + data["pen"] = "[pen]" + data["integrated_pen"] = integrated_pen + + var/obj/item/paper/toppaper = toppaper_ref?.resolve() + data["top_paper"] = "[toppaper]" + data["top_paper_ref"] = "[REF(toppaper)]" + + data["paper"] = list() + data["paper_ref"] = list() + for(var/obj/item/paper/paper in src) + if(paper == toppaper) + continue + data["paper"] += "[paper]" + data["paper_ref"] += "[REF(paper)]" - if(O && (O.loc == src)) - if(istype(O, /obj/item/paper)) - var/obj/item/paper/to_rename = O - to_rename.rename() + data["photo"] = list() + data["photo_ref"] = list() + for(var/obj/item/photo/photo in src) + data["photo"] += "[photo]" + data["photo_ref"] += "[REF(photo)]" - else if(istype(O, /obj/item/photo)) - var/obj/item/photo/to_rename = O - to_rename.rename() + return data - else if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) +/obj/item/clipboard/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return - if(P && (P.loc == src) && istype(P, /obj/item/paper) ) + if(usr.stat != CONSCIOUS || usr.restrained()) + return - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon))) - usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") + switch(action) + // Take the pen out + if("remove_pen") + if(pen) + if(!integrated_pen) + remove_pen(usr) else - usr << browse("[P.name][P.info][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - - else if(href_list["look"]) - var/obj/item/photo/P = locate(href_list["look"]) - if(P && (P.loc == src) && istype(P, /obj/item/photo) ) - P.show(usr) - - else if(href_list["top"]) // currently unused - var/obj/item/P = locate(href_list["top"]) - if(P && (P.loc == src) && istype(P, /obj/item/paper) ) - toppaper = P - to_chat(usr, "You move [P.name] to the top.") - - //Update everything - attack_self(usr) - update_icon() - return + to_chat(usr, SPAN_WARNING("You can't seem to find a way to remove [src]'s [pen].")) + . = TRUE + // Take paper out + if("remove_paper") + var/obj/item/paper/paper = locate(params["ref"]) in src + if(istype(paper)) + remove_paper(paper, usr) + . = TRUE + // Look at (or edit) the paper + if("edit_paper") + var/obj/item/paper/paper = locate(params["ref"]) in src + if(istype(paper)) + // paper.ui_interact(usr) + paper.show_content(usr) + update_icon() + . = TRUE + // Move paper to the top + if("move_top_paper") + var/obj/item/paper/paper = locate(params["ref"]) in src + if(istype(paper)) + toppaper_ref = WEAKREF(paper) + to_chat(usr, SPAN_NOTICE("You move [paper] to the top.")) + update_icon() + . = TRUE + // Rename the paper (it's a verb) + if("rename_paper") + var/obj/item/paper/paper = locate(params["ref"]) in src + if(istype(paper)) + paper.rename() + update_icon() + . = TRUE + // Take photo out + if("remove_photo") + var/obj/item/photo/photo = locate(params["ref"]) in src + if(istype(photo)) + photo.forceMove(usr.loc) + usr.put_in_hands(photo) + to_chat(usr, SPAN_NOTICE("You remove [photo] from [src].")) + . = TRUE + +/** + * This is a simple proc to handle calling update_icon() upon receiving the top paper's `COMSIG_ATOM_UPDATE_APPEARANCE`. + */ +/obj/item/clipboard/proc/on_top_paper_change() + SIGNAL_HANDLER + update_appearance() diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index d6361a68ddce..b402ceb10fe8 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -27,46 +27,80 @@ /obj/structure/filingcabinet/tall //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete icon_state = "tallcabinet" - /obj/structure/filingcabinet/Initialize(mapload) - for(var/obj/item/I in loc) - if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo) || istype(I, /obj/item/paper_bundle)) - I.loc = src . = ..() - -/obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob) - if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/paper_bundle)) - if(!user.attempt_insert_item_for_installation(P, src)) - return - to_chat(user, SPAN_NOTICE("You put [P] in [src].")) - open_animation() - SStgui.update_uis(src) - - else if(P.is_wrench()) - playsound(loc, P.tool_sound, 50, 1) - anchored = !anchored - to_chat(user, SPAN_NOTICE("You [anchored ? "wrench" : "unwrench"] \the [src].")) - - else if(P.is_screwdriver()) + if(mapload) + for(var/obj/item/I in loc) + if(I.w_class < WEIGHT_CLASS_NORMAL) //there probably shouldn't be anything placed ontop of filing cabinets in a map that isn't meant to go in them + I.forceMove(src) + +/obj/structure/filingcabinet/deconstructed(disassembled = TRUE) + new /obj/item/stack/material/iron(loc, 2) + for(var/obj/item/obj in src) + obj.forceMove(loc) + +/obj/structure/filingcabinet/attackby(obj/item/P, mob/living/user, params) + if(P.is_wrench() && user.a_intent != INTENT_HELP) + to_chat(user, SPAN_NOTICE("You begin to [anchored ? "unwrench" : "wrench"] [src].")) + if(P.use_tool(src, user, 20, volume=50)) + to_chat(user, SPAN_NOTICE("You successfully [anchored ? "unwrench" : "wrench"] [src].")) + set_anchored(!anchored) + else if(P.is_screwdriver() && user.a_intent != INTENT_HELP) to_chat(user, SPAN_NOTICE("You begin taking the [name] apart.")) playsound(src, P.tool_sound, 50, 1) if(do_after(user, 10 * P.tool_speed)) playsound(loc, P.tool_sound, 50, 1) - to_chat(user, SPAN_NOTICE("You take the [name] apart.")) - new /obj/item/stack/material/steel( src.loc, 4 ) - for(var/obj/item/I in contents) - I.forceMove(loc) - qdel(src) + deconstruct() return + else if(P.w_class < WEIGHT_CLASS_NORMAL) + if(!user.transfer_item_to_loc(P, src)) + return + to_chat(user, SPAN_NOTICE("You put [P] in [src].")) + icon_state = "[initial(icon_state)]-open" + sleep(0.5 SECONDS) + icon_state = initial(icon_state) + else if(user.a_intent == INTENT_HELP || (P.item_flags & ITEM_NOBLUDGEON)) + to_chat(user, SPAN_WARNING("You can't put [P] in [src]!")) else - to_chat(user, SPAN_NOTICE("You can't put [P] in [src]!")) + return ..() -/obj/structure/filingcabinet/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) - if(contents.len <= 0) - to_chat(user, SPAN_NOTICE("\The [src] is empty.")) - return +/obj/structure/filingcabinet/attack_hand(mob/living/carbon/user) + . = ..() ui_interact(user) +/obj/structure/filingcabinet/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "FilingCabinet") + ui.open() + +/obj/structure/filingcabinet/ui_data(mob/user) + var/list/data = list() + + data["cabinet_name"] = "[name]" + data["contents"] = list() + data["contents_ref"] = list() + for(var/obj/item/content in src) + data["contents"] += "[content]" + data["contents_ref"] += "[REF(content)]" + + return data + +/obj/structure/filingcabinet/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + // Take the object out + if("remove_object") + var/obj/item/content = locate(params["ref"]) in src + if(istype(content) && in_range(src, usr)) + usr.put_in_hands(content) + icon_state = "[initial(icon_state)]-open" + addtimer(VARSET_CALLBACK(src, icon_state, initial(icon_state)), 0.5 SECONDS) + return TRUE + /obj/structure/filingcabinet/attack_tk(mob/user) if(anchored) return attack_self_tk(user) @@ -76,121 +110,85 @@ if(contents.len) if(prob(40 + contents.len * 5)) var/obj/item/I = pick(contents) - I.loc = loc + I.forceMove(loc) if(prob(25)) step_rand(I) to_chat(user, SPAN_NOTICE("You pull \a [I] out of [src] at random.")) return to_chat(user, SPAN_NOTICE("You find nothing in [src].")) -/obj/structure/filingcabinet/ui_state() - return GLOB.physical_state - -/obj/structure/filingcabinet/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "FileCabinet", name) - ui.set_autoupdate(FALSE) - ui.open() - -/obj/structure/filingcabinet/ui_data(mob/user, datum/tgui/ui) - var/list/files = list() - for(var/obj/item/P in src) - files.Add(list(list( - "name" = P.name, - "ref" = "\ref[P]", - ))) - - return list("contents" = files) - -/obj/structure/filingcabinet/ui_act(action, list/params, datum/tgui/ui) - if(..()) - return TRUE - - switch(action) - if("retrieve") - var/obj/item/P = locate(params["ref"]) - if(istype(P) && (P.loc == src) && usr.Adjacent(src)) - usr.put_in_hands(P) - open_animation() - SStgui.update_uis(src) - -/obj/structure/filingcabinet/proc/open_animation() - flick("[initial(icon_state)]-open",src) - playsound(src, 'sound/bureaucracy/filingcabinet.ogg', 50, 1) - spawn(0) - sleep(20) - icon_state = initial(icon_state) - /* * Security Record Cabinets */ /obj/structure/filingcabinet/security - var/virgin = 1 - + var/virgin = TRUE /obj/structure/filingcabinet/security/proc/populate() - if(virgin) - for(var/datum/data/record/G in data_core.general) - var/datum/data/record/S - for(var/datum/data/record/R in data_core.security) - if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"])) - S = R - break - var/obj/item/paper/P = new /obj/item/paper(src) - P.info = "
Security Record

" - P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - P.info += "
\n
Security Data

\nCriminal Status: [S.fields["criminal"]]
\n
\nMinor Crimes: [S.fields["mi_crim"]]
\nDetails: [S.fields["mi_crim_d"]]
\n
\nMajor Crimes: [S.fields["ma_crim"]]
\nDetails: [S.fields["ma_crim_d"]]
\n
\nImportant Notes:
\n\t[S.fields["notes"]]
\n
\n
Comments/Log

" - var/counter = 1 - while(S.fields["com_[counter]"]) - P.info += "[S.fields["com_[counter]"]]
" - counter++ - P.info += "" - P.name = "Security Record ([G.fields["name"]])" - virgin = 0 //tabbing here is correct- it's possible for people to try and use it - //before the records have been generated, so we do this inside the loop. + if(!virgin) + return + for(var/datum/data/record/G in data_core.general) + var/datum/data/record/S + for(var/datum/data/record/R in data_core.security) + if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"])) + S = R + break + var/obj/item/paper/P = new /obj/item/paper(src) + P.info = "
Security Record

" + P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" + P.info += "
\n
Security Data

\nCriminal Status: [S.fields["criminal"]]
\n
\nMinor Crimes: [S.fields["mi_crim"]]
\nDetails: [S.fields["mi_crim_d"]]
\n
\nMajor Crimes: [S.fields["ma_crim"]]
\nDetails: [S.fields["ma_crim_d"]]
\n
\nImportant Notes:
\n\t[S.fields["notes"]]
\n
\n
Comments/Log

" + var/counter = 1 + while(S.fields["com_[counter]"]) + P.info += "[S.fields["com_[counter]"]]
" + counter++ + P.info += "" + P.name = "Security Record ([G.fields["name"]])" + P.update_appearance() + virgin = FALSE //tabbing here is correct- it's possible for people to try and use it + //before the records have been generated, so we do this inside the loop. /obj/structure/filingcabinet/security/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) populate() - ..() + return ..() /obj/structure/filingcabinet/security/attack_tk() populate() - ..() + return ..() /* * Medical Record Cabinets */ /obj/structure/filingcabinet/medical - var/virgin = 1 + var/virgin = TRUE /obj/structure/filingcabinet/medical/proc/populate() - if(virgin) - for(var/datum/data/record/G in data_core.general) - var/datum/data/record/M - for(var/datum/data/record/R in data_core.medical) - if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"])) - M = R - break - if(M) - var/obj/item/paper/P = new /obj/item/paper(src) - P.info = "
Medical Record

" - P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - - P.info += "
\n
Medical Data

\nBlood Type: [M.fields["b_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\n
Comments/Log

" - var/counter = 1 - while(M.fields["com_[counter]"]) - P.info += "[M.fields["com_[counter]"]]
" - counter++ - P.info += "" - P.name = "Medical Record ([G.fields["name"]])" - virgin = 0 //tabbing here is correct- it's possible for people to try and use it + if(!virgin) + return + for(var/datum/data/record/G in data_core.general) + var/datum/data/record/M + for(var/datum/data/record/R in data_core.medical) + if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"])) + M = R + break + if(M) + var/obj/item/paper/med_record_paper = new /obj/item/paper(src) + med_record_paper.info = "
Medical Record

" + med_record_paper.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" + + med_record_paper.info += "
\n
Medical Data

\nBlood Type: [M.fields["b_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\n
Comments/Log

" + var/counter = 1 + while(M.fields["com_[counter]"]) + med_record_paper.info += "[M.fields["com_[counter]"]]
" + counter++ + med_record_paper.info += "" + med_record_paper.name = "Medical Record ([G.fields["name"]])" + med_record_paper.update_appearance() + virgin = FALSE //tabbing here is correct- it's possible for people to try and use it //before the records have been generated, so we do this inside the loop. /obj/structure/filingcabinet/medical/attack_hand(mob/user, datum/event_args/actor/clickchain/e_args) populate() - ..() + return ..() /obj/structure/filingcabinet/medical/attack_tk() populate() - ..() + return ..() diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index c9a87619e4fa..a474b8ca3fea 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -8,139 +8,108 @@ drop_sound = 'sound/items/drop/paper.ogg' pickup_sound = 'sound/items/pickup/paper.ogg' -/obj/item/folder/blue - desc = "A blue folder." - icon_state = "folder_blue" + /// The background color for tgui in hex (with a `#`) + var/bg_color = "#7f7f7f" + /// A typecache of the objects that can be inserted into a folder + var/static/list/folder_insertables = typecacheof(list( + /obj/item/paper, + /obj/item/photo, + /obj/item/paper_bundle, + )) + /// Do we hide the contents on examine? + var/contents_hidden = FALSE + +/obj/item/folder/suicide_act(mob/living/user) + user.visible_message(SPAN_SUICIDE("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!")) + return OXYLOSS + +/obj/item/folder/Initialize(mapload) + update_icon() + . = ..() -/obj/item/folder/red - desc = "A red folder." - icon_state = "folder_red" +/obj/item/folder/Destroy() + for(var/obj/important_thing in contents) + if(!(important_thing.integrity_flags & INTEGRITY_INDESTRUCTIBLE)) + continue + important_thing.forceMove(drop_location()) //don't destroy round critical content such as objective documents. + return ..() -/obj/item/folder/yellow - desc = "A yellow folder." - icon_state = "folder_yellow" +/obj/item/folder/proc/rename(mob/user, obj/item/writing_instrument) + if(istype(writing_instrument, /obj/item/pen)) + return -/obj/item/folder/white - desc = "A white folder." - icon_state = "folder_white" + var/inputvalue = sanitizeSafe(input(user, "What would you like to label the folder?", "Folder Labelling", null) as text, MAX_NAME_LEN) + if(!inputvalue) + return -/obj/item/folder/blue_captain - desc = "A blue folder with Facility Director markings." - icon_state = "folder_captain" + name = "folder[(inputvalue ? " - '[inputvalue]'" : null)]" + // playsound(src, SFX_WRITING_PEN, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT + 3, ignore_walls = FALSE) -/obj/item/folder/blue_hop - desc = "A blue folder with HoP markings." - icon_state = "folder_hop" +/obj/item/folder/proc/remove_item(obj/item/Item, mob/user) + if(istype(Item)) + Item.forceMove(user.loc) + user.put_in_hands(Item) + to_chat(user, SPAN_NOTICE("You remove [Item] from [src].")) + update_icon() -/obj/item/folder/white_cmo - desc = "A white folder with CMO markings." - icon_state = "folder_cmo" +/obj/item/folder/update_overlays() + . = ..() + if(contents.len) + . += "folder_paper" -/obj/item/folder/white_rd - desc = "A white folder with RD markings." - icon_state = "folder_rd" +/obj/item/folder/attackby(obj/item/weapon, mob/user, params) + if(is_type_in_typecache(weapon, folder_insertables)) + //Add paper, photo or documents into the folder + if(!user.transfer_item_to_loc(weapon, src)) + return + to_chat(user, SPAN_NOTICE("You put [weapon] into [src].")) + update_appearance() + else if(istype(weapon, /obj/item/pen)) + rename(user, weapon) -/obj/item/folder/white_rd/Initialize(mapload) - . = ..() - //add some memos - var/obj/item/paper/P = new(src) - P.name = "Memo RE: proper analysis procedure" - P.info = "
We keep test dummies in pens here for a reason" - update_icon() +/obj/item/folder/attack_self(mob/user) + add_fingerprint(usr) + ui_interact(user) + return -/obj/item/folder/yellow_ce - desc = "A yellow folder with CE markings." - icon_state = "folder_ce" +/obj/item/folder/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Folder") + ui.open() -/obj/item/folder/red_hos - desc = "A red folder with HoS markings." - icon_state = "folder_hos" +/obj/item/folder/ui_data(mob/user) + var/list/data = list() + // if(istype(src, /obj/item/folder/syndicate)) + // data["theme"] = "syndicate" + data["bg_color"] = "[bg_color]" + data["folder_name"] = "[name]" -/obj/item/folder/update_icon() - cut_overlays() - if(contents.len) - add_overlay("folder_paper") - return + data["contents"] = list() + data["contents_ref"] = list() + for(var/Content in src) + data["contents"] += "[Content]" + data["contents_ref"] += "[REF(Content)]" -/obj/item/folder/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle)) - if(!user.attempt_insert_item_for_installation(W, src)) - return - to_chat(user, "You put the [W] into \the [src].") - update_icon() - else if(istype(W, /obj/item/pen)) - var/n_name = sanitizeSafe(input(usr, "What would you like to label the folder?", "Folder Labelling", null) as text, MAX_NAME_LEN) - if((loc == usr && usr.stat == 0)) - name = "folder[(n_name ? "- '[n_name]'" : null)]" - else - return ..() - -/obj/item/folder/attack_self(mob/user, datum/event_args/actor/actor) + return data + +/obj/item/folder/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - ui_interact(user) - -/obj/item/folder/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) - var/dat = "[name]" - - for(var/obj/item/paper/P in src) - dat += "Remove Rename - [P.name]
" - for(var/obj/item/photo/Ph in src) - dat += "Remove Rename - [Ph.name]
" - for(var/obj/item/paper_bundle/Pb in src) - dat += "Remove Rename - [Pb.name]
" - user << browse(dat, "window=folder") - onclose(user, "folder") - add_fingerprint(usr) -/obj/item/folder/Topic(href, href_list) - ..() - if((usr.stat || usr.restrained())) + if(usr.stat != CONSCIOUS || usr.restrained()) return - if(src.loc == usr) - - if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) - if(P && (P.loc == src) && istype(P)) - usr.put_in_hands_or_drop(P) - - else if(href_list["read"]) - var/obj/item/paper/P = locate(href_list["read"]) - if(P && (P.loc == src) && istype(P)) - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon))) - usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - else - usr << browse("[P.name][P.info][P.stamps]", "window=[P.name]") - onclose(usr, "[P.name]") - else if(href_list["look"]) - var/obj/item/photo/P = locate(href_list["look"]) - if(P && (P.loc == src) && istype(P)) - P.show(usr) - else if(href_list["browse"]) - var/obj/item/paper_bundle/P = locate(href_list["browse"]) - if(P && (P.loc == src) && istype(P)) - P.attack_self(usr) - onclose(usr, "[P.name]") - else if(href_list["rename"]) - var/obj/item/O = locate(href_list["rename"]) - - if(O && (O.loc == src)) - if(istype(O, /obj/item/paper)) - var/obj/item/paper/to_rename = O - to_rename.rename() - - else if(istype(O, /obj/item/photo)) - var/obj/item/photo/to_rename = O - to_rename.rename() - - else if(istype(O, /obj/item/paper_bundle)) - var/obj/item/paper_bundle/to_rename = O - to_rename.rename() - - //Update everything - attack_self(usr) - update_icon() - return + switch(action) + // Take item out + if("remove") + var/obj/item/Item = locate(params["ref"]) in src + remove_item(Item, usr) + . = TRUE + // Inspect the item + if("examine") + var/obj/item/Item = locate(params["ref"]) in src + if(istype(Item)) + usr.examinate(Item) + . = TRUE diff --git a/code/modules/paperwork/folders_premade.dm b/code/modules/paperwork/folders_premade.dm new file mode 100644 index 000000000000..4c02a6ee8914 --- /dev/null +++ b/code/modules/paperwork/folders_premade.dm @@ -0,0 +1,57 @@ +/obj/item/folder/blue + desc = "A blue folder." + icon_state = "folder_blue" + bg_color = "#355e9f" + +/obj/item/folder/red + desc = "A red folder." + icon_state = "folder_red" + bg_color = "#b5002e" + +/obj/item/folder/yellow + desc = "A yellow folder." + icon_state = "folder_yellow" + bg_color = "#b88f3d" + +/obj/item/folder/white + desc = "A white folder." + icon_state = "folder_white" + bg_color = "#d9d9d9" + +/obj/item/folder/blue_captain + desc = "A blue folder with Facility Director markings." + icon_state = "folder_captain" + bg_color = "#355e9f" + +/obj/item/folder/blue_hop + desc = "A blue folder with HoP markings." + icon_state = "folder_hop" + bg_color = "#355e9f" + +/obj/item/folder/white_cmo + desc = "A white folder with CMO markings." + icon_state = "folder_cmo" + bg_color = "#d9d9d9" + +/obj/item/folder/white_rd + desc = "A white folder with RD markings." + icon_state = "folder_rd" + bg_color = "#d9d9d9" + +/obj/item/folder/white_rd/Initialize(mapload) + . = ..() + //add some memos + var/obj/item/paper/P = new(src) + P.name = "Memo RE: proper analysis procedure" + P.info = "
We keep test dummies in pens here for a reason" + update_icon() + +/obj/item/folder/yellow_ce + desc = "A yellow folder with CE markings." + icon_state = "folder_ce" + bg_color = "#b88f3d" + +/obj/item/folder/red_hos + desc = "A red folder with HoS markings." + icon_state = "folder_hos" + bg_color = "#b5002e" diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index ba158d3db9c9..4a7547f8c6d0 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -1,12 +1,19 @@ /obj/item/hand_labeler 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/bureaucracy.dmi' icon_state = "labeler0" - var/label = null - var/labels_left = 30 - var/mode = 0 //off or on. + item_flags = ITEM_NOBLUDGEON w_class = WEIGHT_CLASS_SMALL + drop_sound = 'sound/items/handling/tape_drop.ogg' + pickup_sound = 'sound/items/handling/tape_pickup.ogg' worth_intrinsic = 50 + /// Tracks the current label text + var/label + /// How many labels are left in the current roll? Also serves as our "max". + var/labels_left = 30 + /// Whether we are in label mode + VAR_FINAL/mode = FALSE /obj/item/hand_labeler/attack_mob(mob/target, mob/user, clickchain_flags, list/params, mult, target_zone, intent) if(user.a_intent == INTENT_HARM) diff --git a/code/modules/paperwork/paper/paper.dm b/code/modules/paperwork/paper/paper.dm index e3688a6b635c..f4ea2a42f554 100644 --- a/code/modules/paperwork/paper/paper.dm +++ b/code/modules/paperwork/paper/paper.dm @@ -95,12 +95,17 @@ . += "You have to go closer if you want to read it." return -/obj/item/paper/proc/show_content(var/mob/user, var/forceshow=0) - if(!user.client) - return - SSassets.send_asset_pack(user.client, /datum/asset_pack/simple/logos) - user.client.asset_cache_flush_browse_queue() - if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon)) && !forceshow) +/obj/item/paper/proc/show_content(mob/user, forceshow=0) + var/client/C + if (istype(user)) + C = user.client + if (istype(user, /client)) + C = user + if(C) + SSassets.send_asset_pack(C, /datum/asset_pack/simple/logos) + C.asset_cache_flush_browse_queue() + + if(!(ishuman(user) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon)) && !forceshow) user << browse("[name][stars(info)][stamps]", "window=[name]") onclose(user, "[name]") else diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 3f06f9f874ab..9595885112d2 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -1,5 +1,6 @@ /obj/item/paper_bin name = "paper bin" + desc = "Contains all the paper you'll never need." icon = 'icons/obj/bureaucracy.dmi' icon_state = "paper_bin1" item_icons = list( @@ -18,6 +19,10 @@ drop_sound = 'sound/items/drop/cardboardbox.ogg' pickup_sound = 'sound/items/pickup/cardboardbox.ogg' +/obj/item/paper_bin/Destroy() + QDEL_LIST(papers) + return ..() + /obj/item/paper_bin/OnMouseDropLegacy(mob/user as mob) if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr)))))) if(!user.put_in_hands(src)) diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 703be6a1edb9..886c78ce95d0 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -1,101 +1,105 @@ -// Ported from TG. Known issue: Throw hit can possibly double-proc. Seems to be throw code. /obj/item/paperplane name = "paper plane" - desc = "Paper folded into the shape of a plane." + desc = "Paper, folded in the shape of a plane." icon = 'icons/obj/bureaucracy.dmi' icon_state = "paperplane" throw_range = 7 throw_speed = 1 throw_force = 0 w_class = WEIGHT_CLASS_TINY + integrity_max = 50 - var/obj/item/paper/internalPaper + ///The chance of hitting a mob in the eye when thrown, in percentage. + var/hit_probability = 2 + ///Reference to the paper that's folded up in this paperplane, which we return when unfolded. + var/obj/item/paper/internal_paper -/obj/item/paperplane/Initialize(mapload, obj/item/paper/newPaper) +/obj/item/paperplane/syndicate + desc = "Paper, masterfully folded in the shape of a plane." + throw_force = 20 + hit_probability = 100 + +/obj/item/paperplane/Initialize(mapload, obj/item/paper/paper_made_of) . = ..() - pixel_y = rand(-8, 8) - pixel_x = rand(-9, 9) - if(newPaper) - internalPaper = newPaper - atom_flags = newPaper.atom_flags - color = newPaper.color - newPaper.forceMove(src) + pixel_x = base_pixel_x + rand(-9, 9) + pixel_y = base_pixel_y + rand(-8, 8) + if(paper_made_of) + internal_paper = paper_made_of + atom_flags = paper_made_of.atom_flags + color = paper_made_of.color + paper_made_of.forceMove(src) else - internalPaper = new /obj/item/paper(src) - update_icon() + internal_paper = new(src) + update_appearance(UPDATE_ICON) + +/obj/item/paperplane/Exited(atom/movable/gone, direction) + . = ..() + if (internal_paper == gone) + internal_paper = null + if(!QDELETED(src)) + qdel(src) /obj/item/paperplane/Destroy() - if(internalPaper) - qdel(internalPaper) - internalPaper = null + internal_paper = null return ..() -/obj/item/paperplane/update_icon() - cut_overlays() - var/list/overlays_to_add = list() - - var/list/stamped = internalPaper.stamped - if(!stamped) - stamped = new - else if(stamped) - for(var/S in stamped) - var/obj/item/stamp/ = S - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]") - overlays_to_add.Add(stampoverlay) - - add_overlay(overlays_to_add) - -/obj/item/paperplane/attack_self(mob/user, datum/event_args/actor/actor) +/obj/item/paperplane/update_overlays() . = ..() - if(.) - return + // we assume stamped contains proper stamp obj ref (hate) + for(var/obj/item/stamp as anything in internal_paper.stamped) + . += "[base_icon_state]_[stamp.icon_state]" + +/obj/item/paperplane/attack_self(mob/user) to_chat(user, "You unfold [src].") - var/atom/movable/internal_paper_tmp = internalPaper - internal_paper_tmp.forceMove(loc) - internalPaper = null - qdel(src) - user.put_in_hands(internal_paper_tmp) -/obj/item/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) - ..() - if(istype(P, /obj/item/pen)) - to_chat(user, "You should unfold [src] before changing it.") - return + var/atom/location = drop_location() + // Need to keep a reference to the internal paper + // when we move it out of the plane, our ref gets set to null + var/obj/item/paper/released_paper = internal_paper + released_paper.forceMove(location) + // This will as a side effect, qdel the paper plane, making the user's hands empty - else if(istype(P, /obj/item/stamp)) //we don't randomize stamps on a paperplane - internalPaper.attackby(P, user) //spoofed attack to update internal paper. - update_icon() + user.put_in_hands(released_paper) - else if(is_hot(P)) +/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/pen)) + to_chat(user, SPAN_WARNING("You should unfold [src] before changing it!")) + return + else if(istype(attacking_item, /obj/item/stamp)) //we don't randomize stamps on a paperplane + internal_paper.attackby(attacking_item, user) //spoofed attack to update internal paper. + update_appearance() + add_fingerprint(user) + return + else if(is_hot(attacking_item)) if(user.disabilities & MUTATION_CLUMSY && prob(10)) user.visible_message("[user] accidentally ignites themselves!", \ "You miss the [src] and accidentally light yourself on fire!") - user.drop_item_to_ground(P) - user.adjust_fire_stacks(1) - user.IgniteMob() + user.drop_item_to_ground(attacking_item) + if (iscarbon(user)) + var/mob/living/carbon/C = user + C.adjust_fire_stacks(1) + C.IgniteMob() return if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper return user.drop_item_to_ground(src) - user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!") + user.visible_message("[user] lights [src] ablaze with [attacking_item]!", "You light [src] on fire!") fire_act() + return ..() - add_fingerprint(user) - -/obj/item/paperplane/throw_impact(atom/hit_atom) - if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman +/obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(. || !ishuman(hit_atom)) //if the plane is caught or it hits a nonhuman return - var/mob/living/carbon/human/H = hit_atom - if(prob(2)) - if((H.head && H.head.body_cover_flags & EYES) || (H.wear_mask && H.wear_mask.body_cover_flags & EYES) || (H.glasses && H.glasses.body_cover_flags & EYES)) - return - visible_message("\The [src] hits [H] in the eye!") - H.eye_blurry += 10 - var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES] - if(E) - E.take_damage(2.5) - H.emote("scream") + var/mob/living/carbon/human/hit_human = hit_atom + var/obj/item/organ/internal/eyes/eyes = hit_human.internal_organs_by_name[O_EYES] + if(!prob(hit_probability)) + return + visible_message(SPAN_DANGER("\The [src] hits [hit_human] in the eye[eyes ? "" : " socket"]!")) + hit_human.eye_blurry += 12 + eyes?.take_damage(rand(1, 3)) + hit_human.emote("scream") /obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I) if ( istype(user) ) diff --git a/code/modules/reagents/chemistry/chemical_reaction-legacy.dm b/code/modules/reagents/chemistry/chemical_reaction-legacy.dm index c3fc6e2f9781..94628bea2414 100644 --- a/code/modules/reagents/chemistry/chemical_reaction-legacy.dm +++ b/code/modules/reagents/chemistry/chemical_reaction-legacy.dm @@ -228,7 +228,7 @@ name = "Myelamine" id = "myelamine" result = "myelamine" - required_reagents = list("bicaridine" = 1, MAT_IRON = 2, "spidertoxin" = 1) + required_reagents = list("bicaridine" = 1, "calcium" = 2, "spidertoxin" = 1) result_amount = 2 /datum/chemical_reaction/imidazoline diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm index 076b7dcaecf1..0b7de37c4fcb 100644 --- a/code/modules/species/species_getters.dm +++ b/code/modules/species/species_getters.dm @@ -162,9 +162,9 @@ else return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - var/datum/prototype/language/species_language = RSlanguages.fetch(get_name_language_id()) + var/datum/prototype/language/species_language = RSlanguages.fetch_local_or_throw(get_name_language_id()) if(!species_language) - species_language = RSlanguages.fetch(default_language) + species_language = RSlanguages.fetch_local_or_throw(default_language) if(!species_language) return "unknown" return species_language.get_random_name(gender) diff --git a/code/modules/sprite_accessories/sprite_accessory.dm b/code/modules/sprite_accessories/sprite_accessory.dm index 9c151d4cf69c..dace6b79355c 100644 --- a/code/modules/sprite_accessories/sprite_accessory.dm +++ b/code/modules/sprite_accessories/sprite_accessory.dm @@ -102,7 +102,7 @@ GLOBAL_LIST_EMPTY(sprite_accessory_icon_cache) continue if(!istext(colors[i])) stack_trace("attempted to use non-text color string with legacy additive; this is not supported.") - var/list/decoded = ReadRGB(colors[i]) + var/list/decoded = rgb2num(colors[i]) var/list/computed = list( 1, 0, 0, 0, 1, 0, diff --git a/config.default/README.md b/config.default/README.md new file mode 100644 index 000000000000..616c7c225371 --- /dev/null +++ b/config.default/README.md @@ -0,0 +1,4 @@ +# Default Configuration + +Due to the nature of TGS, we can either make an entire directory and everything in it static or make nothing in it static. +This is annoying, and necessitates default config be in another directory. diff --git a/config.default/config.toml b/config.default/config.toml new file mode 100644 index 000000000000..d95a377f9c1e --- /dev/null +++ b/config.default/config.toml @@ -0,0 +1,2 @@ +[[backend.repository]] + persistence = true diff --git a/config/config.toml b/config/config.toml new file mode 100644 index 000000000000..c38562316155 --- /dev/null +++ b/config/config.toml @@ -0,0 +1 @@ +# Config file. Loaded second in the load order, after `config.default.toml`. diff --git a/dependencies.sh b/dependencies.sh index e41225a27381..358da47695bc 100755 --- a/dependencies.sh +++ b/dependencies.sh @@ -22,4 +22,10 @@ export NODE_VERSION_COMPAT=20.2.0 export SPACEMAN_DMM_VERSION=suite-1.9 # Python version for mapmerge and other tools -export PYTHON_VERSION=3.9.0 +export PYTHON_VERSION=3.12.0 + +# MariaDB version +export MARIADB_VERSION=11.4.4 + +# Flyway version +export FLYWAY_VERSION=11.0.1 diff --git a/icons/clothing/uniform/misc/replika.dmi b/icons/clothing/uniform/misc/replika.dmi index d6611904f095..953e3e1da4ac 100644 Binary files a/icons/clothing/uniform/misc/replika.dmi and b/icons/clothing/uniform/misc/replika.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index f228e50e505e..73ecd6a01a68 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/maps/endeavour/levels/deck1.dmm b/maps/endeavour/levels/deck1.dmm index 77198e76b44a..1fd2e564ea5f 100644 --- a/maps/endeavour/levels/deck1.dmm +++ b/maps/endeavour/levels/deck1.dmm @@ -7883,7 +7883,7 @@ "fND" = ( /obj/structure/memorial{ name = "NSV Endeavour's Builder's Plate"; - desc = "The Armstrong-Hawker Shipbuilding company would like to thank the following for the contributions to the design: Dáire van der Waals, M.D., Ph.D.; Ruminis Melro, B.S.E; Hammond McGuire Sr., M.S.E.. Their work was essential in the design and manufacture of this vessel, and those of her class in the years to follow." + desc = "The Armstrong-Hawker Shipbuilding company would like to thank the following for the contributions to the design: Dáire van der Waals, M.D., Ph.D.; Ruminis Melro, A.P., Ph.D.; Hammond McGuire Sr., M.S.E.. Their work was essential in the design and manufacture of this vessel, and those of her class in the years to follow." }, /turf/simulated/wall/prepainted/civilian, /area/station/stairs_one) diff --git a/maps/endeavour/levels/deck2.dmm b/maps/endeavour/levels/deck2.dmm index 66ce3ffe8589..fd1f2ead76bb 100644 --- a/maps/endeavour/levels/deck2.dmm +++ b/maps/endeavour/levels/deck2.dmm @@ -19856,21 +19856,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/sleeper) -"mMY" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/simulated/open, -/area/rnd/research/researchdivision) "mNh" = ( /turf/simulated/wall/r_wall/prepainted, /area/maintenance/fpmaint2) @@ -21772,18 +21757,6 @@ }, /turf/simulated/floor/tiled/white, /area/shuttle/emt/general) -"nXl" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/door/firedoor{ - dir = 1 - }, -/turf/simulated/open, -/area/rnd/research/researchdivision) "nXm" = ( /turf/simulated/floor/tiled/dark, /area/rnd/anomaly_lab/containment_two) @@ -52104,8 +52077,8 @@ kCt kCt cda lBS -mMY -nXl +lBS +lBS lBS ffI vWo diff --git a/maps/endeavour/levels/deck3.dmm b/maps/endeavour/levels/deck3.dmm index ee560f0e0249..647c0eb28ed3 100644 --- a/maps/endeavour/levels/deck3.dmm +++ b/maps/endeavour/levels/deck3.dmm @@ -32,9 +32,9 @@ /area/endeavour/surfacebase/bar_backroom) "aaY" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 10 + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "acd" = ( /obj/machinery/light_switch{ @@ -69,6 +69,23 @@ /obj/structure/table/woodentable, /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) +"acY" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/stack/flag/yellow{ + pixel_x = 42; + pixel_y = 1 + }, +/obj/item/stack/flag/yellow{ + pixel_x = 42; + pixel_y = 2 + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "adf" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/security/hallwayaux) @@ -121,17 +138,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "aec" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/corner/navblue/border{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled/monotile, -/area/endeavour/hallway/d3afthall) +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "agG" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 @@ -139,14 +149,17 @@ /turf/simulated/floor/carpet/sblucarpet, /area/crew_quarters/sleep/Dorm_12) "agT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 }, -/obj/machinery/sheet_silo{ - obj_persist_static_id = "sheet-silo-mining" +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/camera/network/cargo{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "agU" = ( /obj/structure/bed/chair/comfy/black{ dir = 4 @@ -159,10 +172,6 @@ }, /turf/simulated/floor/tiled/steel, /area/shuttle/belter) -"agX" = ( -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/turf/simulated/floor/plating, -/area/maintenance/cargo) "ahk" = ( /obj/structure/closet/wardrobe, /turf/simulated/floor/wood, @@ -308,9 +317,17 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "apt" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "apI" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/security/security_equiptment_storage) @@ -406,24 +423,41 @@ /obj/random/soap, /turf/simulated/floor/tiled/white, /area/crew_quarters/barrestroom) -"atw" = ( -/obj/random/trash_pile, -/obj/machinery/light/small{ - dir = 1 +"ate" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/stamp/cargo{ + pixel_x = 7; + pixel_y = 8 }, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/item/stamp/denied{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/item/paper_bin{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 4 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) +"atw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "atT" = ( /obj/structure/cable/green{ - icon_state = "2-8" + icon_state = "4-8" }, /obj/structure/cable/green{ - icon_state = "2-4" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "aup" = ( /obj/machinery/computer/guestpass{ dir = 1; @@ -491,6 +525,15 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) +"avQ" = ( +/obj/machinery/light, +/obj/structure/cable/green{ + icon_state = "1-8" + }, +/obj/structure/ore_box, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "avW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -596,18 +639,10 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) "ays" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/brown/bordercorner2{ - dir = 9 - }, /obj/structure/table/standard, /obj/item/hand_labeler, /obj/item/hand_labeler, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "ayC" = ( /obj/structure/toilet{ @@ -686,11 +721,20 @@ /area/crew_quarters/toilet) "aAV" = ( /obj/structure/closet/l3closet/janitor, -/obj/machinery/light{ - dir = 4 - }, /turf/simulated/floor/tiled/dark, /area/janitor) +"aBc" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/structure/bed/chair/sofa/black/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "aBl" = ( /obj/structure/closet/wardrobe, /obj/item/toy/plushie/black_cat, @@ -700,6 +744,15 @@ /obj/machinery/power/apc/north_mount, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_9) +"aBU" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "aCi" = ( /obj/machinery/door/firedoor{ dir = 8 @@ -739,27 +792,32 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/cable/green{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) -"aDw" = ( -/obj/machinery/mineral/output, -/obj/effect/floor_decal/industrial/loading{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) -"aDU" = ( /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/lower/trash_pit) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) +"aDw" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining_interior"; + name = "refining conveyor"; + pixel_y = 2; + pixel_x = -11 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) +"aDU" = ( +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/quartermaster/belterdock/refinery) "aFg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -769,6 +827,12 @@ }, /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) +"aFt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "aFF" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -782,15 +846,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "aFS" = ( -/obj/machinery/light, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8 - }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, /turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/area/endeavour/surfacebase/mining_main/break_room) "aGh" = ( /obj/effect/floor_decal/corner/blue{ dir = 4 @@ -837,8 +896,17 @@ /turf/simulated/floor/tiled, /area/security/lobby) "aGE" = ( -/turf/simulated/wall/r_wall/prepainted/cargo, -/area/maintenance/cargo/mining) +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/air_alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "aGV" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -851,6 +919,17 @@ }, /turf/simulated/floor/tiled, /area/hydroponics) +"aHh" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "aHs" = ( /obj/machinery/light{ dir = 4 @@ -864,6 +943,29 @@ }, /turf/simulated/floor/tiled/dark, /area/security/brig) +"aHA" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Refinery"; + dir = 8 + }, +/obj/map_helper/access_helper/airlock/station/supply/mining, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "aHR" = ( /obj/effect/floor_decal/corner/green{ dir = 9 @@ -922,7 +1024,7 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "aIZ" = ( -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "aKg" = ( /obj/machinery/washing_machine, @@ -1064,13 +1166,8 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/game_room) "aOG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/warehouse) "aPr" = ( /obj/structure/cable/orange{ @@ -1134,6 +1231,8 @@ dir = 8 }, /obj/machinery/door/airlock/maintenance, +/obj/map_helper/access_helper/airlock/station/maintenance, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar/catwalk) "aUp" = ( @@ -1154,13 +1253,22 @@ }, /turf/simulated/floor/tiled/monotile, /area/security/brig) +"aUM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "aUT" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, -/area/endeavour/station/stairs_three) +/area/maintenance/bar/lower) "aVb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1332,6 +1440,25 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardafthall) +"aZK" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4; + use_power = 0 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "aZS" = ( /obj/structure/cable/orange{ icon_state = "4-8" @@ -1372,6 +1499,11 @@ "bbr" = ( /turf/simulated/wall/r_wall/prepainted, /area/crew_quarters/sleep/Dorm_8) +"bbL" = ( +/obj/structure/closet/crate/trashcart, +/obj/random/maintenance/engineering, +/turf/simulated/floor/plating, +/area/maintenance/bar/lower) "bbW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1585,17 +1717,17 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "bgH" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "mining_interior" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/obj/machinery/camera/network/cargo, -/obj/machinery/mineral/output, -/obj/structure/cable/green{ - icon_state = "2-4" +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "bgM" = ( /obj/structure/cable{ icon_state = "0-8" @@ -1627,11 +1759,9 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) "bhw" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "bhC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -1659,12 +1789,12 @@ /turf/simulated/floor, /area/security/brig) "bhP" = ( -/obj/machinery/mineral/processing_unit_console{ - density = 0; - pixel_y = 30 +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/flora/grass/event/generic_bush1, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "bhQ" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -1687,6 +1817,17 @@ /obj/machinery/power/apc/north_mount, /turf/simulated/floor/plating, /area/maintenance/substation/cargo) +"biZ" = ( +/obj/machinery/mineral/processing_unit_console{ + density = 0; + pixel_y = -33; + pixel_x = 0 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "bje" = ( /obj/machinery/recharge_station, /obj/machinery/light/small{ @@ -1747,21 +1888,15 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "blB" = ( -/obj/structure/closet/secure_closet/cargotech, -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 - }, -/obj/machinery/camera/network/cargo{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 10 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/closet/secure_closet/miner, +/obj/item/binoculars, +/obj/machinery/light{ + dir = 1; + pixel_y = 20 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "blM" = ( /obj/effect/floor_decal/spline/fancy/wood, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -1821,6 +1956,15 @@ }, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) +"bol" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "box" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -1837,17 +1981,11 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "boI" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/air_alarm/south_mount, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "boM" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -1881,6 +2019,19 @@ }, /turf/simulated/floor/tiled, /area/security/brig) +"bpu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "bqn" = ( /obj/structure/sign/directions/cryo{ dir = 4; @@ -1904,16 +2055,18 @@ /turf/simulated/floor/tiled/monotile, /area/endeavour/hallway/d3afthall) "bqs" = ( -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_y = -37 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "brs" = ( /obj/machinery/power/terminal, /obj/structure/cable{ @@ -1961,7 +2114,7 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3fwdhall) "bta" = ( -/turf/simulated/floor/reinforced/overhang, +/turf/simulated/floor/reinforced, /area/maintenance/bar/catwalk) "btf" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on, @@ -2062,13 +2215,28 @@ /obj/machinery/door/airlock/glass, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) +"buN" = ( +/obj/structure/closet/emcloset, +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "buX" = ( /obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" + dir = 8 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, /area/maintenance/bar/lower) "bvs" = ( /obj/machinery/air_alarm{ @@ -2078,14 +2246,15 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) "bvE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Quartermaster"; - req_one_access = list() +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/map_helper/access_helper/airlock/station/head_office/quartermaster, -/turf/simulated/floor/tiled, -/area/quartermaster/qm) +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/grass/event/yellow_flowers1, +/turf/simulated/floor/grass, +/area/quartermaster/foyer) "bvI" = ( /obj/machinery/light/small{ dir = 8 @@ -2117,17 +2286,12 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) "bxW" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "byF" = ( /obj/structure/disposalpipe/segment{ dir = 8 @@ -2220,6 +2384,14 @@ /obj/effect/shuttle_landmark/endeavour/deck2/port, /turf/space, /area/space) +"bBM" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/fire_alarm/north_mount, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/belterdock) "bCj" = ( /obj/structure/bed/chair/comfy/beige{ dir = 4 @@ -2373,12 +2545,15 @@ /turf/simulated/floor/plating, /area/endeavour/command/turrets) "bHV" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "mining_interior" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "bIs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2418,11 +2593,13 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "bJS" = ( -/obj/machinery/air_alarm{ - dir = 8; - pixel_x = 25 +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/carpet/sblucarpet, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "bKx" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -2436,6 +2613,21 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/kitchen) +"bLd" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/flipped{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "bLl" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -2474,16 +2666,16 @@ /area/security/detectives_office) "bMN" = ( /obj/machinery/door/firedoor/border_only, -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad2" - }, /obj/machinery/shield_diffuser, /obj/map_helper/airlock/door/simple, +/obj/map_helper/access_helper/airlock/station/external_airlock, /obj/machinery/door/airlock/glass_external{ req_one_access = null }, -/obj/map_helper/access_helper/airlock/station/external_airlock, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "bNb" = ( @@ -2518,17 +2710,13 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "bOW" = ( -/obj/machinery/light{ - dir = 8 - }, +/obj/machinery/computer/roguezones, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "bPg" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/landmark/spawnpoint/job/cargo_technician, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "bPr" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/security/security_lockerroom) @@ -2536,6 +2724,15 @@ /obj/effect/floor_decal/spline/fancy/wood, /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) +"bQe" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "bQp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2603,17 +2800,9 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "bTA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/junction/yjunction{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "bUa" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lime/border, @@ -2749,6 +2938,11 @@ }, /turf/simulated/floor/tiled/old_cargo/gray, /area/prison/cell_block) +"bWp" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/suit_cycler/mining, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "bWK" = ( /turf/simulated/wall/prepainted, /area/endeavour/station/stairs_three) @@ -2850,14 +3044,20 @@ /turf/simulated/floor/plating, /area/security/detectives_office) "ccA" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/power/apc/south_mount, -/obj/structure/cable/green{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"cdn" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining_interior" + }, +/obj/machinery/mineral/output, +/obj/machinery/light, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "cdy" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 @@ -2970,6 +3170,18 @@ /obj/spawner/window/reinforced/full, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) +"ciU" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "cjp" = ( /obj/structure/bed/padded, /obj/machinery/newscaster{ @@ -2999,30 +3211,33 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_9) "cmi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/structure/cable/green{ + icon_state = "4-8" }, -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "cmw" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, +/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, /area/quartermaster/office) "cmE" = ( -/obj/machinery/camera/network/cargo, -/obj/structure/table/standard, -/obj/item/stamp/cargo, -/obj/item/stamp/denied{ - pixel_x = 7 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/obj/item/stamp/qm{ - pixel_x = -6 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "cmR" = ( /obj/structure/bed/chair/shuttle, /obj/structure/closet/walllocker/emerglocker/north, @@ -3292,12 +3507,25 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/bar) +"cyr" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "cyG" = ( -/obj/machinery/camera/network/cargo{ - dir = 4 +/obj/machinery/status_display/supply_display{ + pixel_x = -32; + pixel_y = 0 }, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "czc" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/security/forensics) @@ -3309,8 +3537,10 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) "czr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, +/obj/landmark/spawnpoint/job/cargo_technician, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "cAj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -3425,12 +3655,26 @@ /turf/simulated/floor/tiled, /area/security/hanger) "cDv" = ( -/obj/machinery/station_map{ - dir = 4; - pixel_x = -32 +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) +"cEd" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/structure/bed/chair/sofa/black{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "cEz" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -3600,17 +3844,8 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/sleep/Dorm_1) "cJJ" = ( -/obj/machinery/air_alarm{ - pixel_y = 22 - }, -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/camera/network/cargo, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/vacant/vacant_shop) "cKe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3726,12 +3961,12 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "cNA" = ( -/obj/machinery/power/apc/north_mount, -/obj/structure/cable/green{ - icon_state = "0-2" +/obj/structure/flora/pottedplant/thinbush{ + pixel_x = 0; + pixel_y = 3 }, /turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/area/quartermaster/belterdock) "cPE" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -3780,6 +4015,19 @@ }, /turf/simulated/floor/tiled, /area/hydroponics) +"cQm" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "cQn" = ( /obj/machinery/air_alarm{ pixel_y = 22 @@ -3938,9 +4186,6 @@ /turf/simulated/floor/plating, /area/security/warden) "cVy" = ( -/obj/machinery/light{ - dir = 1 - }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, @@ -3992,17 +4237,12 @@ /area/hydroponics) "cXR" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/door/airlock/maintenance, /obj/structure/catwalk, /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/map_helper/access_helper/airlock/station/maintenance, /turf/simulated/floor/plating, /area/crew_quarters/bar/lounge) "cXW" = ( @@ -4061,6 +4301,24 @@ }, /turf/simulated/floor/tiled/techmaint, /area/security/brig) +"cZe" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "cZm" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/red/border, @@ -4096,11 +4354,20 @@ /turf/simulated/floor/tiled/dark, /area/prison/cell_block) "daE" = ( -/obj/machinery/camera/network/cargo{ - dir = 1 +/obj/structure/cable/green{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "daO" = ( /turf/simulated/wall/prepainted, /area/crew_quarters/sleep/Dorm_4) @@ -4159,14 +4426,23 @@ /turf/simulated/floor/tiled, /area/hydroponics) "dcu" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/cable/green{ + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "dcx" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -4227,14 +4503,17 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "des" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Bay"; - req_one_access = null +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/cable/green{ + icon_state = "4-8" }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/extinguisher_cabinet{ + pixel_y = -31 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "deC" = ( /obj/machinery/fire_alarm/south_mount{ pixel_y = -24 @@ -4347,11 +4626,14 @@ /turf/simulated/floor/wood, /area/security/breakroom) "dgn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "dgB" = ( /obj/machinery/holopad, /obj/machinery/light{ @@ -4428,6 +4710,12 @@ /obj/effect/floor_decal/corner_oldtile/white/diagonal, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) +"dip" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "diG" = ( /obj/structure/cable{ icon_state = "1-2" @@ -4466,11 +4754,9 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/hanger) "djB" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "dkj" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 8 @@ -4493,6 +4779,10 @@ "dkE" = ( /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) +"dkO" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "dld" = ( /obj/machinery/fire_alarm/south_mount{ pixel_y = -24 @@ -4566,12 +4856,6 @@ /area/endeavour/hallway/d3starboardafthall) "dns" = ( /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloorblack/corner{ - dir = 4 - }, -/obj/effect/floor_decal/corner/navblue/bordercorner{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 @@ -4650,6 +4934,15 @@ }, /turf/simulated/open, /area/endeavour/hallway/d3aftmaint) +"dqA" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "dqN" = ( /obj/machinery/recharger/wallcharger{ pixel_x = 32; @@ -4689,6 +4982,15 @@ }, /turf/simulated/wall/r_wall/prepainted/cargo, /area/shuttle/mining_ship/general) +"drV" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "dsm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -4778,11 +5080,17 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/interrogation) "dyR" = ( -/obj/machinery/power/apc/west_mount, -/obj/structure/cable/green{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "dyV" = ( /turf/simulated/floor/tiled/white, @@ -4855,6 +5163,16 @@ "dzM" = ( /turf/simulated/floor/carpet/sblucarpet, /area/crew_quarters/sleep/Dorm_7) +"dAP" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/grass/event/sparse_grass2, +/turf/simulated/floor/grass/indoors, +/area/quartermaster/foyer) "dAT" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -5019,9 +5337,12 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) "dHW" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/obj/structure/flora/grass/event/generic_bush1, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "dHX" = ( /obj/structure/cable/green{ icon_state = "2-8" @@ -5031,6 +5352,15 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) +"dIt" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "dIB" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/red/border, @@ -5069,7 +5399,8 @@ /area/crew_quarters/kitchen) "dJV" = ( /obj/machinery/light{ - dir = 1 + dir = 1; + pixel_y = 20 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -5110,9 +5441,15 @@ /area/crew_quarters/sleep/Dorm_12) "dLj" = ( /obj/structure/cable/green{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/simulated/floor/tiled, +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "dMA" = ( /obj/structure/cable{ @@ -5289,14 +5626,8 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) "dPs" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/wall/prepainted/cargo, +/area/endeavour/surfacebase/mining_main/break_room) "dPF" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 1 @@ -5359,10 +5690,16 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/conveyor_switch/oneway{ - id = "QMLoad" +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/conveyor{ + id = "QMLoad2" + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "dSy" = ( /obj/machinery/door/blast/regular{ @@ -5422,11 +5759,19 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/kitchen) "dTQ" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 1 +/obj/map_helper/access_helper/airlock/station/supply/mining, +/obj/effect/floor_decal/borderfloor{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Refinery" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/endeavour/surfacebase/mining_main/break_room) "dTT" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 5 @@ -5476,6 +5821,13 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, /area/endeavour/station/stairs_three) +"dVh" = ( +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/belterdock) "dVs" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 8 @@ -5507,6 +5859,19 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) +"dVA" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "dVD" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, /obj/structure/cable/green{ @@ -5652,8 +6017,15 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) +"dZs" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "eau" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/borderfloorblack, @@ -5751,8 +6123,16 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_13) "edk" = ( -/obj/machinery/mech_recharger, -/turf/simulated/floor/tiled, +/obj/landmark{ + name = "blobstart" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "edp" = ( /obj/structure/cable/green{ @@ -5842,16 +6222,11 @@ /turf/simulated/floor/wood, /area/maintenance/dormitory) "egp" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null +/obj/structure/window/reinforced/survival_pod{ + dir = 4 }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/turf/simulated/floor/tiled, -/area/quartermaster/miningdock) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "egw" = ( /turf/simulated/floor/carpet/blue, /area/crew_quarters/sleep/Dorm_3) @@ -5928,6 +6303,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "ejd" = ( @@ -5941,11 +6319,17 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "ejk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, /obj/structure/cable/green{ icon_state = "4-8" }, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "ekc" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -5956,23 +6340,22 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "ekD" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window{ - dir = 8; - req_one_access = list(31) - }, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 4 - }, -/obj/item/folder/white, -/obj/item/pen, -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/delivery) +/obj/structure/table/gamblingtable, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "ekH" = ( /turf/simulated/wall/prepainted, /area/crew_quarters/sleep/Dorm_9) +"ekJ" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/machinery/fire_alarm/north_mount, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "ekX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5988,6 +6371,17 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) +"elJ" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/computer/ship/navigation/telescreen{ + pixel_y = -37 + }, +/obj/machinery/camera/network/cargo{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "elQ" = ( /obj/structure/undies_wardrobe, /turf/simulated/floor/carpet/blue, @@ -6120,7 +6514,7 @@ req_one_access = null }, /obj/map_helper/access_helper/airlock/station/external_airlock, -/turf/simulated/floor/tiled, +/turf/simulated/floor/reinforced, /area/quartermaster/warehouse) "eqa" = ( /obj/spawner/window/low_wall/full/firelocks, @@ -6213,10 +6607,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "esB" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/blue, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/turf/simulated/wall/prepainted/cargo, +/area/maintenance/lower/trash_pit) "esO" = ( /obj/structure/bed/chair/comfy/teal, /obj/machinery/light_switch{ @@ -6259,10 +6651,9 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "etR" = ( -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, -/turf/simulated/floor/plating, -/area/quartermaster/qm) +/obj/machinery/vending/cola, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "etU" = ( /obj/machinery/light/small{ dir = 4 @@ -6283,16 +6674,11 @@ /turf/simulated/floor/tiled, /area/hydroponics) "etZ" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6{ - dir = 4 +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 1 }, -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/item/duct_tape_roll, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "eum" = ( /obj/structure/cable{ icon_state = "4-8" @@ -6309,12 +6695,11 @@ /turf/simulated/floor/airless, /area/shuttle/mining_ship/general) "evc" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "evi" = ( /obj/item/bedsheet/browndouble, /obj/structure/bed/double/padded, @@ -6352,8 +6737,10 @@ /turf/simulated/floor/wood, /area/security/breakroom) "ewr" = ( -/obj/machinery/light{ - dir = 1 +/obj/item/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 }, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3afthall) @@ -6531,13 +6918,48 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) "eBl" = ( -/obj/structure/ore_box, -/turf/simulated/floor/tiled/steel, -/area/shuttle/belter) +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/map_helper/access_helper/airlock/station/supply/department, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Warehouse" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "eBs" = ( -/obj/machinery/mineral/unloading_machine, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/machinery/camera/network/cargo{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"eBy" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "eBO" = ( /turf/simulated/floor/tiled/dark, /area/security/lobby) @@ -6656,6 +7078,10 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) +"eDd" = ( +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/wood, +/area/quartermaster/office) "eDo" = ( /obj/structure/bed/chair{ dir = 4 @@ -6711,10 +7137,21 @@ }, /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) +"eEO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "eFf" = ( -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "eFA" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -6774,18 +7211,8 @@ /turf/simulated/floor/tiled/dark, /area/security/warden) "eHs" = ( -/obj/machinery/recharge_station, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, /turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/area/endeavour/surfacebase/mining_main/break_room) "eHQ" = ( /obj/machinery/computer/ship/navigation/telescreen{ pixel_x = -32 @@ -6809,12 +7236,9 @@ /turf/simulated/floor/tiled/steel, /area/shuttle/mining_ship/general) "eIB" = ( -/obj/structure/closet/hydrant{ - pixel_x = 32 - }, -/obj/machinery/vending/snack, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "eIC" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -6865,16 +7289,14 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3fwdmaint) "eKq" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/obj/machinery/power/apc/west_mount{ - cell_type = /obj/item/cell/super - }, /obj/structure/cable/green{ - icon_state = "0-4" + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) "eLl" = ( /obj/machinery/door/airlock/maintenance/sec{ req_one_access = null @@ -6983,9 +7405,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_2) "eNB" = ( -/obj/spawner/window/low_wall/full/nogrille/firelocks, -/obj/effect/paint/beastybrown, -/turf/simulated/floor/plating, +/turf/simulated/wall/r_wall/prepainted/cargo, /area/quartermaster/delivery) "eNE" = ( /obj/structure/cable/green{ @@ -7007,15 +7427,21 @@ /obj/structure/closet/l3closet/janitor, /turf/simulated/floor/tiled/dark, /area/janitor) -"ePB" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +"ePx" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/landmark/spawnpoint/job/shaft_miner, +/obj/item/stool/padded{ + pixel_x = 0; + pixel_y = 13 }, -/obj/machinery/light{ - dir = 8 +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) +"ePB" = ( +/obj/machinery/computer/card{ + dir = 4 }, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "ePI" = ( /obj/effect/floor_decal/corner/green{ dir = 9 @@ -7136,14 +7562,14 @@ /area/endeavour/hallway/d3portamidhall) "eVd" = ( /obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Kitchen" + }, /obj/map_helper/access_helper/airlock/station/service/kitchen, /obj/structure/cable/green{ icon_state = "4-8" }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/door/airlock/civilian{ - name = "Kitchen" - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "eVt" = ( @@ -7188,15 +7614,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "eWe" = ( -/obj/structure/cable/green{ - icon_state = "2-4" +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/obj/structure/closet/crate/medical, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "eWz" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -7299,18 +7722,9 @@ /turf/simulated/floor/plating, /area/maintenance/substation/cargo) "eZz" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bar/catwalk) "eZW" = ( /turf/simulated/wall/prepainted, /area/endeavour/hallway/d3portforhall) @@ -7426,17 +7840,16 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "feq" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/machinery/mineral/mint, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "feE" = ( -/obj/machinery/camera/network/cargo{ - dir = 4 +/obj/structure/cable/green{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "feQ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -7463,12 +7876,15 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "ffP" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) -"ffW" = ( -/turf/simulated/wall/prepainted/cargo, +/obj/machinery/computer/supplycomp/control{ + dir = 8 + }, +/turf/simulated/floor/wood, /area/quartermaster/office) +"ffW" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "fgj" = ( /obj/machinery/camera/network/civilian{ dir = 1 @@ -7483,6 +7899,16 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) +"fgA" = ( +/obj/structure/window/reinforced/survival_pod{ + dir = 4 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "fgJ" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -7520,6 +7946,16 @@ /obj/map_helper/access_helper/airlock/station/security/department, /turf/simulated/floor/tiled, /area/security/brig) +"fhx" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "fii" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -7530,7 +7966,16 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "fil" = ( -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/camera/network/cargo{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "fip" = ( /obj/structure/cable/green{ @@ -7620,25 +8065,10 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "fjp" = ( -/obj/machinery/power/apc/north_mount, -/obj/structure/cable/green{ - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/camera/network/cargo, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/closet/secure_closet/quartermaster, +/obj/item/clothing/accessory/poncho/roles/cloak/qm, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "fju" = ( /turf/simulated/floor/plating, /area/maintenance/cargo) @@ -7655,12 +8085,18 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) "fko" = ( -/obj/structure/table/reinforced, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, -/obj/item/tank/jetpack/oxygen, +/obj/machinery/air_alarm{ + pixel_y = 22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, /turf/simulated/floor/reinforced, /area/quartermaster/miningdock) "fkv" = ( @@ -7723,8 +8159,14 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) "flt" = ( -/turf/simulated/floor/airless/ceiling, -/area/maintenance/cargo) +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Foyer" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "flS" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 8 @@ -7736,10 +8178,10 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "fmj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/engineering, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, +/turf/simulated/floor/plating, +/area/endeavour/surfacebase/mining_main/break_room) "fmB" = ( /obj/machinery/air_alarm{ dir = 1; @@ -7875,6 +8317,10 @@ }, /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/sleep/Dorm_9) +"fsa" = ( +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) "fsu" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -7890,6 +8336,17 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) +"fsN" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/obj/structure/table/wooden_reinforced, +/obj/machinery/recharger{ + pixel_x = -6; + pixel_y = 2 + }, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "fta" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/crystal, @@ -7913,21 +8370,28 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "fvb" = ( -/obj/machinery/air_alarm{ - pixel_y = 22 +/obj/structure/table/hardwoodtable, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 7 }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/item/pen{ + pixel_x = -6; + pixel_y = 4 }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 +/obj/machinery/button/windowtint{ + id = "qm_office"; + pixel_x = 5; + pixel_y = -3 }, -/obj/machinery/suit_storage_unit/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/wood, +/area/quartermaster/qm) "fvQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -8066,24 +8530,20 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "fDt" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/effect/floor_decal/borderfloorblack{ dir = 4 }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 +/obj/structure/bed/chair/comfy/brown{ + dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "fDw" = ( /obj/structure/lattice, /turf/space/basic, @@ -8139,6 +8599,12 @@ }, /turf/simulated/floor/tiled/monotile, /area/security/brig) +"fGh" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "fGL" = ( /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) @@ -8170,19 +8636,17 @@ /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) "fJl" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/obj/structure/closet/secure_closet/cargotech, -/obj/effect/floor_decal/borderfloor{ - dir = 9 +/obj/structure/table/steel_reinforced, +/obj/item/storage/firstaid/o2{ + pixel_x = 0; + pixel_y = 7 }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 9 +/obj/item/storage/firstaid/toxin{ + pixel_x = 0; + pixel_y = 3 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "fJn" = ( /obj/machinery/light{ dir = 1 @@ -8331,8 +8795,21 @@ /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) "fLU" = ( -/turf/simulated/wall/prepainted/cargo, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "fMA" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -8390,6 +8867,13 @@ /obj/machinery/recharge_station, /turf/simulated/floor/crystal, /area/endeavour/hallway/d3fwdhall) +"fNj" = ( +/obj/machinery/light{ + dir = 8; + light_range = 12 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "fND" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -8522,6 +9006,15 @@ /obj/effect/floor_decal/corner_oldtile/white/diagonal, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) +"fPG" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance, +/obj/map_helper/access_helper/airlock/station/maintenance, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bar/lower) "fPZ" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 @@ -8630,6 +9123,26 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/security/brig) +"fRJ" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) +"fRP" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "fSo" = ( /obj/machinery/door/airlock{ id_tag = "dorm2"; @@ -8689,13 +9202,29 @@ }, /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) +"fTy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d3portforhall) +"fTB" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "fTI" = ( /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/steel, /area/shuttle/belter) "fTU" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance, +/obj/map_helper/access_helper/airlock/station/maintenance, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, /area/maintenance/bar/lower) "fUc" = ( /obj/structure/bed/chair/sofa, @@ -8876,13 +9405,25 @@ /turf/simulated/floor/plating, /area/security/interrogation) "fYy" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/spawner/window/low_wall/reinforced/full, -/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, -/area/endeavour/surfacebase/mining_main/uxstorage) +/area/maintenance/bar/lower) +"fYP" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "fYR" = ( /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) @@ -8890,7 +9431,19 @@ /turf/simulated/floor/tiled/dark, /area/security/evidence_storage) "gal" = ( -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "gaU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8973,12 +9526,10 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardafthall) "gdU" = ( -/obj/machinery/light_switch{ - pixel_x = 25 - }, -/obj/machinery/computer/card, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "gea" = ( /obj/structure/table/marble, /obj/item/reagent_containers/food/condiment/spacespice{ @@ -9193,7 +9744,8 @@ /area/endeavour/hallway/d3portforhall) "gmZ" = ( /obj/machinery/light{ - dir = 1 + dir = 1; + pixel_y = 20 }, /turf/simulated/floor/reinforced, /area/quartermaster/miningdock) @@ -9207,16 +9759,14 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "gnO" = ( -/obj/machinery/door/firedoor{ +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/landmark/spawnpoint/job/shaft_miner, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "goa" = ( /obj/landmark/spawnpoint/latejoin/station/cyborg, /turf/simulated/floor/tiled/techfloor, @@ -9292,6 +9842,13 @@ /obj/map_helper/access_helper/airlock/station/security/general, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/interrogation) +"gqj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "gqv" = ( /obj/machinery/power/port_gen/pacman/mrs{ anchored = 1 @@ -9306,35 +9863,30 @@ /turf/simulated/floor/plating, /area/maintenance/substation/civilian) "gqw" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "gqN" = ( /obj/machinery/space_heater, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "gqQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null +/obj/machinery/door/airlock/maintenance, +/obj/machinery/door/firedoor{ + dir = 8 }, /obj/map_helper/access_helper/airlock/station/supply/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/quartermaster/belterdock/refinery) "gqT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -9416,10 +9968,11 @@ /turf/space, /area/space) "gtZ" = ( -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint/beastybrown, -/turf/simulated/floor/plating, -/area/quartermaster/office) +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "gug" = ( /obj/machinery/light/small{ dir = 8 @@ -9473,6 +10026,10 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/fitness) +"gwe" = ( +/obj/random/trash_pile, +/turf/simulated/floor/plating, +/area/maintenance/bar/lower) "gwQ" = ( /obj/machinery/fire_alarm/west_mount{ pixel_x = -24 @@ -9607,6 +10164,12 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) +"gDP" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "gDZ" = ( /obj/structure/dogbed, /turf/simulated/floor/plating, @@ -9668,8 +10231,19 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "gGm" = ( -/turf/simulated/floor/tiled/monotile, -/area/quartermaster/delivery) +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/effect/floor_decal/borderfloorblack/corner2, +/obj/effect/floor_decal/corner/brown/bordercorner2, +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "gHM" = ( /turf/simulated/floor/tiled, /area/hydroponics) @@ -9746,13 +10320,9 @@ /turf/simulated/floor/tiled, /area/security/range) "gLK" = ( -/obj/item/storage/toolbox/mechanical, -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "gLQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -9772,17 +10342,14 @@ /turf/simulated/floor/wood, /area/endeavour/surfacebase/bar_backroom) "gLZ" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/tiled/steel, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "gMc" = ( /obj/spawner/window/reinforced/full/firelocks, @@ -9846,14 +10413,18 @@ /turf/simulated/floor/plating, /area/maintenance/substation/security) "gNj" = ( -/turf/simulated/wall/prepainted/cargo, -/area/quartermaster/qm) -"gNV" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) +"gNV" = ( +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/crew_quarters/bar/lounge) "gNZ" = ( /obj/machinery/door/airlock/civilian{ name = "Game Room" @@ -9900,22 +10471,15 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "gQF" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/catwalk, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "gRa" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -9989,13 +10553,15 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) "gSF" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/air_alarm/north_mount, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "gSH" = ( /obj/machinery/fire_alarm/south_mount{ pixel_y = -24 @@ -10049,6 +10615,15 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) +"gUu" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "gUM" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10116,12 +10691,26 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/bedrooms) "gXm" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, /obj/structure/cable/green{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/landmark/spawnpoint/job/cargo_technician, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "gXN" = ( /obj/structure/cable{ icon_state = "2-8" @@ -10269,17 +10858,22 @@ /turf/simulated/floor/tiled/dark, /area/security/riot_control) "hcH" = ( -/obj/machinery/requests_console/preset/cargo{ - pixel_x = 30 +/obj/map_helper/airlock/door/simple, +/obj/machinery/door/firedoor{ + dir = 8 }, -/obj/effect/floor_decal/borderfloor{ - dir = 5 +/obj/map_helper/access_helper/airlock/station/external_airlock, +/obj/machinery/door/airlock/glass_external{ + req_one_access = null }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 5 +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/warehouse) "hdd" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -10296,12 +10890,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "hdh" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/quartermaster/foyer) "hdY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10336,18 +10926,17 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "heJ" = ( -/obj/machinery/mineral/input, -/obj/effect/floor_decal/industrial/loading, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "heO" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/effect/floor_decal/industrial/warning{ + dir = 6 }, -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "hgm" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -10427,13 +11016,12 @@ /area/security/hallway) "hkm" = ( /obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "hky" = ( /obj/structure/window/reinforced{ dir = 8 @@ -10468,11 +11056,13 @@ /turf/simulated/wall/prepainted/civilian, /area/endeavour/hallway/d3aftmaint) "hlc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/machinery/mineral/output, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "hlx" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -10501,9 +11091,11 @@ /turf/simulated/floor/tiled, /area/security/lobby) "hmk" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/quartermaster/office) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/light, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "hmF" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -10613,21 +11205,27 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/showers) "hrc" = ( -/obj/machinery/computer/supplycomp{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) -"hrS" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/structure/disposalpipe/segment{ +/obj/effect/floor_decal/corner/brown/border{ dir = 8 }, -/obj/structure/catwalk, +/obj/map_helper/access_helper/airlock/station/supply/department, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Warehouse" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"hrS" = ( +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/area/quartermaster/foyer) "hrV" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 4 @@ -10700,10 +11298,19 @@ /area/endeavour/hallway/d3portforhall) "hus" = ( /obj/machinery/conveyor{ - dir = 8; - id = "QMLoad2" + dir = 4; + id = "QMLoad" }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "huy" = ( /obj/structure/disposalpipe/segment{ @@ -10804,9 +11411,22 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboardsolar) +"hwN" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "hwP" = ( -/turf/simulated/wall/prepainted/cargo, -/area/maintenance/cargo/mining) +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "hxO" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1379; @@ -10849,12 +11469,10 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) "hzi" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "hzs" = ( /obj/machinery/computer/secure_data, /obj/machinery/light{ @@ -10862,6 +11480,13 @@ }, /turf/simulated/floor/tiled/old_cargo/red, /area/security/security_processing) +"hzu" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/effect/floor_decal/borderfloorblack/corner2, +/obj/effect/floor_decal/corner/brown/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "hBC" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -10923,30 +11548,24 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/sleep/Dorm_9) "hDl" = ( -/obj/machinery/camera/network/cargo, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) -"hDH" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/obj/structure/catwalk, +/obj/structure/flora/grass/event/bright_flowers1, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) +"hDH" = ( +/obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, +/obj/map_helper/access_helper/airlock/station/supply/mining, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment{ dir = 1 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "hEc" = ( /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) @@ -11063,20 +11682,11 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "hJm" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/mining{ - id_tag = "cargodoor"; - name = "Cargo Office"; - req_one_access = list() +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/quartermaster/office) "hJR" = ( /obj/machinery/holopad, @@ -11154,12 +11764,17 @@ /area/tether/surfacebase/entertainment) "hLw" = ( /obj/structure/cable/green{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/light, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, -/area/crew_quarters/kitchen) +/area/quartermaster/warehouse) "hLN" = ( /obj/machinery/camera/network/civilian{ dir = 1 @@ -11245,12 +11860,14 @@ /turf/simulated/floor/tiled/dark, /area/security/riot_control) "hOq" = ( -/obj/structure/stairs/spawner/south, -/obj/structure/railing{ - dir = 8 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "hOu" = ( /obj/effect/floor_decal/borderfloorblack/corner, /obj/effect/floor_decal/corner/red/bordercorner, @@ -11362,14 +11979,20 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) +"hUh" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "hUF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "hVe" = ( /obj/machinery/camera/network/civilian{ @@ -11403,6 +12026,21 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"hVB" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/air_alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d3portforhall) "hWt" = ( /obj/machinery/status_display/supply_display{ pixel_y = 32 @@ -11413,11 +12051,13 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) "hWB" = ( -/obj/machinery/light/small{ +/obj/effect/floor_decal/spline/fancy/wood, +/obj/structure/table/wooden_reinforced, +/obj/machinery/chemical_dispenser/catering/bar_coffee{ dir = 1 }, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "hWG" = ( /obj/structure/table/marble, /obj/machinery/door/blast/shutters{ @@ -11436,14 +12076,17 @@ dir = 1; icon_state = "pipe-c" }, +/obj/structure/cable/green{ + icon_state = "1-4" + }, /turf/simulated/floor/plating, -/area/endeavour/station/stairs_three) +/area/maintenance/bar/lower) "hXO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "hXW" = ( /obj/structure/table/steel, /obj/machinery/recharger, @@ -11472,6 +12115,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_6) "hYD" = ( +/obj/machinery/door/airlock{ + name = "Kitchen"; + req_one_access = list(28) + }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -11484,9 +12131,6 @@ }, /obj/map_helper/access_helper/airlock/station/service/kitchen, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/door/airlock/civilian{ - name = "Kitchen" - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "hYL" = ( @@ -11560,9 +12204,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "iaP" = ( -/turf/simulated/wall/prepainted, +/turf/simulated/wall/prepainted/civilian, /area/maintenance/bar/catwalk) "ibm" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, /obj/structure/cable{ icon_state = "4-8" }, @@ -11656,16 +12303,22 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardamidhall) -"ifE" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +"ieQ" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/borderfloorblack/corner2, +/obj/effect/floor_decal/corner/brown/bordercorner2, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) +"ifE" = ( +/obj/effect/floor_decal/spline/plain, +/obj/structure/flora/grass/event/full_grass1, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "ifT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -11790,7 +12443,7 @@ dir = 8 }, /turf/simulated/floor/plating, -/area/space) +/area/quartermaster/miningdock) "ili" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -11823,6 +12476,13 @@ }, /turf/simulated/floor/plating, /area/security/hallway) +"imI" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/endeavour/hallway/d3portforhall) "imX" = ( /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/sleep/Dorm_9) @@ -11833,17 +12493,15 @@ /turf/simulated/floor/tiled/dark, /area/security/lobby) "inw" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/camera/network/cargo{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/item/radio/intercom{ - dir = 8; - pixel_x = -28; - req_access = list() +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "inx" = ( /turf/simulated/wall/prepainted, /area/endeavour/hallway/d3starboardafthall) @@ -11877,6 +12535,10 @@ /obj/effect/floor_decal/corner/navblue/border, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) +"ipL" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "ipU" = ( /obj/structure/table/rack/shelf/steel, /obj/machinery/recharger/wallcharger{ @@ -12003,10 +12665,9 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "itn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "itv" = ( /obj/machinery/door/firedoor, @@ -12095,12 +12756,29 @@ "iyK" = ( /turf/simulated/wall/prepainted/security, /area/security/breakroom) +"izr" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "izO" = ( -/obj/machinery/camera/network/cargo{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1 }, -/obj/effect/floor_decal/industrial/hatch/yellow, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "iAo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -12288,14 +12966,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "iIq" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/computer/supplycomp/control{ - dir = 4 +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) "iIs" = ( /obj/effect/floor_decal/industrial/danger{ dir = 6 @@ -12333,8 +13009,10 @@ /obj/structure/disposalpipe/segment{ dir = 1 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, /area/maintenance/bar/lower) "iIU" = ( /obj/machinery/camera/network/civilian{ @@ -12381,19 +13059,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) +"iJC" = ( +/obj/machinery/light, +/turf/simulated/wall/prepainted, +/area/endeavour/station/stairs_three) "iJR" = ( -/obj/structure/table/reinforced, -/obj/item/hand_labeler, -/obj/item/stamp/cargo, -/obj/item/stamp/denied{ - pixel_x = 7 +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/obj/fiftyspawner/glass, -/obj/fiftyspawner/steel, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) "iKe" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -12554,20 +13233,27 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) -"iSP" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/structure/cable/green{ - icon_state = "4-8" +"iSL" = ( +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/structure/flora/grass/event/sunny_bush1, +/turf/simulated/floor/grass/indoors, +/area/quartermaster/foyer) +"iSP" = ( +/obj/machinery/computer/supplycomp/control{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) +"iTn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "iTp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12592,6 +13278,12 @@ }, /turf/simulated/floor/tiled/dark, /area/security/warden) +"iUL" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/space) "iVL" = ( /obj/machinery/recharge_station, /turf/simulated/floor/tiled/steel, @@ -12697,18 +13389,13 @@ /turf/simulated/floor/crystal, /area/endeavour/hallway/d3fwdhall) "jag" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/conveyor{ - tag = "mailroom"; - id = "DLBelt" - }, -/obj/structure/plasticflaps/mining{ - desc = "Heavy duty, airtight, plastic flaps." +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/power/apc/east_mount, +/obj/structure/cable/green{ + icon_state = "0-8" }, -/turf/simulated/floor/plating, -/area/quartermaster/delivery) +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "jaT" = ( /obj/machinery/holopad, /obj/structure/cable/green{ @@ -12738,6 +13425,15 @@ /obj/machinery/door/airlock/glass, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) +"jbh" = ( +/obj/machinery/sheet_silo{ + obj_persist_static_id = "sheet-silo-mining" + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 9 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "jbI" = ( /obj/machinery/light, /obj/structure/cable/orange{ @@ -12765,6 +13461,19 @@ /obj/item/pen, /turf/simulated/floor/tiled/monotile, /area/security/hallway) +"jcl" = ( +/obj/structure/closet, +/obj/item/storage/backpack/dufflebag, +/turf/simulated/floor/wood, +/area/quartermaster/qm) +"jdF" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "jdI" = ( /obj/machinery/camera/network/civilian{ dir = 8 @@ -12856,17 +13565,10 @@ /turf/simulated/floor/wood, /area/security/lobby) "jhH" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 4 - }, /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "jhI" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -13133,7 +13835,7 @@ /area/crew_quarters/sleep/Dorm_9) "jon" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, +/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "jou" = ( @@ -13193,15 +13895,21 @@ /turf/simulated/floor/crystal, /area/endeavour/hallway/d3fwdhall) "jrK" = ( -/obj/machinery/power/apc/west_mount, -/obj/structure/cable/green{ - icon_state = "2-4" +/obj/structure/table/hardwoodtable, +/obj/item/stamp/qm{ + pixel_x = -7; + pixel_y = -1 }, -/obj/structure/cable/green{ - icon_state = "0-4" +/obj/item/stamp/cargo{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/stamp/denied{ + pixel_x = 9; + pixel_y = 11 }, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "jrY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/borderfloorblack{ @@ -13217,15 +13925,38 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "jtk" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/effect/floor_decal/borderfloor{ + dir = 10 }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/foyer) +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/machinery/requests_console/preset/cargo{ + pixel_x = -31; + pixel_y = -1 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "jtn" = ( -/obj/machinery/vending/cigarette, +/obj/structure/table/rack/steel, +/obj/item/cartridge/quartermaster{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/cartridge/quartermaster{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/cartridge/quartermaster{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/cartridge/quartermaster{ + pixel_x = 6; + pixel_y = -5 + }, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "jtu" = ( /obj/structure/window/basic{ dir = 1 @@ -13242,9 +13973,11 @@ /turf/simulated/floor/carpet/purcarpet, /area/maintenance/dormitory) "juy" = ( -/obj/landmark/spawnpoint/job/quartermaster, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/machinery/mineral/input, +/obj/effect/floor_decal/industrial/loading, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "juB" = ( /obj/structure/closet/toolcloset, /obj/item/storage/toolbox/mechanical, @@ -13299,34 +14032,47 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "jwr" = ( -/obj/machinery/door/firedoor{ +/obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null +/obj/structure/table/wooden_reinforced, +/obj/machinery/microwave, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) +"jwx" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/holopad, +/obj/structure/cable/green{ + icon_state = "2-4" }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "jwQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/table/rack/shelf, +/obj/item/radio{ + pixel_x = 0; + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass{ - name = "Cargo Lobby" +/obj/item/radio{ + pixel_x = 6; + pixel_y = 7 }, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/item/radio{ + pixel_x = -6; + pixel_y = 7 + }, +/obj/random/toolbox{ + pixel_x = 0; + pixel_y = -5 }, /turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/area/quartermaster/belterdock) "jxH" = ( /turf/simulated/floor/tiled/dark, /area/security/riot_control) @@ -13371,17 +14117,18 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) "jzp" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" }, -/obj/effect/floor_decal/corner/brown/border{ +/obj/effect/floor_decal/borderfloorblack/corner{ dir = 4 }, -/obj/structure/disposalpipe/segment{ +/obj/effect/floor_decal/corner/brown/bordercorner{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "jzG" = ( /obj/machinery/vending/hydronutrients, /turf/simulated/floor/tiled/techfloor, @@ -13394,27 +14141,24 @@ /turf/simulated/floor/tiled/steel, /area/shuttle/mining_ship/general) "jAe" = ( -/obj/structure/cable/green{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "jAj" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, /turf/simulated/floor/carpet, /area/security/detectives_office) "jAA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/camera/network/cargo{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/fire_alarm/east_mount, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "jAH" = ( /obj/structure/poster{ pixel_x = 32 @@ -13423,15 +14167,15 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar/lounge) "jBe" = ( -/obj/machinery/suit_cycler/mining, -/obj/effect/floor_decal/borderfloor{ - dir = 10 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "jBD" = ( /obj/structure/table/marble, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -13441,10 +14185,20 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "jCu" = ( -/obj/machinery/light{ +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/endeavour/surfacebase/mining_main/break_room) "jCV" = ( /obj/structure/window/basic{ @@ -13497,13 +14251,12 @@ /turf/simulated/wall/prepainted, /area/security/nuke_storage) "jEc" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/bed/chair/comfy/black{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/foyer) "jEn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13512,15 +14265,12 @@ /turf/simulated/floor/tiled, /area/hydroponics) "jEN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/mining{ - id_tag = "cargodoor"; - name = "Cargo Office"; - req_one_access = list() +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/air_alarm{ + pixel_y = 22 }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "jFV" = ( /obj/machinery/computer/guestpass{ dir = 1; @@ -13540,6 +14290,19 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) +"jGc" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/fire_alarm/north_mount, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "jGe" = ( /turf/space/basic, /area/endeavour/command/turrets) @@ -13679,17 +14442,15 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_4) -"jLr" = ( -/turf/simulated/wall/r_wall, -/area/crew_quarters/bar/lounge) "jLH" = ( -/obj/structure/table/bench/padded, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ +/obj/map_helper/access_helper/airlock/station/supply/maintenance, +/obj/structure/catwalk, +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment{ dir = 1 }, -/obj/landmark/spawnpoint/job/shaft_miner, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) "jLP" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -13704,7 +14465,7 @@ req_one_access = null }, /obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "jMc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13777,31 +14538,31 @@ /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3fwdhall) "jON" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/lattice, +/obj/structure/grille, +/turf/simulated/floor/airless/ceiling, +/area/space) "jPe" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/floor_decal/borderfloor/corner2{ +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) +"jPs" = ( +/obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/effect/floor_decal/corner/brown/bordercorner2{ +/obj/effect/floor_decal/corner/brown/border{ dir = 1 }, -/obj/structure/table/standard, -/obj/item/packageWrap, -/obj/item/packageWrap, -/obj/item/packageWrap, -/obj/item/destTagger, -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled/steel, -/area/quartermaster/delivery) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "jQE" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 @@ -13856,17 +14617,14 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "jSX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 5 }, -/obj/structure/cable/green{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "jTc" = ( /obj/structure/cable/green{ icon_state = "0-8" @@ -13999,16 +14757,21 @@ /turf/simulated/wall/r_wall/prepainted/security, /area/security/warden) "jYU" = ( -/obj/machinery/light{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/bed/chair/sofa/black/left{ + dir = 1 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "jYY" = ( /obj/machinery/gear_painter, /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "jZc" = ( +/obj/machinery/fire_alarm/south_mount{ + pixel_y = -24 + }, /obj/machinery/light, /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navgold/border, @@ -14022,11 +14785,9 @@ /turf/simulated/wall/prepainted/civilian, /area/crew_quarters/game_room) "kad" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, +/obj/machinery/air_alarm/west_mount, /turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/area/quartermaster/belterdock) "kam" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, /turf/simulated/floor/tiled/white, @@ -14118,7 +14879,13 @@ id_tag = "cargo_bay"; pixel_x = 28 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "kde" = ( /obj/machinery/media/jukebox, @@ -14295,6 +15062,14 @@ "kiu" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/security/breakroom) +"kiP" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "kiR" = ( /obj/structure/table/standard, /obj/item/storage/box/cups, @@ -14405,6 +15180,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/crew_quarters/fitness) +"kow" = ( +/obj/machinery/mineral/input, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "koL" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -14430,11 +15212,14 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/interrogation) "kpn" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "kps" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -14483,8 +15268,13 @@ /area/security/hallway) "ksT" = ( /obj/machinery/disposal, +/obj/effect/floor_decal/industrial/warning/full, /obj/structure/disposalpipe/trunk, +/obj/machinery/light{ + dir = 1 + }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, +/obj/item/barrier_tape_segment/engineering, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "ksW" = ( @@ -14508,14 +15298,10 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "kur" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/spline/plain, +/obj/structure/flora/grass/event/purple_flowers1, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "kuG" = ( /obj/landmark/spawnpoint/latejoin/station/cryogenics, /obj/machinery/atmospherics/component/unary/vent_pump/on{ @@ -14551,12 +15337,27 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "kwo" = ( -/obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/structure/window/reinforced{ +/obj/machinery/door/window{ + dir = 8; + req_one_access = list(31) + }, +/obj/item/paper_bin{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/door/firedoor{ dir = 8 }, -/turf/simulated/floor/tiled/monotile, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "kwF" = ( /obj/structure/stairs/spawner/north{ @@ -14566,16 +15367,10 @@ /turf/simulated/floor/tiled/dark, /area/endeavour/station/stairs_three) "kxv" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/structure/cable/green{ - icon_state = "1-8" +/obj/effect/floor_decal/industrial/hatch{ + color = "#AF0000" }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/warehouse) "kxI" = ( /obj/effect/floor_decal/industrial/outline/yellow, @@ -14631,6 +15426,11 @@ /obj/effect/floor_decal/corner/navgold/border, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) +"kBv" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/ore_box, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "kBD" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -14749,6 +15549,13 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) +"kDo" = ( +/obj/machinery/vending/nifsoft_shop, +/obj/machinery/camera/network/cargo{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "kDu" = ( /obj/structure/disposalpipe/segment{ dir = 8 @@ -14766,15 +15573,22 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/fitness) -"kDM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +"kDx" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/railing{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) +"kDM" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/obj/structure/flora/grass/event/sparse_grass2, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "kEf" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 10 @@ -14799,8 +15613,13 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/map_helper/access_helper/airlock/station/maintenance, +/obj/structure/catwalk, +/obj/structure/cable/green{ + icon_state = "4-8" + }, /turf/simulated/floor/plating, -/area/endeavour/station/stairs_three) +/area/maintenance/bar/lower) "kEF" = ( /obj/machinery/light{ dir = 1 @@ -14813,6 +15632,24 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardafthall) +"kGf" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/bordercorner2{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d3portforhall) "kGS" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navgold/border, @@ -14889,15 +15726,13 @@ /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "kKO" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "kKQ" = ( /obj/machinery/door/firedoor{ dir = 8 @@ -14980,7 +15815,7 @@ dir = 4; name = "\improper Titan Class Fighter" }, -/turf/simulated/floor/reinforced/overhang, +/turf/simulated/floor/reinforced, /area/maintenance/bar/catwalk) "kOc" = ( /obj/structure/cable/green{ @@ -14991,14 +15826,31 @@ /turf/simulated/floor/wood, /area/maintenance/dormitory) "kOw" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/item/hand_labeler{ + pixel_x = 0; + pixel_y = 8 + }, +/obj/item/hand_labeler{ + pixel_x = 0; + pixel_y = 5 + }, +/obj/item/hand_labeler{ + pixel_x = 0; + pixel_y = 2 + }, +/obj/item/hand_labeler{ + pixel_x = 0; + pixel_y = -1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "kPK" = ( /obj/machinery/door/blast/regular{ name = "Fighter Hanger Blast Door"; @@ -15020,13 +15872,14 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "kPT" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/bed/chair{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/bed/chair/sofa/black{ + dir = 1 }, -/turf/simulated/floor/carpet/sblucarpet, +/obj/machinery/air_alarm/south_mount, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "kQn" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -15039,6 +15892,10 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) +"kQS" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "kRb" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -15064,19 +15921,11 @@ /turf/simulated/floor/airless, /area/shuttle/mining_ship/general) "kRu" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad2" - }, -/obj/machinery/status_display/supply_display{ - mode = 99; - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/closet/secure_closet/miner, +/obj/item/binoculars, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "kRM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -15158,13 +16007,10 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardafthall) "kTN" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 1 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "kUz" = ( /obj/machinery/door/firedoor/glass, @@ -15199,15 +16045,13 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "kWu" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "kWJ" = ( /obj/structure/table/woodentable, /obj/item/storage/box/donkpockets, @@ -15231,11 +16075,15 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "kXD" = ( -/obj/machinery/light/small{ +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ dir = 8 }, -/turf/simulated/floor/plating, -/area/maintenance/cargo) +/obj/structure/flora/grass/event/sparse_grass2, +/turf/simulated/floor/grass, +/area/quartermaster/foyer) "kXK" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -15252,19 +16100,11 @@ /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "kYu" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/item/radio/beacon/anchored, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/structure/lattice, +/obj/structure/lattice, +/obj/structure/grille, +/turf/simulated/floor/airless/ceiling, +/area/space) "kYx" = ( /obj/structure/cable/orange{ icon_state = "4-8" @@ -15293,8 +16133,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/game_room) "kZu" = ( -/obj/machinery/vending/coffee, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/light, +/turf/simulated/floor/tiled, /area/endeavour/surfacebase/mining_main/break_room) "kZA" = ( /obj/effect/floor_decal/corner/green/full{ @@ -15323,9 +16165,22 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardafthall) "lag" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/embedded_controller/radio/simple_docking_controller{ + frequency = 1380; + id_tag = "belter_docking"; + name = "Belting Dock Controller"; + pixel_x = 1; + pixel_y = -24; + req_one_access = list(13,31) + }, +/obj/structure/table/reinforced, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/obj/item/tank/jetpack/oxygen, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "laD" = ( /obj/structure/cable{ icon_state = "4-8" @@ -15341,8 +16196,16 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "laQ" = ( -/obj/structure/sign/department/cargo_dock, -/turf/simulated/wall/prepainted/cargo, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -26 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "lbQ" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, @@ -15391,20 +16254,30 @@ /turf/simulated/floor/tiled, /area/hydroponics) "ldm" = ( -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/quartermaster/office) +"ldo" = ( +/obj/structure/cable/green{ + icon_state = "2-8" }, -/obj/structure/closet/crate/bin{ - anchored = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) -"ldo" = ( -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) "ldK" = ( -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "len" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -15421,9 +16294,13 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "leF" = ( -/obj/machinery/vending/weeb, +/obj/machinery/air_alarm/east_mount, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/area/quartermaster/qm) "leL" = ( /obj/structure/disposalpipe/segment{ dir = 8 @@ -15451,10 +16328,12 @@ /turf/simulated/floor/tiled/old_cargo/white, /area/security/forensics) "lfJ" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "lfS" = ( /obj/machinery/light{ @@ -15488,16 +16367,21 @@ /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) "lgM" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/machinery/door/airlock/maintenance/common, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/window/reinforced, +/obj/machinery/door/window{ + dir = 4; + req_one_access = list(31) }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotechmaint, +/area/quartermaster/belterdock/refinery) "lgT" = ( /obj/structure/table/marble, /obj/machinery/door/blast/shutters{ @@ -15540,6 +16424,9 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/station_map{ + pixel_y = 32 + }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, @@ -15590,9 +16477,11 @@ /area/endeavour/hallway/d3portforhall) "lkP" = ( /obj/structure/cable/green{ - icon_state = "1-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "lly" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, @@ -15612,16 +16501,17 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3fwdmaint) "lmr" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/obj/structure/table/reinforced, +/obj/item/storage/firstaid/regular{ + pixel_x = 0; + pixel_y = 8 }, -/obj/map_helper/access_helper/airlock/station/mining_operations, -/obj/machinery/door/airlock/glass/mining{ - name = "Magmatic Rift Leap Pad"; - req_one_access = null +/obj/item/storage/firstaid/fire{ + pixel_x = 0; + pixel_y = 3 }, /turf/simulated/floor/tiled, -/area/quartermaster/office) +/area/quartermaster/belterdock) "lmD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -15639,13 +16529,11 @@ /turf/simulated/floor/tiled/techfloor, /area/security/lobby) "lnj" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "lnp" = ( /obj/structure/cable{ icon_state = "1-4" @@ -15733,8 +16621,11 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "lqE" = ( -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) "lqW" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 10 @@ -15897,15 +16788,15 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "lwA" = ( -/obj/machinery/power/apc/north_mount, -/obj/structure/cable/green{ - icon_state = "0-2" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 8 +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/obj/machinery/camera/network/cargo, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "lwL" = ( /obj/machinery/door/window/brigdoor/southleft{ dir = 4; @@ -15971,9 +16862,21 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) "lye" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, /turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/area/endeavour/hallway/d3portforhall) "lyz" = ( /obj/structure/table/rack{ dir = 8; @@ -16019,15 +16922,11 @@ /area/crew_quarters/fitness) "lAm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/corner/navblue/border{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "lAo" = ( /obj/effect/floor_decal/borderfloorblack, @@ -16038,6 +16937,16 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"lAL" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "lCj" = ( /obj/structure/table/woodentable, /obj/machinery/chemical_dispenser/catering/bar_soft{ @@ -16046,22 +16955,17 @@ /turf/simulated/floor/wood, /area/security/breakroom) "lCC" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/requests_console/preset/cargo{ - pixel_x = 30 +/obj/structure/bed/chair/wood{ + dir = 8 }, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "belter_docking"; - name = "Belting Dock Controller"; - pixel_x = 24; - pixel_y = 30; - req_one_access = list(13,31) +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "lCJ" = ( /obj/structure/disposalpipe/segment{ dir = 8 @@ -16178,17 +17082,26 @@ /turf/simulated/wall/prepainted, /area/crew_quarters/bar/lounge) "lEM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "lEY" = ( /turf/simulated/wall/r_wall/prepainted/engineering, /area/endeavour/hallway/d3aftmaint) +"lGM" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/flora/grass/event/generic_bush1, +/turf/simulated/floor/grass, +/area/quartermaster/foyer) "lGQ" = ( /turf/simulated/floor/tiled/techmaint, /area/security/brig) @@ -16215,6 +17128,11 @@ /obj/structure/lattice, /turf/space, /area/space) +"lIA" = ( +/obj/landmark/spawnpoint/job/quartermaster, +/obj/machinery/light, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "lIO" = ( /turf/simulated/floor/plating, /area/security/hanger) @@ -16225,6 +17143,9 @@ "lIR" = ( /obj/structure/catwalk, /obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "lIV" = ( @@ -16272,31 +17193,25 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "lKt" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/obj/machinery/power/apc/north_mount, -/obj/structure/cable/green{ - icon_state = "0-2" +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" }, -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/closet/crate/plastic, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "lKA" = ( /turf/simulated/wall/r_wall/prepainted/engineering, /area/security/forensics) "lKH" = ( -/obj/machinery/mineral/input, -/obj/machinery/conveyor{ - dir = 4; - id = "mining_interior" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black/left, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "lKR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16335,22 +17250,13 @@ /turf/simulated/floor/carpet/bcarpet, /area/tether/surfacebase/entertainment) "lNT" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/catwalk, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/maintenance/bar/catwalk) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "lNU" = ( /obj/structure/table/gamblingtable, /obj/item/deck/cards, @@ -16407,11 +17313,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "lQq" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "lQs" = ( /obj/structure/table/woodentable, /obj/item/storage/box/glasses/meta, @@ -16424,10 +17331,13 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) -"lRx" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 9 +"lRw" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 8 }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) +"lRx" = ( /obj/structure/sign/warning/moving_parts{ pixel_y = 32 }, @@ -16435,7 +17345,10 @@ tag = "mailroom"; id = "DLBelt" }, -/turf/simulated/floor/tiled/steel_grid, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "lRP" = ( /obj/structure/cable/green{ @@ -16542,6 +17455,18 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"lUu" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/structure/bed/chair/sofa/black/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "lUH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16671,15 +17596,20 @@ /turf/simulated/floor/plating, /area/security/lobby) "lXM" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 }, -/obj/machinery/light_switch{ - pixel_x = -26; - pixel_y = -4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "lYm" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -16695,7 +17625,6 @@ /area/crew_quarters/sleep/Dorm_6) "lYO" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint/beastybrown, /turf/simulated/floor/tiled/steel/airless, /area/shuttle/belter) "lZO" = ( @@ -16744,12 +17673,12 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_5) "mbv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/landmark/spawnpoint/job/cargo_technician, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/landmark/spawnpoint/job/shaft_miner, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "mbJ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -16804,19 +17733,17 @@ /turf/simulated/floor/tiled, /area/security/lobby) "mff" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor{ +/obj/machinery/light{ dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Bay"; - req_one_access = null +/obj/effect/floor_decal/borderfloor{ + dir = 10 }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "mfm" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark, @@ -16870,14 +17797,10 @@ /turf/simulated/floor/tiled/dark, /area/security/hallwayaux) "mhO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Cargo Lobby" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "mhY" = ( /turf/simulated/wall/prepainted, @@ -16890,11 +17813,23 @@ /turf/simulated/floor/tiled/old_cargo/white, /area/security/forensics) "mii" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/structure/cable/green{ + icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "miu" = ( /obj/effect/floor_decal/spline/fancy/wood/corner, /turf/simulated/floor/wood, @@ -16956,10 +17891,14 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_11) "mjB" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "mkn" = ( /obj/structure/cable/green{ @@ -17024,20 +17963,15 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "mlk" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 +/obj/structure/cable/green{ + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Airlock"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "mll" = ( /obj/machinery/light{ @@ -17094,6 +18028,12 @@ }, /turf/simulated/floor/tiled/old_tile/gray, /area/security/range) +"mmw" = ( +/obj/machinery/camera/network/cargo{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "mmZ" = ( /obj/machinery/appliance/mixer/cereal, /obj/effect/floor_decal/corner_oldtile/white/diagonal, @@ -17150,34 +18090,43 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "moz" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "mining_interior" - }, -/obj/machinery/camera/network/cargo, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) -"moE" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, /obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black/right, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"moE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ dir = 8 }, /obj/structure/cable/green{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/area/endeavour/hallway/d3afthall) "mpt" = ( -/obj/landmark/spawnpoint/job/cargo_technician, -/obj/machinery/camera/network/cargo{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/power/apc/south_mount, +/obj/structure/cable/green{ + icon_state = "0-8" }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "mpy" = ( /obj/machinery/door/firedoor, @@ -17352,11 +18301,34 @@ /turf/simulated/floor/tiled/monotile, /area/endeavour/hallway/d3afthall) "mwk" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/item/storage/box/nifsofts_mining{ + pixel_x = -3; + pixel_y = 0 }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/item/suit_cooling_unit{ + pixel_x = -4; + pixel_y = 0 + }, +/obj/item/suit_cooling_unit{ + pixel_x = -4; + pixel_y = 0 + }, +/obj/item/duct_tape_roll{ + pixel_x = -4; + pixel_y = 0 + }, +/obj/structure/table/reinforced, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/stack/flag/green{ + pixel_x = 7; + pixel_y = 1 + }, +/obj/item/stack/flag/green{ + pixel_x = 7; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "mwA" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -17431,9 +18403,8 @@ /turf/simulated/floor/wood, /area/endeavour/surfacebase/bar_backroom) "mzJ" = ( -/obj/machinery/light, /turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/area/maintenance/bar/lower) "mAl" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -17520,16 +18491,23 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "mEb" = ( -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, -/turf/simulated/floor/plating, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/mineral/equipment_vendor, +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "mEG" = ( /obj/structure/bed/chair/office/dark{ dir = 8 }, /turf/simulated/floor/carpet, /area/security/detectives_office) +"mFW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "mGq" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -17604,10 +18582,20 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/cargo) +"mIN" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "mIP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, +/turf/simulated/floor/plating, +/area/quartermaster/belterdock) "mJs" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 @@ -17615,11 +18603,25 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) "mJv" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) +"mJK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "mKJ" = ( -/turf/simulated/wall/prepainted/cargo, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "mKK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -17679,8 +18681,9 @@ /turf/simulated/floor/reinforced, /area/quartermaster/miningdock) "mLm" = ( -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "mLw" = ( /obj/structure/cable{ icon_state = "4-8" @@ -17800,7 +18803,12 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "mVn" = ( -/turf/simulated/wall/prepainted/cargo, +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plating, /area/maintenance/bar/catwalk) "mVA" = ( /obj/effect/floor_decal/borderfloorblack/corner{ @@ -17984,19 +18992,28 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "mYS" = ( +/obj/map_helper/access_helper/airlock/station/head_office/quartermaster, /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/mining, /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/mining{ + name = "Quartermaster"; + req_one_access = list() + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "mZI" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ @@ -18033,12 +19050,32 @@ }, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/hanger) +"naI" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/railing, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/lower/trash_pit) "nbL" = ( /turf/simulated/floor/airless, /area/space) "nbW" = ( /obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + use_power = 0 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "ncH" = ( /obj/structure/table/steel, @@ -18083,8 +19120,17 @@ /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) "ncP" = ( -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "ncY" = ( /obj/structure/sign/warning/secure_area, @@ -18116,7 +19162,13 @@ name = "Station Intercom (General)"; pixel_y = 26 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "neq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18145,10 +19197,18 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "nfA" = ( -/obj/structure/closet/crate/trashcart, -/obj/random/maintenance/engineering, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "nfG" = ( /obj/structure/cable{ icon_state = "4-8" @@ -18211,6 +19271,26 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_4) +"nin" = ( +/obj/machinery/power/apc/north_mount, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/obj/machinery/camera/network/cargo, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "niA" = ( /obj/structure/cable/green{ icon_state = "0-8" @@ -18280,17 +19360,10 @@ /turf/simulated/floor/tiled/dark, /area/janitor) "nkT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/structure/cable/green{ + icon_state = "4-8" }, -/turf/simulated/floor/carpet/sblucarpet, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "nkY" = ( /obj/structure/cable/green{ @@ -18302,6 +19375,16 @@ /obj/machinery/atmospherics/component/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) +"nme" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Foyer" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "nmv" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -18337,11 +19420,14 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "noi" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, /obj/machinery/door/firedoor, -/obj/map_helper/access_helper/airlock/station/service/kitchen, -/obj/machinery/door/airlock/civilian{ +/obj/machinery/door/airlock{ name = "Kitchen" }, +/obj/map_helper/access_helper/airlock/station/service/kitchen, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "noB" = ( @@ -18370,8 +19456,20 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "noW" = ( -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/office) +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "noY" = ( /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) @@ -18412,15 +19510,11 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "npS" = ( -/obj/machinery/fire_alarm/west_mount{ - pixel_x = -26 - }, -/obj/structure/table/standard, -/obj/machinery/photocopier/faxmachine{ - department = "Quartermaster-Office" +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "nqm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -18448,22 +19542,40 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "nrZ" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/structure/table/steel_reinforced, +/obj/item/duct_tape_roll{ + pixel_x = -8; + pixel_y = 5 }, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 8 +/obj/item/stamp/cargo{ + pixel_x = 7; + pixel_y = 8 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/item/stamp/denied{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/item/duct_tape_roll{ + pixel_x = -8; + pixel_y = -4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "nsH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled/monotile, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "nta" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18566,9 +19678,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardafthall) "nxz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/maintenance/lower/trash_pit) "nxT" = ( /obj/machinery/camera/network/civilian{ dir = 4 @@ -18576,8 +19687,14 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "nyi" = ( -/turf/simulated/wall/prepainted/cargo, -/area/quartermaster/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "nyw" = ( /obj/machinery/light_switch{ pixel_y = -23 @@ -18605,17 +19722,8 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) "nzA" = ( -/obj/machinery/air_alarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/large, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/turf/simulated/floor/wood, +/area/quartermaster/office) "nAJ" = ( /obj/structure/window/reinforced{ dir = 8 @@ -18623,10 +19731,12 @@ /turf/simulated/floor/water/deep/indoors, /area/crew_quarters/sleep/bedrooms) "nAS" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/vacant/vacant_shop) +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "nBf" = ( /obj/structure/closet/wardrobe, /turf/simulated/floor/wood, @@ -18722,20 +19832,9 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardamidhall) "nDz" = ( -/obj/structure/table/reinforced, -/obj/item/storage/firstaid/fire{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/storage/firstaid{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, -/area/quartermaster/office) +/area/endeavour/surfacebase/mining_main/break_room) "nEe" = ( /obj/machinery/light/small, /turf/simulated/floor/plating, @@ -18756,12 +19855,9 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) "nFa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/landmark/spawnpoint/job/cargo_technician, +/turf/simulated/floor/wood, +/area/quartermaster/office) "nFD" = ( /obj/structure/closet/wardrobe, /obj/machinery/newscaster{ @@ -18869,6 +19965,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navblue/bordercorner2{ + dir = 4 + }, +/obj/machinery/fire_alarm/north_mount, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) "nJE" = ( @@ -18886,18 +19989,30 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area_hallway) +"nJF" = ( +/obj/machinery/computer/supplycomp/control, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "nJT" = ( /obj/structure/filingcabinet, /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) "nKd" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/dogbed, -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 +/obj/machinery/computer/supplycomp, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "nKw" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -31 @@ -19157,11 +20272,17 @@ /obj/machinery/door/firedoor{ dir = 8 }, +/obj/map_helper/access_helper/airlock/station/external_airlock, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, /obj/machinery/door/airlock/glass_external{ req_one_access = null }, -/obj/map_helper/access_helper/airlock/station/external_airlock, -/turf/simulated/floor/tiled, +/turf/simulated/floor/reinforced, /area/quartermaster/warehouse) "nRt" = ( /obj/effect/floor_decal/corner_steel_grid/diagonal, @@ -19334,6 +20455,10 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) +"nVg" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "nVo" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 @@ -19341,21 +20466,13 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) "nVC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "nVP" = ( /obj/effect/floor_decal/spline/plain{ dir = 8 @@ -19363,12 +20480,21 @@ /obj/machinery/vending/cigarette, /turf/simulated/floor/tiled/dark, /area/crew_quarters/recreation_area) +"nWc" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/stool/padded{ + pixel_x = 0; + pixel_y = 13 + }, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "nWj" = ( -/obj/machinery/computer/security/mining{ - dir = 4 +/obj/machinery/computer/roguezones{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "nWz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -19401,11 +20527,15 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/sleep/Dorm_9) "nYH" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/mineral/unloading_machine, +/obj/structure/window/reinforced{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "nYR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -19820,15 +20950,9 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "omy" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/obj/item/radio/intercom{ - dir = 8; - pixel_x = -28; - req_access = list() - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/wood, +/area/quartermaster/office) "onm" = ( /turf/simulated/floor/tiled/dark, /area/security/hallway) @@ -19838,10 +20962,19 @@ /area/hydroponics) "onr" = ( /obj/structure/cable/green{ - icon_state = "2-8" + icon_state = "4-8" }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/flipped{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "onZ" = ( /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plating, @@ -19921,9 +21054,6 @@ /obj/item/packageWrap, /obj/machinery/camera/network/civilian, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/light{ - dir = 1 - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "opZ" = ( @@ -19967,14 +21097,17 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "orm" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 6 +/obj/structure/cable/green{ + icon_state = "4-8" }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) "orr" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lime/border, @@ -19998,11 +21131,13 @@ /turf/simulated/wall/prepainted/security, /area/security/brig) "osx" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -31 +/obj/machinery/conveyor{ + dir = 8; + id = "mining_interior" }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/mineral/input, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "osL" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -20023,6 +21158,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"otl" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "otM" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/effect/floor_decal/spline/plain, @@ -20069,11 +21217,12 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "ouS" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad" +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad2"; + pixel_x = 11; + pixel_y = 21 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "ova" = ( /obj/effect/floor_decal/borderfloorblack{ @@ -20238,10 +21387,14 @@ /turf/simulated/floor/wood, /area/maintenance/dormitory) "oyU" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "oyZ" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 @@ -20362,6 +21515,13 @@ }, /turf/simulated/floor/tiled/dark, /area/prison/cell_block) +"oDU" = ( +/obj/machinery/air_alarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "oDX" = ( /obj/item/radio/intercom{ dir = 1; @@ -20442,9 +21602,8 @@ /area/crew_quarters/bar) "oFO" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, -/obj/effect/mine/dnascramble, -/turf/simulated/floor/plating, +/obj/effect/paint/beastybrown, +/turf/simulated/floor/airless/ceiling, /area/quartermaster/warehouse) "oGe" = ( /obj/machinery/air_alarm{ @@ -20495,6 +21654,19 @@ /obj/machinery/fire_alarm/east_mount, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/interrogation) +"oGT" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "oHM" = ( /obj/machinery/appliance/mixer/candy, /obj/effect/floor_decal/corner_oldtile/white/diagonal, @@ -20580,11 +21752,8 @@ /turf/simulated/floor/carpet, /area/crew_quarters/sleep/Dorm_10) "oMq" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "oNp" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -20607,17 +21776,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "oNw" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/area/quartermaster/belterdock) "oNx" = ( /obj/effect/floor_decal/corner_steel_grid{ dir = 1 @@ -20688,9 +21848,10 @@ /turf/simulated/floor/tiled/dark, /area/security/brig) "oOy" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/obj/structure/dispenser/oxygen, +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/floor/tiled/monotechmaint, +/area/quartermaster/belterdock/refinery) "oOG" = ( /obj/machinery/power/apc/west_mount, /obj/structure/cable/green{ @@ -20699,16 +21860,21 @@ /turf/simulated/floor/wood, /area/crew_quarters/game_room) "oOI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/mining{ - req_one_access = null +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 }, -/obj/map_helper/access_helper/airlock/station/head_office/quartermaster, -/turf/simulated/floor/plating, -/area/quartermaster/qm) +/obj/effect/floor_decal/corner/brown/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "oOV" = ( -/turf/simulated/wall/prepainted/cargo, -/area/endeavour/surfacebase/mining_main/uxstorage) +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" + }, +/obj/structure/closet/crate/large, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "oPq" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 6 @@ -20772,6 +21938,19 @@ /obj/structure/closet/wardrobe, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_4) +"oUd" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 + }, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/borderfloor/corner2, +/obj/effect/floor_decal/corner/brown/bordercorner2, +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "oUr" = ( /obj/machinery/power/sensor{ name = "Powernet Sensor - Solar Farm Input"; @@ -20822,19 +22001,9 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "oWf" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/break_room) +/obj/machinery/computer/security/mining, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "oWG" = ( /obj/machinery/door/airlock/multi_tile/glass{ name = "Crew Quarters" @@ -20849,20 +22018,9 @@ /turf/simulated/floor/tiled, /area/security/hanger) "oXi" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/obj/effect/floor_decal/corner/navblue/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloorblack/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/navblue/bordercorner2{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/machinery/mineral/processing_unit, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "oXu" = ( /obj/structure/cable/orange{ icon_state = "1-2" @@ -20871,14 +22029,19 @@ /area/crew_quarters/sleep/bedrooms) "oXV" = ( /obj/structure/cable/green{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood, /area/quartermaster/office) "oYh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -20892,15 +22055,12 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) "oYC" = ( -/obj/machinery/camera/network/cargo{ - dir = 4 - }, -/obj/structure/closet/hydrant{ - pixel_x = -32 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/structure/closet/crate, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "oYK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -21014,12 +22174,6 @@ /obj/structure/sign/department/mail{ pixel_x = -32 }, -/obj/effect/floor_decal/borderfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 10 - }, /obj/structure/table/standard, /obj/item/packageWrap, /obj/item/packageWrap, @@ -21029,40 +22183,19 @@ dir = 1; pixel_y = -24 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/bordercorner2{ - dir = 8 - }, /obj/machinery/camera/network/cargo{ dir = 4 }, /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "pdT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 26 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "ped" = ( /obj/landmark/observer_spawn, /obj/effect/floor_decal/spline/fancy/wood, @@ -21092,19 +22225,18 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "pfu" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/structure/table/steel_reinforced, +/obj/item/storage/firstaid/regular{ + pixel_x = 0; + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null +/obj/item/storage/firstaid/fire{ + pixel_x = 0; + pixel_y = 3 }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "pfH" = ( /obj/structure/table/steel_reinforced, /obj/machinery/cell_charger, @@ -21193,6 +22325,18 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"phB" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "phI" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -21255,12 +22399,9 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "pjE" = ( -/obj/machinery/air_alarm{ - dir = 4; - pixel_x = -23 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "pjF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -21333,6 +22474,12 @@ "pkT" = ( /turf/simulated/wall/r_wall/prepainted/engineering, /area/security/detectives_office) +"pkU" = ( +/obj/structure/sign/directions/evac{ + dir = 8 + }, +/turf/simulated/wall/prepainted/civilian, +/area/crew_quarters/kitchen) "pkW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -21385,8 +22532,9 @@ /turf/simulated/floor/wood, /area/security/breakroom) "pmy" = ( -/turf/simulated/wall/prepainted, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "pmM" = ( /obj/item/bedsheet/bluedouble, /obj/structure/bed/double/padded, @@ -21446,10 +22594,13 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardafthall) "poa" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "poe" = ( /obj/effect/shuttle_landmark{ @@ -21494,16 +22645,17 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "pqk" = ( -/obj/machinery/door/firedoor{ - dir = 8 +/obj/effect/floor_decal/spline/fancy/wood, +/obj/structure/table/wooden_reinforced, +/obj/machinery/chemical_dispenser/catering/bar_soft{ + dir = 1 }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null +/obj/item/storage/box/glasses/square{ + pixel_x = -25; + pixel_y = 6 }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "pqE" = ( /obj/machinery/vending/hydroseeds, /obj/effect/floor_decal/corner/green{ @@ -21579,6 +22731,39 @@ }, /turf/simulated/floor/tiled, /area/hydroponics) +"prv" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/navblue/bordercorner2{ + dir = 4 + }, +/obj/structure/sign/department/cargo{ + pixel_x = 0; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d3portforhall) +"prw" = ( +/obj/machinery/mineral/output, +/obj/machinery/light{ + dir = 4; + use_power = 0 + }, +/obj/machinery/conveyor{ + id = "mining_interior" + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "prZ" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -21595,21 +22780,21 @@ /obj/machinery/light, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3afthall) -"ptR" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +"ptj" = ( +/obj/machinery/air_alarm{ + pixel_y = 22 }, -/obj/structure/cable/green{ - icon_state = "1-4" +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) +"ptR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "puw" = ( /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 4 @@ -21624,12 +22809,11 @@ /turf/simulated/floor/carpet/tealcarpet, /area/crew_quarters/sleep/Dorm_8) "puP" = ( -/obj/structure/plasticflaps/mining, -/obj/machinery/conveyor{ - id = "mining_interior" +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/tiled, +/area/maintenance/bar/lower) "puT" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass/security{ @@ -21648,6 +22832,18 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/soda, /turf/simulated/floor/tiled/monotile, /area/security/brig) +"pvB" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/structure/bed/chair/sofa/black/right{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "pvX" = ( /obj/effect/floor_decal/corner/green{ dir = 6 @@ -21703,25 +22899,30 @@ /turf/simulated/floor/carpet/purcarpet, /area/crew_quarters/heads/hos) "pyb" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/fiftyspawner/tritium, +/obj/fiftyspawner/tritium, +/obj/fiftyspawner/tritium, +/obj/fiftyspawner/tritium, +/obj/fiftyspawner/tritium, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) +"pyh" = ( +/obj/effect/floor_decal/borderfloorblack{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/corner/brown/border{ dir = 4 }, -/obj/machinery/door/airlock/mining{ - name = "Quartermaster"; - req_one_access = list() +/obj/structure/bed/chair/comfy/brown{ + dir = 8 }, -/obj/map_helper/access_helper/airlock/station/head_office/quartermaster, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "pyZ" = ( /obj/structure/cable/green{ icon_state = "2-4" @@ -21747,13 +22948,9 @@ /turf/simulated/floor/plating, /area/security/detectives_office) "pzs" = ( -/obj/machinery/hyperpad/centre{ - map_pad_id = "lavaland_station"; - map_pad_link_id = "lavaland_away"; - newcolor = "#fcba03" - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/office) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "pAC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -21785,26 +22982,42 @@ /turf/simulated/wall/r_wall/prepainted, /area/maintenance/dormitory) "pDb" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window{ - dir = 1; - req_one_access = list(31) +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/window/reinforced{ +/obj/effect/floor_decal/borderfloorblack{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "pDe" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/security/riot_control) "pDn" = ( -/obj/structure/cable/green{ - icon_state = "1-4" +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 }, +/obj/machinery/vending/coffee, /turf/simulated/floor/wood, /area/endeavour/surfacebase/mining_main/break_room) +"pDx" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/monotile, +/area/endeavour/surfacebase/mining_main/break_room) "pDN" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/security{ @@ -21911,9 +23124,6 @@ pixel_y = 16 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/light{ - dir = 1 - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "pFW" = ( @@ -21950,23 +23160,9 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) "pHB" = ( -/obj/machinery/air_alarm{ - pixel_y = 22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "pIT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -22003,10 +23199,17 @@ /turf/simulated/floor/plating, /area/maintenance/substation/cargo) "pJe" = ( -/obj/structure/table/bench/padded, -/obj/landmark/spawnpoint/job/shaft_miner, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "pJi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -22021,13 +23224,24 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "pJR" = ( -/obj/machinery/computer/supplycomp/control{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "pKe" = ( /obj/structure/disposalpipe/segment{ dir = 8 @@ -22113,6 +23327,10 @@ }, /turf/simulated/floor/grass, /area/security/brig) +"pOu" = ( +/obj/landmark/spawnpoint/job/shaft_miner, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "pOv" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -22120,10 +23338,10 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) "pOK" = ( -/obj/machinery/mineral/input, -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "pON" = ( /obj/machinery/floodlight, /turf/simulated/floor/plating, @@ -22156,10 +23374,9 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "pQh" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/plastic, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "pQv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -22277,6 +23494,21 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/civilian) +"pUj" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/black{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "pUu" = ( /obj/machinery/light{ dir = 4 @@ -22312,13 +23544,9 @@ icon_state = "1-2" }, /obj/structure/cable/green{ - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" + icon_state = "2-4" }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "pWD" = ( /obj/structure/table/rack, @@ -22337,6 +23565,11 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"pWS" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "pXn" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 @@ -22347,12 +23580,14 @@ /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) "pXt" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/obj/structure/catwalk, -/obj/structure/catwalk, -/turf/simulated/floor/plating, +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, /area/maintenance/bar/lower) "pXE" = ( /obj/effect/floor_decal/borderfloorblack{ @@ -22402,17 +23637,8 @@ "pZg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 4 - }, /obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/corner/navblue/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "qaT" = ( /obj/structure/cable/green{ @@ -22441,6 +23667,13 @@ /obj/machinery/vending/cigarette, /turf/simulated/floor/wood, /area/security/lobby) +"qbG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "qbQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ @@ -22596,17 +23829,24 @@ /turf/simulated/floor/plating, /area/maintenance/cargo) "qek" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/borderfloor{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 1 + }, +/obj/machinery/power/apc/north_mount, +/obj/structure/cable/green{ + icon_state = "0-4" }, /turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/area/endeavour/surfacebase/mining_main/break_room) "qeD" = ( /obj/machinery/power/port_gen/pacman/mrs{ anchored = 1 @@ -22666,6 +23906,23 @@ /obj/map_helper/airlock/atmos/chamber_pump, /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) +"qia" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/black{ + dir = 4 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) +"qiz" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "qjv" = ( /obj/effect/floor_decal/industrial/warning/full, /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ @@ -22717,8 +23974,25 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "qlg" = ( -/turf/simulated/wall/prepainted/cargo, -/area/quartermaster/foyer) +/obj/structure/table/wooden_reinforced, +/obj/item/stamp/cargo{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/stamp/denied{ + pixel_x = -6; + pixel_y = -1 + }, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) "qlP" = ( /obj/machinery/fitness/heavy/lifter, /obj/effect/floor_decal/corner_steel_grid{ @@ -22752,8 +24026,15 @@ /turf/simulated/floor/tiled/old_tile/gray, /area/security/range) "qmQ" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "qmV" = ( /obj/structure/cable{ icon_state = "4-8" @@ -22763,19 +24044,9 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardafthall) "qmY" = ( -/obj/machinery/status_display/supply_display{ - pixel_y = 32 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 - }, -/obj/machinery/camera/network/cargo, -/obj/machinery/suit_storage_unit/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "qmZ" = ( /obj/item/stool/padded, /obj/landmark/spawnpoint/job/entertainer, @@ -22876,22 +24147,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/bedrooms) "qoU" = ( -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/catwalk, -/obj/machinery/door/airlock/maintenance, +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/area/quartermaster/belterdock/refinery) "qoW" = ( /obj/structure/table/woodentable, /obj/machinery/microwave, @@ -22996,6 +24255,7 @@ /obj/machinery/camera/network/civilian{ dir = 1 }, +/obj/machinery/computer/timeclock/premade/south, /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navgold/border, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -23032,8 +24292,8 @@ "qup" = ( /obj/machinery/door/airlock/maintenance, /obj/item/barrier_tape_segment/engineering, -/obj/map_helper/network_builder/power_cable/green/auto, -/turf/simulated/floor/tiled/techmaint, +/obj/map_helper/access_helper/airlock/station/supply/maintenance, +/turf/simulated/floor/reinforced, /area/maintenance/bar/catwalk) "quZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -23042,22 +24302,13 @@ /turf/simulated/floor/tiled/dark, /area/security/lobby) "qvo" = ( -/obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Airlock"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel, -/area/quartermaster/office) +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "qvz" = ( /obj/item/stool/padded, /obj/effect/floor_decal/spline/fancy/wood{ @@ -23120,13 +24371,13 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) "qwK" = ( -/obj/machinery/holopad, -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "qwY" = ( /obj/structure/table/woodentable, @@ -23194,44 +24445,28 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) "qzI" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" }, -/obj/machinery/camera/network/cargo, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/item/clothing/accessory/permit/gun/planetside, -/obj/structure/table/reinforced, -/obj/machinery/door/window/southright{ - req_one_access = list(48) - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/item/gun/energy/kinetic_accelerator, -/obj/item/gun/energy/kinetic_accelerator, -/obj/item/gun/energy/kinetic_accelerator, -/obj/item/gun/energy/kinetic_accelerator, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/ore_box, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "qzO" = ( /obj/structure/table/woodentable, /obj/machinery/microwave, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_5) "qAh" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "qAl" = ( /obj/machinery/conveyor{ @@ -23295,6 +24530,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) +"qBU" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/bed/chair/sofa/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "qCe" = ( /obj/spawner/window/low_wall/full/firelocks, /turf/simulated/floor/plating, @@ -23312,8 +24555,8 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) "qCs" = ( -/turf/simulated/wall/prepainted, -/area/maintenance/bar/lower) +/turf/simulated/wall/prepainted/civilian, +/area/crew_quarters/barrestroom) "qCM" = ( /obj/structure/table/rack/shelf/steel, /obj/machinery/camera/network/security, @@ -23327,34 +24570,47 @@ /turf/simulated/floor/tiled, /area/security/lobby) "qDe" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/structure/table/steel_reinforced, +/obj/item/storage/toolbox/electrical{ + pixel_x = 0; + pixel_y = 1 }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) +"qDH" = ( +/turf/simulated/wall/r_wall, +/area/space) +"qDS" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/effect/floor_decal/corner/blue/border{ +/obj/effect/floor_decal/corner/brown/border{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) -"qDH" = ( -/turf/simulated/wall/r_wall, -/area/space) -"qDS" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/item/clothing/accessory/permit/gun/planetside, +/obj/structure/table/reinforced, +/obj/machinery/door/window/southright{ + req_one_access = list(48) }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/lower/trash_pit) +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/item/gun/energy/kinetic_accelerator, +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "qEf" = ( /turf/simulated/wall/prepainted, /area/crew_quarters/sleep/Dorm_2) @@ -23379,6 +24635,16 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardafthall) +"qGu" = ( +/obj/structure/closet/emcloset, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "qGy" = ( /obj/structure/cable{ icon_state = "4-8" @@ -23443,17 +24709,16 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "qIo" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) -"qIr" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) +"qIr" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "qIx" = ( /obj/structure/cable/yellow{ @@ -23492,6 +24757,9 @@ "qJx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ + dir = 8 + }, /obj/effect/floor_decal/borderfloorblack{ dir = 8 }, @@ -23505,11 +24773,8 @@ /turf/simulated/floor/tiled/monotile, /area/endeavour/hallway/d3afthall) "qJB" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/turf/simulated/wall/prepainted/cargo, +/area/quartermaster/belterdock/refinery) "qJM" = ( /turf/simulated/wall/r_wall/prepainted, /area/endeavour/hallway/d3fwdhall) @@ -23520,22 +24785,23 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "qKQ" = ( -/turf/simulated/wall/r_wall/prepainted/cargo, -/area/endeavour/surfacebase/mining_main/refinery) -"qLx" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, +/obj/map_helper/electrochromatic_linker{ + id = "qm_office" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Storage"; - req_one_access = null +/obj/effect/paint/beastybrown, +/turf/simulated/floor/plating, +/area/quartermaster/qm) +"qLx" = ( +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 32 }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/structure/table/wooden_reinforced, +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/obj/fiftyspawner/steel, +/turf/simulated/floor/wood, +/area/quartermaster/office) "qLB" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/cable/green{ @@ -23580,13 +24846,17 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "qMz" = ( -/obj/structure/closet/secure_closet/quartermaster, -/obj/item/clothing/accessory/poncho/roles/cloak/qm, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/borderfloor{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/air_alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "qMN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -23607,21 +24877,16 @@ /turf/simulated/floor/tiled/dark, /area/prison/cell_block) "qMP" = ( -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 - }, -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/light, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "qNE" = ( -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/vending/snack, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "qNM" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -23659,10 +24924,19 @@ /area/crew_quarters/recreation_area) "qPi" = ( /obj/structure/cable/green{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "qPw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -23676,7 +24950,7 @@ id = "cludge_hanger"; pixel_y = 32 }, -/turf/simulated/floor/reinforced/overhang, +/turf/simulated/floor/reinforced, /area/maintenance/bar/catwalk) "qQb" = ( /obj/structure/closet/firecloset, @@ -23744,12 +25018,8 @@ /area/security/nuke_storage) "qSv" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/science, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "qSx" = ( /obj/structure/shuttle/engine/heater{ dir = 4 @@ -23796,6 +25066,18 @@ }, /turf/simulated/floor/tiled/dark, /area/security/lobby) +"qVI" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "qVJ" = ( /obj/machinery/door/airlock/glass_external{ frequency = 1379; @@ -23815,10 +25097,9 @@ /obj/machinery/atmospherics/component/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/tiled/monotile, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "qXh" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light/small{ dir = 8 }, @@ -23975,10 +25256,30 @@ /turf/simulated/floor/tiled, /area/security/range) "rdb" = ( -/obj/structure/dogbed, -/mob/living/simple_mob/animal/sif/fluffy, -/turf/simulated/floor/wood, +/obj/structure/filingcabinet{ + pixel_x = 11; + pixel_y = 0 + }, +/obj/machinery/keycard_auth{ + pixel_y = -28 + }, +/turf/simulated/floor/carpet/bcarpet, /area/quartermaster/qm) +"rdv" = ( +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 32 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "rdY" = ( /obj/structure/window/basic{ dir = 1 @@ -24099,15 +25400,13 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_7) "rjY" = ( -/obj/machinery/status_display/supply_display{ - mode = 99; - pixel_y = -32 +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8 }, -/obj/effect/floor_decal/industrial/outline/red, -/obj/structure/disposalpipe/segment{ +/obj/effect/floor_decal/corner/brown/bordercorner{ dir = 8 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "rks" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24144,6 +25443,14 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/bar/lounge) +"rlm" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "QMLoad"; + pixel_x = 11; + pixel_y = 21 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "rlr" = ( /obj/machinery/power/solar, /obj/structure/cable/yellow{ @@ -24151,6 +25458,14 @@ }, /turf/simulated/floor/airless, /area/space) +"rlz" = ( +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "rlJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -24160,26 +25475,17 @@ /turf/simulated/floor/crystal, /area/endeavour/hallway/d3fwdhall) "rmb" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 5 - }, -/obj/item/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 26 - }, -/obj/machinery/light{ - dir = 1 +/obj/structure/catwalk, +/obj/machinery/door/airlock/maintenance, +/obj/map_helper/access_helper/airlock/station/supply/maintenance, +/obj/machinery/door/firedoor{ + dir = 8 }, -/obj/machinery/suit_storage_unit/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/plating, +/area/quartermaster/foyer) "rme" = ( /obj/structure/table/woodentable, -/obj/item/material/ashtray/glass, +/obj/machinery/recharger, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "rmU" = ( @@ -24227,6 +25533,15 @@ }, /turf/simulated/floor/tiled/dark, /area/janitor) +"rpH" = ( +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "rpK" = ( /turf/simulated/floor/wood, /area/maintenance/dormitory) @@ -24273,7 +25588,7 @@ /obj/vehicle/sealed/mecha/combat/fighter/cludge{ dir = 4 }, -/turf/simulated/floor/reinforced/overhang, +/turf/simulated/floor/reinforced, /area/maintenance/bar/catwalk) "rrf" = ( /obj/machinery/power/apc/south_mount, @@ -24281,14 +25596,16 @@ /turf/simulated/floor/tiled/old_tile/gray, /area/security/range) "rrZ" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -31 +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 }, -/turf/simulated/floor/tiled, +/obj/machinery/conveyor{ + id = "QMLoad2" + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "rsb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24445,20 +25762,11 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardamidhall) "rvC" = ( -/obj/structure/table/standard, -/obj/item/coin/silver, -/obj/item/coin/silver, -/obj/item/cartridge/quartermaster{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/cartridge/quartermaster{ - pixel_x = -4; - pixel_y = 7 +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 4 }, -/obj/item/cartridge/quartermaster, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "rvT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -24485,10 +25793,16 @@ /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) "rwh" = ( -/obj/structure/bed/chair{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/turf/simulated/floor/carpet/sblucarpet, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "rwx" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -24528,13 +25842,14 @@ /turf/simulated/wall/r_wall/prepainted/cargo, /area/space) "rxO" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/medical, -/obj/machinery/camera/network/cargo{ - dir = 4 +/obj/structure/table/steel_reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window{ + dir = 1; + req_one_access = list(31) }, /turf/simulated/floor/tiled, -/area/quartermaster/storage) +/area/quartermaster/office) "ryu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -24762,6 +26077,18 @@ "rEk" = ( /turf/simulated/wall/r_wall, /area/maintenance/bar/catwalk) +"rEu" = ( +/obj/machinery/sheet_silo_loader{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "rEv" = ( /obj/structure/cable/green{ icon_state = "0-8" @@ -24788,11 +26115,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "rER" = ( -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "rEX" = ( /obj/machinery/holopad, /turf/simulated/floor/wood, @@ -24852,6 +26176,9 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/bedrooms) +"rJy" = ( +/turf/simulated/floor/reinforced, +/area/quartermaster/warehouse) "rJC" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/cable/green{ @@ -24877,6 +26204,23 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"rLo" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/landmark/spawnpoint/job/shaft_miner, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "rLt" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 2"; @@ -24932,6 +26276,11 @@ /obj/machinery/holopad, /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) +"rMY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/closet/crate/large, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "rNH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -24991,6 +26340,22 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) +"rOM" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "rOR" = ( /obj/machinery/power/apc/north_mount, /obj/structure/cable{ @@ -25002,12 +26367,22 @@ /turf/simulated/floor/tiled/dark, /area/maintenance/starboardsolar) "rOW" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/door/firedoor{ - dir = 8 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/bar/catwalk) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "rPa" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navblue/border, @@ -25021,8 +26396,10 @@ /turf/simulated/floor/tiled/old_cargo/gray, /area/security/security_processing) "rPE" = ( -/turf/simulated/wall/r_wall/prepainted/cargo, -/area/maintenance/bar/catwalk) +/obj/machinery/suit_storage_unit/mining, +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "rPF" = ( /obj/structure/cable/orange{ icon_state = "4-8" @@ -25048,14 +26425,14 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/entertainment) "rQs" = ( -/obj/structure/cable/green{ - icon_state = "1-8" +/obj/structure/disposalpipe/segment{ + dir = 1 }, -/obj/machinery/fire_alarm/south_mount{ - pixel_y = -24 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "rQE" = ( /obj/structure/table/woodentable, /obj/item/tape_recorder{ @@ -25075,6 +26452,12 @@ }, /turf/simulated/floor/tiled/dark, /area/endeavour/station/stairs_three) +"rQL" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "rQZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -25229,14 +26612,15 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "rXa" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "rXe" = ( /turf/simulated/wall/prepainted, /area/maintenance/substation/cargo) @@ -25246,24 +26630,30 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/cargo) +"rXr" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "rYo" = ( +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, /obj/effect/floor_decal/borderfloorblack{ - dir = 1 + dir = 4 }, -/obj/effect/floor_decal/corner/navblue/border{ - dir = 1 +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 }, -/obj/machinery/station_map{ - pixel_y = 32 +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/hallway/d3afthall) +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "rYq" = ( -/obj/structure/cable/green{ - icon_state = "1-4" - }, -/obj/structure/cable/green{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/reinforced, /area/quartermaster/miningdock) @@ -25302,15 +26692,12 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "rZY" = ( -/obj/machinery/mineral/equipment_vendor, -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 9 +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "sak" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/cable/green{ @@ -25382,18 +26769,17 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "sbx" = ( -/obj/structure/cable/green{ - icon_state = "1-4" - }, -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/structure/table/steel_reinforced, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/steel, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "scb" = ( /obj/structure/table/woodentable, /turf/simulated/floor/wood, @@ -25432,8 +26818,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "scZ" = ( -/turf/simulated/wall/prepainted/cargo, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "see" = ( /obj/machinery/computer/timeclock/premade/south, /obj/structure/cable{ @@ -25506,18 +26896,17 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/security/lobby) "shF" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/effect/floor_decal/corner/brown/border{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = 7 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "shG" = ( /obj/machinery/holopad, /obj/structure/cable/green{ @@ -25535,8 +26924,18 @@ /turf/simulated/floor/carpet/sblucarpet, /area/crew_quarters/sleep/Dorm_12) "shT" = ( -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "shW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -25566,6 +26965,12 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) +"sij" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "sil" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 1 @@ -25620,6 +27025,13 @@ }, /turf/simulated/floor/tiled/old_cargo/gray, /area/security/evidence_storage) +"sjO" = ( +/obj/structure/closet/firecloset, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "sky" = ( /obj/structure/table/woodentable, /obj/item/stamp/hos, @@ -25769,6 +27181,7 @@ /obj/machinery/door/firedoor{ dir = 8 }, +/obj/map_helper/access_helper/airlock/station/supply/maintenance, /turf/simulated/floor/plating, /area/crew_quarters/recreation_area) "soV" = ( @@ -26111,12 +27524,12 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) "sxc" = ( -/obj/machinery/conveyor{ - dir = 9; - id = "mining_interior" +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/monotechmaint, +/area/quartermaster/belterdock/refinery) "sxq" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -26149,6 +27562,16 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) +"sxY" = ( +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" + }, +/obj/structure/closet/crate, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/tank/oxygen, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "syD" = ( /obj/effect/floor_decal/borderfloorblack, /obj/effect/floor_decal/corner/navblue/border, @@ -26176,14 +27599,9 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "szw" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/foyer) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "sAp" = ( /obj/machinery/power/apc/north_mount, /obj/structure/cable/green{ @@ -26231,57 +27649,43 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) "sBr" = ( -/obj/machinery/air_alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/computer/roguezones{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/machinery/mech_recharger, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/steel_grid, +/area/quartermaster/belterdock) "sCx" = ( /turf/space/basic, /area/security/range) "sDb" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ +/obj/effect/floor_decal/borderfloor{ dir = 8 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "sDc" = ( -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = 7 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 +/obj/structure/table/wooden_reinforced, +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/obj/item/storage/box/lights/mixed{ + pixel_x = 2; + pixel_y = 3 }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 4 +/obj/item/storage/box/lights/mixed{ + pixel_x = -4; + pixel_y = 3 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/quartermaster/office) "sDq" = ( /obj/structure/stairs/spawner/east, /turf/simulated/floor/plating, /area/maintenance/bar/lower) "sDX" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/air_alarm{ - pixel_y = 22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/component/unary/vent_pump/on, /turf/simulated/floor/tiled, -/area/quartermaster/office) +/area/quartermaster/belterdock) "sEi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -26289,14 +27693,11 @@ /turf/simulated/floor/tiled/dark, /area/security/interrogation) "sEz" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 4 +/obj/structure/cable/green{ + icon_state = "2-8" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "sEE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -26355,23 +27756,30 @@ /turf/simulated/floor/water/deep/indoors, /area/crew_quarters/sleep/bedrooms) "sFW" = ( -/obj/machinery/light{ - dir = 8 +/obj/structure/table/wooden_reinforced, +/obj/machinery/air_alarm{ + pixel_y = 22 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/kitchen) +/obj/item/storage/toolbox/mechanical{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) "sFX" = ( -/obj/structure/cable/green{ - icon_state = "2-8" +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "sFZ" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/random/cutout, @@ -26408,14 +27816,14 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "sGH" = ( -/obj/structure/ore_box, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/status_display/supply_display{ - mode = 99; - pixel_y = -32 +/obj/structure/cable/green{ + icon_state = "1-4" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "sHr" = ( /obj/machinery/light{ dir = 1 @@ -26515,7 +27923,10 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/monotile, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "sNh" = ( /obj/structure/disposalpipe/segment, @@ -26556,6 +27967,15 @@ /obj/effect/floor_decal/corner_oldtile/white/diagonal, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) +"sOt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "sOD" = ( /obj/item/stool/padded, /obj/effect/floor_decal/spline/fancy/wood{ @@ -26567,6 +27987,19 @@ /obj/machinery/door/airlock, /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) +"sPA" = ( +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d3portforhall) "sQO" = ( /obj/machinery/door/firedoor, /obj/structure/cable/green{ @@ -26601,24 +28034,15 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/kitchen) "sSl" = ( -/obj/machinery/status_display/supply_display{ - mode = 99; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 1 +/obj/effect/floor_decal/corner/brown/border{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/fire_alarm/east_mount, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "sSx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -26648,20 +28072,41 @@ /turf/space, /area/space) "sTs" = ( -/obj/machinery/holopad, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"sTR" = ( /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "sUL" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2" +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "sUQ" = ( /obj/structure/cable/green{ @@ -26687,6 +28132,20 @@ }, /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) +"sVr" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black/left, +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "sVD" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -26720,25 +28179,17 @@ /turf/simulated/floor/tiled/old_tile/gray, /area/security/range) "sWe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 4 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Prep Room"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/closet/crate/large, +/obj/structure/closet/crate/large, +/obj/item/pickaxe, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/pickaxe, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "sWg" = ( /obj/effect/floor_decal/corner_oldtile/white/diagonal, /obj/machinery/light_switch{ @@ -26773,11 +28224,10 @@ /turf/simulated/floor/tiled/monodark, /area/prison/cell_block) "sXC" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/structure/cable/green, +/obj/machinery/power/apc/south_mount, +/turf/simulated/floor/wood, +/area/quartermaster/office) "sXK" = ( /obj/machinery/light{ dir = 1 @@ -26861,14 +28311,24 @@ /turf/simulated/floor/tiled/dark, /area/security/lobby) "sZQ" = ( -/obj/effect/floor_decal/borderfloorblack/corner{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/effect/floor_decal/corner/navblue/bordercorner{ +/obj/effect/floor_decal/corner/navblue/border{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/bordercorner2{ + dir = 1 + }, +/obj/structure/sign/department/cargo{ + pixel_x = 0; + pixel_y = 32 }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) @@ -26917,37 +28377,38 @@ /turf/simulated/floor/plating, /area/maintenance/substation/cargo) "tbF" = ( -/obj/structure/cable/green{ - icon_state = "1-4" +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) -"tbK" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 10 }, -/turf/simulated/floor/tiled, +/obj/machinery/fire_alarm/west_mount, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"tbK" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/warehouse) "tbT" = ( -/obj/machinery/holopad, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "tcb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/structure/window/reinforced/survival_pod{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/structure/dispenser/oxygen, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "tcl" = ( /obj/structure/closet/wardrobe, /obj/item/toy/plushie/borgplushie/pupdozer, @@ -26956,29 +28417,61 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_10) "tdf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/status_display/supply_display{ + pixel_x = 0; + pixel_y = -32 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/bed/chair/sofa/black{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) +"tdj" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "tdk" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "tdr" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate, -/obj/machinery/camera/network/cargo, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/door/airlock/glass/mining{ + name = "Mining Prep Room"; + req_one_access = null + }, +/obj/map_helper/access_helper/airlock/station/supply/department, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) +"tds" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/door/airlock/glass/mining{ + name = "Mining Prep Room"; + req_one_access = null + }, +/obj/map_helper/access_helper/airlock/station/supply/mining, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/refinery) "tdG" = ( /turf/simulated/wall/r_wall/prepainted/cargo, /area/shuttle/mining_ship/general) @@ -27021,9 +28514,15 @@ /turf/simulated/floor/tiled, /area/security/hanger) "tgP" = ( -/obj/structure/dispenser/oxygen, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black, /turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/area/endeavour/surfacebase/mining_main/break_room) "thy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -27070,6 +28569,12 @@ }, /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) +"til" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/delivery) "tix" = ( /obj/structure/filingcabinet/security{ name = "Security Records" @@ -27151,15 +28656,21 @@ /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "tkT" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 }, -/obj/structure/closet, -/obj/item/storage/backpack/dufflebag, -/obj/machinery/power/apc/south_mount, -/obj/structure/cable/green, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/power/apc/east_mount, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/structure/bed/chair/sofa/black/right{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "tle" = ( /obj/effect/floor_decal/spline/fancy/wood, /obj/structure/table/woodentable, @@ -27185,6 +28696,13 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) +"tmi" = ( +/obj/machinery/conveyor{ + dir = 5; + id = "mining_interior" + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) "tne" = ( /obj/machinery/door/firedoor{ dir = 1 @@ -27211,8 +28729,10 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, /area/maintenance/bar/lower) "tos" = ( /obj/machinery/ai_status_display{ @@ -27308,16 +28828,31 @@ /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/belter) "tqv" = ( -/obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, -/turf/simulated/floor/plating, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "tqX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/wood, /area/crew_quarters/bar) +"trd" = ( +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "trg" = ( /obj/structure/cable/orange{ icon_state = "4-8" @@ -27398,26 +28933,15 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "tvT" = ( -/obj/structure/cable/green{ - icon_state = "1-8" +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/closet/crate/science, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "twA" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 9 - }, /obj/structure/table/standard, /obj/item/paper_bin, -/obj/machinery/power/apc/north_mount, /obj/effect/floor_decal/borderfloor/corner2{ dir = 10 }, @@ -27427,34 +28951,17 @@ /obj/machinery/camera/network/cargo{ dir = 4 }, -/obj/structure/cable/green{ - icon_state = "0-4" - }, /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "twR" = ( /turf/simulated/wall/r_wall/prepainted/cargo, /area/quartermaster/qm) "txc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Bay"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "txu" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -27490,6 +28997,17 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/toilet) +"tyv" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "tzm" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -27524,21 +29042,27 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "tBn" = ( -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/foyer) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "tBs" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /obj/structure/curtain/open/black, /turf/simulated/floor/plating, /area/crew_quarters/game_room) "tBN" = ( -/obj/item/radio/beacon, -/obj/structure/cable/green{ - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/foyer) +/obj/structure/cable/green, +/obj/machinery/power/apc/west_mount, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "tBY" = ( /obj/structure/sign/directions/cargo{ dir = 1; @@ -27627,16 +29151,29 @@ }, /turf/simulated/floor/tiled/old_cargo/white, /area/security/forensics) +"tEQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "tES" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, +/obj/effect/floor_decal/borderfloorblack{ dir = 1 }, -/obj/effect/floor_decal/corner/brown/border{ +/obj/effect/floor_decal/corner/navblue/border{ dir = 1 }, -/obj/machinery/suit_storage_unit/mining, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/area/endeavour/hallway/d3portforhall) "tGi" = ( /obj/structure/table/woodentable, /obj/item/handcuffs/legcuffs/fuzzy, @@ -27650,9 +29187,10 @@ /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) "tGp" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/wood, -/area/endeavour/surfacebase/mining_main/break_room) +/obj/structure/table/hardwoodtable, +/obj/item/flashlight/lamp/green, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "tGr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -27682,11 +29220,9 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "tHq" = ( -/obj/machinery/lathe/autolathe, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/landmark/spawnpoint/job/cargo_technician, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "tHC" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -27726,22 +29262,14 @@ /obj/machinery/door/firedoor{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/structure/catwalk, /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/map_helper/access_helper/airlock/station/maintenance, /turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/area/crew_quarters/barrestroom) "tIr" = ( /obj/machinery/light{ dir = 4 @@ -27858,11 +29386,11 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/map_helper/access_helper/airlock/station/service/kitchen, -/obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/door/airlock/civilian{ +/obj/machinery/door/airlock/freezer{ name = "Kitchen Cold Room" }, +/obj/map_helper/access_helper/airlock/station/service/kitchen, +/obj/effect/floor_decal/corner_oldtile/white/diagonal, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "tNF" = ( @@ -27898,6 +29426,9 @@ }, /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) +"tOv" = ( +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/quartermaster/belterdock/gear) "tOB" = ( /turf/simulated/wall/r_wall/prepainted/civilian, /area/endeavour/surfacebase/bar_backroom) @@ -28093,13 +29624,16 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "tVX" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/obj/structure/disposalpipe/segment{ +/obj/effect/floor_decal/corner/brown/border{ dir = 8 }, -/turf/simulated/floor/tiled, +/obj/machinery/camera/network/cargo{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "tWm" = ( /obj/structure/closet/l3closet/security, @@ -28136,10 +29670,13 @@ /area/endeavour/hallway/d3afthall) "tXt" = ( /obj/machinery/fire_alarm/north_mount, -/obj/landmark{ - name = "blobstart" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "tXY" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -28200,6 +29737,20 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portamidhall) +"tZV" = ( +/obj/item/radio/intercom{ + pixel_x = 0; + req_access = list(); + pixel_y = -26 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "tZY" = ( /obj/machinery/computer/security{ dir = 4 @@ -28256,17 +29807,10 @@ /turf/simulated/floor/tiled/steel, /area/shuttle/mining_ship/general) "ubA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/effect/floor_decal/industrial/outline/red{ + color = "#AF0000" }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/warehouse) "ubN" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -28423,18 +29967,14 @@ /obj/effect/decal/mecha_wreckage/cludge{ dir = 1 }, -/turf/simulated/floor/reinforced/overhang, +/turf/simulated/floor/reinforced, /area/maintenance/bar/catwalk) "uhv" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 6 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "uhA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28454,11 +29994,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3afthall) "uhE" = ( -/obj/effect/floor_decal/steeldecal/steel_decals5{ - dir = 8 - }, /obj/landmark/spawnpoint/job/cargo_technician, -/turf/simulated/floor/tiled/steel, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "uhW" = ( /obj/item/bedsheet/purpledouble, @@ -28501,20 +30038,32 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "uiJ" = ( -/obj/machinery/door/firedoor, -/obj/item/folder/white, -/obj/structure/table/reinforced, -/obj/machinery/door/window{ - dir = 8; - req_one_access = list(31) +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, +/turf/simulated/floor/plating, +/area/quartermaster/delivery) +"uiK" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 }, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 4 +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/obj/item/pen, /turf/simulated/floor/tiled/monotile, -/area/quartermaster/delivery) +/area/quartermaster/belterdock/refinery) "uiN" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -28615,6 +30164,19 @@ }, /turf/simulated/floor/crystal, /area/endeavour/hallway/d3fwdhall) +"ulx" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 9 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 9 + }, +/obj/structure/table/steel_reinforced, +/obj/item/storage/box/lights/mixed, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "ulH" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -28648,36 +30210,14 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "umx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor{ - dir = 8 - }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/obj/machinery/door/airlock/glass/mining{ - name = "Magmatic Rift Leap Pad"; - req_one_access = null - }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/lathe/autolathe, +/obj/machinery/light, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "umX" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/fire_alarm/east_mount, +/turf/simulated/floor/tiled/dark, +/area/endeavour/station/stairs_three) "uny" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -28762,11 +30302,29 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "uqr" = ( -/obj/structure/bed/chair/office/dark, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "url" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/door/firedoor{ @@ -29029,6 +30587,20 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) +"uzS" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black/left, +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "uAl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -29059,12 +30631,12 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "uAU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "uBK" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -29081,6 +30653,13 @@ "uBN" = ( /turf/simulated/floor/carpet, /area/security/detectives_office) +"uDB" = ( +/obj/machinery/light_switch{ + pixel_x = -27; + pixel_y = 5 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/quartermaster/qm) "uEp" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 8 @@ -29128,15 +30707,6 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "uGC" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/floor_decal/corner/navblue/border{ - dir = 1 - }, -/obj/machinery/air_alarm{ - pixel_y = 22 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -29263,15 +30833,19 @@ /turf/simulated/floor, /area/security/brig) "uJr" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/machinery/fire_alarm/west_mount, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "uJv" = ( /obj/machinery/holopad, /turf/simulated/floor/tiled, /area/crew_quarters/fitness) +"uJx" = ( +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "uJM" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -29285,7 +30859,6 @@ /obj/effect/floor_decal/corner/navgold/bordercorner2{ dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals4, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardafthall) "uJP" = ( @@ -29302,29 +30875,37 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardforhall) "uKk" = ( -/obj/structure/table/reinforced, -/obj/item/pen{ - pixel_x = -6; - pixel_y = 7 +/obj/machinery/door/airlock/glass/mining{ + name = "Mining Prep Room"; + req_one_access = null }, -/obj/item/paper_bin{ - pixel_x = 5; - pixel_y = 12 +/obj/map_helper/access_helper/airlock/station/supply/department, +/obj/structure/cable/green{ + icon_state = "4-8" }, -/obj/item/stamp/cargo, -/obj/item/stamp/denied{ - pixel_x = 7 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/turf/simulated/floor/wood, /area/quartermaster/office) "uKF" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "uKP" = ( /obj/machinery/door/firedoor{ dir = 8 @@ -29397,17 +30978,21 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "uMs" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 +/obj/structure/cable/green{ + icon_state = "1-4" }, -/obj/effect/floor_decal/corner/navgold/border{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/obj/machinery/light{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor/tiled/monotile, -/area/endeavour/hallway/d3afthall) +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "uMD" = ( /obj/structure/table/bench/steel, /obj/effect/floor_decal/borderfloorblack{ @@ -29453,6 +31038,18 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) +"uNM" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/camera/network/cargo, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "uOI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -29473,9 +31070,17 @@ /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portamidhall) "uOU" = ( -/obj/structure/lattice, -/turf/simulated/floor/airless/ceiling, -/area/maintenance/cargo) +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "uPx" = ( /obj/structure/cable{ icon_state = "4-8" @@ -29526,6 +31131,17 @@ /obj/map_helper/access_helper/airlock/station/engineering/department, /turf/simulated/floor/tiled/dark, /area/endeavour/hallway/d3aftmaint) +"uRz" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) +"uRN" = ( +/obj/machinery/power/apc/north_mount, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/delivery) "uSv" = ( /obj/structure/table/woodentable, /obj/machinery/microwave, @@ -29539,9 +31155,7 @@ /obj/effect/floor_decal/corner/navblue/border, /obj/effect/floor_decal/borderfloorblack/corner2, /obj/effect/floor_decal/corner/navblue/bordercorner2, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) "uSC" = ( @@ -29570,19 +31184,11 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "uUl" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/glass/mining{ - name = "Mining Stroage"; - req_one_access = null - }, -/obj/map_helper/access_helper/airlock/station/supply/mining, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/uxstorage) +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "uUx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -29598,6 +31204,14 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/security/lobby) +"uUR" = ( +/obj/machinery/hyperpad/centre{ + map_pad_id = "lavaland_station"; + map_pad_link_id = "lavaland_away"; + newcolor = "#fcba03" + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "uVc" = ( /obj/structure/fitness/punchingbag, /obj/structure/cable/green{ @@ -29621,6 +31235,13 @@ /obj/machinery/air_alarm/east_mount, /turf/simulated/floor/wood, /area/crew_quarters/sleep/bedrooms) +"uVS" = ( +/obj/effect/floor_decal/industrial/outline{ + color = "#D6DBDB" + }, +/obj/structure/closet/crate/engineering, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/warehouse) "uVT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -29651,15 +31272,17 @@ /turf/simulated/floor/tiled/steel, /area/shuttle/mining_ship/general) "uWL" = ( -/obj/machinery/light_switch{ - pixel_x = 25 +/obj/machinery/door/airlock/glass/mining{ + name = "Mining Prep Room"; + req_one_access = null }, -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/machinery/sheet_silo_loader{ - dir = 8 +/obj/map_helper/access_helper/airlock/station/supply/mining, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "uXI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -29788,12 +31411,19 @@ /turf/simulated/floor/plating, /area/crew_quarters/recreation_area) "vaA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Cargo Lobby" +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/brown/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/foyer) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "vaR" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -29802,7 +31432,7 @@ name = "EXTERNAL AIRLOCK" }, /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint_stripe/beastybrown, +/obj/effect/paint/beastybrown, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "vbj" = ( @@ -29823,6 +31453,12 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hallway) +"vdN" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/belterdock) "vdT" = ( /obj/structure/cable{ icon_state = "2-8" @@ -29848,15 +31484,16 @@ /turf/simulated/floor/tiled/dark, /area/security/warden) "veW" = ( -/obj/structure/bed/chair{ - dir = 4 +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/structure/table/woodentable, +/obj/structure/flora/pottedplant/smallcactus{ + pixel_x = 0; + pixel_y = 12 }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/foyer) +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "vfa" = ( /turf/simulated/floor/carpet/purcarpet, /area/crew_quarters/sleep/Dorm_13) @@ -29996,14 +31633,15 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_12) "viU" = ( +/obj/item/radio/intercom{ + dir = 4; + pixel_x = 24 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, -/obj/machinery/light{ - dir = 4 - }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) "vjb" = ( @@ -30027,11 +31665,10 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "vjg" = ( -/obj/structure/bed/chair/comfy/beige{ - dir = 8 - }, -/turf/simulated/floor/carpet/sblucarpet, -/area/quartermaster/qm) +/obj/structure/lattice, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/space) "vjD" = ( /obj/structure/undies_wardrobe, /turf/simulated/floor/wood, @@ -30115,21 +31752,17 @@ /turf/simulated/floor/plating, /area/security/brig) "vlO" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/table/steel_reinforced, +/obj/fiftyspawner/glass, +/obj/fiftyspawner/glass, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/border{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "vmT" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -30153,6 +31786,21 @@ /obj/structure/table/rack/shelf/steel, /turf/simulated/floor/tiled/dark, /area/security/tactical) +"vng" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "vnn" = ( /turf/simulated/wall/r_wall/prepainted/security, /area/crew_quarters/heads/hos) @@ -30393,12 +32041,11 @@ /turf/simulated/open, /area/endeavour/hallway/d3aftmaint) "vsY" = ( -/obj/machinery/computer/roguezones, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "vtP" = ( /obj/structure/undies_wardrobe, /turf/simulated/floor/wood, @@ -30413,6 +32060,20 @@ "vvH" = ( /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) +"vvO" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/structure/table/steel_reinforced, +/obj/structure/flora/pottedplant/flower{ + pixel_x = 1; + pixel_y = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "vvP" = ( /obj/structure/railing, /obj/effect/floor_decal/rust, @@ -30481,11 +32142,11 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "vxE" = ( -/obj/structure/cable/green{ - icon_state = "1-8" +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/turf/simulated/floor/wood, +/area/quartermaster/qm) "vxL" = ( /obj/structure/closet/crate/secure, /obj/effect/floor_decal/industrial/outline/yellow, @@ -30502,6 +32163,11 @@ /obj/map_helper/access_helper/airlock/station/security/armory, /turf/simulated/floor/tiled/dark, /area/security/warden) +"vyv" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/light, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "vyR" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 @@ -30741,13 +32407,15 @@ /turf/simulated/floor/water/deep/indoors, /area/crew_quarters/sleep/bedrooms) "vCC" = ( -/obj/machinery/mineral/output, -/obj/machinery/conveyor{ - dir = 4; - id = "mining_interior" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/sofa/black/right, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "vCG" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -30755,6 +32423,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, +/obj/structure/cable/green{ + icon_state = "1-4" + }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "vDg" = ( @@ -30765,14 +32436,9 @@ /turf/simulated/floor/plating, /area/endeavour/hallway/d3aftmaint) "vDo" = ( -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/machinery/atmospherics/component/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) "vDN" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/cable/green{ @@ -30923,6 +32589,12 @@ /obj/item/reagent_containers/glass/bucket, /turf/simulated/floor/tiled/dark, /area/janitor) +"vGd" = ( +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "vGl" = ( /obj/machinery/chem_master, /turf/simulated/floor/tiled/old_cargo/white, @@ -31025,11 +32697,14 @@ /turf/simulated/floor/tiled/dark, /area/security/security_equiptment_storage) "vKr" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/maintenance/cargo) +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "vKG" = ( /obj/spawner/window/low_wall/reinforced/electrochromic/full/firelocks, /obj/map_helper/electrochromatic_linker{ @@ -31108,24 +32783,24 @@ /turf/simulated/floor/tiled/dark, /area/security/tactical) "vMr" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/brown/border, -/obj/item/binoculars, -/obj/item/stack/flag/red, -/obj/item/binoculars{ - pixel_y = 6 +/obj/structure/closet/secure_closet/cargotech, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/warehouse) +"vMB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/item/binoculars{ - pixel_y = 6 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/item/binoculars{ - pixel_y = 6 +/obj/structure/cable/green{ + icon_state = "2-4" }, -/obj/item/stack/flag/yellow, -/obj/item/stack/flag/green, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "vNb" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -31274,11 +32949,24 @@ /turf/simulated/wall/r_wall/prepainted/command, /area/security/nuke_storage) "vRv" = ( -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 8 + }, +/obj/machinery/air_alarm{ + dir = 4; + pixel_x = -23 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "vRH" = ( /obj/machinery/door/airlock{ name = "Custodial Closet" @@ -31292,8 +32980,11 @@ sortType = "Trash"; dir = 8 }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, +/obj/machinery/light, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/turf/simulated/floor/tiled, /area/maintenance/bar/lower) "vSl" = ( /turf/simulated/wall/r_wall/prepainted/cargo, @@ -31399,8 +33090,11 @@ /turf/simulated/floor/wood, /area/security/lobby) "vVA" = ( -/turf/simulated/wall/r_wall/prepainted/cargo, -/area/endeavour/surfacebase/mining_main/uxstorage) +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "vVH" = ( /obj/machinery/door/blast/regular{ density = 0; @@ -31521,9 +33215,42 @@ /obj/machinery/power/apc/north_mount, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_7) +"vZr" = ( +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/machinery/camera/network/cargo{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) +"vZG" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "vZR" = ( -/turf/simulated/wall/r_wall/prepainted/cargo, -/area/quartermaster/storage) +/obj/effect/floor_decal/steeldecal/steel_decals_central6{ + dir = 4 + }, +/obj/spawner/window/low_wall/reinforced/full/firelocks, +/obj/effect/paint/beastybrown, +/turf/simulated/floor/airless/ceiling, +/area/quartermaster/warehouse) "wau" = ( /turf/simulated/floor/tiled/dark, /area/security/armoury) @@ -31538,12 +33265,15 @@ /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "waA" = ( -/obj/structure/table/reinforced, -/obj/machinery/atmospherics/component/unary/vent_pump/on{ - dir = 8 +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "wbb" = ( /obj/machinery/air_alarm{ dir = 8; @@ -31653,15 +33383,19 @@ /turf/simulated/floor/tiled/monotile, /area/security/security_lockerroom) "wfZ" = ( -/obj/structure/cable/green{ - icon_state = "2-4" +/obj/machinery/door/firedoor/glass, +/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, +/obj/machinery/door/airlock/glass/mining{ + name = "Cargo Airlock"; + req_one_access = null }, -/obj/structure/disposalpipe/junction{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "wgN" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/conveyor{ @@ -31723,18 +33457,29 @@ /obj/structure/cable/green, /turf/simulated/floor/tiled/dark, /area/janitor) +"wjW" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/black, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "wkh" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, /turf/simulated/floor/plating, /area/maintenance/dormitory) "wki" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/turf/simulated/floor/tiled, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/junction/yjunction, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "wku" = ( /obj/machinery/light/small{ @@ -31751,22 +33496,15 @@ /turf/simulated/floor/tiled/dark, /area/vacant/vacant_shop) "wkI" = ( -/obj/item/storage/box/nifsofts_mining, -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 }, /obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/obj/machinery/camera/network/cargo{ dir = 4 }, -/obj/item/suit_cooling_unit, -/obj/item/suit_cooling_unit, -/obj/item/duct_tape_roll, -/obj/structure/table/reinforced, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/fire_alarm/east_mount, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "wkY" = ( /obj/machinery/door/airlock/maintenance/sec{ req_one_access = null @@ -31828,15 +33566,12 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "wmU" = ( -/obj/machinery/fire_alarm/north_mount, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/air_alarm{ - pixel_y = 27 +/obj/effect/floor_decal/spline/plain{ + dir = 5 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/structure/flora/grass/event/purple_flowers1, +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "wns" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 @@ -31845,8 +33580,7 @@ /turf/simulated/floor/wood, /area/endeavour/hallway/d3fwdhall) "wnA" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/carpet/sblucarpet, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "woj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -31893,6 +33627,22 @@ }, /turf/simulated/floor/plating, /area/security/hanger) +"wqp" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/navblue/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1; + pixel_y = 20 + }, +/turf/simulated/floor/tiled/steel, +/area/endeavour/hallway/d3portforhall) "wqs" = ( /obj/structure/table/rack/shelf/steel, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -31936,6 +33686,13 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3starboardamidhall) +"wqT" = ( +/obj/structure/table/hardwoodtable, +/obj/machinery/photocopier/faxmachine{ + department = "Quartermaster-Office" + }, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "wri" = ( /obj/machinery/door/blast/regular{ dir = 4; @@ -31963,6 +33720,13 @@ }, /turf/simulated/floor/carpet/purcarpet, /area/maintenance/dormitory) +"wrG" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "wrN" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -32145,9 +33909,14 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "wxp" = ( -/obj/machinery/mineral/mint, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "wxK" = ( /obj/structure/cable{ icon_state = "4-8" @@ -32176,29 +33945,33 @@ /turf/simulated/floor/tiled/dark, /area/security/tactical) "wzB" = ( -/turf/simulated/wall/r_wall/prepainted/cargo, -/area/maintenance/cargo) -"wzV" = ( -/obj/machinery/keycard_auth{ - pixel_y = -28 +/obj/machinery/conveyor{ + dir = 6; + id = "mining_interior" }, -/turf/simulated/floor/wood, -/area/quartermaster/qm) +/obj/structure/plasticflaps/mining, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/belterdock/refinery) +"wzV" = ( +/turf/simulated/wall/r_wall/prepainted/cargo, +/area/quartermaster/belterdock) "wAe" = ( -/obj/machinery/door/firedoor, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, /obj/structure/cable/green{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Bay"; - req_one_access = null +/obj/machinery/camera/network/cargo{ + dir = 1 }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "wAQ" = ( /obj/machinery/camera/network/civilian{ dir = 4 @@ -32214,6 +33987,12 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/fitness) +"wAS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "wBG" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 4 @@ -32239,8 +34018,19 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "wCE" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/sign/department/miner_dock{ + pixel_x = 0; + pixel_y = 32 + }, /turf/simulated/floor/reinforced, /area/quartermaster/miningdock) "wCJ" = ( @@ -32282,13 +34072,11 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/kitchen) "wEw" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "mining_interior"; - name = "refining conveyor"; - pixel_y = 14 +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "wEW" = ( /obj/structure/bed/double, /obj/item/bedsheet/hosdouble, @@ -32370,6 +34158,29 @@ }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) +"wHf" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 5 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 5 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 4 + }, +/obj/structure/flora/pottedplant/stoutbush, +/obj/machinery/fire_alarm/north_mount, +/turf/simulated/floor/tiled, +/area/endeavour/surfacebase/mining_main/break_room) "wHm" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/item/reagent_containers/glass/cooler_bottle, @@ -32391,30 +34202,30 @@ /turf/simulated/floor/tiled/dark, /area/janitor) "wHG" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_y = -37 - }, /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ - dir = 1 + dir = 8 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "wIy" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "QMLoad2" - }, /obj/map_helper/airlock/door/simple, /obj/machinery/door/firedoor{ dir = 8 }, +/obj/map_helper/access_helper/airlock/station/external_airlock, +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, /obj/machinery/door/airlock/glass_external{ req_one_access = null }, -/obj/map_helper/access_helper/airlock/station/external_airlock, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "wIA" = ( @@ -32567,10 +34378,6 @@ /turf/simulated/floor/wood, /area/crew_quarters/heads/hos) "wQu" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad" - }, /obj/map_helper/airlock/door/simple, /obj/machinery/door/firedoor{ dir = 8 @@ -32579,6 +34386,16 @@ req_one_access = null }, /obj/map_helper/access_helper/airlock/station/external_airlock, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad2" + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "wQI" = ( @@ -32631,9 +34448,15 @@ /turf/simulated/floor/tiled, /area/crew_quarters/fitness) "wRS" = ( -/obj/machinery/holopad, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/window/reinforced/survival_pod, +/obj/machinery/light{ + pixel_x = 0; + pixel_y = 7 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "wTk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -32703,7 +34526,6 @@ /area/security/lobby) "wWK" = ( /obj/spawner/window/low_wall/reinforced/full/firelocks, -/obj/effect/paint/palebottlegreen, /turf/simulated/floor/plating, /area/hydroponics) "wWQ" = ( @@ -32781,8 +34603,26 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "wYU" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack/corner2{ + dir = 10 + }, +/obj/effect/floor_decal/corner/brown/bordercorner2{ + dir = 10 + }, +/obj/machinery/status_display/supply_display{ + mode = 99; + pixel_y = 0; + pixel_x = -32 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "wYW" = ( /obj/structure/railing/grey{ dir = 1 @@ -32794,16 +34634,16 @@ /area/tether/surfacebase/entertainment) "wZh" = ( /obj/machinery/door/firedoor/border_only, -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad" - }, /obj/machinery/shield_diffuser, /obj/map_helper/airlock/door/simple, +/obj/map_helper/access_helper/airlock/station/external_airlock, +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad2" + }, /obj/machinery/door/airlock/glass_external{ req_one_access = null }, -/obj/map_helper/access_helper/airlock/station/external_airlock, /turf/simulated/floor/plating, /area/quartermaster/warehouse) "wZj" = ( @@ -32858,14 +34698,14 @@ /turf/simulated/floor/tiled/dark, /area/security/warden) "xai" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/machinery/computer/ship/navigation/telescreen{ - pixel_y = -37 +/obj/effect/floor_decal/borderfloorblack{ + dir = 10 }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/effect/floor_decal/corner/brown/border{ + dir = 10 }, -/turf/simulated/floor/tiled, +/obj/machinery/air_alarm/south_mount, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "xao" = ( /obj/structure/cable/green, @@ -32898,6 +34738,29 @@ /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plating, /area/security/hallway) +"xcE" = ( +/obj/item/folder/white, +/obj/structure/table/reinforced, +/obj/machinery/door/window{ + dir = 8; + req_one_access = list(31) + }, +/obj/item/paper_bin{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/pen, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/delivery) "xdM" = ( /turf/simulated/wall/prepainted, /area/crew_quarters/sleep/Dorm_3) @@ -32921,12 +34784,9 @@ /turf/simulated/floor/tiled, /area/security/brig) "xeo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/blue/border, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/structure/lattice, +/turf/space/basic, +/area/endeavour/command/turrets) "xet" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 4 @@ -33065,14 +34925,20 @@ /turf/simulated/floor/tiled, /area/security/hanger) "xkg" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass/mining{ - name = "Cargo Storage"; - req_one_access = null +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/map_helper/access_helper/airlock/station/supply/cargo_bay, /turf/simulated/floor/tiled, -/area/quartermaster/storage) +/area/endeavour/surfacebase/mining_main/break_room) "xkB" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -33099,11 +34965,8 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3portforhall) "xlg" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/quartermaster/office) +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "xlq" = ( /obj/machinery/light_switch{ dir = 4; @@ -33124,19 +34987,34 @@ pixel_x = -24; pixel_y = -10 }, +/obj/machinery/light{ + dir = 8 + }, /obj/effect/floor_decal/corner_oldtile/white/diagonal, /turf/simulated/floor/tiled/dark, /area/crew_quarters/kitchen) +"xlv" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/obj/structure/table/steel_reinforced, +/obj/machinery/atmospherics/component/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/status_display/supply_display{ + pixel_x = 0; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "xlC" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 +/obj/structure/cable/green{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "xlR" = ( /obj/machinery/power/apc/south_mount, /obj/structure/cable/green{ @@ -33163,6 +35041,13 @@ }, /turf/simulated/wall/prepainted/civilian, /area/tether/surfacebase/entertainment) +"xng" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/table/wooden_reinforced, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "xnF" = ( /obj/structure/window/reinforced{ dir = 8 @@ -33239,7 +35124,8 @@ /area/tether/surfacebase/entertainment) "xtI" = ( /obj/machinery/light{ - dir = 1 + dir = 1; + pixel_y = 20 }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -33252,6 +35138,13 @@ }, /turf/simulated/floor/tiled/steel, /area/endeavour/hallway/d3portforhall) +"xue" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/vending/fitness, +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "xus" = ( /obj/machinery/light/small{ dir = 8 @@ -33285,6 +35178,13 @@ /obj/effect/paint/darkred, /turf/simulated/floor/plating, /area/security/range) +"xuV" = ( +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/obj/machinery/power/apc/north_mount, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "xvZ" = ( /obj/machinery/computer/ship/navigation/telescreen{ pixel_y = -37 @@ -33433,6 +35333,9 @@ /obj/machinery/air_alarm{ pixel_y = 22 }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, @@ -33443,16 +35346,20 @@ /area/endeavour/hallway/d3starboardafthall) "xyJ" = ( /obj/structure/cable/green{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "xyL" = ( /obj/machinery/atmospherics/component/unary/vent_pump/on, /obj/effect/floor_decal/borderfloorblack{ @@ -33464,23 +35371,14 @@ /turf/simulated/floor/tiled/dark, /area/security/hallway) "xzc" = ( -/obj/structure/cable/green{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/disposalpipe/segment{ + dir = 8 }, /obj/structure/cable/green{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 + icon_state = "4-8" }, /turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/area/maintenance/bar/lower) "xzh" = ( /obj/machinery/door/airlock/maintenance/engi{ req_one_access = null @@ -33534,26 +35432,29 @@ /turf/simulated/floor/tiled/monotile, /area/security/security_lockerroom) "xCO" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 8 +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, -/obj/structure/plasticflaps, /turf/simulated/floor/plating, /area/maintenance/lower/trash_pit) "xCV" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8 }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 1 +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 8 }, -/obj/structure/cable/green{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/storage) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "xDe" = ( /obj/structure/closet/secure_closet/brig, /obj/machinery/fire_alarm/west_mount{ @@ -33583,17 +35484,17 @@ /turf/simulated/floor/tiled/monotile, /area/crew_quarters/kitchen) "xDr" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/turf/simulated/floor/tiled, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/dark, /area/quartermaster/foyer) "xDs" = ( -/obj/machinery/atmospherics/component/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "xDS" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -33609,11 +35510,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar/lounge) "xEJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/foyer) "xEP" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -33635,6 +35536,12 @@ }, /turf/simulated/floor/tiled/dark, /area/security/warden) +"xGr" = ( +/obj/machinery/atmospherics/component/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "xGw" = ( /obj/machinery/atmospherics/component/unary/vent_scrubber/on{ dir = 8 @@ -33697,13 +35604,42 @@ "xIP" = ( /turf/simulated/floor/crystal, /area/endeavour/hallway/d3fwdhall) +"xIS" = ( +/obj/structure/table/reinforced, +/obj/structure/flora/pottedplant/small{ + pixel_x = 0; + pixel_y = 11 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) +"xJa" = ( +/obj/structure/dogbed, +/mob/living/simple_mob/animal/sif/fluffy, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/quartermaster/qm) "xJv" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/machinery/door/airlock/glass/mining{ + name = "Mining Prep Room"; + req_one_access = null }, -/turf/simulated/floor/plating, -/area/maintenance/bar/lower) +/obj/map_helper/access_helper/airlock/station/supply/mining, +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "xJx" = ( /obj/structure/closet/hydrant{ pixel_y = 30 @@ -33738,8 +35674,13 @@ /area/security/brig) "xKi" = ( /obj/machinery/camera/network/cargo, -/obj/machinery/mech_recharger, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/quartermaster/warehouse) "xLd" = ( /obj/structure/closet/wardrobe/red, @@ -33756,9 +35697,14 @@ /turf/simulated/floor/tiled, /area/security/security_lockerroom) "xLm" = ( -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/cargo/mining) +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/monodark, +/area/quartermaster/foyer) "xLD" = ( /obj/machinery/light/small{ dir = 1 @@ -33779,9 +35725,25 @@ /turf/simulated/floor/reinforced, /area/quartermaster/miningdock) "xMc" = ( -/obj/machinery/mineral/processing_unit, -/turf/simulated/floor/tiled/steel_grid, -/area/endeavour/surfacebase/mining_main/refinery) +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/item/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) +"xMm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "xMu" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -33858,10 +35820,14 @@ /turf/simulated/floor/tiled/dark, /area/security/brig) "xPj" = ( -/obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/quartermaster/warehouse) "xPq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -33875,24 +35841,16 @@ /turf/simulated/floor/carpet/bcarpet, /area/crew_quarters/bar) "xPu" = ( -/obj/structure/cable/green{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8 +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 }, -/obj/machinery/light_switch{ +/obj/machinery/vending/wallmed1{ dir = 4; - pixel_x = -24 - }, -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" + pixel_x = -24; + pixel_y = 2 }, -/turf/simulated/floor/tiled, -/area/quartermaster/warehouse) +/turf/simulated/floor/wood, +/area/endeavour/surfacebase/mining_main/break_room) "xPB" = ( /obj/spawner/window/low_wall/full/firelocks, /turf/simulated/floor/plating, @@ -33912,6 +35870,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/vending/fitness, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "xQu" = ( @@ -33993,12 +35952,13 @@ /area/security/brig) "xTf" = ( /obj/structure/cable/green{ - icon_state = "1-8" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/quartermaster/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/quartermaster/office) "xTl" = ( /obj/structure/cable/green{ icon_state = "0-8" @@ -34006,6 +35966,14 @@ /obj/machinery/power/apc/east_mount, /turf/simulated/floor/wood, /area/crew_quarters/sleep/Dorm_1) +"xTv" = ( +/obj/machinery/camera/network/cargo{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/reinforced, +/area/quartermaster/miningdock) "xTD" = ( /obj/machinery/camera/network/security, /turf/simulated/floor/tiled, @@ -34183,8 +36151,31 @@ /turf/simulated/floor/tiled, /area/endeavour/hallway/d3fwdhall) "xYM" = ( -/turf/simulated/floor/tiled/steel, -/area/quartermaster/delivery) +/obj/machinery/door/firedoor{ + dir = 8 + }, +/obj/map_helper/access_helper/airlock/station/mining_operations, +/obj/machinery/door/airlock/glass/mining{ + name = "Magmatic Rift Leap Pad"; + req_one_access = null + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/belterdock) "xZp" = ( /obj/structure/bed/chair/wood{ dir = 8 @@ -34306,6 +36297,11 @@ "yeY" = ( /turf/simulated/wall/prepainted/security, /area/crew_quarters/heads/hos) +"yfx" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/component/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/quartermaster/belterdock/gear) "yfy" = ( /obj/structure/bed/chair/comfy/purp{ dir = 8 @@ -34316,6 +36312,19 @@ /obj/structure/fitness/weightlifter, /turf/simulated/floor/tiled/dark, /area/security/brig) +"yfX" = ( +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "ygd" = ( /obj/effect/floor_decal/corner_steel_grid{ dir = 1 @@ -34367,7 +36376,7 @@ dir = 8 }, /obj/item/stool, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/monodark, /area/quartermaster/delivery) "yhH" = ( /obj/structure/cable/green{ @@ -34381,6 +36390,16 @@ }, /turf/simulated/floor/tiled, /area/endeavour/hallway/d3starboardamidhall) +"yhJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/quartermaster/belterdock/refinery) "yil" = ( /obj/effect/floor_decal/corner_techfloor_grid{ dir = 6 @@ -34436,7 +36455,7 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/security/lobby) "ykp" = ( -/obj/machinery/vending/fitness, +/obj/structure/closet/wardrobe/green, /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/recreation_area) "ykx" = ( @@ -34530,14 +36549,11 @@ /turf/simulated/floor/tiled/dark, /area/security/security_lockerroom) "ymc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/effect/floor_decal/spline/plain{ + dir = 6 }, -/turf/simulated/floor/tiled, -/area/endeavour/surfacebase/mining_main/refinery) +/turf/simulated/floor/grass, +/area/quartermaster/warehouse) "ymh" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -41219,8 +43235,8 @@ pRW pRW pRW tUu -eAp -bzE +rxD +gNV kbt uzm iaP @@ -41229,13 +43245,13 @@ qLS qLS tXh gDZ -aMQ -aMQ -aMQ +qCs +qCs +qCs dFB eLv eLv -aMQ +qCs uGk uPC fgL @@ -41413,8 +43429,8 @@ pRW pRW pRW pRW -eAp -eAp +rxD +gNV ddU piG iaP @@ -41423,7 +43439,7 @@ dmA dmA dGV gDZ -aMQ +qCs nUf kjU qHr @@ -41610,16 +43626,16 @@ jYr rEk rEk rEk -jLr +rEk rEk rEk rEk rEk aTX iaP -aMQ -aMQ -aMQ +qCs +qCs +qCs lTT lTY aUp @@ -41809,9 +43825,9 @@ rra bta bta rEk +eZz qLS -qLS -aMQ +qCs bje rTq rkO @@ -42003,12 +44019,12 @@ bta bta bta rEk -qLS -qLS -aMQ -aMQ -aMQ -aMQ +eZz +eZz +qCs +qCs +qCs +qCs qCs qCs tIj @@ -42198,12 +44214,12 @@ bta bta qup qLS -qLS -mVn +eZz +esB xLD lif lif -kgM +nxz xZH leL pir @@ -42392,12 +44408,12 @@ bta bta rEk qLS -qLS -mVn +eZz +esB lif lif lif -kgM +nxz xZH leL pir @@ -42408,7 +44424,7 @@ mup mup mup mup -hLw +hCa pir piX tJl @@ -42583,209 +44599,209 @@ bta bta bta bta -bta -rEk -qLS -qLS -mVn -lif -lif -lif -kgM -xZH -leL -pir -pFM -dIR -fcJ -rGw -fPF -wMW -dia -hCa -lgT -iSj -gWa -jZc -fIm -vFB -vFB -kSn -kSn -gCh -cEH -kSn -cZa -vFB -pTu -ihQ -xJC -cDs -ofO -pTu -lnD -vBk -fJN -mYQ -rmU -mkZ -pnm -iDZ -wau -yiF -fJN -fJN -fJN -pRW -pRW -pRW -pRW -pRW -jGe -jYr -jGe -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -"} -(43,1,1) = {" -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -mDp -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -pRW -ykN -bta -bta -bta -bta -bta -uhj +bta rEk qLS -qLS -mVn -xLD +eZz +esB lif lif -kgM +lif +nxz +xZH +leL +pir +pFM +dIR +fcJ +rGw +fPF +wMW +dia +hCa +lgT +iSj +gWa +jZc +fIm +vFB +vFB +kSn +kSn +gCh +cEH +kSn +cZa +vFB +pTu +ihQ +xJC +cDs +ofO +pTu +lnD +vBk +fJN +mYQ +rmU +mkZ +pnm +iDZ +wau +yiF +fJN +fJN +fJN +pRW +pRW +pRW +pRW +pRW +jGe +jYr +jGe +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +"} +(43,1,1) = {" +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +mDp +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +pRW +ykN +bta +bta +bta +bta +bta +uhj +rEk +wku +eZz +esB +naI +iJR +kDx +nxz fSt leL pir @@ -42973,13 +44989,13 @@ bta bta bta rEk -rOW -mVn +qLS mVn -lif +jLH +iIq xCO -lif -kgM +fsa +nxz xZH leL pir @@ -43145,9 +45161,9 @@ pRW pRW pRW pRW -pRW -pRW -rxD +fDw +fDw +wuh ilf ilf ilf @@ -43159,21 +45175,21 @@ ilf ilf ilf ilf -qDH -qDH -qDH -qDH -rEk -rEk -rEk -rEk -qLS -qLS -kgM -lif -qDS +wuh +wuh +wuh +wuh +tOv +tOv +tOv +tOv +aDU +gqQ +aDU +aDU +aDU +aDU aDU -kgM xZH leL pir @@ -43339,7 +45355,7 @@ pRW pRW pRW pRW -pRW +vjg pRW wuh iXY @@ -43356,19 +45372,19 @@ iXY iXY iXY iXY -rxD +wuh rPE -qLS -qLS -qLS -qLS -qLS -kgM -kgM -kgM +rPE +rPE +rPE +qJB +jGc +mff +sxc +oOy lgM -kgM -xZH +aDU +gwe leL pir nhj @@ -43533,8 +45549,8 @@ pRW pRW pRW pRW -pRW -pRW +iUL +fDw wuh iXY tdG @@ -43550,19 +45566,19 @@ iXY iXY iXY ehr -rxD -rPE -qLS -qLS -qLS -qLS -qLS -kgM -xZH -xZH -uAU -kgM -xZH +wuh +jEN +yfx +wrG +uRz +qoU +jPs +wxp +sDb +sDb +tZV +aDU +bbL leL uvj mup @@ -43727,7 +45743,7 @@ pRW pRW pRW pRW -pRW +vjg tUu wuh gmZ @@ -43744,20 +45760,20 @@ iXY iXY iXY iXY -rxD -rPE -qLS -qLS -qLS -qLS -qLS -kgM -xZH -xZH +wuh +blB +ePx +qiz +kRu +qoU +jPs +rvC +kBv +xDs uAU +aDU kgM -xZH -leL +fPG pir pir tMP @@ -43921,7 +45937,7 @@ pRW pRW pRW pRW -pRW +vjg pRW wuh iXY @@ -43931,27 +45947,27 @@ lwX gpG tdG iXY +aFt +sij iXY iXY iXY iXY iXY -iXY -iXY -rxD -rPE -qLS -qLS -qLS -qLS -mVn -kgM -xZH -xZH -uAU -kgM -fSt -leL +wuh +kRu +nWc +gnO +kRu +qoU +jPs +mbv +kBv +vGd +ulx +qoU +mzJ +puP pir cUi apJ @@ -43960,7 +45976,7 @@ dgB hOP aVW aVW -sFW +aVW pir fbH uhA @@ -44115,34 +46131,34 @@ pRW pRW pRW pRW -pRW +fDw pRW wuh -iXY +ptj tdG ygR muW jhZ tdG iXY -iXY +wAS iXY iXY iXY iXY iXY mcn -rxD -rPE -qLS -qLS -qLS -qLS -mVn -fSt -xZH -xZH -buX +wuh +bWp +pOK +jBe +fRP +qJB +uiK +bpu +yhJ +qVI +rQs hDH iIN vRK @@ -44309,7 +46325,7 @@ pRW pRW pRW pRW -pRW +fDw pRW wuh mLl @@ -44319,27 +46335,27 @@ tpp kxI tdG iXY +uKF +rQL iXY iXY iXY iXY iXY -iXY -iXY -rxD -rPE -wku -qLS -qLS -qLS +wuh +mEb +uRz +jwx +acY +tds lNT -xZH -xZH -xZH -xZH -kgM -xZH -leL +yfX +drV +drV +oUd +qoU +mzJ +xzc pir sRJ xMC @@ -44503,7 +46519,7 @@ pRW pRW pRW pRW -jGe +xeo jYr wuh ufN @@ -44513,25 +46529,25 @@ iRB jeT tdG iXY -iXY +eFf iXY iXY iXY iXY iXY ehr -rxD -rPE -qLS -qLS -qLS -qLS -mVn -xZH -xZH -xZH -xZH -kgM +wuh +qDS +jAA +jag +mwk +qJB +nin +rOW +jbh +rEu +wzB +aDU xZH tol pir @@ -44539,9 +46555,9 @@ sRJ aHs kyF jfy -aVW aHs -aVW +aHs +aHs dhd pir lhR @@ -44707,25 +46723,25 @@ ifT eIe tdG iXY +eFf iXY iXY iXY iXY iXY iXY -iXY -rxD -rPE -qLS -qLS -qLS -qLS -mVn -xZH -xZH -xZH -xZH -kgM +wuh +dPs +dPs +dPs +dPs +dPs +izr +vaA +aDw +qoU +cdn +aDU sDq tol pir @@ -44737,8 +46753,8 @@ pir pir pir pir -pir -rYo +pkU +iSj rfb kGS glG @@ -44891,7 +46907,7 @@ pRW pRW pRW pRW -jGe +xeo jYr wuh ufN @@ -44901,37 +46917,37 @@ ifT eIe tdG iXY -iXY +eFf vSl lYO lYO lYO vSl -iXY -rxD -mVn -qLS -qLS -qLS -qLS -mVn -kgM -kgM -xZH -xZH +oDU +wuh +aBc +cEd +pvB +jtk +dPs +qMz +vaA +biZ +aDU +oXi +aDU kgM -xbH buX -oOy -oOy +xbH +xZH qXh -xJv xZH xZH -pmy -pmy -pmy -pmy +xZH +bWK +bWK +bWK +bWK ooh jVt buM @@ -45082,10 +47098,10 @@ pRW pRW pRW pRW -mDp pRW pRW pRW +fDw pRW wuh ufN @@ -45095,31 +47111,31 @@ eum ofW tdG iXY -iXY +eFf vSl oaN ctb wGx vSl iXY -rxD -mVn -mVn -qLS -qLS -mVn -mVn -mLm -kgM +wuh +dVA +ekD +eHs +dqA +dTQ +bQe +vaA +kow qoU +osx +aDU kgM -kgM -xbH pXt fTU -fTU -fTU -buX +fYy +fYy +fYy lIR hXA bWK @@ -45276,10 +47292,10 @@ pRW pRW pRW pRW -mDp pRW pRW pRW +vjg pRW wuh dJV @@ -45289,26 +47305,26 @@ bgM tMa tdG iXY -iXY +eFf vSl tYv dym qmc vSl iXY -rxD -hwP -hwP +wuh +tgP +ekD hwP gQF -hwP -mLm -mLm +pDx +sFX +dcu nYH -mLm -mLm -xbH -xbH +prw +tmi +aDU +kgM pYt pYt vRH @@ -45470,10 +47486,10 @@ pRW pRW pRW pRW -mDp pRW pRW pRW +vjg tUu wuh ufN @@ -45483,26 +47499,26 @@ xJx cRB tdG iXY -iXY +eFf vSl aKj -eBl +qIH qIH vSl iXY -rxD -hwP -mLm -mLm -mLm -hwP -mLm -mLm -mLm -mLm -mLm -mLm -mLm +wuh +sVr +eHs +tBn +kZu +dPs +fmj +fmj +dPs +aDU +aDU +aDU +kgM pYt wHF muK @@ -45664,10 +47680,10 @@ pRW pRW pRW pRW -mDp pRW pRW pRW +vjg pRW wuh ufN @@ -45676,23 +47692,23 @@ buL qSx drT tdG -iXY -iXY +rXr +bxW vSl hRx qIH hpq vSl iXY -rxD -aGE -mLm -mLm -mLm -hwP -hwP -mLm -mLm +wuh +uNM +nDz +rLo +aFS +xPu +jwr +fsN +dPs lMH lMH lMH @@ -45858,10 +47874,10 @@ pRW pRW pRW pRW -mDp pRW pRW pRW +fDw pRW wuh ufN @@ -45871,22 +47887,22 @@ rAq rAq iXY iXY -iXY +eFf xXl fTI qIH iVL vSl mcn -rxD +wuh aGE -mLm -mLm -mLm -mLm -hwP -mLm -mLm +hwN +otl +aFS +mIN +qcx +pqk +dPs lMH gic qBI @@ -45901,11 +47917,11 @@ aUT bWK mmq mmq -qHq +umX tXo tXY hjP -qHq +umX mmq mmq bWK @@ -46052,11 +48068,11 @@ pRW pRW pRW pRW +pRW mDp mDp -mDp -mDp -mDp +vjg +lIp wuh fip nmv @@ -46064,23 +48080,23 @@ nmv nmv nmv xMb -nmv rOn +eFf vSl aKK qIH agW vSl iXY -rxD -aGE -mLm -mLm -mLm -mLm -hwP +wuh +qek +eHs +xkg +aFS +veW +qcx hWB -mLm +dPs lMH hMP evn @@ -46092,7 +48108,7 @@ pYt pYt pYt kEi -bWK +iJC xPB xPB bWK @@ -46246,35 +48262,35 @@ pRW pRW pRW pRW +pRW mDp mDp +vjg mDp -mDp -mDp -rxD -wuh -wuh -wuh -wuh -wuh -wuh -gmZ -ufN +twR +twR +twR +twR +twR +twR +twR +lAL +eFf vSl ufL qIH agW vSl -iXY -rxD -aGE -mLm -mLm -mLm -mLm -hwP -mLm -mLm +mLl +uWL +rpH +dZs +jCu +aFS +bol +qcx +vyv +dPs lMH lMH lCU @@ -46289,7 +48305,7 @@ boM mLk mLk mLk -mLk +moE wTk prg cua @@ -46438,37 +48454,37 @@ pRW pRW mDp mDp +pRW +pRW +pRW mDp mDp +vjg mDp -mDp -mDp -mDp -mDp -rxD +twR bOW cyG -qcx +fvb jrK ePB -oWf -nmv +twR +feE rYq vSl vSl vSl vSl vSl -iXY -rxD -hwP -hWB -mLm -mLm -mLm -hwP -mLm -mLm +ufN +wuh +wHf +eHs +xkg +aZK +pDn +xue +qNE +dPs lMH vIC vmT @@ -46632,38 +48648,38 @@ mDp mDp mDp mDp +pRW +pRW +pRW mDp mDp +lIp mDp -mDp -mDp -mDp -mDp -rxD -qcx -qcx -qcx -ejk -qcx -vkn -wuh -fSr +twR +nJF +oMq +uDB +hUh +lIA +twR +ufN +eFf iXY tqt kLg tqt iXY -iXY -rxD -hwP -mLm -mLm -mLm -mLm -hwP -mLm -mLm -nAS +ufN +wuh +vkn +uJx +aHA +vkn +vkn +vkn +vkn +vkn +lMH cgt fCZ qVm @@ -46674,7 +48690,7 @@ vEC eIC fub hHQ -aec +bYm pSd bYm ecr @@ -46684,7 +48700,7 @@ bfD bfD srX mvQ -uMs +bfD uPx gFf kGS @@ -46831,32 +48847,32 @@ pRW pRW pRW pRW -jGe +xeo jYr -rxD -oMq +twR +oWf oMq oMq -ejk -qcx -kZu -wuh -wuh -iXY -iXY +qia +rdb +twR +fip +phB +uOU iXY iXY iXY iXY -rxD -hwP -mLm -mLm -mLm -mLm -hwP -mLm -mLm +ufN +wuh +sBr +oNw +cZe +tBN +fNj +kad +cNA +wzV lMH ukb ukb @@ -47027,30 +49043,30 @@ pRW pRW jYr aKn -rxD -tGp -tGp +twR +wqT +oMq tGp jAe bhw -pDn -apt +twR +twR +twR +vMB +gqj +gUu +sGH +nmv +avQ wuh -iXY -iXY -iXY -iXY -iXY -mcn -rxD -hwP -mLm -mLm -mLm -mLm -hwP -mLm +bBM mLm +cQm +gDP +eEO +vdN +ipL +wzV lMH vxy ukb @@ -47219,32 +49235,32 @@ pRW pRW pRW pRW -jGe +xeo jYr -rxD -tGp -tGp -tGp -qcx -qcx -ejk +twR +xuV +heJ +heJ +lCC +heJ +xJa jtn -wuh +twR fko iXY +qIo +ufN iXY -iXY -iXY -iXY -rxD -hwP -mLm -mLm -mLm -mLm -hwP -mLm -mLm +xTv +wuh +jwQ +oNw +eBy +mJK +uUR +bTA +mmw +wzV lMH iON ukb @@ -47253,7 +49269,7 @@ oms ukb lUi lMH -cVy +sPA rqN cpz syH @@ -47413,32 +49429,32 @@ pRW pRW pRW pRW +fDw pRW -pRW -rxD -djB -djB +twR +jcl djB -qcx -qcx +szw +qbG +iTn ejk -qIo -wuh +nNn +twR wCE +pmy +xMm +ufN iXY -ehr +lag wuh -twR -twR -twR -gNj -gNj -gNj -mLm -mLm -hwP -mLm -mLm +dVh +sDX +fRJ +fTB +fGh +heO +oNw +wzV lMH new ukb @@ -47607,32 +49623,32 @@ pRW pRW pRW pRW -pRW +jON tUu -rxD -qcx -jCu -qcx -qcx -qcx -ejk +twR +fjp +nNn +nNn +nNn +vxE +xyJ leF -wuh -iXY +twR +sTR iXY +lRw +fSr iXY -wuh -rvC nWj -iIq +wuh sBr npS -gNj -mLm -mLm -hwP -hwP -hwP +fLU +aBU +uMs +lmr +xIS +wzV lMH evB ukb @@ -47801,32 +49817,32 @@ pRW pRW pRW pRW -pRW -pRW -qKQ -qKQ +kYu +fDw +twR +twR qKQ qKQ qKQ -pqk +twR mYS -qKQ -qKQ -qKQ -egp +twR +twR +xJv +wuh +wuh +wuh +wuh wuh wuh -cmE -qmQ -vjg -qmQ wzV -gNj -mLm -mLm -mLm -mLm -mLm +wzV +mIP +mIP +xYM +mIP +mIP +wzV lMH skT ukb @@ -47995,32 +50011,32 @@ pRW pRW pRW pRW +jON pRW -pRW -qKQ +mSw eBs -pOK inw -ldo +inw +inw wYU onr vRv tbF -oYC -ldo +pJe +rOM gLK etR -nNn +kDo uJr juy feq -nNn -oOI -xLm -xLm +mSw +ekJ xLm +gXm xLm -mLm +dIt +hdh lMH nqP ukb @@ -48189,32 +50205,32 @@ pRW pRW pRW pRW +jON pRW -pRW -qKQ +mSw bgH -tqv -dgn +txc +txc bPg -ldo -ldo +sOt ldo hkm -ldo -ldo -ldo -bvE -nNn -tcb -mIP +hkm +atT +itn +rER +rER +pOu +rER +rER hlc -rdb +jon gNj -hWB -mLm -mLm -xLm -mLm +wnA +tqv +wnA +jEc +hdh lMH cBD ukb @@ -48383,40 +50399,40 @@ pRW pRW pRW pRW +fDw pRW -pRW -qKQ +mSw moz -tqv -ldo -ldo -ldo +txc +txc +txc +gqw vsY -lCC -hkm -ldo +txc +txc +fYP lQq -hOq -gNj +gdU +gdU gdU jSX rER -qMz -tkT -gNj +rER +jon +aHh atw nfA -mLm -xLm -hwP -lMH -lMH -lMH -lMH -lMH -lMH -lMH -lMH +pjE +xlv +hdh +cJJ +cJJ +cJJ +cJJ +cJJ +cJJ +cJJ +cJJ xtI rZg swv @@ -48577,38 +50593,38 @@ pRW pRW pRW pRW +jON pRW -pRW -tqv +jon bHV -tqv +txc dHW kDM -dPs -scZ -scZ +ccA +vsY +sxY sWe -mEb -mEb -scZ -ffW -ffW +pJe +wRS +sjO +vDo +pfu pyb gtZ -ffW -ffW -ffW -ffW -ffW -ffW -hmk -cmi +pHB +jon +wjW +wnA +lXM +wnA +kiP +hdh nCY che dOT hvh dOT -jag +che wgN eyn mXi @@ -48771,40 +50787,40 @@ pRW pRW pRW pRW -pRW -pRW -tqv +kYu +fDw +jon lKH -tqv +txc wEw kur -sGH -scZ -rZY -moE -wkI -eHs -jBe -ffW +ccA +vsY +uUl +uUl +pJe +lnj +vMr +rER fJl vlO -blB -ffW -eFf -noW +rER +pHB +mSw +oGT xlg -noW -ffW -hmk -heO +daE +xlg +dip +hdh pwn pwn lRx yhp aaY -aaY pwn pwn +eNB rcz kXK avK @@ -48965,40 +50981,40 @@ pRW pRW pRW pRW +jON pRW -pRW -qKQ +mSw xMc -tqv +txc hDl -kur +kQS ccA -scZ +vsY qzI -xzc -lnj +qzI +pJe lnj -kWu -pfu +vMr +rER qDe sbx -xeo +rER umx -xlC +mSw noW pzs -noW -ffW +bLd +wnA hmk hdh -pwn +uRN twA -xYM +aIZ uhE -xYM -xYM +aIZ +aIZ pdF -pwn +eNB uZv esx qBG @@ -49159,38 +51175,38 @@ pRW pRW pRW pRW +jON pRW -pRW -tqv +jon vCC -fLU +txc bhP ifE -uKF -scZ +ccA +vsY lKt -umX +uUl pJe -shT +lnj vMr -ffW +nVg pdT nrZ etZ ffW -sDX -noW -noW +jon +waA +xlg daE -ffW -ffW -hdh -eNB -jPe -gGm +xlg +tyv +hrS +til +aIZ +aIZ qWd -gGm -gGm +aIZ +aIZ ays iDE tBY @@ -49353,35 +51369,35 @@ pRW pRW pRW pRW +fDw pRW -pRW -tqv +jon bHV -fLU +txc wmU ymc -atT -gqQ -xCV +ccA +vsY +uUl tvT pJe wRS evc -ffW +rER pHB kOw -iJR -gtZ -bxW +rER +rER +jon rXa -mii +wnA mii kKO qvo wfZ mlk lkP -gGm +lkP nsH sMN sMN @@ -49547,33 +51563,33 @@ pRW pRW pRW pRW -jGe +xeo jYr -qKQ -moz -tqv -agT -dcu +mSw +uzS +txc +txc +txc wHG -scZ -tES -tdf +vsY +txc +txc pJe -shT -tdk -ffW -fjp +lnj +eIB +rER +rER ptR tHq -gtZ -nDz +rER +jon waA -jON -nxz -bqs -ffW +xlg +daE +xlg +hzu hrS -eNB +aIZ aIZ aIZ dZb @@ -49743,39 +51759,39 @@ pRW pRW jYr aKn -qKQ -sxc -puP -uWL -boI -vDo -scZ -fvb -jAA -jLH -shT -tdk -cmw -nVC -nrZ +mSw +bgH +txc +txc +txc +txc +vsY +txc +txc +pJe +lnj +tcb +egp +egp +bqs qMP -ffW -ffW -gtZ -lmr -gtZ -ffW -ffW -iSP -pwn +fgA +mSw +vZG +wnA +lXM +wnA +boI +hdh eNB -ekD +eNB +uiJ kwo uiJ +xcE +uiJ eNB -eNB -pwn -rub +tES xiG avK syH @@ -49935,40 +51951,40 @@ pRW pRW pRW pRW -jGe +xeo jYr -vVA -fYy -fYy -oOV +mSw +mJv txc -mff -scZ +txc +txc +txc +rZY +rMY qmY -sDb -shT shT +xCV +tdk +tdk tdk -cmw -nVC sTs pJR -cmw +tdk hrc izO -gal -gal +pZg +cmi dyR cDv tVX -vaA -gal -gal -gal -gal -gal +vKr +vKr +vKr +vKr +apt +vKr gal -oXi +hdh sZQ xiG vzm @@ -50129,40 +52145,40 @@ pRW pRW pRW pRW +fDw pRW -pRW -vVA +mSw gSF eWe uUl -oNw -vxE +uUl +txc scZ -rmb -jzp +txc +txc sEz shF uhv -cmw +hOq nVC qPi uqr pDb +hLw qAh -qAh -gal +jhH dLj aDs jhH pVz -jwQ -fva -fva -fva -fva -fva -fva +jhH +xlC +jhH +jhH fva +jhH +jhH +nme ukf emK bAI @@ -50323,40 +52339,40 @@ pRW pRW pRW pRW -pRW +jON tUu -vVA -cJJ -aFS -oOV -fil -fil -scZ -scZ -jwr -gnO -scZ +mSw +bgH +uUl +uUl +uVS +txc scZ -ffW +txc +txc +txc +poa +txc +rlz sSl -qPi +ldm uKk -cmw -gal +ldm +ldm mjB hUF qwK wki -bTA +mhO xDr mhO lAm -lAm pZg -lAm -lAm +pZg +lfJ pZg pZg +tEQ dns xlf swv @@ -50517,40 +52533,40 @@ pRW pRW pRW pRW +jON pRW -pRW -vVA +mSw lwA -rQs -oOV -fil -fil -feE -pjE +txc +txc +txc +vVA +scZ +txc +ubA +ubA +poa ubA -mbv -hXO -xPu wAe -fDt -xyJ +ldm +ldm oXV hJm -jEc -kYu -eZz -tBN -veW -kPT -jtk -rBG -rBG -rBG -rBG -qdW -rBG -rBG -rBG +ldm +cmw +cmw +nKd +rwh +wnA +nkT +trd +hUF +pUj +pyh +hUF +vng +ieQ +hdh nJu nQm wtj @@ -50711,41 +52727,41 @@ pRW pRW pRW pRW -pRW -pRW -vVA -esB -tgP -oOV -cNA -gXm -poa -poa -gqw -poa +kYu +fDw +mSw +mJv +uUl +uUl +uUl +ccA +scZ +txc +kxv +kxv poa kxv des -hcH +ldm sDc orm -jEN -jYU -lfJ -gal -tBn -wnA +nFa +nzA +omy +rxO +bJS +rwh wnA -jtk -rBG -fju +nkT +hXO +lGM kXD -fju -mIk -fju -fju -rBG -qxm +bvE +dAP +iSL +bvE +hdh +lye kMk kYx syH @@ -50905,41 +52921,41 @@ pRW pRW pRW pRW +jON pRW -pRW -vVA -oOV -oOV +mSw +bgH oOV -qNE -czr -czr +uUl +uUl +kpn +dgn czr lEM -ldK +lEM ldK kTN laQ -mKJ -nyi -nyi -nyi +ldm +eDd +eKq +nzA qlg ffP -eIB +cmw bJS rwh -szw +wnA nkT -rBG +cDv vKr -fju -fju -mIk -fju -fju -rBG -txu +apt +vKr +vKr +apt +gal +hdh +kGf kSN prZ azB @@ -51099,42 +53115,42 @@ pRW pRW pRW pRW -pRW +jON pRW mSw ncP -heJ -wxp -fil +txc +txc +txc tbT -fil -xDs -hzi -qJB -fil -kTN +scZ +txc +tbK +tbK +ccA +tbK mpt ldm -nyi +sFW eKq nzA -nyi -nyi -nyi -nyi -nyi -rBG -rBG -rBG -fju -fju -fju -mIk -fju -fju -rBG -xtI -bBc +ate +iSP +cmw +bJS +cmE +hzi +jdF +hzi +mFW +hzi +hzi +oYC +hzi +hzi +flt +fTy +imI uSz syH vPk @@ -51293,40 +53309,40 @@ pRW pRW pRW pRW -pRW +fDw pRW jon mJv -fil -aDw -fil -czr -czr -czr +lKt +oOV +uUl +tbT +scZ +txc +tbK +tbK +ccA tbK -xEJ -xEJ -sFX qIr -qek +ldm qLx xTf nFa -lXM +nzA omy rxO -oyU -nyi -fju -fju -mIk -mIk -mIk -mIk -mIk -fju -fju -rBG +bJS +jPe +wnA +nkT +wnA +tdj +wnA +wnA +xEJ +wnA +wnA +dkO uGC viu ras @@ -51487,41 +53503,41 @@ pRW pRW pRW pRW -pRW +fDw pRW jon edk -fil -fil -fil -fil -fil -lye +uUl +uUl +lKt +tbT +scZ +txc aOG -dTQ -fil -fil -fil -mwk -xkg +aOG +ccA +aOG +elJ +ldm +ldm lqE sXC -kpn -fmj -oyU +ldm +cmw +cmw nKd -nyi -vKr -fju -mIk -fju -rBG -rBG -rBG -rBG -rBG -rBG -sTd +jPe +wnA +nkT +trd +hUF +fDt +vZr +fhx +rYo +gGm +hdh +prv bBc fgj cGV @@ -51681,41 +53697,41 @@ pRW pRW pRW pRW -pRW -pRW +kYu +lIp jon xKi -fil -fil -mzJ +txc +txc +txc mKJ -kRu -fil -fil -fil -ouS -fil -ldK +scZ +txc +txc +txc +aUM +xGr +rjY xai -nyi +ldm tdr -lag -lqE -lqE -lqE -osx -nyi -fju -fju -mIk -rBG -rBG -fju -fju -fju -fju -rBG -sTd +ldm +ldm +oOI +vKr +oyU +jPe +wnA +nkT +jYU +hdh +hdh +hdh +hdh +hdh +hdh +hdh +hVB bBc bxI cGV @@ -51875,41 +53891,41 @@ pRW pRW pRW pRW -pRW +jON pRW mSw tXt -gNV -fil -fil -fil -hus -fil -gNV +txc +txc +aec fil +jzp +rlm +txc +txc ouS -fil -ldK +txc +txc rjY -nyi -pQh -xPj -lqE -oyU +cyr +sUL +sUL +eBl oyU +wnA pQh nyi -fju -fju -mIk -rBG +wnA +xng +kPT +hdh rMi rMi rMi rMi rMi rMi -txu +wqp eTr ras cGV @@ -52069,34 +54085,34 @@ pRW pRW pRW pRW -pRW +jON tUu mSw neg nbW -nbW -nbW -sUL +qGu +buN +mSw hus -kad +xPj kcR -itn -ouS +xPj +rrZ dSm -fil rrZ -nyi -oyU +rrZ +rrZ +rrZ xPj -lqE -oyU +qmQ +qwK qSv -oyU -nyi -fju -fju -mIk -rBG +qSv +nAS +wnA +xng +qBU +hdh rMi ovN qVv @@ -52263,34 +54279,34 @@ pRW pRW pRW pRW -pRW +jON pRW mSw mSw mSw jon jon -jon +mSw wIy nRo jon -nRo +hcH wQu -jon -jon -mSw -vZR -vZR -vZR +oFO +oFO +oFO +oFO vZR -nyi -nyi -nyi -nyi -fju -fju -mIk -rBG +oFO +mSw +rdv +pWS +pWS +kWu +wnA +xng +tdf +hdh rMi nBf vfa @@ -52457,7 +54473,7 @@ pRW pRW pRW pRW -pRW +jON mDp csb aaK @@ -52465,26 +54481,26 @@ csb aaK csb jon -jpo -fil -jon -fil qAl +rJy +jon +rJy +jpo oFO csb -flt -flt +aaK csb +aaK csb -wzB -fju -mIk -mIk -mIk -mIk -mIk -mIk -rBG +mSw +vvO +ciU +agT +wkI +hUF +tkT +lUu +hdh rMi edb adB @@ -52651,8 +54667,8 @@ pRW pRW pRW pRW -pRW -pRW +fDw +fDw aaK aaK aaK @@ -52666,19 +54682,19 @@ epe wZh vaR aaK -uOU -uOU aaK aaK -wzB -agX -yab -fju -fju -mIk -fju -fju -rBG +aaK +aaK +mSw +hrS +hdh +hdh +hdh +rmb +hdh +hdh +hdh rMi kke qsL diff --git a/maps/endeavour/levels/misc.dmm b/maps/endeavour/levels/misc.dmm index 6116ef6612b6..c6f8fc5ec68b 100644 --- a/maps/endeavour/levels/misc.dmm +++ b/maps/endeavour/levels/misc.dmm @@ -146,9 +146,6 @@ }, /turf/simulated/shuttle/floor, /area/shuttle/supply) -"cJ" = ( -/turf/space, -/area/space) "cU" = ( /obj/structure/holostool, /obj/effect/floor_decal/carpet, @@ -626,9 +623,10 @@ /turf/simulated/floor/holofloor/tiled/dark, /area/holodeck/source_emptycourt) "qb" = ( +/obj/map_helper/access_helper/airlock/station/external_airlock, /obj/machinery/conveyor{ - dir = 4; - id = "QMLoad" + dir = 8; + id = "QMLoad2" }, /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -638,7 +636,6 @@ name = "Shuttle Hatch"; req_one_access = null }, -/obj/map_helper/access_helper/airlock/station/external_airlock, /turf/simulated/shuttle/plating, /area/shuttle/supply) "qd" = ( @@ -2032,9 +2029,10 @@ /turf/simulated/floor/holofloor/grass, /area/holodeck/holodorm/source_garden) "We" = ( +/obj/map_helper/access_helper/airlock/station/external_airlock, /obj/machinery/conveyor{ - dir = 8; - id = "QMLoad2" + dir = 4; + id = "QMLoad" }, /obj/machinery/door/airlock/glass_external{ frequency = 1380; @@ -2044,7 +2042,6 @@ name = "Shuttle Hatch"; req_one_access = null }, -/obj/map_helper/access_helper/airlock/station/external_airlock, /turf/simulated/shuttle/plating, /area/shuttle/supply) "Ws" = ( @@ -22966,11 +22963,11 @@ oi RS pQ cI -Us +Ys pQ sZ pQ -Ys +Us cI RS RS @@ -23160,11 +23157,11 @@ oi RS pQ pQ -Us +Ys pQ pQ pQ -Ys +Us pQ pQ HY @@ -23354,11 +23351,11 @@ oi RS pQ pQ -Us +Ys pQ pQ pQ -Ys +Us pQ pQ HY @@ -38720,9 +38717,9 @@ oi oi oi oi -cJ -cJ -cJ +oi +oi +oi oi oi oi @@ -39101,10 +39098,10 @@ Uk oi oi oi -cJ -cJ -cJ -cJ +oi +oi +oi +oi oi oi oi diff --git a/maps/rift/engines.dm b/maps/rift/engines.dm index 449067353e34..32052044c455 100644 --- a/maps/rift/engines.dm +++ b/maps/rift/engines.dm @@ -15,8 +15,12 @@ suffix = "sme.dmm" display_name = list("Angry Rock", "The Forbidden Rock Candy", "Death Crystal", "Spicy Crystal", "Hypnotizing Stone") +// disabled because it only worked at all due to an atmos bug +// todo: proper simulation and math this shit out for joules released in total fuel +/* /datum/map_template/engine/rift/burnchamber name = "ProcEngine_Rift_Burn" desc = "Burn Chamber Engine" suffix = "burn.dmm" display_name = list("Toxins Lab", "Build a Campfire", "100 Solarmoths", "Teshari's Bane", "Casting Fireball!") +*/ diff --git a/maps/triumph/engines.dm b/maps/triumph/engines.dm index b60a1920b55c..ace13e1b3324 100644 --- a/maps/triumph/engines.dm +++ b/maps/triumph/engines.dm @@ -15,12 +15,17 @@ suffix = "sme.dmm" display_name = list("Angry Rock", "The Forbidden Rock Candy", "Death Crystal", "Spicy Crystal") +// disabled because it only worked at all due to an atmos bug +// todo: proper simulation and math this shit out for joules released in total fuel +/* /datum/map_template/engine/triumph/burnchamber name = "ProcEngine_Triumph_Burn" desc = "Burn Chamber Engine" suffix = "burn.dmm" display_name = list("Toxins Lab", "We Knew You Liked Tether Fires, so we Brought One in a Box", "100 Solarmoths", "Teshari's Bane") +*/ +// disabled pending rework /* /datum/map_template/engine/triumph/fission name = "ProcEngine_Triumph_Fission" diff --git a/sound/voice/Hevsounds/administering_medical.wav b/sound/voice/Hevsounds/administering_medical.wav new file mode 100644 index 000000000000..b5034a39651d Binary files /dev/null and b/sound/voice/Hevsounds/administering_medical.wav differ diff --git a/sound/voice/Hevsounds/adrenaline_shot.wav b/sound/voice/Hevsounds/adrenaline_shot.wav new file mode 100644 index 000000000000..ea09a88902a5 Binary files /dev/null and b/sound/voice/Hevsounds/adrenaline_shot.wav differ diff --git a/sound/voice/Hevsounds/antitoxin_shot.wav b/sound/voice/Hevsounds/antitoxin_shot.wav new file mode 100644 index 000000000000..b33d9a6f3bec Binary files /dev/null and b/sound/voice/Hevsounds/antitoxin_shot.wav differ diff --git a/sound/voice/Hevsounds/automedic_on.wav b/sound/voice/Hevsounds/automedic_on.wav new file mode 100644 index 000000000000..b4dbdc67b84e Binary files /dev/null and b/sound/voice/Hevsounds/automedic_on.wav differ diff --git a/sound/voice/Hevsounds/biohazard_detected.wav b/sound/voice/Hevsounds/biohazard_detected.wav new file mode 100644 index 000000000000..4dbfe2f7d741 Binary files /dev/null and b/sound/voice/Hevsounds/biohazard_detected.wav differ diff --git a/sound/voice/Hevsounds/blood_loss.wav b/sound/voice/Hevsounds/blood_loss.wav new file mode 100644 index 000000000000..50c276744402 Binary files /dev/null and b/sound/voice/Hevsounds/blood_loss.wav differ diff --git a/sound/voice/Hevsounds/blood_plasma.wav b/sound/voice/Hevsounds/blood_plasma.wav new file mode 100644 index 000000000000..5b2c73115c79 Binary files /dev/null and b/sound/voice/Hevsounds/blood_plasma.wav differ diff --git a/sound/voice/Hevsounds/blood_toxins.wav b/sound/voice/Hevsounds/blood_toxins.wav new file mode 100644 index 000000000000..52a03e1d3665 Binary files /dev/null and b/sound/voice/Hevsounds/blood_toxins.wav differ diff --git a/sound/voice/Hevsounds/chemical_detected.wav b/sound/voice/Hevsounds/chemical_detected.wav new file mode 100644 index 000000000000..5417cae08a61 Binary files /dev/null and b/sound/voice/Hevsounds/chemical_detected.wav differ diff --git a/sound/voice/Hevsounds/health_critical.wav b/sound/voice/Hevsounds/health_critical.wav new file mode 100644 index 000000000000..d2dcc4cdf1d9 Binary files /dev/null and b/sound/voice/Hevsounds/health_critical.wav differ diff --git a/sound/voice/Hevsounds/health_dropping.wav b/sound/voice/Hevsounds/health_dropping.wav new file mode 100644 index 000000000000..76f7ae9852ac Binary files /dev/null and b/sound/voice/Hevsounds/health_dropping.wav differ diff --git a/sound/voice/Hevsounds/health_dropping2.wav b/sound/voice/Hevsounds/health_dropping2.wav new file mode 100644 index 000000000000..254a764d50a9 Binary files /dev/null and b/sound/voice/Hevsounds/health_dropping2.wav differ diff --git a/sound/voice/Hevsounds/heat_damage.wav b/sound/voice/Hevsounds/heat_damage.wav new file mode 100644 index 000000000000..6f8b844d374d Binary files /dev/null and b/sound/voice/Hevsounds/heat_damage.wav differ diff --git a/sound/voice/Hevsounds/innsuficient_medical.wav b/sound/voice/Hevsounds/innsuficient_medical.wav new file mode 100644 index 000000000000..dfad3c4dbeae Binary files /dev/null and b/sound/voice/Hevsounds/innsuficient_medical.wav differ diff --git a/sound/voice/Hevsounds/internal_bleeding.wav b/sound/voice/Hevsounds/internal_bleeding.wav new file mode 100644 index 000000000000..e82a295cf069 Binary files /dev/null and b/sound/voice/Hevsounds/internal_bleeding.wav differ diff --git a/sound/voice/Hevsounds/major_fracture.wav b/sound/voice/Hevsounds/major_fracture.wav new file mode 100644 index 000000000000..e2759bdb3dcb Binary files /dev/null and b/sound/voice/Hevsounds/major_fracture.wav differ diff --git a/sound/voice/Hevsounds/major_lacerations.wav b/sound/voice/Hevsounds/major_lacerations.wav new file mode 100644 index 000000000000..90ea4a9513b0 Binary files /dev/null and b/sound/voice/Hevsounds/major_lacerations.wav differ diff --git a/sound/voice/Hevsounds/minor_fracture.wav b/sound/voice/Hevsounds/minor_fracture.wav new file mode 100644 index 000000000000..fe432d382e14 Binary files /dev/null and b/sound/voice/Hevsounds/minor_fracture.wav differ diff --git a/sound/voice/Hevsounds/minor_lacerations.wav b/sound/voice/Hevsounds/minor_lacerations.wav new file mode 100644 index 000000000000..9fd434ee7140 Binary files /dev/null and b/sound/voice/Hevsounds/minor_lacerations.wav differ diff --git a/sound/voice/Hevsounds/morphine_shot.wav b/sound/voice/Hevsounds/morphine_shot.wav new file mode 100644 index 000000000000..aba4f15c321e Binary files /dev/null and b/sound/voice/Hevsounds/morphine_shot.wav differ diff --git a/sound/voice/Hevsounds/near_death.wav b/sound/voice/Hevsounds/near_death.wav new file mode 100644 index 000000000000..f1b4e30cc58f Binary files /dev/null and b/sound/voice/Hevsounds/near_death.wav differ diff --git a/sound/voice/Hevsounds/radiation_detected.wav b/sound/voice/Hevsounds/radiation_detected.wav new file mode 100644 index 000000000000..c22971dd2669 Binary files /dev/null and b/sound/voice/Hevsounds/radiation_detected.wav differ diff --git a/sound/voice/Hevsounds/seek_medic.wav b/sound/voice/Hevsounds/seek_medic.wav new file mode 100644 index 000000000000..79dd1422c0fa Binary files /dev/null and b/sound/voice/Hevsounds/seek_medic.wav differ diff --git a/sound/voice/Hevsounds/shock_damage.wav b/sound/voice/Hevsounds/shock_damage.wav new file mode 100644 index 000000000000..7125358cd1e6 Binary files /dev/null and b/sound/voice/Hevsounds/shock_damage.wav differ diff --git a/sound/voice/Hevsounds/wound_sterilized.wav b/sound/voice/Hevsounds/wound_sterilized.wav new file mode 100644 index 000000000000..d2da281e12e2 Binary files /dev/null and b/sound/voice/Hevsounds/wound_sterilized.wav differ diff --git a/sql/README.md b/sql/README.md new file mode 100644 index 000000000000..193118249fc7 --- /dev/null +++ b/sql/README.md @@ -0,0 +1,38 @@ +# SQL + +The SQL database is managed by flyway. + +Migrations are in sql/migrations. + +## What happened to prefixes? + +Prefixes are no longer necessary. + +## How To Deal With Old Tables + +Data may **never** be destroyed by migrations, only deprecated. + +Prefix them with `legacy_`. + +## Table Groupings + +### Backend - `backend_` + +Backend store for server systems. Required for persistence to function and for metrics to be recorded. + +Contains: + +- Metrics +- Repositories +- Filestores + +### Character - `character_` + +Character store. Required for character persistence and fast character setup handling. + +Contains: + +- Characters +- Character records +- Character persistence +- Character things in general diff --git a/SQL/database_schema_prefixed.sql b/sql/migrations/V1.0.1__PrepLegacyTables.sql similarity index 94% rename from SQL/database_schema_prefixed.sql rename to sql/migrations/V1.0.1__PrepLegacyTables.sql index 58b5b32cc103..f0b9dfa48ec9 100644 --- a/SQL/database_schema_prefixed.sql +++ b/sql/migrations/V1.0.1__PrepLegacyTables.sql @@ -1,3 +1,5 @@ +-- DIRECT RIP FROM OLD PREFIXED TABLES FILE!! -- + /** * make sure to bump schema version and mark changes in database_changelog.md! * @@ -184,13 +186,13 @@ CREATE TABLE IF NOT EXISTS `rp_playtime_log` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; DELIMITER $$ -CREATE TRIGGER `playtimeTlogupdate` AFTER UPDATE ON `rp_playtime` FOR EACH ROW BEGIN INSERT into `rp_playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes-OLD.minutes); +CREATE TRIGGER IF NOT EXISTS `playtimeTlogupdate` AFTER UPDATE ON `rp_playtime` FOR EACH ROW BEGIN INSERT into `rp_playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes-OLD.minutes); END $$ -CREATE TRIGGER `playtimeTloginsert` AFTER INSERT ON `rp_playtime` FOR EACH ROW BEGIN INSERT into `rp_playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes); +CREATE TRIGGER IF NOT EXISTS `playtimeTloginsert` AFTER INSERT ON `rp_playtime` FOR EACH ROW BEGIN INSERT into `rp_playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes); END $$ -CREATE TRIGGER `playtimeTlogdelete` AFTER DELETE ON `rp_playtime` FOR EACH ROW BEGIN INSERT into `rp_playtime_log` (player, roleid, delta) VALUES (OLD.player, OLD.roleid, 0-OLD.minutes); +CREATE TRIGGER IF NOT EXISTS `playtimeTlogdelete` AFTER DELETE ON `rp_playtime` FOR EACH ROW BEGIN INSERT into `rp_playtime_log` (player, roleid, delta) VALUES (OLD.player, OLD.roleid, 0-OLD.minutes); END $$ DELIMITER ; @@ -381,13 +383,6 @@ CREATE TABLE IF NOT EXISTS `rp_privacy` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -CREATE TABLE IF NOT EXISTS `rp_vr_player_hours` ( - `ckey` varchar(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, - `department` varchar(64) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, - `hours` double NOT NULL, - PRIMARY KEY (`ckey`,`department`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - CREATE TABLE IF NOT EXISTS `rp_death` ( `id` INT(11) NOT NULL AUTO_INCREMENT , `pod` TEXT NOT NULL COMMENT 'Place of death' , diff --git a/sql/migrations/V1.0.2__DeprefixTables.sql b/sql/migrations/V1.0.2__DeprefixTables.sql new file mode 100644 index 000000000000..5f8f6eaedecb --- /dev/null +++ b/sql/migrations/V1.0.2__DeprefixTables.sql @@ -0,0 +1,33 @@ +RENAME TABLE `rp_schema_revision` TO `schema_revision`; +RENAME TABLE `rp_persistence_bulk_entity` TO `persistence_bulk_entity`; +RENAME TABLE `rp_persistence_static_level_objects` TO `persistence_static_level_objects`; +RENAME TABLE `rp_persistence_static_map_objects` TO `persistence_static_map_objects`; +RENAME TABLE `rp_persistence_static_global_objects` TO `persistence_static_global_objects`; +RENAME TABLE `rp_persistence_dynamic_objects` TO `persistence_dynamic_objects`; +RENAME TABLE `rp_persistence_level_metadata` TO `persistence_level_metadata`; +RENAME TABLE `rp_persistence_string_kv` TO `persistence_string_kv`; +RENAME TABLE `rp_pictures` TO `pictures`; +RENAME TABLE `rp_photographs` TO `photographs`; +RENAME TABLE `rp_player_lookup` TO `player_lookup`; +RENAME TABLE `rp_player` TO `player`; +RENAME TABLE `rp_playtime` TO `playtime`; +RENAME TABLE `rp_playtime_log` TO `playtime_log`; +RENAME TABLE `rp_game_preferences` TO `game_preferences`; +RENAME TABLE `rp_ipintel` TO `ipintel`; +RENAME TABLE `rp_round` TO `round`; +RENAME TABLE `rp_connection_log` TO `connection_log`; +RENAME TABLE `rp_character` TO `character`; +RENAME TABLE `rp_admin` TO `admin`; +RENAME TABLE `rp_admin_log` TO `admin_log`; +RENAME TABLE `rp_ban` TO `ban`; +RENAME TABLE `rp_feedback` TO `feedback`; +RENAME TABLE `rp_poll_option` TO `poll_option`; +RENAME TABLE `rp_poll_question` TO `poll_question`; +RENAME TABLE `rp_poll_textreply` TO `poll_textreply`; +RENAME TABLE `rp_poll_vote` TO `poll_vote`; +RENAME TABLE `rp_privacy` TO `privacy`; +RENAME TABLE `rp_death` TO `death`; +RENAME TABLE `rp_karma` TO `karma`; +RENAME TABLE `rp_karmatotals` TO `karmatotals`; +RENAME TABLE `rp_library` TO `library`; +RENAME TABLE `rp_population` TO `population`; diff --git a/sql/migrations/V1.0.3__RemakePlaytimeTriggerJustInCase.sql b/sql/migrations/V1.0.3__RemakePlaytimeTriggerJustInCase.sql new file mode 100644 index 000000000000..83c30bd678cd --- /dev/null +++ b/sql/migrations/V1.0.3__RemakePlaytimeTriggerJustInCase.sql @@ -0,0 +1,15 @@ +DROP TRIGGER IF EXISTS `playtimeTlogupdate`; +DROP TRIGGER IF EXISTS `playtimeTloginsert`; +DROP TRIGGER IF EXISTS `playtimeTlogdelete`; + +DELIMITER $$ +CREATE TRIGGER `playtimeTlogupdate` AFTER UPDATE ON `playtime` FOR EACH ROW BEGIN INSERT into `playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes-OLD.minutes); +END +$$ +CREATE TRIGGER `playtimeTloginsert` AFTER INSERT ON `playtime` FOR EACH ROW BEGIN INSERT into `playtime_log` (player, roleid, delta) VALUES (NEW.player, NEW.roleid, NEW.minutes); +END +$$ +CREATE TRIGGER `playtimeTlogdelete` AFTER DELETE ON `playtime` FOR EACH ROW BEGIN INSERT into `playtime_log` (player, roleid, delta) VALUES (OLD.player, OLD.roleid, 0-OLD.minutes); +END +$$ +DELIMITER ; diff --git a/sql/migrations/V1.0.4__AddRepositoryStore.sql b/sql/migrations/V1.0.4__AddRepositoryStore.sql new file mode 100644 index 000000000000..cec9f077dba7 --- /dev/null +++ b/sql/migrations/V1.0.4__AddRepositoryStore.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS `backend_repository` ( + `repository` VARCHAR(64) NOT NULL, + `id` VARCHAR(128) NOT NULL, + `version` INT(11) NOT NULL, + `data` MEDIUMTEXT NOT NULL, + `createdTime` DATETIME NOT NULL DEFAULT Now(), + `modifiedTime` DATETIME NOT NULL DEFAULT Now(), + PRIMARY KEY(`repository`, `id`), + INDEX(`repository`), + INDEX(`id`) +) diff --git a/SQL/database_changelog.md b/sql_old/database_changelog.md similarity index 100% rename from SQL/database_changelog.md rename to sql_old/database_changelog.md diff --git a/tgui/packages/tgui/interfaces/Clipboard.js b/tgui/packages/tgui/interfaces/Clipboard.tsx similarity index 77% rename from tgui/packages/tgui/interfaces/Clipboard.js rename to tgui/packages/tgui/interfaces/Clipboard.tsx index 15c1fdebee0b..7b48999a5a37 100644 --- a/tgui/packages/tgui/interfaces/Clipboard.js +++ b/tgui/packages/tgui/interfaces/Clipboard.tsx @@ -1,16 +1,28 @@ +import { BooleanLike } from "common/react"; import { useBackend } from "../backend"; import { Box, Button, Divider, - LabeledList, Flex, + LabeledList, Section, } from "../components"; import { Window } from "../layouts"; +type Data = { + pen: string; + integrated_pen: BooleanLike; + top_paper: string; + top_paper_ref: string; + paper: string[]; + paper_ref: string[]; + photo: string[]; + photo_ref: string[]; +}; + export const Clipboard = (props, context) => { - const { act, data } = useBackend(context); + const { act, data } = useBackend(context); const { pen, integrated_pen, @@ -18,6 +30,8 @@ export const Clipboard = (props, context) => { top_paper_ref, paper, paper_ref, + photo, + photo_ref, } = data; return ( @@ -112,6 +126,26 @@ export const Clipboard = (props, context) => { ))} + {photo.length > 0 && } + {photo.map((photo_item, index) => ( + + + {photo_item} + + +