diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 403526d30b..a553cef999 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -210,6 +210,8 @@ This prevents nesting levels from getting deeper then they need to be. * Do not divide when you can easily convert it to a multiplication. (ie `4/2` should be done as `4*0.5`) +* Do not use the shorthand sql insert format (where no column names are specified) because it unnecessarily breaks all queries on minor column changes and prevents using these tables for tracking outside related info such as in a connected site/forum. + #### Enforced not enforced The following different coding styles are not only not enforced, but it is generally frowned upon to change them over from one to the other for little reason: diff --git a/.travis.yml b/.travis.yml index c0a45df72d..0f9c8c3aca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,3 +41,5 @@ script: - tools/travis/build_tools.sh - tools/travis/build_byond.sh +notifications: + email: false diff --git a/README.md b/README.md index 3f0de8c771..d7907987ec 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Based and maintained from /tg/station.
[![Build Status](https://api.travis-ci.org/Citadel-Station-13/Citadel-Station-13.png)](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13) [![Krihelimeter](http://www.krihelinator.xyz/badge/Citadel-Station-13/Citadel-Station-13)](http://www.krihelinator.xyz) +[![Percentage of issues still open](http://isitmaintained.com/badge/open/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open") [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/Citadel-Station-13/Citadel-Station-13.svg)](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue") **Upstream Information**
**Website:** http://www.tgstation13.org
diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index c34c6b694b..d0546da131 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,3 +1,13 @@ +21 April 2017, by Jordie0608 + +Modified table 'player', adding the column 'accountjoindate', removing the column 'id' and making the column 'ckey' the primary key. + +ALTER TABLE `feedback`.`player` DROP COLUMN `id`, ADD COLUMN `accountjoindate` DATE NULL AFTER `lastadminrank`, DROP PRIMARY KEY, ADD PRIMARY KEY (`ckey`), DROP INDEX `ckey`; + +Remember to add a prefix to the table name if you use them. + +---------------------------------------------------- + 10 March 2017, by Jordie0608 Modified table 'death', adding the columns 'toxloss', 'cloneloss', and 'staminaloss' and table 'legacy_population', adding the columns 'server_ip' and 'server_port'. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 77e9b9429e..73e2d465f3 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -1,374 +1,373 @@ -CREATE DATABASE IF NOT EXISTS `feedback` /*!40100 DEFAULT CHARACTER SET latin1 */; -USE `feedback`; - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `admin` --- - -DROP TABLE IF EXISTS `admin`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `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', - `email` varchar(45) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `admin_log` --- - -DROP TABLE IF EXISTS `admin_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `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=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `admin_ranks` --- - -DROP TABLE IF EXISTS `admin_ranks`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `admin_ranks` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `rank` varchar(40) NOT NULL, - `flags` int(16) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `ban` --- - -DROP TABLE IF EXISTS `ban`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ban` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `bantime` datetime NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL, - `reason` varchar(2048) NOT NULL, - `job` varchar(32) DEFAULT NULL, - `duration` int(11) NOT NULL, - `expiration_time` datetime NOT NULL, - `ckey` varchar(32) NOT NULL, - `computerid` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `a_ckey` varchar(32) NOT NULL, - `a_computerid` varchar(32) NOT NULL, - `a_ip` int(10) unsigned NOT NULL, - `who` varchar(2048) NOT NULL, - `adminwho` varchar(2048) NOT NULL, - `edits` text, - `unbanned` tinyint(3) unsigned DEFAULT NULL, - `unbanned_datetime` datetime DEFAULT NULL, - `unbanned_ckey` varchar(32) DEFAULT NULL, - `unbanned_computerid` varchar(32) DEFAULT NULL, - `unbanned_ip` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`), - KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`), - KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `connection_log` --- - -DROP TABLE IF EXISTS `connection_log`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `connection_log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime DEFAULT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `ckey` varchar(45) DEFAULT NULL, - `ip` int(10) unsigned NOT NULL, - `computerid` varchar(45) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `death` --- - -DROP TABLE IF EXISTS `death`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `death` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `pod` varchar(50) NOT NULL, - `coord` varchar(32) NOT NULL, - `mapname` varchar(32) NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - `tod` datetime NOT NULL COMMENT 'Time of death', - `job` varchar(32) NOT NULL, - `special` varchar(32) DEFAULT NULL, - `name` varchar(96) NOT NULL, - `byondkey` varchar(32) NOT NULL, - `laname` varchar(96) DEFAULT NULL, - `lakey` varchar(32) DEFAULT NULL, - `gender` enum('neuter','male','female','plural') NOT NULL, - `bruteloss` smallint(5) unsigned NOT NULL, - `brainloss` smallint(5) unsigned NOT NULL, - `fireloss` smallint(5) unsigned NOT NULL, - `oxyloss` smallint(5) unsigned NOT NULL, - `toxloss` smallint(5) unsigned NOT NULL, - `cloneloss` smallint(5) unsigned NOT NULL, - `staminaloss` smallint(5) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `feedback` --- - -DROP TABLE IF EXISTS `feedback`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `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; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `ipintel` --- - -DROP TABLE IF EXISTS `ipintel`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `ipintel` ( - `ip` int(10) unsigned NOT NULL, - `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `intel` double NOT NULL DEFAULT '0', - PRIMARY KEY (`ip`), - KEY `idx_ipintel` (`ip`,`intel`,`date`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `legacy_population` --- - -DROP TABLE IF EXISTS `legacy_population`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `legacy_population` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `playercount` int(11) DEFAULT NULL, - `admincount` int(11) DEFAULT NULL, - `time` datetime NOT NULL, - `server_ip` int(10) unsigned NOT NULL, - `server_port` smallint(5) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `library` --- - -DROP TABLE IF EXISTS `library`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `library` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `author` varchar(45) NOT NULL, - `title` varchar(45) NOT NULL, - `content` text NOT NULL, - `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, - `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', - `datetime` datetime NOT NULL, - `deleted` tinyint(1) unsigned DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `deleted_idx` (`deleted`), - KEY `idx_lib_id_del` (`id`,`deleted`), - KEY `idx_lib_del_title` (`deleted`,`title`), - KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `messages` --- - -DROP TABLE IF EXISTS `messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `messages` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `type` enum('memo','message','message sent','note','watchlist entry') NOT NULL, - `targetckey` varchar(32) NOT NULL, - `adminckey` varchar(32) NOT NULL, - `text` varchar(2048) NOT NULL, - `timestamp` datetime NOT NULL, - `server` varchar(32) DEFAULT NULL, - `secret` tinyint(1) unsigned NOT NULL, - `lasteditor` varchar(32) DEFAULT NULL, - `edits` text, - PRIMARY KEY (`id`), - KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`), - KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`), - KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `player` --- - -DROP TABLE IF EXISTS `player`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `player` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `ckey` varchar(32) NOT NULL, - `firstseen` datetime NOT NULL, - `lastseen` datetime NOT NULL, - `ip` int(10) unsigned NOT NULL, - `computerid` varchar(32) NOT NULL, - `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - UNIQUE KEY `ckey` (`ckey`), - KEY `idx_player_cid_ckey` (`computerid`,`ckey`), - KEY `idx_player_ip_ckey` (`ip`,`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_option` --- - -DROP TABLE IF EXISTS `poll_option`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `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`), - KEY `idx_pop_pollid` (`pollid`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_question` --- - -DROP TABLE IF EXISTS `poll_question`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `poll_question` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL, - `starttime` datetime NOT NULL, - `endtime` datetime NOT NULL, - `question` varchar(255) NOT NULL, - `adminonly` tinyint(1) unsigned NOT NULL, - `multiplechoiceoptions` int(2) DEFAULT NULL, - `createdby_ckey` varchar(32) DEFAULT NULL, - `createdby_ip` int(10) unsigned NOT NULL, - `dontshow` tinyint(1) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`), - KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`), - KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_textreply` --- - -DROP TABLE IF EXISTS `poll_textreply`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `poll_textreply` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `datetime` datetime NOT NULL, - `pollid` int(11) NOT NULL, - `ckey` varchar(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `replytext` varchar(2048) NOT NULL, - `adminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `poll_vote` --- - -DROP TABLE IF EXISTS `poll_vote`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `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(32) NOT NULL, - `ip` int(10) unsigned NOT NULL, - `adminrank` varchar(32) NOT NULL, - `rating` int(2) DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`), - KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +CREATE DATABASE IF NOT EXISTS `feedback` /*!40100 DEFAULT CHARACTER SET latin1 */; +USE `feedback`; + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `admin` +-- + +DROP TABLE IF EXISTS `admin`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `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', + `email` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_log` +-- + +DROP TABLE IF EXISTS `admin_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `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=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_ranks` +-- + +DROP TABLE IF EXISTS `admin_ranks`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_ranks` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `rank` varchar(40) NOT NULL, + `flags` int(16) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `ban` +-- + +DROP TABLE IF EXISTS `ban`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ban` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bantime` datetime NOT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL, + `reason` varchar(2048) NOT NULL, + `job` varchar(32) DEFAULT NULL, + `duration` int(11) NOT NULL, + `expiration_time` datetime NOT NULL, + `ckey` varchar(32) NOT NULL, + `computerid` varchar(32) NOT NULL, + `ip` int(10) unsigned NOT NULL, + `a_ckey` varchar(32) NOT NULL, + `a_computerid` varchar(32) NOT NULL, + `a_ip` int(10) unsigned NOT NULL, + `who` varchar(2048) NOT NULL, + `adminwho` varchar(2048) NOT NULL, + `edits` text, + `unbanned` tinyint(3) unsigned DEFAULT NULL, + `unbanned_datetime` datetime DEFAULT NULL, + `unbanned_ckey` varchar(32) DEFAULT NULL, + `unbanned_computerid` varchar(32) DEFAULT NULL, + `unbanned_ip` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`), + KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`), + KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `connection_log` +-- + +DROP TABLE IF EXISTS `connection_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `connection_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime DEFAULT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `ckey` varchar(45) DEFAULT NULL, + `ip` int(10) unsigned NOT NULL, + `computerid` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `death` +-- + +DROP TABLE IF EXISTS `death`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `death` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pod` varchar(50) NOT NULL, + `coord` varchar(32) NOT NULL, + `mapname` varchar(32) NOT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `tod` datetime NOT NULL COMMENT 'Time of death', + `job` varchar(32) NOT NULL, + `special` varchar(32) DEFAULT NULL, + `name` varchar(96) NOT NULL, + `byondkey` varchar(32) NOT NULL, + `laname` varchar(96) DEFAULT NULL, + `lakey` varchar(32) DEFAULT NULL, + `gender` enum('neuter','male','female','plural') NOT NULL, + `bruteloss` smallint(5) unsigned NOT NULL, + `brainloss` smallint(5) unsigned NOT NULL, + `fireloss` smallint(5) unsigned NOT NULL, + `oxyloss` smallint(5) unsigned NOT NULL, + `toxloss` smallint(5) unsigned NOT NULL, + `cloneloss` smallint(5) unsigned NOT NULL, + `staminaloss` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `feedback` +-- + +DROP TABLE IF EXISTS `feedback`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `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; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `ipintel` +-- + +DROP TABLE IF EXISTS `ipintel`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `ipintel` ( + `ip` int(10) unsigned NOT NULL, + `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `intel` double NOT NULL DEFAULT '0', + PRIMARY KEY (`ip`), + KEY `idx_ipintel` (`ip`,`intel`,`date`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `legacy_population` +-- + +DROP TABLE IF EXISTS `legacy_population`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `legacy_population` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `playercount` int(11) DEFAULT NULL, + `admincount` int(11) DEFAULT NULL, + `time` datetime NOT NULL, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `library` +-- + +DROP TABLE IF EXISTS `library`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `library` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `author` varchar(45) NOT NULL, + `title` varchar(45) NOT NULL, + `content` text NOT NULL, + `category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL, + `ckey` varchar(32) NOT NULL DEFAULT 'LEGACY', + `datetime` datetime NOT NULL, + `deleted` tinyint(1) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `deleted_idx` (`deleted`), + KEY `idx_lib_id_del` (`id`,`deleted`), + KEY `idx_lib_del_title` (`deleted`,`title`), + KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `messages` +-- + +DROP TABLE IF EXISTS `messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `messages` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `type` enum('memo','message','message sent','note','watchlist entry') NOT NULL, + `targetckey` varchar(32) NOT NULL, + `adminckey` varchar(32) NOT NULL, + `text` varchar(2048) NOT NULL, + `timestamp` datetime NOT NULL, + `server` varchar(32) DEFAULT NULL, + `secret` tinyint(1) unsigned NOT NULL, + `lasteditor` varchar(32) DEFAULT NULL, + `edits` text, + PRIMARY KEY (`id`), + KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`), + KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`), + KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `player` +-- + +DROP TABLE IF EXISTS `player`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `player` ( + `ckey` varchar(32) NOT NULL, + `firstseen` datetime NOT NULL, + `lastseen` datetime NOT NULL, + `ip` int(10) unsigned NOT NULL, + `computerid` varchar(32) NOT NULL, + `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', + `accountjoindate` DATE DEFAULT NULL, + PRIMARY KEY (`ckey`), + KEY `idx_player_cid_ckey` (`computerid`,`ckey`), + KEY `idx_player_ip_ckey` (`ip`,`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_option` +-- + +DROP TABLE IF EXISTS `poll_option`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `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`), + KEY `idx_pop_pollid` (`pollid`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_question` +-- + +DROP TABLE IF EXISTS `poll_question`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `poll_question` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL, + `starttime` datetime NOT NULL, + `endtime` datetime NOT NULL, + `question` varchar(255) NOT NULL, + `adminonly` tinyint(1) unsigned NOT NULL, + `multiplechoiceoptions` int(2) DEFAULT NULL, + `createdby_ckey` varchar(32) DEFAULT NULL, + `createdby_ip` int(10) unsigned NOT NULL, + `dontshow` tinyint(1) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`), + KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`), + KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_textreply` +-- + +DROP TABLE IF EXISTS `poll_textreply`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `poll_textreply` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `datetime` datetime NOT NULL, + `pollid` int(11) NOT NULL, + `ckey` varchar(32) NOT NULL, + `ip` int(10) unsigned NOT NULL, + `replytext` varchar(2048) NOT NULL, + `adminrank` varchar(32) NOT NULL DEFAULT 'Player', + PRIMARY KEY (`id`), + KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `poll_vote` +-- + +DROP TABLE IF EXISTS `poll_vote`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `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(32) NOT NULL, + `ip` int(10) unsigned NOT NULL, + `adminrank` varchar(32) NOT NULL, + `rating` int(2) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`), + KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index be27384ea5..4d74b9deaa 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -261,15 +261,14 @@ DROP TABLE IF EXISTS `SS13_player`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `SS13_player` ( - `id` int(11) NOT NULL AUTO_INCREMENT, `ckey` varchar(32) NOT NULL, `firstseen` datetime NOT NULL, `lastseen` datetime NOT NULL, `ip` int(10) unsigned NOT NULL, `computerid` varchar(32) NOT NULL, `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', - PRIMARY KEY (`id`), - UNIQUE KEY `ckey` (`ckey`), + `accountjoindate` DATE DEFAULT NULL, + PRIMARY KEY (`ckey`), KEY `idx_player_cid_ckey` (`computerid`,`ckey`), KEY `idx_player_ip_ckey` (`ip`,`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/Test.txt b/Test.txt deleted file mode 100644 index 68db24f630..0000000000 --- a/Test.txt +++ /dev/null @@ -1 +0,0 @@ -~~ \ No newline at end of file diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm index 167aa9ef1b..1c47260f2c 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm @@ -148,10 +148,8 @@ /area/ruin/powered/golem_ship) "u" = ( /obj/structure/table/wood, -/obj/item/weapon/bedsheet/rd{ - desc = "Majestic."; +/obj/item/weapon/bedsheet/rd/royal_cape{ layer = 3; - name = "Royal Cape of the Liberator"; pixel_x = 5; pixel_y = 9 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 711ee674ee..930fea83aa 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -84,6 +84,7 @@ /area/ruin/powered) "p" = ( /obj/structure/rack, +/obj/item/weapon/storage/bag/plants/portaseeder, /obj/item/weapon/storage/bag/ore, /obj/item/weapon/storage/firstaid/regular, /turf/open/floor/plating/asteroid/basalt, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index 65d7aac80f..64c1a7cb26 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -9,19 +9,89 @@ /turf/closed/wall/r_wall, /area/ruin/powered) "d" = ( -/obj/structure/shuttle/engine/propulsion{ - icon_state = "propulsion"; - dir = 8 +/obj/structure/table/wood, +/obj/item/weapon/lighter, +/obj/item/weapon/lighter, +/obj/item/weapon/storage/fancy/rollingpapers, +/obj/item/weapon/storage/fancy/rollingpapers, +/obj/item/weapon/storage/fancy/rollingpapers, +/obj/item/weapon/storage/fancy/rollingpapers, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth }, -/turf/closed/mineral/volcanic/lava_land_surface, -/area/lavaland/surface/outdoors) +/area/ruin/powered) "e" = ( -/obj/machinery/smartfridge, +/obj/structure/table/wood, +/obj/item/weapon/storage/box/disks_plantgene, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) "f" = ( +/obj/machinery/plantgenes/seedvault, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"g" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"h" = ( +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"i" = ( +/obj/structure/closet/crate/hydroponics, +/obj/structure/beebox, +/obj/item/weapon/melee/flyswatter, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/queen_bee/bought, +/obj/item/clothing/head/beekeeper_head, +/obj/item/clothing/suit/beekeeper_suit, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"j" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion"; + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"k" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/seed_vault, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"l" = ( +/obj/machinery/door/airlock, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"m" = ( +/obj/structure/shuttle/engine/propulsion{ + icon_state = "propulsion"; + dir = 8 + }, +/turf/open/space/basic, +/area/lavaland/surface/outdoors) +"n" = ( +/obj/machinery/smartfridge, +/turf/open/floor/plasteel/freezer{ + baseturf = /turf/open/floor/plating/lava/smooth + }, +/area/ruin/powered) +"o" = ( /obj/structure/closet/crate/hydroponics, /obj/item/weapon/cultivator, /obj/item/weapon/cultivator, @@ -39,34 +109,22 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"g" = ( +"p" = ( /obj/machinery/hydroponics/constructable, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"h" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/seed_vault, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"i" = ( -/obj/machinery/plantgenes/seedvault, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"j" = ( +"q" = ( /obj/item/weapon/hatchet, /obj/item/weapon/storage/bag/plants, /obj/item/weapon/reagent_containers/glass/bucket, +/obj/structure/table/wood, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"k" = ( +"r" = ( /obj/structure/table/wood, /obj/item/weapon/storage/bag/plants, /obj/item/weapon/storage/bag/plants, @@ -76,7 +134,7 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"l" = ( +"s" = ( /obj/structure/table/wood, /obj/item/weapon/gun/energy/floragun, /obj/item/weapon/gun/energy/floragun, @@ -87,25 +145,13 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"m" = ( -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"n" = ( -/obj/structure/shuttle/engine/propulsion{ - icon_state = "propulsion"; - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"o" = ( +"t" = ( /obj/effect/mob_spawn/human/seed_vault, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"p" = ( +"u" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -116,19 +162,19 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"q" = ( +"v" = ( /obj/machinery/vending/hydronutrients, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"r" = ( +"w" = ( /obj/machinery/vending/hydroseeds, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"s" = ( +"x" = ( /obj/machinery/reagentgrinder{ pixel_y = 5 }, @@ -141,7 +187,7 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"t" = ( +"y" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -152,57 +198,51 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"u" = ( -/obj/machinery/door/airlock, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/lava/smooth - }, -/area/ruin/powered) -"v" = ( +"z" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"w" = ( +"A" = ( /obj/machinery/door/airlock/external, /obj/structure/fans/tiny, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"x" = ( +"B" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/bin, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"y" = ( +"C" = ( /obj/machinery/seed_extractor, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"z" = ( +"D" = ( /obj/machinery/biogenerator, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"A" = ( -/obj/machinery/chem_dispenser/mutagen, +"E" = ( +/obj/machinery/chem_dispenser/mutagensaltpeter, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"B" = ( +"F" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"C" = ( +"G" = ( /obj/structure/closet/crate/hydroponics, /obj/item/clothing/under/rank/hydroponics, /obj/item/clothing/under/rank/hydroponics, @@ -212,13 +252,13 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"D" = ( +"H" = ( /obj/machinery/chem_master/condimaster, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"E" = ( +"I" = ( /obj/structure/table/wood, /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/reagent_containers/glass/bucket, @@ -228,25 +268,25 @@ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"F" = ( +"J" = ( /obj/item/weapon/storage/toolbox/syndicate, /obj/structure/table/wood, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/lava/smooth }, /area/ruin/powered) -"G" = ( +"K" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/ruin/powered) -"H" = ( +"L" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"I" = ( +"M" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -284,10 +324,10 @@ a a a c -o -o -o -o +t +t +t +t c a a @@ -299,17 +339,17 @@ b "} (3,1,1) = {" b -b +a a a a a c c -m -m -m -m +h +h +h +h c c a @@ -321,16 +361,16 @@ b "} (4,1,1) = {" b -b -a a a c c c c -u -u +c +c +l +l c c c @@ -344,18 +384,18 @@ a (5,1,1) = {" a a -a -a -a c -e -m -p -m -m -p -m -p +c +k +c +n +h +u +h +h +u +h +u c a a @@ -366,18 +406,18 @@ a (6,1,1) = {" a a -a -a -a c -f -m -m -m -m -m -m -C +d +h +c +o +h +h +h +h +h +h +G c a a @@ -388,18 +428,18 @@ a (7,1,1) = {" a a -a -a -a c -g -m -g -m -m -g -m -g +e +h +c +p +h +p +h +h +p +h +p c a a @@ -408,44 +448,44 @@ a a "} (8,1,1) = {" -a -a -a -a +b a c +e +h +l +h +h +v +h h -m -q -m -m -x B -B -G -H +F +F +K +L a a a a "} (9,1,1) = {" -a -a -a -a +b a c -i -m -e -m -m -y -m -m +f +h c -I +p +h +n +h +h +C +h +k +c +M a a a @@ -454,18 +494,18 @@ a (10,1,1) = {" a a -a -a -a c g -m -r -m -m -z -m -g +h +c +p +h +w +h +h +D +h +p c b a @@ -476,18 +516,18 @@ a (11,1,1) = {" a a -a -a -a c -j -m -s -m -m -A -m -D +h +h +c +q +h +x +h +h +E +h +H c a a @@ -496,20 +536,20 @@ a a "} (12,1,1) = {" -a -a -a -a +b a c -g -m -m -m -m -m -m -g +h +h +c +p +h +h +h +h +h +h +p c a a @@ -520,18 +560,18 @@ a (13,1,1) = {" a a -a -a -a c -k -m -m -g -g -m -m -E +i +h +c +r +h +h +p +p +h +h +I c a a @@ -542,18 +582,18 @@ a (14,1,1) = {" a a -a -a -a c -l -m -t -m -m -t -m -F +c +i +c +s +h +y +h +h +y +h +J c a a @@ -564,15 +604,15 @@ a (15,1,1) = {" a a -a -a -a +b c c c c -v -v +c +c +z +z c c c @@ -584,21 +624,21 @@ a a "} (16,1,1) = {" -a -a b a -a -d +b +j c -n +j c -m -m +j c -n +h +h c -n +j +c +j a a a @@ -611,12 +651,12 @@ a a a a -b a -b +a +a c -w -w +A +A c b b diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index d3209424b5..e413e2ddba 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -730,7 +730,7 @@ }, /area/ruin/powered/syndicate_lava_base) "bN" = ( -/obj/machinery/smartfridge/chemistry/virology, +/obj/machinery/smartfridge/chemistry/virology/preloaded, /turf/open/floor/plasteel/podhatch{ tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; diff --git a/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm b/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm index 6a50999385..94d7274849 100644 --- a/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm +++ b/_maps/RandomRuins/SpaceRuins/dragoontomb.dmm @@ -6,7 +6,9 @@ /turf/open/floor/plating/asteroid/airless, /area/ruin/unpowered/no_grav) "c" = ( -/turf/closed/mineral/volcanic/lava_land_surface, +/turf/closed/mineral/volcanic/lava_land_surface{ + baseturf = /turf/open/floor/plating/asteroid + }, /area/ruin/unpowered/no_grav) "d" = ( /mob/living/simple_animal/hostile/flan/water, diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 8ff8431a91..9bf2719f21 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -198,8 +198,8 @@ /area/awaymission/research/interior/engineering) "aL" = ( /obj/structure/table, -/obj/item/weapon/c4, -/obj/item/weapon/c4, +/obj/item/weapon/grenade/plastic/c4, +/obj/item/weapon/grenade/plastic/c4, /obj/item/weapon/storage/toolbox/syndicate, /turf/open/floor/mineral/plastitanium, /area/awaymission/research/interior/engineering) diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index a895d214ae..bac50dd89a 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -3948,7 +3948,7 @@ }, /area/awaymission/snowdin) "kB" = ( -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = 2; pixel_y = 1 }, diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm index 3ffc9f9a6a..699229e6db 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/spacebattle.dmm @@ -357,7 +357,7 @@ /area/awaymission/spacebattle/syndicate2) "bl" = ( /obj/structure/table/reinforced, -/obj/item/weapon/c4, +/obj/item/weapon/grenade/plastic/c4, /turf/open/floor/mineral/plastitanium, /area/awaymission/spacebattle/syndicate3) "bm" = ( @@ -366,7 +366,7 @@ /area/awaymission/spacebattle/syndicate1) "bn" = ( /obj/structure/table/reinforced, -/obj/item/weapon/c4, +/obj/item/weapon/grenade/plastic/c4, /turf/open/floor/mineral/plastitanium, /area/awaymission/spacebattle/syndicate1) "bo" = ( diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm index f10211f5b1..0bcbf8da32 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -1,4 +1,5 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//Model dictionary trimmed on: 12-05-2017 18:47 (UTC) "aaa" = ( /turf/open/space, /area/space) @@ -1073,23 +1074,23 @@ /area/ai_monitored/turret_protected/ai) "acq" = ( /obj/structure/table, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = 2; pixel_y = -5 }, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = -3; pixel_y = 3 }, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = 2; pixel_y = -3 }, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = -2; pixel_y = -1 }, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = 3; pixel_y = 3 }, @@ -1274,12 +1275,6 @@ /turf/open/space, /area/space) "acJ" = ( -/obj/effect/landmark/start/cyborg, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"acK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -1291,7 +1286,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"acL" = ( +"acK" = ( /obj/machinery/camera/motion{ c_tag = "AI Core South-East"; dir = 1; @@ -1301,7 +1296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"acM" = ( +"acL" = ( /obj/machinery/door/window{ base_state = "right"; dir = 4; @@ -1311,25 +1306,25 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"acN" = ( +"acM" = ( /turf/open/space, /turf/closed/wall/mineral/plastitanium{ dir = 1; icon_state = "diagonalWall3" }, /area/shuttle/syndicate) -"acO" = ( +"acN" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"acP" = ( +"acO" = ( /obj/machinery/light, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"acQ" = ( +"acP" = ( /obj/item/device/radio/intercom{ desc = "Talk through this. Evilly"; freerange = 1; @@ -1345,13 +1340,13 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"acR" = ( +"acQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"acS" = ( +"acR" = ( /obj/machinery/door/airlock/hatch{ name = "AI Core Hallway"; req_one_access_txt = "65" @@ -1367,13 +1362,13 @@ dir = 5 }, /area/ai_monitored/turret_protected/ai) -"acT" = ( +"acS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"acU" = ( +"acT" = ( /obj/machinery/sleeper/syndie{ dir = 4 }, @@ -1381,24 +1376,24 @@ dir = 5 }, /area/shuttle/syndicate) -"acV" = ( +"acU" = ( /turf/open/floor/plasteel/vault{ dir = 5 }, /area/shuttle/syndicate) -"acW" = ( +"acV" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/shuttle/syndicate) -"acX" = ( +"acW" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/shuttle/syndicate) -"acY" = ( +"acX" = ( /obj/structure/table, /obj/item/stack/medical/ointment, /obj/item/stack/medical/bruise_pack, @@ -1410,7 +1405,7 @@ dir = 5 }, /area/shuttle/syndicate) -"acZ" = ( +"acY" = ( /obj/structure/table, /obj/item/weapon/stock_parts/cell/high{ pixel_x = -3; @@ -1419,7 +1414,7 @@ /obj/item/weapon/stock_parts/cell/high, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"ada" = ( +"acZ" = ( /obj/structure/table, /obj/item/weapon/screwdriver{ pixel_y = 9 @@ -1429,13 +1424,13 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"adb" = ( +"ada" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/device/assembly/infra, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"adc" = ( +"adb" = ( /obj/structure/table, /obj/item/device/assembly/signaler, /obj/item/device/assembly/signaler, @@ -1449,7 +1444,7 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"add" = ( +"adc" = ( /obj/structure/table, /obj/item/weapon/weldingtool/largetank{ pixel_y = 3 @@ -1457,35 +1452,17 @@ /obj/item/device/multitool, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"ade" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adf" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/structure/disposaloutlet, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adg" = ( +"add" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adh" = ( +"ade" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adi" = ( +"adf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1493,7 +1470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adj" = ( +"adg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -1505,7 +1482,7 @@ dir = 5 }, /area/ai_monitored/turret_protected/ai) -"adk" = ( +"adh" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -1513,7 +1490,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adl" = ( +"adi" = ( /obj/machinery/ai_status_display{ pixel_x = 32 }, @@ -1521,7 +1498,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adm" = ( +"adj" = ( /obj/structure/bed/roller, /obj/machinery/light{ icon_state = "tube1"; @@ -1531,11 +1508,11 @@ dir = 5 }, /area/shuttle/syndicate) -"adn" = ( +"adk" = ( /obj/structure/sign/bluecross_2, /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate) -"ado" = ( +"adl" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/syndicate, /obj/item/weapon/crowbar/red, @@ -1545,44 +1522,17 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"adp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adq" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adr" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/window/brigdoor/southleft{ - name = "Armory Delievery Chute"; - req_access_txt = "3" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"ads" = ( +"adm" = ( /turf/closed/wall, /area/mine/unexplored{ name = "Command Asteroid" }) -"adt" = ( +"adn" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adu" = ( +"ado" = ( /obj/machinery/light{ dir = 1 }, @@ -1590,25 +1540,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adv" = ( +"adp" = ( /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adw" = ( +"adq" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"adx" = ( +"adr" = ( /obj/effect/decal/remains/human, /obj/effect/landmark/revenantspawn, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"ady" = ( +"ads" = ( /obj/machinery/porta_turret/ai{ dir = 4; installation = /obj/item/weapon/gun/energy/e_gun @@ -1621,7 +1571,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adz" = ( +"adt" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -1637,7 +1587,7 @@ dir = 5 }, /area/ai_monitored/turret_protected/ai) -"adA" = ( +"adu" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -1647,7 +1597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adB" = ( +"adv" = ( /obj/machinery/porta_turret/ai{ dir = 4; installation = /obj/item/weapon/gun/energy/e_gun @@ -1660,7 +1610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adC" = ( +"adw" = ( /obj/machinery/door/window{ dir = 4; name = "Infirmary"; @@ -1670,20 +1620,14 @@ dir = 5 }, /area/shuttle/syndicate) -"adD" = ( +"adx" = ( /obj/machinery/door/window/westright{ name = "Tool Storage"; req_access_txt = "150" }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"adE" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adF" = ( +"ady" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -1702,36 +1646,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"adG" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Armory APC"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/turf/open/floor/plasteel/darkred/side{ - icon_state = "darkred"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adH" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/darkred/side{ - icon_state = "darkred"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adI" = ( +"adz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -1743,7 +1658,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"adJ" = ( +"adA" = ( /obj/item/weapon/grenade/barrier{ pixel_x = 4 }, @@ -1759,7 +1674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"adK" = ( +"adB" = ( /obj/structure/table, /obj/item/weapon/storage/box/firingpins{ pixel_x = 1; @@ -1775,46 +1690,37 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"adL" = ( -/obj/machinery/flasher/portable, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/delivery{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"adM" = ( +"adC" = ( /obj/machinery/flasher/portable, /turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"adN" = ( +"adD" = ( /obj/machinery/telecomms/server/presets/engineering, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adO" = ( +"adE" = ( /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adP" = ( +"adF" = ( /obj/machinery/telecomms/bus/preset_three, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adQ" = ( +"adG" = ( /obj/machinery/telecomms/server/presets/security, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adR" = ( +"adH" = ( /obj/machinery/power/apc{ cell_type = 5000; dir = 1; @@ -1830,14 +1736,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"adS" = ( +"adI" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"adT" = ( +"adJ" = ( /obj/machinery/computer/message_monitor, /obj/machinery/camera{ c_tag = "Telecomms Control Room 2"; @@ -1848,7 +1754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"adU" = ( +"adK" = ( /obj/machinery/announcement_system, /obj/machinery/light{ dir = 1 @@ -1857,7 +1763,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"adV" = ( +"adL" = ( /obj/machinery/camera{ c_tag = "AI Hallway"; dir = 5; @@ -1868,7 +1774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"adW" = ( +"adM" = ( /obj/machinery/door/window{ base_state = "right"; dir = 4; @@ -1880,7 +1786,7 @@ dir = 5 }, /area/shuttle/syndicate) -"adX" = ( +"adN" = ( /obj/machinery/door/window{ dir = 8; name = "Tool Storage"; @@ -1888,16 +1794,16 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"adY" = ( +"adO" = ( /obj/machinery/recharge_station, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"adZ" = ( +"adP" = ( /turf/closed/mineral, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aea" = ( +"adQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -1908,7 +1814,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeb" = ( +"adR" = ( /obj/structure/rack, /obj/item/weapon/gun/energy/laser{ pixel_x = -3; @@ -1922,15 +1828,12 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8 }, /area/ai_monitored/security/armory) -"aec" = ( +"adS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -1938,7 +1841,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aed" = ( +"adT" = ( /obj/structure/rack, /obj/item/weapon/gun/energy/ionrifle, /obj/item/weapon/gun/energy/temperature/security, @@ -1948,20 +1851,18 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8 }, /area/ai_monitored/security/armory) -"aee" = ( +"adU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -1969,12 +1870,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aef" = ( +"adV" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeg" = ( +"adW" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -1983,36 +1884,36 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeh" = ( +"adX" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "AI Asteroid" }) -"aei" = ( +"adY" = ( /obj/machinery/telecomms/server/presets/common, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aej" = ( +"adZ" = ( /obj/machinery/telecomms/processor/preset_four, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aek" = ( +"aea" = ( /obj/machinery/telecomms/receiver/preset_right, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ael" = ( +"aeb" = ( /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aem" = ( +"aec" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2023,7 +1924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aen" = ( +"aed" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -2031,7 +1932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aeo" = ( +"aee" = ( /obj/machinery/computer/telecomms/server{ network = "tcommsat" }, @@ -2039,7 +1940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aep" = ( +"aef" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2052,19 +1953,19 @@ dir = 5 }, /area/ai_monitored/turret_protected/ai) -"aeq" = ( +"aeg" = ( /obj/item/weapon/coin/antagtoken, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"aer" = ( +"aeh" = ( /obj/machinery/porta_turret/syndicate{ dir = 5 }, /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate) -"aes" = ( +"aei" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -2075,7 +1976,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aet" = ( +"aej" = ( /obj/machinery/door/window{ dir = 1; name = "Surgery"; @@ -2085,7 +1986,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aeu" = ( +"aek" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -2093,7 +1994,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aev" = ( +"ael" = ( /obj/structure/table, /obj/structure/window/reinforced{ dir = 8 @@ -2111,7 +2012,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aew" = ( +"aem" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular{ pixel_x = 3; @@ -2126,7 +2027,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aex" = ( +"aen" = ( /obj/structure/table, /obj/item/device/sbeacondrop/bomb{ pixel_y = 5 @@ -2134,7 +2035,7 @@ /obj/item/device/sbeacondrop/bomb, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"aey" = ( +"aeo" = ( /obj/structure/table, /obj/item/weapon/grenade/syndieminibomb{ pixel_x = 4; @@ -2145,33 +2046,19 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"aez" = ( +"aep" = ( /turf/closed/mineral/random/labormineral, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aeA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/closet/crate, -/obj/item/weapon/pickaxe/mini, -/obj/item/weapon/pickaxe/mini, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aeB" = ( +"aeq" = ( /turf/open/floor/plasteel/darkred/side{ icon_state = "darkred"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeC" = ( +"aer" = ( /obj/structure/rack, /obj/item/weapon/gun/energy/e_gun{ pixel_x = -3; @@ -2190,12 +2077,12 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aeD" = ( +"aes" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeE" = ( +"aet" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/riot{ pixel_x = -3; @@ -2237,7 +2124,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aeF" = ( +"aeu" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -2245,26 +2132,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeG" = ( +"aev" = ( /obj/machinery/suit_storage_unit/security, /obj/structure/window/reinforced, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aeH" = ( +"aew" = ( /obj/machinery/blackbox_recorder, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeI" = ( +"aex" = ( /obj/machinery/telecomms/broadcaster/preset_right, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeJ" = ( +"aey" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -2274,7 +2161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeK" = ( +"aez" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2285,7 +2172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeL" = ( +"aeA" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -2295,12 +2182,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeM" = ( +"aeB" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aeN" = ( +"aeC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -2310,7 +2197,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"aeO" = ( +"aeD" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2327,7 +2214,7 @@ dir = 5 }, /area/ai_monitored/turret_protected/ai) -"aeP" = ( +"aeE" = ( /obj/structure/table, /obj/item/weapon/surgicaldrill, /obj/item/weapon/circular_saw, @@ -2339,7 +2226,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aeQ" = ( +"aeF" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -2353,12 +2240,12 @@ dir = 5 }, /area/shuttle/syndicate) -"aeR" = ( +"aeG" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/circuit, /area/shuttle/syndicate) -"aeS" = ( +"aeH" = ( /obj/machinery/nuclearbomb/syndicate, /obj/machinery/door/window{ dir = 1; @@ -2367,24 +2254,13 @@ }, /turf/open/floor/circuit, /area/shuttle/syndicate) -"aeT" = ( +"aeI" = ( /obj/machinery/telecomms/allinone{ intercept = 1 }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"aeU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aeV" = ( +"aeJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -2394,32 +2270,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aeW" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aeX" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aeY" = ( +"aeK" = ( /obj/structure/rack, /obj/item/weapon/gun/energy/e_gun/advtaser{ pixel_x = -3; @@ -2435,7 +2286,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aeZ" = ( +"aeL" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/bulletproof{ pixel_x = -3; @@ -2472,7 +2323,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"afa" = ( +"aeM" = ( /mob/living/simple_animal/bot/secbot/beepsky{ desc = "It's Officer Gunsky, the most rootin'-tootin'-point-and shootin' security bot on this side of the galaxy!"; name = "Officer Gunsky" @@ -2481,7 +2332,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afb" = ( +"aeN" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -2490,18 +2341,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afc" = ( +"aeO" = ( /obj/structure/closet/secure_closet/lethalshots, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afd" = ( +"aeP" = ( /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afe" = ( +"aeQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2512,7 +2363,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aff" = ( +"aeR" = ( /obj/machinery/door/airlock/glass_command{ name = "Control Room"; req_access_txt = "19; 61" @@ -2521,7 +2372,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"afg" = ( +"aeS" = ( /obj/structure/table, /obj/item/weapon/cautery, /obj/item/weapon/scalpel, @@ -2529,14 +2380,14 @@ dir = 5 }, /area/shuttle/syndicate) -"afh" = ( +"aeT" = ( /obj/structure/table/optable, /obj/item/weapon/surgical_drapes, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/shuttle/syndicate) -"afi" = ( +"aeU" = ( /obj/structure/table, /obj/item/weapon/retractor, /obj/item/weapon/hemostat, @@ -2544,21 +2395,21 @@ dir = 5 }, /area/shuttle/syndicate) -"afj" = ( +"aeV" = ( /turf/open/space, /area/shuttle/syndicate) -"afk" = ( +"aeW" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/reinforced{ dir = 1 }, /turf/open/floor/plating, /area/shuttle/syndicate) -"afl" = ( +"aeX" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"afm" = ( +"aeY" = ( /obj/structure/table, /obj/item/stack/sheet/metal{ amount = 50 @@ -2571,13 +2422,13 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"afn" = ( +"aeZ" = ( /obj/structure/rack, /obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"afo" = ( +"afa" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -2585,7 +2436,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afp" = ( +"afb" = ( /obj/machinery/light/small, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -2593,17 +2444,17 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afq" = ( +"afc" = ( /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afr" = ( +"afd" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"afs" = ( +"afe" = ( /obj/structure/rack, /obj/item/weapon/gun/ballistic/shotgun/riot{ pixel_x = -3; @@ -2619,7 +2470,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aft" = ( +"aff" = ( /obj/structure/rack, /obj/item/weapon/gun/energy/e_gun/dragnet, /obj/item/weapon/gun/energy/e_gun/dragnet, @@ -2634,13 +2485,13 @@ dir = 8 }, /area/ai_monitored/security/armory) -"afu" = ( +"afg" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afv" = ( +"afh" = ( /obj/machinery/suit_storage_unit/security, /obj/structure/window/reinforced{ dir = 1 @@ -2649,12 +2500,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afw" = ( +"afi" = ( /turf/closed/wall, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afx" = ( +"afj" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -2669,7 +2520,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afy" = ( +"afk" = ( /obj/structure/disposaloutlet{ icon_state = "outlet"; dir = 1 @@ -2680,7 +2531,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afz" = ( +"afl" = ( /obj/machinery/power/terminal{ dir = 4 }, @@ -2694,7 +2545,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afA" = ( +"afm" = ( /obj/machinery/power/smes{ charge = 5e+006 }, @@ -2705,7 +2556,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afB" = ( +"afn" = ( /obj/machinery/telecomms/hub/preset, /obj/structure/cable{ d1 = 4; @@ -2717,7 +2568,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afC" = ( +"afo" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -2738,7 +2589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afD" = ( +"afp" = ( /obj/machinery/door/airlock/glass_engineering{ cyclelinkeddir = 4; name = "Server Room"; @@ -2755,7 +2606,7 @@ dir = 5 }, /area/tcommsat/computer) -"afE" = ( +"afq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2767,7 +2618,7 @@ dir = 5 }, /area/tcommsat/computer) -"afF" = ( +"afr" = ( /obj/machinery/door/airlock/glass_engineering{ cyclelinkeddir = 8; name = "Server Room"; @@ -2784,7 +2635,7 @@ dir = 5 }, /area/tcommsat/computer) -"afG" = ( +"afs" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -2797,36 +2648,36 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"afH" = ( +"aft" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_l" }, /turf/open/floor/plating, /area/shuttle/syndicate) -"afI" = ( +"afu" = ( /obj/structure/shuttle/engine/propulsion, /turf/open/floor/plating, /area/shuttle/syndicate) -"afJ" = ( +"afv" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_r" }, /turf/open/floor/plating, /area/shuttle/syndicate) -"afK" = ( +"afw" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afL" = ( +"afx" = ( /obj/machinery/vending/sustenance, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"afM" = ( +"afy" = ( /obj/structure/rack, /obj/item/weapon/storage/box/rubbershot{ pixel_x = -3; @@ -2852,7 +2703,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"afN" = ( +"afz" = ( /obj/structure/rack, /obj/item/weapon/storage/box/teargas{ pixel_x = -3; @@ -2874,7 +2725,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"afO" = ( +"afA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -2882,7 +2733,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afP" = ( +"afB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -2894,7 +2745,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afQ" = ( +"afC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -2904,17 +2755,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afR" = ( +"afD" = ( /turf/closed/mineral/random/labormineral, /area/security/transfer) -"afS" = ( +"afE" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afT" = ( +"afF" = ( /obj/machinery/light/small{ dir = 4 }, @@ -2929,20 +2780,20 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afU" = ( +"afG" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afV" = ( +"afH" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afW" = ( +"afI" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /turf/open/floor/plating{ @@ -2951,13 +2802,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afX" = ( +"afJ" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afY" = ( +"afK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2975,7 +2826,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"afZ" = ( +"afL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -2983,7 +2834,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aga" = ( +"afM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -2996,7 +2847,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agb" = ( +"afN" = ( /obj/structure/table, /obj/item/weapon/paper_bin, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -3006,7 +2857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agc" = ( +"afO" = ( /obj/structure/table, /obj/item/weapon/folder/blue, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -3016,7 +2867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agd" = ( +"afP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -3024,7 +2875,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"age" = ( +"afQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -3035,7 +2886,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agf" = ( +"afR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -3051,7 +2902,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agg" = ( +"afS" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/machinery/turretid{ name = "AI Chamber turret control"; @@ -3064,7 +2915,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agh" = ( +"afT" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -3076,7 +2927,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agi" = ( +"afU" = ( /obj/machinery/light{ dir = 1 }, @@ -3086,7 +2937,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agj" = ( +"afV" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-09" }, @@ -3096,14 +2947,14 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agk" = ( +"afW" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agl" = ( +"afX" = ( /turf/open/space, /obj/machinery/porta_turret/syndicate{ dir = 6 @@ -3113,7 +2964,7 @@ icon_state = "diagonalWall3" }, /area/shuttle/syndicate) -"agm" = ( +"afY" = ( /turf/open/space, /obj/machinery/porta_turret/syndicate{ dir = 10 @@ -3122,14 +2973,14 @@ icon_state = "diagonalWall3" }, /area/shuttle/syndicate) -"agn" = ( +"afZ" = ( /obj/machinery/hydroponics/soil, /obj/structure/sign/poster/official/do_not_question{ pixel_y = 32 }, /turf/open/floor/plating/asteroid, /area/security/prison) -"ago" = ( +"aga" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light{ dir = 1 @@ -3137,12 +2988,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plating/asteroid, /area/security/prison) -"agp" = ( +"agb" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/random, /turf/open/floor/plating/asteroid, /area/security/prison) -"agq" = ( +"agc" = ( /obj/structure/toilet, /obj/machinery/light/small{ dir = 1 @@ -3151,25 +3002,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"agr" = ( +"agd" = ( /turf/open/floor/plasteel/darkred/side{ icon_state = "darkred"; dir = 10; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"ags" = ( +"age" = ( /turf/open/floor/plasteel/darkred/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"agt" = ( +"agf" = ( /obj/machinery/light, /turf/open/floor/plasteel/darkred/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"agu" = ( +"agg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -3182,13 +3033,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"agv" = ( +"agh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/darkred/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"agw" = ( +"agi" = ( /obj/machinery/light, /obj/vehicle/secway, /obj/effect/turf_decal/stripes/line{ @@ -3198,7 +3049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"agx" = ( +"agj" = ( /obj/machinery/flasher/portable, /obj/machinery/camera/motion{ c_tag = "Armory South"; @@ -3209,18 +3060,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"agy" = ( +"agk" = ( /turf/closed/mineral, /area/security/transfer) -"agz" = ( +"agl" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"agA" = ( +"agm" = ( /turf/open/floor/plating/asteroid, /area/security/transfer) -"agB" = ( +"agn" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -3235,7 +3086,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agC" = ( +"ago" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/cobweb, /obj/structure/reagent_dispensers/fueltank, @@ -3245,7 +3096,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agD" = ( +"agp" = ( /obj/machinery/light/small{ dir = 1 }, @@ -3256,7 +3107,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agE" = ( +"agq" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -3269,7 +3120,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agF" = ( +"agr" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3285,7 +3136,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agG" = ( +"ags" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3298,7 +3149,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agH" = ( +"agt" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3311,7 +3162,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agI" = ( +"agu" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3324,7 +3175,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agJ" = ( +"agv" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3337,7 +3188,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agK" = ( +"agw" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3352,7 +3203,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agL" = ( +"agx" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3369,7 +3220,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agM" = ( +"agy" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -3382,7 +3233,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agN" = ( +"agz" = ( /obj/machinery/light/small{ dir = 1 }, @@ -3393,7 +3244,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agO" = ( +"agA" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -3406,7 +3257,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agP" = ( +"agB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3416,7 +3267,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agQ" = ( +"agC" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -3427,7 +3278,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agR" = ( +"agD" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -3438,7 +3289,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agS" = ( +"agE" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -3451,7 +3302,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agT" = ( +"agF" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -3462,7 +3313,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agU" = ( +"agG" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/conveyor/auto{ dir = 6; @@ -3475,19 +3326,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agV" = ( +"agH" = ( /obj/machinery/message_server, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"agW" = ( +"agI" = ( /obj/machinery/telecomms/broadcaster/preset_left, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"agX" = ( +"agJ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -3497,7 +3348,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agY" = ( +"agK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3509,7 +3360,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agZ" = ( +"agL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3523,7 +3374,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aha" = ( +"agM" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -3542,7 +3393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahb" = ( +"agN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3556,7 +3407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahc" = ( +"agO" = ( /obj/machinery/door/airlock/engineering{ name = "Telecommunications"; req_access_txt = "61" @@ -3574,7 +3425,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahd" = ( +"agP" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -3592,7 +3443,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahe" = ( +"agQ" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -3608,7 +3459,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahf" = ( +"agR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -3619,7 +3470,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahg" = ( +"agS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -3641,7 +3492,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahh" = ( +"agT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -3651,7 +3502,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahi" = ( +"agU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -3666,7 +3517,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahj" = ( +"agV" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -3683,18 +3534,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahk" = ( +"agW" = ( /obj/item/weapon/cultivator, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahl" = ( +"agX" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahm" = ( +"agY" = ( /obj/machinery/door/airlock{ name = "Bathroom" }, @@ -3702,7 +3553,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahn" = ( +"agZ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -3714,7 +3565,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aho" = ( +"aha" = ( /obj/machinery/door/airlock/glass_security{ name = "Armory"; req_access_txt = "3" @@ -3731,7 +3582,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"ahp" = ( +"ahb" = ( /obj/machinery/door/airlock/glass_security{ name = "Armory"; req_access_txt = "3" @@ -3743,13 +3594,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"ahq" = ( -/obj/machinery/light/small{ - dir = 1 +"ahc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 8; + layer = 2.4; + on = 1 }, -/turf/open/floor/plating/asteroid, -/area/security/transfer) -"ahr" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -3761,7 +3616,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahs" = ( +"ahe" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -3772,7 +3627,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aht" = ( +"ahf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3782,7 +3637,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahu" = ( +"ahg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3793,7 +3648,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahv" = ( +"ahh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3804,7 +3659,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahw" = ( +"ahi" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -3815,7 +3670,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahx" = ( +"ahj" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -3827,7 +3682,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahy" = ( +"ahk" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" @@ -3838,7 +3693,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahz" = ( +"ahl" = ( /obj/structure/disposalpipe/junction, /obj/effect/landmark/blobstart, /turf/open/floor/plasteel/floorgrime{ @@ -3847,7 +3702,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahA" = ( +"ahm" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -3858,7 +3713,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahB" = ( +"ahn" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -3869,7 +3724,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahC" = ( +"aho" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -3882,7 +3737,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahD" = ( +"ahp" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -3893,7 +3748,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahE" = ( +"ahq" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -3905,7 +3760,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahF" = ( +"ahr" = ( /obj/machinery/light/small{ dir = 8 }, @@ -3916,7 +3771,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahG" = ( +"ahs" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -3924,7 +3779,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahH" = ( +"aht" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -3932,7 +3787,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahI" = ( +"ahu" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 1 @@ -3943,37 +3798,37 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahJ" = ( +"ahv" = ( /obj/machinery/telecomms/server/presets/supply, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ahK" = ( +"ahw" = ( /obj/machinery/telecomms/bus/preset_two, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ahL" = ( +"ahx" = ( /obj/machinery/telecomms/receiver/preset_left, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ahM" = ( +"ahy" = ( /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ahN" = ( +"ahz" = ( /obj/structure/chair/office/dark, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahO" = ( +"ahA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -3982,7 +3837,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahP" = ( +"ahB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -3993,7 +3848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahQ" = ( +"ahC" = ( /obj/machinery/door/airlock/hatch{ name = "AI Core"; req_one_access_txt = "65" @@ -4011,7 +3866,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahR" = ( +"ahD" = ( /obj/machinery/door/airlock/hatch{ name = "AI Core"; req_one_access_txt = "65" @@ -4023,39 +3878,39 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahS" = ( +"ahE" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahT" = ( +"ahF" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "AI Asteroid" }) -"ahU" = ( +"ahG" = ( /obj/machinery/computer/arcade, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"ahH" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahV" = ( -/turf/open/floor/plasteel/airless/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"ahW" = ( +"ahI" = ( /obj/machinery/holopad, /obj/item/weapon/reagent_containers/glass/bucket, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahX" = ( +"ahJ" = ( /obj/structure/table, /obj/item/weapon/paper_bin, /obj/item/device/radio/intercom{ @@ -4070,22 +3925,11 @@ c_tag = "Brig Long-Term Cells" }, /obj/item/seeds/potato, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 4; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"ahZ" = ( +"ahK" = ( /obj/structure/table, /obj/machinery/computer/libraryconsole/bookmanagement, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -4098,12 +3942,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aia" = ( +"ahL" = ( /turf/open/floor/plating/asteroid, /area/mine/unexplored{ name = "Asteroid" }) -"aib" = ( +"ahM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -4113,7 +3957,7 @@ /area/mine/unexplored{ name = "Asteroid" }) -"aic" = ( +"ahN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -4126,7 +3970,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aid" = ( +"ahO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/darkred/side{ icon_state = "darkred"; @@ -4134,24 +3978,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aie" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/transfer) -"aif" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating/asteroid, -/area/security/transfer) -"aig" = ( +"ahP" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"aih" = ( +"ahQ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -4166,7 +3998,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aii" = ( +"ahR" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4177,7 +4009,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aij" = ( +"ahS" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4189,7 +4021,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aik" = ( +"ahT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4200,7 +4032,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ail" = ( +"ahU" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4216,7 +4048,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aim" = ( +"ahV" = ( /obj/structure/closet/emcloset, /obj/structure/sign/poster/random{ name = "random contraband poster"; @@ -4228,12 +4060,12 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ain" = ( +"ahW" = ( /turf/open/floor/plasteel/floorgrime, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aio" = ( +"ahX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -4241,31 +4073,31 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aip" = ( +"ahY" = ( /obj/machinery/telecomms/server/presets/service, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aiq" = ( +"ahZ" = ( /obj/machinery/telecomms/processor/preset_two, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"air" = ( +"aia" = ( /obj/machinery/telecomms/processor/preset_one, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ais" = ( +"aib" = ( /obj/machinery/telecomms/server/presets/science, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ait" = ( +"aic" = ( /obj/machinery/computer/telecomms/monitor{ network = "tcommsat" }, @@ -4273,14 +4105,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aiu" = ( +"aid" = ( /obj/structure/table, /obj/item/device/radio/off, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aiv" = ( +"aie" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light, /obj/machinery/airalarm{ @@ -4292,7 +4124,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aiw" = ( +"aif" = ( /obj/machinery/power/apc{ dir = 2; name = "Telecoms Control Room APC"; @@ -4303,7 +4135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aix" = ( +"aig" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -4317,7 +4149,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aiy" = ( +"aih" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -4336,7 +4168,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aiz" = ( +"aii" = ( /obj/machinery/light/small{ dir = 1 }, @@ -4351,7 +4183,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aiA" = ( +"aij" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/ai_status_display{ pixel_x = 32 @@ -4362,7 +4194,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aiB" = ( +"aik" = ( /obj/machinery/recharge_station, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -4374,16 +4206,16 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aiC" = ( +"ail" = ( /obj/structure/chair/stool, /obj/structure/sign/poster/official/work_for_a_future{ pixel_x = -32 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiD" = ( +"aim" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -4392,7 +4224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiE" = ( +"ain" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -4401,15 +4233,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiF" = ( +"aio" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiG" = ( +"aip" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -4417,14 +4249,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiH" = ( +"aiq" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiI" = ( +"air" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/northright{ name = "Armory Desk"; @@ -4438,7 +4270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aiJ" = ( +"ais" = ( /obj/machinery/door/poddoor/shutters{ id = "armoryaccess"; name = "Armory Shutters" @@ -4447,7 +4279,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"aiK" = ( +"ait" = ( /obj/machinery/door/airlock/glass_security{ name = "Armory"; req_access_txt = "3" @@ -4464,7 +4296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiL" = ( +"aiu" = ( /obj/machinery/door/airlock/glass_security{ name = "Armory"; req_access_txt = "3" @@ -4476,7 +4308,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiM" = ( +"aiv" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -4498,7 +4330,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiN" = ( +"aiw" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -4510,7 +4342,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiO" = ( +"aix" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -4520,7 +4352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"aiP" = ( +"aiy" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -4530,27 +4362,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"aiQ" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Security Transfer Range APC"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/orange{ - d2 = 8; - icon_state = "0-8" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/transfer) -"aiR" = ( +"aiz" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/mini, /turf/open/floor/plating/asteroid, /area/security/transfer) -"aiS" = ( +"aiA" = ( /obj/structure/girder, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -4558,7 +4375,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiT" = ( +"aiB" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -4571,7 +4388,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiU" = ( +"aiC" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime{ @@ -4580,7 +4397,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiV" = ( +"aiD" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4592,7 +4409,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiW" = ( +"aiE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4602,7 +4419,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiX" = ( +"aiF" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -4613,18 +4430,18 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiY" = ( +"aiG" = ( /obj/structure/table, /turf/open/floor/plasteel/floorgrime, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiZ" = ( +"aiH" = ( /turf/open/floor/plating, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aja" = ( +"aiI" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 9 @@ -4635,7 +4452,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajb" = ( +"aiJ" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -4647,7 +4464,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajc" = ( +"aiK" = ( /obj/machinery/conveyor/auto{ dir = 6; icon_state = "conveyor0"; @@ -4659,7 +4476,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajd" = ( +"aiL" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -4669,19 +4486,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aje" = ( +"aiM" = ( /obj/machinery/light, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ajf" = ( +"aiN" = ( /obj/machinery/telecomms/bus/preset_one, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ajg" = ( +"aiO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -4700,7 +4517,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajh" = ( +"aiP" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -4711,7 +4528,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aji" = ( +"aiQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -4721,10 +4538,10 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajj" = ( +"aiR" = ( /turf/closed/wall, /area/quartermaster/sorting) -"ajk" = ( +"aiS" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4733,7 +4550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ajl" = ( +"aiT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4741,7 +4558,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ajm" = ( +"aiU" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -4750,12 +4567,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ajn" = ( +"aiV" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ajo" = ( +"aiW" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -4764,7 +4581,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajp" = ( +"aiX" = ( /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -4772,7 +4589,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajq" = ( +"aiY" = ( /obj/machinery/light/small{ dir = 1 }, @@ -4784,7 +4601,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajr" = ( +"aiZ" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -4792,7 +4609,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajs" = ( +"aja" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -4802,13 +4619,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajt" = ( +"ajb" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aju" = ( +"ajc" = ( /obj/machinery/light/small{ dir = 4 }, @@ -4819,65 +4636,55 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajv" = ( +"ajd" = ( /obj/machinery/camera{ c_tag = "Prison Screen Monitor"; dir = 4; network = list("Prison") }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aje" = ( +/obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajw" = ( -/obj/structure/table, -/turf/open/floor/plasteel/airless/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"ajx" = ( +"ajf" = ( /obj/structure/table, /obj/item/weapon/storage/pill_bottle/dice, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajy" = ( +"ajg" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajz" = ( +"ajh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajA" = ( +"aji" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajB" = ( +"ajj" = ( /obj/structure/closet/secure_closet/brig, /turf/open/floor/plasteel/darkred{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajC" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"ajD" = ( +"ajk" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -4892,7 +4699,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajE" = ( +"ajl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -4905,7 +4712,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajF" = ( +"ajm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -4913,7 +4720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajG" = ( +"ajn" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -4931,7 +4738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajH" = ( +"ajo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -4941,7 +4748,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajI" = ( +"ajp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -4951,17 +4758,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"ajJ" = ( -/turf/open/floor/plating/astplate{ +"ajq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/transfer) -"ajK" = ( +/area/security/prison) +"ajr" = ( /obj/structure/rack, /obj/item/weapon/shovel, /turf/open/floor/plating/asteroid, /area/security/transfer) -"ajL" = ( +"ajs" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/lootdrop/maintenance, @@ -4971,7 +4781,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajM" = ( +"ajt" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; @@ -4983,20 +4793,20 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajN" = ( +"aju" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/emergency, /turf/open/floor/plating, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajO" = ( +"ajv" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajP" = ( +"ajw" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -5005,7 +4815,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajQ" = ( +"ajx" = ( /obj/machinery/light/small{ dir = 4 }, @@ -5016,7 +4826,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajR" = ( +"ajy" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -5029,7 +4839,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajS" = ( +"ajz" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -5040,7 +4850,7 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"ajT" = ( +"ajA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5048,7 +4858,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ajU" = ( +"ajB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5056,7 +4866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ajV" = ( +"ajC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5066,7 +4876,7 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"ajW" = ( +"ajD" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5076,7 +4886,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajX" = ( +"ajE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5086,7 +4896,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajY" = ( +"ajF" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -5100,7 +4910,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajZ" = ( +"ajG" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -5114,7 +4924,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aka" = ( +"ajH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5124,7 +4934,7 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"akb" = ( +"ajI" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -5135,14 +4945,14 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"akc" = ( +"ajJ" = ( /obj/structure/disposaloutlet{ dir = 8 }, /obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/quartermaster/sorting) -"akd" = ( +"ajK" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -5151,7 +4961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ake" = ( +"ajL" = ( /obj/machinery/conveyor{ dir = 5; icon_state = "conveyor0"; @@ -5162,7 +4972,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akf" = ( +"ajM" = ( /obj/machinery/conveyor{ dir = 8; id = "CargoWaste" @@ -5171,7 +4981,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akg" = ( +"ajN" = ( /obj/machinery/conveyor{ dir = 8; id = "CargoWaste" @@ -5183,7 +4993,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akh" = ( +"ajO" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -5194,7 +5004,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"aki" = ( +"ajP" = ( /obj/structure/disposalpipe/wrapsortjunction{ icon_state = "pipe-j1s"; dir = 8 @@ -5203,7 +5013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akj" = ( +"ajQ" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -5212,7 +5022,7 @@ }, /turf/open/floor/plating/airless, /area/quartermaster/sorting) -"akk" = ( +"ajR" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -5221,7 +5031,7 @@ }, /turf/open/floor/plating/airless, /area/space) -"akl" = ( +"ajS" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5230,7 +5040,7 @@ }, /turf/open/floor/plating, /area/space) -"akm" = ( +"ajT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5241,7 +5051,7 @@ /obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/space) -"akn" = ( +"ajU" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -5249,7 +5059,7 @@ /obj/item/clothing/head/ushanka, /turf/open/floor/plating, /area/space) -"ako" = ( +"ajV" = ( /obj/item/trash/can, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -5257,39 +5067,33 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"akp" = ( +"ajW" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"akq" = ( +"ajX" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"akr" = ( -/obj/structure/chair/stool, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"aks" = ( +"ajY" = ( /obj/structure/bed, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akt" = ( +"ajZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aku" = ( +"aka" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/poddoor/preopen{ id = "permatoggle"; @@ -5299,7 +5103,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akv" = ( +"akb" = ( /obj/machinery/light{ dir = 8 }, @@ -5307,12 +5111,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akw" = ( +"akc" = ( /turf/open/floor/plasteel/darkred{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akx" = ( +"akd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -5324,7 +5128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aky" = ( +"ake" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -5332,7 +5136,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akz" = ( +"akf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -5344,7 +5148,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akA" = ( +"akg" = ( /obj/structure/closet/secure_closet/brig, /obj/machinery/light{ dir = 4; @@ -5354,28 +5158,43 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akB" = ( +"akh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/door/airlock/security{ + name = "Interrogation Room"; + req_access_txt = "0"; + req_one_access_txt = "38;2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"aki" = ( +/obj/machinery/light/small, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"akC" = ( -/obj/machinery/light/small, -/turf/open/floor/plating/asteroid, -/area/security/transfer) -"akD" = ( +"akj" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/asteroid, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_plating = "asteroid_dug"; + icon_state = "asteroid_dug"; + name = "ditch" + }, /area/security/transfer) -"akE" = ( +"akk" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; @@ -5387,19 +5206,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"akF" = ( +"akl" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"akG" = ( +"akm" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Command Asteroid" }) -"akH" = ( +"akn" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -5410,21 +5229,21 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"akI" = ( +"ako" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akJ" = ( +"akp" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akK" = ( +"akq" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -5446,11 +5265,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akL" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"akr" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5463,13 +5278,17 @@ icon_state = "4-8"; pixel_x = 0 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akM" = ( +"aks" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5489,7 +5308,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akN" = ( +"akt" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5502,7 +5321,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akO" = ( +"aku" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5515,24 +5334,24 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akP" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"akv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akQ" = ( +"akw" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -5549,12 +5368,12 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akR" = ( +"akx" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "Cargo Asteroid" }) -"akS" = ( +"aky" = ( /obj/machinery/conveyor{ dir = 9; icon_state = "conveyor0"; @@ -5565,7 +5384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akT" = ( +"akz" = ( /obj/machinery/conveyor{ dir = 4; id = "CargoWaste" @@ -5575,7 +5394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akU" = ( +"akA" = ( /obj/machinery/conveyor{ dir = 4; id = "CargoWaste" @@ -5584,7 +5403,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akV" = ( +"akB" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 8; output_dir = 2 @@ -5593,7 +5412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akW" = ( +"akC" = ( /obj/machinery/mineral/stacking_unit_console{ dir = 2; machinedir = 8 @@ -5602,21 +5421,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akX" = ( +"akD" = ( /obj/item/trash/candy, /turf/open/floor/plating, /area/space) -"akY" = ( +"akE" = ( /obj/effect/decal/remains/human, /obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/space) -"akZ" = ( +"akF" = ( /obj/structure/disposalpipe/segment, /obj/structure/glowshroom/single, /turf/open/floor/plating, /area/space) -"ala" = ( +"akG" = ( /obj/structure/chair{ dir = 8 }, @@ -5626,7 +5445,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alb" = ( +"akH" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 4 @@ -5637,7 +5456,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alc" = ( +"akI" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -5645,7 +5464,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ald" = ( +"akJ" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 8 @@ -5656,7 +5475,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ale" = ( +"akK" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/astplate{ @@ -5665,7 +5484,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alf" = ( +"akL" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -5674,67 +5493,81 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alg" = ( +"akM" = ( /obj/machinery/biogenerator, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alh" = ( +"akN" = ( /obj/machinery/seed_extractor, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ali" = ( +"akO" = ( /obj/structure/bed, /obj/machinery/flasher{ id = "PermaCell"; pixel_x = 0; pixel_y = -24 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alj" = ( +"akP" = ( /obj/structure/bed, /obj/machinery/light, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alk" = ( +"akQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/airless/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"all" = ( +"akR" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/open/floor/plating{ +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/transfer) -"alm" = ( -/turf/closed/wall/r_wall{ +/area/security/prison) +"akS" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/obj/machinery/camera{ + c_tag = "Brig Cells North 2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/transfer) -"aln" = ( -/obj/structure/mineral_door/iron{ - name = "Transfer Center" - }, -/turf/open/floor/plating/asteroid, -/area/security/transfer) -"alo" = ( +/area/security/prison) +"akT" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -5743,7 +5576,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alp" = ( +"akU" = ( /obj/structure/curtain, /obj/machinery/shower{ pixel_y = 24 @@ -5752,7 +5585,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alq" = ( +"akV" = ( /obj/structure/curtain, /obj/machinery/shower{ pixel_y = 24 @@ -5762,7 +5595,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alr" = ( +"akW" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -5773,7 +5606,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"als" = ( +"akX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -5787,7 +5620,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"alt" = ( +"akY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -5797,7 +5630,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"alu" = ( +"akZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -5807,7 +5640,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"alv" = ( +"ala" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -5818,7 +5651,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"alw" = ( +"alb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/blobstart, /turf/open/floor/plating{ @@ -5827,12 +5660,12 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"alx" = ( +"alc" = ( /turf/closed/mineral, /area/mine/unexplored{ name = "Cargo Asteroid" }) -"aly" = ( +"ald" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -5840,7 +5673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alz" = ( +"ale" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -5849,7 +5682,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alA" = ( +"alf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -5860,7 +5693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alB" = ( +"alg" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -5869,7 +5702,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alC" = ( +"alh" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -5877,40 +5710,40 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alD" = ( +"ali" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alE" = ( +"alj" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alF" = ( +"alk" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Cargo Asteroid" }) -"alG" = ( +"all" = ( /obj/item/trash/can, /turf/open/floor/plating, /area/space) -"alH" = ( +"alm" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alI" = ( +"aln" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alJ" = ( +"alo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/glass_security{ name = "Long-Term Holding Cell"; @@ -5922,38 +5755,48 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alK" = ( +"alp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/security{ - name = "Inmate Transfer Facility"; - req_access_txt = "2" - }, -/turf/open/floor/plating{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/security/transfer) -"alL" = ( +/area/security/prison) +"alq" = ( /obj/machinery/light/small{ dir = 8 }, /obj/item/weapon/ore/glass, -/turf/open/floor/plating/asteroid, -/area/security/transfer) -"alM" = ( -/obj/item/weapon/shovel, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_plating = "asteroid_dug"; + icon_state = "asteroid_dug"; + name = "ditch" }, /area/security/transfer) -"alN" = ( -/obj/item/weapon/ore/glass, -/turf/open/floor/plating/asteroid, +"alr" = ( +/obj/item/weapon/shovel, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_plating = "asteroid_dug"; + icon_state = "asteroid_dug"; + name = "ditch" + }, /area/security/transfer) -"alO" = ( +"als" = ( +/obj/item/weapon/ore/glass, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless; + icon_plating = "asteroid_dug"; + icon_state = "asteroid_dug"; + name = "ditch" + }, +/area/security/transfer) +"alt" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -5961,7 +5804,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alP" = ( +"alu" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/emergency, /obj/item/weapon/shovel, @@ -5972,7 +5815,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alQ" = ( +"alv" = ( /obj/structure/grille, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -5980,7 +5823,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alR" = ( +"alw" = ( /obj/machinery/light/small{ dir = 1 }, @@ -5988,7 +5831,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alS" = ( +"alx" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -5996,7 +5839,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alT" = ( +"aly" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating/astplate{ @@ -6005,7 +5848,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alU" = ( +"alz" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /obj/item/weapon/stamp/captain, @@ -6013,7 +5856,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alV" = ( +"alA" = ( /obj/structure/table/wood, /obj/item/device/modular_computer/laptop/preset/civillian, /obj/machinery/light/small{ @@ -6023,7 +5866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alW" = ( +"alB" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -6034,7 +5877,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alX" = ( +"alC" = ( /obj/item/weapon/storage/secure/safe{ pixel_y = 32 }, @@ -6042,12 +5885,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alY" = ( +"alD" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alZ" = ( +"alE" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -6061,13 +5904,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"ama" = ( +"alF" = ( /obj/item/weapon/soap/deluxe, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amb" = ( +"alG" = ( /obj/machinery/light/small{ dir = 8 }, @@ -6077,21 +5920,21 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amc" = ( +"alH" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"amd" = ( +"alI" = ( /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ame" = ( +"alJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -6099,13 +5942,13 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"amf" = ( +"alK" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amg" = ( +"alL" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -6114,7 +5957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amh" = ( +"alM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6122,7 +5965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ami" = ( +"alN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6136,7 +5979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amj" = ( +"alO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -6144,7 +5987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amk" = ( +"alP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -6154,7 +5997,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"aml" = ( +"alQ" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -6165,7 +6008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amm" = ( +"alR" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 4"; @@ -6177,7 +6020,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amn" = ( +"alS" = ( /obj/machinery/flasher{ id = "Cell 4"; pixel_x = 0; @@ -6187,7 +6030,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amo" = ( +"alT" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -6196,7 +6039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amp" = ( +"alU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -6210,7 +6053,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amq" = ( +"alV" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -6249,7 +6092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amr" = ( +"alW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -6263,7 +6106,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ams" = ( +"alX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6276,7 +6119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amt" = ( +"alY" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -6294,7 +6137,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amu" = ( +"alZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6312,7 +6155,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amv" = ( +"ama" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -6327,7 +6170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amw" = ( +"amb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -6343,7 +6186,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amx" = ( +"amc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -6361,7 +6204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amy" = ( +"amd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -6374,7 +6217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amz" = ( +"ame" = ( /obj/machinery/firealarm{ pixel_y = 24 }, @@ -6390,10 +6233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, +"amf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -6404,35 +6244,31 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amB" = ( +"amg" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, /obj/structure/cable/orange{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/machinery/camera{ - c_tag = "Brig Cells North 2" - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amC" = ( +"amh" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -6446,7 +6282,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amD" = ( +"ami" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -6456,7 +6292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amE" = ( +"amj" = ( /obj/machinery/flasher{ id = "Cell 8"; pixel_x = 0; @@ -6466,7 +6302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amF" = ( +"amk" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 8"; @@ -6480,7 +6316,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amG" = ( +"aml" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless; icon_plating = "asteroid_dug"; @@ -6488,7 +6324,7 @@ name = "ditch" }, /area/security/transfer) -"amH" = ( +"amm" = ( /obj/machinery/light/small{ dir = 8 }, @@ -6503,7 +6339,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amI" = ( +"amn" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -6515,7 +6351,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amJ" = ( +"amo" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -6531,7 +6367,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amK" = ( +"amp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6546,7 +6382,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amL" = ( +"amq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6562,7 +6398,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amM" = ( +"amr" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6578,7 +6414,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amN" = ( +"ams" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -6594,14 +6430,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amO" = ( +"amt" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amP" = ( +"amu" = ( /obj/structure/chair{ dir = 1 }, @@ -6609,18 +6445,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amQ" = ( +"amv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amR" = ( +"amw" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amS" = ( +"amx" = ( /obj/machinery/door/airlock{ name = "Bathroom" }, @@ -6628,18 +6464,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amT" = ( +"amy" = ( /obj/machinery/light/small, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amU" = ( +"amz" = ( /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amV" = ( +"amA" = ( /obj/machinery/door/airlock{ id_tag = "bc" }, @@ -6647,7 +6483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amW" = ( +"amB" = ( /obj/machinery/button/door{ id = "bc"; name = "Privacy Bolts"; @@ -6665,14 +6501,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amX" = ( +"amC" = ( /obj/machinery/camera/motion{ c_tag = "Bridge Escape Pod External"; dir = 8 }, /turf/open/space, /area/space) -"amY" = ( +"amD" = ( /obj/machinery/power/apc{ dir = 2; name = "AI Asteroid Maintenance APC"; @@ -6688,7 +6524,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"amZ" = ( +"amE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -6707,7 +6543,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ana" = ( +"amF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "AI Asteroid Hallway 2"; @@ -6722,7 +6558,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anb" = ( +"amG" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -6730,7 +6566,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anc" = ( +"amH" = ( /obj/machinery/light{ dir = 4 }, @@ -6740,12 +6576,12 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"and" = ( +"amI" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Cargo Asteroid" }) -"ane" = ( +"amJ" = ( /obj/machinery/door/airlock/maintenance{ name = "Disposals"; req_access_txt = "12;31" @@ -6754,7 +6590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anf" = ( +"amK" = ( /obj/structure/table, /obj/item/weapon/storage/box, /obj/item/weapon/storage/box, @@ -6765,7 +6601,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ang" = ( +"amL" = ( /obj/structure/table, /obj/item/device/destTagger, /obj/item/stack/packageWrap, @@ -6774,37 +6610,37 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anh" = ( +"amM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ani" = ( +"amN" = ( /obj/machinery/light, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anj" = ( +"amO" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ank" = ( +"amP" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"anl" = ( +"amQ" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 }, /turf/open/floor/plating/airless, /area/space) -"anm" = ( +"amR" = ( /obj/machinery/light/small{ dir = 8 }, @@ -6813,12 +6649,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ann" = ( +"amS" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ano" = ( +"amT" = ( /obj/machinery/door/window/brigdoor/westleft{ id = "Cell 4"; name = "Cell Door 4"; @@ -6830,7 +6666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anp" = ( +"amU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -6841,25 +6677,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anq" = ( +"amV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anr" = ( +"amW" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 1; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ans" = ( +"amX" = ( /turf/open/floor/plasteel/red{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ant" = ( +"amY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/corner{ icon_state = "redcorner"; @@ -6867,7 +6703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anu" = ( +"amZ" = ( /obj/machinery/door/window/brigdoor/eastleft{ id = "Cell 8"; name = "Cell Door 8"; @@ -6879,13 +6715,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anv" = ( +"ana" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anw" = ( +"anb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -6894,7 +6730,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anx" = ( +"anc" = ( /obj/effect/decal/remains/human, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -6903,7 +6739,7 @@ name = "ditch" }, /area/security/transfer) -"any" = ( +"and" = ( /obj/structure/disposalpipe/sortjunction{ name = "disposal pipe - Custodials"; sortType = 22 @@ -6914,7 +6750,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anz" = ( +"ane" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -6930,7 +6766,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anA" = ( +"anf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -6946,7 +6782,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anB" = ( +"ang" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6967,7 +6803,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anC" = ( +"anh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6979,7 +6815,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anD" = ( +"ani" = ( /obj/machinery/power/apc{ dir = 4; name = "Captain's Private Quarters APC"; @@ -6999,7 +6835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anE" = ( +"anj" = ( /obj/structure/table/wood, /obj/item/weapon/pinpointer, /obj/item/weapon/disk/nuclear, @@ -7007,7 +6843,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anF" = ( +"ank" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -7015,14 +6851,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anG" = ( +"anl" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/captain, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anH" = ( +"anm" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -7031,15 +6867,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anI" = ( +"ann" = ( /obj/docking_port/stationary/random{ dir = 1; - id = "pod_asteroid1"; - name = "asteroid" + id = "pod_lavaland1"; + name = "lavaland" }, /turf/open/space, /area/space) -"anJ" = ( +"ano" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -7056,7 +6892,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anK" = ( +"anp" = ( /obj/machinery/ai_status_display{ pixel_x = 32 }, @@ -7066,7 +6902,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anL" = ( +"anq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -7077,7 +6913,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anM" = ( +"anr" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -7093,19 +6929,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anN" = ( +"ans" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anO" = ( +"ant" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anP" = ( +"anu" = ( /obj/machinery/door/airlock/glass_mining{ name = "Disposals"; req_access_txt = "31" @@ -7115,7 +6951,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anQ" = ( +"anv" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -7124,22 +6960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/office) -"anS" = ( -/obj/structure/lattice/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/space, -/area/space) -"anT" = ( +"anw" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -7148,7 +6969,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"anU" = ( +"anx" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -7157,18 +6978,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"anV" = ( +"any" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"anW" = ( +"anz" = ( /obj/structure/rack, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"anX" = ( +"anA" = ( /obj/structure/rack, /obj/item/weapon/shovel, /obj/item/clothing/glasses/material/mining, @@ -7176,7 +6997,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"anY" = ( +"anB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -7186,7 +7007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"anZ" = ( +"anC" = ( /obj/structure/closet/crate, /obj/item/device/flashlight/lantern, /obj/item/device/flashlight/lantern, @@ -7194,7 +7015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aoa" = ( +"anD" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 4"; name = "Cell 4 Locker" @@ -7203,7 +7024,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aob" = ( +"anE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -7214,7 +7035,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aoc" = ( +"anF" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -7228,7 +7049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aod" = ( +"anG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7247,7 +7068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aoe" = ( +"anH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -7257,17 +7078,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aof" = ( +"anI" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aog" = ( +"anJ" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aoh" = ( +"anK" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -7283,7 +7104,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aoi" = ( +"anL" = ( /obj/machinery/door/airlock/glass_security{ name = "Brig Control"; req_access_txt = "3" @@ -7302,7 +7123,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aoj" = ( +"anM" = ( /obj/machinery/door/airlock/glass_security{ name = "Brig Control"; req_access_txt = "3" @@ -7316,7 +7137,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aok" = ( +"anN" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -7332,7 +7153,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aol" = ( +"anO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -7342,7 +7163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aom" = ( +"anP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7361,7 +7182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aon" = ( +"anQ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -7375,7 +7196,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aoo" = ( +"anR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -7385,7 +7206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aop" = ( +"anS" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 8"; name = "Cell 8 Locker" @@ -7394,7 +7215,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aoq" = ( +"anT" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -7402,7 +7223,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aor" = ( +"anU" = ( /obj/machinery/light/small{ dir = 1 }, @@ -7415,18 +7236,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aos" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/grille, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aot" = ( +"anV" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -7437,18 +7247,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aou" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aov" = ( +"anW" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -7459,7 +7258,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aow" = ( +"anX" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7475,7 +7274,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aox" = ( +"anY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7488,7 +7287,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoy" = ( +"anZ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -7496,13 +7295,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoz" = ( +"aoa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoA" = ( +"aob" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -7510,7 +7309,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoB" = ( +"aoc" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/captain, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -7521,7 +7320,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoC" = ( +"aod" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -7529,7 +7328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoD" = ( +"aoe" = ( /obj/machinery/suit_storage_unit/captain, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -7538,7 +7337,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoE" = ( +"aof" = ( /obj/machinery/light/small{ dir = 1 }, @@ -7550,7 +7349,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoF" = ( +"aog" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -7566,7 +7365,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoG" = ( +"aoh" = ( /obj/machinery/door/window/eastright{ name = "Captain's Desk"; req_access_txt = "20" @@ -7581,7 +7380,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoH" = ( +"aoi" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -7594,7 +7393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoI" = ( +"aoj" = ( /obj/machinery/light{ dir = 1 }, @@ -7604,7 +7403,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoJ" = ( +"aok" = ( /obj/structure/table/wood, /obj/item/weapon/storage/lockbox/medal, /obj/machinery/camera{ @@ -7614,30 +7413,30 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoK" = ( +"aol" = ( /obj/structure/table/wood, /obj/item/weapon/book/manual/wiki/security_space_law, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoL" = ( +"aom" = ( /obj/structure/displaycase/captain, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoM" = ( +"aon" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/pod_1) -"aoN" = ( +"aoo" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/pod_1) -"aoO" = ( +"aop" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light/small{ dir = 4 @@ -7655,7 +7454,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aoP" = ( +"aoq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 8 @@ -7667,7 +7466,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aoQ" = ( +"aor" = ( /obj/machinery/light/small{ dir = 8 }, @@ -7675,7 +7474,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoR" = ( +"aos" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -7687,7 +7486,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoS" = ( +"aot" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -7704,7 +7503,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoT" = ( +"aou" = ( /obj/machinery/power/apc{ dir = 4; name = "Cargo APC"; @@ -7724,12 +7523,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aoU" = ( +"aov" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aoV" = ( +"aow" = ( /obj/machinery/light{ dir = 1 }, @@ -7738,13 +7537,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aoW" = ( +"aox" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aoX" = ( +"aoy" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -7753,7 +7552,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aoY" = ( +"aoz" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -7761,10 +7560,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aoZ" = ( +"aoA" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/supply) -"apa" = ( +"aoB" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -7773,7 +7572,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apb" = ( +"aoC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7781,7 +7580,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apc" = ( +"aoD" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -7790,7 +7589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apd" = ( +"aoE" = ( /obj/machinery/light{ dir = 1 }, @@ -7798,7 +7597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"ape" = ( +"aoF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -7806,7 +7605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apf" = ( +"aoG" = ( /obj/machinery/door/poddoor/shutters{ id = "MiningWarehouse" }, @@ -7814,7 +7613,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apg" = ( +"aoH" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -7822,26 +7621,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aph" = ( +"aoI" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"api" = ( +"aoJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apj" = ( +"aoK" = ( /obj/structure/closet/crate, /obj/item/weapon/ore/slag, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apk" = ( +"aoL" = ( /obj/machinery/door_timer{ id = "Cell 4"; name = "Cell 4"; @@ -7858,7 +7657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apl" = ( +"aoM" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -7867,7 +7666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apm" = ( +"aoN" = ( /obj/machinery/power/apc{ dir = 8; name = "Brig Control APC"; @@ -7882,7 +7681,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"apn" = ( +"aoO" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -7897,12 +7696,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"apo" = ( +"aoP" = ( /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"app" = ( +"aoQ" = ( /obj/structure/rack, /obj/item/clothing/mask/gas/sechailer{ pixel_x = -3; @@ -7928,7 +7727,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"apq" = ( +"aoR" = ( /obj/machinery/light{ dir = 8 }, @@ -7936,7 +7735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apr" = ( +"aoS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -7944,24 +7743,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aps" = ( -/obj/machinery/door_timer{ - id = "Cell 8"; - name = "Cell 8"; - pixel_x = 32; - pixel_y = 0 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"apt" = ( +"aoT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -7982,7 +7764,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apu" = ( +"aoU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -7994,12 +7776,12 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apv" = ( +"aoV" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"apw" = ( +"aoW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8013,32 +7795,32 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apx" = ( +"aoX" = ( /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apy" = ( +"aoY" = ( /obj/structure/dresser, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apz" = ( +"aoZ" = ( /obj/structure/closet/secure_closet/captains, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apA" = ( +"apa" = ( /obj/machinery/light/small, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apB" = ( +"apb" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters"; req_access = null; @@ -8048,13 +7830,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apC" = ( +"apc" = ( /obj/structure/chair/office/dark, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apD" = ( +"apd" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ dir = 4; @@ -8065,19 +7847,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apE" = ( +"ape" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apF" = ( +"apf" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apG" = ( +"apg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -8085,25 +7867,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apH" = ( +"aph" = ( /mob/living/simple_animal/pet/fox/Renault, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apI" = ( +"api" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"apJ" = ( +"apj" = ( /obj/structure/chair{ dir = 1 }, /obj/machinery/computer/shuttle/pod{ pixel_x = -32; pixel_y = 0; - possible_destinations = "pod_asteroid1"; + possible_destinations = "pod_lavaland1"; shuttleId = "pod1" }, /obj/machinery/light/small{ @@ -8116,7 +7898,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) -"apK" = ( +"apk" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -8133,7 +7915,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apL" = ( +"apl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -8145,7 +7927,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apM" = ( +"apm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -8157,7 +7939,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apN" = ( +"apn" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -8168,13 +7950,13 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apO" = ( +"apo" = ( /obj/structure/grille/broken, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apP" = ( +"app" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -8187,22 +7969,22 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apQ" = ( +"apq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apR" = ( +"apr" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) -"apS" = ( +"aps" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apT" = ( +"apt" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -8215,7 +7997,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apU" = ( +"apu" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; opened = 1 @@ -8224,13 +8006,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apV" = ( +"apv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apW" = ( +"apw" = ( /obj/machinery/light/small{ dir = 4 }, @@ -8239,7 +8021,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apX" = ( +"apx" = ( /obj/machinery/power/apc{ dir = 4; name = "Cell Block APC"; @@ -8256,7 +8038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apY" = ( +"apy" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 3"; @@ -8268,7 +8050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apZ" = ( +"apz" = ( /obj/machinery/flasher{ id = "Cell 3"; pixel_x = 0; @@ -8278,7 +8060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqa" = ( +"apA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8296,7 +8078,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqb" = ( +"apB" = ( /obj/structure/table, /obj/machinery/firealarm{ dir = 8; @@ -8312,7 +8094,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqc" = ( +"apC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8322,7 +8104,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqd" = ( +"apD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -8330,7 +8112,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqe" = ( +"apE" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -8340,7 +8122,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqf" = ( +"apF" = ( /obj/structure/table, /obj/machinery/recharger, /obj/machinery/newscaster/security_unit{ @@ -8350,7 +8132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqg" = ( +"apG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8368,7 +8150,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqh" = ( +"apH" = ( /obj/machinery/flasher{ id = "Cell 7"; pixel_x = 0; @@ -8378,7 +8160,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqi" = ( +"apI" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 7"; @@ -8391,7 +8173,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqj" = ( +"apJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8404,7 +8186,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqk" = ( +"apK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8418,7 +8200,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aql" = ( +"apL" = ( /obj/machinery/power/apc{ dir = 2; name = "Dorm APC"; @@ -8434,7 +8216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aqm" = ( +"apM" = ( /obj/structure/closet/crate, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -8442,7 +8224,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqn" = ( +"apN" = ( /obj/machinery/light/small{ dir = 1 }, @@ -8450,21 +8232,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aqo" = ( +"apO" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/blue, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aqp" = ( +"apP" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/orange, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aqq" = ( +"apQ" = ( /obj/machinery/light/small{ dir = 1 }, @@ -8477,7 +8259,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aqr" = ( +"apR" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/purple, /obj/effect/landmark/start/assistant, @@ -8485,7 +8267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aqs" = ( +"apS" = ( /obj/machinery/camera/motion{ c_tag = "Bridge Maintenance Eastl"; dir = 8 @@ -8497,7 +8279,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqt" = ( +"apT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -8505,7 +8287,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqu" = ( +"apU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -8513,7 +8295,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqv" = ( +"apV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8521,7 +8303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqw" = ( +"apW" = ( /obj/structure/table/wood, /obj/structure/window/reinforced, /obj/item/weapon/hand_tele, @@ -8529,7 +8311,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqx" = ( +"apX" = ( /obj/structure/window/reinforced, /obj/machinery/computer/card, /obj/item/weapon/card/id/captains_spare, @@ -8537,14 +8319,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqy" = ( +"apY" = ( /obj/structure/window/reinforced, /obj/machinery/computer/communications, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqz" = ( +"apZ" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ dir = 4; @@ -8556,7 +8338,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqA" = ( +"aqa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -8564,7 +8346,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqB" = ( +"aqb" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -8576,7 +8358,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqC" = ( +"aqc" = ( /obj/structure/table/wood, /obj/item/weapon/storage/photo_album, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -8586,14 +8368,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqD" = ( +"aqd" = ( /obj/structure/table/wood, /obj/item/toy/figure/captain, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqE" = ( +"aqe" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, @@ -8601,7 +8383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqF" = ( +"aqf" = ( /obj/structure/chair{ dir = 1 }, @@ -8613,7 +8395,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) -"aqG" = ( +"aqg" = ( /obj/structure/girder, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -8621,13 +8403,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqH" = ( +"aqh" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqI" = ( +"aqi" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -8639,7 +8421,7 @@ }, /turf/open/space, /area/space) -"aqJ" = ( +"aqj" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -8649,7 +8431,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aqK" = ( +"aqk" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -8657,7 +8439,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aqL" = ( +"aql" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -8665,14 +8447,14 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aqM" = ( +"aqm" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /turf/open/space, /area/space) -"aqN" = ( +"aqn" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -8685,7 +8467,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqO" = ( +"aqo" = ( /obj/machinery/camera{ c_tag = "Cargo Western Loading Bay 2"; dir = 5; @@ -8696,13 +8478,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aqP" = ( +"aqp" = ( /obj/machinery/computer/cargo, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aqQ" = ( +"aqq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -8710,7 +8492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aqR" = ( +"aqr" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" }, @@ -8718,7 +8500,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aqS" = ( +"aqs" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -8727,7 +8509,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aqT" = ( +"aqt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8735,13 +8517,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aqU" = ( +"aqu" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aqV" = ( +"aqv" = ( /obj/machinery/door/window/brigdoor/westleft{ id = "Cell 3"; name = "Cell Door 3"; @@ -8753,7 +8535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqW" = ( +"aqw" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -8769,22 +8551,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqX" = ( +"aqx" = ( /obj/machinery/computer/prisoner, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqY" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/effect/landmark/start/warden, -/turf/open/floor/plasteel/showroomfloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/warden) -"aqZ" = ( +"aqy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8795,13 +8568,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"ara" = ( +"aqz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arb" = ( +"aqA" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -8809,13 +8582,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arc" = ( +"aqB" = ( /obj/machinery/computer/crew, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"ard" = ( +"aqC" = ( /obj/machinery/door/window/brigdoor/eastleft{ id = "Cell 7"; name = "Cell Door 7"; @@ -8827,12 +8600,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"are" = ( +"aqD" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"arf" = ( +"aqE" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -8841,12 +8614,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"arg" = ( +"aqF" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"arh" = ( +"aqG" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/blue, /obj/structure/window, @@ -8854,7 +8627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"ari" = ( +"aqH" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -8864,7 +8637,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"arj" = ( +"aqI" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/orange, /obj/structure/window, @@ -8872,7 +8645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"ark" = ( +"aqJ" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/purple, /obj/structure/window, @@ -8880,7 +8653,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"arl" = ( +"aqK" = ( /obj/machinery/camera{ c_tag = "Fore Asteroid Maintenance APCs 2"; dir = 5; @@ -8892,7 +8665,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"arm" = ( +"aqL" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -8902,7 +8675,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"arn" = ( +"aqM" = ( /obj/machinery/computer/arcade, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -8911,7 +8684,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aro" = ( +"aqN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -8919,7 +8692,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"arp" = ( +"aqO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8928,7 +8701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"arq" = ( +"aqP" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -8937,7 +8710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"arr" = ( +"aqQ" = ( /obj/structure/table/wood, /obj/item/weapon/folder/red{ pixel_x = 8; @@ -8948,20 +8721,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"ars" = ( +"aqR" = ( /obj/structure/table/wood, /obj/item/device/camera, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"art" = ( +"aqS" = ( /obj/structure/shuttle/engine/propulsion/burst, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/pod_1) -"aru" = ( +"aqT" = ( /obj/machinery/door/airlock/shuttle{ name = "Escape Pod Airlock" }, @@ -8975,7 +8748,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/pod_1) -"arv" = ( +"aqU" = ( /obj/structure/closet/crate, /obj/item/weapon/pickaxe/mini, /obj/effect/spawner/lootdrop/maintenance, @@ -8985,57 +8758,31 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"arw" = ( +"aqV" = ( /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"arx" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/obj/structure/grille, -/turf/open/space, -/area/space) -"ary" = ( -/obj/structure/window/reinforced{ - dir = 8 +"aqW" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aqX" = ( +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 4"; + dir = 8; + network = list("SS13") }, /turf/open/floor/engine, -/area/space) -"arz" = ( -/turf/open/floor/engine, -/area/space) -"arA" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/turf/open/floor/engine, -/area/space) -"arB" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/grille, -/turf/open/space, -/area/space) -"arC" = ( +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aqY" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"arD" = ( +"aqZ" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; departmentType = 2; @@ -9047,21 +8794,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arE" = ( +"ara" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arF" = ( +"arb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arG" = ( +"arc" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9070,7 +8817,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arH" = ( +"ard" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9083,7 +8830,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arI" = ( +"are" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9092,7 +8839,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arJ" = ( +"arf" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9103,14 +8850,14 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"arK" = ( +"arg" = ( /obj/machinery/door/airlock/shuttle{ name = "Supply Shuttle Airlock"; req_access_txt = "31" }, /turf/open/floor/plating, /area/shuttle/supply) -"arL" = ( +"arh" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Supply Dock Airlock"; @@ -9120,25 +8867,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arM" = ( +"ari" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arN" = ( +"arj" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arO" = ( +"ark" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arP" = ( +"arl" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; departmentType = 2; @@ -9157,14 +8904,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arQ" = ( +"arm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"arR" = ( +"arn" = ( /obj/machinery/button/door{ id = "MiningWarehouse"; name = "Mining Warehouse Shutters"; @@ -9176,12 +8923,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"arS" = ( +"aro" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"arT" = ( +"arp" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 3"; name = "Cell 3 Locker" @@ -9190,7 +8937,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"arU" = ( +"arq" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -9201,7 +8948,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"arV" = ( +"arr" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -9227,7 +8974,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arW" = ( +"ars" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -9238,7 +8985,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arX" = ( +"art" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -9248,7 +8995,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arY" = ( +"aru" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -9269,7 +9016,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arZ" = ( +"arv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -9280,7 +9027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asa" = ( +"arw" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 1; @@ -9313,7 +9060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asb" = ( +"arx" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 7"; name = "Cell 7 Locker" @@ -9322,7 +9069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"asc" = ( +"ary" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -9338,7 +9085,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"asd" = ( +"arz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -9354,7 +9101,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ase" = ( +"arA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9362,7 +9109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"asf" = ( +"arB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9375,7 +9122,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"asg" = ( +"arC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -9386,7 +9133,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ash" = ( +"arD" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -9403,7 +9150,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"asi" = ( +"arE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9411,7 +9158,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asj" = ( +"arF" = ( /obj/machinery/light_switch{ pixel_x = -25 }, @@ -9425,7 +9172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"ask" = ( +"arG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9436,7 +9183,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asl" = ( +"arH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9447,7 +9194,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asm" = ( +"arI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9463,7 +9210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asn" = ( +"arJ" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -9481,14 +9228,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aso" = ( +"arK" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"asp" = ( +"arL" = ( /obj/machinery/vending/cigarette{ extended_inventory = 1 }, @@ -9496,7 +9243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"asq" = ( +"arM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -9505,7 +9252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"asr" = ( +"arN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -9513,7 +9260,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"ass" = ( +"arO" = ( /obj/structure/table/wood, /obj/item/weapon/folder/blue, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -9521,7 +9268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"ast" = ( +"arP" = ( /obj/structure/table/wood, /obj/item/device/camera_film, /obj/item/device/camera_film, @@ -9529,12 +9276,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"asu" = ( +"arQ" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"asv" = ( +"arR" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4; name = "Command Escape Pod" @@ -9543,20 +9290,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"asw" = ( +"arS" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"asx" = ( +"arT" = ( /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"asy" = ( +"arU" = ( /obj/machinery/light/small{ dir = 1 }, @@ -9564,7 +9311,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"asz" = ( +"arV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -9579,7 +9326,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"asA" = ( +"arW" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -9590,7 +9337,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asB" = ( +"arX" = ( /obj/machinery/conveyor_switch{ id = "QMLoad" }, @@ -9598,7 +9345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asC" = ( +"arY" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Supply Dock Airlock"; @@ -9612,7 +9359,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asD" = ( +"arZ" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Supply Dock Airlock"; @@ -9626,7 +9373,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asE" = ( +"asa" = ( /obj/machinery/door/airlock/shuttle{ name = "Supply Shuttle Airlock"; req_access_txt = "31" @@ -9637,7 +9384,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"asF" = ( +"asb" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Supply Dock Airlock"; @@ -9647,7 +9394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asG" = ( +"asc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -9657,7 +9404,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asH" = ( +"asd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/extinguisher_cabinet{ pixel_x = 24 @@ -9666,7 +9413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asI" = ( +"ase" = ( /obj/machinery/door/poddoor/shutters{ id = "MiningWarehouse" }, @@ -9675,7 +9422,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"asJ" = ( +"asf" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" }, @@ -9684,27 +9431,27 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"asK" = ( +"asg" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/mining) -"asL" = ( +"ash" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/mining) -"asM" = ( +"asi" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"asN" = ( +"asj" = ( /obj/structure/bed/roller, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"asO" = ( +"ask" = ( /obj/structure/table, /obj/machinery/light{ dir = 1 @@ -9714,14 +9461,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"asP" = ( +"asl" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/toxin, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"asQ" = ( +"asm" = ( /obj/machinery/door_timer{ id = "Cell 3"; name = "Cell 3"; @@ -9738,7 +9485,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"asR" = ( +"asn" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -9751,13 +9498,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asS" = ( +"aso" = ( /obj/machinery/computer/secure_data, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asT" = ( +"asp" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -9765,13 +9512,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asU" = ( +"asq" = ( /obj/machinery/computer/security, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asV" = ( +"asr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/holopad, /turf/open/floor/plasteel/red/side{ @@ -9780,24 +9527,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"asW" = ( -/obj/machinery/door_timer{ - id = "Cell 7"; - name = "Cell 7"; - pixel_x = 32; - pixel_y = 0 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"asX" = ( +"ass" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, /turf/open/floor/plasteel/floorgrime{ @@ -9806,7 +9536,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"asY" = ( +"ast" = ( /obj/structure/closet, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/sign/poster/random{ @@ -9822,7 +9552,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"asZ" = ( +"asu" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -9835,44 +9565,37 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ata" = ( +"asv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"atb" = ( +"asw" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"atc" = ( +"asx" = ( /obj/structure/table/wood, /obj/item/toy/dummy, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"atd" = ( +"asy" = ( /obj/structure/table/wood, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ate" = ( -/obj/structure/chair/stool, -/obj/effect/landmark/start/assistant, +"asz" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"atf" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/locker) -"atg" = ( +"asA" = ( /obj/machinery/door/airlock{ name = "Female Sleeping Quarters" }, @@ -9883,12 +9606,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"ath" = ( +"asB" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"ati" = ( +"asC" = ( /obj/machinery/light{ dir = 4 }, @@ -9896,7 +9619,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"atj" = ( +"asD" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -9905,7 +9628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"atk" = ( +"asE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -9919,7 +9642,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"atl" = ( +"asF" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/cmo, /obj/machinery/airalarm{ @@ -9937,7 +9660,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"atm" = ( +"asG" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -9947,7 +9670,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"atn" = ( +"asH" = ( /obj/structure/table/wood, /obj/item/device/modular_computer/laptop/preset/civillian, /turf/open/floor/carpet{ @@ -9956,7 +9679,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"ato" = ( +"asI" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /turf/open/floor/carpet{ @@ -9965,20 +9688,20 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"atp" = ( +"asJ" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"atq" = ( +"asK" = ( /obj/machinery/vending/boozeomat, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"atr" = ( +"asL" = ( /obj/machinery/light, /obj/machinery/firealarm{ dir = 1; @@ -9988,13 +9711,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"ats" = ( +"asM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"att" = ( +"asN" = ( /obj/machinery/light_switch{ pixel_y = -24 }, @@ -10003,18 +9726,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"atu" = ( +"asO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"atv" = ( +"asP" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"atw" = ( +"asQ" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /turf/open/floor/carpet{ @@ -10023,7 +9746,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"atx" = ( +"asR" = ( /obj/structure/table/wood, /obj/item/device/modular_computer/laptop/preset/civillian, /turf/open/floor/carpet{ @@ -10032,7 +9755,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"aty" = ( +"asS" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -10042,7 +9765,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"atz" = ( +"asT" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/ce, /obj/machinery/airalarm{ @@ -10060,7 +9783,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"atA" = ( +"asU" = ( /obj/machinery/power/apc{ dir = 8; name = "Chief Engineer's Private Quarters APC"; @@ -10082,7 +9805,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"atB" = ( +"asV" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = -32; @@ -10094,18 +9817,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"atC" = ( +"asW" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"atD" = ( +"asX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"atE" = ( +"asY" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -10117,7 +9840,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"atF" = ( +"asZ" = ( /obj/machinery/holopad, /obj/machinery/button/door{ dir = 2; @@ -10136,7 +9859,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"atG" = ( +"ata" = ( /obj/machinery/button/door{ dir = 2; id = "QMLoaddoor2"; @@ -10152,14 +9875,14 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) -"atH" = ( +"atb" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"atI" = ( +"atc" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -10172,13 +9895,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"atJ" = ( +"atd" = ( /obj/structure/closet/secure_closet/miner, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"atK" = ( +"ate" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -10190,13 +9913,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"atL" = ( +"atf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"atM" = ( +"atg" = ( /obj/structure/rack, /obj/item/weapon/shovel, /obj/item/weapon/pickaxe, @@ -10211,7 +9934,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"atN" = ( +"ath" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -10219,7 +9942,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"atO" = ( +"ati" = ( /obj/structure/table, /obj/machinery/light{ icon_state = "tube1"; @@ -10227,11 +9950,11 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"atP" = ( +"atj" = ( /obj/machinery/computer/shuttle/mining, /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"atQ" = ( +"atk" = ( /obj/structure/table, /obj/machinery/light{ dir = 4; @@ -10239,12 +9962,12 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"atR" = ( +"atl" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"atS" = ( +"atm" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -10253,25 +9976,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"atT" = ( +"atn" = ( /obj/structure/closet/crate/freezer/blood, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"atU" = ( +"ato" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"atV" = ( +"atp" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"atW" = ( +"atq" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 2"; @@ -10283,7 +10006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"atX" = ( +"atr" = ( /obj/machinery/flasher{ id = "Cell 2"; pixel_x = 0; @@ -10293,7 +10016,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"atY" = ( +"ats" = ( /obj/structure/table, /obj/item/key/security, /obj/item/clothing/glasses/sunglasses, @@ -10311,7 +10034,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"atZ" = ( +"att" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -10322,7 +10045,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aua" = ( +"atu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10335,7 +10058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aub" = ( +"atv" = ( /obj/structure/table, /obj/machinery/light, /obj/machinery/recharger, @@ -10343,7 +10066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"auc" = ( +"atw" = ( /obj/machinery/flasher{ id = "Cell 6"; pixel_x = 0; @@ -10353,7 +10076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aud" = ( +"atx" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 6"; @@ -10366,7 +10089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aue" = ( +"aty" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -10378,7 +10101,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"auf" = ( +"atz" = ( /obj/structure/chair/stool, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -10386,7 +10109,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aug" = ( +"atA" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -10395,7 +10118,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"auh" = ( +"atB" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -10408,21 +10131,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aui" = ( +"atC" = ( /obj/structure/table/wood, /obj/item/device/paicard, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"auj" = ( +"atD" = ( /obj/structure/table/wood, /obj/item/weapon/storage/firstaid/brute, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"auk" = ( +"atE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -10430,7 +10153,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aul" = ( +"atF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10438,7 +10161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aum" = ( +"atG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10449,7 +10172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aun" = ( +"atH" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -10462,7 +10185,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"auo" = ( +"atI" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHEAST)"; icon_state = "neutral"; @@ -10470,7 +10193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aup" = ( +"atJ" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHWEST)"; icon_state = "neutral"; @@ -10478,7 +10201,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"auq" = ( +"atK" = ( /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -10498,7 +10221,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aur" = ( +"atL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10517,7 +10240,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aus" = ( +"atM" = ( /obj/machinery/light/small{ dir = 4 }, @@ -10527,7 +10250,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aut" = ( +"atN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -10537,14 +10260,14 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"auu" = ( +"atO" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"auv" = ( +"atP" = ( /obj/structure/chair{ dir = 1 }, @@ -10554,7 +10277,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"auw" = ( +"atQ" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/carpet{ @@ -10563,13 +10286,13 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"aux" = ( +"atR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"auy" = ( +"atS" = ( /obj/machinery/door/airlock/command{ name = "Captain's Office"; req_access = null; @@ -10580,13 +10303,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"auz" = ( +"atT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"auA" = ( +"atU" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/carpet{ @@ -10595,7 +10318,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"auB" = ( +"atV" = ( /obj/structure/chair{ dir = 1 }, @@ -10605,14 +10328,14 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"auC" = ( +"atW" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"auD" = ( +"atX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -10625,7 +10348,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"auE" = ( +"atY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10638,14 +10361,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"auF" = ( +"atZ" = ( /obj/structure/closet/crate/medical, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"auG" = ( +"aua" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -10653,7 +10376,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"auH" = ( +"aub" = ( /obj/machinery/door/poddoor/shutters{ id = "CargoWarehouse" }, @@ -10661,7 +10384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"auI" = ( +"auc" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -10669,7 +10392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"auJ" = ( +"aud" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Supply Dock Airlock"; @@ -10683,7 +10406,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"auK" = ( +"aue" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Supply Dock Airlock"; @@ -10697,7 +10420,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"auL" = ( +"auf" = ( /obj/machinery/door/airlock/shuttle{ name = "Supply Shuttle Airlock"; req_access_txt = "31" @@ -10708,7 +10431,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"auM" = ( +"aug" = ( /obj/machinery/door/airlock/shuttle{ name = "Supply Shuttle Airlock"; req_access_txt = "31" @@ -10727,7 +10450,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"auN" = ( +"auh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ dir = 4; @@ -10737,13 +10460,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"auO" = ( +"aui" = ( /obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"auP" = ( +"auj" = ( /obj/machinery/computer/security/mining{ network = list("MINE","AuxBase") }, @@ -10751,7 +10474,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"auQ" = ( +"auk" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -10760,7 +10483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"auR" = ( +"aul" = ( /obj/structure/closet/crate, /obj/item/weapon/ore/silver, /obj/item/weapon/ore/silver, @@ -10769,28 +10492,28 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"auS" = ( +"aum" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"auT" = ( +"aun" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"auU" = ( +"auo" = ( /obj/structure/chair{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"auV" = ( +"aup" = ( /obj/machinery/gulag_teleporter, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"auW" = ( +"auq" = ( /obj/machinery/computer/gulag_teleporter_computer, /obj/machinery/camera{ c_tag = "Labor Shuttle Dock North" @@ -10799,7 +10522,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"auX" = ( +"aur" = ( /obj/machinery/computer/security{ name = "Labor Camp Monitoring"; network = list("Labor") @@ -10812,7 +10535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"auY" = ( +"aus" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10826,7 +10549,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"auZ" = ( +"aut" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -10834,13 +10557,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ava" = ( +"auu" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"avb" = ( +"auv" = ( /obj/machinery/door/window/brigdoor/westleft{ id = "Cell 2"; name = "Cell Door 2"; @@ -10852,7 +10575,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"avc" = ( +"auw" = ( /obj/structure/closet/secure_closet/warden{ pixel_x = 0 }, @@ -10866,7 +10589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"avd" = ( +"aux" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10877,7 +10600,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"ave" = ( +"auy" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /obj/structure/extinguisher_cabinet{ @@ -10887,7 +10610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"avf" = ( +"auz" = ( /obj/machinery/door/window/brigdoor/eastleft{ id = "Cell 6"; name = "Cell Door 6"; @@ -10899,7 +10622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"avg" = ( +"auA" = ( /obj/structure/rack, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -10907,7 +10630,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avh" = ( +"auB" = ( /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -10915,7 +10638,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avi" = ( +"auC" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -10924,7 +10647,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avj" = ( +"auD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10940,7 +10663,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avk" = ( +"auE" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -10954,7 +10677,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avl" = ( +"auF" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -10963,21 +10686,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"avm" = ( +"auG" = ( /obj/structure/table/wood, /obj/item/weapon/storage/pill_bottle/dice, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"avn" = ( +"auH" = ( /obj/structure/table/wood, /obj/item/device/instrument/guitar, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"avo" = ( +"auI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/sign/poster/random{ name = "random official poster"; @@ -10988,7 +10711,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"avp" = ( +"auJ" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/yellow, /obj/structure/window{ @@ -11001,7 +10724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"avq" = ( +"auK" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/green, /obj/structure/window{ @@ -11013,7 +10736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"avr" = ( +"auL" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/red, /obj/structure/window{ @@ -11025,7 +10748,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"avs" = ( +"auM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -11043,7 +10766,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"avt" = ( +"auN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11053,7 +10776,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"avu" = ( +"auO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11063,7 +10786,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"avv" = ( +"auP" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -11075,7 +10798,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avw" = ( +"auQ" = ( /obj/structure/table/wood, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -11090,7 +10813,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avx" = ( +"auR" = ( /obj/structure/table/wood, /obj/machinery/vending/wallmed{ pixel_y = 32 @@ -11102,7 +10825,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avy" = ( +"auS" = ( /obj/structure/noticeboard{ pixel_y = 32 }, @@ -11112,7 +10835,7 @@ tag = "icon-darkblue (NORTHEAST)" }, /area/bridge) -"avz" = ( +"auT" = ( /obj/machinery/light/small{ dir = 1 }, @@ -11129,7 +10852,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avA" = ( +"auU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4; @@ -11139,7 +10862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avB" = ( +"auV" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -11148,7 +10871,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avC" = ( +"auW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/button/door{ id = "bridge"; @@ -11160,7 +10883,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avD" = ( +"auX" = ( /obj/machinery/light/small{ dir = 1 }, @@ -11178,7 +10901,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avE" = ( +"auY" = ( /obj/machinery/requests_console{ announcementConsole = 1; department = "Bridge"; @@ -11191,7 +10914,7 @@ dir = 9 }, /area/bridge) -"avF" = ( +"auZ" = ( /obj/machinery/camera{ c_tag = "Bridge Main 1" }, @@ -11202,7 +10925,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avG" = ( +"ava" = ( /obj/structure/sign/pods{ pixel_y = 32 }, @@ -11213,7 +10936,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avH" = ( +"avb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -11224,7 +10947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avI" = ( +"avc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11234,7 +10957,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"avJ" = ( +"avd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11244,7 +10967,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"avK" = ( +"ave" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -11262,7 +10985,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"avL" = ( +"avf" = ( /obj/machinery/power/apc{ dir = 4; name = "Cargo Warehouse APC"; @@ -11287,7 +11010,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avM" = ( +"avg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -11295,7 +11018,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avN" = ( +"avh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11306,7 +11029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avO" = ( +"avi" = ( /obj/machinery/door/poddoor/shutters{ id = "CargoWarehouse" }, @@ -11317,7 +11040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avP" = ( +"avj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11328,7 +11051,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avQ" = ( +"avk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11338,14 +11061,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avR" = ( +"avl" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avS" = ( +"avm" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -11357,7 +11080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avT" = ( +"avn" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -11370,7 +11093,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avU" = ( +"avo" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -11381,7 +11104,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"avV" = ( +"avp" = ( /obj/structure/closet/secure_closet/miner, /obj/machinery/light{ icon_state = "tube1"; @@ -11391,19 +11114,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"avW" = ( +"avq" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"avX" = ( +"avr" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"avY" = ( +"avs" = ( /obj/machinery/door/airlock/glass_mining{ cyclelinkeddir = 8; name = "Mining Dock"; @@ -11413,7 +11136,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"avZ" = ( +"avt" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Mining Dock Airlock"; @@ -11425,14 +11148,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"awa" = ( +"avu" = ( /obj/machinery/door/airlock/titanium{ name = "Mining Shuttle Airlock"; req_access_txt = "0" }, /turf/open/floor/plating, /area/shuttle/mining) -"awb" = ( +"avv" = ( /obj/docking_port/mobile{ dir = 8; dwidth = 3; @@ -11456,15 +11179,15 @@ }, /turf/open/floor/plating, /area/shuttle/mining) -"awc" = ( +"avw" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/labor) -"awd" = ( +"avx" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/labor) -"awe" = ( +"avy" = ( /obj/machinery/disposal/deliveryChute{ tag = "icon-intake (NORTH)"; icon_state = "intake"; @@ -11473,7 +11196,7 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/space) -"awf" = ( +"avz" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -11482,7 +11205,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"awg" = ( +"avA" = ( /obj/structure/chair{ dir = 1 }, @@ -11490,7 +11213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"awh" = ( +"avB" = ( /obj/structure/table, /obj/item/weapon/storage/box/prisoner, /obj/machinery/airalarm{ @@ -11502,7 +11225,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"awi" = ( +"avC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -11519,7 +11242,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awj" = ( +"avD" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -11530,7 +11253,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awk" = ( +"avE" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -11541,12 +11264,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"awl" = ( +"avF" = ( /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"awm" = ( +"avG" = ( /obj/structure/sign/bluecross_2{ pixel_x = 32; pixel_y = 32 @@ -11555,7 +11278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"awn" = ( +"avH" = ( /obj/structure/closet/secure_closet/security/sec, /obj/machinery/light{ dir = 1 @@ -11564,7 +11287,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"awo" = ( +"avI" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 2"; name = "Cell 2 Locker" @@ -11573,7 +11296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"awp" = ( +"avJ" = ( /obj/machinery/door/airlock/glass_security{ name = "Brig Control"; req_access_txt = "3" @@ -11598,7 +11321,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"awq" = ( +"avK" = ( /obj/machinery/door/airlock/glass_security{ name = "Brig Control"; req_access_txt = "3" @@ -11613,7 +11336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"awr" = ( +"avL" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -11630,7 +11353,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aws" = ( +"avM" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -11640,7 +11363,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"awt" = ( +"avN" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 6"; name = "Cell 6 Locker" @@ -11649,7 +11372,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"awu" = ( +"avO" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -11660,7 +11383,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awv" = ( +"avP" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -11678,52 +11401,52 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aww" = ( +"avQ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"awx" = ( +"avR" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"awy" = ( +"avS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"awz" = ( +"avT" = ( /obj/machinery/light/small, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"awA" = ( +"avU" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/yellow, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"awB" = ( +"avV" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/green, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"awC" = ( +"avW" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/red, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"awD" = ( +"avX" = ( /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -11742,7 +11465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"awE" = ( +"avY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -11763,7 +11486,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awF" = ( +"avZ" = ( /obj/machinery/power/apc{ dir = 4; name = "Chief Medical Officer's Private Quarters APC"; @@ -11789,7 +11512,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awG" = ( +"awa" = ( /obj/structure/dresser, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -11797,7 +11520,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awH" = ( +"awb" = ( /obj/structure/closet{ icon_door = "blue"; name = "Chief Medical Officer's Uniform" @@ -11814,7 +11537,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awI" = ( +"awc" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; @@ -11826,7 +11549,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awJ" = ( +"awd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11836,7 +11559,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awK" = ( +"awe" = ( /obj/machinery/door/airlock/medical{ name = "Chief Medical Officer's Personal Quarters"; req_access_txt = "40" @@ -11850,25 +11573,25 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awL" = ( +"awf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awM" = ( +"awg" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awN" = ( +"awh" = ( /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 4; tag = "icon-darkblue (EAST)" }, /area/bridge) -"awO" = ( +"awi" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ dir = 8 @@ -11878,25 +11601,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awP" = ( +"awj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awQ" = ( +"awk" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awR" = ( +"awl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awS" = ( +"awm" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ dir = 4; @@ -11907,14 +11630,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"awT" = ( +"awn" = ( /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8; tag = "icon-darkblue (WEST)" }, /area/bridge) -"awU" = ( +"awo" = ( /obj/machinery/door/airlock/engineering{ name = "Chief Engineer's Personal Quarters"; req_access_txt = "56" @@ -11928,7 +11651,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awV" = ( +"awp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11938,7 +11661,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awW" = ( +"awq" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; @@ -11951,7 +11674,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awX" = ( +"awr" = ( /obj/structure/closet{ icon_door = "yellow"; name = "Chief Engineer's Uniform" @@ -11966,7 +11689,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awY" = ( +"aws" = ( /obj/structure/dresser, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -11974,31 +11697,19 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awZ" = ( +"awt" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axa" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 4"; - dir = 8; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"axb" = ( +"awu" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"axc" = ( +"awv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/conveyor_switch{ id = "QMLoad" @@ -12007,19 +11718,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axd" = ( +"aww" = ( /obj/machinery/mineral/equipment_vendor, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"axe" = ( +"awx" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"axf" = ( +"awy" = ( /obj/machinery/computer/shuttle/labor, /obj/structure/reagent_dispensers/peppertank{ pixel_x = -31; @@ -12027,13 +11738,13 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"axg" = ( +"awz" = ( /obj/structure/chair/office/dark{ dir = 1 }, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"axh" = ( +"awA" = ( /obj/structure/table, /obj/item/weapon/folder/red{ pixel_x = 8; @@ -12042,18 +11753,18 @@ /obj/item/weapon/restraints/handcuffs, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"axi" = ( +"awB" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/security/processing) -"axj" = ( +"awC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, /area/security/processing) -"axk" = ( +"awD" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/sign/securearea{ @@ -12069,7 +11780,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axl" = ( +"awE" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12077,12 +11788,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axm" = ( +"awF" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axn" = ( +"awG" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -12090,7 +11801,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axo" = ( +"awH" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -12098,7 +11809,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axp" = ( +"awI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12114,7 +11825,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axq" = ( +"awJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -12124,7 +11835,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axr" = ( +"awK" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -12133,19 +11844,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"axs" = ( +"awL" = ( /obj/structure/closet/l3closet/scientist, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"axt" = ( +"awM" = ( /obj/structure/closet/secure_closet/security/sec, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"axu" = ( +"awN" = ( /obj/machinery/door_timer{ id = "Cell 2"; name = "Cell 2"; @@ -12162,7 +11873,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axv" = ( +"awO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -12173,7 +11884,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axw" = ( +"awP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12181,7 +11892,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axx" = ( +"awQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12190,7 +11901,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axy" = ( +"awR" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12201,7 +11912,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axz" = ( +"awS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -12210,7 +11921,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axA" = ( +"awT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12219,7 +11930,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axB" = ( +"awU" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -12230,7 +11941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axC" = ( +"awV" = ( /obj/machinery/door_timer{ id = "Cell 6"; name = "Cell 6"; @@ -12247,7 +11958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axD" = ( +"awW" = ( /obj/machinery/light/small{ dir = 1 }, @@ -12259,7 +11970,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axE" = ( +"awX" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -12270,7 +11981,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axF" = ( +"awY" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -12279,7 +11990,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"axG" = ( +"awZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -12287,18 +11998,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"axH" = ( +"axa" = ( /obj/machinery/holopad, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"axI" = ( +"axb" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"axJ" = ( +"axc" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -12308,13 +12019,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"axK" = ( +"axd" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"axL" = ( +"axe" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -12325,26 +12036,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"axM" = ( +"axf" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"axN" = ( +"axg" = ( /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"axO" = ( +"axh" = ( /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"axP" = ( +"axi" = ( /obj/machinery/button/door{ id = "CargoWarehouse"; name = "Cargo Warehouse Shutters"; @@ -12355,7 +12066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"axQ" = ( +"axj" = ( /obj/machinery/button/door{ id = "CargoWarehouse"; name = "Cargo Warehouse Shutters"; @@ -12365,7 +12076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axR" = ( +"axk" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; dir = 8; @@ -12381,11 +12092,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axS" = ( +"axl" = ( /turf/open/floor/mineral/titanium/blue, /turf/closed/wall/mineral/titanium/interior, /area/shuttle/supply) -"axT" = ( +"axm" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; @@ -12400,7 +12111,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axU" = ( +"axn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -12409,7 +12120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axV" = ( +"axo" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -12417,7 +12128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axW" = ( +"axp" = ( /obj/machinery/airalarm{ dir = 4; pixel_x = -23; @@ -12430,7 +12141,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"axX" = ( +"axq" = ( /obj/machinery/computer/shuttle/mining, /obj/machinery/camera{ c_tag = "Mining Bay"; @@ -12443,22 +12154,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"axY" = ( +"axr" = ( /obj/structure/closet/crate, /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"axZ" = ( +"axs" = ( /obj/structure/shuttle/engine/heater, /turf/open/floor/plating, /area/shuttle/mining) -"aya" = ( +"axt" = ( /obj/structure/ore_box, /turf/open/floor/mineral/titanium/blue, /area/shuttle/mining) -"ayb" = ( +"axu" = ( /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"ayc" = ( +"axv" = ( /obj/machinery/button/flasher{ id = "gulagshuttleflasher"; name = "Flash Control"; @@ -12468,7 +12179,7 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"ayd" = ( +"axw" = ( /obj/machinery/mineral/labor_claim_console{ machinedir = 2; pixel_x = 30; @@ -12476,14 +12187,14 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"aye" = ( +"axx" = ( /obj/machinery/door/airlock/titanium{ name = "Labor Shuttle Airlock"; req_access_txt = "2" }, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"ayf" = ( +"axy" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Labor Camp Shuttle Airlock"; @@ -12493,10 +12204,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/security/processing) -"ayg" = ( +"axz" = ( /turf/open/floor/plating, /area/security/processing) -"ayh" = ( +"axA" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Labor Camp Shuttle Airlock"; @@ -12506,7 +12217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayi" = ( +"axB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12519,7 +12230,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayj" = ( +"axC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -12527,7 +12238,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayk" = ( +"axD" = ( /obj/machinery/door/airlock/security{ name = "Labor Shuttle"; req_access = null; @@ -12540,7 +12251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayl" = ( +"axE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12556,14 +12267,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aym" = ( +"axF" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayn" = ( +"axG" = ( /obj/structure/closet/bombcloset, /obj/structure/sign/map/left/ceres{ pixel_x = -32 @@ -12572,7 +12283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"ayo" = ( +"axH" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -12581,7 +12292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"ayp" = ( +"axI" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 1"; @@ -12593,7 +12304,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayq" = ( +"axJ" = ( /obj/machinery/flasher{ id = "Cell 1"; pixel_x = 0; @@ -12603,7 +12314,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayr" = ( +"axK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12624,7 +12335,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ays" = ( +"axL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12638,7 +12349,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayt" = ( +"axM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12651,7 +12362,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayu" = ( +"axN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12684,7 +12395,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayv" = ( +"axO" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12702,7 +12413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayw" = ( +"axP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12719,7 +12430,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayx" = ( +"axQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12740,7 +12451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayy" = ( +"axR" = ( /obj/machinery/flasher{ id = "Cell 5"; pixel_x = 0; @@ -12750,7 +12461,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayz" = ( +"axS" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 5"; @@ -12764,7 +12475,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayA" = ( +"axT" = ( /obj/machinery/power/apc{ dir = 2; name = "Vault APC"; @@ -12783,7 +12494,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"ayB" = ( +"axU" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12796,7 +12507,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayC" = ( +"axV" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -12814,7 +12525,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayD" = ( +"axW" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12832,7 +12543,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayE" = ( +"axX" = ( /obj/machinery/door/airlock/maintenance{ name = "Dorm SMES Access"; req_access_txt = "10;11;12" @@ -12848,7 +12559,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayF" = ( +"axY" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12863,7 +12574,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayG" = ( +"axZ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -12876,7 +12587,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayH" = ( +"aya" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -12885,14 +12596,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayI" = ( +"ayb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/landmark/lightsout, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayJ" = ( +"ayc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -12900,7 +12611,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayK" = ( +"ayd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -12911,7 +12622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayL" = ( +"aye" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -12920,7 +12631,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayM" = ( +"ayf" = ( /obj/machinery/light/small{ dir = 1 }, @@ -12928,14 +12639,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"ayN" = ( +"ayg" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/blue, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"ayO" = ( +"ayh" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/orange, /obj/effect/landmark/start/assistant, @@ -12943,21 +12654,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"ayP" = ( +"ayi" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/purple, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"ayQ" = ( +"ayj" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayR" = ( +"ayk" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/hos, /obj/machinery/airalarm{ @@ -12975,7 +12686,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayS" = ( +"ayl" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -12985,7 +12696,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayT" = ( +"aym" = ( /obj/structure/table/wood, /obj/item/device/modular_computer/laptop/preset/civillian, /turf/open/floor/carpet{ @@ -12994,7 +12705,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayU" = ( +"ayn" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /obj/item/weapon/stamp/hos, @@ -13004,14 +12715,14 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayV" = ( +"ayo" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayW" = ( +"ayp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -13020,7 +12731,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"ayX" = ( +"ayq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -13028,7 +12739,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"ayY" = ( +"ayr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -13038,7 +12749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"ayZ" = ( +"ays" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; icon_state = "plant-21" @@ -13047,7 +12758,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aza" = ( +"ayt" = ( /obj/structure/window/reinforced, /obj/machinery/computer/card, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -13059,14 +12770,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azb" = ( +"ayu" = ( /obj/structure/window/reinforced, /obj/machinery/computer/communications, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azc" = ( +"ayv" = ( /obj/structure/window/reinforced, /obj/machinery/computer/security, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -13077,7 +12788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azd" = ( +"ayw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -13086,7 +12797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aze" = ( +"ayx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13094,7 +12805,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azf" = ( +"ayy" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -13102,14 +12813,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azg" = ( +"ayz" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azh" = ( +"ayA" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /turf/open/floor/carpet{ @@ -13118,7 +12829,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azi" = ( +"ayB" = ( /obj/structure/table/wood, /obj/item/device/modular_computer/laptop/preset/civillian, /turf/open/floor/carpet{ @@ -13127,7 +12838,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azj" = ( +"ayC" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -13137,7 +12848,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azk" = ( +"ayD" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/rd, /obj/machinery/airalarm{ @@ -13155,14 +12866,14 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azl" = ( +"ayE" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azm" = ( +"ayF" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating{ @@ -13171,7 +12882,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azn" = ( +"ayG" = ( /obj/structure/closet, /obj/machinery/light/small{ dir = 1 @@ -13183,7 +12894,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azo" = ( +"ayH" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plating{ @@ -13192,7 +12903,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azp" = ( +"ayI" = ( /obj/machinery/power/apc{ dir = 8; name = "Fore Asteroid Maintenance APC"; @@ -13214,7 +12925,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azq" = ( +"ayJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13232,13 +12943,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azr" = ( +"ayK" = ( /obj/structure/closet/crate/internals, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"azs" = ( +"ayL" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -13253,23 +12964,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azt" = ( +"ayM" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azu" = ( -/obj/item/weapon/paper{ - info = "Due to complications during station constructions, the associated navbeacons for machinery has not been fully installed. Please use the delievery chute system for package delievery until further notice."; - name = "MULEBOT Notice" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/office) -"azv" = ( +"ayN" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; dir = 8; @@ -13280,14 +12982,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azw" = ( +"ayO" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/shuttle/supply) -"azx" = ( +"ayP" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; @@ -13298,7 +13000,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azy" = ( +"ayQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -13306,7 +13008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azz" = ( +"ayR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13318,7 +13020,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azA" = ( +"ayS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13329,7 +13031,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azB" = ( +"ayT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13341,7 +13043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azC" = ( +"ayU" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" }, @@ -13355,7 +13057,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azD" = ( +"ayV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13367,7 +13069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azE" = ( +"ayW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13375,7 +13077,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azF" = ( +"ayX" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -13383,7 +13085,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azG" = ( +"ayY" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -13397,7 +13099,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azH" = ( +"ayZ" = ( /obj/structure/shuttle/engine/propulsion/burst, /obj/structure/window/reinforced{ dir = 1; @@ -13405,21 +13107,21 @@ }, /turf/open/floor/plating/airless, /area/shuttle/mining) -"azI" = ( +"aza" = ( /obj/machinery/door/airlock/titanium{ name = "Labor Shuttle Airlock"; req_access_txt = "2" }, /turf/open/floor/plasteel/black, /area/shuttle/labor) -"azJ" = ( +"azb" = ( /obj/machinery/mineral/stacking_machine/laborstacker{ input_dir = 2; output_dir = 1 }, /turf/open/floor/plasteel/black, /area/shuttle/labor) -"azK" = ( +"azc" = ( /obj/machinery/computer/shuttle/labor, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -13431,7 +13133,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"azL" = ( +"azd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13439,7 +13141,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"azM" = ( +"aze" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -13450,7 +13152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"azN" = ( +"azf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13467,7 +13169,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azO" = ( +"azg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -13483,27 +13185,27 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azP" = ( +"azh" = ( /obj/machinery/vending/security, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"azQ" = ( +"azi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"azR" = ( +"azj" = ( /obj/machinery/holopad, /obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"azS" = ( +"azk" = ( /obj/machinery/door/window/brigdoor/westleft{ id = "Cell 1"; name = "Cell Door 1"; @@ -13515,7 +13217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azT" = ( +"azl" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13525,13 +13227,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azU" = ( +"azm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azV" = ( +"azn" = ( /obj/machinery/door/airlock/glass_large{ name = "Cell Block"; req_access_txt = "0"; @@ -13550,7 +13252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azW" = ( +"azo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/red/corner{ @@ -13560,7 +13262,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azX" = ( +"azp" = ( /obj/machinery/door/window/brigdoor/eastleft{ id = "Cell 5"; name = "Cell Door 5"; @@ -13572,12 +13274,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azY" = ( +"azq" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"azZ" = ( +"azr" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -13590,7 +13292,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAa" = ( +"azs" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -13606,7 +13308,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAb" = ( +"azt" = ( /obj/machinery/door/airlock/maintenance{ name = "Dorm SMES Access"; req_access_txt = "10;11;12" @@ -13622,7 +13324,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAc" = ( +"azu" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -13638,7 +13340,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAd" = ( +"azv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13668,7 +13370,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAe" = ( +"azw" = ( /obj/structure/disposalpipe/segment, /obj/structure/sign/map/left/ceres{ pixel_x = -32 @@ -13677,14 +13379,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAf" = ( +"azx" = ( /obj/structure/table/wood, /obj/item/weapon/storage/crayons, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAg" = ( +"azy" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -13694,7 +13396,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAh" = ( +"azz" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -13703,7 +13405,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAi" = ( +"azA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -13711,7 +13413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAj" = ( +"azB" = ( /obj/machinery/light{ dir = 4 }, @@ -13720,12 +13422,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAk" = ( +"azC" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aAl" = ( +"azD" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/blue, /obj/structure/window, @@ -13733,7 +13435,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aAm" = ( +"azE" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/orange, /obj/structure/window, @@ -13741,7 +13443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aAn" = ( +"azF" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/purple, /obj/structure/window, @@ -13749,7 +13451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aAo" = ( +"azG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -13763,7 +13465,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAp" = ( +"azH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13773,7 +13475,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAq" = ( +"azI" = ( /obj/structure/chair{ dir = 1 }, @@ -13786,7 +13488,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAr" = ( +"azJ" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -13798,7 +13500,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAs" = ( +"azK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13808,7 +13510,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAt" = ( +"azL" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/sign/map/left/ceres{ pixel_x = -32 @@ -13817,7 +13519,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAu" = ( +"azM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13826,7 +13528,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAv" = ( +"azN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13837,7 +13539,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAw" = ( +"azO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13850,7 +13552,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAx" = ( +"azP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13862,7 +13564,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAy" = ( +"azQ" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /turf/open/floor/plasteel/darkblue/side{ tag = "icon-darkblue (NORTH)"; @@ -13871,13 +13573,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAz" = ( +"azR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAA" = ( +"azS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13887,7 +13589,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAB" = ( +"azT" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -13899,7 +13601,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAC" = ( +"azU" = ( /obj/structure/chair{ dir = 1 }, @@ -13912,7 +13614,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAD" = ( +"azV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13922,7 +13624,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAE" = ( +"azW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -13937,7 +13639,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAF" = ( +"azX" = ( /obj/machinery/power/apc{ dir = 8; name = "Research Director's Private Quarters APC"; @@ -13964,7 +13666,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAG" = ( +"azY" = ( /obj/structure/chair{ dir = 1 }, @@ -13974,7 +13676,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAH" = ( +"azZ" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; @@ -13984,7 +13686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"aAI" = ( +"aAa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -13992,7 +13694,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"aAJ" = ( +"aAb" = ( /obj/machinery/door/airlock/engineering{ name = "Cargo Warehouse"; req_access_txt = "31" @@ -14004,13 +13706,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"aAK" = ( +"aAc" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAL" = ( +"aAd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -14018,13 +13720,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAM" = ( +"aAe" = ( /obj/machinery/light, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAN" = ( +"aAf" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; dir = 8; @@ -14039,23 +13741,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAO" = ( +"aAg" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "burst_l" }, /turf/open/floor/plating/airless, /area/shuttle/supply) -"aAP" = ( +"aAh" = ( /obj/structure/shuttle/engine/propulsion, /turf/open/floor/plating/airless, /area/shuttle/supply) -"aAQ" = ( +"aAi" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "burst_r" }, /turf/open/floor/plating/airless, /area/shuttle/supply) -"aAR" = ( +"aAj" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; @@ -14070,7 +13772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAS" = ( +"aAk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Cargo Eastern Loading Bay 2"; @@ -14085,7 +13787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAT" = ( +"aAl" = ( /obj/machinery/disposal/bin, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -14097,12 +13799,12 @@ dir = 1 }, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, /area/quartermaster/miningdock) -"aAU" = ( +"aAm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -14111,17 +13813,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aAV" = ( +"aAn" = ( /obj/structure/table, /obj/item/weapon/folder, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aAW" = ( +"aAo" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aAX" = ( +"aAp" = ( /obj/machinery/mineral/labor_claim_console{ machinedir = 1; pixel_x = 30; @@ -14129,18 +13831,18 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aAY" = ( +"aAq" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/airless, /area/space) -"aAZ" = ( +"aAr" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aBa" = ( +"aAs" = ( /obj/machinery/door/airlock/glass_security{ name = "Prisoner Processing"; req_access_txt = "2" @@ -14149,7 +13851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aBb" = ( +"aAt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14172,7 +13874,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBc" = ( +"aAu" = ( /obj/machinery/power/apc{ dir = 4; name = "Security Equipment APC"; @@ -14188,7 +13890,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aBd" = ( +"aAv" = ( /obj/structure/table, /obj/machinery/recharger, /obj/machinery/camera{ @@ -14200,7 +13902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aBe" = ( +"aAw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/holopad, /obj/effect/landmark/start/security_officer, @@ -14208,7 +13910,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aBf" = ( +"aAx" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 1"; name = "Cell 1 Locker" @@ -14217,7 +13919,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBg" = ( +"aAy" = ( /obj/machinery/door_timer{ id = "Cell 1"; name = "Cell 1"; @@ -14241,7 +13943,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBh" = ( +"aAz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -14249,14 +13951,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBi" = ( +"aAA" = ( /obj/machinery/light, /obj/machinery/computer/secure_data, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBj" = ( +"aAB" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -14272,7 +13974,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBk" = ( +"aAC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14296,7 +13998,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBl" = ( +"aAD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -14311,7 +14013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBm" = ( +"aAE" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -14327,7 +14029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBn" = ( +"aAF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -14335,7 +14037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBo" = ( +"aAG" = ( /obj/machinery/door_timer{ id = "Cell 5"; name = "Cell 5"; @@ -14359,7 +14061,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBp" = ( +"aAH" = ( /obj/structure/closet/secure_closet/brig{ id = "Cell 5"; name = "Cell 5 Locker" @@ -14368,19 +14070,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBq" = ( +"aAI" = ( /obj/structure/closet/lawcloset, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBr" = ( +"aAJ" = ( /obj/structure/chair, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBs" = ( +"aAK" = ( /obj/machinery/light{ dir = 1 }, @@ -14388,19 +14090,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBt" = ( +"aAL" = ( /obj/structure/chair/comfy/brown, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBu" = ( +"aAM" = ( /obj/structure/chair/comfy/black, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBv" = ( +"aAN" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -14411,7 +14113,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBw" = ( +"aAO" = ( /obj/structure/chair{ dir = 8 }, @@ -14419,7 +14121,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBx" = ( +"aAP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -14432,14 +14134,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBy" = ( +"aAQ" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBz" = ( +"aAR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -14452,7 +14154,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBA" = ( +"aAS" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -14464,7 +14166,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBB" = ( +"aAT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -14481,7 +14183,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBC" = ( +"aAU" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -14493,14 +14195,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBD" = ( +"aAV" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aBE" = ( +"aAW" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -14508,7 +14210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aBF" = ( +"aAX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -14517,7 +14219,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aBG" = ( +"aAY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14525,7 +14227,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBH" = ( +"aAZ" = ( /obj/machinery/light_switch{ pixel_x = -25 }, @@ -14538,7 +14240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBI" = ( +"aBa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14548,7 +14250,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBJ" = ( +"aBb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14558,7 +14260,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBK" = ( +"aBc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14573,7 +14275,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBL" = ( +"aBd" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -14590,7 +14292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBM" = ( +"aBe" = ( /obj/machinery/requests_console{ announcementConsole = 1; department = "Head of Security's Desk"; @@ -14605,14 +14307,14 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aBN" = ( +"aBf" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aBO" = ( +"aBg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -14621,14 +14323,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aBP" = ( +"aBh" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aBQ" = ( +"aBi" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -14637,7 +14339,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aBR" = ( +"aBj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -14646,14 +14348,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aBS" = ( +"aBk" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aBT" = ( +"aBl" = ( /obj/machinery/requests_console{ announcementConsole = 1; department = "Research Director's Desk"; @@ -14668,7 +14370,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aBU" = ( +"aBm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14684,7 +14386,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBV" = ( +"aBn" = ( /obj/structure/closet/crate, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, @@ -14694,7 +14396,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBW" = ( +"aBo" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -14703,7 +14405,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aBX" = ( +"aBp" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -14713,7 +14415,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aBY" = ( +"aBq" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -14722,7 +14424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aBZ" = ( +"aBr" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, @@ -14733,7 +14435,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCa" = ( +"aBs" = ( /obj/structure/chair{ dir = 8 }, @@ -14743,7 +14445,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aCb" = ( +"aBt" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -14751,7 +14453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aCc" = ( +"aBu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14765,7 +14467,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCd" = ( +"aBv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -14773,14 +14475,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCe" = ( +"aBw" = ( /obj/structure/table, /obj/machinery/recharger, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aCf" = ( +"aBx" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -14806,7 +14508,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aCg" = ( +"aBy" = ( /obj/structure/sign/map/left/ceres{ pixel_x = -32 }, @@ -14814,7 +14516,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCh" = ( +"aBz" = ( /obj/structure/table/wood, /obj/item/device/taperecorder/empty, /obj/item/device/tape/random, @@ -14822,7 +14524,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCi" = ( +"aBA" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -14830,7 +14532,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCj" = ( +"aBB" = ( /obj/structure/table/wood, /obj/item/weapon/folder/blue{ pixel_x = 5; @@ -14840,7 +14542,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCk" = ( +"aBC" = ( /obj/structure/table/wood, /obj/item/weapon/gavelblock, /obj/item/weapon/gavelhammer, @@ -14848,7 +14550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCl" = ( +"aBD" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -14858,7 +14560,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCm" = ( +"aBE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -14868,7 +14570,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCn" = ( +"aBF" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -14879,13 +14581,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCo" = ( +"aBG" = ( /obj/structure/window/reinforced, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCp" = ( +"aBH" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -14899,7 +14601,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCq" = ( +"aBI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -14913,7 +14615,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCr" = ( +"aBJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14925,7 +14627,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCs" = ( +"aBK" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -14934,7 +14636,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aCt" = ( +"aBL" = ( /obj/structure/chair/stool, /obj/structure/disposalpipe/segment{ dir = 4 @@ -14943,7 +14645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aCu" = ( +"aBM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 2; @@ -14953,7 +14655,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aCv" = ( +"aBN" = ( /obj/machinery/door/airlock{ name = "Male Sleeping Quarters" }, @@ -14963,12 +14665,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aCw" = ( +"aBO" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aCx" = ( +"aBP" = ( /obj/machinery/light{ dir = 4 }, @@ -14976,7 +14678,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aCy" = ( +"aBQ" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -14985,7 +14687,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aCz" = ( +"aBR" = ( /obj/structure/dresser, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -14993,7 +14695,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCA" = ( +"aBS" = ( /obj/structure/closet/secure_closet/hos, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -15001,7 +14703,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCB" = ( +"aBT" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; @@ -15013,7 +14715,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCC" = ( +"aBU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15023,7 +14725,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCD" = ( +"aBV" = ( /obj/machinery/door/airlock/security{ name = "Head of Security's Personal Quarters"; req_access_txt = "58" @@ -15037,7 +14739,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCE" = ( +"aBW" = ( /obj/machinery/camera{ c_tag = "Bridge Main 2"; dir = 1; @@ -15048,7 +14750,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCF" = ( +"aBX" = ( /obj/machinery/computer/crew, /obj/machinery/firealarm{ dir = 1; @@ -15058,13 +14760,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCG" = ( +"aBY" = ( /obj/machinery/computer/med_data, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCH" = ( +"aBZ" = ( /obj/structure/table, /obj/item/weapon/paper_bin, /obj/machinery/light, @@ -15072,49 +14774,49 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCI" = ( +"aCa" = ( /turf/open/floor/plasteel/darkblue/corner{ icon_state = "darkbluecorners"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCJ" = ( +"aCb" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCK" = ( +"aCc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/device/radio/beacon, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCL" = ( +"aCd" = ( /turf/open/floor/plasteel/darkblue/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCM" = ( +"aCe" = ( /obj/machinery/computer/security, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCN" = ( +"aCf" = ( /obj/machinery/computer/secure_data, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCO" = ( +"aCg" = ( /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCP" = ( +"aCh" = ( /obj/machinery/door/airlock/research{ name = "Research Director's Personal Quarters"; req_access_txt = "30" @@ -15128,7 +14830,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCQ" = ( +"aCi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15138,7 +14840,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCR" = ( +"aCj" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; @@ -15151,7 +14853,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCS" = ( +"aCk" = ( /obj/structure/closet{ icon_door = "pink"; name = "Research Director's Uniform" @@ -15168,7 +14870,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCT" = ( +"aCl" = ( /obj/structure/dresser, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -15176,7 +14878,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCU" = ( +"aCm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ dir = 8; @@ -15186,15 +14888,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/office) -"aCW" = ( +"aCn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15202,7 +14896,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCX" = ( +"aCo" = ( /obj/machinery/light{ dir = 1 }, @@ -15213,7 +14907,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCY" = ( +"aCp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15228,7 +14922,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCZ" = ( +"aCq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15242,7 +14936,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDa" = ( +"aCr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -15250,7 +14944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDb" = ( +"aCs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15259,7 +14953,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDc" = ( +"aCt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15272,7 +14966,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDd" = ( +"aCu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -15280,20 +14974,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDe" = ( +"aCv" = ( /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDf" = ( +"aCw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDg" = ( +"aCx" = ( /obj/machinery/power/apc{ dir = 1; name = "Mining Dock APC"; @@ -15313,11 +15007,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aDh" = ( +"aCy" = ( /obj/structure/closet/crate, /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aDi" = ( +"aCz" = ( /obj/machinery/door/airlock/titanium{ id_tag = "prisonshuttle"; name = "Labor Shuttle Airlock" @@ -15341,7 +15035,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aDj" = ( +"aCA" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Labor Camp Shuttle Airlock"; @@ -15350,7 +15044,7 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/security/processing) -"aDk" = ( +"aCB" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Labor Camp Shuttle Airlock" @@ -15359,13 +15053,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aDl" = ( +"aCC" = ( /obj/machinery/holopad, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aDm" = ( +"aCD" = ( /obj/machinery/door/airlock/security{ id_tag = "laborexit"; name = "Labor Shuttle"; @@ -15379,7 +15073,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aDn" = ( +"aCE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15395,7 +15089,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDo" = ( +"aCF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/button/door{ id = "GulagCivExit"; @@ -15409,7 +15103,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDp" = ( +"aCG" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_x = -32 }, @@ -15425,13 +15119,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDq" = ( +"aCH" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDr" = ( +"aCI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15439,7 +15133,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDs" = ( +"aCJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15449,7 +15143,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDt" = ( +"aCK" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -15468,7 +15162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDu" = ( +"aCL" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -15478,7 +15172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDv" = ( +"aCM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15488,7 +15182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDw" = ( +"aCN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15504,7 +15198,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDx" = ( +"aCO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15518,14 +15212,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDy" = ( +"aCP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDz" = ( +"aCQ" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -15538,7 +15232,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDA" = ( +"aCR" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -15552,7 +15246,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDB" = ( +"aCS" = ( /obj/machinery/camera{ c_tag = "Brig Hall East" }, @@ -15566,7 +15260,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDC" = ( +"aCT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15577,7 +15271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDD" = ( +"aCU" = ( /obj/machinery/door/airlock/security{ name = "Courtroom"; req_access = null; @@ -15590,7 +15284,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDE" = ( +"aCV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15598,7 +15292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDF" = ( +"aCW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15609,7 +15303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDG" = ( +"aCX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -15617,35 +15311,35 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDH" = ( +"aCY" = ( /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDI" = ( +"aCZ" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDJ" = ( +"aDa" = ( /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDK" = ( +"aDb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDL" = ( +"aDc" = ( /turf/open/floor/plasteel/blue/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDM" = ( +"aDd" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -15655,7 +15349,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDN" = ( +"aDe" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -15671,7 +15365,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDO" = ( +"aDf" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -15688,7 +15382,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDP" = ( +"aDg" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -15698,7 +15392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDQ" = ( +"aDh" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -15707,7 +15401,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDR" = ( +"aDi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15715,7 +15409,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDS" = ( +"aDj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15735,7 +15429,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDT" = ( +"aDk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -15745,13 +15439,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDU" = ( +"aDl" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDV" = ( +"aDm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15759,7 +15453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aDW" = ( +"aDn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15770,7 +15464,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aDX" = ( +"aDo" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -15783,7 +15477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aDY" = ( +"aDp" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHEAST)"; icon_state = "neutral"; @@ -15791,7 +15485,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aDZ" = ( +"aDq" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHWEST)"; icon_state = "neutral"; @@ -15799,12 +15493,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aEa" = ( +"aDr" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aEb" = ( +"aDs" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -15812,12 +15506,12 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aEc" = ( +"aDt" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEd" = ( +"aDu" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -15826,7 +15520,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEe" = ( +"aDv" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -15842,7 +15536,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEf" = ( +"aDw" = ( /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; name = "Bridge"; @@ -15851,11 +15545,15 @@ req_one_access_txt = "19;41" }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEg" = ( +"aDx" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -15872,7 +15570,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEh" = ( +"aDy" = ( /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; name = "Bridge"; @@ -15881,11 +15579,15 @@ req_one_access_txt = "19;41" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEi" = ( +"aDz" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -15894,7 +15596,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEj" = ( +"aDA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -15907,7 +15609,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEk" = ( +"aDB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -15920,7 +15622,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEl" = ( +"aDC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -15928,21 +15630,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEm" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Cargo Hall West"; - dir = 1; - icon_state = "camera"; - network = list("SS13","QM") - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/office) -"aEn" = ( +"aDD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15950,7 +15638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEo" = ( +"aDE" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -15958,7 +15646,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEp" = ( +"aDF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15970,7 +15658,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEq" = ( +"aDG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15981,7 +15669,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEr" = ( +"aDH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -15996,7 +15684,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEs" = ( +"aDI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16007,7 +15695,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEt" = ( +"aDJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16024,7 +15712,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEu" = ( +"aDK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16037,7 +15725,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEv" = ( +"aDL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -16051,7 +15739,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEw" = ( +"aDM" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/reinforced{ dir = 1; @@ -16059,7 +15747,7 @@ }, /turf/open/floor/plating/airless, /area/shuttle/labor) -"aEx" = ( +"aDN" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/sign/securearea{ @@ -16075,7 +15763,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aEy" = ( +"aDO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16097,7 +15785,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEz" = ( +"aDP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16118,7 +15806,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEA" = ( +"aDQ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16139,7 +15827,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEB" = ( +"aDR" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16156,7 +15844,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEC" = ( +"aDS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16174,7 +15862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aED" = ( +"aDT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16187,7 +15875,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEE" = ( +"aDU" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16201,7 +15889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEF" = ( +"aDV" = ( /obj/machinery/door/airlock/glass_security{ name = "Equipment Room"; req_access_txt = "1" @@ -16228,7 +15916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEG" = ( +"aDW" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16242,7 +15930,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEH" = ( +"aDX" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16262,7 +15950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEI" = ( +"aDY" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16275,7 +15963,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEJ" = ( +"aDZ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16293,7 +15981,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEK" = ( +"aEa" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16311,7 +15999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEL" = ( +"aEb" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16327,7 +16015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEM" = ( +"aEc" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16345,7 +16033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEN" = ( +"aEd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16365,7 +16053,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEO" = ( +"aEe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16379,30 +16067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEP" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aEQ" = ( +"aEf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16419,7 +16084,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aER" = ( +"aEg" = ( /obj/machinery/power/apc{ dir = 4; name = "Brig APC"; @@ -16440,12 +16105,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aES" = ( +"aEh" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aET" = ( +"aEi" = ( /obj/structure/chair{ dir = 4 }, @@ -16455,7 +16120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEU" = ( +"aEj" = ( /obj/structure/table/wood, /turf/open/floor/plasteel/red/side{ tag = "icon-red (NORTHEAST)"; @@ -16464,25 +16129,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEV" = ( +"aEk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEW" = ( +"aEl" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEX" = ( +"aEm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEY" = ( +"aEn" = ( /obj/structure/table/wood, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (NORTHWEST)"; @@ -16491,7 +16156,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEZ" = ( +"aEo" = ( /obj/structure/chair{ dir = 8 }, @@ -16502,7 +16167,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aFa" = ( +"aEp" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -16516,7 +16181,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFb" = ( +"aEq" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -16529,7 +16194,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFc" = ( +"aEr" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -16553,7 +16218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aFd" = ( +"aEs" = ( /obj/machinery/power/terminal{ tag = "icon-term (EAST)"; icon_state = "term"; @@ -16572,7 +16237,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFe" = ( +"aEt" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, /turf/open/floor/plating{ @@ -16581,19 +16246,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFf" = ( +"aEu" = ( /turf/open/floor/plasteel/neutral/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aFg" = ( +"aEv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aFh" = ( +"aEw" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/yellow, /obj/structure/window{ @@ -16606,7 +16271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aFi" = ( +"aEx" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/green, /obj/structure/window{ @@ -16618,7 +16283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aFj" = ( +"aEy" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/red, /obj/structure/window{ @@ -16630,20 +16295,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aFk" = ( +"aEz" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFl" = ( +"aEA" = ( /obj/structure/rack, /obj/item/device/flashlight, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFm" = ( +"aEB" = ( /obj/machinery/power/apc{ dir = 1; name = "Head of Security's Personal Quarters APC"; @@ -16661,14 +16326,14 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aFn" = ( +"aEC" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFo" = ( +"aED" = ( /obj/machinery/power/apc{ dir = 4; name = "Bridge APC"; @@ -16688,7 +16353,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFp" = ( +"aEE" = ( /turf/open/floor/plasteel/darkblue/side{ tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; @@ -16696,7 +16361,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFq" = ( +"aEF" = ( /obj/machinery/camera{ c_tag = "Bridge Midway 1" }, @@ -16712,7 +16377,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFr" = ( +"aEG" = ( /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/device/destTagger, @@ -16723,7 +16388,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFs" = ( +"aEH" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plasteel/darkblue/side{ @@ -16733,7 +16398,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFt" = ( +"aEI" = ( /obj/structure/table, /obj/machinery/recharger, /turf/open/floor/plasteel/darkblue/side{ @@ -16743,7 +16408,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFu" = ( +"aEJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16756,7 +16421,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFv" = ( +"aEK" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -16765,7 +16430,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFw" = ( +"aEL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16784,7 +16449,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFx" = ( +"aEM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -16796,7 +16461,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFy" = ( +"aEN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16815,7 +16480,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFz" = ( +"aEO" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular{ pixel_x = 0 @@ -16838,7 +16503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFA" = ( +"aEP" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/o2, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -16854,7 +16519,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFB" = ( +"aEQ" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -16869,7 +16534,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFC" = ( +"aER" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -16884,14 +16549,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFD" = ( +"aES" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFE" = ( +"aET" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /turf/open/floor/carpet{ @@ -16900,7 +16565,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFF" = ( +"aEU" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/carpet{ @@ -16909,7 +16574,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFG" = ( +"aEV" = ( /obj/structure/dresser, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -16917,7 +16582,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFH" = ( +"aEW" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/qm, /obj/machinery/airalarm{ @@ -16935,14 +16600,14 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFI" = ( +"aEX" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFJ" = ( +"aEY" = ( /obj/machinery/door/airlock/glass_mining{ name = "Cargo Bay"; req_access_txt = "0"; @@ -16953,7 +16618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFK" = ( +"aEZ" = ( /obj/machinery/door/airlock/glass_mining{ name = "Cargo Bay"; req_access_txt = "0"; @@ -16963,7 +16628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFL" = ( +"aFa" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -16974,7 +16639,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFM" = ( +"aFb" = ( /obj/structure/table, /obj/item/clothing/gloves/fingerless, /obj/item/clothing/head/soft, @@ -16982,20 +16647,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFN" = ( +"aFc" = ( /obj/structure/closet/wardrobe/cargotech, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFO" = ( +"aFd" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFP" = ( +"aFe" = ( /obj/structure/table, /obj/item/weapon/hand_labeler, /obj/item/hand_labeler_refill, @@ -17009,11 +16674,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFQ" = ( +"aFf" = ( /obj/structure/shuttle/engine/propulsion, /turf/open/floor/plating/airless, /area/shuttle/labor) -"aFR" = ( +"aFg" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -17023,7 +16688,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFS" = ( +"aFh" = ( /obj/machinery/camera{ c_tag = "Labor Shuttle Dock South"; dir = 1 @@ -17036,7 +16701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFT" = ( +"aFi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -17052,7 +16717,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFU" = ( +"aFj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17060,7 +16725,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFV" = ( +"aFk" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17081,7 +16746,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFW" = ( +"aFl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/door/airlock/maintenance{ @@ -17095,7 +16760,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFX" = ( +"aFm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17103,7 +16768,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aFY" = ( +"aFn" = ( /obj/effect/landmark/secequipment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17115,7 +16780,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aFZ" = ( +"aFo" = ( /obj/effect/landmark/secequipment, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/light, @@ -17123,7 +16788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aGa" = ( +"aFp" = ( /obj/effect/landmark/secequipment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17132,7 +16797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aGb" = ( +"aFq" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -17145,7 +16810,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aGc" = ( +"aFr" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -17161,7 +16826,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aGd" = ( +"aFs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17173,7 +16838,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGe" = ( +"aFt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17190,7 +16855,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGf" = ( +"aFu" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -17201,7 +16866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGg" = ( +"aFv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17218,7 +16883,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGh" = ( +"aFw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (WEST)"; @@ -17227,7 +16892,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGi" = ( +"aFx" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17239,7 +16904,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGj" = ( +"aFy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17250,7 +16915,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGk" = ( +"aFz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17263,7 +16928,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGl" = ( +"aFA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17279,7 +16944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGm" = ( +"aFB" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (WEST)"; @@ -17288,7 +16953,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGn" = ( +"aFC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17301,7 +16966,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGo" = ( +"aFD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17310,7 +16975,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGp" = ( +"aFE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -17326,12 +16991,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGq" = ( +"aFF" = ( /turf/open/floor/plasteel/red/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGr" = ( +"aFG" = ( /obj/structure/sign/goldenplaque{ pixel_y = -32 }, @@ -17339,7 +17004,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGs" = ( +"aFH" = ( /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (WEST)"; icon_state = "redcorner"; @@ -17347,20 +17012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGt" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (WEST)"; - icon_state = "redcorner"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aGu" = ( +"aFI" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -17371,7 +17023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGv" = ( +"aFJ" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -17380,7 +17032,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGw" = ( +"aFK" = ( /obj/structure/chair{ dir = 4 }, @@ -17388,7 +17040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGx" = ( +"aFL" = ( /obj/structure/table/wood, /obj/item/weapon/book/manual/wiki/security_space_law, /turf/open/floor/plasteel/red/side{ @@ -17397,7 +17049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGy" = ( +"aFM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -17406,7 +17058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGz" = ( +"aFN" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -17414,7 +17066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGA" = ( +"aFO" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -17422,7 +17074,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGB" = ( +"aFP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -17431,7 +17083,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGC" = ( +"aFQ" = ( /obj/structure/table/wood, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (SOUTHWEST)"; @@ -17440,7 +17092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGD" = ( +"aFR" = ( /obj/structure/chair{ dir = 8 }, @@ -17448,18 +17100,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGE" = ( +"aFS" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aGF" = ( +"aFT" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aGG" = ( +"aFU" = ( /obj/structure/closet/secure_closet/personal, /obj/machinery/light, /obj/effect/spawner/lootdrop/costume, @@ -17467,20 +17119,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aGH" = ( +"aFV" = ( /obj/machinery/light/small, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aGI" = ( +"aFW" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/yellow, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aGJ" = ( +"aFX" = ( /obj/machinery/light/small, /obj/structure/sign/poster/random{ name = "random official poster"; @@ -17491,21 +17143,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aGK" = ( +"aFY" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/green, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aGL" = ( +"aFZ" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/red, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aGM" = ( +"aGa" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -17514,7 +17166,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGN" = ( +"aGb" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -17525,7 +17177,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGO" = ( +"aGc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -17535,7 +17187,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGP" = ( +"aGd" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -17555,7 +17207,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aGQ" = ( +"aGe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17570,7 +17222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGR" = ( +"aGf" = ( /obj/machinery/door/airlock/maintenance{ name = "Bridge APC Access"; req_access_txt = "10;11;12" @@ -17584,7 +17236,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGS" = ( +"aGg" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -17601,7 +17253,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGT" = ( +"aGh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17617,7 +17269,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGU" = ( +"aGi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17638,7 +17290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGV" = ( +"aGj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17652,7 +17304,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGW" = ( +"aGk" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -17675,7 +17327,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGX" = ( +"aGl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17688,7 +17340,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGY" = ( +"aGm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -17701,7 +17353,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGZ" = ( +"aGn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17711,7 +17363,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHa" = ( +"aGo" = ( /obj/structure/table/wood, /obj/item/device/modular_computer/laptop/preset/civillian, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -17723,7 +17375,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHb" = ( +"aGp" = ( /obj/structure/chair{ dir = 8 }, @@ -17736,7 +17388,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHc" = ( +"aGq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17746,7 +17398,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHd" = ( +"aGr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -17765,7 +17417,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHe" = ( +"aGs" = ( /obj/machinery/power/apc{ dir = 8; name = "Quartermaster's Private Quarters APC"; @@ -17792,7 +17444,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHf" = ( +"aGt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/extinguisher_cabinet{ pixel_x = -24 @@ -17808,33 +17460,33 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHg" = ( +"aGu" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/office) -"aHh" = ( +"aGv" = ( /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/office) -"aHi" = ( +"aGw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, /area/quartermaster/office) -"aHj" = ( +"aGx" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; departmentType = 2; @@ -17849,7 +17501,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHk" = ( +"aGy" = ( /obj/machinery/autolathe, /obj/machinery/light{ dir = 1 @@ -17861,7 +17513,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHl" = ( +"aGz" = ( /obj/structure/table, /obj/item/device/multitool, /obj/machinery/camera{ @@ -17881,14 +17533,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHm" = ( +"aGA" = ( /obj/structure/table, /obj/item/weapon/folder, /obj/item/weapon/stamp/denied{ pixel_x = 5; pixel_y = 3 }, -/obj/item/weapon/stamp, /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -17896,11 +17547,12 @@ }, /obj/item/stack/packageWrap, /obj/item/device/destTagger, +/obj/item/weapon/stamp, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHn" = ( +"aGB" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular, /obj/structure/noticeboard{ @@ -17910,7 +17562,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHo" = ( +"aGC" = ( /obj/structure/table, /obj/machinery/computer/stockexchange, /obj/structure/sign/poster/random{ @@ -17923,12 +17575,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHp" = ( +"aGD" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aHq" = ( +"aGE" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -17936,7 +17588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aHr" = ( +"aGF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17952,12 +17604,12 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aHs" = ( +"aGG" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aHt" = ( +"aGH" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -17970,7 +17622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aHu" = ( +"aGI" = ( /obj/machinery/door/airlock/security{ name = "Detective's Office"; req_access_txt = "4" @@ -17988,7 +17640,7 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) -"aHv" = ( +"aGJ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18001,7 +17653,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aHw" = ( +"aGK" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -18010,12 +17662,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHx" = ( +"aGL" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHy" = ( +"aGM" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18033,7 +17685,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHz" = ( +"aGN" = ( /obj/machinery/door/airlock{ name = "Law Office"; req_access_txt = "38" @@ -18057,7 +17709,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHA" = ( +"aGO" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18074,31 +17726,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHB" = ( +"aGP" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aHC" = ( +"aGQ" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aHD" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/red/side{ - icon_state = "red"; - dir = 4; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aHE" = ( +"aGR" = ( /obj/machinery/door/airlock/glass_security{ cyclelinkeddir = 2; id_tag = "innerbrig"; @@ -18110,35 +17750,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aHF" = ( -/obj/machinery/door/airlock/glass_security{ - cyclelinkeddir = 2; - id_tag = "innerbrig"; - name = "Brig"; - req_access_txt = "0"; - req_one_access_txt = "38;63" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (EAST)"; - icon_state = "redcorner"; - dir = 4; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aHG" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/red/side{ - icon_state = "red"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aHH" = ( +"aGS" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -18149,7 +17761,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aHI" = ( +"aGT" = ( /obj/machinery/camera{ c_tag = "Courtroom Main South"; dir = 1 @@ -18160,7 +17772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHJ" = ( +"aGU" = ( /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; @@ -18168,18 +17780,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHK" = ( +"aGV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHL" = ( +"aGW" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHM" = ( +"aGX" = ( /turf/open/floor/plasteel/blue/corner{ tag = "icon-bluecorner (EAST)"; icon_state = "bluecorner"; @@ -18187,7 +17799,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHN" = ( +"aGY" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -18202,18 +17814,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHO" = ( +"aGZ" = ( /obj/machinery/recharge_station, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aHP" = ( +"aHa" = ( /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aHQ" = ( +"aHb" = ( /obj/machinery/door/airlock/glass{ name = "Dormitories" }, @@ -18223,7 +17835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aHR" = ( +"aHc" = ( /obj/machinery/door/airlock/glass{ name = "Dormitories" }, @@ -18232,24 +17844,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aHS" = ( +"aHd" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aHT" = ( +"aHe" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aHU" = ( +"aHf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHV" = ( +"aHg" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -18258,7 +17870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHW" = ( +"aHh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18270,7 +17882,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHX" = ( +"aHi" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -18278,7 +17890,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHY" = ( +"aHj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -18288,7 +17900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHZ" = ( +"aHk" = ( /obj/machinery/door/airlock/mining{ name = "Quartermaster's Private Quarters"; req_access_txt = "41" @@ -18302,7 +17914,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIa" = ( +"aHl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -18312,7 +17924,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIb" = ( +"aHm" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -18323,7 +17935,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIc" = ( +"aHn" = ( /obj/machinery/light_switch{ pixel_y = -25 }, @@ -18338,7 +17950,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aId" = ( +"aHo" = ( /obj/structure/closet{ icon_door = "orange"; name = "Quartermaster's Uniform" @@ -18353,7 +17965,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIe" = ( +"aHp" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -18366,7 +17978,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aIf" = ( +"aHq" = ( /obj/machinery/power/apc{ dir = 2; name = "Gravity Generator APC"; @@ -18376,7 +17988,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aIg" = ( +"aHr" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -18387,7 +17999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aIh" = ( +"aHs" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -18397,7 +18009,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aIi" = ( +"aHt" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -18406,7 +18018,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aIj" = ( +"aHu" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18417,7 +18029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIk" = ( +"aHv" = ( /obj/machinery/computer/secure_data, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -18429,7 +18041,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIl" = ( +"aHw" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -18443,7 +18055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIm" = ( +"aHx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18453,7 +18065,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIn" = ( +"aHy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -18469,7 +18081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIo" = ( +"aHz" = ( /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -18485,7 +18097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aIp" = ( +"aHA" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -18506,14 +18118,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aIq" = ( +"aHB" = ( /obj/structure/closet/secure_closet/detective, /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aIr" = ( +"aHC" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -18522,13 +18134,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aIs" = ( +"aHD" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aIt" = ( +"aHE" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -18536,19 +18148,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aIu" = ( +"aHF" = ( /obj/structure/filingcabinet, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aIv" = ( +"aHG" = ( /obj/machinery/computer/secure_data, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aIw" = ( +"aHH" = ( /obj/structure/filingcabinet, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -18559,7 +18171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIx" = ( +"aHI" = ( /obj/machinery/button/door{ id = "lawyerinterior"; name = "Privacy Shutters"; @@ -18570,7 +18182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIy" = ( +"aHJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -18580,7 +18192,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIz" = ( +"aHK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18595,7 +18207,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIA" = ( +"aHL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/power/apc{ dir = 4; @@ -18611,7 +18223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIB" = ( +"aHM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/button/flasher{ id = "HoldingCell"; @@ -18625,7 +18237,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIC" = ( +"aHN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18635,7 +18247,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aID" = ( +"aHO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -18643,27 +18255,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIE" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/table, -/obj/item/stack/packageWrap, -/obj/item/device/destTagger, -/turf/open/floor/plasteel/red/side{ - icon_state = "red"; - dir = 6; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aIF" = ( +"aHP" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18675,7 +18267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIG" = ( +"aHQ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -18685,7 +18277,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIH" = ( +"aHR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (EAST)"; @@ -18694,14 +18286,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aII" = ( +"aHS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/vending/coffee, /turf/open/floor/plasteel/red/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIJ" = ( +"aHT" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -18709,7 +18301,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIK" = ( +"aHU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18717,7 +18309,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aIL" = ( +"aHV" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18726,7 +18318,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aIM" = ( +"aHW" = ( /obj/machinery/door/airlock/glass{ name = "Courtroom"; req_access_txt = "1" @@ -18736,7 +18328,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aIN" = ( +"aHX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18745,7 +18337,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aIO" = ( +"aHY" = ( /obj/machinery/light/small{ dir = 8 }, @@ -18753,7 +18345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aIP" = ( +"aHZ" = ( /obj/machinery/door/airlock{ id_tag = "b3" }, @@ -18761,7 +18353,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aIQ" = ( +"aIa" = ( /obj/structure/urinal{ pixel_x = 32 }, @@ -18769,13 +18361,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aIR" = ( +"aIb" = ( /obj/machinery/washing_machine, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIS" = ( +"aIc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; @@ -18785,7 +18377,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIT" = ( +"aId" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -18794,7 +18386,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIU" = ( +"aIe" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18808,7 +18400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIV" = ( +"aIf" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -18817,18 +18409,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIW" = ( +"aIg" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIX" = ( +"aIh" = ( /obj/structure/closet/wardrobe/pjs, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIY" = ( +"aIi" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/hop, /obj/effect/landmark/start/head_of_personnel, @@ -18836,7 +18428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aIZ" = ( +"aIj" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -18848,7 +18440,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJa" = ( +"aIk" = ( /obj/structure/closet/secure_closet/hop, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -18860,7 +18452,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJb" = ( +"aIl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18868,7 +18460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJc" = ( +"aIm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18885,7 +18477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJd" = ( +"aIn" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -18898,7 +18490,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJe" = ( +"aIo" = ( /obj/structure/bed/dogbed, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -18913,7 +18505,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJf" = ( +"aIp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18925,7 +18517,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJg" = ( +"aIq" = ( /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; name = "Head of Personnel's Office"; @@ -18942,7 +18534,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJh" = ( +"aIr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18950,7 +18542,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJi" = ( +"aIs" = ( /obj/machinery/light, /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; @@ -18963,7 +18555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJj" = ( +"aIt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18971,7 +18563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJk" = ( +"aIu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18980,7 +18572,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJl" = ( +"aIv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18994,7 +18586,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJm" = ( +"aIw" = ( /obj/machinery/camera{ c_tag = "Bridge Midway 2"; dir = 1; @@ -19005,7 +18597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJn" = ( +"aIx" = ( /obj/machinery/light, /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; @@ -19015,19 +18607,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJo" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 1"; - dir = 8; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"aJp" = ( +"aIy" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -19036,7 +18616,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aJq" = ( +"aIz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -19046,13 +18626,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aJr" = ( +"aIA" = ( /mob/living/simple_animal/sloth/paperwork, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aJs" = ( +"aIB" = ( /obj/machinery/door/airlock/glass_security{ name = "Security Office"; req_access_txt = "63" @@ -19061,19 +18641,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJt" = ( +"aIC" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJu" = ( +"aID" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJv" = ( +"aIE" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -19085,7 +18665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJw" = ( +"aIF" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -19110,7 +18690,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJx" = ( +"aIG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -19128,7 +18708,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJy" = ( +"aIH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -19144,7 +18724,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJz" = ( +"aII" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -19160,7 +18740,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJA" = ( +"aIJ" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -19180,7 +18760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJB" = ( +"aIK" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -19190,12 +18770,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJC" = ( +"aIL" = ( /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJD" = ( +"aIM" = ( /obj/structure/chair{ dir = 4 }, @@ -19204,7 +18784,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJE" = ( +"aIN" = ( /obj/structure/table/wood, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/clothing/glasses/sunglasses, @@ -19213,7 +18793,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJF" = ( +"aIO" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, @@ -19222,7 +18802,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJG" = ( +"aIP" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -19233,7 +18813,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJH" = ( +"aIQ" = ( /obj/structure/rack, /obj/item/weapon/storage/briefcase, /obj/item/weapon/storage/briefcase, @@ -19246,19 +18826,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aJI" = ( +"aIR" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aJJ" = ( +"aIS" = ( /obj/structure/table/wood, /obj/structure/disposalpipe/segment, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aJK" = ( +"aIT" = ( /obj/structure/table/wood, /obj/item/weapon/book/manual/wiki/security_space_law, /obj/structure/cable/orange{ @@ -19270,7 +18850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aJL" = ( +"aIU" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/green, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -19278,21 +18858,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aJM" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/orange, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aJN" = ( +"aIV" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -19305,7 +18871,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aJO" = ( +"aIW" = ( /obj/structure/chair{ dir = 1 }, @@ -19320,7 +18886,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJP" = ( +"aIX" = ( /obj/structure/chair{ dir = 1 }, @@ -19330,7 +18896,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJQ" = ( +"aIY" = ( /obj/structure/chair{ dir = 1 }, @@ -19339,13 +18905,13 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJR" = ( +"aIZ" = ( /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/crew_quarters/courtroom) -"aJS" = ( +"aJa" = ( /obj/structure/chair{ dir = 1 }, @@ -19355,7 +18921,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJT" = ( +"aJb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -19369,7 +18935,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJU" = ( +"aJc" = ( /obj/machinery/button/door{ id = "b3"; name = "Privacy Bolts"; @@ -19381,7 +18947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aJV" = ( +"aJd" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -19391,18 +18957,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aJW" = ( -/obj/effect/landmark/start/assistant, +"aJe" = ( /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aJX" = ( -/turf/open/floor/plasteel/barber{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/locker) -"aJY" = ( +"aJf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -19414,7 +18974,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aJZ" = ( +"aJg" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (EAST)"; icon_state = "neutral"; @@ -19422,24 +18982,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aKa" = ( +"aJh" = ( /obj/structure/closet/wardrobe/grey, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aKb" = ( +"aJi" = ( /obj/structure/dresser, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKc" = ( +"aJj" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKd" = ( +"aJk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -19447,7 +19007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKe" = ( +"aJl" = ( /obj/machinery/door/airlock/command{ name = "Head of Personnel's Private Quarters"; req_access = null; @@ -19460,7 +19020,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKf" = ( +"aJm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19472,7 +19032,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKg" = ( +"aJn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19484,7 +19044,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKh" = ( +"aJo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19495,7 +19055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKi" = ( +"aJp" = ( /obj/machinery/light{ dir = 1 }, @@ -19509,7 +19069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKj" = ( +"aJq" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -19521,13 +19081,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKk" = ( +"aJr" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aKl" = ( +"aJs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -19538,13 +19098,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aKm" = ( +"aJt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/darkblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aKn" = ( +"aJu" = ( /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -19566,14 +19126,14 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aKo" = ( +"aJv" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter{ name = "Cargo Quantum Pad" }) -"aKp" = ( +"aJw" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -19584,7 +19144,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aKq" = ( +"aJx" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -19593,7 +19153,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKr" = ( +"aJy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19601,7 +19161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKs" = ( +"aJz" = ( /obj/machinery/photocopier, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -19610,7 +19170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKt" = ( +"aJA" = ( /obj/machinery/computer/cargo, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -19620,7 +19180,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKu" = ( +"aJB" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -19630,7 +19190,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKv" = ( +"aJC" = ( /obj/structure/table, /obj/machinery/computer/stockexchange, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -19640,7 +19200,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKw" = ( +"aJD" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -19649,7 +19209,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKx" = ( +"aJE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19658,7 +19218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKy" = ( +"aJF" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -19669,18 +19229,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKz" = ( -/obj/structure/closet/secure_closet/security/engine, +"aJG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/closet/secure_closet/security/cargo, /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 10; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKA" = ( +"aJH" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -19702,14 +19262,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKB" = ( +"aJI" = ( /obj/structure/filingcabinet, /obj/machinery/light, /turf/open/floor/plasteel/red/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKC" = ( +"aJJ" = ( /obj/structure/table, /obj/machinery/recharger, /obj/machinery/newscaster/security_unit{ @@ -19719,7 +19279,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKD" = ( +"aJK" = ( /obj/machinery/camera{ c_tag = "Cargo Security Checkpoint"; dir = 8; @@ -19732,7 +19292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKE" = ( +"aJL" = ( /obj/machinery/light/small{ dir = 4 }, @@ -19744,13 +19304,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aKF" = ( +"aJM" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aKG" = ( +"aJN" = ( /obj/machinery/light/small, /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -19758,7 +19318,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aKH" = ( +"aJO" = ( /obj/structure/table/wood, /obj/item/weapon/storage/box/evidence, /obj/item/weapon/hand_labeler, @@ -19775,14 +19335,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aKI" = ( +"aJP" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aKJ" = ( +"aJQ" = ( /obj/structure/table/wood, /obj/machinery/computer/med_data/laptop, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -19790,12 +19350,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aKK" = ( +"aJR" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aKL" = ( +"aJS" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -19807,7 +19367,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aKM" = ( +"aJT" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -19821,14 +19381,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aKN" = ( +"aJU" = ( /obj/structure/filingcabinet, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aKO" = ( +"aJV" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -19837,18 +19397,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aKP" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (WEST)"; - icon_state = "redcorner"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aKQ" = ( +"aJW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -19864,7 +19413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aKR" = ( +"aJX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -19875,13 +19424,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aKS" = ( +"aJY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aKT" = ( +"aJZ" = ( /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; @@ -19889,34 +19438,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aKU" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/airalarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/open/floor/plasteel/red/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aKV" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23; - pixel_y = 0 - }, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/crew_quarters/courtroom) -"aKW" = ( +"aKa" = ( /obj/machinery/light{ dir = 4 }, @@ -19928,7 +19450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aKX" = ( +"aKb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19936,7 +19458,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aKY" = ( +"aKc" = ( /obj/structure/table, /obj/structure/bedsheetbin, /obj/machinery/light{ @@ -19950,7 +19472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aKZ" = ( +"aKd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19958,7 +19480,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLa" = ( +"aKe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19967,7 +19489,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLb" = ( +"aKf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19978,7 +19500,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLc" = ( +"aKg" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -19988,7 +19510,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLd" = ( +"aKh" = ( /obj/structure/closet/wardrobe/mixed, /obj/machinery/light{ dir = 4 @@ -19997,20 +19519,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLe" = ( +"aKi" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLf" = ( +"aKj" = ( /obj/structure/chair, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLg" = ( +"aKk" = ( /obj/machinery/light/small{ dir = 4 }, @@ -20019,12 +19541,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLh" = ( +"aKl" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLi" = ( +"aKm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -20033,7 +19555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLj" = ( +"aKn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -20042,7 +19564,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLk" = ( +"aKo" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -20050,7 +19572,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLl" = ( +"aKp" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -20072,17 +19594,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aLm" = ( +"aKq" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aLn" = ( +"aKr" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aLo" = ( +"aKs" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -20092,7 +19614,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLp" = ( +"aKt" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -20111,7 +19633,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLq" = ( +"aKu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -20130,7 +19652,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLr" = ( +"aKv" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -20145,7 +19667,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLs" = ( +"aKw" = ( /obj/machinery/door/airlock/glass_mining{ name = "Cargo Office"; req_access_txt = "0"; @@ -20157,14 +19679,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aLt" = ( +"aKx" = ( /obj/machinery/mineral/ore_redemption, /obj/machinery/door/firedoor, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aLu" = ( +"aKy" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northright{ name = "Cargo Desk"; @@ -20174,7 +19696,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aLv" = ( +"aKz" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/deliveryChute{ tag = "icon-intake (NORTH)"; @@ -20185,7 +19707,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aLw" = ( +"aKA" = ( /obj/structure/table/wood, /obj/item/device/tape/random, /obj/item/device/tape/random{ @@ -20199,13 +19721,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLx" = ( +"aKB" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLy" = ( +"aKC" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20213,7 +19735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLz" = ( +"aKD" = ( /obj/structure/table/wood, /obj/item/device/camera/detective, /obj/item/weapon/lighter, @@ -20221,7 +19743,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLA" = ( +"aKE" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -20233,7 +19755,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLB" = ( +"aKF" = ( /obj/machinery/light{ dir = 8 }, @@ -20241,7 +19763,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLC" = ( +"aKG" = ( /obj/structure/table/wood, /obj/item/weapon/folder/red{ pixel_x = 8; @@ -20256,7 +19778,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLD" = ( +"aKH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -20266,7 +19788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLE" = ( +"aKI" = ( /obj/machinery/photocopier, /obj/machinery/light{ dir = 4; @@ -20277,31 +19799,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLF" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = -29; - pixel_y = 0 - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (WEST)"; - icon_state = "redcorner"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aLG" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/plasteel/red/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aLH" = ( +"aKJ" = ( /obj/machinery/light/small{ dir = 8 }, @@ -20318,7 +19816,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLI" = ( +"aKK" = ( /obj/machinery/door/airlock{ id_tag = "b2" }, @@ -20326,7 +19824,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLJ" = ( +"aKL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -20335,7 +19833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLK" = ( +"aKM" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -20353,7 +19851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLL" = ( +"aKN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20361,7 +19859,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLM" = ( +"aKO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20369,7 +19867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLN" = ( +"aKP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -20377,7 +19875,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLO" = ( +"aKQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -20386,7 +19884,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLP" = ( +"aKR" = ( /obj/structure/closet/wardrobe/mixed, /obj/structure/sign/poster/random{ name = "random official poster"; @@ -20397,20 +19895,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLQ" = ( +"aKS" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLR" = ( +"aKT" = ( /obj/structure/table/wood, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLS" = ( +"aKU" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -20419,7 +19917,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLT" = ( +"aKV" = ( /obj/structure/table, /obj/item/weapon/folder/red{ pixel_x = 8; @@ -20429,7 +19927,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLU" = ( +"aKW" = ( /obj/structure/table, /obj/machinery/camera{ c_tag = "Head of Personnel's Office"; @@ -20442,13 +19940,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLV" = ( +"aKX" = ( /obj/structure/filingcabinet, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLW" = ( +"aKY" = ( /obj/structure/table, /obj/item/weapon/paper_bin, /obj/item/weapon/stamp/hop, @@ -20456,13 +19954,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLX" = ( +"aKZ" = ( /obj/machinery/computer/card, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLY" = ( +"aLa" = ( /obj/structure/chair/comfy, /obj/machinery/button/flasher{ id = "hopflash"; @@ -20488,7 +19986,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLZ" = ( +"aLb" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; icon_state = "plant-21" @@ -20499,7 +19997,7 @@ tag = "icon-darkblue (WEST)" }, /area/bridge) -"aMa" = ( +"aLc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -20509,7 +20007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMb" = ( +"aLd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -20520,7 +20018,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMc" = ( +"aLe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -20541,7 +20039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMd" = ( +"aLf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -20552,7 +20050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMe" = ( +"aLg" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -20562,7 +20060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMf" = ( +"aLh" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -20578,14 +20076,16 @@ tag = "icon-darkblue (EAST)" }, /area/bridge) -"aMg" = ( +"aLi" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMh" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLj" = ( /obj/machinery/camera{ c_tag = "Command SMES"; dir = 6; @@ -20594,50 +20094,25 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMi" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aMj" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Fore Asteroid Hallway APC"; - pixel_x = 0; - pixel_y = 24 - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aMk" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLk" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/structure/sign/electricshock{ pixel_y = 32 }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMl" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLl" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange{ d2 = 8; @@ -20646,8 +20121,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMm" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLm" = ( /obj/structure/table, /obj/machinery/light/small{ dir = 8 @@ -20656,25 +20133,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aMn" = ( +"aLn" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aMo" = ( +"aLo" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aMp" = ( +"aLp" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aMq" = ( +"aLq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -20693,7 +20170,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aMr" = ( +"aLr" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -20701,7 +20178,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aMs" = ( +"aLs" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -20723,7 +20200,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aMt" = ( +"aLt" = ( /obj/structure/chair{ dir = 4 }, @@ -20737,7 +20214,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMu" = ( +"aLu" = ( /obj/machinery/light{ dir = 1 }, @@ -20751,7 +20228,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMv" = ( +"aLv" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 1; @@ -20764,7 +20241,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMw" = ( +"aLw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20778,7 +20255,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMx" = ( +"aLx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20793,7 +20270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMy" = ( +"aLy" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -20809,7 +20286,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMz" = ( +"aLz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -20821,7 +20298,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMA" = ( +"aLA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -20833,7 +20310,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMB" = ( +"aLB" = ( /obj/machinery/computer/cargo/request, /obj/structure/disposalpipe/segment{ dir = 2; @@ -20846,7 +20323,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMC" = ( +"aLC" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -20854,7 +20331,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aMD" = ( +"aLD" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -20881,28 +20358,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aME" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Fore Asteroid Hallway APC"; - pixel_x = 0; - pixel_y = 24 - }, +"aLE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/turf_decal/stripes/end, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMF" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -20917,8 +20385,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMG" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLG" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -20932,8 +20402,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aMH" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aLH" = ( /obj/structure/rack, /obj/item/weapon/storage/briefcase, /obj/item/weapon/storage/briefcase, @@ -20941,7 +20413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aMI" = ( +"aLI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -20949,7 +20421,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aMJ" = ( +"aLJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20957,7 +20429,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aMK" = ( +"aLK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -20967,13 +20439,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aML" = ( -/obj/effect/landmark/start/lawyer, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/lawoffice) -"aMM" = ( +"aLL" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -20985,7 +20451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aMN" = ( +"aLM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -20999,33 +20465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aMO" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (WEST)"; - icon_state = "redcorner"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aMP" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/plasteel/red/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aMQ" = ( +"aLN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -21034,7 +20474,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMR" = ( +"aLO" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -21045,7 +20485,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMS" = ( +"aLP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -21057,7 +20497,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMT" = ( +"aLQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -21066,7 +20506,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMU" = ( +"aLR" = ( /obj/machinery/camera{ c_tag = "Courtroom Jury East"; dir = 9; @@ -21077,15 +20517,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMV" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aMW" = ( +"aLS" = ( /obj/machinery/door/airlock{ name = "Bathroom" }, @@ -21093,7 +20525,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aMX" = ( +"aLT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -21102,7 +20534,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aMY" = ( +"aLU" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-22" }, @@ -21113,7 +20545,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aMZ" = ( +"aLV" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -21124,7 +20556,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aNa" = ( +"aLW" = ( /obj/structure/closet/wardrobe/mixed, /obj/machinery/camera{ c_tag = "Dorm Lockers"; @@ -21135,7 +20567,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aNb" = ( +"aLX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -21146,7 +20578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aNc" = ( +"aLY" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northleft{ layer = 2.9; @@ -21161,7 +20593,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aNd" = ( +"aLZ" = ( /obj/machinery/light{ dir = 8 }, @@ -21171,7 +20603,7 @@ tag = "icon-darkblue (WEST)" }, /area/bridge) -"aNe" = ( +"aMa" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -21180,7 +20612,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNf" = ( +"aMb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -21189,7 +20621,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNg" = ( +"aMc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -21203,7 +20635,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNh" = ( +"aMd" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -21211,7 +20643,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNi" = ( +"aMe" = ( /obj/machinery/light{ dir = 4 }, @@ -21221,14 +20653,16 @@ tag = "icon-darkblue (EAST)" }, /area/bridge) -"aNj" = ( +"aMf" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNk" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMg" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -21237,8 +20671,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNl" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -21248,8 +20684,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNm" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMi" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -21264,8 +20702,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNn" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMj" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -21277,19 +20717,21 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNo" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMk" = ( /obj/item/chair, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aNp" = ( +"aMl" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aNq" = ( +"aMm" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -21302,7 +20744,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aNr" = ( +"aMn" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -21326,7 +20768,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aNs" = ( +"aMo" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/black{ @@ -21335,7 +20777,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aNt" = ( +"aMp" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -21357,19 +20799,19 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aNu" = ( +"aMq" = ( /obj/structure/chair{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, /area/quartermaster/office) -"aNv" = ( +"aMr" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -21382,7 +20824,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aNw" = ( +"aMs" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -21392,7 +20834,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNx" = ( +"aMt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -21409,7 +20851,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNy" = ( +"aMu" = ( /obj/machinery/power/apc{ dir = 4; name = "Fore Asteroid Maintenance APC"; @@ -21431,7 +20873,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNz" = ( +"aMv" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -21439,7 +20881,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNA" = ( +"aMw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -21452,7 +20894,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNB" = ( +"aMx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -21468,7 +20910,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNC" = ( +"aMy" = ( /obj/machinery/door/airlock/maintenance{ name = "Security SMES Access"; req_access_txt = "10;11;12" @@ -21484,7 +20926,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aND" = ( +"aMz" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -21501,8 +20943,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNE" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMA" = ( /obj/machinery/power/terminal{ tag = "icon-term (EAST)"; icon_state = "term"; @@ -21516,22 +20960,17 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aNF" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable/orange, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aNG" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aMB" = ( /obj/structure/table/wood, /obj/item/device/taperecorder, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aNH" = ( +"aMC" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -21540,7 +20979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aNI" = ( +"aMD" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -21549,7 +20988,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aNJ" = ( +"aME" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -21560,13 +20999,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aNK" = ( +"aMF" = ( /obj/machinery/photocopier, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aNL" = ( +"aMG" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -21575,7 +21014,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNM" = ( +"aMH" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -21588,7 +21027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNN" = ( +"aMI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -21602,7 +21041,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNO" = ( +"aMJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -21618,7 +21057,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNP" = ( +"aMK" = ( /obj/structure/closet/lawcloset, /obj/machinery/firealarm{ dir = 1; @@ -21628,7 +21067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNQ" = ( +"aML" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -21637,7 +21076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aNR" = ( +"aMM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -21647,7 +21086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aNS" = ( +"aMN" = ( /obj/structure/table, /obj/item/weapon/book/manual/wiki/security_space_law, /turf/open/floor/plasteel/vault{ @@ -21655,7 +21094,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aNT" = ( +"aMO" = ( /obj/machinery/light, /obj/structure/table, /obj/machinery/firealarm{ @@ -21667,21 +21106,21 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aNU" = ( +"aMP" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/crew_quarters/courtroom) -"aNV" = ( +"aMQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/crew_quarters/courtroom) -"aNW" = ( +"aMR" = ( /obj/machinery/vending/coffee, /obj/structure/extinguisher_cabinet{ pixel_y = -32 @@ -21691,7 +21130,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aNX" = ( +"aMS" = ( /obj/machinery/light/small, /obj/structure/closet/emcloset, /turf/open/floor/plating{ @@ -21700,7 +21139,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNY" = ( +"aMT" = ( /obj/machinery/light/small{ dir = 8 }, @@ -21717,7 +21156,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aNZ" = ( +"aMU" = ( /obj/machinery/door/airlock{ id_tag = "b1" }, @@ -21725,7 +21164,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aOa" = ( +"aMV" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -21741,7 +21180,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aOb" = ( +"aMW" = ( /obj/structure/table, /obj/machinery/camera{ c_tag = "Dorm Laundry Room"; @@ -21753,13 +21192,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOc" = ( +"aMX" = ( /obj/structure/table, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOd" = ( +"aMY" = ( /obj/structure/closet/crate/bin{ name = "laundry bin" }, @@ -21767,7 +21206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOe" = ( +"aMZ" = ( /obj/machinery/light/small{ dir = 8 }, @@ -21783,7 +21222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aOf" = ( +"aNa" = ( /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (NORTH)"; icon_state = "blue"; @@ -21791,7 +21230,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aOg" = ( +"aNb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -21806,7 +21245,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aOh" = ( +"aNc" = ( /obj/machinery/camera{ c_tag = "Bridge Midway 3"; dir = 1; @@ -21819,7 +21258,7 @@ tag = "icon-darkblue (WEST)" }, /area/bridge) -"aOi" = ( +"aNd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -21830,17 +21269,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aOj" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aOk" = ( +"aNe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -21855,18 +21284,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aOl" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aOm" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -21886,8 +21307,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aOn" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNg" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -21896,8 +21319,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aOo" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -21910,7 +21335,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOp" = ( +"aNi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -21927,7 +21352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOq" = ( +"aNj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -21941,7 +21366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOr" = ( +"aNk" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -21958,7 +21383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOs" = ( +"aNl" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -21974,7 +21399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOt" = ( +"aNm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -21991,7 +21416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOu" = ( +"aNn" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -22003,14 +21428,14 @@ }, /turf/open/space, /area/space) -"aOv" = ( +"aNo" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/open/space, /area/space) -"aOw" = ( +"aNp" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -22023,7 +21448,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOx" = ( +"aNq" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -22035,7 +21460,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOy" = ( +"aNr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -22048,7 +21473,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOz" = ( +"aNs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -22062,7 +21487,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOA" = ( +"aNt" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -22078,7 +21503,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOB" = ( +"aNu" = ( /obj/structure/table, /obj/item/device/multitool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -22090,15 +21515,15 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOC" = ( +"aNv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, /area/quartermaster/office) -"aOD" = ( +"aNw" = ( /obj/structure/table, /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -22114,7 +21539,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aOE" = ( +"aNx" = ( /obj/effect/landmark/blobstart, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ @@ -22123,7 +21548,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOF" = ( +"aNy" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -22131,7 +21556,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOG" = ( +"aNz" = ( /obj/machinery/light/small{ dir = 1 }, @@ -22141,7 +21566,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOH" = ( +"aNA" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating{ @@ -22150,7 +21575,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOI" = ( +"aNB" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -22161,7 +21586,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOJ" = ( +"aNC" = ( /obj/machinery/door/airlock/maintenance{ name = "Security SMES Access"; req_access_txt = "10;11;12" @@ -22172,7 +21597,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOK" = ( +"aND" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -22184,8 +21609,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aOL" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNE" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -22200,8 +21627,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aOM" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aNF" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -22210,7 +21639,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aON" = ( +"aNG" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -22226,7 +21655,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aOO" = ( +"aNH" = ( /obj/machinery/door/airlock{ name = "Law Office"; req_access_txt = "38" @@ -22245,7 +21674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aOP" = ( +"aNI" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -22261,7 +21690,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aOQ" = ( +"aNJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/glass{ name = "Brig Lobby" @@ -22275,7 +21704,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aOR" = ( +"aNK" = ( /obj/machinery/door/airlock/glass{ name = "Brig Lobby" }, @@ -22283,18 +21712,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aOS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"aOT" = ( +"aNL" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22302,7 +21720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aOU" = ( +"aNM" = ( /obj/machinery/door/airlock/glass{ name = "Courtroom" }, @@ -22311,7 +21729,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aOV" = ( +"aNN" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22320,7 +21738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aOW" = ( +"aNO" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; @@ -22337,7 +21755,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOX" = ( +"aNP" = ( /obj/machinery/door/airlock/glass{ name = "Locker Room" }, @@ -22347,7 +21765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOY" = ( +"aNQ" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -22356,7 +21774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOZ" = ( +"aNR" = ( /obj/machinery/door/airlock/glass{ name = "Locker Room" }, @@ -22364,25 +21782,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aPa" = ( +"aNS" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPb" = ( +"aNT" = ( /obj/machinery/vending/cola, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPc" = ( +"aNU" = ( /obj/machinery/vending/snack, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPd" = ( +"aNV" = ( /obj/machinery/door/poddoor/preopen{ id = "hopexternal" }, @@ -22393,7 +21811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aPe" = ( +"aNW" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -22404,7 +21822,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aPf" = ( +"aNX" = ( /obj/machinery/door/poddoor/preopen{ id = "hopexternal" }, @@ -22415,7 +21833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aPg" = ( +"aNY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -22425,7 +21843,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPh" = ( +"aNZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -22438,8 +21856,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aPi" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOa" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -22452,21 +21872,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aPj" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Fore Asteroid Maintenance Access"; - req_access_txt = "12" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aPk" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -22474,11 +21883,15 @@ icon_state = "1-2"; pixel_y = 0 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPl" = ( +"aOc" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -22487,7 +21900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPm" = ( +"aOd" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -22499,9 +21912,14 @@ icon_state = "1-4" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"aPn" = ( +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aOe" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -22514,57 +21932,22 @@ pixel_x = 0 }, /obj/structure/grille, -/turf/open/space, -/area/space) -"aPo" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced, /obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/grille, /turf/open/space, -/area/space) -"aPp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aOf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/structure/grille, -/turf/open/space, -/area/space) -"aPq" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/grille, -/turf/open/space, -/area/space) -"aPr" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/obj/structure/grille, -/turf/open/space, -/area/space) -"aPs" = ( +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aOg" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22574,7 +21957,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aPt" = ( +"aOh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -22591,7 +21974,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aPu" = ( +"aOi" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22602,25 +21985,14 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aPv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"aOj" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aPw" = ( /obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; + name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" }, /turf/open/floor/plating{ @@ -22629,7 +22001,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPx" = ( +"aOk" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line, @@ -22637,12 +22009,12 @@ dir = 1 }, /turf/open/floor/plasteel/brown/corner{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; tag = "icon-browncorner (NORTH)" }, /area/quartermaster/office) -"aPy" = ( +"aOl" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22650,7 +22022,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aPz" = ( +"aOm" = ( /obj/structure/chair{ dir = 8 }, @@ -22668,7 +22040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aPA" = ( +"aOn" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -22677,7 +22049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aPB" = ( +"aOo" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -22685,7 +22057,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPC" = ( +"aOp" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -22698,7 +22070,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPD" = ( +"aOq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22710,7 +22082,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPE" = ( +"aOr" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22723,7 +22095,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPF" = ( +"aOs" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -22737,7 +22109,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPG" = ( +"aOt" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22751,17 +22123,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPH" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aPI" = ( +"aOu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -22775,8 +22137,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aPJ" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aOv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -22786,7 +22150,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPK" = ( +"aOw" = ( /obj/machinery/camera{ c_tag = "Command Asteroid Hall 10"; dir = 6; @@ -22804,7 +22168,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPL" = ( +"aOx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -22817,7 +22181,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPM" = ( +"aOy" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -22833,7 +22197,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPN" = ( +"aOz" = ( /obj/machinery/camera{ c_tag = "Command Asteroid Hall 2"; dir = 6; @@ -22854,7 +22218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPO" = ( +"aOA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -22870,7 +22234,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPP" = ( +"aOB" = ( /obj/machinery/light{ dir = 1 }, @@ -22889,7 +22253,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPQ" = ( +"aOC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22905,7 +22269,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPR" = ( +"aOD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22925,7 +22289,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPS" = ( +"aOE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -22941,7 +22305,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPT" = ( +"aOF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22960,23 +22324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (EAST)"; - icon_state = "redcorner"; - dir = 4; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aPV" = ( +"aOG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22997,7 +22345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPW" = ( +"aOH" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -23021,7 +22369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPX" = ( +"aOI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23040,7 +22388,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPY" = ( +"aOJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23056,7 +22404,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPZ" = ( +"aOK" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -23065,7 +22413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQa" = ( +"aOL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23076,7 +22424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQb" = ( +"aOM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23084,7 +22432,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQc" = ( +"aON" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23103,7 +22451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQd" = ( +"aOO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23120,7 +22468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQe" = ( +"aOP" = ( /obj/machinery/light{ dir = 1 }, @@ -23134,7 +22482,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQf" = ( +"aOQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -23145,7 +22493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQg" = ( +"aOR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23160,7 +22508,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQh" = ( +"aOS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23174,7 +22522,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQi" = ( +"aOT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23193,7 +22541,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQj" = ( +"aOU" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; @@ -23203,7 +22551,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQk" = ( +"aOV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23216,7 +22564,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQl" = ( +"aOW" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23227,7 +22575,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQm" = ( +"aOX" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23244,7 +22592,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQn" = ( +"aOY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23266,7 +22614,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQo" = ( +"aOZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23285,7 +22633,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQp" = ( +"aPa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23304,7 +22652,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQq" = ( +"aPb" = ( /obj/machinery/light{ dir = 1 }, @@ -23321,7 +22669,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQr" = ( +"aPc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23332,7 +22680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQs" = ( +"aPd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23351,7 +22699,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQt" = ( +"aPe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -23370,7 +22718,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQu" = ( +"aPf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23390,7 +22738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQv" = ( +"aPg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23412,7 +22760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQw" = ( +"aPh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23426,7 +22774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQx" = ( +"aPi" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -23447,7 +22795,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQy" = ( +"aPj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23463,7 +22811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQz" = ( +"aPk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23482,7 +22830,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQA" = ( +"aPl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23501,7 +22849,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQB" = ( +"aPm" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23517,7 +22865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQC" = ( +"aPn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23543,7 +22891,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQD" = ( +"aPo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -23564,7 +22912,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQE" = ( +"aPp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -23580,7 +22928,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQF" = ( +"aPq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -23597,7 +22945,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQG" = ( +"aPr" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -23613,7 +22961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQH" = ( +"aPs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -23629,7 +22977,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQI" = ( +"aPt" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23648,7 +22996,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQJ" = ( +"aPu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -23664,7 +23012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQK" = ( +"aPv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -23681,7 +23029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQL" = ( +"aPw" = ( /obj/machinery/light{ dir = 1 }, @@ -23692,7 +23040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQM" = ( +"aPx" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -23707,7 +23055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQN" = ( +"aPy" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -23715,7 +23063,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQO" = ( +"aPz" = ( /obj/machinery/camera{ c_tag = "Command Asteroid Hall 9"; dir = 6; @@ -23728,7 +23076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQP" = ( +"aPA" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -23741,7 +23089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQQ" = ( +"aPB" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -23752,7 +23100,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQR" = ( +"aPC" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -23761,57 +23109,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQS" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, +"aPD" = ( /turf/open/floor/engine, -/area/space) -"aQT" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 2"; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"aQU" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 3"; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"aQV" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"aPE" = ( /obj/machinery/door/airlock/glass, -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aQW" = ( -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aQX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, /obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -23820,7 +23128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQY" = ( +"aPF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -23837,7 +23145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQZ" = ( +"aPG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -23853,7 +23161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRa" = ( +"aPH" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -23876,7 +23184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRb" = ( +"aPI" = ( /obj/machinery/light{ dir = 1 }, @@ -23895,7 +23203,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRc" = ( +"aPJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -23916,7 +23224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRd" = ( +"aPK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23932,7 +23240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRe" = ( +"aPL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23953,7 +23261,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRf" = ( +"aPM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23964,7 +23272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRg" = ( +"aPN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23977,7 +23285,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRh" = ( +"aPO" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -23990,7 +23298,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRi" = ( +"aPP" = ( /obj/structure/chair{ dir = 8 }, @@ -24011,7 +23319,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aRj" = ( +"aPQ" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -24019,7 +23327,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRk" = ( +"aPR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -24032,7 +23340,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRl" = ( +"aPS" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -24049,7 +23357,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRm" = ( +"aPT" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -24061,7 +23369,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRn" = ( +"aPU" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = 1; @@ -24070,8 +23378,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aRo" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPV" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -24083,8 +23393,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aRp" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPW" = ( /obj/machinery/door/airlock/maintenance{ name = "Security SMES Access"; req_access_txt = "10;11;12" @@ -24098,8 +23410,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aRq" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aPX" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24110,7 +23424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRr" = ( +"aPY" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24124,7 +23438,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRs" = ( +"aPZ" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -24139,7 +23453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRt" = ( +"aQa" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24149,7 +23463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRu" = ( +"aQb" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24164,7 +23478,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRv" = ( +"aQc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24175,7 +23489,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRw" = ( +"aQd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24189,7 +23503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRx" = ( +"aQe" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24200,7 +23514,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRy" = ( +"aQf" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24213,7 +23527,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRz" = ( +"aQg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24231,7 +23545,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRA" = ( +"aQh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -24246,7 +23560,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRB" = ( +"aQi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -24260,7 +23574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRC" = ( +"aQj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -24271,12 +23585,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRD" = ( +"aQk" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRE" = ( +"aQl" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -24284,19 +23598,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRF" = ( +"aQm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRG" = ( +"aQn" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRH" = ( +"aQo" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -24305,7 +23619,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRI" = ( +"aQp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 8; @@ -24315,7 +23629,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRJ" = ( +"aQq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -24324,7 +23638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRK" = ( +"aQr" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -24336,20 +23650,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRL" = ( +"aQs" = ( /obj/effect/landmark/lightsout, /obj/machinery/holopad, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRM" = ( +"aQt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRN" = ( +"aQu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24360,7 +23674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRO" = ( +"aQv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24371,13 +23685,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRP" = ( +"aQw" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRQ" = ( +"aQx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -24387,7 +23701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRR" = ( +"aQy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -24395,7 +23709,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRS" = ( +"aQz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -24404,7 +23718,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRT" = ( +"aQA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -24414,19 +23728,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRU" = ( +"aQB" = ( /obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRV" = ( +"aQC" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRW" = ( +"aQD" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -24442,7 +23756,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRX" = ( +"aQE" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -24459,7 +23773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aRY" = ( +"aQF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24469,7 +23783,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aRZ" = ( +"aQG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24480,7 +23794,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aSa" = ( +"aQH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24494,7 +23808,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aSb" = ( +"aQI" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -24510,7 +23824,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSc" = ( +"aQJ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24529,7 +23843,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSd" = ( +"aQK" = ( /obj/structure/table, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -24537,7 +23851,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSe" = ( +"aQL" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -24545,7 +23859,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSf" = ( +"aQM" = ( /obj/structure/girder, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -24553,7 +23867,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSg" = ( +"aQN" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plasteel/floorgrime{ @@ -24562,15 +23876,17 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSh" = ( +"aQO" = ( /obj/structure/table, /obj/machinery/cell_charger, /obj/item/weapon/stock_parts/cell/high, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aSi" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aQP" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -24579,7 +23895,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSj" = ( +"aQQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -24591,7 +23907,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSk" = ( +"aQR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24604,7 +23920,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSl" = ( +"aQS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24612,7 +23928,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSm" = ( +"aQT" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -24621,7 +23937,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSn" = ( +"aQU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24629,7 +23945,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSo" = ( +"aQV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24637,7 +23953,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSp" = ( +"aQW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24663,7 +23979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSq" = ( +"aQX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -24671,7 +23987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSr" = ( +"aQY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24684,7 +24000,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSs" = ( +"aQZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24693,20 +24009,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSt" = ( +"aRa" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSu" = ( +"aRb" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSv" = ( +"aRc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24718,7 +24034,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSw" = ( +"aRd" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -24733,7 +24049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSx" = ( +"aRe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24745,7 +24061,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSy" = ( +"aRf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24763,7 +24079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSz" = ( +"aRg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24772,7 +24088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSA" = ( +"aRh" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -24791,7 +24107,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSB" = ( +"aRi" = ( /obj/machinery/airalarm{ dir = 1; pixel_y = -22 @@ -24803,7 +24119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSC" = ( +"aRj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24819,7 +24135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSD" = ( +"aRk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24845,7 +24161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSE" = ( +"aRl" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=EngineeringMiddle"; @@ -24856,7 +24172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSF" = ( +"aRm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24871,7 +24187,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSG" = ( +"aRn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -24890,7 +24206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSH" = ( +"aRo" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -24905,7 +24221,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSI" = ( +"aRp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24919,7 +24235,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSJ" = ( +"aRq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24937,7 +24253,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSK" = ( +"aRr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24955,7 +24271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSL" = ( +"aRs" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -24968,7 +24284,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSM" = ( +"aRt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -24976,28 +24292,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSN" = ( +"aRu" = ( /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSO" = ( +"aRv" = ( /obj/machinery/light, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSP" = ( +"aRw" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSQ" = ( -/obj/structure/window/reinforced, -/turf/open/floor/engine, -/area/space) -"aSR" = ( +"aRx" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -25005,7 +24317,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSS" = ( +"aRy" = ( /obj/machinery/light, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -25013,7 +24325,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aST" = ( +"aRz" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -25024,14 +24336,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSU" = ( +"aRA" = ( /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSV" = ( +"aRB" = ( /obj/machinery/camera{ c_tag = "Cargo Asteroid Hall 1"; dir = 1; @@ -25044,7 +24356,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSW" = ( +"aRC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -25054,7 +24366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSX" = ( +"aRD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/airalarm{ dir = 1; @@ -25066,7 +24378,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSY" = ( +"aRE" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -25083,7 +24395,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSZ" = ( +"aRF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25095,7 +24407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTa" = ( +"aRG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25105,7 +24417,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTb" = ( +"aRH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25119,7 +24431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTc" = ( +"aRI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25134,7 +24446,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTd" = ( +"aRJ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -25161,7 +24473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTe" = ( +"aRK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25177,7 +24489,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTf" = ( +"aRL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -25194,7 +24506,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTg" = ( +"aRM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -25212,7 +24524,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aTh" = ( +"aRN" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -25221,7 +24533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aTi" = ( +"aRO" = ( /obj/machinery/light/small, /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plasteel/floorgrime{ @@ -25230,7 +24542,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTj" = ( +"aRP" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -25238,19 +24550,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTk" = ( +"aRQ" = ( /obj/structure/rack, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTl" = ( +"aRR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ id_tag = "GulagCivExit3"; name = "External Airlock Access"; req_access_txt = "12" @@ -25259,14 +24571,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTm" = ( +"aRS" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter{ name = "Security Quantum Pad" }) -"aTn" = ( +"aRT" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -25277,7 +24589,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTo" = ( +"aRU" = ( /obj/machinery/door/airlock/glass{ name = "Security Quantum Pad" }, @@ -25293,7 +24605,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTp" = ( +"aRV" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -25304,24 +24616,24 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTq" = ( +"aRW" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aTr" = ( +"aRX" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aTs" = ( +"aRY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aTt" = ( +"aRZ" = ( /obj/machinery/door/airlock{ name = "Custodial Closet"; req_access_txt = "26" @@ -25337,7 +24649,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aTu" = ( +"aSa" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25345,7 +24657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTv" = ( +"aSb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -25354,7 +24666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTw" = ( +"aSc" = ( /obj/machinery/door/airlock/vault{ icon_state = "door_locked"; locked = 1; @@ -25372,7 +24684,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTx" = ( +"aSd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -25381,7 +24693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTy" = ( +"aSe" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -25392,7 +24704,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTz" = ( +"aSf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/atmos{ name = "Command Atmospherics Checkpoint"; @@ -25405,25 +24717,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTA" = ( +"aSg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTB" = ( +"aSh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, @@ -25431,7 +24743,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTC" = ( +"aSi" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -25440,9 +24752,12 @@ dir = 6 }, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"aTD" = ( +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aSj" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -25451,20 +24766,12 @@ dir = 4 }, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"aTE" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/grille, -/turf/open/space, -/area/space) -"aTF" = ( +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"aSk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/atmos{ name = "Cargo Atmospherics Checkpoint"; @@ -25474,7 +24781,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTG" = ( +"aSl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -25484,7 +24791,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTH" = ( +"aSm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -25495,7 +24802,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTI" = ( +"aSn" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -25507,12 +24814,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aTJ" = ( +"aSo" = ( /turf/open/floor/plasteel/brown/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aTK" = ( +"aSp" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -25521,16 +24828,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aTL" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"aTM" = ( +"aSq" = ( /obj/structure/disposalpipe/segment, /obj/structure/rack, /obj/item/weapon/storage/toolbox/electrical{ @@ -25543,7 +24841,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTN" = ( +"aSr" = ( /obj/machinery/door/airlock/maintenance{ id_tag = "GulagCivExit2"; name = "Fore Asteroid Maintenance Access"; @@ -25555,7 +24853,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTO" = ( +"aSs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -25563,7 +24861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTP" = ( +"aSt" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -25576,7 +24874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTQ" = ( +"aSu" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -25596,7 +24894,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTR" = ( +"aSv" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -25608,7 +24906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTS" = ( +"aSw" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -25618,7 +24916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTT" = ( +"aSx" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -25628,7 +24926,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTU" = ( +"aSy" = ( /obj/structure/table, /obj/item/device/multitool, /obj/item/device/radio/intercom{ @@ -25646,7 +24944,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTV" = ( +"aSz" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25659,7 +24957,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTW" = ( +"aSA" = ( /obj/structure/noticeboard{ dir = 8; pixel_x = 27; @@ -25677,7 +24975,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTX" = ( +"aSB" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -25698,7 +24996,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTY" = ( +"aSC" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -25714,7 +25012,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTZ" = ( +"aSD" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -25731,7 +25029,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUa" = ( +"aSE" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -25742,7 +25040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUb" = ( +"aSF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -25753,12 +25051,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUc" = ( +"aSG" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUd" = ( +"aSH" = ( /obj/structure/bed/dogbed, /mob/living/simple_animal/hostile/lizard{ name = "Wags-His-Tail"; @@ -25768,7 +25066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUe" = ( +"aSI" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -25778,7 +25076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUf" = ( +"aSJ" = ( /obj/vehicle/janicart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -25790,7 +25088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUg" = ( +"aSK" = ( /obj/structure/table, /obj/item/weapon/storage/box/mousetraps, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -25806,7 +25104,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUh" = ( +"aSL" = ( /obj/structure/table, /obj/machinery/light{ dir = 1 @@ -25822,7 +25120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUi" = ( +"aSM" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -25833,7 +25131,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUj" = ( +"aSN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ @@ -25845,12 +25143,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUk" = ( +"aSO" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aUl" = ( +"aSP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Vault Airlock"; @@ -25860,7 +25158,7 @@ /obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aUm" = ( +"aSQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -25872,7 +25170,7 @@ }, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aUn" = ( +"aSR" = ( /obj/structure/table, /obj/item/weapon/phone, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -25880,7 +25178,7 @@ }, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aUo" = ( +"aSS" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/clothing/glasses/meson, @@ -25891,7 +25189,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUp" = ( +"aST" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Mix Output"; @@ -25904,7 +25202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUq" = ( +"aSU" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -25912,7 +25210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUr" = ( +"aSV" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -25924,7 +25222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUs" = ( +"aSW" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -25935,7 +25233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUt" = ( +"aSX" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -25945,7 +25243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUu" = ( +"aSY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -25953,7 +25251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUv" = ( +"aSZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25970,13 +25268,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUw" = ( +"aTa" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUx" = ( +"aTb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -25987,7 +25285,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUy" = ( +"aTc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -25995,7 +25293,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUz" = ( +"aTd" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -26006,7 +25304,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUA" = ( +"aTe" = ( /obj/machinery/light/small{ dir = 1 }, @@ -26018,7 +25316,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUB" = ( +"aTf" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; @@ -26026,14 +25324,14 @@ }, /turf/open/space, /area/space) -"aUC" = ( +"aTg" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, /turf/open/space, /area/space) -"aUD" = ( +"aTh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26046,7 +25344,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUE" = ( +"aTi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26058,7 +25356,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUF" = ( +"aTj" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -26069,7 +25367,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUG" = ( +"aTk" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix Input"; @@ -26082,7 +25380,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUH" = ( +"aTl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -26093,7 +25391,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUI" = ( +"aTm" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -26101,7 +25399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUJ" = ( +"aTn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -26112,7 +25410,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUK" = ( +"aTo" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix Output"; @@ -26125,7 +25423,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUL" = ( +"aTp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -26134,7 +25432,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUM" = ( +"aTq" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26150,7 +25448,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUN" = ( +"aTr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Cargo Asteroid Hall 2"; @@ -26165,7 +25463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUO" = ( +"aTs" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -26174,7 +25472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUP" = ( +"aTt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26190,7 +25488,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUQ" = ( +"aTu" = ( /obj/machinery/button/door{ id = "GulagCivExit2"; name = "Gulag Door Exit"; @@ -26207,7 +25505,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUR" = ( +"aTv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -26217,7 +25515,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUS" = ( +"aTw" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -26233,7 +25531,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aUT" = ( +"aTx" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -26248,7 +25546,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aUU" = ( +"aTy" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -26269,21 +25567,21 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aUV" = ( +"aTz" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUW" = ( +"aTA" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUX" = ( +"aTB" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -26291,7 +25589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUY" = ( +"aTC" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -26300,7 +25598,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUZ" = ( +"aTD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -26317,7 +25615,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVa" = ( +"aTE" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -26330,7 +25628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVb" = ( +"aTF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -26345,7 +25643,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVc" = ( +"aTG" = ( /obj/machinery/light/small{ dir = 4 }, @@ -26359,7 +25657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVd" = ( +"aTH" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -26375,7 +25673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVe" = ( +"aTI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -26383,7 +25681,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVf" = ( +"aTJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -26391,14 +25689,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVg" = ( +"aTK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVh" = ( +"aTL" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -26409,13 +25707,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVi" = ( +"aTM" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVj" = ( +"aTN" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -26436,7 +25734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVk" = ( +"aTO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -26444,7 +25742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVl" = ( +"aTP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -26452,7 +25750,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVm" = ( +"aTQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26468,7 +25766,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVn" = ( +"aTR" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -26477,7 +25775,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVo" = ( +"aTS" = ( /obj/machinery/light/small, /obj/item/device/assembly/mousetrap/armed, /turf/open/floor/plating{ @@ -26486,7 +25784,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVp" = ( +"aTT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -26501,7 +25799,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVq" = ( +"aTU" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26509,7 +25807,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVr" = ( +"aTV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -26520,7 +25818,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVs" = ( +"aTW" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -26531,7 +25829,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVt" = ( +"aTX" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -26546,19 +25844,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVu" = ( +"aTY" = ( /obj/structure/closet/jcloset, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVv" = ( +"aTZ" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVw" = ( +"aUa" = ( /obj/item/weapon/mop, /obj/item/weapon/reagent_containers/glass/bucket, /obj/structure/disposalpipe/segment, @@ -26566,7 +25864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVx" = ( +"aUb" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -26575,12 +25873,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVy" = ( +"aUc" = ( /turf/open/floor/plasteel/stairs{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVz" = ( +"aUd" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -26596,7 +25894,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVA" = ( +"aUe" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -26611,7 +25909,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVB" = ( +"aUf" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -26622,7 +25920,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVC" = ( +"aUg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table, /obj/machinery/light/small{ @@ -26632,7 +25930,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVD" = ( +"aUh" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/clothing/glasses/meson, @@ -26643,7 +25941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVE" = ( +"aUi" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -26652,7 +25950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVF" = ( +"aUj" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -26663,7 +25961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVG" = ( +"aUk" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -26673,7 +25971,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVH" = ( +"aUl" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -26681,7 +25979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVI" = ( +"aUm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26694,7 +25992,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVJ" = ( +"aUn" = ( /obj/machinery/camera{ c_tag = "Command Asteroid Hallway 1"; dir = 4; @@ -26706,7 +26004,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVK" = ( +"aUo" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -26715,7 +26013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVL" = ( +"aUp" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -26729,7 +26027,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVM" = ( +"aUq" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26737,7 +26035,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVN" = ( +"aUr" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -26757,7 +26055,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVO" = ( +"aUs" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/cable/orange{ d1 = 2; @@ -26770,13 +26068,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVP" = ( +"aUt" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVQ" = ( +"aUu" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -26794,7 +26092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVR" = ( +"aUv" = ( /obj/structure/table, /obj/item/weapon/grenade/chem_grenade/cleaner, /obj/item/weapon/grenade/chem_grenade/cleaner, @@ -26812,7 +26110,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVS" = ( +"aUw" = ( /obj/structure/table, /obj/item/weapon/storage/box/lights/mixed, /obj/item/weapon/storage/box/lights/mixed, @@ -26823,13 +26121,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVT" = ( +"aUx" = ( /obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVU" = ( +"aUy" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -26838,7 +26136,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVV" = ( +"aUz" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -26847,7 +26145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVW" = ( +"aUA" = ( /obj/structure/janitorialcart, /obj/structure/disposalpipe/segment{ dir = 8; @@ -26857,13 +26155,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVX" = ( +"aUB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVY" = ( +"aUC" = ( /obj/machinery/door/airlock/vault{ icon_state = "door_locked"; locked = 1; @@ -26871,13 +26169,13 @@ }, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aVZ" = ( +"aUD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aWa" = ( +"aUE" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -26889,13 +26187,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWb" = ( +"aUF" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWc" = ( +"aUG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -26906,7 +26204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWd" = ( +"aUH" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -26917,7 +26215,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWe" = ( +"aUI" = ( /obj/machinery/camera{ c_tag = "Command Asteroid Hall 10"; dir = 8; @@ -26927,13 +26225,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWf" = ( +"aUJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWg" = ( +"aUK" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -26941,7 +26239,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWh" = ( +"aUL" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -26954,7 +26252,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aWi" = ( +"aUM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 2; @@ -26969,7 +26267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWj" = ( +"aUN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -26980,7 +26278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWk" = ( +"aUO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -26999,7 +26297,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWl" = ( +"aUP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -27013,8 +26311,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aWm" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUQ" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -27029,24 +26329,28 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aWn" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUR" = ( /obj/machinery/camera{ c_tag = "Cargo Bay SMES"; dir = 6; icon_state = "camera" }, -/turf/open/floor/plasteel/floorgrime{ +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aWo" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aUS" = ( /obj/structure/closet, /turf/open/floor/plating/asteroid, /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aWp" = ( +"aUT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -27064,7 +26368,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWq" = ( +"aUU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -27075,21 +26379,21 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aWr" = ( +"aUV" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWs" = ( +"aUW" = ( /turf/closed/wall/r_wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWt" = ( +"aUX" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -27105,7 +26409,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWu" = ( +"aUY" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment{ @@ -27115,23 +26419,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aWv" = ( +"aUZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aWw" = ( +"aVa" = ( /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aWx" = ( +"aVb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aWy" = ( +"aVc" = ( /turf/open/space, /area/mine/unexplored{ name = "Command Asteroid" }) -"aWz" = ( +"aVd" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -27139,7 +26443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWA" = ( +"aVe" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -27153,7 +26457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWB" = ( +"aVf" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Mix Input"; @@ -27166,7 +26470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWC" = ( +"aVg" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -27177,7 +26481,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWD" = ( +"aVh" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -27195,7 +26499,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWE" = ( +"aVi" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -27212,32 +26516,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWF" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Cargo Hallway APC"; - pixel_x = 23; - pixel_y = 2 - }, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/turf_decal/stripes/end{ - tag = "icon-warn_end (WEST)"; - icon_state = "warn_end"; - dir = 8 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aWG" = ( +"aVj" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -27250,7 +26529,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWH" = ( +"aVk" = ( /obj/machinery/power/smes, /obj/structure/cable/orange{ d2 = 4; @@ -27262,7 +26541,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWI" = ( +"aVl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -27274,7 +26553,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWJ" = ( +"aVm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -27294,7 +26573,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWK" = ( +"aVn" = ( /obj/structure/closet/crate{ name = "Gold Crate" }, @@ -27315,14 +26594,10 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aWL" = ( +"aVo" = ( /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aWM" = ( -/obj/machinery/computer/bank_machine, -/turf/open/floor/circuit, -/area/ai_monitored/nuke_storage) -"aWN" = ( +"aVp" = ( /obj/structure/safe, /obj/item/weapon/twohanded/fireaxe, /obj/item/clothing/head/bearpelt, @@ -27334,7 +26609,7 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aWO" = ( +"aVq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -27343,7 +26618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWP" = ( +"aVr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -27358,7 +26633,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWQ" = ( +"aVs" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -27372,7 +26647,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aWR" = ( +"aVt" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, @@ -27380,6 +26655,9 @@ dir = 1 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -27387,7 +26665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWS" = ( +"aVu" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -27400,17 +26678,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWT" = ( +"aVv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aWU" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -27424,7 +26707,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWV" = ( +"aVx" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -27441,7 +26724,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWW" = ( +"aVy" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -27453,7 +26736,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWX" = ( +"aVz" = ( /obj/structure/cable/orange, /obj/machinery/power/apc{ dir = 4; @@ -27467,7 +26750,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWY" = ( +"aVA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -27476,7 +26759,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWZ" = ( +"aVB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -27491,21 +26774,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXa" = ( +"aVC" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXb" = ( +"aVD" = ( /turf/closed/wall/r_wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXc" = ( +"aVE" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Solars"; req_access_txt = "10;11;12" @@ -27521,7 +26804,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXd" = ( +"aVF" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -27533,13 +26816,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXe" = ( -/obj/structure/chair/stool, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"aXf" = ( +"aVG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -27553,8 +26830,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aXg" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aVH" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27562,7 +26841,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aXh" = ( +"aVI" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -27570,7 +26849,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aXi" = ( +"aVJ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -27579,7 +26858,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aXj" = ( +"aVK" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -27592,7 +26871,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXk" = ( +"aVL" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -27608,7 +26887,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXl" = ( +"aVM" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -27625,7 +26904,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXm" = ( +"aVN" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical, /turf/open/floor/plasteel/floorgrime{ @@ -27634,11 +26913,11 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXn" = ( +"aVO" = ( /obj/structure/grille, /turf/open/space, /area/space) -"aXo" = ( +"aVP" = ( /obj/item/weapon/coin/silver{ pixel_x = 7; pixel_y = 12 @@ -27667,11 +26946,11 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXp" = ( +"aVQ" = ( /obj/machinery/nuclearbomb/selfdestruct, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXq" = ( +"aVR" = ( /obj/structure/filingcabinet, /obj/item/weapon/folder/documents, /obj/machinery/light{ @@ -27680,7 +26959,7 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXr" = ( +"aVS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1; @@ -27691,7 +26970,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXs" = ( +"aVT" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -27706,7 +26985,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXt" = ( +"aVU" = ( /obj/machinery/power/smes, /obj/structure/cable/orange{ d2 = 4; @@ -27718,7 +26997,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXu" = ( +"aVV" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -27730,7 +27009,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXv" = ( +"aVW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -27750,7 +27029,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXw" = ( +"aVX" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -27766,11 +27045,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXx" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"aVY" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -27780,11 +27055,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXy" = ( +"aVZ" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -27801,7 +27080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXz" = ( +"aWa" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -27810,8 +27089,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aXA" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aWb" = ( /obj/machinery/power/terminal{ tag = "icon-term (EAST)"; icon_state = "term"; @@ -27827,8 +27108,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"aXB" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"aWc" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -27837,7 +27120,7 @@ }, /turf/open/space, /area/space) -"aXC" = ( +"aWd" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -27850,17 +27133,28 @@ }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aXD" = ( +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"aWe" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, /turf/open/space, -/area/space) -"aXE" = ( +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"aWf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -27870,7 +27164,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXF" = ( +"aWg" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Solar Maintenance"; @@ -27888,7 +27182,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXG" = ( +"aWh" = ( /obj/machinery/camera{ c_tag = "Vault"; dir = 5; @@ -27896,11 +27190,11 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXH" = ( +"aWi" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/black, /area/ai_monitored/nuke_storage) -"aXI" = ( +"aWj" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -27910,9 +27204,14 @@ dir = 10 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aXJ" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"aWk" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -27926,9 +27225,15 @@ dir = 6 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, /turf/open/space, -/area/space) -"aXK" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"aWl" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -27940,7 +27245,7 @@ }, /turf/open/space, /area/space) -"aXL" = ( +"aWm" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -27957,7 +27262,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXM" = ( +"aWn" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -27969,7 +27274,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXN" = ( +"aWo" = ( /obj/structure/cable/orange, /obj/machinery/power/apc{ dir = 4; @@ -27983,7 +27288,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXO" = ( +"aWp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -27994,7 +27299,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXP" = ( +"aWq" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -28008,7 +27313,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXQ" = ( +"aWr" = ( /obj/machinery/light/small{ dir = 1 }, @@ -28018,12 +27323,12 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aXR" = ( +"aWs" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/airless, /area/space) -"aXS" = ( +"aWt" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -28036,9 +27341,14 @@ }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aXT" = ( +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"aWu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28050,25 +27360,25 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXU" = ( +"aWv" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-09" }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXV" = ( +"aWw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXW" = ( +"aWx" = ( /obj/machinery/computer/bank_machine, /obj/machinery/light, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aXX" = ( +"aWy" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -28076,9 +27386,14 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aXY" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"aWz" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -28091,9 +27406,15 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, /turf/open/space, -/area/space) -"aXZ" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"aWA" = ( /obj/machinery/power/solar_control{ id = "foresolar"; name = "Fore Asteroid Solar Control"; @@ -28109,7 +27430,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYa" = ( +"aWB" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -28126,20 +27447,20 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYb" = ( +"aWC" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYc" = ( +"aWD" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYd" = ( +"aWE" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -28152,7 +27473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYe" = ( +"aWF" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -28163,7 +27484,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYf" = ( +"aWG" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28182,7 +27503,7 @@ }, /turf/open/space, /area/space) -"aYg" = ( +"aWH" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -28193,7 +27514,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYh" = ( +"aWI" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -28202,7 +27523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aYi" = ( +"aWJ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -28212,7 +27533,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYj" = ( +"aWK" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Solar Maintenance"; @@ -28230,7 +27551,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYk" = ( +"aWL" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -28244,7 +27565,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYl" = ( +"aWM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -28261,7 +27582,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYm" = ( +"aWN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -28271,7 +27592,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYn" = ( +"aWO" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28280,7 +27601,7 @@ }, /turf/open/space, /area/space) -"aYo" = ( +"aWP" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -28291,7 +27612,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYp" = ( +"aWQ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -28305,7 +27626,7 @@ }, /turf/open/space, /area/space) -"aYq" = ( +"aWR" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -28316,7 +27637,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYr" = ( +"aWS" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28328,7 +27649,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYs" = ( +"aWT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28343,7 +27664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYt" = ( +"aWU" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -28356,7 +27677,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYu" = ( +"aWV" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -28375,7 +27696,7 @@ }, /turf/open/space, /area/space) -"aYv" = ( +"aWW" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -28389,7 +27710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYw" = ( +"aWX" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28401,7 +27722,7 @@ }, /turf/open/space, /area/space) -"aYx" = ( +"aWY" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -28416,18 +27737,28 @@ dir = 10 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aYy" = ( +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"aWZ" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/space, -/area/space) -"aYz" = ( +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"aXa" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -28440,9 +27771,14 @@ icon_state = "1-2" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aYA" = ( +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"aXb" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28451,21 +27787,21 @@ }, /turf/open/space, /area/space) -"aYB" = ( +"aXc" = ( /obj/structure/lattice/catwalk, /obj/item/stack/cable_coil{ amount = 2 }, /turf/open/space, /area/space) -"aYC" = ( +"aXd" = ( /obj/structure/lattice/catwalk, /obj/item/stack/cable_coil{ amount = 30 }, /turf/open/space, /area/space) -"aYD" = ( +"aXe" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28479,7 +27815,7 @@ }, /turf/open/space, /area/space) -"aYE" = ( +"aXf" = ( /obj/structure/lattice/catwalk, /obj/machinery/power/tracker, /obj/structure/cable{ @@ -28488,7 +27824,7 @@ }, /turf/open/space, /area/space) -"aYF" = ( +"aXg" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -28497,7 +27833,7 @@ }, /turf/open/space, /area/space) -"aYG" = ( +"aXh" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28507,7 +27843,7 @@ }, /turf/open/space, /area/space) -"aYH" = ( +"aXi" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28516,18 +27852,7 @@ }, /turf/open/space, /area/space) -"aYI" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Command-Service Bridge"; - dir = 4; - icon_state = "camera" - }, -/turf/open/floor/engine, -/area/space) -"aYJ" = ( +"aXj" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28546,19 +27871,7 @@ }, /turf/open/space, /area/space) -"aYK" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/camera{ - c_tag = "Command-Engineering Bridge"; - dir = 8; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"aYL" = ( +"aXk" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "0-4" @@ -28566,7 +27879,7 @@ /obj/machinery/power/tracker, /turf/open/space, /area/space) -"aYM" = ( +"aXl" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28591,12 +27904,12 @@ }, /turf/open/space, /area/space) -"aYN" = ( +"aXm" = ( /turf/closed/wall, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYO" = ( +"aXn" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/deliveryChute{ tag = "icon-intake (NORTH)"; @@ -28607,12 +27920,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYP" = ( +"aXo" = ( /turf/closed/mineral, /area/mine/unexplored{ name = "Civilian Asteroid" }) -"aYQ" = ( +"aXp" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28631,13 +27944,13 @@ }, /turf/open/space, /area/space) -"aYR" = ( +"aXq" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYS" = ( +"aXr" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -28646,24 +27959,21 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYT" = ( +"aXs" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Civilian Asteroid" }) -"aYU" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Medbay-Cargo Bridge"; - dir = 4; - icon_state = "camera" - }, +"aXt" = ( /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/engine, -/area/space) -"aYV" = ( +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"aXu" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -28673,7 +27983,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYW" = ( +"aXv" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (SOUTHEAST)"; icon_state = "conveyor0"; @@ -28683,21 +27993,21 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYX" = ( +"aXw" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYY" = ( +"aXx" = ( /obj/machinery/conveyor/auto, /obj/structure/plasticflaps, /turf/open/floor/plating, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYZ" = ( +"aXy" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28711,7 +28021,7 @@ }, /turf/open/space, /area/space) -"aZa" = ( +"aXz" = ( /obj/machinery/light/small{ dir = 8 }, @@ -28724,7 +28034,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZb" = ( +"aXA" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (SOUTHWEST)"; icon_state = "conveyor0"; @@ -28734,14 +28044,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZc" = ( +"aXB" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Civilian Asteroid" }) -"aZd" = ( +"aXC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -28751,19 +28061,19 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZe" = ( +"aXD" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZf" = ( +"aXE" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "Engineering Asteroid" }) -"aZg" = ( +"aXF" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -28774,7 +28084,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZh" = ( +"aXG" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28782,7 +28092,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZi" = ( +"aXH" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -28793,7 +28103,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZj" = ( +"aXI" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -28802,7 +28112,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZk" = ( +"aXJ" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -28814,7 +28124,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZl" = ( +"aXK" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -28822,24 +28132,24 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZm" = ( +"aXL" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZn" = ( +"aXM" = ( /turf/closed/mineral, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZo" = ( +"aXN" = ( /turf/closed/mineral/random/labormineral, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZp" = ( +"aXO" = ( /obj/machinery/vending/hydronutrients, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -28847,7 +28157,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZq" = ( +"aXP" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -28855,7 +28165,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZr" = ( +"aXQ" = ( /obj/structure/flora/ausbushes/lavendergrass, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -28863,7 +28173,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZs" = ( +"aXR" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light{ dir = 1 @@ -28874,12 +28184,12 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZt" = ( +"aXS" = ( /turf/closed/mineral, /area/mine/unexplored{ name = "Engineering Asteroid" }) -"aZu" = ( +"aXT" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -28895,7 +28205,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZv" = ( +"aXU" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -28903,7 +28213,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZw" = ( +"aXV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -28914,7 +28224,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZx" = ( +"aXW" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -28923,7 +28233,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZy" = ( +"aXX" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 8 @@ -28934,25 +28244,25 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZz" = ( +"aXY" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZA" = ( +"aXZ" = ( /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZB" = ( +"aYa" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZC" = ( +"aYb" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -28960,7 +28270,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZD" = ( +"aYc" = ( /obj/structure/table/wood, /obj/item/seeds/apple, /obj/item/seeds/cherry, @@ -28973,7 +28283,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZE" = ( +"aYd" = ( /obj/structure/table/wood, /obj/item/weapon/cultivator, /obj/item/weapon/shovel/spade, @@ -28985,7 +28295,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZF" = ( +"aYe" = ( /obj/structure/flora/ausbushes/brflowers, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -28993,7 +28303,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZG" = ( +"aYf" = ( /obj/machinery/hydroponics/soil, /obj/machinery/airalarm{ dir = 8; @@ -29011,19 +28321,19 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZH" = ( +"aYg" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Engineering Asteroid" }) -"aZI" = ( +"aYh" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Engineering Asteroid" }) -"aZJ" = ( +"aYi" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -29031,7 +28341,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZK" = ( +"aYj" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -29040,7 +28350,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZL" = ( +"aYk" = ( /obj/machinery/light/small{ dir = 1 }, @@ -29048,7 +28358,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZM" = ( +"aYl" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -29061,9 +28371,14 @@ }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aZN" = ( +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"aYm" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -29073,7 +28388,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZO" = ( +"aYn" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/camera{ c_tag = "Rehabilitation Dome North"; @@ -29085,7 +28400,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZP" = ( +"aYo" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/machinery/light{ dir = 1 @@ -29096,14 +28411,14 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZQ" = ( +"aYp" = ( /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZR" = ( +"aYq" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -29114,7 +28429,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZS" = ( +"aYr" = ( /obj/machinery/hydroponics/soil, /obj/machinery/firealarm{ dir = 4; @@ -29127,7 +28442,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZT" = ( +"aYs" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -29137,9 +28452,14 @@ dir = 9 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"aZU" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"aYt" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -29153,9 +28473,15 @@ dir = 5 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, /turf/open/space, -/area/space) -"aZV" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"aYu" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -29167,23 +28493,23 @@ }, /turf/open/space, /area/space) -"aZW" = ( +"aYv" = ( /turf/open/floor/plating, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZX" = ( +"aYw" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZY" = ( +"aYx" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"aZZ" = ( +"aYy" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -29196,7 +28522,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baa" = ( +"aYz" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -29204,25 +28530,28 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bab" = ( +"aYA" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bac" = ( +"aYB" = ( /obj/machinery/door/airlock/glass, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bad" = ( +"aYC" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bae" = ( +"aYD" = ( /obj/machinery/light/small{ dir = 4 }, @@ -29231,7 +28560,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baf" = ( +"aYE" = ( /obj/structure/flora/ausbushes/fullgrass, /mob/living/simple_animal/butterfly, /turf/open/floor/grass{ @@ -29240,7 +28569,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bag" = ( +"aYF" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29248,7 +28577,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bah" = ( +"aYG" = ( /obj/structure/flora/ausbushes/pointybush, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29256,7 +28585,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bai" = ( +"aYH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29264,7 +28593,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baj" = ( +"aYI" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29272,7 +28601,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bak" = ( +"aYJ" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/sign/nosmoking_2{ pixel_x = 32 @@ -29283,12 +28612,12 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bal" = ( +"aYK" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bam" = ( +"aYL" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -29297,7 +28626,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"ban" = ( +"aYM" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -29306,13 +28635,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bao" = ( +"aYN" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bap" = ( +"aYO" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -29321,7 +28650,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baq" = ( +"aYP" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -29336,7 +28665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bar" = ( +"aYQ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -29348,7 +28677,7 @@ }, /turf/open/space, /area/space) -"bas" = ( +"aYR" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -29363,23 +28692,28 @@ icon_state = "1-8" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"bat" = ( +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"aYS" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/structure/disposaloutlet, /turf/open/floor/plating/airless, /area/space) -"bau" = ( +"aYT" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bav" = ( +"aYU" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -29393,7 +28727,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baw" = ( +"aYV" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -29404,17 +28738,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bax" = ( +"aYW" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bay" = ( +"aYX" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baz" = ( +"aYY" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -29425,7 +28765,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baA" = ( +"aYZ" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -29447,7 +28787,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baB" = ( +"aZa" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29466,7 +28806,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baC" = ( +"aZb" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29489,7 +28829,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baD" = ( +"aZc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29509,7 +28849,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baE" = ( +"aZd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29529,7 +28869,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baF" = ( +"aZe" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -29548,7 +28888,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baG" = ( +"aZf" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/light{ icon_state = "tube1"; @@ -29560,14 +28900,14 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baH" = ( +"aZg" = ( /turf/open/floor/plasteel/redblue{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baI" = ( +"aZh" = ( /obj/structure/flora/ausbushes/leafybush, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29575,7 +28915,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baJ" = ( +"aZi" = ( /obj/structure/flora/ausbushes/grassybush, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29583,7 +28923,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baK" = ( +"aZj" = ( /mob/living/simple_animal/chicken/rabbit/normal, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29591,7 +28931,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baL" = ( +"aZk" = ( /obj/structure/flora/ausbushes/reedbush, /mob/living/simple_animal/butterfly, /turf/open/floor/grass{ @@ -29600,7 +28940,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baM" = ( +"aZl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -29610,7 +28950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baN" = ( +"aZm" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -29618,12 +28958,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baO" = ( +"aZn" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baP" = ( +"aZo" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -29631,7 +28971,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baQ" = ( +"aZp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -29647,7 +28987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baR" = ( +"aZq" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ @@ -29657,12 +28997,12 @@ }, /turf/open/space, /area/space) -"baS" = ( +"aZr" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"baT" = ( +"aZs" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -29671,13 +29011,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"baU" = ( +"aZt" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"baV" = ( +"aZu" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -29686,12 +29026,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"baW" = ( +"aZv" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "Medical Asteroid" }) -"baX" = ( +"aZw" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -29704,7 +29044,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baY" = ( +"aZx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -29720,7 +29060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baZ" = ( +"aZy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -29734,7 +29074,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bba" = ( +"aZz" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -29746,11 +29086,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbb" = ( +"aZA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29773,7 +29116,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbc" = ( +"aZB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29796,7 +29139,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbd" = ( +"aZC" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29816,7 +29159,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbe" = ( +"aZD" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -29836,7 +29179,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbf" = ( +"aZE" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29844,13 +29187,13 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbg" = ( +"aZF" = ( /obj/structure/girder, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbh" = ( +"aZG" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -29869,7 +29212,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbi" = ( +"aZH" = ( /obj/machinery/light/small{ dir = 4 }, @@ -29877,7 +29220,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbj" = ( +"aZI" = ( /obj/structure/flora/ausbushes/reedbush, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29885,7 +29228,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbk" = ( +"aZJ" = ( /obj/structure/sink/puddle, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -29893,7 +29236,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbl" = ( +"aZK" = ( /obj/structure/flora/ausbushes/stalkybush, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/grass{ @@ -29902,10 +29245,10 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbm" = ( +"aZL" = ( /turf/closed/mineral, /area/hallway/primary/central) -"bbn" = ( +"aZM" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -29920,28 +29263,31 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbo" = ( +"aZN" = ( /turf/closed/mineral, /area/mine/unexplored{ name = "Medical Asteroid" }) -"bbp" = ( +"aZO" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Medical Asteroid" }) -"bbq" = ( +"aZP" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Medical Asteroid" }) -"bbr" = ( +"aZQ" = ( /obj/structure/sign/map/left/ceres{ pixel_x = -32 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -29949,12 +29295,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbs" = ( +"aZR" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbt" = ( +"aZS" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -29962,13 +29308,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbu" = ( +"aZT" = ( /obj/structure/grille/broken, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbv" = ( +"aZU" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -29981,17 +29327,17 @@ }, /obj/effect/decal/cleanable/cobweb, /obj/effect/turf_decal/stripes/end, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbw" = ( +"aZV" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbx" = ( +"aZW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30009,7 +29355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bby" = ( +"aZX" = ( /obj/machinery/light{ dir = 8 }, @@ -30020,13 +29366,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbz" = ( +"aZY" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbA" = ( +"aZZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30037,12 +29383,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbB" = ( +"baa" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bbC" = ( +"bab" = ( /obj/machinery/door/airlock/maintenance{ name = "Bar Backroom"; req_access_txt = "25" @@ -30051,13 +29397,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bbD" = ( +"bac" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bbE" = ( +"bad" = ( /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -30065,7 +29411,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbF" = ( +"bae" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -30089,7 +29435,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbG" = ( +"baf" = ( /obj/machinery/power/apc{ dir = 1; name = "Port Asteroid Maintence APC"; @@ -30107,7 +29453,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbH" = ( +"bag" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/sign/map/left/ceres{ pixel_x = 32; @@ -30120,7 +29466,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbI" = ( +"bah" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/machinery/light, /turf/open/floor/grass{ @@ -30129,17 +29475,17 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbJ" = ( +"bai" = ( /turf/open/floor/plating/asteroid, /area/hallway/primary/central) -"bbK" = ( +"baj" = ( /obj/structure/table, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbL" = ( +"bak" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -30152,13 +29498,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbM" = ( +"bal" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbN" = ( +"bam" = ( /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 7"; dir = 4; @@ -30172,7 +29518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbO" = ( +"ban" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -30185,7 +29531,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbP" = ( +"bao" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -30209,13 +29555,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbQ" = ( +"bap" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbR" = ( +"baq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -30229,7 +29575,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbS" = ( +"bar" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -30237,7 +29583,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbT" = ( +"bas" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -30246,7 +29592,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbU" = ( +"bat" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -30257,29 +29603,29 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbV" = ( +"bau" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbW" = ( +"bav" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; icon_state = "1-8" }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"baw" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbX" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"bbY" = ( +"bax" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30290,11 +29636,11 @@ icon_state = "alarm0"; pixel_x = 24 }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbZ" = ( +"bay" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Service Asteroid Hallway 1"; @@ -30307,7 +29653,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bca" = ( +"baz" = ( /obj/machinery/power/apc{ dir = 1; name = "Bar APC"; @@ -30322,7 +29668,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcb" = ( +"baA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30333,7 +29679,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcc" = ( +"baB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30345,7 +29691,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcd" = ( +"baC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30355,7 +29701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bce" = ( +"baD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30374,7 +29720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcf" = ( +"baE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30388,7 +29734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcg" = ( +"baF" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -30403,12 +29749,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bch" = ( +"baG" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bci" = ( +"baH" = ( /obj/machinery/door/airlock/maintenance{ name = "Freezer"; req_access_txt = "28" @@ -30417,7 +29763,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcj" = ( +"baI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30432,7 +29778,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bck" = ( +"baJ" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -30440,7 +29786,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcl" = ( +"baK" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ @@ -30454,7 +29800,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcm" = ( +"baL" = ( /obj/machinery/power/apc{ dir = 8; name = "Rehabilitation Dome APC"; @@ -30471,23 +29817,23 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcn" = ( +"baM" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/hallway/primary/central) -"bco" = ( +"baN" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcp" = ( +"baO" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcq" = ( +"baP" = ( /obj/machinery/light{ dir = 4 }, @@ -30496,6 +29842,12 @@ pixel_x = 29; pixel_y = 0 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -30503,7 +29855,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcr" = ( +"baQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30520,7 +29872,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcs" = ( +"baR" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -30530,7 +29882,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bct" = ( +"baS" = ( /obj/machinery/power/apc{ dir = 4; name = "Central Primary Hallway APC"; @@ -30545,12 +29897,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcu" = ( +"baT" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bcv" = ( +"baU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -30565,12 +29917,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bcw" = ( +"baV" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -30578,7 +29933,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bcx" = ( +"baW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -30591,18 +29946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bcy" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/closet/emcloset, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"bcz" = ( +"baX" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30612,7 +29956,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bcA" = ( +"baY" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -30621,7 +29965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bcB" = ( +"baZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -30629,7 +29973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bcC" = ( +"bba" = ( /obj/machinery/camera{ c_tag = "Bar Backroom"; dir = 5; @@ -30639,12 +29983,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcD" = ( +"bbb" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcE" = ( +"bbc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -30652,7 +29996,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcF" = ( +"bbd" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -30661,7 +30005,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcG" = ( +"bbe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -30669,7 +30013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcH" = ( +"bbf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -30682,14 +30026,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcI" = ( +"bbg" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcJ" = ( +"bbh" = ( /obj/machinery/light/small{ dir = 1 }, @@ -30697,13 +30041,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcK" = ( +"bbi" = ( /obj/structure/kitchenspike, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcL" = ( +"bbj" = ( /obj/machinery/camera{ c_tag = "Freezer" }, @@ -30711,7 +30055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcM" = ( +"bbk" = ( /obj/machinery/power/apc{ dir = 1; name = "Kitchen APC"; @@ -30726,12 +30070,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcN" = ( +"bbl" = ( /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcO" = ( +"bbm" = ( /obj/structure/flora/ausbushes/stalkybush, /obj/machinery/camera{ c_tag = "Rehabilitation Dome West 1"; @@ -30744,7 +30088,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcP" = ( +"bbn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -30754,7 +30098,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcQ" = ( +"bbo" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -30767,7 +30111,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcR" = ( +"bbp" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -30781,7 +30125,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcS" = ( +"bbq" = ( /obj/machinery/light{ dir = 1 }, @@ -30798,7 +30142,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcT" = ( +"bbr" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30808,13 +30152,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcU" = ( +"bbs" = ( /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/plating/asteroid, /area/hallway/primary/central) -"bcV" = ( +"bbt" = ( /obj/machinery/light/small{ dir = 4 }, @@ -30824,13 +30168,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcW" = ( +"bbu" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcX" = ( +"bbv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30842,7 +30186,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcY" = ( +"bbw" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -30850,7 +30194,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcZ" = ( +"bbx" = ( /obj/structure/table, /obj/item/stack/sheet/rglass{ amount = 20 @@ -30859,7 +30203,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bda" = ( +"bby" = ( /obj/machinery/camera{ c_tag = "EVA Equipment"; dir = 6; @@ -30869,13 +30213,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdb" = ( +"bbz" = ( /obj/machinery/suit_storage_unit/standard_unit, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdc" = ( +"bbA" = ( /obj/machinery/light{ dir = 1 }, @@ -30883,7 +30227,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdd" = ( +"bbB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -30892,21 +30236,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bde" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"bdf" = ( +"bbC" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -30914,7 +30244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bdg" = ( +"bbD" = ( /obj/structure/table/wood, /obj/item/stack/packageWrap, /obj/item/device/destTagger, @@ -30922,7 +30252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdh" = ( +"bbE" = ( /obj/machinery/light/small, /obj/structure/table/wood, /obj/item/weapon/gun/ballistic/revolver/doublebarrel, @@ -30931,13 +30261,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdi" = ( +"bbF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdj" = ( +"bbG" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = 0; @@ -30948,13 +30278,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdk" = ( +"bbH" = ( /obj/effect/landmark/blobstart, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdl" = ( +"bbI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -30965,7 +30295,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdm" = ( +"bbJ" = ( /mob/living/simple_animal/hostile/retaliate/goat{ name = "Pete" }, @@ -30973,7 +30303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bdn" = ( +"bbK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -30987,7 +30317,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bdo" = ( +"bbL" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31003,7 +30333,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdp" = ( +"bbM" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -31013,7 +30343,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bdq" = ( +"bbN" = ( /obj/machinery/door/airlock/glass{ name = "Rehabilitation Dome" }, @@ -31023,14 +30353,14 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bdr" = ( +"bbO" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bds" = ( +"bbP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Rehabilitation Dome Lobby East"; @@ -31050,7 +30380,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bdt" = ( +"bbQ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -31066,7 +30396,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdu" = ( +"bbR" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 4 @@ -31081,22 +30411,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bbS" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdw" = ( +"bbT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -31110,7 +30440,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdx" = ( +"bbU" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -31121,7 +30451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdy" = ( +"bbV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -31138,11 +30468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bbW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -31153,11 +30479,15 @@ pixel_y = 0 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdA" = ( +"bbX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -31174,17 +30504,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdB" = ( +"bbY" = ( /obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdC" = ( +"bbZ" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel/fifty{ amount = 20 @@ -31193,12 +30528,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdD" = ( +"bca" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdE" = ( +"bcb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -31206,7 +30541,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdF" = ( +"bcc" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -31215,13 +30550,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bdG" = ( +"bcd" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdH" = ( +"bce" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -31234,7 +30569,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdI" = ( +"bcf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -31248,7 +30583,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdJ" = ( +"bcg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -31269,7 +30604,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdK" = ( +"bch" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -31278,13 +30613,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdL" = ( +"bci" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdM" = ( +"bcj" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating{ @@ -31293,7 +30628,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdN" = ( +"bck" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plating{ @@ -31302,26 +30637,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdO" = ( -/obj/machinery/camera{ - c_tag = "Service SMES"; - dir = 6; - icon_state = "camera"; - network = list("SS13","QM") - }, -/obj/structure/table, -/obj/item/weapon/storage/toolbox/mechanical, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 5 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bdP" = ( +"bcl" = ( /obj/machinery/power/terminal{ tag = "icon-term (EAST)"; icon_state = "term"; @@ -31337,7 +30653,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdQ" = ( +"bcm" = ( /obj/machinery/door/airlock/maintenance{ name = "Serivce SMES Access"; req_access_txt = "10;11;12" @@ -31347,32 +30663,19 @@ d2 = 8; icon_state = "4-8" }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdR" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"bdS" = ( +"bcn" = ( /obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bdT" = ( +"bco" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -31385,7 +30688,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bdU" = ( +"bcp" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ @@ -31396,7 +30699,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bdV" = ( +"bcq" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -31412,14 +30715,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bdW" = ( +"bcr" = ( /obj/machinery/vending/boozeomat, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdX" = ( +"bcs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock{ name = "Bar Backroom"; @@ -31434,7 +30737,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdY" = ( +"bct" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -31442,13 +30745,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bdZ" = ( +"bcu" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bea" = ( +"bcv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -31460,7 +30763,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"beb" = ( +"bcw" = ( /obj/machinery/gibber, /obj/machinery/light/small{ dir = 4 @@ -31469,13 +30772,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bec" = ( +"bcx" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bed" = ( +"bcy" = ( /obj/structure/flora/ausbushes/reedbush, /obj/machinery/light{ icon_state = "tube1"; @@ -31487,14 +30790,14 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bee" = ( +"bcz" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bef" = ( +"bcA" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (SOUTHWEST)"; icon_state = "neutral"; @@ -31504,7 +30807,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beg" = ( +"bcB" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -31514,7 +30817,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beh" = ( +"bcC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ dir = 4; @@ -31529,7 +30832,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bei" = ( +"bcD" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ @@ -31543,7 +30846,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bej" = ( +"bcE" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -31558,7 +30861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bek" = ( +"bcF" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -31571,7 +30874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bel" = ( +"bcG" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31584,50 +30887,50 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bem" = ( +"bcH" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"ben" = ( +"bcI" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"beo" = ( +"bcJ" = ( /obj/structure/closet/crate/rcd, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bep" = ( +"bcK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"beq" = ( +"bcL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"ber" = ( +"bcM" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bes" = ( +"bcN" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bet" = ( +"bcO" = ( /obj/machinery/camera{ c_tag = "Medical SMES"; dir = 6; @@ -31638,7 +30941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"beu" = ( +"bcP" = ( /obj/machinery/computer/station_alert, /obj/structure/cable/orange{ d2 = 2; @@ -31648,7 +30951,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bev" = ( +"bcQ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -31656,7 +30959,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bew" = ( +"bcR" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small{ dir = 8 @@ -31665,7 +30968,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bex" = ( +"bcS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -31676,12 +30979,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bey" = ( +"bcT" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bez" = ( +"bcU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Medbay Asteroid Hallway 6"; @@ -31696,7 +30999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"beA" = ( +"bcV" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -31709,7 +31012,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"beB" = ( +"bcW" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -31721,14 +31024,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"beC" = ( +"bcX" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"beD" = ( +"bcY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -31740,7 +31043,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"beE" = ( +"bcZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31755,7 +31058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"beF" = ( +"bda" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/food/drinks/shaker, /obj/item/weapon/reagent_containers/glass/rag, @@ -31766,7 +31069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beG" = ( +"bdb" = ( /obj/structure/table, /obj/item/weapon/book/manual/barman_recipes, /obj/item/device/radio/intercom{ @@ -31780,21 +31083,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beH" = ( +"bdc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/holopad, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beI" = ( +"bdd" = ( /obj/structure/table, /obj/machinery/chem_dispenser/drinks, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beJ" = ( +"bde" = ( /obj/structure/table, /obj/machinery/chem_dispenser/drinks/beer, /obj/structure/extinguisher_cabinet{ @@ -31804,7 +31107,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beK" = ( +"bdf" = ( /obj/structure/sign/securearea{ desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; @@ -31816,7 +31119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beL" = ( +"bdg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -31831,13 +31134,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"beM" = ( +"bdh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"beN" = ( +"bdi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -31848,13 +31151,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"beO" = ( +"bdj" = ( /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"beP" = ( +"bdk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -31865,7 +31168,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beQ" = ( +"bdl" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -31876,7 +31179,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beR" = ( +"bdm" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -31887,7 +31190,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beS" = ( +"bdn" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -31898,7 +31201,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beT" = ( +"bdo" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -31913,7 +31216,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beU" = ( +"bdp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -31927,7 +31230,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beV" = ( +"bdq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -31937,7 +31240,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beW" = ( +"bdr" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHEAST)"; icon_state = "neutral"; @@ -31947,7 +31250,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beX" = ( +"bds" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -31964,7 +31267,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beY" = ( +"bdt" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -31979,7 +31282,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beZ" = ( +"bdu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -31998,7 +31301,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfa" = ( +"bdv" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -32007,7 +31310,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfb" = ( +"bdw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -32016,7 +31319,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfc" = ( +"bdx" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -32030,33 +31333,33 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfd" = ( +"bdy" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfe" = ( +"bdz" = ( /obj/structure/rack, /obj/item/weapon/tank/jetpack/carbondioxide, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bff" = ( +"bdA" = ( /obj/structure/rack, /obj/structure/window/reinforced{ dir = 4; @@ -32068,7 +31371,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bfg" = ( +"bdB" = ( /obj/structure/rack, /obj/structure/window/reinforced{ dir = 8 @@ -32078,24 +31381,29 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bfh" = ( +"bdC" = ( /obj/structure/rack, /obj/item/clothing/shoes/magboots, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bfi" = ( +"bdD" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; icon_state = "2-4" }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfj" = ( +"bdE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -32110,32 +31418,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfk" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Starboard Hallway APC"; - pixel_x = 23; - pixel_y = 2 - }, -/obj/structure/cable/orange{ - d2 = 8; - icon_state = "0-8" - }, +"bdF" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/effect/turf_decal/stripes/end{ - tag = "icon-warn_end (WEST)"; - icon_state = "warn_end"; - dir = 8 - }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfl" = ( +"bdG" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -32143,13 +31436,16 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfm" = ( +"bdH" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -32157,7 +31453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfn" = ( +"bdI" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -32167,7 +31463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfo" = ( +"bdJ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, @@ -32181,12 +31477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bfp" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"bfq" = ( +"bdK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -32199,7 +31490,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bfr" = ( +"bdL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -32211,46 +31502,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bfs" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/chair/stool, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bft" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/computer/station_alert, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bfu" = ( +"bdM" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -32266,22 +31518,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bdN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0 }, -/turf/open/floor/plating{ +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfw" = ( +"bdO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -32295,7 +31547,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfx" = ( +"bdP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -32307,7 +31559,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfy" = ( +"bdQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -32327,7 +31579,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfz" = ( +"bdR" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -32336,7 +31588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfA" = ( +"bdS" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -32345,7 +31597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfB" = ( +"bdT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -32353,7 +31605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfC" = ( +"bdU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -32364,13 +31616,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfD" = ( -/obj/effect/landmark/start/bartender, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/bar) -"bfE" = ( +"bdV" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -32381,7 +31627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfF" = ( +"bdW" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -32394,32 +31640,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfG" = ( +"bdX" = ( /obj/machinery/icecream_vat, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bfH" = ( +"bdY" = ( /obj/structure/closet/secure_closet/freezer/meat, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bfI" = ( +"bdZ" = ( /obj/structure/closet/chefcloset, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bfJ" = ( +"bea" = ( /obj/machinery/chem_master/condimaster, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bfK" = ( +"beb" = ( /obj/structure/chair/stool, /mob/living/simple_animal/butterfly, /turf/open/floor/grass{ @@ -32428,7 +31674,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfL" = ( +"bec" = ( /obj/structure/table/wood, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -32436,7 +31682,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfM" = ( +"bed" = ( /obj/structure/chair/stool, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -32444,7 +31690,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfN" = ( +"bee" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -32455,7 +31701,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfO" = ( +"bef" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -32470,7 +31716,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfP" = ( +"beg" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -32481,7 +31727,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfQ" = ( +"beh" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (SOUTHWEST)"; icon_state = "neutral"; @@ -32489,7 +31735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfR" = ( +"bei" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -32497,7 +31743,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfS" = ( +"bej" = ( /obj/machinery/light{ dir = 1 }, @@ -32508,7 +31754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfT" = ( +"bek" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -32519,7 +31765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfU" = ( +"bel" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -32532,7 +31778,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfV" = ( +"bem" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -32550,7 +31796,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfW" = ( +"ben" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -32568,7 +31814,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfX" = ( +"beo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -32579,7 +31825,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfY" = ( +"bep" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -32590,7 +31836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfZ" = ( +"beq" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -32605,7 +31851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bga" = ( +"ber" = ( /obj/machinery/light{ dir = 1 }, @@ -32619,7 +31865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgb" = ( +"bes" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -32630,12 +31876,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgc" = ( +"bet" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgd" = ( +"beu" = ( /obj/structure/cable{ icon_state = "0-2"; d2 = 2 @@ -32647,7 +31893,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bge" = ( +"bev" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/glass_command{ name = "EVA"; @@ -32657,7 +31903,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgf" = ( +"bew" = ( /obj/structure/cable{ icon_state = "0-2"; d2 = 2 @@ -32668,13 +31914,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgg" = ( -/obj/structure/closet/secure_closet/engineering_electrical, +"bex" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Starboard Hallway APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (EAST)"; + icon_state = "warn_end"; + dir = 4 + }, +/obj/structure/cable/orange, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgh" = ( +"bey" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -32685,7 +31942,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgi" = ( +"bez" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -32701,7 +31958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgj" = ( +"beA" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -32718,20 +31975,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgk" = ( +"beB" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgl" = ( +"beC" = ( /obj/structure/closet/crate, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgm" = ( +"beD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -32743,48 +32000,48 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgn" = ( +"beE" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgo" = ( +"beF" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgp" = ( +"beG" = ( /turf/closed/mineral/random/labormineral, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bgq" = ( +"beH" = ( /turf/closed/mineral, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bgr" = ( +"beI" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bgs" = ( +"beJ" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bgt" = ( +"beK" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bgu" = ( +"beL" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, /turf/open/floor/plating{ @@ -32793,14 +32050,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bgv" = ( +"beM" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/bartender, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bgw" = ( +"beN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, /obj/structure/table/wood/poker, @@ -32809,14 +32066,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bgx" = ( +"beO" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bgy" = ( +"beP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock{ name = "Bar Access"; @@ -32831,13 +32088,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bgz" = ( +"beQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bgA" = ( +"beR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock{ name = "Freezer"; @@ -32852,7 +32109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bgB" = ( +"beS" = ( /obj/structure/flora/ausbushes/sparsegrass, /mob/living/simple_animal/chicken/rabbit/normal, /turf/open/floor/grass{ @@ -32861,7 +32118,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgC" = ( +"beT" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/light{ dir = 4; @@ -32873,7 +32130,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgD" = ( +"beU" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ @@ -32885,7 +32142,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgE" = ( +"beV" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -32900,7 +32157,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgF" = ( +"beW" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHEAST)"; icon_state = "neutral"; @@ -32908,19 +32165,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgG" = ( +"beX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgH" = ( +"beY" = ( /obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgI" = ( +"beZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -32940,7 +32197,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgJ" = ( +"bfa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -32955,7 +32212,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgK" = ( +"bfb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -32969,7 +32226,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgL" = ( +"bfc" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -32987,7 +32244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgM" = ( +"bfd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33001,7 +32258,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgN" = ( +"bfe" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33015,7 +32272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgO" = ( +"bff" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -33035,7 +32292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgP" = ( +"bfg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33046,7 +32303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgQ" = ( +"bfh" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -33058,7 +32315,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgR" = ( +"bfi" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (NORTHWEST)"; @@ -33067,7 +32324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgS" = ( +"bfj" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -33081,7 +32338,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgT" = ( +"bfk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (NORTH)"; @@ -33090,7 +32347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgU" = ( +"bfl" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -33103,7 +32360,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgV" = ( +"bfm" = ( /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plasteel/blue/side{ tag = "icon-blue (NORTHEAST)"; @@ -33112,22 +32369,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgW" = ( +"bfn" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "Medbay SMES Access"; - req_access_txt = "10;11;12" + req_access_txt = "0"; + req_one_access_txt = "10;11;12" }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgX" = ( +"bfo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -33137,22 +32395,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgY" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bfp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgZ" = ( +"bfq" = ( /obj/machinery/door/airlock/maintenance{ name = "Starboard Asteroid Maintenance Access"; req_access_txt = "12" @@ -33161,7 +32419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bha" = ( +"bfr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -33169,25 +32427,25 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhb" = ( +"bfs" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhc" = ( +"bft" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhd" = ( +"bfu" = ( /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhe" = ( +"bfv" = ( /obj/machinery/light/small{ dir = 1 }, @@ -33195,25 +32453,25 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhf" = ( +"bfw" = ( /obj/structure/grille/broken, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhg" = ( +"bfx" = ( /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhh" = ( +"bfy" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bhi" = ( +"bfz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33221,7 +32479,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bhj" = ( +"bfA" = ( /obj/structure/window{ tag = "icon-window (EAST)"; icon_state = "window"; @@ -33234,7 +32492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bhk" = ( +"bfB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33248,7 +32506,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bhl" = ( +"bfC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33256,7 +32514,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bhm" = ( +"bfD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -33266,7 +32524,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bhn" = ( +"bfE" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -33278,7 +32536,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bho" = ( +"bfF" = ( /obj/structure/disposalpipe/segment, /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, @@ -33287,7 +32545,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bhp" = ( +"bfG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table/wood/poker, /obj/machinery/door/firedoor, @@ -33295,13 +32553,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bhq" = ( +"bfH" = ( /obj/structure/chair/stool/bar, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bhr" = ( +"bfI" = ( /obj/machinery/newscaster{ pixel_y = 32 }, @@ -33309,7 +32567,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bhs" = ( +"bfJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -33329,7 +32587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bht" = ( +"bfK" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/stack/packageWrap, @@ -33338,7 +32596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhu" = ( +"bfL" = ( /obj/structure/table, /obj/structure/table, /obj/machinery/reagentgrinder, @@ -33351,7 +32609,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhv" = ( +"bfM" = ( /obj/machinery/processor, /obj/machinery/camera{ c_tag = "Kitchen" @@ -33360,7 +32618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhw" = ( +"bfN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -33371,7 +32629,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhx" = ( +"bfO" = ( /obj/structure/sink/kitchen{ pixel_y = 32 }, @@ -33379,7 +32637,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhy" = ( +"bfP" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -33387,7 +32645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhz" = ( +"bfQ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -33403,7 +32661,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bhA" = ( +"bfR" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/camera{ c_tag = "Rehabilitation Dome South 2"; @@ -33415,7 +32673,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhB" = ( +"bfS" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/airalarm{ dir = 1; @@ -33428,7 +32686,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhC" = ( +"bfT" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/machinery/firealarm{ dir = 1; @@ -33441,7 +32699,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhD" = ( +"bfU" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/sign/nosmoking_2{ pixel_y = -32 @@ -33452,7 +32710,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhE" = ( +"bfV" = ( /obj/machinery/light, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -33460,7 +32718,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhF" = ( +"bfW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -33477,7 +32735,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhG" = ( +"bfX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33497,7 +32755,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhH" = ( +"bfY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33509,7 +32767,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhI" = ( +"bfZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33529,7 +32787,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhJ" = ( +"bga" = ( /obj/structure/sign/securearea{ pixel_x = 32; pixel_y = -32 @@ -33539,7 +32797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhK" = ( +"bgb" = ( /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 3"; dir = 1; @@ -33552,7 +32810,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhL" = ( +"bgc" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -33565,14 +32823,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhM" = ( +"bgd" = ( /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhN" = ( +"bge" = ( /obj/machinery/light, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; @@ -33582,7 +32840,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhO" = ( +"bgf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -33596,12 +32854,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhP" = ( +"bgg" = ( /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhQ" = ( +"bgh" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -33612,7 +32870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhR" = ( +"bgi" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -33624,7 +32882,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhS" = ( +"bgj" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -33648,7 +32906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhT" = ( +"bgk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33665,7 +32923,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhU" = ( +"bgl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33683,7 +32941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhV" = ( +"bgm" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33699,7 +32957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhW" = ( +"bgn" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33718,7 +32976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhX" = ( +"bgo" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33729,7 +32987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhY" = ( +"bgp" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -33749,7 +33007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhZ" = ( +"bgq" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -33767,13 +33025,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bia" = ( +"bgr" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bib" = ( +"bgs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -33783,7 +33041,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bic" = ( +"bgt" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -33803,7 +33061,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bid" = ( +"bgu" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33823,7 +33081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bie" = ( +"bgv" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -33847,7 +33105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bif" = ( +"bgw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -33869,7 +33127,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"big" = ( +"bgx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33888,7 +33146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bih" = ( +"bgy" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33913,7 +33171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bii" = ( +"bgz" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33935,7 +33193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bij" = ( +"bgA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33956,7 +33214,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bik" = ( +"bgB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33966,6 +33224,9 @@ dir = 8; icon_state = "pipe-c" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -33973,7 +33234,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bil" = ( +"bgC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33983,7 +33244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bim" = ( +"bgD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -33997,7 +33258,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bin" = ( +"bgE" = ( /obj/machinery/door/airlock/maintenance{ name = "Starboard Asteroid Maintenance Access"; req_access_txt = "12" @@ -34011,7 +33272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bio" = ( +"bgF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34024,7 +33285,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bip" = ( +"bgG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34036,7 +33297,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"biq" = ( +"bgH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34053,7 +33314,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bir" = ( +"bgI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34066,7 +33327,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bis" = ( +"bgJ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -34078,18 +33339,13 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bit" = ( +"bgK" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"biu" = ( -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"biv" = ( +"bgL" = ( /obj/structure/window{ tag = "icon-window (EAST)"; icon_state = "window"; @@ -34099,7 +33355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"biw" = ( +"bgM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -34109,7 +33365,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bix" = ( +"bgN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34122,7 +33378,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"biy" = ( +"bgO" = ( /obj/machinery/camera{ c_tag = "Bar"; dir = 5; @@ -34136,7 +33392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biz" = ( +"bgP" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -34146,7 +33402,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biA" = ( +"bgQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -34156,7 +33412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biB" = ( +"bgR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -34164,7 +33420,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biC" = ( +"bgS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -34175,7 +33431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biD" = ( +"bgT" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -34194,7 +33450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biE" = ( +"bgU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -34214,7 +33470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biF" = ( +"bgV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -34231,7 +33487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biG" = ( +"bgW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -34247,7 +33503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biH" = ( +"bgX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -34263,7 +33519,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biI" = ( +"bgY" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -34271,7 +33527,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biJ" = ( +"bgZ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -34283,7 +33539,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biK" = ( +"bha" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34302,7 +33558,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"biL" = ( +"bhb" = ( /obj/machinery/door/airlock/atmos{ name = "Service Atmospherics Checkpoint"; req_access_txt = "24" @@ -34313,7 +33569,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"biM" = ( +"bhc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -34322,7 +33578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"biN" = ( +"bhd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -34331,12 +33587,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"biO" = ( +"bhe" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"biP" = ( +"bhf" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34352,7 +33608,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"biQ" = ( +"bhg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -34368,7 +33624,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"biR" = ( +"bhh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34379,13 +33635,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"biS" = ( +"bhi" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"biT" = ( +"bhj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34393,7 +33649,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"biU" = ( +"bhk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -34404,7 +33660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"biV" = ( +"bhl" = ( /obj/machinery/camera{ c_tag = "EVA Storage"; dir = 9; @@ -34417,13 +33673,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"biW" = ( +"bhm" = ( /obj/machinery/vending/cola/random, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"biX" = ( +"bhn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -34431,7 +33687,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"biY" = ( +"bho" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34443,7 +33699,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"biZ" = ( +"bhp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -34453,7 +33709,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bja" = ( +"bhq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -34464,7 +33720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjb" = ( +"bhr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -34480,27 +33736,39 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjc" = ( +"bhs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjd" = ( +"bht" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bje" = ( +"bhu" = ( /obj/machinery/light/small{ dir = 8 }, @@ -34510,19 +33778,13 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bjf" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bjg" = ( +"bhv" = ( /obj/structure/girder, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bjh" = ( +"bhw" = ( /obj/machinery/power/apc{ dir = 2; name = "Surgery APC"; @@ -34538,7 +33800,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bji" = ( +"bhx" = ( /obj/machinery/light/small, /obj/structure/closet, /turf/open/floor/plating/astplate{ @@ -34547,7 +33809,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bjj" = ( +"bhy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -34558,7 +33820,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bjk" = ( +"bhz" = ( /obj/structure/rack, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -34569,7 +33831,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bjl" = ( +"bhA" = ( /obj/structure/window{ tag = "icon-window (EAST)"; icon_state = "window"; @@ -34585,7 +33847,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bjm" = ( +"bhB" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -34594,7 +33856,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bjn" = ( +"bhC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -34606,7 +33868,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bjo" = ( +"bhD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -34614,52 +33876,37 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bjp" = ( +"bhE" = ( /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bjq" = ( +"bhF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bjr" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/airalarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/bar) -"bjs" = ( +"bhG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bjt" = ( +"bhH" = ( /obj/effect/landmark/start/cook, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bju" = ( +"bhI" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/food/condiment/peppermill, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bjv" = ( +"bhJ" = ( /obj/structure/table, /obj/item/weapon/book/manual/chef_recipes, /obj/machinery/atmospherics/components/unary/vent_pump{ @@ -34670,18 +33917,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bjw" = ( +"bhK" = ( /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bjx" = ( +"bhL" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bjy" = ( +"bhM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -34703,7 +33950,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bjz" = ( +"bhN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -34713,7 +33960,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bjA" = ( +"bhO" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/clothing/glasses/meson, @@ -34726,33 +33973,33 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bjB" = ( +"bhP" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "Civilian Asteroid" }) -"bjC" = ( +"bhQ" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 6 }, /obj/structure/lattice, /turf/open/space, /area/space) -"bjD" = ( +"bhR" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 }, /obj/structure/lattice, /turf/open/space, /area/space) -"bjE" = ( +"bhS" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 }, /obj/structure/lattice, /turf/open/space, /area/space) -"bjF" = ( +"bhT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "SEngineering Asteroid Hallway 5"; @@ -34766,7 +34013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bjG" = ( +"bhU" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34777,7 +34024,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bjH" = ( +"bhV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -34786,7 +34033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bjI" = ( +"bhW" = ( /obj/structure/table, /obj/item/stack/rods{ amount = 50 @@ -34799,21 +34046,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bjJ" = ( +"bhX" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, /turf/open/floor/plasteel/blue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bjK" = ( +"bhY" = ( /obj/machinery/light, /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel/blue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bjL" = ( +"bhZ" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = 1; @@ -34823,7 +34070,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bjM" = ( +"bia" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plasteel/blue/side{ @@ -34833,13 +34080,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bjN" = ( +"bib" = ( /obj/machinery/vending/snack/random, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjO" = ( +"bic" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -34847,7 +34094,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjP" = ( +"bid" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34855,7 +34102,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjQ" = ( +"bie" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34869,13 +34116,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjR" = ( +"bif" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjS" = ( +"big" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -34884,7 +34131,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjT" = ( +"bih" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34898,7 +34145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjU" = ( +"bii" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34910,7 +34157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjV" = ( +"bij" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -34921,12 +34168,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjW" = ( +"bik" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bjX" = ( +"bil" = ( /obj/machinery/door/airlock/maintenance{ name = "Surgey Observation"; req_access_txt = "5" @@ -34935,12 +34182,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bjY" = ( +"bim" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bjZ" = ( +"bin" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -34952,7 +34199,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bka" = ( +"bio" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -34960,7 +34207,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkb" = ( +"bip" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -34972,20 +34219,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/device/assembly/mousetrap/armed, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bkd" = ( +"biq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Service Asteroid Hallway 2"; @@ -35001,7 +34235,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bke" = ( +"bir" = ( /obj/machinery/light{ dir = 8 }, @@ -35014,7 +34248,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkf" = ( +"bis" = ( /obj/structure/chair{ dir = 4 }, @@ -35023,7 +34257,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkg" = ( +"bit" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -35033,7 +34267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkh" = ( +"biu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35045,7 +34279,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bki" = ( +"biv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35056,7 +34290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkj" = ( +"biw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35069,7 +34303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkk" = ( +"bix" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -35081,7 +34315,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkl" = ( +"biy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -35094,7 +34328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkm" = ( +"biz" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -35107,13 +34341,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bkn" = ( +"biA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bko" = ( +"biB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -35123,21 +34357,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bkp" = ( +"biC" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/food/condiment/saltshaker, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bkq" = ( +"biD" = ( /obj/structure/table, /obj/item/weapon/kitchen/rollingpin, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bkr" = ( +"biE" = ( /obj/structure/table, /obj/machinery/microwave, /obj/machinery/light{ @@ -35148,7 +34382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bks" = ( +"biF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -35173,7 +34407,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkt" = ( +"biG" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -35184,7 +34418,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bku" = ( +"biH" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -35198,49 +34432,49 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkv" = ( +"biI" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /turf/open/space, /area/space) -"bkw" = ( +"biJ" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 6 }, /turf/open/space, /area/space) -"bkx" = ( +"biK" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 }, /turf/open/space, /area/space) -"bky" = ( +"biL" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 10 }, /turf/open/space, /area/space) -"bkz" = ( +"biM" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bkA" = ( +"biN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bkB" = ( +"biO" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"bkC" = ( +"biP" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -35249,26 +34483,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"bkD" = ( +"biQ" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bkE" = ( +"biR" = ( /obj/structure/table, /obj/item/weapon/surgicaldrill, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkF" = ( +"biS" = ( /obj/structure/table, /obj/item/weapon/hemostat, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkG" = ( +"biT" = ( /obj/structure/table, /obj/item/weapon/scalpel{ pixel_y = 12 @@ -35281,14 +34515,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkH" = ( +"biU" = ( /obj/structure/table, /obj/item/weapon/retractor, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkI" = ( +"biV" = ( /obj/structure/table, /obj/item/weapon/cautery{ pixel_x = 4 @@ -35297,7 +34531,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkJ" = ( +"biW" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -35305,7 +34539,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkK" = ( +"biX" = ( /obj/structure/chair{ dir = 8 }, @@ -35313,7 +34547,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkL" = ( +"biY" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -35322,7 +34556,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkM" = ( +"biZ" = ( /obj/structure/chair{ dir = 8 }, @@ -35333,14 +34567,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkN" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bkO" = ( +"bja" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -35349,18 +34576,18 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bkP" = ( +"bjb" = ( /obj/structure/grille, /turf/open/floor/plating, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bkQ" = ( +"bjc" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bkR" = ( +"bjd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -35372,7 +34599,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bkS" = ( +"bje" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -35385,7 +34612,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bkT" = ( +"bjf" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -35402,7 +34629,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkU" = ( +"bjg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35417,7 +34644,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkV" = ( +"bjh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35433,7 +34660,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkW" = ( +"bji" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35452,7 +34679,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkX" = ( +"bjj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35471,7 +34698,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkY" = ( +"bjk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35491,7 +34718,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkZ" = ( +"bjl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35508,7 +34735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bla" = ( +"bjm" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35523,7 +34750,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"blb" = ( +"bjn" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -35543,7 +34770,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"blc" = ( +"bjo" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -35551,32 +34778,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bld" = ( +"bjp" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"ble" = ( +"bjq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"blf" = ( +"bjr" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"blg" = ( +"bjs" = ( /obj/effect/landmark/xmastree, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"blh" = ( +"bjt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -35586,7 +34813,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bli" = ( +"bju" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -35596,7 +34823,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"blj" = ( +"bjv" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/food/condiment/enzyme, @@ -35604,21 +34831,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"blk" = ( +"bjw" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/food/snacks/mint, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bll" = ( +"bjx" = ( /obj/structure/table, /obj/machinery/microwave, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"blm" = ( +"bjy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -35635,7 +34862,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bln" = ( +"bjz" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -35645,7 +34872,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blo" = ( +"bjA" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -35663,7 +34890,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blp" = ( +"bjB" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, @@ -35675,24 +34902,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"blq" = ( +"bjC" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 5 }, /turf/open/space, /area/space) -"blr" = ( +"bjD" = ( /turf/closed/wall/r_wall, /area/engine/engineering) -"bls" = ( +"bjE" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 9 }, /turf/open/space, /area/space) -"blt" = ( +"bjF" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -35704,14 +34931,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"blu" = ( +"bjG" = ( /obj/structure/tank_dispenser/oxygen, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"blv" = ( +"bjH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, /obj/item/device/radio/intercom{ @@ -35731,7 +34958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"blw" = ( +"bjI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -35749,7 +34976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"blx" = ( +"bjJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -35761,7 +34988,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bly" = ( +"bjK" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -35773,12 +35000,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"blz" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"blA" = ( +"bjL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -35787,14 +35009,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"blB" = ( +"bjM" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"blC" = ( +"bjN" = ( /obj/structure/table, /obj/item/weapon/cartridge/medical{ pixel_x = -2; @@ -35815,7 +35037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"blD" = ( +"bjO" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, /obj/machinery/airalarm{ @@ -35827,7 +35049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"blE" = ( +"bjP" = ( /obj/machinery/light/small{ dir = 1 }, @@ -35839,13 +35061,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"blF" = ( +"bjQ" = ( /obj/structure/closet/secure_closet/personal/patient, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"blG" = ( +"bjR" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, /obj/machinery/firealarm{ @@ -35855,7 +35077,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"blH" = ( +"bjS" = ( /obj/structure/table, /obj/item/clothing/gloves/color/latex, /obj/item/clothing/mask/surgical, @@ -35864,12 +35086,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"blI" = ( +"bjT" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"blJ" = ( +"bjU" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -35878,7 +35100,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"blK" = ( +"bjV" = ( /obj/structure/table, /obj/item/weapon/surgical_drapes, /obj/item/weapon/razor, @@ -35886,13 +35108,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"blL" = ( +"bjW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"blM" = ( +"bjX" = ( /obj/structure/chair{ dir = 8 }, @@ -35903,34 +35125,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"blN" = ( +"bjY" = ( /obj/structure/table, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"blO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/xeno_spawn, +"bjZ" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"blP" = ( -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"blQ" = ( -/obj/structure/closet/crate, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"blR" = ( +"bka" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -35943,7 +35149,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"blS" = ( +"bkb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -35951,7 +35157,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"blT" = ( +"bkc" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -35962,7 +35168,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blU" = ( +"bkd" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -35983,7 +35189,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blV" = ( +"bke" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -35999,7 +35205,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blW" = ( +"bkf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36014,7 +35220,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blX" = ( +"bkg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36032,7 +35238,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blY" = ( +"bkh" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -36051,7 +35257,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blZ" = ( +"bki" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36067,7 +35273,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bma" = ( +"bkj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36086,7 +35292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmb" = ( +"bkk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36103,7 +35309,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmc" = ( +"bkl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36117,7 +35323,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmd" = ( +"bkm" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36127,7 +35333,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bme" = ( +"bkn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36141,7 +35347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmf" = ( +"bko" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36153,7 +35359,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmg" = ( +"bkp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36170,7 +35376,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmh" = ( +"bkq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36183,7 +35389,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmi" = ( +"bkr" = ( /obj/structure/table/wood, /obj/structure/cable/orange{ d1 = 4; @@ -36194,7 +35400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmj" = ( +"bks" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 4; @@ -36208,7 +35414,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmk" = ( +"bkt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -36218,20 +35424,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bml" = ( +"bku" = ( /obj/machinery/deepfryer, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bmm" = ( +"bkv" = ( /obj/structure/table, /obj/item/weapon/storage/box/donkpockets, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bmn" = ( +"bkw" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/machinery/airalarm{ dir = 8; @@ -36242,7 +35448,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bmo" = ( +"bkx" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -36262,7 +35468,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmp" = ( +"bky" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ @@ -36271,7 +35477,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmq" = ( +"bkz" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -36286,7 +35492,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmr" = ( +"bkA" = ( /obj/machinery/light/small{ dir = 4 }, @@ -36294,12 +35500,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bms" = ( +"bkB" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmt" = ( +"bkC" = ( /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1; @@ -36318,7 +35524,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmu" = ( +"bkD" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36329,7 +35535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmv" = ( +"bkE" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -36348,7 +35554,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmw" = ( +"bkF" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -36361,7 +35567,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmx" = ( +"bkG" = ( /obj/machinery/light/small{ dir = 8 }, @@ -36369,18 +35575,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bmy" = ( +"bkH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bmz" = ( +"bkI" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"bmA" = ( +"bkJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; @@ -36390,12 +35596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"bmB" = ( -/turf/open/floor/plasteel/barber{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"bmC" = ( +"bkK" = ( /obj/structure/table, /obj/item/weapon/folder/red{ pixel_x = 8; @@ -36405,7 +35606,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bmD" = ( +"bkL" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -36414,7 +35615,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bmE" = ( +"bkM" = ( /obj/machinery/vending/wallmed{ pixel_x = 24 }, @@ -36422,20 +35623,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bmF" = ( +"bkN" = ( /obj/structure/table, /obj/item/weapon/folder/white, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bmG" = ( +"bkO" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bmH" = ( +"bkP" = ( /obj/structure/table/optable, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/blobstart, @@ -36443,13 +35644,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bmI" = ( +"bkQ" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bmJ" = ( +"bkR" = ( /obj/structure/chair{ dir = 8 }, @@ -36462,23 +35663,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bmK" = ( +"bkS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bmL" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bmM" = ( +"bkT" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -36494,7 +35685,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmN" = ( +"bkU" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -36505,12 +35696,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmO" = ( +"bkV" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bmP" = ( +"bkW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -36520,7 +35711,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmQ" = ( +"bkX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -36534,7 +35725,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmR" = ( +"bkY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36546,7 +35737,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmS" = ( +"bkZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36554,7 +35745,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmT" = ( +"bla" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36563,7 +35754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmU" = ( +"blb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36572,13 +35763,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmV" = ( +"blc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmW" = ( +"bld" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -36586,20 +35777,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmX" = ( +"ble" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bmY" = ( +"blf" = ( /obj/structure/closet/secure_closet/freezer/kitchen, /obj/structure/window/reinforced, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bmZ" = ( +"blg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -36620,13 +35811,17 @@ name = "Mix Input"; on = 1 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bna" = ( +"blh" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -36642,7 +35837,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnb" = ( +"bli" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36656,7 +35851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnc" = ( +"blj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36673,26 +35868,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnd" = ( +"blk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bne" = ( +"bll" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36710,7 +35905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnf" = ( +"blm" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -36723,7 +35918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bng" = ( +"bln" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -36734,7 +35929,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnh" = ( +"blo" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -36744,7 +35939,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bni" = ( +"blp" = ( /obj/machinery/light, /obj/structure/cable{ d1 = 4; @@ -36756,7 +35951,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bnj" = ( +"blq" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -36766,7 +35961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bnk" = ( +"blr" = ( /obj/machinery/computer/station_alert, /obj/machinery/requests_console{ announcementConsole = 1; @@ -36780,13 +35975,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bnl" = ( +"bls" = ( /obj/machinery/light, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bnm" = ( +"blt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4; @@ -36799,7 +35994,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnn" = ( +"blu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -36818,7 +36013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bno" = ( +"blv" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36838,17 +36033,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnp" = ( +"blw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0 }, -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -36856,11 +36047,15 @@ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnq" = ( +"blx" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36880,7 +36075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnr" = ( +"bly" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36897,7 +36092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bns" = ( +"blz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36915,7 +36110,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnt" = ( +"blA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36929,7 +36124,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnu" = ( +"blB" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -36953,7 +36148,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnv" = ( +"blC" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -36975,7 +36170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnw" = ( +"blD" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36989,7 +36184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnx" = ( +"blE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37009,7 +36204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bny" = ( +"blF" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37022,7 +36217,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, @@ -37030,7 +36225,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnz" = ( +"blG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -37048,7 +36243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnA" = ( +"blH" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -37071,7 +36266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnB" = ( +"blI" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -37088,7 +36283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnC" = ( +"blJ" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -37103,7 +36298,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"bnD" = ( +"blK" = ( /obj/machinery/button/door{ id = "medp1"; name = "Privacy Shutters"; @@ -37113,13 +36308,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bnE" = ( +"blL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bnF" = ( +"blM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -37129,7 +36324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bnG" = ( +"blN" = ( /obj/machinery/button/door{ id = "medp2"; name = "Privacy Shutters"; @@ -37139,27 +36334,27 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bnH" = ( +"blO" = ( /obj/machinery/computer/operating, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bnI" = ( +"blP" = ( /obj/structure/closet/crate/freezer/surplus_limbs, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bnJ" = ( +"blQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bnK" = ( +"blR" = ( /obj/structure/chair{ dir = 8 }, @@ -37172,7 +36367,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bnL" = ( +"blS" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -37181,7 +36376,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bnM" = ( +"blT" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -37189,7 +36384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bnN" = ( +"blU" = ( /obj/machinery/door/airlock/glass_virology{ name = "Isolation A"; req_access_txt = "39" @@ -37199,7 +36394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bnO" = ( +"blV" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -37208,30 +36403,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bnP" = ( -/obj/machinery/door/airlock/glass_virology{ - name = "Isolation B"; - req_access_txt = "39" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bnQ" = ( +"blW" = ( /obj/structure/bed, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bnR" = ( +"blX" = ( /obj/structure/table, /obj/item/weapon/storage/box/donkpockets, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bnS" = ( +"blY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -37241,7 +36426,7 @@ /area/mine/unexplored{ name = "Civilian Asteroid" }) -"bnT" = ( +"blZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -37254,7 +36439,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bnU" = ( +"bma" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -37263,7 +36448,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnV" = ( +"bmb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37271,7 +36456,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnW" = ( +"bmc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37280,7 +36465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnX" = ( +"bmd" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -37290,7 +36475,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnY" = ( +"bme" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -37302,7 +36487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bnZ" = ( +"bmf" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -37311,7 +36496,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"boa" = ( +"bmg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -37320,7 +36505,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bob" = ( +"bmh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -37328,19 +36513,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"boc" = ( +"bmi" = ( /obj/machinery/light, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bod" = ( +"bmj" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"boe" = ( +"bmk" = ( /obj/machinery/vending/cola, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -37357,7 +36542,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bof" = ( +"bml" = ( /obj/machinery/food_cart, /obj/machinery/light_switch{ pixel_x = -25 @@ -37371,7 +36556,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bog" = ( +"bmm" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -37380,7 +36565,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"boh" = ( +"bmn" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -37394,7 +36579,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"boi" = ( +"bmo" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37402,7 +36587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"boj" = ( +"bmp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37423,7 +36608,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bok" = ( +"bmq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37442,7 +36627,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bol" = ( +"bmr" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37460,7 +36645,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bom" = ( +"bms" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37481,7 +36666,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bon" = ( +"bmt" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37493,7 +36678,7 @@ }, /turf/open/space, /area/space) -"boo" = ( +"bmu" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37506,7 +36691,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"bop" = ( +"bmv" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37523,7 +36708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boq" = ( +"bmw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37539,7 +36724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bor" = ( +"bmx" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -37556,7 +36741,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bos" = ( +"bmy" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -37577,7 +36762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bot" = ( +"bmz" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -37590,7 +36775,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bou" = ( +"bmA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 2"; @@ -37604,7 +36789,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bov" = ( +"bmB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -37615,7 +36800,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bow" = ( +"bmC" = ( /obj/structure/reflector/single{ anchored = 1; dir = 4; @@ -37626,7 +36811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"box" = ( +"bmD" = ( /obj/structure/reflector/box{ anchored = 1 }, @@ -37634,7 +36819,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"boy" = ( +"bmE" = ( /obj/structure/reflector/single{ anchored = 1; dir = 1; @@ -37645,7 +36830,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"boz" = ( +"bmF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -37655,7 +36840,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boA" = ( +"bmG" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -37668,7 +36853,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boB" = ( +"bmH" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -37677,7 +36862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boC" = ( +"bmI" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37685,7 +36870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boD" = ( +"bmJ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37701,7 +36886,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boE" = ( +"bmK" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37721,7 +36906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boF" = ( +"bmL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37740,7 +36925,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boG" = ( +"bmM" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -37760,7 +36945,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boH" = ( +"bmN" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37776,7 +36961,7 @@ }, /turf/open/space, /area/space) -"boI" = ( +"bmO" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37792,7 +36977,7 @@ }, /turf/open/space, /area/space) -"boJ" = ( +"bmP" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ dir = 4 @@ -37807,7 +36992,7 @@ }, /turf/open/space, /area/space) -"boK" = ( +"bmQ" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37827,7 +37012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boL" = ( +"bmR" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37845,7 +37030,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boM" = ( +"bmS" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -37865,7 +37050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boN" = ( +"bmT" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -37882,7 +37067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boO" = ( +"bmU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -37891,7 +37076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boP" = ( +"bmV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -37901,16 +37086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/sign/map/left/ceres{ - pixel_x = -32 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"boR" = ( +"bmW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -37922,21 +37098,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boS" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"boT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 4; - on = 1 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/morgue) -"boU" = ( +"bmX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -37944,31 +37106,37 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"boV" = ( +"bmY" = ( /obj/machinery/light, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"boW" = ( +"bmZ" = ( /obj/machinery/camera{ c_tag = "Chief Medical Officer's Office"; dir = 1; icon_state = "camera"; network = list("SS13") }, +/obj/machinery/button/door{ + id = "cmooffice"; + name = "Office Emergency Lockdown"; + pixel_x = 0; + pixel_y = -24 + }, /mob/living/simple_animal/pet/cat/Runtime, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"boX" = ( +"bna" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"boY" = ( +"bnb" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -37979,7 +37147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"boZ" = ( +"bnc" = ( /obj/machinery/door/airlock/medical{ name = "Patient Room"; req_access_txt = "5" @@ -37989,7 +37157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bpa" = ( +"bnd" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -38001,7 +37169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bpb" = ( +"bne" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -38012,7 +37180,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bpc" = ( +"bnf" = ( /obj/machinery/door/airlock/medical{ name = "Patient Room 2"; req_access_txt = "5" @@ -38022,7 +37190,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bpd" = ( +"bng" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -38034,13 +37202,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bpe" = ( +"bnh" = ( /obj/structure/closet/secure_closet/medical2, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bpf" = ( +"bni" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -38057,13 +37225,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bpg" = ( +"bnj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bph" = ( +"bnk" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -38072,7 +37240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bpi" = ( +"bnl" = ( /obj/structure/closet/crate/freezer, /obj/item/weapon/reagent_containers/blood/empty, /obj/item/weapon/reagent_containers/blood/empty, @@ -38098,7 +37266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bpj" = ( +"bnm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -38108,31 +37276,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bpk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 4; - on = 1 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bpl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bpm" = ( +"bnn" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpn" = ( +"bno" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -38140,7 +37290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpo" = ( +"bnp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38153,7 +37303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpp" = ( +"bnq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38161,7 +37311,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpq" = ( +"bnr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38175,7 +37325,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpr" = ( +"bns" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38183,7 +37333,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bps" = ( +"bnt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -38193,14 +37343,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpt" = ( +"bnu" = ( /obj/structure/table, /obj/machinery/microwave, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpu" = ( +"bnv" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -38211,7 +37361,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bpv" = ( +"bnw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38219,7 +37369,7 @@ /area/mine/unexplored{ name = "Medical Asteroid" }) -"bpw" = ( +"bnx" = ( /obj/structure/disposaloutlet{ dir = 4 }, @@ -38230,7 +37380,7 @@ /area/mine/unexplored{ name = "Medical Asteroid" }) -"bpx" = ( +"bny" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -38239,7 +37389,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpy" = ( +"bnz" = ( /obj/structure/table, /obj/machinery/camera{ c_tag = "Primary Tool Storage North"; @@ -38250,7 +37400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpz" = ( +"bnA" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -38260,7 +37410,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpA" = ( +"bnB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -38278,7 +37428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpB" = ( +"bnC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38291,7 +37441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpC" = ( +"bnD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38308,7 +37458,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpD" = ( +"bnE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38328,7 +37478,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpE" = ( +"bnF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -38345,7 +37495,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bpF" = ( +"bnG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -38366,7 +37516,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bpG" = ( +"bnH" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -38383,7 +37533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bpH" = ( +"bnI" = ( /obj/machinery/door/airlock/glass{ name = "Bar" }, @@ -38394,7 +37544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bpI" = ( +"bnJ" = ( /obj/machinery/door/airlock/glass{ name = "Bar" }, @@ -38403,13 +37553,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bpJ" = ( +"bnK" = ( /obj/structure/sign/barsign, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bpK" = ( +"bnL" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -38418,7 +37568,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bpL" = ( +"bnM" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -38426,7 +37576,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bpM" = ( +"bnN" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38438,9 +37588,14 @@ dir = 5 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"bpN" = ( +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"bnO" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38453,9 +37608,14 @@ dir = 4 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"bpO" = ( +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"bnP" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38467,9 +37627,14 @@ dir = 9 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"bpP" = ( +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"bnQ" = ( /obj/machinery/light{ dir = 4 }, @@ -38481,7 +37646,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bpQ" = ( +"bnR" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction{ tag = "icon-intact (NORTH)"; icon_state = "intact"; @@ -38489,7 +37654,7 @@ }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bpR" = ( +"bnS" = ( /obj/machinery/door/airlock/glass_engineering{ name = "Laser Room"; req_access_txt = "10" @@ -38504,7 +37669,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bpS" = ( +"bnT" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -38512,7 +37677,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bpT" = ( +"bnU" = ( /obj/machinery/door/airlock/glass_engineering{ name = "Laser Room"; req_access_txt = "10" @@ -38521,7 +37686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bpU" = ( +"bnV" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -38535,7 +37700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bpV" = ( +"bnW" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38551,9 +37716,14 @@ icon_state = "pipe-c" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"bpW" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"bnX" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38569,9 +37739,14 @@ dir = 4 }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"bpX" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"bnY" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38587,9 +37762,14 @@ icon_state = "pipe-c" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"bpY" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"bnZ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -38599,7 +37779,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bpZ" = ( +"boa" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -38609,7 +37789,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bqa" = ( +"bob" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -38625,21 +37805,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bqb" = ( +"boc" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bqc" = ( +"bod" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cmooffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"bqd" = ( +"boe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/glass_medical{ id_tag = null; @@ -38656,12 +37839,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"bqe" = ( +"bof" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bqf" = ( +"bog" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -38674,7 +37857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bqg" = ( +"boh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (NORTH)"; @@ -38683,7 +37866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bqh" = ( +"boi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (NORTH)"; @@ -38692,7 +37875,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bqi" = ( +"boj" = ( /obj/machinery/power/apc{ dir = 1; name = "Morgue APC"; @@ -38710,7 +37893,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bqj" = ( +"bok" = ( /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; @@ -38718,13 +37901,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bqk" = ( +"bol" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bql" = ( +"bom" = ( /obj/machinery/door/airlock/medical{ name = "Operating Theatre"; req_access_txt = "45" @@ -38734,7 +37917,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bqm" = ( +"bon" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = ""; name = "Surgery Observation"; @@ -38745,7 +37928,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bqn" = ( +"boo" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -38756,15 +37939,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bqp" = ( +"bop" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38772,7 +37947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqq" = ( +"boq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38781,7 +37956,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqr" = ( +"bor" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -38790,13 +37965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqs" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/virology) -"bqt" = ( +"bos" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38808,7 +37977,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqu" = ( +"bot" = ( /obj/machinery/door/airlock/virology{ name = "Break Room"; req_access_txt = "39" @@ -38823,7 +37992,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqv" = ( +"bou" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38834,7 +38003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqw" = ( +"bov" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -38847,7 +38016,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqx" = ( +"bow" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38855,7 +38024,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqy" = ( +"box" = ( /obj/structure/table, /obj/machinery/reagentgrinder, /obj/machinery/light{ @@ -38869,7 +38038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqz" = ( +"boy" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38877,7 +38046,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqA" = ( +"boz" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -38892,24 +38061,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bqB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bqC" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bqD" = ( +"boA" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -38920,14 +38072,14 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bqE" = ( +"boB" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bqF" = ( +"boC" = ( /obj/structure/table, /obj/machinery/light{ dir = 8 @@ -38937,7 +38089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bqG" = ( +"boD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -38947,24 +38099,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bqH" = ( +"boE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bqI" = ( +"boF" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bqJ" = ( +"boG" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bqK" = ( +"boH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -38974,7 +38126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqL" = ( +"boI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -39000,7 +38152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqM" = ( +"boJ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -39024,7 +38176,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqN" = ( +"boK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39037,7 +38189,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqO" = ( +"boL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39055,7 +38207,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqP" = ( +"boM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -39072,7 +38224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqQ" = ( +"boN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39080,7 +38232,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqR" = ( +"boO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39094,7 +38246,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqS" = ( +"boP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39105,7 +38257,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqT" = ( +"boQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -39116,7 +38268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqU" = ( +"boR" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -39124,7 +38276,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqV" = ( +"boS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -39139,7 +38291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqW" = ( +"boT" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -39154,7 +38306,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqX" = ( +"boU" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -39166,7 +38318,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqY" = ( +"boV" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -39181,7 +38333,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqZ" = ( +"boW" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -39193,7 +38345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bra" = ( +"boX" = ( /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 1" }, @@ -39204,7 +38356,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brb" = ( +"boY" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -39219,7 +38371,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brc" = ( +"boZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -39230,7 +38382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brd" = ( +"bpa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -39241,7 +38393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bre" = ( +"bpb" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -39270,7 +38422,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brf" = ( +"bpc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39285,7 +38437,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brg" = ( +"bpd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39303,7 +38455,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brh" = ( +"bpe" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39315,7 +38467,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bri" = ( +"bpf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39327,7 +38479,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brj" = ( +"bpg" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -39339,7 +38491,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brk" = ( +"bph" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -39348,7 +38500,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"brl" = ( +"bpi" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -39360,13 +38512,13 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brm" = ( +"bpj" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"brn" = ( +"bpk" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -39381,7 +38533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bro" = ( +"bpl" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -39410,7 +38562,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brp" = ( +"bpm" = ( /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 6" }, @@ -39422,7 +38574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brq" = ( +"bpn" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39437,7 +38589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brr" = ( +"bpo" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -39448,7 +38600,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brs" = ( +"bpp" = ( /obj/machinery/light{ dir = 1 }, @@ -39459,7 +38611,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"brt" = ( +"bpq" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39474,7 +38626,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bru" = ( +"bpr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/sign/directions/security{ dir = 1; @@ -39487,7 +38639,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"brv" = ( +"bps" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -39505,7 +38657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"brw" = ( +"bpt" = ( /obj/machinery/disposal/deliveryChute{ desc = "A chute for big and small criminals alike!"; name = "Criminal Delivery Chute" @@ -39522,7 +38674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brx" = ( +"bpu" = ( /obj/structure/table, /obj/machinery/airalarm{ frequency = 1439; @@ -39543,7 +38695,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bry" = ( +"bpv" = ( /obj/machinery/recharger, /obj/structure/table, /obj/machinery/light{ @@ -39558,7 +38710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brz" = ( +"bpw" = ( /obj/structure/filingcabinet, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -39577,7 +38729,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brA" = ( +"bpx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39589,7 +38741,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brB" = ( +"bpy" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -39604,7 +38756,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brC" = ( +"bpz" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (NORTH)"; @@ -39613,7 +38765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brD" = ( +"bpA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -39631,7 +38783,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brE" = ( +"bpB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39639,7 +38791,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brF" = ( +"bpC" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -39654,7 +38806,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brG" = ( +"bpD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39668,7 +38820,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brH" = ( +"bpE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39679,7 +38831,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brI" = ( +"bpF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39697,7 +38849,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brJ" = ( +"bpG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39710,7 +38862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brK" = ( +"bpH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39726,7 +38878,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brL" = ( +"bpI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39744,7 +38896,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brM" = ( +"bpJ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -39755,7 +38907,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brN" = ( +"bpK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -39764,7 +38916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brO" = ( +"bpL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39775,7 +38927,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brP" = ( +"bpM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -39783,24 +38935,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brQ" = ( +"bpN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brR" = ( +"bpO" = ( /obj/machinery/vending/medical, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brS" = ( +"bpP" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brT" = ( +"bpQ" = ( /obj/structure/table, /obj/item/weapon/book/manual/wiki/infections, /obj/machinery/camera{ @@ -39813,7 +38965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"brU" = ( +"bpR" = ( /obj/structure/table, /obj/item/clothing/suit/straight_jacket, /obj/item/clothing/mask/muzzle, @@ -39821,7 +38973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"brV" = ( +"bpS" = ( /obj/structure/table/glass, /obj/item/clothing/gloves/color/latex, /obj/item/device/healthanalyzer, @@ -39845,15 +38997,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"brW" = ( +"bpT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"brX" = ( -/obj/machinery/smartfridge/chemistry/virology, +"bpU" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, /turf/open/floor/plasteel/whitegreen/side{ tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; @@ -39861,19 +39013,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"brY" = ( +"bpV" = ( /obj/structure/closet/wardrobe/virology_white, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"brZ" = ( +"bpW" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bsa" = ( +"bpX" = ( /obj/structure/shuttle/engine/propulsion/burst{ tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; @@ -39881,20 +39033,20 @@ }, /turf/open/floor/plating, /area/shuttle/pod_3) -"bsb" = ( +"bpY" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/pod_3) -"bsc" = ( +"bpZ" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bsd" = ( +"bqa" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bse" = ( +"bqb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -39910,7 +39062,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bsf" = ( +"bqc" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /obj/structure/sign/poster/random{ @@ -39922,14 +39074,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bsg" = ( +"bqd" = ( /obj/structure/table, /obj/item/clothing/gloves/color/yellow, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bsh" = ( +"bqe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -39943,7 +39095,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsi" = ( +"bqf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -39953,7 +39105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsj" = ( +"bqg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -39968,7 +39120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsk" = ( +"bqh" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -39984,7 +39136,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsl" = ( +"bqi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -39992,7 +39144,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsm" = ( +"bqj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/junction{ tag = "icon-pipe-j2 (WEST)"; @@ -40003,7 +39155,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsn" = ( +"bqk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 8; @@ -40018,7 +39170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bso" = ( +"bql" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -40027,7 +39179,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsp" = ( +"bqm" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -40039,7 +39191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsq" = ( +"bqn" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -40051,13 +39203,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bsr" = ( +"bqo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bss" = ( +"bqp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -40065,7 +39217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bst" = ( +"bqq" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -40080,7 +39232,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bsu" = ( +"bqr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; @@ -40094,7 +39246,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bsv" = ( +"bqs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -40117,7 +39269,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsw" = ( +"bqt" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -40127,7 +39279,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsx" = ( +"bqu" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40141,7 +39293,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsy" = ( +"bqv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -40152,7 +39304,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsz" = ( +"bqw" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40166,7 +39318,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsA" = ( +"bqx" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -40185,7 +39337,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsB" = ( +"bqy" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -40198,7 +39350,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsC" = ( +"bqz" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40212,7 +39364,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsD" = ( +"bqA" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40226,7 +39378,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsE" = ( +"bqB" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -40238,7 +39390,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsF" = ( +"bqC" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -40250,13 +39402,13 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsG" = ( +"bqD" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bsH" = ( +"bqE" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 8; frequency = 1441; @@ -40265,7 +39417,7 @@ }, /turf/open/floor/plating/airless, /area/engine/supermatter) -"bsI" = ( +"bqF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -40281,7 +39433,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bsJ" = ( +"bqG" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -40296,7 +39448,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bsK" = ( +"bqH" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -40311,7 +39463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bsL" = ( +"bqI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -40320,7 +39472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bsM" = ( +"bqJ" = ( /obj/machinery/holopad, /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; @@ -40330,7 +39482,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bsN" = ( +"bqK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -40342,7 +39494,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bsO" = ( +"bqL" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -40364,7 +39516,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsP" = ( +"bqM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40377,7 +39529,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsQ" = ( +"bqN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40391,7 +39543,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsR" = ( +"bqO" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40411,7 +39563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsS" = ( +"bqP" = ( /obj/machinery/door/airlock/glass_security{ name = "Security Office"; req_access_txt = "63" @@ -40438,7 +39590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsT" = ( +"bqQ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40451,7 +39603,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsU" = ( +"bqR" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40468,7 +39620,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsV" = ( +"bqS" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -40482,13 +39634,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsW" = ( +"bqT" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsX" = ( +"bqU" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -40496,7 +39648,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsY" = ( +"bqV" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -40505,7 +39657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsZ" = ( +"bqW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40520,13 +39672,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bta" = ( +"bqX" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btb" = ( +"bqY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40534,7 +39686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btc" = ( +"bqZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40551,7 +39703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btd" = ( +"bra" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -40565,7 +39717,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bte" = ( +"brb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40574,7 +39726,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btf" = ( +"brc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -40582,7 +39734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btg" = ( +"brd" = ( /obj/structure/table, /obj/item/stack/packageWrap, /obj/machinery/light{ @@ -40593,7 +39745,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bth" = ( +"bre" = ( /obj/structure/closet/l3closet/virology, /turf/open/floor/plasteel/whitegreen/side{ tag = "icon-whitegreen (NORTHWEST)"; @@ -40602,7 +39754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bti" = ( +"brf" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -40613,7 +39765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btj" = ( +"brg" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -40624,7 +39776,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btk" = ( +"brh" = ( /obj/structure/closet/l3closet/virology, /obj/machinery/light{ dir = 1 @@ -40636,7 +39788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btl" = ( +"bri" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -40645,7 +39797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btm" = ( +"brj" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/beakers{ pixel_x = 2; @@ -40668,14 +39820,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btn" = ( +"brk" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/virologist, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bto" = ( +"brl" = ( /obj/machinery/computer/pandemic, /turf/open/floor/plasteel/whitegreen/side{ tag = "icon-whitegreen (EAST)"; @@ -40684,7 +39836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btp" = ( +"brm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4; name = "Medical Escape Pod" @@ -40695,12 +39847,12 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"btq" = ( +"brn" = ( /turf/open/floor/plating, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"btr" = ( +"bro" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4; name = "Medical Escape Pod" @@ -40709,7 +39861,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bts" = ( +"brp" = ( /obj/machinery/door/airlock/shuttle{ name = "Escape Pod Airlock" }, @@ -40721,7 +39873,7 @@ }, /turf/open/floor/plating, /area/shuttle/pod_3) -"btt" = ( +"brq" = ( /obj/structure/chair{ dir = 4 }, @@ -40730,7 +39882,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_3) -"btu" = ( +"brr" = ( /obj/structure/chair{ dir = 4 }, @@ -40738,7 +39890,7 @@ /obj/machinery/computer/shuttle/pod{ pixel_x = 0; pixel_y = 32; - possible_destinations = "pod_asteroid3"; + possible_destinations = "pod_lavaland3"; shuttleId = "pod3" }, /obj/item/device/radio/intercom{ @@ -40752,38 +39904,38 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_3) -"btv" = ( +"brs" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/pod_3) -"btw" = ( +"brt" = ( /obj/docking_port/stationary/random{ dir = 4; - id = "pod_asteroid3"; - name = "asteroid" + id = "pod_lavaland3"; + name = "lavaland" }, /turf/open/space, /area/space) -"btx" = ( +"bru" = ( /obj/item/stack/rods, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bty" = ( +"brv" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"btz" = ( +"brw" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"btA" = ( +"brx" = ( /obj/machinery/vending/tool, /obj/structure/sign/map/left/ceres{ pixel_x = -32 @@ -40792,7 +39944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"btB" = ( +"bry" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/weapon/screwdriver, @@ -40800,7 +39952,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"btC" = ( +"brz" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -40808,7 +39960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"btD" = ( +"brA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -40818,13 +39970,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btE" = ( +"brB" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btF" = ( +"brC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40857,7 +40009,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btG" = ( +"brD" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40876,7 +40028,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btH" = ( +"brE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40884,14 +40036,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btI" = ( +"brF" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btJ" = ( +"brG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40901,14 +40053,6 @@ d2 = 2; icon_state = "1-2" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"btK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/sign/botany{ pixel_x = 32; pixel_y = -32 @@ -40917,7 +40061,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btL" = ( +"brH" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40929,7 +40073,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btM" = ( +"brI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40940,7 +40084,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btN" = ( +"brJ" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -40955,7 +40099,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btO" = ( +"brK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40965,7 +40109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btP" = ( +"brL" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40982,7 +40126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btQ" = ( +"brM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40998,7 +40142,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btR" = ( +"brN" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -41009,7 +40153,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btS" = ( +"brO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -41019,7 +40163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btT" = ( +"brP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ dir = 1; @@ -41031,7 +40175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btU" = ( +"brQ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -41039,61 +40183,69 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btV" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Service-Engineering Bridge 1"; - dir = 1 - }, -/turf/open/floor/engine, -/area/space) -"btW" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Service-Engineering Bridge 2"; - dir = 1 - }, -/turf/open/floor/engine, -/area/space) -"btX" = ( +"brR" = ( /obj/machinery/door/airlock/glass, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"btY" = ( +"brS" = ( /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"btZ" = ( +"brT" = ( /obj/machinery/light, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bua" = ( +"brU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bub" = ( +"brV" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -41104,29 +40256,47 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buc" = ( +"brW" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bud" = ( +"brX" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bue" = ( +"brY" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41136,11 +40306,16 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buf" = ( +"brZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -41151,7 +40326,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bug" = ( +"bsa" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -41166,7 +40341,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"buh" = ( +"bsb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -41180,14 +40355,14 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bui" = ( +"bsc" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"buj" = ( +"bsd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -41197,7 +40372,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"buk" = ( +"bse" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -41206,7 +40381,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bul" = ( +"bsf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -41218,7 +40393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bum" = ( +"bsg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41239,7 +40414,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bun" = ( +"bsh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -41256,7 +40431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buo" = ( +"bsi" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -41273,7 +40448,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bup" = ( +"bsj" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -41296,7 +40471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buq" = ( +"bsk" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -41309,41 +40484,57 @@ dir = 2; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bur" = ( +"bsl" = ( /obj/machinery/light, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bus" = ( +"bsm" = ( /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"but" = ( +"bsn" = ( /obj/machinery/door/airlock/glass, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buu" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Medbay-Engineering Bridge"; - dir = 1 - }, -/turf/open/floor/engine, -/area/space) -"buv" = ( +"bso" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -41351,14 +40542,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"buw" = ( +"bsp" = ( /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bux" = ( +"bsq" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -41369,7 +40560,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"buy" = ( +"bsr" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -41383,7 +40574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"buz" = ( +"bss" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/sign/directions/engineering{ dir = 8; @@ -41407,7 +40598,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"buA" = ( +"bst" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -41423,7 +40614,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"buB" = ( +"bsu" = ( /obj/machinery/power/apc{ dir = 8; name = "Medbay Security Checkpoint APC"; @@ -41437,7 +40628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buC" = ( +"bsv" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -41446,12 +40637,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buD" = ( +"bsw" = ( /turf/open/floor/plasteel/red/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buE" = ( +"bsx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -41460,7 +40651,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buF" = ( +"bsy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -41472,7 +40663,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buG" = ( +"bsz" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -41481,41 +40672,42 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buH" = ( +"bsA" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buI" = ( +"bsB" = ( /obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, +/obj/structure/table, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buJ" = ( +"bsC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buK" = ( +"bsD" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buL" = ( +"bsE" = ( /obj/machinery/door/firedoor, /turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buM" = ( +"bsF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -41528,7 +40720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buN" = ( +"bsG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -41536,7 +40728,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buO" = ( +"bsH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -41544,7 +40736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buP" = ( +"bsI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41555,7 +40747,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buQ" = ( +"bsJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41563,7 +40755,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buR" = ( +"bsK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41580,7 +40772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buS" = ( +"bsL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41591,7 +40783,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buT" = ( +"bsM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41602,7 +40794,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buU" = ( +"bsN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41610,7 +40802,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buV" = ( +"bsO" = ( /obj/structure/table/glass, /obj/item/weapon/book/manual/wiki/infections{ pixel_y = 7 @@ -41629,13 +40821,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buW" = ( +"bsP" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buX" = ( +"bsQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -41645,7 +40837,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buY" = ( +"bsR" = ( /obj/structure/table, /obj/item/weapon/hand_labeler, /obj/item/device/radio/headset/headset_med, @@ -41663,27 +40855,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buZ" = ( +"bsS" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bva" = ( -/obj/structure/sign/pods{ - pixel_x = 32 - }, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bvb" = ( +"bsT" = ( /obj/machinery/light/small, /turf/open/floor/plating, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bvc" = ( +"bsU" = ( /obj/machinery/gateway{ dir = 9 }, @@ -41691,7 +40875,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bvd" = ( +"bsV" = ( /obj/machinery/gateway{ dir = 1 }, @@ -41699,7 +40883,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bve" = ( +"bsW" = ( /obj/machinery/gateway{ dir = 5 }, @@ -41707,19 +40891,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bvf" = ( +"bsX" = ( /obj/item/weapon/crowbar, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bvg" = ( +"bsY" = ( /obj/item/clothing/head/cone, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bvh" = ( +"bsZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -41733,7 +40917,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bvi" = ( +"bta" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = 1; @@ -41749,21 +40933,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bvj" = ( +"btb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bvk" = ( +"btc" = ( /obj/structure/table, /obj/item/weapon/storage/belt/utility, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bvl" = ( +"btd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -41775,12 +40959,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bvm" = ( +"bte" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bvn" = ( +"btf" = ( /turf/open/floor/plasteel/green/corner{ tag = "icon-greencorner (WEST)"; icon_state = "greencorner"; @@ -41788,47 +40972,54 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bvo" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +"btg" = ( /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bvp" = ( +"bth" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bvq" = ( /turf/open/floor/plasteel/green/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bvr" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, +"bti" = ( +/obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/window/eastleft{ + name = "Hydroponics Desk"; + req_access_txt = "35" }, +/obj/machinery/door/firedoor, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bvs" = ( +"btj" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"btk" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bvt" = ( +"btl" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -41840,29 +41031,18 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bvu" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/structure/grille, -/turf/open/floor/plating/asteroid/airless, -/area/space) -"bvv" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/lattice/catwalk, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"btm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/grille, -/turf/open/space, -/area/space) -"bvw" = ( +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"btn" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -41871,19 +41051,22 @@ dir = 10 }, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"bvx" = ( -/obj/machinery/door/airlock/maintenance{ +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"bto" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvy" = ( +"btp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41895,7 +41078,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvz" = ( +"btq" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, @@ -41904,7 +41087,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvA" = ( +"btr" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -41912,7 +41095,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvB" = ( +"bts" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -41932,7 +41115,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvC" = ( +"btt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -41950,7 +41133,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvD" = ( +"btu" = ( /obj/effect/turf_decal/stripes/end{ tag = "icon-warn_end (EAST)"; icon_state = "warn_end"; @@ -41969,7 +41152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvE" = ( +"btv" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -41982,7 +41165,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvF" = ( +"btw" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -41994,7 +41177,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvG" = ( +"btx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -42005,13 +41188,13 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvH" = ( +"bty" = ( /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, /area/engine/supermatter) -"bvI" = ( +"btz" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -42021,7 +41204,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvJ" = ( +"btA" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -42032,7 +41215,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvK" = ( +"btB" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -42045,7 +41228,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvL" = ( +"btC" = ( /obj/effect/turf_decal/stripes/end{ tag = "icon-warn_end (WEST)"; icon_state = "warn_end"; @@ -42064,7 +41247,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvM" = ( +"btD" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -42081,7 +41264,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvN" = ( +"btE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -42095,7 +41278,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvO" = ( +"btF" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, @@ -42103,7 +41286,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvP" = ( +"btG" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -42118,7 +41301,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvQ" = ( +"btH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -42130,7 +41313,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvR" = ( +"btI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -42146,7 +41329,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvS" = ( +"btJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -42157,7 +41340,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvT" = ( +"btK" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "12" @@ -42175,7 +41358,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bvU" = ( +"btL" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "12" @@ -42186,7 +41369,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bvV" = ( +"btM" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42199,9 +41382,12 @@ icon_state = "pipe-c" }, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"bvW" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"btN" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42213,9 +41399,12 @@ dir = 4 }, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"bvX" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"btO" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42228,9 +41417,12 @@ icon_state = "pipe-c" }, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"bvY" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"btP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -42245,7 +41437,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bvZ" = ( +"btQ" = ( /obj/machinery/computer/secure_data, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -42259,38 +41451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bwa" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"bwb" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/orange, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"bwc" = ( +"btR" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -42299,7 +41460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwd" = ( +"btS" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -42307,7 +41468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwe" = ( +"btT" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -42316,7 +41477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwf" = ( +"btU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -42325,7 +41486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwg" = ( +"btV" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -42334,12 +41495,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwh" = ( +"btW" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwi" = ( +"btX" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -42350,7 +41511,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwj" = ( +"btY" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -42358,7 +41519,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwk" = ( +"btZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -42368,13 +41529,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwl" = ( +"bua" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwm" = ( +"bub" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -42383,7 +41544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwn" = ( +"buc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42394,7 +41555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwo" = ( +"bud" = ( /obj/machinery/doorButtons/access_button{ idDoor = "virology_airlock_exterior"; idSelf = "virology_airlock_control"; @@ -42413,7 +41574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwp" = ( +"bue" = ( /obj/machinery/door/airlock/virology{ autoclose = 0; frequency = 1449; @@ -42430,7 +41591,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwq" = ( +"buf" = ( /obj/machinery/doorButtons/access_button{ idDoor = "virology_airlock_exterior"; idSelf = "virology_airlock_control"; @@ -42449,7 +41610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwr" = ( +"bug" = ( /obj/machinery/doorButtons/access_button{ idDoor = "virology_airlock_interior"; idSelf = "virology_airlock_control"; @@ -42468,7 +41629,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bws" = ( +"buh" = ( /obj/machinery/door/airlock/virology{ autoclose = 0; frequency = 1449; @@ -42485,7 +41646,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwt" = ( +"bui" = ( /obj/machinery/doorButtons/airlock_controller{ idExterior = "virology_airlock_exterior"; idInterior = "virology_airlock_interior"; @@ -42505,7 +41666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwu" = ( +"buj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -42513,7 +41674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwv" = ( +"buk" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -2; @@ -42530,18 +41691,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bww" = ( +"bul" = ( /turf/closed/wall, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bwx" = ( +"bum" = ( /obj/item/weapon/computer_hardware/recharger/APC, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bwy" = ( +"bun" = ( /obj/machinery/gateway{ dir = 8 }, @@ -42549,13 +41710,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bwz" = ( +"buo" = ( /obj/machinery/gateway/centerstation, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bwA" = ( +"bup" = ( /obj/machinery/gateway{ dir = 4 }, @@ -42563,7 +41724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bwB" = ( +"buq" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 4 @@ -42572,13 +41733,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bwC" = ( +"bur" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bwD" = ( +"bus" = ( /obj/item/weapon/paper{ info = "
Nanotrasen Exploration and Colonization Program


Due to recent shutdowns of the Exploration and Colonization department shortly after this gateway was delievered on-site during station construction, this room has been condemmed and an engineering team will be on-site within the next few months to recollect the gate. Thank you for your cooperation."; name = "NOTICE - GATEWAY STATUS" @@ -42593,7 +41754,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bwE" = ( +"but" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -42607,7 +41768,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bwF" = ( +"buu" = ( /obj/structure/table, /obj/machinery/power/apc{ dir = 8; @@ -42624,7 +41785,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bwG" = ( +"buv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -42635,7 +41796,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bwH" = ( +"buw" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -42644,14 +41805,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bwI" = ( +"bux" = ( /obj/structure/table, /obj/item/device/multitool, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bwJ" = ( +"buy" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -42667,80 +41828,62 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bwK" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/eastleft{ - name = "Hydroponics Desk"; - req_access_txt = "35" - }, -/turf/open/floor/plating{ +"buz" = ( +/turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bwL" = ( +"buA" = ( +/obj/machinery/camera{ + c_tag = "Hydroponics North 1" + }, /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/turf/open/floor/plasteel/darkgreen/side{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 4 +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bwM" = ( +"buB" = ( /obj/machinery/hydroponics/constructable, /turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bwN" = ( -/obj/machinery/airalarm{ - frequency = 1439; - locked = 0; - pixel_y = 23 - }, -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/turf/open/floor/plasteel/darkgreen{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bwO" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/weapon/shovel/spade, -/obj/item/weapon/wrench, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/wirecutters, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bwP" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bwQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, +"buC" = ( +/obj/structure/beebox, +/obj/item/queen_bee/bought, /obj/structure/cable/orange{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/turf/open/floor/plasteel/hydrofloor{ +/turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bwR" = ( +"buD" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"buE" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"buF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42753,15 +41896,15 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bwS" = ( +"buG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/disposalpipe/segment, /obj/machinery/light/small{ dir = 1 }, @@ -42773,24 +41916,25 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bwT" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"buH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bwU" = ( +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"buI" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -42805,8 +41949,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bwV" = ( +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"buJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42823,8 +41969,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bwW" = ( +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"buK" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -42834,23 +41982,17 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bwX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plating/asteroid/airless, -/area/mine/unexplored{ - name = "Civilian Asteroid" +/area/maintenance/port{ + name = "Port Asteroid Maintenance" }) -"bwY" = ( +"buL" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/open/space, /area/space) -"bwZ" = ( +"buM" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -42861,7 +42003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxa" = ( +"buN" = ( /obj/machinery/light/small{ dir = 1 }, @@ -42872,7 +42014,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxb" = ( +"buO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42880,7 +42022,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxc" = ( +"buP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -42891,7 +42033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxd" = ( +"buQ" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -42902,7 +42044,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxe" = ( +"buR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -42919,7 +42061,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxf" = ( +"buS" = ( /turf/open/floor/plasteel/yellow/corner{ tag = "icon-yellowcorner (WEST)"; icon_state = "yellowcorner"; @@ -42927,7 +42069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxg" = ( +"buT" = ( /obj/structure/closet/firecloset, /obj/machinery/light/small{ dir = 8 @@ -42936,13 +42078,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxh" = ( +"buU" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxi" = ( +"buV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -42960,7 +42102,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxj" = ( +"buW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -42980,7 +42122,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxk" = ( +"buX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -42991,14 +42133,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxl" = ( +"buY" = ( /obj/machinery/power/supermatter_shard/crystal, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, /area/engine/supermatter) -"bxm" = ( +"buZ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -43010,7 +42152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxn" = ( +"bva" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -43024,7 +42166,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxo" = ( +"bvb" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -43044,7 +42186,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxp" = ( +"bvc" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 @@ -43053,7 +42195,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxq" = ( +"bvd" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 }, @@ -43064,14 +42206,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxr" = ( +"bve" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/yellow/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxs" = ( +"bvf" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -43089,7 +42231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxt" = ( +"bvg" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -43102,7 +42244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxu" = ( +"bvh" = ( /obj/machinery/light/small{ dir = 1 }, @@ -43112,7 +42254,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxv" = ( +"bvi" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -43134,7 +42276,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxw" = ( +"bvj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43156,7 +42298,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxx" = ( +"bvk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43179,7 +42321,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxy" = ( +"bvl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43192,7 +42334,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxz" = ( +"bvm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -43208,7 +42350,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxA" = ( +"bvn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43225,7 +42367,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxB" = ( +"bvo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -43236,7 +42378,7 @@ }, /turf/open/space, /area/space) -"bxC" = ( +"bvp" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -43247,7 +42389,7 @@ }, /turf/open/space, /area/space) -"bxD" = ( +"bvq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43257,7 +42399,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"bxE" = ( +"bvr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43273,7 +42415,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxF" = ( +"bvs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43287,7 +42429,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxG" = ( +"bvt" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -43301,7 +42443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxH" = ( +"bvu" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix Input"; @@ -43317,7 +42459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxI" = ( +"bvv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -43331,7 +42473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxJ" = ( +"bvw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -43342,7 +42484,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxK" = ( +"bvx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -43353,7 +42495,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxL" = ( +"bvy" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -43361,7 +42503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxM" = ( +"bvz" = ( /obj/structure/chair{ dir = 4 }, @@ -43369,13 +42511,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxN" = ( +"bvA" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxO" = ( +"bvB" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular{ pixel_x = -3; @@ -43385,14 +42527,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxP" = ( +"bvC" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxQ" = ( +"bvD" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -43401,48 +42543,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxR" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/whiteblue/side{ - tag = "icon-whiteblue (EAST)"; - icon_state = "whiteblue"; - dir = 4; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"bxS" = ( +"bvE" = ( /obj/structure/table/reinforced, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxT" = ( +"bvF" = ( /obj/machinery/computer/med_data, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxU" = ( -/obj/machinery/requests_console{ - announcementConsole = 0; - department = "Medbay"; - departmentType = 1; - name = "Medbay RC"; - pixel_x = 30; - pixel_y = 0; - pixel_z = 0 - }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/mob/living/simple_animal/pet/cat/Runtime, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"bxV" = ( +"bvG" = ( /obj/machinery/sleeper{ dir = 4; icon_state = "sleeper-open" @@ -43451,13 +42564,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxW" = ( +"bvH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxX" = ( +"bvI" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 6 }, @@ -43466,7 +42579,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxY" = ( +"bvJ" = ( /obj/machinery/atmospherics/components/unary/cryo_cell{ dir = 8; icon_state = "cell-off" @@ -43475,7 +42588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxZ" = ( +"bvK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/bed/roller, /turf/open/floor/plasteel/whiteblue/side{ @@ -43485,17 +42598,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bya" = ( +"bvL" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"byb" = ( +"bvM" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"byc" = ( +"bvN" = ( /obj/machinery/door/airlock/glass_virology{ name = "Monkey Pen"; req_access_txt = "39" @@ -43505,7 +42618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"byd" = ( +"bvO" = ( /obj/machinery/power/apc{ dir = 8; name = "Virology APC"; @@ -43525,7 +42638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bye" = ( +"bvP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -43538,7 +42651,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"byf" = ( +"bvQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -43555,7 +42668,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"byg" = ( +"bvR" = ( /obj/machinery/gateway{ dir = 10 }, @@ -43563,7 +42676,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byh" = ( +"bvS" = ( /obj/machinery/gateway, /obj/structure/cable/orange{ d2 = 2; @@ -43573,7 +42686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byi" = ( +"bvT" = ( /obj/machinery/gateway{ dir = 6 }, @@ -43581,7 +42694,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byj" = ( +"bvU" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -43595,7 +42708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byk" = ( +"bvV" = ( /obj/structure/table, /obj/machinery/cell_charger, /obj/structure/window/reinforced, @@ -43603,7 +42716,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"byl" = ( +"bvW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -43611,7 +42724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bym" = ( +"bvX" = ( /obj/structure/table, /obj/item/device/assembly/igniter, /obj/item/device/assembly/igniter, @@ -43619,7 +42732,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"byn" = ( +"bvY" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -43635,10 +42748,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"byo" = ( -/obj/item/weapon/twohanded/required/kirbyplants{ - tag = "icon-plant-18"; - icon_state = "plant-18" +"bvZ" = ( +/obj/machinery/camera{ + c_tag = "Hydroponics Front Desk"; + dir = 4 }, /turf/open/floor/plasteel/green/corner{ tag = "icon-greencorner (WEST)"; @@ -43647,93 +42760,57 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"byp" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/eastright{ - name = "Hydroponics Desk"; - req_access_txt = "35" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"byq" = ( +"bwa" = ( /obj/structure/chair/office/dark{ dir = 8 }, /obj/effect/landmark/start/botanist, -/turf/open/floor/plasteel/black{ +/turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"byr" = ( -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bys" = ( -/obj/effect/landmark/lightsout, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"byt" = ( +"bwb" = ( /turf/open/floor/plasteel/darkgreen/side{ - tag = "icon-darkgreen (NORTHEAST)"; + tag = "icon-darkgreen (WEST)"; icon_state = "darkgreen"; - dir = 5; + dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"byu" = ( -/obj/item/device/radio/intercom{ - broadcasting = 0; - name = "Station Intercom (General)"; - pixel_x = -28; - pixel_y = 0 - }, -/turf/open/floor/plasteel/hydrofloor{ +"bwc" = ( +/turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"byv" = ( -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless +"bwd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4 }, /area/hydroponics) -"byw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"byx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/closet/emcloset, +"bwe" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/machinery/door/firedoor, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"byy" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = 32; - pixel_y = 0 - }, -/turf/open/floor/plating{ +"bwf" = ( +/turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"byz" = ( +"bwg" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bwh" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -43754,7 +42831,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"byA" = ( +"bwi" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -43767,12 +42844,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"byB" = ( +"bwj" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byC" = ( +"bwk" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -43785,7 +42862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byD" = ( +"bwl" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -43807,7 +42884,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byE" = ( +"bwm" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -43819,7 +42896,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byF" = ( +"bwn" = ( /obj/structure/table, /obj/item/weapon/pipe_dispenser, /obj/machinery/camera{ @@ -43832,7 +42909,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"byG" = ( +"bwo" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -43848,7 +42925,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byH" = ( +"bwp" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -43862,7 +42939,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byI" = ( +"bwq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -43884,7 +42961,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byJ" = ( +"bwr" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -43898,13 +42975,13 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byK" = ( +"bws" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"byL" = ( +"bwt" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 }, @@ -43912,7 +42989,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"byM" = ( +"bwu" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -43926,7 +43003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byN" = ( +"bwv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -43949,7 +43026,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byO" = ( +"bww" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -43957,19 +43034,19 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"byP" = ( +"bwx" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"byQ" = ( +"bwy" = ( /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"byR" = ( +"bwz" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -43984,14 +43061,14 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"byS" = ( +"bwA" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"byT" = ( +"bwB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -44004,7 +43081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byU" = ( +"bwC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -44012,7 +43089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byV" = ( +"bwD" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -44020,7 +43097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byW" = ( +"bwE" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix Output"; @@ -44033,7 +43110,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byX" = ( +"bwF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -44048,7 +43125,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byY" = ( +"bwG" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -44062,7 +43139,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byZ" = ( +"bwH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -44074,13 +43151,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bza" = ( +"bwI" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzb" = ( +"bwJ" = ( /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; @@ -44088,7 +43165,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzc" = ( +"bwK" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -44097,7 +43174,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzd" = ( +"bwL" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = null; name = "Medbay"; @@ -44107,7 +43184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bze" = ( +"bwM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Medbay East"; @@ -44123,7 +43200,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzf" = ( +"bwN" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, @@ -44135,7 +43212,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzg" = ( +"bwO" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -44145,7 +43222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzh" = ( +"bwP" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, @@ -44154,7 +43231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzi" = ( +"bwQ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -44169,7 +43246,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzj" = ( +"bwR" = ( /obj/machinery/power/apc{ dir = 8; name = "Medbay APC"; @@ -44190,7 +43267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzk" = ( +"bwS" = ( /obj/structure/bed/roller, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whiteblue/side{ @@ -44200,7 +43277,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzl" = ( +"bwT" = ( /obj/machinery/shower{ dir = 4 }, @@ -44211,7 +43288,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bzm" = ( +"bwU" = ( /obj/structure/mirror{ pixel_y = 32 }, @@ -44222,7 +43299,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bzn" = ( +"bwV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -44237,7 +43314,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bzo" = ( +"bwW" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -44252,7 +43329,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bzp" = ( +"bwX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -44262,7 +43339,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bzq" = ( +"bwY" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -44271,13 +43348,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bzr" = ( +"bwZ" = ( /mob/living/carbon/monkey, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bzs" = ( +"bxa" = ( /obj/item/wallframe/apc, /obj/structure/cable/orange{ d2 = 4; @@ -44287,7 +43364,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzt" = ( +"bxb" = ( /obj/item/stack/rods, /obj/structure/cable/orange{ d1 = 4; @@ -44298,7 +43375,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzu" = ( +"bxc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -44313,7 +43390,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzv" = ( +"bxd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -44323,7 +43400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzw" = ( +"bxe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -44334,7 +43411,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzx" = ( +"bxf" = ( /obj/item/clothing/head/cone, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -44342,7 +43419,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bzy" = ( +"bxg" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel/vault{ @@ -44350,20 +43427,20 @@ dir = 5 }, /area/storage/primary) -"bzz" = ( +"bxh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bzA" = ( +"bxi" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bzB" = ( +"bxj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Service Asteroid Hallway 3"; @@ -44376,91 +43453,101 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bzC" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +"bxk" = ( /obj/machinery/door/airlock/glass{ name = "Hydroponics"; req_access_txt = "35" }, /obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bzD" = ( -/obj/machinery/door/airlock/glass{ - name = "Hydroponics"; - req_access_txt = "35" - }, +"bxl" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bxm" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bxn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bxo" = ( +/obj/structure/table, +/obj/item/seeds/chili, +/obj/item/seeds/grape, +/obj/item/seeds/grape, +/obj/item/weapon/reagent_containers/food/snacks/grown/chili, +/obj/item/weapon/reagent_containers/food/snacks/grown/potato, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bxp" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, /obj/machinery/door/firedoor, -/turf/open/floor/plasteel{ +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bzE" = ( -/obj/machinery/light{ - dir = 8 +"bxq" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, -/turf/open/floor/plasteel/black{ +/turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bzF" = ( -/turf/open/floor/plasteel/darkgreen/side{ - tag = "icon-darkgreen (SOUTHEAST)"; - icon_state = "darkgreen"; - dir = 6; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bzG" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bzH" = ( -/obj/structure/closet/secure_closet/hydroponics, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bzI" = ( +"bxr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 4; on = 1 }, -/turf/open/floor/plasteel/hydrofloor{ +/turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bzJ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/sign/poster/contraband/have_a_puff{ - pixel_x = 32 - }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bzK" = ( +"bxs" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -44469,16 +43556,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bzL" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bzM" = ( +"bxt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -44497,7 +43575,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bzN" = ( +"bxu" = ( /obj/machinery/power/apc{ dir = 8; name = "Engineering Foyer APC"; @@ -44519,7 +43597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzO" = ( +"bxv" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -44541,7 +43619,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzP" = ( +"bxw" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -44555,7 +43633,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzQ" = ( +"bxx" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-22"; icon_state = "plant-22" @@ -44567,7 +43645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzR" = ( +"bxy" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -44588,14 +43666,14 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bzS" = ( +"bxz" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, /obj/machinery/meter, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bzT" = ( +"bxA" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/glass_engineering{ heat_proof = 1; @@ -44607,7 +43685,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bzU" = ( +"bxB" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ icon_state = "intact"; dir = 6 @@ -44615,13 +43693,13 @@ /obj/machinery/meter, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bzV" = ( +"bxC" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bzW" = ( +"bxD" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -44642,7 +43720,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bzX" = ( +"bxE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -44655,13 +43733,13 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bzY" = ( +"bxF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bzZ" = ( +"bxG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-22"; @@ -44675,7 +43753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAa" = ( +"bxH" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -44690,7 +43768,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAb" = ( +"bxI" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -44708,7 +43786,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAc" = ( +"bxJ" = ( /obj/machinery/power/apc{ dir = 4; name = "Engineering Foyer APC"; @@ -44728,12 +43806,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAd" = ( +"bxK" = ( /turf/closed/mineral, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bAe" = ( +"bxL" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -44742,13 +43820,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bAf" = ( +"bxM" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bAg" = ( +"bxN" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/clothing/glasses/meson, @@ -44759,7 +43837,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAh" = ( +"bxO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -44768,7 +43846,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAi" = ( +"bxP" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -44779,7 +43857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAj" = ( +"bxQ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -44789,7 +43867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAk" = ( +"bxR" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -44797,7 +43875,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAl" = ( +"bxS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -44806,14 +43884,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAm" = ( +"bxT" = ( /obj/structure/table/reinforced, /obj/item/weapon/reagent_containers/food/drinks/britcup, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAn" = ( +"bxU" = ( /obj/machinery/button/door{ id = "medmain"; name = "Medbay Foyer Doors"; @@ -44833,7 +43911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAo" = ( +"bxV" = ( /obj/structure/table, /obj/machinery/cell_charger, /obj/item/weapon/wrench/medical, @@ -44841,13 +43919,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAp" = ( +"bxW" = ( /obj/machinery/holopad, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAq" = ( +"bxX" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 }, @@ -44855,7 +43933,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAr" = ( +"bxY" = ( /obj/structure/bed/roller, /obj/machinery/light{ icon_state = "tube1"; @@ -44869,7 +43947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAs" = ( +"bxZ" = ( /obj/machinery/shower{ dir = 4 }, @@ -44880,17 +43958,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bAt" = ( +"bya" = ( /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bAu" = ( +"byb" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bAv" = ( +"byc" = ( /obj/machinery/dna_scannernew, /obj/structure/cable/orange{ d1 = 1; @@ -44907,33 +43985,33 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bAw" = ( +"byd" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bAx" = ( +"bye" = ( /obj/machinery/light, /mob/living/carbon/monkey, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bAy" = ( +"byf" = ( /obj/item/weapon/screwdriver, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bAz" = ( +"byg" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bAA" = ( +"byh" = ( /obj/structure/table, /obj/item/weapon/paper/pamphlet, /obj/item/weapon/coin/silver, @@ -44941,7 +44019,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bAB" = ( +"byi" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/scrubber, /obj/machinery/camera{ @@ -44954,13 +44032,13 @@ dir = 5 }, /area/storage/primary) -"bAC" = ( +"byj" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bAD" = ( +"byk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/newscaster{ pixel_x = -28; @@ -44972,79 +44050,79 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bAE" = ( +"byl" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/camera{ - c_tag = "Hydroponics West"; - dir = 4; - icon_state = "camera" - }, -/turf/open/floor/plasteel/green/side{ - tag = "icon-green (WEST)"; - icon_state = "green"; - dir = 8; +/turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bAF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +"bym" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, -/turf/open/floor/plasteel{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bAG" = ( -/obj/machinery/vending/hydronutrients, -/obj/machinery/airalarm{ - frequency = 1439; - locked = 0; - pixel_y = 23 - }, -/turf/open/floor/plasteel/green/side{ - tag = "icon-green (NORTH)"; - icon_state = "green"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bAH" = ( -/obj/machinery/vending/hydroseeds, +"byn" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, -/turf/open/floor/plasteel/green/side{ - tag = "icon-green (NORTH)"; - icon_state = "green"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/area/hydroponics) -"bAI" = ( /turf/open/floor/plasteel/darkgreen/side{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 4 }, /area/hydroponics) -"bAJ" = ( -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 +"byo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, /turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bAK" = ( +"byp" = ( +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4 + }, +/area/hydroponics) +"byq" = ( +/obj/machinery/camera{ + c_tag = "Hydroponics North 2" + }, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"byr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -45061,7 +44139,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bAL" = ( +"bys" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "Hydroponics" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"byt" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -45071,43 +44163,29 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hydroponics) -"bAM" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - icon_state = "pipe-j1s"; - name = "disposal pipe - Hydroponics"; - sortType = 21 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bAN" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bAO" = ( +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"byu" = ( /obj/structure/rack, /obj/item/weapon/storage/bag/ore, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bAP" = ( +"byv" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bAQ" = ( +"byw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAR" = ( +"byx" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -45118,13 +44196,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAS" = ( +"byy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAT" = ( +"byz" = ( /obj/machinery/light{ dir = 4 }, @@ -45132,7 +44210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAU" = ( +"byA" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -45147,7 +44225,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bAV" = ( +"byB" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister, /obj/machinery/atmospherics/components/unary/portables_connector/visible, @@ -45155,7 +44233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bAW" = ( +"byC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/binary/pump{ dir = 2; @@ -45167,14 +44245,14 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bAX" = ( +"byD" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, /area/engine/supermatter) -"bAY" = ( +"byE" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Gas To Chamber"; @@ -45185,7 +44263,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bAZ" = ( +"byF" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/atmospherics/components/unary/portables_connector/visible, @@ -45194,7 +44272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bBa" = ( +"byG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -45209,11 +44287,11 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bBb" = ( +"byH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bBc" = ( +"byI" = ( /obj/machinery/light{ dir = 8 }, @@ -45226,14 +44304,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBd" = ( +"byJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBe" = ( +"byK" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -45241,12 +44319,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBf" = ( +"byL" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bBg" = ( +"byM" = ( /obj/machinery/light/small{ dir = 4 }, @@ -45254,7 +44332,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bBh" = ( +"byN" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -45269,7 +44347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bBi" = ( +"byO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45277,7 +44355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bBj" = ( +"byP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -45292,7 +44370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bBk" = ( +"byQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45304,7 +44382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBl" = ( +"byR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45314,14 +44392,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBm" = ( +"byS" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/holopad, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBn" = ( +"byT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -45332,7 +44410,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBo" = ( +"byU" = ( /obj/structure/table/reinforced, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -45344,14 +44422,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBp" = ( +"byV" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBq" = ( +"byW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -45364,7 +44442,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBr" = ( +"byX" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, @@ -45378,13 +44456,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBs" = ( +"byY" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBt" = ( +"byZ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -45398,7 +44476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBu" = ( +"bza" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -45415,7 +44493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBv" = ( +"bzb" = ( /obj/machinery/shower{ dir = 4 }, @@ -45425,7 +44503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bBw" = ( +"bzc" = ( /obj/structure/chair{ dir = 4 }, @@ -45434,7 +44512,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bBx" = ( +"bzd" = ( /obj/machinery/computer/cloning, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -45457,7 +44535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bBy" = ( +"bze" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/pump, /obj/machinery/light{ @@ -45468,7 +44546,7 @@ dir = 5 }, /area/storage/primary) -"bBz" = ( +"bzf" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/vault{ @@ -45476,7 +44554,7 @@ dir = 5 }, /area/storage/primary) -"bBA" = ( +"bzg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -45484,7 +44562,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bBB" = ( +"bzh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -45492,7 +44570,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bBC" = ( +"bzi" = ( /obj/machinery/door/airlock/glass{ name = "Primary Tool Storage" }, @@ -45504,7 +44582,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bBD" = ( +"bzj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -45512,67 +44590,60 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bBE" = ( -/turf/open/floor/plasteel/green/side{ - tag = "icon-green (WEST)"; - icon_state = "green"; - dir = 8; +"bzk" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bBG" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bBH" = ( +"bzl" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 2; + dir = 4; on = 1 }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBI" = ( -/obj/machinery/light{ +"bzm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; dir = 4 }, -/obj/machinery/camera{ - c_tag = "Hydroponics East"; - dir = 9; - icon_state = "camera" - }, /turf/open/floor/plasteel/darkgreen/side{ - tag = "icon-darkgreen (NORTHEAST)"; - icon_state = "darkgreen"; - dir = 5; + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4 + }, +/area/hydroponics) +"bzn" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Hydroponics Backroom"; - dir = 9; - icon_state = "camera" +"bzo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/hydrofloor{ +/turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBK" = ( +"bzp" = ( +/obj/effect/landmark/start/botanist, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bzq" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -45581,7 +44652,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBL" = ( +"bzr" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45589,22 +44660,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBM" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bBN" = ( +"bzs" = ( /turf/closed/mineral/random/labormineral, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bBO" = ( -/obj/machinery/door/airlock/maintenance{ +"bzt" = ( +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, @@ -45614,7 +44676,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bBP" = ( +"bzu" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -45624,7 +44686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBQ" = ( +"bzv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; @@ -45635,7 +44697,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBR" = ( +"bzw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -45651,7 +44713,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBS" = ( +"bzx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; @@ -45662,7 +44724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBT" = ( +"bzy" = ( /obj/structure/table, /obj/item/weapon/storage/box/donkpockets, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -45682,7 +44744,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBU" = ( +"bzz" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; @@ -45692,7 +44754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bBV" = ( +"bzA" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -45701,7 +44763,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bBW" = ( +"bzB" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -45710,11 +44772,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bBX" = ( +"bzC" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bBY" = ( +"bzD" = ( /obj/machinery/door/airlock/glass_engineering{ heat_proof = 1; name = "Supermatter Chamber"; @@ -45725,14 +44787,14 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bBZ" = ( +"bzE" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bCa" = ( +"bzF" = ( /obj/structure/table, /obj/item/weapon/storage/box/donkpockets, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -45750,7 +44812,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bCb" = ( +"bzG" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -45762,12 +44824,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bCc" = ( +"bzH" = ( /turf/open/floor/plasteel/red/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bCd" = ( +"bzI" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable{ @@ -45787,7 +44849,7 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating/airless, /area/security/checkpoint/engineering) -"bCe" = ( +"bzJ" = ( /obj/structure/closet/secure_closet/security/engine, /obj/machinery/newscaster/security_unit{ pixel_y = 32 @@ -45799,7 +44861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bCf" = ( +"bzK" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -45815,7 +44877,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bCg" = ( +"bzL" = ( /obj/machinery/power/apc{ dir = 4; name = "Engineering Security Checkpoint APC"; @@ -45836,7 +44898,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bCh" = ( +"bzM" = ( /obj/structure/janitorialcart, /obj/item/weapon/mop, /obj/item/weapon/reagent_containers/glass/bucket, @@ -45844,7 +44906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCi" = ( +"bzN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; @@ -45856,7 +44918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCj" = ( +"bzO" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45864,7 +44926,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCk" = ( +"bzP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -45881,7 +44943,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCl" = ( +"bzQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -45896,7 +44958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCm" = ( +"bzR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -45907,7 +44969,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCn" = ( +"bzS" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -45918,7 +44980,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCo" = ( +"bzT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -45930,7 +44992,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCp" = ( +"bzU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -45941,7 +45003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCq" = ( +"bzV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -45955,7 +45017,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCr" = ( +"bzW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45969,7 +45031,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCs" = ( +"bzX" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = "medmain"; name = "Medbay"; @@ -45985,7 +45047,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCt" = ( +"bzY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45998,7 +45060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCu" = ( +"bzZ" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 2; @@ -46008,7 +45070,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCv" = ( +"bAa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -46016,7 +45078,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCw" = ( +"bAb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -46026,14 +45088,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCx" = ( +"bAc" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCy" = ( +"bAd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whiteblue/side{ tag = "icon-whiteblue (EAST)"; @@ -46042,7 +45104,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCz" = ( +"bAe" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -46050,7 +45112,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bCA" = ( +"bAf" = ( /obj/machinery/disposal/bin, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/trunk, @@ -46058,7 +45120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bCB" = ( +"bAg" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -46067,7 +45129,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bCC" = ( +"bAh" = ( /obj/machinery/clonepod, /obj/machinery/light{ icon_state = "tube1"; @@ -46085,7 +45147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bCD" = ( +"bAi" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/light/small{ brightness = 3; @@ -46097,7 +45159,7 @@ dir = 5 }, /area/medical/morgue) -"bCE" = ( +"bAj" = ( /obj/machinery/light/small{ dir = 8 }, @@ -46111,7 +45173,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCF" = ( +"bAk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -46121,7 +45183,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCG" = ( +"bAl" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -46132,7 +45194,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCH" = ( +"bAm" = ( /obj/machinery/light/small{ dir = 1 }, @@ -46145,7 +45207,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCI" = ( +"bAn" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -46155,7 +45217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bCJ" = ( +"bAo" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -46167,112 +45229,65 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bCK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCL" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/holopad, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCO" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCP" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +"bAp" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, /turf/open/floor/plasteel/darkgreen/side{ - tag = "icon-darkgreen (SOUTHEAST)"; + tag = "icon-darkgreen (WEST)"; icon_state = "darkgreen"; - dir = 6; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced/fulltile, -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCS" = ( -/obj/structure/closet/secure_closet/hydroponics, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bCT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; - layer = 2.4; - on = 1 - }, -/turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bCU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/plantgenes, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"bAq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 }, -/turf/open/floor/plasteel/hydrofloor{ +/turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bCV" = ( +"bAr" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAs" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAt" = ( +/obj/machinery/door/airlock/glass{ + name = "Bee Reserve"; + req_access_txt = "35" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAu" = ( +/obj/structure/flora/ausbushes/ywflowers, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bAv" = ( /obj/machinery/power/apc{ dir = 8; name = "Port Asteroid Maintenance APC"; @@ -46294,7 +45309,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCW" = ( +"bAw" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -46306,7 +45321,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCX" = ( +"bAx" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -46324,7 +45339,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCY" = ( +"bAy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -46336,7 +45351,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCZ" = ( +"bAz" = ( /obj/machinery/light/small{ dir = 8 }, @@ -46347,19 +45362,19 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDa" = ( +"bAA" = ( /obj/structure/girder, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDb" = ( +"bAB" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDc" = ( +"bAC" = ( /obj/machinery/light/small{ dir = 1 }, @@ -46367,7 +45382,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDd" = ( +"bAD" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -46378,7 +45393,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDe" = ( +"bAE" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -46394,7 +45409,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDf" = ( +"bAF" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -46404,7 +45419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDg" = ( +"bAG" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; @@ -46414,7 +45429,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDh" = ( +"bAH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -46431,7 +45446,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDi" = ( +"bAI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -46448,7 +45463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDj" = ( +"bAJ" = ( /obj/structure/table, /obj/machinery/microwave, /turf/open/floor/plasteel/yellow/side{ @@ -46458,13 +45473,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDk" = ( +"bAK" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bDl" = ( +"bAL" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -46483,7 +45498,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDm" = ( +"bAM" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -46507,7 +45522,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDn" = ( +"bAN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46525,7 +45540,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDo" = ( +"bAO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46545,7 +45560,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDp" = ( +"bAP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46566,7 +45581,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDq" = ( +"bAQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46587,7 +45602,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDr" = ( +"bAR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46606,7 +45621,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDs" = ( +"bAS" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46616,7 +45631,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDt" = ( +"bAT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46632,7 +45647,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDu" = ( +"bAU" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -46647,7 +45662,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDv" = ( +"bAV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -46662,7 +45677,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDw" = ( +"bAW" = ( /obj/structure/table, /obj/machinery/microwave, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -46676,7 +45691,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDx" = ( +"bAX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -46686,7 +45701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDy" = ( +"bAY" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -46708,7 +45723,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDz" = ( +"bAZ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -46721,7 +45736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDA" = ( +"bBa" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable{ @@ -46747,7 +45762,7 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating/airless, /area/security/checkpoint/engineering) -"bDB" = ( +"bBb" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -46760,7 +45775,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bDC" = ( +"bBc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -46772,7 +45787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bDD" = ( +"bBd" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -46784,7 +45799,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bDE" = ( +"bBe" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -46795,7 +45810,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bDF" = ( +"bBf" = ( /obj/machinery/door/airlock/maintenance{ name = "Broom Closet"; req_access_txt = "0" @@ -46804,7 +45819,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bDG" = ( +"bBg" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -46818,7 +45833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bDH" = ( +"bBh" = ( /obj/structure/chair{ dir = 4 }, @@ -46830,7 +45845,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDI" = ( +"bBi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -46839,7 +45854,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDJ" = ( +"bBj" = ( /obj/machinery/camera{ c_tag = "Medbay Lobby"; dir = 1; @@ -46850,7 +45865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDK" = ( +"bBk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -46858,7 +45873,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDL" = ( +"bBl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -46871,7 +45886,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDM" = ( +"bBm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -46883,7 +45898,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDN" = ( +"bBn" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = "medmain"; name = "Medbay"; @@ -46896,7 +45911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDO" = ( +"bBo" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -46904,26 +45919,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDP" = ( +"bBp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDQ" = ( +"bBq" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDR" = ( +"bBr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDS" = ( +"bBs" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, @@ -46932,7 +45947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDT" = ( +"bBt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -46947,7 +45962,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDU" = ( +"bBu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -46960,7 +45975,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDV" = ( +"bBv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -46979,7 +45994,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDW" = ( +"bBw" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = "cloningmain"; name = "Genetics"; @@ -47001,7 +46016,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bDX" = ( +"bBx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -47019,7 +46034,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bDY" = ( +"bBy" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -47040,7 +46055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bDZ" = ( +"bBz" = ( /obj/structure/table, /obj/item/weapon/book/manual/medical_cloning{ pixel_y = 6 @@ -47061,7 +46076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEa" = ( +"bBA" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -47073,7 +46088,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bEb" = ( +"bBB" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -47085,7 +46100,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bEc" = ( +"bBC" = ( /obj/structure/disposaloutlet{ icon_state = "outlet"; dir = 1 @@ -47093,7 +46108,7 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/space) -"bEd" = ( +"bBD" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -47109,7 +46124,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bEe" = ( +"bBE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -47125,52 +46140,31 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bEf" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bEg" = ( -/obj/machinery/camera{ - c_tag = "Hydroponics East"; - dir = 9; - icon_state = "camera"; - tag = "" - }, -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/turf/open/floor/plasteel/darkgreen{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bEh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/chem_master/condimaster, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"bBF" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bEi" = ( +"bBG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 1; + on = 1 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bBH" = ( /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bEj" = ( +"bBI" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -47182,7 +46176,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bEk" = ( +"bBJ" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -47194,7 +46188,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bEl" = ( +"bBK" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; @@ -47206,13 +46200,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bEm" = ( +"bBL" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEn" = ( +"bBM" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -47227,7 +46221,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEo" = ( +"bBN" = ( /obj/structure/table, /obj/item/weapon/storage/box/cups, /turf/open/floor/plasteel/yellow/side{ @@ -47237,7 +46231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEp" = ( +"bBO" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/machinery/status_display{ density = 0; @@ -47247,7 +46241,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bEq" = ( +"bBP" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -47257,7 +46251,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEr" = ( +"bBQ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "1-4"; @@ -47269,7 +46263,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEs" = ( +"bBR" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -47284,7 +46278,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEt" = ( +"bBS" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -47296,7 +46290,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEu" = ( +"bBT" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -47314,7 +46308,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEv" = ( +"bBU" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -47331,7 +46325,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEw" = ( +"bBV" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/cable/yellow{ d1 = 4; @@ -47344,7 +46338,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEx" = ( +"bBW" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ d1 = 1; @@ -47356,7 +46350,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEy" = ( +"bBX" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -47370,7 +46364,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEz" = ( +"bBY" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -47379,7 +46373,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bEA" = ( +"bBZ" = ( /obj/structure/table, /obj/item/weapon/storage/box/cups, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -47397,7 +46391,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEB" = ( +"bCa" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -47406,7 +46400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEC" = ( +"bCb" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -47421,14 +46415,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bED" = ( +"bCc" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 4; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEE" = ( +"bCd" = ( /obj/structure/table/reinforced, /obj/structure/cable{ d1 = 1; @@ -47440,7 +46434,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bEF" = ( +"bCe" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -47451,13 +46445,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bEG" = ( +"bCf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bEH" = ( +"bCg" = ( /obj/structure/table, /obj/machinery/recharger, /obj/machinery/camera{ @@ -47480,7 +46474,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bEI" = ( +"bCh" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -47489,7 +46483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bEJ" = ( +"bCi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -47507,22 +46501,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bEK" = ( +"bCj" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bEL" = ( +"bCk" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northleft{ name = "Chemistry Desk"; req_access_txt = "33" }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bEM" = ( +"bCl" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -47530,13 +46525,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bEN" = ( -/obj/machinery/smartfridge/chemistry, +"bCm" = ( +/obj/machinery/smartfridge/chemistry/preloaded, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bEO" = ( +"bCn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/button/door{ id = "medmain"; @@ -47548,21 +46543,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bEP" = ( +"bCo" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bEQ" = ( +"bCp" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bER" = ( +"bCq" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -47571,7 +46566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bES" = ( +"bCr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -47579,7 +46574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bET" = ( +"bCs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -47590,7 +46585,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bEU" = ( +"bCt" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -47601,7 +46596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEV" = ( +"bCu" = ( /obj/structure/closet/wardrobe/white, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -47610,7 +46605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEW" = ( +"bCv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -47622,7 +46617,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEX" = ( +"bCw" = ( /obj/machinery/button/door{ id = "cloningmain"; name = "Cloning Door"; @@ -47646,7 +46641,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEY" = ( +"bCx" = ( /obj/structure/table, /obj/item/weapon/storage/box/rxglasses{ pixel_x = 3; @@ -47668,17 +46663,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEZ" = ( +"bCy" = ( /turf/closed/wall/rust, /area/space) -"bFa" = ( +"bCz" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bFb" = ( +"bCA" = ( /obj/machinery/light/small{ dir = 1 }, @@ -47692,7 +46687,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bFc" = ( +"bCB" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -47703,128 +46698,41 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bFd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +"bCC" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 }, -/turf/open/floor/plasteel{ +/turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bFe" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +"bCD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; dir = 4 }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bFf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bFg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bFh" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bFi" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /turf/open/floor/plasteel/darkgreen/side{ - tag = "icon-darkgreen (NORTHEAST)"; + tag = "icon-darkgreen (WEST)"; icon_state = "darkgreen"; - dir = 5; + dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bFj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/glass{ - name = "Hydroponics"; - req_access_txt = "35" - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +"bCE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, /turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bFk" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/hydrofloor{ +"bCF" = ( +/turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bFl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bFm" = ( +"bCG" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -47836,13 +46744,13 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bFn" = ( +"bCH" = ( /obj/structure/closet, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bFo" = ( +"bCI" = ( /obj/machinery/light/small{ dir = 8 }, @@ -47850,13 +46758,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bFp" = ( +"bCJ" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bFq" = ( +"bCK" = ( /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -47864,7 +46772,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bFr" = ( +"bCL" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/structure/rack, /turf/open/floor/plating/astplate{ @@ -47873,13 +46781,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bFs" = ( +"bCM" = ( /obj/machinery/vending/snack, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFt" = ( +"bCN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -47893,7 +46801,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFu" = ( +"bCO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -47901,7 +46809,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFv" = ( +"bCP" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -47910,7 +46818,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFw" = ( +"bCQ" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; @@ -47920,26 +46828,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bFx" = ( +"bCR" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /turf/closed/wall/r_wall, /area/engine/engineering) -"bFy" = ( +"bCS" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bFz" = ( +"bCT" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 10 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bFA" = ( +"bCU" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -47949,7 +46857,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFB" = ( +"bCV" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/radiation, /turf/open/floor/engine{ @@ -47957,7 +46865,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFC" = ( +"bCW" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/light, /turf/open/floor/engine{ @@ -47965,14 +46873,14 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFD" = ( +"bCX" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, /area/engine/supermatter) -"bFE" = ( +"bCY" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 1; @@ -47991,7 +46899,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFF" = ( +"bCZ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ d1 = 1; @@ -48003,7 +46911,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFG" = ( +"bDa" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -48013,7 +46921,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFH" = ( +"bDb" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -48021,13 +46929,13 @@ }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bFI" = ( +"bDc" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 9 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bFJ" = ( +"bDd" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, @@ -48038,7 +46946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFK" = ( +"bDe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48051,7 +46959,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFL" = ( +"bDf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -48061,7 +46969,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFM" = ( +"bDg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48079,7 +46987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFN" = ( +"bDh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -48089,7 +46997,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFO" = ( +"bDi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -48097,7 +47005,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFP" = ( +"bDj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -48113,14 +47021,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFQ" = ( +"bDk" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bFR" = ( +"bDl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -48137,7 +47045,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bFS" = ( +"bDm" = ( /obj/machinery/chem_master, /turf/open/floor/plasteel/whiteyellow/side{ tag = "icon-whiteyellow (NORTHWEST)"; @@ -48146,7 +47054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFT" = ( +"bDn" = ( /obj/structure/chair/office/light{ dir = 1 }, @@ -48158,7 +47066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFU" = ( +"bDo" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/beakers{ pixel_x = 2; @@ -48173,7 +47081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFV" = ( +"bDp" = ( /turf/open/floor/plasteel/whiteyellow/side{ tag = "icon-whiteyellow (NORTH)"; icon_state = "whiteyellow"; @@ -48181,7 +47089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFW" = ( +"bDq" = ( /obj/machinery/chem_master, /turf/open/floor/plasteel/whiteyellow/side{ tag = "icon-whiteyellow (NORTH)"; @@ -48190,7 +47098,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFX" = ( +"bDr" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -48203,7 +47111,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFY" = ( +"bDs" = ( /obj/structure/chair{ dir = 4 }, @@ -48214,7 +47122,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFZ" = ( +"bDt" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/eastleft{ name = "Chemistry Desk"; @@ -48224,7 +47132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bGa" = ( +"bDu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4; @@ -48237,7 +47145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGb" = ( +"bDv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 8; @@ -48247,7 +47155,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGc" = ( +"bDw" = ( /obj/machinery/light{ dir = 1 }, @@ -48255,7 +47163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGd" = ( +"bDx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48264,7 +47172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGe" = ( +"bDy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48277,7 +47185,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGf" = ( +"bDz" = ( /obj/machinery/light{ dir = 1 }, @@ -48288,7 +47196,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGg" = ( +"bDA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -48297,7 +47205,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGh" = ( +"bDB" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -48305,7 +47213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bGi" = ( +"bDC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -48314,7 +47222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bGj" = ( +"bDD" = ( /obj/machinery/door/airlock/glass_research{ name = "Genetics Research"; req_access_txt = "0"; @@ -48331,12 +47239,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bGk" = ( +"bDE" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bGl" = ( +"bDF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -48351,11 +47259,11 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bGm" = ( +"bDG" = ( /obj/item/weapon/storage/toolbox/mechanical/old, /turf/open/floor/plating, /area/space) -"bGn" = ( +"bDH" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -48364,13 +47272,13 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bGo" = ( +"bDI" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bGp" = ( +"bDJ" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 4 @@ -48381,7 +47289,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bGq" = ( +"bDK" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -48390,7 +47298,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bGr" = ( +"bDL" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -48404,84 +47312,87 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bGs" = ( +"bDM" = ( /obj/structure/table, -/obj/item/seeds/grape, -/obj/item/seeds/grape, -/turf/open/floor/plasteel/green/side{ - tag = "icon-green (NORTHWEST)"; - icon_state = "green"; - dir = 9; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGt" = ( -/obj/structure/table, -/obj/machinery/light, -/obj/item/seeds/apple, -/obj/item/seeds/chili, -/turf/open/floor/plasteel/green/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGu" = ( -/obj/structure/table, -/obj/item/weapon/shovel/spade, -/turf/open/floor/plasteel/green/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGv" = ( -/obj/machinery/biogenerator, -/turf/open/floor/plasteel/green/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGw" = ( -/obj/machinery/seed_extractor, -/turf/open/floor/plasteel/green/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ +/obj/machinery/reagentgrinder, +/obj/machinery/camera{ + c_tag = "Hydroponics Storage"; dir = 1; - on = 1 + network = list("SS13"); + pixel_x = 0; + pixel_y = 0; + start_active = 1 }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGy" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGz" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/open/floor/plasteel/darkgreen/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGA" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/weapon/reagent_containers/glass/bucket, -/turf/open/floor/plasteel/darkgreen/side{ - tag = "icon-darkgreen (SOUTHEAST)"; - icon_state = "darkgreen"; - dir = 6; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"bGB" = ( -/obj/machinery/light, /turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bGC" = ( +"bDN" = ( +/obj/machinery/chem_master/condimaster, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDO" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/weapon/shovel/spade, +/obj/item/weapon/wrench, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/wirecutters, +/obj/item/weapon/shovel/spade, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDP" = ( +/obj/machinery/biogenerator, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDQ" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDR" = ( +/obj/structure/table, +/obj/item/weapon/storage/bag/plants/portaseeder, +/obj/item/weapon/storage/bag/plants/portaseeder, +/obj/item/weapon/storage/bag/plants, +/obj/item/weapon/storage/bag/plants, +/obj/machinery/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDS" = ( +/obj/structure/closet/wardrobe/botanist, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDT" = ( +/obj/structure/beebox, +/obj/item/queen_bee/bought, +/obj/machinery/camera{ + c_tag = "Hydroponics Bee Reserve South"; + dir = 5; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"bDU" = ( /obj/structure/table, /obj/item/weapon/book/manual/hydroponics_pod_people, /obj/item/weapon/paper/hydroponics, @@ -48491,39 +47402,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bGD" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "Hydroponics APC"; - pixel_x = -23; - pixel_y = 2 - }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/turf_decal/stripes/asteroid/end{ - tag = "icon-ast_warn_end (EAST)"; - icon_state = "ast_warn_end"; - dir = 4 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bGE" = ( +"bDV" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGF" = ( +"bDW" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -48532,7 +47416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGG" = ( +"bDX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -48544,7 +47428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGH" = ( +"bDY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48553,7 +47437,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGI" = ( +"bDZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48561,7 +47445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGJ" = ( +"bEa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -48569,7 +47453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGK" = ( +"bEb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ dir = 8 @@ -48578,7 +47462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGL" = ( +"bEc" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48590,12 +47474,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGM" = ( +"bEd" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGN" = ( +"bEe" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -48607,7 +47491,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGO" = ( +"bEf" = ( /obj/machinery/light{ dir = 1 }, @@ -48616,7 +47500,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGP" = ( +"bEg" = ( /obj/machinery/power/apc{ dir = 1; name = "Engineering APC"; @@ -48632,20 +47516,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGQ" = ( +"bEh" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGR" = ( +"bEi" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 5 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bGS" = ( +"bEj" = ( /obj/machinery/door/airlock/glass_engineering{ name = "Supermatter Engine Room"; req_access_txt = "10" @@ -48657,7 +47541,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bGT" = ( +"bEk" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -48679,7 +47563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bGU" = ( +"bEl" = ( /obj/machinery/door/airlock/glass_engineering{ name = "Supermatter Engine Room"; req_access_txt = "10" @@ -48696,13 +47580,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bGV" = ( +"bEm" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGW" = ( +"bEn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/sign/map/left/ceres{ pixel_y = 32 @@ -48711,7 +47595,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGX" = ( +"bEo" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -48725,7 +47609,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGY" = ( +"bEp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48738,7 +47622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGZ" = ( +"bEq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48749,7 +47633,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHa" = ( +"bEr" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable{ @@ -48769,7 +47653,7 @@ }, /turf/open/floor/plating/airless, /area/security/checkpoint/engineering) -"bHb" = ( +"bEs" = ( /obj/machinery/computer/secure_data, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -48784,7 +47668,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bHc" = ( +"bEt" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -48798,7 +47682,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bHd" = ( +"bEu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -48812,13 +47696,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bHe" = ( +"bEv" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bHf" = ( +"bEw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -48829,7 +47713,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bHg" = ( +"bEx" = ( /obj/machinery/chem_dispenser, /turf/open/floor/plasteel/whiteyellow/side{ tag = "icon-whiteyellow (WEST)"; @@ -48838,24 +47722,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bHh" = ( +"bEy" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bHi" = ( +"bEz" = ( /obj/machinery/chem_heater, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bHj" = ( +"bEA" = ( /obj/machinery/chem_dispenser, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bHk" = ( +"bEB" = ( /turf/open/floor/plasteel/whiteyellow/side{ tag = "icon-whiteyellow (EAST)"; icon_state = "whiteyellow"; @@ -48863,7 +47747,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bHl" = ( +"bEC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 1; @@ -48876,7 +47760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHm" = ( +"bED" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; @@ -48886,7 +47770,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHn" = ( +"bEE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -48894,7 +47778,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHo" = ( +"bEF" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -48906,7 +47790,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHp" = ( +"bEG" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, @@ -48918,7 +47802,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHq" = ( +"bEH" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -48927,7 +47811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHr" = ( +"bEI" = ( /obj/machinery/disposal/bin, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/trunk{ @@ -48937,7 +47821,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHs" = ( +"bEJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -48949,7 +47833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHt" = ( +"bEK" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -48962,7 +47846,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHu" = ( +"bEL" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -48970,12 +47854,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHv" = ( +"bEM" = ( /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHw" = ( +"bEN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -48992,11 +47876,11 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bHx" = ( +"bEO" = ( /obj/item/weapon/coin/gold, /turf/open/floor/plating, /area/space) -"bHy" = ( +"bEP" = ( /obj/machinery/light/small{ dir = 8 }, @@ -49004,7 +47888,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bHz" = ( +"bEQ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/item/weapon/electronics/airlock, @@ -49014,12 +47898,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bHA" = ( +"bER" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bHB" = ( +"bES" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -49030,7 +47914,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bHC" = ( +"bET" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -49039,7 +47923,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bHD" = ( +"bEU" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -49053,7 +47937,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bHE" = ( +"bEV" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -49063,7 +47947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bHF" = ( +"bEW" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -49080,7 +47964,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bHG" = ( +"bEX" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j1s"; @@ -49091,14 +47975,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bHH" = ( +"bEY" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/atmos) -"bHI" = ( +"bEZ" = ( /obj/machinery/portable_atmospherics/canister/freon, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -49106,7 +47990,7 @@ dir = 5 }, /area/atmos) -"bHJ" = ( +"bFa" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -49114,7 +47998,7 @@ dir = 5 }, /area/atmos) -"bHK" = ( +"bFb" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -49122,7 +48006,7 @@ dir = 5 }, /area/atmos) -"bHL" = ( +"bFc" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -49131,13 +48015,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHM" = ( +"bFd" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHN" = ( +"bFe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -49146,7 +48030,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHO" = ( +"bFf" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/rods{ @@ -49157,7 +48041,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHP" = ( +"bFg" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, /obj/machinery/power/apc{ @@ -49175,7 +48059,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHQ" = ( +"bFh" = ( /obj/structure/table, /obj/item/weapon/grenade/chem_grenade/metalfoam, /obj/item/weapon/grenade/chem_grenade/metalfoam, @@ -49183,7 +48067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHR" = ( +"bFi" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, @@ -49193,7 +48077,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHS" = ( +"bFj" = ( /obj/structure/tank_dispenser, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -49202,7 +48086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHT" = ( +"bFk" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -49212,7 +48096,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHU" = ( +"bFl" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; @@ -49221,7 +48105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHV" = ( +"bFm" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -49236,7 +48120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHW" = ( +"bFn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49244,7 +48128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHX" = ( +"bFo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49255,7 +48139,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHY" = ( +"bFp" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -49266,7 +48150,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bHZ" = ( +"bFq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49274,7 +48158,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIa" = ( +"bFr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49288,13 +48172,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIb" = ( +"bFs" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIc" = ( +"bFt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49309,7 +48193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bId" = ( +"bFu" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, /obj/item/stack/sheet/glass/fifty, @@ -49320,7 +48204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIe" = ( +"bFv" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/metal/fifty, @@ -49331,7 +48215,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIf" = ( +"bFw" = ( /obj/structure/table, /obj/item/stack/rods{ amount = 50 @@ -49346,7 +48230,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIg" = ( +"bFx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49359,7 +48243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIh" = ( +"bFy" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel/fifty, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -49379,7 +48263,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIi" = ( +"bFz" = ( /obj/structure/table, /obj/item/stack/sheet/rglass{ amount = 50 @@ -49396,7 +48280,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIj" = ( +"bFA" = ( /obj/structure/table, /obj/item/stack/cable_coil, /obj/item/stack/cable_coil, @@ -49412,7 +48296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIk" = ( +"bFB" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -49424,7 +48308,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIl" = ( +"bFC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49436,7 +48320,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIm" = ( +"bFD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49451,7 +48335,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIn" = ( +"bFE" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -49465,7 +48349,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIo" = ( +"bFF" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 8; @@ -49478,7 +48362,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bIp" = ( +"bFG" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -49491,7 +48375,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bIq" = ( +"bFH" = ( /obj/machinery/vending/cola, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -49500,7 +48384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bIr" = ( +"bFI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -49515,7 +48399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bIs" = ( +"bFJ" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, @@ -49527,7 +48411,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bIt" = ( +"bFK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -49544,7 +48428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bIu" = ( +"bFL" = ( /obj/machinery/requests_console{ department = "Chemistry"; departmentType = 2; @@ -49562,7 +48446,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIv" = ( +"bFM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -49571,7 +48455,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIw" = ( +"bFN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49579,7 +48463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIx" = ( +"bFO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49588,7 +48472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIy" = ( +"bFP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49600,7 +48484,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIz" = ( +"bFQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49611,7 +48495,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIA" = ( +"bFR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49625,7 +48509,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIB" = ( +"bFS" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = null; name = "Chemistry Lab"; @@ -49641,7 +48525,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIC" = ( +"bFT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49656,7 +48540,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bID" = ( +"bFU" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -49668,12 +48552,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bIE" = ( +"bFV" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bIF" = ( +"bFW" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -49682,13 +48566,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bIG" = ( +"bFX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bIH" = ( +"bFY" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -49704,7 +48588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bII" = ( +"bFZ" = ( /obj/machinery/computer/scan_consolenew, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -49713,7 +48597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bIJ" = ( +"bGa" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -49722,13 +48606,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bIK" = ( +"bGb" = ( /obj/structure/flora/tree/palm, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bIL" = ( +"bGc" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -49736,7 +48620,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIM" = ( +"bGd" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -49746,7 +48630,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIN" = ( +"bGe" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -49757,7 +48641,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIO" = ( +"bGf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49767,7 +48651,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIP" = ( +"bGg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49778,7 +48662,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIQ" = ( +"bGh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49788,7 +48672,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIR" = ( +"bGi" = ( /obj/structure/disposaloutlet{ dir = 4 }, @@ -49799,7 +48683,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIS" = ( +"bGj" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 }, @@ -49808,7 +48692,7 @@ }, /turf/open/floor/plating/airless, /area/space) -"bIT" = ( +"bGk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49816,14 +48700,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/space) -"bIU" = ( +"bGl" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, /turf/open/floor/plating, /area/space) -"bIV" = ( +"bGm" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -49836,12 +48720,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bIW" = ( +"bGn" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bIX" = ( +"bGo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -49851,13 +48735,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bIY" = ( +"bGp" = ( /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/crew_quarters/fitness) -"bIZ" = ( +"bGq" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -49869,7 +48753,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJa" = ( +"bGr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -49886,7 +48770,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJb" = ( +"bGs" = ( /mob/living/simple_animal/crab{ desc = "The local trainer hired to keep the crew in shape by aggressively snipping at them."; name = "Crabohydrates" @@ -49896,7 +48780,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJc" = ( +"bGt" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = 0; @@ -49917,7 +48801,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJd" = ( +"bGu" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -49928,12 +48812,12 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJe" = ( +"bGv" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJf" = ( +"bGw" = ( /obj/structure/bookcase{ name = "Forbidden Knowledge" }, @@ -49944,7 +48828,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJg" = ( +"bGx" = ( /obj/structure/table/wood, /obj/item/device/taperecorder{ pixel_y = 0 @@ -49957,7 +48841,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJh" = ( +"bGy" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -49973,7 +48857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJi" = ( +"bGz" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -49983,7 +48867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJj" = ( +"bGA" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ dir = 8 @@ -49992,7 +48876,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJk" = ( +"bGB" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -50005,7 +48889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJl" = ( +"bGC" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 24 }, @@ -50023,14 +48907,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJm" = ( +"bGD" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library{ name = "Lounge" }) -"bJn" = ( +"bGE" = ( /obj/machinery/vending/coffee, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -50038,7 +48922,7 @@ /area/library{ name = "Lounge" }) -"bJo" = ( +"bGF" = ( /obj/structure/chair/comfy/black{ dir = 4 }, @@ -50051,7 +48935,7 @@ /area/library{ name = "Lounge" }) -"bJp" = ( +"bGG" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, @@ -50061,7 +48945,7 @@ /area/library{ name = "Lounge" }) -"bJq" = ( +"bGH" = ( /obj/structure/fireplace, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -50069,14 +48953,14 @@ /area/library{ name = "Lounge" }) -"bJr" = ( +"bGI" = ( /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library{ name = "Lounge" }) -"bJs" = ( +"bGJ" = ( /obj/structure/chair/comfy/black{ dir = 8 }, @@ -50089,7 +48973,7 @@ /area/library{ name = "Lounge" }) -"bJt" = ( +"bGK" = ( /obj/structure/rack, /obj/item/weapon/grown/log, /obj/item/weapon/grown/log, @@ -50107,7 +48991,7 @@ /area/library{ name = "Lounge" }) -"bJu" = ( +"bGL" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -50115,7 +48999,7 @@ /area/library{ name = "Lounge" }) -"bJv" = ( +"bGM" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -50123,7 +49007,7 @@ dir = 5 }, /area/atmos) -"bJw" = ( +"bGN" = ( /obj/machinery/camera{ c_tag = "Atmospherics North-West"; dir = 4; @@ -50134,24 +49018,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJx" = ( +"bGO" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJy" = ( +"bGP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJz" = ( +"bGQ" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJA" = ( +"bGR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -50162,7 +49046,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJB" = ( +"bGS" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -50174,7 +49058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJC" = ( +"bGT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -50187,7 +49071,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJD" = ( +"bGU" = ( /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -50195,7 +49079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJE" = ( +"bGV" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -50218,7 +49102,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJF" = ( +"bGW" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50235,7 +49119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJG" = ( +"bGX" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50256,7 +49140,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJH" = ( +"bGY" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "Engine Room"; @@ -50278,7 +49162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJI" = ( +"bGZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50298,7 +49182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJJ" = ( +"bHa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50322,7 +49206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJK" = ( +"bHb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50336,7 +49220,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJL" = ( +"bHc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -50355,22 +49239,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engineering) -"bJN" = ( +"bHd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50394,7 +49263,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJO" = ( +"bHe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50409,7 +49278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJP" = ( +"bHf" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -50433,7 +49302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJQ" = ( +"bHg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50450,7 +49319,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJR" = ( +"bHh" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -50469,7 +49338,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJS" = ( +"bHi" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -50485,7 +49354,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJT" = ( +"bHj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50505,7 +49374,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJU" = ( +"bHk" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "Engine Room"; @@ -50530,7 +49399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJV" = ( +"bHl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50551,7 +49420,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJW" = ( +"bHm" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50569,7 +49438,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJX" = ( +"bHn" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -50587,7 +49456,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJY" = ( +"bHo" = ( /obj/machinery/vending/cigarette, /obj/machinery/light{ dir = 4 @@ -50602,12 +49471,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJZ" = ( +"bHp" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bKa" = ( +"bHq" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -50616,14 +49485,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKb" = ( +"bHr" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKc" = ( +"bHs" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -50632,7 +49501,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKd" = ( +"bHt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -50640,7 +49509,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKe" = ( +"bHu" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -50654,7 +49523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKf" = ( +"bHv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -50662,7 +49531,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKg" = ( +"bHw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -50673,19 +49542,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bKh" = ( +"bHx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bKi" = ( +"bHy" = ( /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bKj" = ( +"bHz" = ( /obj/structure/table, /obj/item/weapon/folder/white, /obj/item/weapon/gun/syringe, @@ -50698,7 +49567,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bKk" = ( +"bHA" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/o2{ pixel_x = 3; @@ -50718,7 +49587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bKl" = ( +"bHB" = ( /obj/structure/table, /obj/item/device/radio/intercom, /obj/item/weapon/storage/firstaid/toxin{ @@ -50734,7 +49603,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bKm" = ( +"bHC" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/fire{ pixel_x = 3; @@ -50754,7 +49623,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bKn" = ( +"bHD" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/brute{ pixel_x = 3; @@ -50776,14 +49645,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bKo" = ( +"bHE" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bKp" = ( +"bHF" = ( /obj/structure/closet/secure_closet/medical1, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -50795,7 +49664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKq" = ( +"bHG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -50804,7 +49673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKr" = ( +"bHH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -50817,7 +49686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKs" = ( +"bHI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -50832,7 +49701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKt" = ( +"bHJ" = ( /obj/machinery/dna_scannernew, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -50841,7 +49710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKu" = ( +"bHK" = ( /obj/machinery/light/small{ dir = 8 }, @@ -50849,7 +49718,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKv" = ( +"bHL" = ( /obj/structure/disposalpipe/junction{ tag = "icon-pipe-j2 (WEST)"; icon_state = "pipe-j2"; @@ -50861,7 +49730,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKw" = ( +"bHM" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -50875,14 +49744,14 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKx" = ( +"bHN" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKy" = ( +"bHO" = ( /obj/item/chair, /obj/machinery/light/small{ dir = 4 @@ -50893,7 +49762,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKz" = ( +"bHP" = ( /obj/structure/weightlifter, /obj/structure/extinguisher_cabinet{ pixel_x = -24 @@ -50902,18 +49771,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKA" = ( +"bHQ" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKB" = ( +"bHR" = ( /obj/structure/stacklifter, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKC" = ( +"bHS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -50921,7 +49790,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKD" = ( +"bHT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50930,7 +49799,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKE" = ( +"bHU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50940,7 +49809,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKF" = ( +"bHV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50949,7 +49818,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKG" = ( +"bHW" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/chair/office/dark, /obj/effect/landmark/start/assistant, @@ -50958,7 +49827,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKH" = ( +"bHX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50971,7 +49840,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKI" = ( +"bHY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50979,7 +49848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKJ" = ( +"bHZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -50990,7 +49859,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bKK" = ( +"bIa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50998,7 +49867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bKL" = ( +"bIb" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -51009,7 +49878,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKM" = ( +"bIc" = ( /obj/structure/chair/comfy/brown{ dir = 1 }, @@ -51017,7 +49886,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKN" = ( +"bId" = ( /obj/structure/destructible/cult/tome, /obj/item/clothing/under/suit_jacket/red, /obj/item/weapon/book/codex_gigas, @@ -51025,12 +49894,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKO" = ( +"bIe" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKP" = ( +"bIf" = ( /obj/machinery/door/window{ dir = 8; icon_state = "right"; @@ -51043,7 +49912,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKQ" = ( +"bIg" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -51062,27 +49931,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKR" = ( +"bIh" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library{ name = "Lounge" }) -"bKS" = ( -/obj/structure/chair/comfy/black{ - tag = "icon-comfychair (NORTH)"; - icon_state = "comfychair"; - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/grimy{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library{ - name = "Lounge" - }) -"bKT" = ( +"bIi" = ( /obj/structure/table/wood, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -51090,7 +49946,7 @@ /area/library{ name = "Lounge" }) -"bKU" = ( +"bIj" = ( /obj/structure/chair/comfy/black{ tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; @@ -51102,7 +49958,7 @@ /area/library{ name = "Lounge" }) -"bKV" = ( +"bIk" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 28 }, @@ -51112,20 +49968,7 @@ /area/library{ name = "Lounge" }) -"bKW" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/grille, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bKX" = ( +"bIl" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -51135,7 +49978,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bKY" = ( +"bIm" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -51145,13 +49988,13 @@ dir = 5 }, /area/atmos) -"bKZ" = ( +"bIn" = ( /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/atmos) -"bLa" = ( +"bIo" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "Atmospherics Storage"; @@ -51162,7 +50005,7 @@ dir = 5 }, /area/atmos) -"bLb" = ( +"bIp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -51172,7 +50015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLc" = ( +"bIq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -51182,7 +50025,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLd" = ( +"bIr" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -51192,7 +50035,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLe" = ( +"bIs" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -51210,13 +50053,13 @@ dir = 6 }, /area/atmos) -"bLf" = ( +"bIt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLg" = ( +"bIu" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel/yellow/side{ @@ -51226,7 +50069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLh" = ( +"bIv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51238,7 +50081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLi" = ( +"bIw" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -51247,7 +50090,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLj" = ( +"bIx" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -51259,7 +50102,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLk" = ( +"bIy" = ( /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -51267,20 +50110,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLl" = ( +"bIz" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLm" = ( +"bIA" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLn" = ( +"bIB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -51292,12 +50135,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLo" = ( +"bIC" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLp" = ( +"bID" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51309,7 +50152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLq" = ( +"bIE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -51320,7 +50163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLr" = ( +"bIF" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ d1 = 1; @@ -51331,7 +50174,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLs" = ( +"bIG" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = -4; @@ -51345,7 +50188,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLt" = ( +"bIH" = ( /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; icon_state = "yellow"; @@ -51353,7 +50196,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLu" = ( +"bII" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -51365,7 +50208,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLv" = ( +"bIJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -51373,7 +50216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLw" = ( +"bIK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51386,7 +50229,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLx" = ( +"bIL" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/stack/packageWrap, @@ -51398,7 +50241,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLy" = ( +"bIM" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -51408,12 +50251,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bLz" = ( +"bIN" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bLA" = ( +"bIO" = ( /obj/machinery/light/small{ dir = 4 }, @@ -51423,7 +50266,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bLB" = ( +"bIP" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -51438,13 +50281,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bLC" = ( +"bIQ" = ( /obj/structure/closet/secure_closet/chemical, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLD" = ( +"bIR" = ( /obj/structure/table/glass, /obj/item/hand_labeler_refill, /obj/item/hand_labeler_refill, @@ -51455,7 +50298,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLE" = ( +"bIS" = ( /obj/structure/table/glass, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, @@ -51464,7 +50307,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLF" = ( +"bIT" = ( /obj/structure/table/glass, /obj/item/weapon/reagent_containers/glass/bottle/epinephrine, /obj/item/stack/sheet/mineral/plasma{ @@ -51484,7 +50327,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLG" = ( +"bIU" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -51493,14 +50336,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLH" = ( +"bIV" = ( /obj/structure/table/glass, /obj/machinery/reagentgrinder, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLI" = ( +"bIW" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/syringes, /obj/item/clothing/glasses/science{ @@ -51512,7 +50355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLJ" = ( +"bIX" = ( /obj/structure/table/glass, /obj/item/weapon/grenade/chem_grenade, /obj/item/weapon/grenade/chem_grenade, @@ -51527,13 +50370,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLK" = ( +"bIY" = ( /obj/structure/closet/wardrobe/chemistry_white, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLL" = ( +"bIZ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -51542,7 +50385,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLM" = ( +"bJa" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = null; name = "Medbay Storage"; @@ -51554,7 +50397,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLN" = ( +"bJb" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -51562,7 +50405,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLO" = ( +"bJc" = ( /obj/structure/table, /obj/structure/bedsheetbin{ pixel_x = 2 @@ -51576,18 +50419,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLP" = ( +"bJd" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLQ" = ( +"bJe" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLR" = ( +"bJf" = ( /obj/structure/closet/secure_closet/personal/patient, /obj/machinery/requests_console{ department = "Genetics"; @@ -51600,18 +50443,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bLS" = ( +"bJg" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bLT" = ( +"bJh" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bLU" = ( +"bJi" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -51625,7 +50468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bLV" = ( +"bJj" = ( /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; @@ -51633,7 +50476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bLW" = ( +"bJk" = ( /obj/machinery/door/window/westleft{ name = "Monkey Pen"; req_access_txt = "9" @@ -51643,12 +50486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bLX" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/genetics) -"bLY" = ( +"bJl" = ( /obj/structure/disposalpipe/segment, /obj/structure/girder, /obj/structure/grille, @@ -51658,7 +50496,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bLZ" = ( +"bJm" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -51671,7 +50509,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bMa" = ( +"bJn" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -51686,7 +50524,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bMb" = ( +"bJo" = ( /obj/structure/grille/broken, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -51694,7 +50532,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bMc" = ( +"bJp" = ( /obj/structure/table, /obj/item/weapon/storage/fancy/cigarettes, /obj/effect/spawner/lootdrop/maintenance, @@ -51702,7 +50540,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bMd" = ( +"bJq" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/astplate{ @@ -51711,7 +50549,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bMe" = ( +"bJr" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -51721,26 +50559,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bMf" = ( +"bJs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bMg" = ( +"bJt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bMh" = ( +"bJu" = ( /obj/structure/table, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/crew_quarters/fitness) -"bMi" = ( +"bJv" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -51752,7 +50590,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bMj" = ( +"bJw" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -51760,7 +50598,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bMk" = ( +"bJx" = ( /obj/machinery/light/small, /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (WEST)"; @@ -51769,23 +50607,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMl" = ( +"bJy" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMm" = ( +"bJz" = ( /turf/open/floor/plasteel/chapel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMn" = ( +"bJA" = ( /obj/structure/table/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMo" = ( +"bJB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -51793,7 +50631,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMp" = ( +"bJC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51806,7 +50644,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMq" = ( +"bJD" = ( /obj/machinery/door/airlock/glass{ name = "Library" }, @@ -51820,7 +50658,7 @@ /area/library{ name = "Lounge" }) -"bMr" = ( +"bJE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51830,7 +50668,7 @@ /area/library{ name = "Lounge" }) -"bMs" = ( +"bJF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51840,7 +50678,7 @@ /area/library{ name = "Lounge" }) -"bMt" = ( +"bJG" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -51855,7 +50693,7 @@ /area/library{ name = "Lounge" }) -"bMu" = ( +"bJH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -51868,7 +50706,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bMv" = ( +"bJI" = ( /obj/effect/turf_decal/delivery, /obj/machinery/camera{ c_tag = "Atmospherics Storage"; @@ -51881,7 +50719,7 @@ dir = 5 }, /area/atmos) -"bMw" = ( +"bJJ" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -51889,7 +50727,7 @@ dir = 5 }, /area/atmos) -"bMx" = ( +"bJK" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -51897,7 +50735,7 @@ dir = 5 }, /area/atmos) -"bMy" = ( +"bJL" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -51905,7 +50743,7 @@ dir = 5 }, /area/atmos) -"bMz" = ( +"bJM" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 5 }, @@ -51913,7 +50751,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bMA" = ( +"bJN" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 10 }, @@ -51921,7 +50759,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bMB" = ( +"bJO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -51929,13 +50767,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bMC" = ( +"bJP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bMD" = ( +"bJQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51954,7 +50792,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bME" = ( +"bJR" = ( /obj/machinery/camera{ c_tag = "Engineering West"; dir = 4; @@ -51969,14 +50807,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMF" = ( +"bJS" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMG" = ( +"bJT" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = -4; @@ -51997,7 +50835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMH" = ( +"bJU" = ( /obj/structure/table, /obj/item/weapon/book/manual/wiki/engineering_construction, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -52008,7 +50846,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMI" = ( +"bJV" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -52017,7 +50855,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMJ" = ( +"bJW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -52029,13 +50867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMK" = ( -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engineering) -"bML" = ( +"bJX" = ( /obj/structure/disposalpipe/segment, /obj/structure/table, /obj/structure/cable/yellow{ @@ -52048,13 +50880,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMM" = ( +"bJY" = ( /obj/structure/table, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMN" = ( +"bJZ" = ( /obj/structure/table, /obj/item/clothing/head/welding, /obj/item/clothing/head/welding, @@ -52063,7 +50895,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMO" = ( +"bKa" = ( /obj/structure/closet/secure_closet/engineering_personal, /obj/item/weapon/pickaxe/mini, /obj/machinery/camera{ @@ -52079,7 +50911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMP" = ( +"bKb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -52095,13 +50927,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bMQ" = ( +"bKc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bMR" = ( +"bKd" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -52112,7 +50944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bMS" = ( +"bKe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -52121,7 +50953,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMT" = ( +"bKf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -52131,7 +50963,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMU" = ( +"bKg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -52139,7 +50971,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMV" = ( +"bKh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -52149,13 +50981,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMW" = ( -/obj/effect/landmark/start/medical_doctor, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay2) -"bMX" = ( +"bKi" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -52164,7 +50990,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMY" = ( +"bKj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52173,7 +50999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMZ" = ( +"bKk" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -52192,7 +51018,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bNa" = ( +"bKl" = ( /obj/structure/closet/wardrobe/genetics_white, /obj/machinery/light{ icon_state = "tube1"; @@ -52202,7 +51028,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bNb" = ( +"bKm" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -52211,7 +51037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bNc" = ( +"bKn" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -52229,7 +51055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bNd" = ( +"bKo" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small{ dir = 8 @@ -52244,7 +51070,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNe" = ( +"bKp" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -52256,7 +51082,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNf" = ( +"bKq" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -52270,13 +51096,13 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNg" = ( +"bKr" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bNh" = ( +"bKs" = ( /obj/structure/weightlifter, /obj/machinery/camera{ c_tag = "Fitness West"; @@ -52287,14 +51113,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bNi" = ( +"bKt" = ( /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bNj" = ( +"bKu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -52302,7 +51128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bNk" = ( +"bKv" = ( /obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ @@ -52311,7 +51137,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bNl" = ( +"bKw" = ( /obj/machinery/door/airlock/glass{ name = "Fitness Area" }, @@ -52320,7 +51146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bNm" = ( +"bKx" = ( /obj/machinery/door/morgue{ name = "Private Study"; req_access_txt = "37" @@ -52329,13 +51155,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bNn" = ( +"bKy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bNo" = ( +"bKz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -52348,7 +51174,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bNp" = ( +"bKA" = ( /obj/machinery/door/airlock/glass{ name = "Library" }, @@ -52367,7 +51193,7 @@ /area/library{ name = "Lounge" }) -"bNq" = ( +"bKB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -52382,7 +51208,7 @@ /area/library{ name = "Lounge" }) -"bNr" = ( +"bKC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -52397,7 +51223,7 @@ /area/library{ name = "Lounge" }) -"bNs" = ( +"bKD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -52409,7 +51235,7 @@ /area/library{ name = "Lounge" }) -"bNt" = ( +"bKE" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 4; @@ -52422,24 +51248,7 @@ /area/library{ name = "Lounge" }) -"bNu" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"bNv" = ( +"bKF" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, @@ -52447,7 +51256,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNw" = ( +"bKG" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 8 @@ -52456,7 +51265,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNx" = ( +"bKH" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 10 @@ -52468,14 +51277,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNy" = ( +"bKI" = ( /obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNz" = ( +"bKJ" = ( /mob/living/simple_animal/pet/dog/pug{ desc = "It's Spaghetti, the official pug of Atmospherics. Appropriately named after the jumbled mess of piping."; name = "Spaghetti" @@ -52484,7 +51293,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNA" = ( +"bKK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -52501,7 +51310,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNB" = ( +"bKL" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -52510,7 +51319,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNC" = ( +"bKM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -52518,7 +51327,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bND" = ( +"bKN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -52533,7 +51342,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNE" = ( +"bKO" = ( /obj/structure/reagent_dispensers/watertank/high, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -52542,13 +51351,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNF" = ( +"bKP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNG" = ( +"bKQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52562,7 +51371,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bNH" = ( +"bKR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52571,13 +51380,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bNI" = ( +"bKS" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bNJ" = ( +"bKT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -52585,26 +51394,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bNK" = ( +"bKU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bNL" = ( -/obj/machinery/suit_storage_unit/ce, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/westright{ - name = "Chief Engineer's Hardsuit"; - req_access_txt = "56" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engineering) -"bNM" = ( +"bKV" = ( /obj/structure/closet/radiation, /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; @@ -52616,7 +51412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNN" = ( +"bKW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -52630,7 +51426,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNO" = ( +"bKX" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -52641,7 +51437,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNP" = ( +"bKY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -52649,7 +51445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNQ" = ( +"bKZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -52663,19 +51459,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNR" = ( +"bLa" = ( /obj/machinery/gravity_generator/main/station, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNS" = ( +"bLb" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bNT" = ( +"bLc" = ( /obj/machinery/light/small{ dir = 8 }, @@ -52683,28 +51479,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bNU" = ( +"bLd" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bNV" = ( -/obj/machinery/door/airlock/maintenance{ +/area/hallway/primary/starboard) +"bLe" = ( +/obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access"; req_access_txt = "12" }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bNW" = ( +/area/hallway/primary/starboard) +"bLf" = ( /obj/machinery/light/small{ dir = 1 }, @@ -52717,7 +51509,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNX" = ( +"bLg" = ( /obj/machinery/power/apc{ dir = 1; name = "Chemistry APC"; @@ -52733,24 +51525,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bNY" = ( +"bLh" = ( /obj/structure/plasticflaps, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bNZ" = ( +"bLi" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOa" = ( -/obj/structure/closet/secure_closet/medical3, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay2) -"bOb" = ( +"bLj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -52762,7 +51548,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOc" = ( +"bLk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52773,7 +51559,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOd" = ( +"bLl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52785,7 +51571,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOe" = ( +"bLm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52797,7 +51583,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOf" = ( +"bLn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52809,7 +51595,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOg" = ( +"bLo" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -52828,7 +51614,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOh" = ( +"bLp" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/disks{ pixel_x = 2; @@ -52838,7 +51624,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOi" = ( +"bLq" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/rxglasses, /obj/machinery/firealarm{ @@ -52849,7 +51635,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOj" = ( +"bLr" = ( /obj/structure/table/glass, /obj/item/weapon/folder/white, /obj/item/device/radio/headset/headset_medsci, @@ -52869,7 +51655,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOk" = ( +"bLs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -52880,7 +51666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOl" = ( +"bLt" = ( /obj/machinery/dna_scannernew, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (SOUTHEAST)"; @@ -52889,7 +51675,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOm" = ( +"bLu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -52905,7 +51691,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOn" = ( +"bLv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52915,7 +51701,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOo" = ( +"bLw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52924,7 +51710,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOp" = ( +"bLx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52935,21 +51721,19 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOq" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bLy" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bOr" = ( +/area/hallway/primary/starboard) +"bLz" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -52963,7 +51747,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOs" = ( +"bLA" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -52974,7 +51758,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOt" = ( +"bLB" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -52988,7 +51772,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOu" = ( +"bLC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -52997,7 +51781,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOv" = ( +"bLD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -53015,7 +51799,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bOw" = ( +"bLE" = ( /obj/machinery/power/apc{ dir = 4; name = "Fitness APC"; @@ -53035,7 +51819,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOx" = ( +"bLF" = ( /obj/machinery/light{ dir = 8 }, @@ -53046,13 +51830,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOy" = ( +"bLG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOz" = ( +"bLH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -53060,7 +51844,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOA" = ( +"bLI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -53068,7 +51852,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOB" = ( +"bLJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -53077,7 +51861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOC" = ( +"bLK" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -53088,7 +51872,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOD" = ( +"bLL" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -53101,7 +51885,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bOE" = ( +"bLM" = ( /obj/structure/table/wood, /obj/machinery/computer/libraryconsole/bookmanagement{ pixel_y = 0 @@ -53113,7 +51897,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bOF" = ( +"bLN" = ( /obj/machinery/light{ dir = 1 }, @@ -53122,13 +51906,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bOG" = ( +"bLO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bOH" = ( +"bLP" = ( /obj/machinery/light{ dir = 8 }, @@ -53138,7 +51922,7 @@ /area/library{ name = "Lounge" }) -"bOI" = ( +"bLQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53146,7 +51930,7 @@ /area/library{ name = "Lounge" }) -"bOJ" = ( +"bLR" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/assistant, /turf/open/floor/wood{ @@ -53155,7 +51939,7 @@ /area/library{ name = "Lounge" }) -"bOK" = ( +"bLS" = ( /obj/structure/chair/office/dark, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53163,7 +51947,7 @@ /area/library{ name = "Lounge" }) -"bOL" = ( +"bLT" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-22" }, @@ -53173,24 +51957,24 @@ /area/library{ name = "Lounge" }) -"bOM" = ( +"bLU" = ( /obj/structure/grille, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bON" = ( +"bLV" = ( /obj/machinery/pipedispenser/disposal/transit_tube, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOO" = ( +"bLW" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOP" = ( +"bLX" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -53203,7 +51987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOQ" = ( +"bLY" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Canister To Waste"; @@ -53217,7 +52001,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOR" = ( +"bLZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -53235,7 +52019,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOS" = ( +"bMa" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -53250,14 +52034,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOT" = ( +"bMb" = ( /obj/machinery/light/small, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOU" = ( +"bMc" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -53270,7 +52054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOV" = ( +"bMd" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -53279,7 +52063,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOW" = ( +"bMe" = ( /obj/machinery/vending/engivend, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (SOUTHWEST)"; @@ -53288,7 +52072,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bOX" = ( +"bMf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -53296,11 +52080,14 @@ icon_state = "0-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ceoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bOY" = ( +"bMg" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -53313,11 +52100,14 @@ icon_state = "4-8"; pixel_x = 0 }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ceoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bOZ" = ( +"bMh" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -53338,11 +52128,14 @@ icon_state = "4-8"; pixel_x = 0 }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ceoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bPa" = ( +"bMi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53350,7 +52143,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPb" = ( +"bMj" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -53359,15 +52152,18 @@ icon_state = "0-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ceoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bPc" = ( +"bMk" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/crew_quarters/chief) -"bPd" = ( +"bMl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -53389,7 +52185,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPe" = ( +"bMm" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -53405,7 +52201,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPf" = ( +"bMn" = ( /obj/machinery/light, /obj/structure/rack, /obj/item/weapon/pickaxe/mini, @@ -53421,7 +52217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPg" = ( +"bMo" = ( /obj/structure/rack, /obj/item/clothing/gloves/color/black, /obj/item/clothing/gloves/color/black, @@ -53444,7 +52240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPh" = ( +"bMp" = ( /obj/structure/rack, /obj/item/clothing/glasses/meson/engine, /obj/item/clothing/glasses/meson/engine, @@ -53457,7 +52253,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPi" = ( +"bMq" = ( /obj/structure/rack, /obj/item/weapon/storage/belt/utility, /obj/item/weapon/storage/belt/utility, @@ -53472,7 +52268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPj" = ( +"bMr" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -53485,7 +52281,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPk" = ( +"bMs" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (SOUTHEAST)"; @@ -53494,7 +52290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPl" = ( +"bMt" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -53509,7 +52305,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPm" = ( +"bMu" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -53521,7 +52317,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPn" = ( +"bMv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53535,7 +52331,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPo" = ( +"bMw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53554,7 +52350,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPp" = ( +"bMx" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -53577,7 +52373,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPq" = ( +"bMy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -53594,7 +52390,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPr" = ( +"bMz" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -53613,7 +52409,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPs" = ( +"bMA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -53631,13 +52427,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPt" = ( +"bMB" = ( /obj/structure/grille/broken, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bPu" = ( +"bMC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -53652,22 +52448,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bMD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPw" = ( +"bME" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -53681,7 +52477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPx" = ( +"bMF" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -53690,7 +52486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPy" = ( +"bMG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -53706,11 +52502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPz" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"bMH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -53723,13 +52515,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bPA" = ( +/area/hallway/primary/starboard) +"bMI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -53747,10 +52541,8 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bPB" = ( +/area/hallway/primary/starboard) +"bMJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53758,7 +52550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPC" = ( +"bMK" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53768,22 +52560,8 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bPD" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Maintenance Access"; - req_access_txt = "12" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, /area/hallway/primary/starboard) -"bPE" = ( +"bML" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53796,7 +52574,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPF" = ( +"bMM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -53811,7 +52589,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPG" = ( +"bMN" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -53827,7 +52605,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPH" = ( +"bMO" = ( /obj/structure/table, /obj/item/weapon/storage/box/beakers{ pixel_x = 2; @@ -53850,7 +52628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPI" = ( +"bMP" = ( /obj/structure/table, /obj/item/weapon/storage/belt/medical{ pixel_x = 0; @@ -53873,7 +52651,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPJ" = ( +"bMQ" = ( /obj/structure/table, /obj/item/weapon/hand_labeler, /obj/item/weapon/gun/syringe, @@ -53881,7 +52659,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPK" = ( +"bMR" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/spray/cleaner, /obj/item/clothing/glasses/hud/health, @@ -53891,7 +52669,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPL" = ( +"bMS" = ( /obj/structure/table, /obj/item/weapon/storage/box/bodybags{ pixel_x = 3; @@ -53904,7 +52682,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPM" = ( +"bMT" = ( /obj/structure/closet/l3closet, /obj/machinery/camera{ c_tag = "Medbay Storage"; @@ -53916,13 +52694,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPN" = ( +"bMU" = ( /obj/structure/closet/wardrobe/white/medical, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPO" = ( +"bMV" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -53931,7 +52709,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPP" = ( +"bMW" = ( /obj/machinery/door/airlock/maintenance{ name = "Genetics Research"; req_access_txt = "9" @@ -53946,7 +52724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bPQ" = ( +"bMX" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -53957,7 +52735,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPR" = ( +"bMY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -53973,7 +52751,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPS" = ( +"bMZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53984,7 +52762,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPT" = ( +"bNa" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -53998,7 +52776,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPU" = ( +"bNb" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -54009,7 +52787,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPV" = ( +"bNc" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -54024,7 +52802,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPW" = ( +"bNd" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -54037,20 +52815,13 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bPX" = ( +"bNe" = ( /obj/structure/weightlifter, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bPY" = ( -/obj/structure/stacklifter, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/fitness) -"bPZ" = ( +"bNf" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -54058,7 +52829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bQa" = ( +"bNg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -54067,7 +52838,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bQb" = ( +"bNh" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -54075,39 +52846,39 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bQc" = ( +"bNi" = ( /obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bQd" = ( +"bNj" = ( /obj/machinery/libraryscanner, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bQe" = ( +"bNk" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/librarian, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bQf" = ( +"bNl" = ( /obj/machinery/holopad, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bQg" = ( +"bNm" = ( /obj/structure/table/wood, /obj/item/device/camera_film, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bQh" = ( +"bNn" = ( /obj/structure/table/wood, /obj/machinery/computer/libraryconsole, /turf/open/floor/wood{ @@ -54116,7 +52887,7 @@ /area/library{ name = "Lounge" }) -"bQi" = ( +"bNo" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, /turf/open/floor/wood{ @@ -54125,7 +52896,7 @@ /area/library{ name = "Lounge" }) -"bQj" = ( +"bNp" = ( /obj/structure/table/wood, /obj/item/weapon/folder/blue, /turf/open/floor/wood{ @@ -54134,7 +52905,7 @@ /area/library{ name = "Lounge" }) -"bQk" = ( +"bNq" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -54147,7 +52918,7 @@ /area/library{ name = "Lounge" }) -"bQl" = ( +"bNr" = ( /obj/machinery/camera{ c_tag = "Library East"; dir = 9; @@ -54159,7 +52930,7 @@ /area/library{ name = "Lounge" }) -"bQm" = ( +"bNs" = ( /obj/machinery/power/apc{ dir = 8; name = "Lounge APC"; @@ -54183,10 +52954,10 @@ /area/library{ name = "Lounge" }) -"bQn" = ( +"bNt" = ( /turf/open/floor/engine/n2, /area/atmos) -"bQo" = ( +"bNu" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 4; frequency = 1441; @@ -54194,7 +52965,7 @@ }, /turf/open/floor/engine/n2, /area/atmos) -"bQp" = ( +"bNv" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/green/visible{ @@ -54204,7 +52975,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQq" = ( +"bNw" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -54212,7 +52983,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQr" = ( +"bNx" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; filter_type = "n2"; @@ -54226,7 +52997,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQs" = ( +"bNy" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; @@ -54235,7 +53006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQt" = ( +"bNz" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Atmos To Chamber"; @@ -54246,13 +53017,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQu" = ( +"bNA" = ( /obj/machinery/holopad, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQv" = ( +"bNB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -54267,7 +53038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQw" = ( +"bNC" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -54283,7 +53054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQx" = ( +"bND" = ( /obj/machinery/computer/card/minor/ce, /obj/machinery/button/door{ id = "engiestoragesmes"; @@ -54299,18 +53070,25 @@ pixel_y = 8; req_access_txt = "10;11" }, +/obj/machinery/button/door{ + id = "ceoffice"; + name = "Office Emergency Lockdown"; + pixel_x = -24; + pixel_y = -8; + req_access_txt = "10;11" + }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bQy" = ( +"bNE" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bQz" = ( +"bNF" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -54321,7 +53099,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bQA" = ( +"bNG" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "SMES Room"; @@ -54339,12 +53117,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQB" = ( +"bNH" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQC" = ( +"bNI" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/yellow{ @@ -54356,7 +53134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQD" = ( +"bNJ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/yellow{ @@ -54373,7 +53151,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQE" = ( +"bNK" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/yellow{ @@ -54401,7 +53179,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQF" = ( +"bNL" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -54420,7 +53198,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQG" = ( +"bNM" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -54429,19 +53207,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQH" = ( +"bNN" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQI" = ( +"bNO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bQJ" = ( +"bNP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -54451,7 +53229,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bQK" = ( +"bNQ" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -54460,7 +53238,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bQL" = ( +"bNR" = ( /obj/structure/table, /obj/machinery/light/small{ dir = 4 @@ -54469,7 +53247,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bQM" = ( +"bNS" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54477,7 +53255,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQN" = ( +"bNT" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -54491,7 +53269,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQO" = ( +"bNU" = ( /obj/machinery/door/airlock/maintenance{ name = "Medical Storage"; req_access_txt = "45" @@ -54501,20 +53279,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bQP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/window/brigdoor/northright{ - name = "Chief Medical Officer's Hardsuit"; - req_access_txt = "40" - }, -/obj/machinery/suit_storage_unit/cmo, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay2) -"bQQ" = ( +"bNV" = ( /obj/machinery/power/apc{ dir = 1; name = "Genetics APC"; @@ -54530,7 +53295,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bQR" = ( +"bNW" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -54551,7 +53316,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQS" = ( +"bNX" = ( /obj/machinery/light/small{ dir = 1 }, @@ -54561,7 +53326,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQT" = ( +"bNY" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54569,7 +53334,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQU" = ( +"bNZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -54582,7 +53347,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQV" = ( +"bOa" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -54594,7 +53359,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQW" = ( +"bOb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -54603,7 +53368,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQX" = ( +"bOc" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 1 @@ -54614,7 +53379,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQY" = ( +"bOd" = ( /obj/machinery/light/small{ dir = 4 }, @@ -54630,7 +53395,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bQZ" = ( +"bOe" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -54642,7 +53407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bRa" = ( +"bOf" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -54651,7 +53416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bRb" = ( +"bOg" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -54661,7 +53426,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bRc" = ( +"bOh" = ( /obj/structure/table/wood, /obj/machinery/camera{ c_tag = "Library West"; @@ -54672,21 +53437,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bRd" = ( +"bOi" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/green, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bRe" = ( +"bOj" = ( /obj/structure/table/wood, /obj/item/weapon/pen/fourcolor, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bRf" = ( +"bOk" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -54697,7 +53462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bRg" = ( +"bOl" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -54710,7 +53475,7 @@ /area/library{ name = "Lounge" }) -"bRh" = ( +"bOm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -54723,7 +53488,7 @@ /area/library{ name = "Lounge" }) -"bRi" = ( +"bOn" = ( /obj/structure/table/wood, /obj/item/weapon/storage/pill_bottle/dice, /turf/open/floor/wood{ @@ -54732,7 +53497,7 @@ /area/library{ name = "Lounge" }) -"bRj" = ( +"bOo" = ( /obj/structure/table/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54740,7 +53505,7 @@ /area/library{ name = "Lounge" }) -"bRk" = ( +"bOp" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck/cas, /obj/item/toy/cards/deck/cas/black, @@ -54750,7 +53515,7 @@ /area/library{ name = "Lounge" }) -"bRl" = ( +"bOq" = ( /obj/machinery/photocopier, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -54758,29 +53523,29 @@ /area/library{ name = "Lounge" }) -"bRm" = ( +"bOr" = ( /obj/machinery/light/small{ dir = 8 }, /turf/open/floor/engine/n2, /area/atmos) -"bRn" = ( +"bOs" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2, /area/atmos) -"bRo" = ( +"bOt" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "n2_sensor" }, /turf/open/floor/engine/n2, /area/atmos) -"bRp" = ( +"bOu" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, /area/atmos) -"bRq" = ( +"bOv" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "n2_in"; @@ -54793,7 +53558,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRr" = ( +"bOw" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 5 @@ -54805,13 +53570,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRs" = ( +"bOx" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRt" = ( +"bOy" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -54819,7 +53584,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRu" = ( +"bOz" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -54832,7 +53597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRv" = ( +"bOA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54845,7 +53610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRw" = ( +"bOB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54863,7 +53628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRx" = ( +"bOC" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54880,7 +53645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRy" = ( +"bOD" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -54895,7 +53660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRz" = ( +"bOE" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -54904,13 +53669,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRA" = ( +"bOF" = ( /obj/machinery/suit_storage_unit/atmos, /turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRB" = ( +"bOG" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -54930,7 +53695,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRC" = ( +"bOH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54958,7 +53723,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRD" = ( +"bOI" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54975,7 +53740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRE" = ( +"bOJ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -54993,7 +53758,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRF" = ( +"bOK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55008,7 +53773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRG" = ( +"bOL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55023,7 +53788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRH" = ( +"bOM" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -55043,7 +53808,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRI" = ( +"bON" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ icon_state = "0-4"; @@ -55062,7 +53827,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRJ" = ( +"bOO" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ d1 = 4; @@ -55078,7 +53843,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRK" = ( +"bOP" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ d1 = 4; @@ -55097,7 +53862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRL" = ( +"bOQ" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ d1 = 4; @@ -55116,7 +53881,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRM" = ( +"bOR" = ( /obj/machinery/computer/station_alert, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -55138,7 +53903,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRN" = ( +"bOS" = ( /obj/machinery/modular_computer/console/preset/engineering, /obj/structure/cable{ d2 = 8; @@ -55148,7 +53913,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRO" = ( +"bOT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/sign/securearea{ @@ -55163,7 +53928,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bRP" = ( +"bOU" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -55175,7 +53940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bRQ" = ( +"bOV" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -55185,7 +53950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bRR" = ( +"bOW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -55203,19 +53968,15 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bRS" = ( +/area/hallway/primary/starboard) +"bOX" = ( /obj/structure/table, /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bRT" = ( +/area/hallway/primary/starboard) +"bOY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -55231,7 +53992,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRU" = ( +"bOZ" = ( /obj/machinery/power/apc{ dir = 1; name = "Medbay Storage APC"; @@ -55247,7 +54008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bRV" = ( +"bPa" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55258,7 +54019,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRW" = ( +"bPb" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -55266,7 +54027,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRX" = ( +"bPc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -55282,7 +54043,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRY" = ( +"bPd" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -55293,7 +54054,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRZ" = ( +"bPe" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -55301,14 +54062,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bSa" = ( -/obj/structure/weightlifter, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/fitness) -"bSb" = ( +"bPf" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -55316,18 +54070,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSc" = ( +"bPg" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSd" = ( +"bPh" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSe" = ( +"bPi" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -55335,7 +54089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSf" = ( +"bPj" = ( /obj/structure/chair{ dir = 8 }, @@ -55343,7 +54097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSg" = ( +"bPk" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -55352,7 +54106,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSh" = ( +"bPl" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, @@ -55365,7 +54119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bSi" = ( +"bPm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55373,7 +54127,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bSj" = ( +"bPn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -55388,7 +54142,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bSk" = ( +"bPo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55404,7 +54158,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSl" = ( +"bPp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55412,7 +54166,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSm" = ( +"bPq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55421,7 +54175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSn" = ( +"bPr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -55438,7 +54192,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSo" = ( +"bPs" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = 0; @@ -55451,7 +54205,7 @@ /area/library{ name = "Lounge" }) -"bSp" = ( +"bPt" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -55461,7 +54215,7 @@ /area/library{ name = "Lounge" }) -"bSq" = ( +"bPu" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -55472,7 +54226,7 @@ /area/library{ name = "Lounge" }) -"bSr" = ( +"bPv" = ( /obj/machinery/light, /obj/machinery/bookbinder, /turf/open/floor/wood{ @@ -55481,7 +54235,7 @@ /area/library{ name = "Lounge" }) -"bSs" = ( +"bPw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -55493,7 +54247,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bSt" = ( +"bPx" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -55505,7 +54259,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bSu" = ( +"bPy" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -55513,7 +54267,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bSv" = ( +"bPz" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; external_pressure_bound = 0; @@ -55528,7 +54282,7 @@ }, /turf/open/floor/engine/n2, /area/atmos) -"bSw" = ( +"bPA" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -55538,7 +54292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSx" = ( +"bPB" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, @@ -55546,7 +54300,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSy" = ( +"bPC" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -55554,7 +54308,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSz" = ( +"bPD" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -55568,7 +54322,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSA" = ( +"bPE" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -55579,7 +54333,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSB" = ( +"bPF" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 10; initialize_directions = 10 @@ -55589,7 +54343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSC" = ( +"bPG" = ( /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; icon_state = "yellow"; @@ -55597,14 +54351,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSD" = ( +"bPH" = ( /obj/machinery/status_display{ density = 0; layer = 4 }, /turf/closed/wall, /area/atmos) -"bSE" = ( +"bPI" = ( /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -55612,13 +54366,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSF" = ( +"bPJ" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSG" = ( +"bPK" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -55627,13 +54381,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSH" = ( +"bPL" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSI" = ( +"bPM" = ( /obj/machinery/light/small{ dir = 4 }, @@ -55642,13 +54396,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSJ" = ( +"bPN" = ( /obj/machinery/computer/apc_control, +/obj/machinery/light, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSK" = ( +"bPO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -55663,13 +54418,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSL" = ( +"bPP" = ( /obj/machinery/suit_storage_unit/ce, +/obj/machinery/airalarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSM" = ( +"bPQ" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable{ d1 = 4; @@ -55681,7 +54441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSN" = ( +"bPR" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; icon_state = "plant-21" @@ -55700,7 +54460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSO" = ( +"bPS" = ( /obj/structure/table, /obj/item/weapon/book/manual/engineering_particle_accelerator, /turf/open/floor/plasteel/yellow/side{ @@ -55710,7 +54470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSP" = ( +"bPT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -55722,12 +54482,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSQ" = ( +"bPU" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSR" = ( +"bPV" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -55736,7 +54496,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSS" = ( +"bPW" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -55744,7 +54504,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bST" = ( +"bPX" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 4; @@ -55759,7 +54519,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSU" = ( +"bPY" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -55777,7 +54537,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSV" = ( +"bPZ" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -55790,7 +54550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSW" = ( +"bQa" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -55804,7 +54564,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSX" = ( +"bQb" = ( /obj/machinery/power/apc{ dir = 4; name = "Engineering SMES Storage APC"; @@ -55819,7 +54579,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSY" = ( +"bQc" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -55829,12 +54589,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bSZ" = ( +"bQd" = ( /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bTa" = ( +"bQe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -55850,7 +54610,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTb" = ( +"bQf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55865,7 +54625,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTc" = ( +"bQg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55881,7 +54641,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTd" = ( +"bQh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55897,7 +54657,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTe" = ( +"bQi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -55912,7 +54672,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTf" = ( +"bQj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55933,7 +54693,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTg" = ( +"bQk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55949,7 +54709,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTh" = ( +"bQl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55967,7 +54727,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTi" = ( +"bQm" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -55985,7 +54745,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTj" = ( +"bQn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56005,7 +54765,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTk" = ( +"bQo" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56021,7 +54781,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTl" = ( +"bQp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -56042,7 +54802,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTm" = ( +"bQq" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -56051,7 +54811,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTn" = ( +"bQr" = ( /obj/machinery/newscaster{ pixel_x = -28; pixel_y = 4 @@ -56063,7 +54823,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bTo" = ( +"bQs" = ( /obj/structure/chair{ dir = 8 }, @@ -56072,7 +54832,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bTp" = ( +"bQt" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -56081,7 +54841,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bTq" = ( +"bQu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -56091,7 +54851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bTr" = ( +"bQv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56104,7 +54864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTs" = ( +"bQw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56112,13 +54872,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTt" = ( +"bQx" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTu" = ( +"bQy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56127,7 +54887,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTv" = ( +"bQz" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -56142,7 +54902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTw" = ( +"bQA" = ( /obj/machinery/door/morgue{ name = "Explicit Section" }, @@ -56152,7 +54912,7 @@ /area/library{ name = "Lounge" }) -"bTx" = ( +"bQB" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -56163,7 +54923,7 @@ /area/library{ name = "Lounge" }) -"bTy" = ( +"bQC" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -56174,14 +54934,14 @@ /area/library{ name = "Lounge" }) -"bTz" = ( +"bQD" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bTA" = ( +"bQE" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, @@ -56198,7 +54958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTB" = ( +"bQF" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -56211,7 +54971,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTC" = ( +"bQG" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 10 @@ -56223,13 +54983,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTD" = ( +"bQH" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTE" = ( +"bQI" = ( /obj/structure/closet/secure_closet/atmospherics, /obj/item/weapon/pickaxe/mini, /turf/open/floor/plasteel/yellow/side{ @@ -56239,7 +54999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTF" = ( +"bQJ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -56247,7 +55007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTG" = ( +"bQK" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ tag = "icon-connector_map (EAST)"; icon_state = "connector_map"; @@ -56258,7 +55018,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTH" = ( +"bQL" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 10 @@ -56267,7 +55027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTI" = ( +"bQM" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Canister To Waste"; @@ -56278,7 +55038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTJ" = ( +"bQN" = ( /obj/structure/fireaxecabinet{ pixel_x = 32 }, @@ -56290,16 +55050,16 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTK" = ( +"bQO" = ( /turf/closed/wall, /area/atmos) -"bTL" = ( +"bQP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/closed/wall, /area/crew_quarters/chief) -"bTM" = ( +"bQQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -56307,7 +55067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bTN" = ( +"bQR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -56315,7 +55075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bTO" = ( +"bQS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -56323,7 +55083,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bTP" = ( +"bQT" = ( /obj/structure/table, /obj/item/weapon/book/manual/wiki/engineering_construction, /obj/item/weapon/book/manual/wiki/engineering_guide, @@ -56337,7 +55097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTQ" = ( +"bQU" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -56349,8 +55109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTR" = ( -/obj/effect/landmark/start/station_engineer, +"bQV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56358,15 +55117,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engine_smes) -"bTT" = ( +"bQW" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -56376,7 +55127,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTU" = ( +"bQX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -56385,7 +55136,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTV" = ( +"bQY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -56397,7 +55148,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTW" = ( +"bQZ" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -56416,7 +55167,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTX" = ( +"bRa" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56424,7 +55175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTY" = ( +"bRb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56444,7 +55195,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTZ" = ( +"bRc" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -56455,7 +55206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUa" = ( +"bRd" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -56463,7 +55214,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bUb" = ( +"bRe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -56474,7 +55225,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bUc" = ( +"bRf" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -56487,7 +55238,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bUd" = ( +"bRg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -56501,10 +55252,8 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bUe" = ( +/area/hallway/primary/starboard) +"bRh" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -56518,7 +55267,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bUf" = ( +"bRi" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -56529,7 +55278,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bUg" = ( +"bRj" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -56537,7 +55286,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bUh" = ( +"bRk" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/light/small{ dir = 8 @@ -56548,7 +55297,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bUi" = ( +"bRl" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -56557,7 +55306,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bUj" = ( +"bRm" = ( /obj/structure/table, /obj/item/weapon/storage/box/cups, /turf/open/floor/plasteel/vault{ @@ -56565,7 +55314,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bUk" = ( +"bRn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -56575,7 +55324,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bUl" = ( +"bRo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -56586,20 +55335,20 @@ dir = 5 }, /area/crew_quarters/fitness) -"bUm" = ( +"bRp" = ( /obj/structure/window/reinforced, /obj/machinery/door/window/westright, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bUn" = ( +"bRq" = ( /obj/structure/window/reinforced, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bUo" = ( +"bRr" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -56608,14 +55357,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bUp" = ( +"bRs" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/brute, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bUq" = ( +"bRt" = ( /obj/structure/noticeboard{ dir = 8; icon_state = "nboard00"; @@ -56627,7 +55376,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bUr" = ( +"bRu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -56642,7 +55391,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bUs" = ( +"bRv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56651,7 +55400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUt" = ( +"bRw" = ( /obj/machinery/light{ dir = 8 }, @@ -56666,7 +55415,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUu" = ( +"bRx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56674,7 +55423,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUv" = ( +"bRy" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; icon_state = "plant-21" @@ -56686,7 +55435,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUw" = ( +"bRz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -56702,7 +55451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUx" = ( +"bRA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -56713,7 +55462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUy" = ( +"bRB" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -56722,7 +55471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUz" = ( +"bRC" = ( /obj/machinery/light/small{ dir = 8 }, @@ -56732,7 +55481,7 @@ /area/library{ name = "Lounge" }) -"bUA" = ( +"bRD" = ( /obj/machinery/light/small{ dir = 4 }, @@ -56742,7 +55491,7 @@ /area/library{ name = "Lounge" }) -"bUB" = ( +"bRE" = ( /obj/machinery/light/small{ dir = 4 }, @@ -56751,12 +55500,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bUC" = ( +"bRF" = ( /turf/open/floor/engine/o2{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUD" = ( +"bRG" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 4; frequency = 1441; @@ -56766,7 +55515,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUE" = ( +"bRH" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; filter_type = "o2"; @@ -56780,14 +55529,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUF" = ( +"bRI" = ( /obj/machinery/atmospherics/pipe/manifold4w/yellow/visible, /obj/machinery/meter, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUG" = ( +"bRJ" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, @@ -56795,7 +55544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUH" = ( +"bRK" = ( /obj/machinery/light{ dir = 1 }, @@ -56808,7 +55557,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUI" = ( +"bRL" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (WEST)"; @@ -56819,7 +55568,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUJ" = ( +"bRM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (WEST)"; icon_state = "intact"; @@ -56832,7 +55581,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUK" = ( +"bRN" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 10; initialize_directions = 10 @@ -56844,7 +55593,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUL" = ( +"bRO" = ( /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; @@ -56853,7 +55602,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUM" = ( +"bRP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -56863,7 +55612,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUN" = ( +"bRQ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Waste to Filter"; @@ -56873,7 +55622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUO" = ( +"bRR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ tag = "icon-manifold (NORTH)"; name = "scrubbers pipe"; @@ -56884,7 +55633,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUP" = ( +"bRS" = ( /obj/machinery/meter{ frequency = 1441; id_tag = "waste_meter"; @@ -56900,13 +55649,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUQ" = ( +"bRT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUR" = ( +"bRU" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 2; @@ -56920,7 +55669,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUS" = ( +"bRV" = ( /obj/machinery/light, /obj/machinery/camera{ c_tag = "Engineering Power Storage 2"; @@ -56937,7 +55686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUT" = ( +"bRW" = ( /obj/machinery/button/door{ id = "engiestoragesmes"; name = "Engineering SMES Blast Door Control"; @@ -56949,13 +55698,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUU" = ( +"bRX" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUV" = ( +"bRY" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /obj/item/weapon/storage/toolbox/electrical{ @@ -56971,19 +55720,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUW" = ( +"bRZ" = ( /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUX" = ( +"bSa" = ( /obj/structure/tank_dispenser, /turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUY" = ( +"bSb" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; @@ -56997,7 +55746,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bUZ" = ( +"bSc" = ( /obj/machinery/suit_storage_unit/engine, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (SOUTHWEST)"; @@ -57006,13 +55755,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVa" = ( +"bSd" = ( /obj/machinery/suit_storage_unit/engine, /turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVb" = ( +"bSe" = ( /obj/machinery/suit_storage_unit/engine, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (SOUTHEAST)"; @@ -57021,7 +55770,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVc" = ( +"bSf" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -57032,7 +55781,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bVd" = ( +"bSg" = ( /obj/machinery/camera{ c_tag = "Medbay Asteroid Hallway 1"; dir = 8; @@ -57043,7 +55792,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bVe" = ( +"bSh" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -57056,10 +55805,8 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"bVf" = ( +/area/hallway/primary/starboard) +"bSi" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -57072,7 +55819,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bVg" = ( +"bSj" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -57081,7 +55828,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVh" = ( +"bSk" = ( /obj/structure/chair, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57089,14 +55836,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVi" = ( +"bSl" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVj" = ( +"bSm" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/cobweb, /obj/item/weapon/coin/silver, @@ -57105,7 +55852,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVk" = ( +"bSn" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -57121,7 +55868,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVl" = ( +"bSo" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -57137,7 +55884,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVm" = ( +"bSp" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light{ dir = 8 @@ -57147,7 +55894,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bVn" = ( +"bSq" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -57156,7 +55903,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bVo" = ( +"bSr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -57166,7 +55913,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bVp" = ( +"bSs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -57177,7 +55924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bVq" = ( +"bSt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -57186,42 +55933,42 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bVr" = ( +"bSu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bVs" = ( +"bSv" = ( /obj/structure/bookcase/random/fiction, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bVt" = ( +"bSw" = ( /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bVu" = ( +"bSx" = ( /obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bVv" = ( +"bSy" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bVw" = ( +"bSz" = ( /obj/structure/bookcase/random/religion, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bVx" = ( +"bSA" = ( /obj/structure/bookcase/random/adult, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57229,7 +55976,7 @@ /area/library{ name = "Lounge" }) -"bVy" = ( +"bSB" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57237,7 +55984,7 @@ /area/library{ name = "Lounge" }) -"bVz" = ( +"bSC" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = 32; @@ -57249,13 +55996,13 @@ /area/library{ name = "Lounge" }) -"bVA" = ( +"bSD" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bVB" = ( +"bSE" = ( /obj/machinery/light/small{ dir = 8 }, @@ -57263,13 +56010,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVC" = ( +"bSF" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/engine/o2{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVD" = ( +"bSG" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "o2_sensor" @@ -57278,7 +56025,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVE" = ( +"bSH" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "o2_in"; @@ -57291,7 +56038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVF" = ( +"bSI" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 9 }, @@ -57299,7 +56046,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVG" = ( +"bSJ" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 5 @@ -57308,16 +56055,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVH" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, -/obj/effect/landmark/start/atmospheric_technician, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bVI" = ( +"bSK" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 1 }, @@ -57325,7 +56063,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVJ" = ( +"bSL" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -57334,7 +56072,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVK" = ( +"bSM" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Mix To Canisters"; @@ -57347,7 +56085,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVL" = ( +"bSN" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -57360,7 +56098,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVM" = ( +"bSO" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2; name = "Mix to Filter"; @@ -57370,7 +56108,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVN" = ( +"bSP" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1; min_temperature = 80; @@ -57381,7 +56119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVO" = ( +"bSQ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Distro to Waste"; @@ -57391,13 +56129,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVP" = ( +"bSR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVQ" = ( +"bSS" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "10" @@ -57414,7 +56152,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bVR" = ( +"bST" = ( /obj/machinery/door/poddoor{ id = "engiestoragesmes"; name = "Engineering SMES Storage" @@ -57423,7 +56161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVS" = ( +"bSU" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -57432,13 +56170,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVT" = ( +"bSV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"bVU" = ( +"bSW" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -57449,7 +56187,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bVV" = ( +"bSX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -57459,7 +56197,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"bVW" = ( +"bSY" = ( /obj/structure/table, /obj/item/weapon/paper_bin, /turf/open/floor/plasteel/floorgrime{ @@ -57468,7 +56206,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVX" = ( +"bSZ" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57476,7 +56214,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVY" = ( +"bTa" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille/broken, /turf/open/floor/plating/astplate{ @@ -57485,7 +56223,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVZ" = ( +"bTb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -57502,7 +56240,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWa" = ( +"bTc" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -57512,7 +56250,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWb" = ( +"bTd" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57522,7 +56260,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWc" = ( +"bTe" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57534,7 +56272,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWd" = ( +"bTf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57552,7 +56290,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWe" = ( +"bTg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57562,7 +56300,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWf" = ( +"bTh" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -57577,7 +56315,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWg" = ( +"bTi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -57588,32 +56326,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWh" = ( +"bTj" = ( /obj/structure/punching_bag, /obj/machinery/light, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWi" = ( +"bTk" = ( /obj/structure/punching_bag, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWj" = ( -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/fitness) -"bWk" = ( +"bTl" = ( /obj/structure/closet/boxinggloves, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWl" = ( +"bTm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/sign/map/left/ceres{ pixel_x = -32 @@ -57624,13 +56356,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bWm" = ( +"bTn" = ( /obj/machinery/light/small, /turf/open/floor/carpet{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bWn" = ( +"bTo" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57638,7 +56370,7 @@ /area/library{ name = "Lounge" }) -"bWo" = ( +"bTp" = ( /obj/machinery/camera{ c_tag = "Library Explicits"; dir = 9; @@ -57650,13 +56382,13 @@ /area/library{ name = "Lounge" }) -"bWp" = ( +"bTq" = ( /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWq" = ( +"bTr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; external_pressure_bound = 0; @@ -57673,7 +56405,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWr" = ( +"bTs" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/yellow/visible{ @@ -57684,7 +56416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWs" = ( +"bTt" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -57698,7 +56430,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWt" = ( +"bTu" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -57710,7 +56442,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWu" = ( +"bTv" = ( /obj/machinery/atmospherics/components/trinary/mixer{ dir = 2; name = "air mixer"; @@ -57725,7 +56457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWv" = ( +"bTw" = ( /obj/machinery/camera{ c_tag = "Atmospherics South"; dir = 4; @@ -57739,7 +56471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWw" = ( +"bTx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Mix To Canisters"; @@ -57749,7 +56481,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWx" = ( +"bTy" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 10 @@ -57761,7 +56493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWy" = ( +"bTz" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -57770,7 +56502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWz" = ( +"bTA" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; @@ -57783,7 +56515,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWA" = ( +"bTB" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 4; on = 1 @@ -57792,7 +56524,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWB" = ( +"bTC" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/visible, /obj/machinery/meter{ frequency = 1441; @@ -57803,7 +56535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWC" = ( +"bTD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -57811,7 +56543,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWD" = ( +"bTE" = ( /obj/machinery/light/small{ dir = 8 }, @@ -57830,7 +56562,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bWE" = ( +"bTF" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -57838,7 +56570,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bWF" = ( +"bTG" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -57846,7 +56578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bWG" = ( +"bTH" = ( /obj/machinery/button/door{ id = "engiestoragesmes"; name = "Engineering SMES Blast Door Control"; @@ -57860,7 +56592,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bWH" = ( +"bTI" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/metal{ amount = 50 @@ -57879,16 +56611,16 @@ }, /turf/open/floor/plating, /area/engine/engine_smes) -"bWI" = ( +"bTJ" = ( /obj/machinery/field/generator, /turf/open/floor/plating, /area/engine/engine_smes) -"bWJ" = ( +"bTK" = ( /obj/machinery/power/emitter, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating, /area/engine/engine_smes) -"bWK" = ( +"bTL" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plasteel/floorgrime{ @@ -57897,7 +56629,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWL" = ( +"bTM" = ( /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57905,7 +56637,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWM" = ( +"bTN" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57913,21 +56645,21 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWN" = ( +"bTO" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/emcloset, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWO" = ( +"bTP" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bWP" = ( +"bTQ" = ( /obj/machinery/door/airlock{ name = "Bathroom" }, @@ -57938,7 +56670,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bWQ" = ( +"bTR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57946,7 +56678,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bWR" = ( +"bTS" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -57955,7 +56687,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWS" = ( +"bTT" = ( /obj/machinery/door/airlock/glass{ name = "Holodeck Arena" }, @@ -57963,7 +56695,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWT" = ( +"bTU" = ( /obj/machinery/door/airlock{ name = "Private Study" }, @@ -57971,7 +56703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bWU" = ( +"bTV" = ( /obj/machinery/light/small, /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ @@ -57980,7 +56712,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bWV" = ( +"bTW" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, @@ -57988,7 +56720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWW" = ( +"bTX" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -58002,7 +56734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWX" = ( +"bTY" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, @@ -58013,13 +56745,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWY" = ( +"bTZ" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWZ" = ( +"bUa" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 8 }, @@ -58030,7 +56762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXa" = ( +"bUb" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -58042,7 +56774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXb" = ( +"bUc" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Pure to Mix"; @@ -58055,7 +56787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXc" = ( +"bUd" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; @@ -58065,7 +56797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXd" = ( +"bUe" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 8 }, @@ -58073,7 +56805,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXe" = ( +"bUf" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix to Distro"; @@ -58083,7 +56815,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXf" = ( +"bUg" = ( /obj/machinery/atmospherics/pipe/manifold/supply/visible{ tag = "icon-manifold (EAST)"; icon_state = "manifold"; @@ -58099,23 +56831,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXg" = ( +"bUh" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bXh" = ( +"bUi" = ( /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, /area/engine/engine_smes) -"bXi" = ( +"bUj" = ( /obj/machinery/power/emitter, /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/plating, /area/engine/engine_smes) -"bXj" = ( +"bUk" = ( /obj/structure/sign/map/left/ceres{ pixel_x = -32 }, @@ -58125,7 +56857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bXk" = ( +"bUl" = ( /obj/structure/closet/crate, /obj/item/weapon/pickaxe/emergency, /obj/effect/spawner/lootdrop/maintenance, @@ -58133,7 +56865,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bXl" = ( +"bUm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -58148,7 +56880,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bXm" = ( +"bUn" = ( /obj/machinery/light/small{ dir = 8 }, @@ -58160,7 +56892,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXn" = ( +"bUo" = ( /obj/structure/barricade/wooden, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -58171,7 +56903,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXo" = ( +"bUp" = ( /obj/structure/girder, /obj/structure/grille, /obj/structure/barricade/wooden, @@ -58181,7 +56913,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXp" = ( +"bUq" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 8 @@ -58193,7 +56925,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXq" = ( +"bUr" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -58205,7 +56937,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bXr" = ( +"bUs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -58213,7 +56945,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bXs" = ( +"bUt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -58221,7 +56953,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bXt" = ( +"bUu" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -58238,7 +56970,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bXu" = ( +"bUv" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -58247,7 +56979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXv" = ( +"bUw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58255,7 +56987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXw" = ( +"bUx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -58269,7 +57001,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXx" = ( +"bUy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58283,7 +57015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXy" = ( +"bUz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58303,7 +57035,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXz" = ( +"bUA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58314,7 +57046,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXA" = ( +"bUB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58331,7 +57063,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXB" = ( +"bUC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -58344,7 +57076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXC" = ( +"bUD" = ( /obj/machinery/door/airlock/maintenance{ name = "Broom Closet"; req_access_txt = "0" @@ -58354,7 +57086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bXD" = ( +"bUE" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/sink{ dir = 4; @@ -58366,7 +57098,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bXE" = ( +"bUF" = ( /obj/machinery/newscaster{ pixel_x = -28; pixel_y = 4 @@ -58375,7 +57107,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bXF" = ( +"bUG" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /obj/item/device/radio/intercom{ @@ -58387,12 +57119,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bXG" = ( +"bUH" = ( /turf/open/floor/engine/air{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXH" = ( +"bUI" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 4; frequency = 1441; @@ -58402,7 +57134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXI" = ( +"bUJ" = ( /obj/machinery/meter{ name = "Mixed Air Tank In" }, @@ -58414,7 +57146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXJ" = ( +"bUK" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (WEST)"; icon_state = "intact"; @@ -58424,7 +57156,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXK" = ( +"bUL" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (WEST)"; @@ -58438,7 +57170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXL" = ( +"bUM" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (WEST)"; @@ -58452,7 +57184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXM" = ( +"bUN" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; @@ -58462,7 +57194,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXN" = ( +"bUO" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 6 }, @@ -58470,7 +57202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXO" = ( +"bUP" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 1 }, @@ -58478,7 +57210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXP" = ( +"bUQ" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -58486,7 +57218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXQ" = ( +"bUR" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, @@ -58497,7 +57229,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXR" = ( +"bUS" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, @@ -58508,7 +57240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXS" = ( +"bUT" = ( /obj/machinery/atmospherics/pipe/manifold/green/visible{ tag = "icon-manifold (EAST)"; icon_state = "manifold"; @@ -58519,7 +57251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXT" = ( +"bUU" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Air to Distro"; @@ -58534,13 +57266,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXU" = ( +"bUV" = ( /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bXV" = ( +"bUW" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/mineral/plasma{ amount = 5 @@ -58549,40 +57281,40 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bXW" = ( +"bUX" = ( /obj/machinery/shieldgen, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bXX" = ( +"bUY" = ( /obj/machinery/shieldgen, /turf/open/floor/plating, /area/engine/engine_smes) -"bXY" = ( +"bUZ" = ( /obj/machinery/the_singularitygen{ anchored = 0 }, /obj/machinery/light/small, /turf/open/floor/plating, /area/engine/engine_smes) -"bXZ" = ( +"bVa" = ( /obj/machinery/power/emitter, /turf/open/floor/plating, /area/engine/engine_smes) -"bYa" = ( +"bVb" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bYb" = ( +"bVc" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bYc" = ( +"bVd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -58594,14 +57326,14 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bYd" = ( +"bVe" = ( /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bYe" = ( +"bVf" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, @@ -58609,7 +57341,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYf" = ( +"bVg" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -58618,7 +57350,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYg" = ( +"bVh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -58626,7 +57358,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYh" = ( +"bVi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -58634,7 +57366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYi" = ( +"bVj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table, /obj/structure/disposalpipe/segment, @@ -58642,7 +57374,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYj" = ( +"bVk" = ( /obj/structure/janitorialcart, /obj/item/weapon/mop, /obj/item/weapon/reagent_containers/glass/bucket, @@ -58650,7 +57382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bYk" = ( +"bVl" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -58661,7 +57393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bYl" = ( +"bVm" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -58672,12 +57404,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bYm" = ( +"bVn" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYn" = ( +"bVo" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -58686,7 +57418,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYo" = ( +"bVp" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -58695,7 +57427,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYp" = ( +"bVq" = ( /obj/machinery/light/small{ dir = 8 }, @@ -58703,13 +57435,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYq" = ( +"bVr" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine/air{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYr" = ( +"bVs" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "air_sensor" @@ -58718,7 +57450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYs" = ( +"bVt" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "air_in"; @@ -58736,7 +57468,7 @@ dir = 5 }, /area/atmos) -"bYt" = ( +"bVu" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ tag = "icon-intact (WEST)"; icon_state = "intact"; @@ -58748,7 +57480,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYu" = ( +"bVv" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 4; filter_type = "co2"; @@ -58766,7 +57498,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYv" = ( +"bVw" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "co2_in"; @@ -58782,7 +57514,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYw" = ( +"bVx" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58799,7 +57531,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYx" = ( +"bVy" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58811,7 +57543,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYy" = ( +"bVz" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 4; filter_type = "plasma"; @@ -58826,7 +57558,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYz" = ( +"bVA" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58841,7 +57573,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYA" = ( +"bVB" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58858,7 +57590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYB" = ( +"bVC" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; filter_type = "n2"; @@ -58873,7 +57605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYC" = ( +"bVD" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58888,7 +57620,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYD" = ( +"bVE" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58901,7 +57633,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYE" = ( +"bVF" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58913,7 +57645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYF" = ( +"bVG" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -58929,13 +57661,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYG" = ( +"bVH" = ( /obj/machinery/atmospherics/pipe/manifold/green/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYH" = ( +"bVI" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -58945,7 +57677,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYI" = ( +"bVJ" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1; initialize_directions = 11 @@ -58955,7 +57687,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYJ" = ( +"bVK" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; @@ -58965,7 +57697,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYK" = ( +"bVL" = ( /obj/machinery/light/small, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -58973,7 +57705,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bYL" = ( +"bVM" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -58987,9 +57719,14 @@ icon_state = "pipe-c" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"bYM" = ( +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"bVN" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -59004,9 +57741,14 @@ }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/space, -/area/space) -"bYN" = ( +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"bVO" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -59018,7 +57760,7 @@ }, /turf/open/space, /area/space) -"bYO" = ( +"bVP" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -59033,7 +57775,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bYP" = ( +"bVQ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -59049,7 +57791,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bYQ" = ( +"bVR" = ( /obj/machinery/power/apc{ dir = 4; name = "Fitness Bathroom APC"; @@ -59071,7 +57813,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bYR" = ( +"bVS" = ( /obj/machinery/camera{ c_tag = "Fitness Bathrooms"; dir = 4; @@ -59091,7 +57833,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bYS" = ( +"bVT" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -59101,20 +57843,20 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bYT" = ( +"bVU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYU" = ( +"bVV" = ( /obj/structure/table, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYV" = ( +"bVW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table, /obj/item/weapon/storage/firstaid/brute, @@ -59129,7 +57871,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYW" = ( +"bVX" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -59139,12 +57881,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYX" = ( +"bVY" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYY" = ( +"bVZ" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -59154,7 +57896,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYZ" = ( +"bWa" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 24 }, @@ -59162,13 +57904,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZa" = ( +"bWb" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZb" = ( +"bWc" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume{ dir = 4; external_pressure_bound = 0; @@ -59184,7 +57926,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZc" = ( +"bWd" = ( /obj/machinery/meter{ name = "Mixed Air Tank Out" }, @@ -59196,7 +57938,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZd" = ( +"bWe" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1; initialize_directions = 11 @@ -59205,7 +57947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZe" = ( +"bWf" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Air to Pure" @@ -59214,7 +57956,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZf" = ( +"bWg" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ tag = "icon-intact (WEST)"; icon_state = "intact"; @@ -59224,14 +57966,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZg" = ( +"bWh" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/machinery/meter, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZh" = ( +"bWi" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ tag = "icon-intact (WEST)"; icon_state = "intact"; @@ -59242,7 +57984,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZi" = ( +"bWj" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; @@ -59252,19 +57994,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZj" = ( +"bWk" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZk" = ( +"bWl" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZl" = ( +"bWm" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; @@ -59273,7 +58015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZm" = ( +"bWn" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -59281,7 +58023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZn" = ( +"bWo" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -59290,9 +58032,14 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"bZo" = ( +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"bWp" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -59305,9 +58052,14 @@ }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/space, -/area/space) -"bZp" = ( +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"bWq" = ( /obj/machinery/light{ dir = 8 }, @@ -59320,7 +58072,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bZq" = ( +"bWr" = ( /obj/machinery/door/airlock{ id_tag = "fb1" }, @@ -59331,7 +58083,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bZr" = ( +"bWs" = ( /obj/machinery/light/small, /obj/structure/toilet{ icon_state = "toilet00"; @@ -59350,13 +58102,13 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bZs" = ( +"bWt" = ( /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "Holodeck Projector Floor" }, /area/holodeck/rec_center) -"bZt" = ( +"bWu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table, /obj/machinery/light{ @@ -59369,7 +58121,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bZu" = ( +"bWv" = ( /obj/machinery/camera{ c_tag = "Chapel West"; dir = 5; @@ -59382,7 +58134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZv" = ( +"bWw" = ( /obj/machinery/light{ dir = 1 }, @@ -59393,7 +58145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZw" = ( +"bWx" = ( /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (NORTH)"; icon_state = "chapel"; @@ -59401,7 +58153,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZx" = ( +"bWy" = ( /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (EAST)"; icon_state = "chapel"; @@ -59409,16 +58161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZy" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/chapel/main) -"bZz" = ( +"bWz" = ( /obj/machinery/newscaster{ pixel_y = 32 }, @@ -59426,7 +58169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZA" = ( +"bWA" = ( /obj/structure/chair{ dir = 4 }, @@ -59434,7 +58177,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZB" = ( +"bWB" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -59443,7 +58186,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZC" = ( +"bWC" = ( /obj/machinery/light{ dir = 1 }, @@ -59454,12 +58197,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZD" = ( +"bWD" = ( /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZE" = ( +"bWE" = ( /obj/machinery/light{ dir = 4 }, @@ -59467,7 +58210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZF" = ( +"bWF" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; @@ -59481,7 +58224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZG" = ( +"bWG" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -59490,7 +58233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZH" = ( +"bWH" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -59498,7 +58241,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZI" = ( +"bWI" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -59507,7 +58250,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZJ" = ( +"bWJ" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -59521,7 +58264,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZK" = ( +"bWK" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -59530,7 +58273,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZL" = ( +"bWL" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -59540,7 +58283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZM" = ( +"bWM" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -59549,7 +58292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZN" = ( +"bWN" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -59561,7 +58304,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZO" = ( +"bWO" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "mix_in"; @@ -59576,7 +58319,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZP" = ( +"bWP" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -59585,7 +58328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZQ" = ( +"bWQ" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible, /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; @@ -59596,7 +58339,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZR" = ( +"bWR" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 }, @@ -59604,17 +58347,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZS" = ( +"bWS" = ( /turf/closed/wall, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bZT" = ( +"bWT" = ( /turf/closed/wall, /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"bZU" = ( +"bWU" = ( /obj/structure/disposaloutlet{ icon_state = "outlet"; dir = 1 @@ -59624,7 +58367,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"bZV" = ( +"bWV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Service Asteroid Hallway 5"; @@ -59637,7 +58380,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bZW" = ( +"bWW" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -59646,7 +58389,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZX" = ( +"bWX" = ( /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (WEST)"; icon_state = "chapel"; @@ -59654,30 +58397,30 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZY" = ( +"bWY" = ( /turf/open/floor/plasteel/chapel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZZ" = ( +"bWZ" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"caa" = ( +"bXa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cab" = ( +"bXb" = ( /obj/structure/table/wood, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cac" = ( +"bXc" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -59687,7 +58430,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cad" = ( +"bXd" = ( /obj/machinery/light/small, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -59695,7 +58438,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cae" = ( +"bXe" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -59705,7 +58448,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caf" = ( +"bXf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -59720,7 +58463,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cag" = ( +"bXg" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/green/visible, @@ -59728,7 +58471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cah" = ( +"bXh" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/yellow/visible, @@ -59736,17 +58479,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cai" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"caj" = ( +"bXi" = ( /obj/structure/grille, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -59754,7 +58487,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cak" = ( +"bXj" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical, /turf/open/floor/plating{ @@ -59763,7 +58496,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cal" = ( +"bXk" = ( /obj/structure/table, /obj/machinery/light/small{ dir = 1 @@ -59774,18 +58507,18 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cam" = ( +"bXl" = ( /turf/closed/wall/rust, /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"can" = ( +"bXm" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/rust, /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cao" = ( +"bXn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -59798,7 +58531,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cap" = ( +"bXo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -59809,7 +58542,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"caq" = ( +"bXp" = ( /obj/machinery/door/airlock{ id_tag = "fb2" }, @@ -59822,7 +58555,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"car" = ( +"bXq" = ( /obj/machinery/light/small, /obj/structure/toilet{ icon_state = "toilet00"; @@ -59840,7 +58573,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cas" = ( +"bXr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -59851,7 +58584,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cat" = ( +"bXs" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -59865,7 +58598,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cau" = ( +"bXt" = ( /obj/machinery/door/airlock/glass{ name = "Chapel" }, @@ -59875,7 +58608,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cav" = ( +"bXu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -59883,19 +58616,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"caw" = ( +"bXv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cax" = ( +"bXw" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cay" = ( +"bXx" = ( /obj/machinery/camera{ c_tag = "Chapel East"; dir = 9; @@ -59905,7 +58638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"caz" = ( +"bXy" = ( /obj/machinery/power/apc{ dir = 8; name = "Chapel APC"; @@ -59927,7 +58660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"caA" = ( +"bXz" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -59938,7 +58671,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caB" = ( +"bXA" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "co2_sensor" @@ -59947,7 +58680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caC" = ( +"bXB" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; external_pressure_bound = 0; @@ -59964,7 +58697,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caD" = ( +"bXC" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -59975,7 +58708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caE" = ( +"bXD" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "tox_sensor" @@ -59984,7 +58717,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caF" = ( +"bXE" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; external_pressure_bound = 0; @@ -60002,7 +58735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caG" = ( +"bXF" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -60013,7 +58746,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caH" = ( +"bXG" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "n2o_sensor" @@ -60022,7 +58755,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caI" = ( +"bXH" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; external_pressure_bound = 0; @@ -60039,7 +58772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caJ" = ( +"bXI" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -60050,7 +58783,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caK" = ( +"bXJ" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "mix_sensor" @@ -60059,7 +58792,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caL" = ( +"bXK" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; external_pressure_bound = 0; @@ -60076,14 +58809,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caM" = ( +"bXL" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caN" = ( +"bXM" = ( /obj/structure/girder, /obj/structure/grille, /obj/structure/barricade/wooden, @@ -60093,14 +58826,14 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caO" = ( +"bXN" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caP" = ( +"bXO" = ( /obj/structure/chair/stool, /obj/structure/sign/poster/contraband/hacking_guide{ pixel_x = 32 @@ -60111,7 +58844,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caQ" = ( +"bXP" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ d1 = 1; @@ -60120,7 +58853,7 @@ }, /turf/open/space, /area/space) -"caR" = ( +"bXQ" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -60133,7 +58866,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caS" = ( +"bXR" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -60144,7 +58877,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caT" = ( +"bXS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -60154,7 +58887,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caU" = ( +"bXT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -60165,7 +58898,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caV" = ( +"bXU" = ( /obj/effect/turf_decal/stripes/end, /obj/structure/cable/orange{ d2 = 8; @@ -60181,7 +58914,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caW" = ( +"bXV" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (NORTHEAST)"; icon_state = "conveyor0"; @@ -60191,7 +58924,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caX" = ( +"bXW" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -60202,7 +58935,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caY" = ( +"bXX" = ( /obj/machinery/door/airlock{ name = "Shower Room" }, @@ -60212,7 +58945,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"caZ" = ( +"bXY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -60220,7 +58953,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cba" = ( +"bXZ" = ( /obj/machinery/door/airlock/glass{ name = "Holodeck Arena" }, @@ -60228,7 +58961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbb" = ( +"bYa" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -60237,13 +58970,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbc" = ( +"bYb" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cbd" = ( +"bYc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -60258,7 +58991,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cbe" = ( +"bYd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -60271,7 +59004,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbf" = ( +"bYe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -60279,7 +59012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbg" = ( +"bYf" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -60287,40 +59020,40 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbh" = ( +"bYg" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbi" = ( +"bYh" = ( /turf/open/floor/engine/co2{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbj" = ( +"bYi" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/engine/co2{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbk" = ( +"bYj" = ( /turf/open/floor/engine/plasma{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbl" = ( +"bYk" = ( /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/engine/plasma{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbm" = ( +"bYl" = ( /turf/open/floor/engine/n2o{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbn" = ( +"bYm" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide{ valve_open = 1 }, @@ -60328,19 +59061,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbo" = ( +"bYn" = ( /turf/open/floor/engine/vacuum{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbp" = ( +"bYo" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbq" = ( +"bYp" = ( /obj/machinery/light/small{ dir = 1 }, @@ -60351,14 +59084,14 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbr" = ( +"bYq" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbs" = ( +"bYr" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -60368,13 +59101,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbt" = ( +"bYs" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbu" = ( +"bYt" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -60382,7 +59115,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbv" = ( +"bYu" = ( /obj/machinery/light/small{ dir = 4 }, @@ -60396,7 +59129,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbw" = ( +"bYv" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/emergency, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -60406,7 +59139,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cbx" = ( +"bYw" = ( /obj/machinery/shower{ dir = 4 }, @@ -60416,7 +59149,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cby" = ( +"bYx" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -60424,7 +59157,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cbz" = ( +"bYy" = ( /obj/machinery/shower{ dir = 8 }, @@ -60434,14 +59167,14 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cbA" = ( +"bYz" = ( /obj/machinery/computer/holodeck, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbB" = ( +"bYA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -60449,7 +59182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbC" = ( +"bYB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60459,7 +59192,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbD" = ( +"bYC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60471,7 +59204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbE" = ( +"bYD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -60480,7 +59213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cbF" = ( +"bYE" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -60495,7 +59228,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cbG" = ( +"bYF" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -60507,7 +59240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbH" = ( +"bYG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60522,7 +59255,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbI" = ( +"bYH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60533,7 +59266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbJ" = ( +"bYI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60541,7 +59274,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbK" = ( +"bYJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60552,7 +59285,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbL" = ( +"bYK" = ( /obj/structure/chair{ dir = 4 }, @@ -60563,7 +59296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbM" = ( +"bYL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60572,7 +59305,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbN" = ( +"bYM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -60580,38 +59313,38 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbO" = ( +"bYN" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cbP" = ( +"bYO" = ( /obj/machinery/light/small, /turf/open/floor/engine/co2{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbQ" = ( +"bYP" = ( /obj/machinery/light/small, /turf/open/floor/engine/plasma{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbR" = ( +"bYQ" = ( /obj/machinery/light/small, /turf/open/floor/engine/n2o{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbS" = ( +"bYR" = ( /obj/machinery/light/small, /turf/open/floor/engine/vacuum{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cbT" = ( +"bYS" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime{ @@ -60620,7 +59353,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbU" = ( +"bYT" = ( /obj/structure/grille/broken, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -60628,7 +59361,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbV" = ( +"bYU" = ( /obj/structure/closet/toolcloset, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -60636,7 +59369,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbW" = ( +"bYV" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ dir = 4 @@ -60645,7 +59378,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbX" = ( +"bYW" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -60656,7 +59389,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbY" = ( +"bYX" = ( /obj/machinery/conveyor/auto{ dir = 10; icon_state = "conveyor0"; @@ -60667,7 +59400,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbZ" = ( +"bYY" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/emergency, /obj/effect/spawner/lootdrop/maintenance, @@ -60678,7 +59411,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cca" = ( +"bYZ" = ( /obj/item/weapon/bikehorn/rubberducky, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -60686,7 +59419,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccb" = ( +"bZa" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -60697,7 +59430,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccc" = ( +"bZb" = ( /obj/structure/table, /obj/item/weapon/paper{ desc = ""; @@ -60708,7 +59441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ccd" = ( +"bZc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4; @@ -60719,7 +59452,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cce" = ( +"bZd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/junction{ dir = 4; @@ -60729,7 +59462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ccf" = ( +"bZe" = ( /obj/machinery/door/airlock/glass{ name = "Holodeck Arena" }, @@ -60741,7 +59474,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ccg" = ( +"bZf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -60750,7 +59483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cch" = ( +"bZg" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 4 @@ -60759,7 +59492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cci" = ( +"bZh" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -60778,7 +59511,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccj" = ( +"bZi" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -60790,19 +59523,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cck" = ( +"bZj" = ( /obj/machinery/light, /turf/open/floor/plasteel/chapel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccl" = ( +"bZk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccm" = ( +"bZl" = ( /obj/machinery/light, /turf/open/floor/plasteel/chapel{ tag = "icon-chapel (WEST)"; @@ -60811,7 +59544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccn" = ( +"bZm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -60826,14 +59559,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cco" = ( +"bZn" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ccp" = ( +"bZo" = ( /obj/structure/toilet{ icon_state = "toilet00"; dir = 8 @@ -60847,19 +59580,19 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ccq" = ( +"bZp" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"ccr" = ( +"bZq" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ccs" = ( +"bZr" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -60867,7 +59600,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cct" = ( +"bZs" = ( /obj/item/weapon/soap/nanotrasen, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer{ @@ -60876,20 +59609,20 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccu" = ( +"bZt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ccv" = ( +"bZu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccw" = ( +"bZv" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -60898,7 +59631,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccx" = ( +"bZw" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -60916,7 +59649,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccy" = ( +"bZx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -60924,7 +59657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccz" = ( +"bZy" = ( /obj/machinery/door/morgue{ name = "Confession Room" }, @@ -60935,7 +59668,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccA" = ( +"bZz" = ( /obj/machinery/door/morgue{ name = "Confession Room"; req_access_txt = "22" @@ -60947,7 +59680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccB" = ( +"bZA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -60955,7 +59688,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccC" = ( +"bZB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -60964,7 +59697,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccD" = ( +"bZC" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -60975,7 +59708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccE" = ( +"bZD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock{ name = "Chaplain's Office"; @@ -60988,7 +59721,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccF" = ( +"bZE" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -60997,7 +59730,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccG" = ( +"bZF" = ( /obj/structure/mineral_door/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61005,7 +59738,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ccH" = ( +"bZG" = ( /obj/structure/sign/barsign, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61013,7 +59746,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ccI" = ( +"bZH" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -61022,7 +59755,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"ccJ" = ( +"bZI" = ( /obj/machinery/light, /turf/open/floor/plasteel/freezer{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61030,7 +59763,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccK" = ( +"bZJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -61041,7 +59774,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccL" = ( +"bZK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -61052,7 +59785,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccM" = ( +"bZL" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -61062,10 +59795,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccN" = ( +"bZM" = ( /turf/closed/mineral, /area/chapel/main) -"ccO" = ( +"bZN" = ( /obj/structure/chair{ dir = 4 }, @@ -61074,14 +59807,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccP" = ( +"bZO" = ( /obj/structure/grille, /obj/structure/window/reinforced/tinted/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccQ" = ( +"bZP" = ( /obj/structure/chair{ dir = 8 }, @@ -61090,7 +59823,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccR" = ( +"bZQ" = ( /obj/machinery/door/morgue{ name = "Confession Room"; req_access_txt = "22" @@ -61099,7 +59832,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccS" = ( +"bZR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-applebush"; @@ -61109,7 +59842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccT" = ( +"bZS" = ( /obj/machinery/light_switch{ pixel_y = 24 }, @@ -61118,13 +59851,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccU" = ( +"bZT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccV" = ( +"bZU" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -61134,12 +59867,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccW" = ( +"bZV" = ( /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccX" = ( +"bZW" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -61148,7 +59881,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccY" = ( +"bZX" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -61160,7 +59893,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccZ" = ( +"bZY" = ( /obj/machinery/door/window/northleft{ name = "Casket Storage"; req_access_txt = "22" @@ -61172,7 +59905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cda" = ( +"bZZ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -61181,7 +59914,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cdb" = ( +"caa" = ( /obj/machinery/computer/arcade, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -61190,7 +59923,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdc" = ( +"cab" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless; icon_state = "wood-broken" @@ -61198,7 +59931,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdd" = ( +"cac" = ( /obj/item/chair/stool, /obj/structure/sign/poster/random{ name = "random contraband poster"; @@ -61212,7 +59945,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cde" = ( +"cad" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, /turf/open/floor/wood{ @@ -61222,14 +59955,14 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdf" = ( +"cae" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdg" = ( +"caf" = ( /obj/machinery/vending/boozeomat{ req_access_txt = "0" }, @@ -61239,7 +59972,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdh" = ( +"cag" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -61248,7 +59981,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdi" = ( +"cah" = ( /obj/structure/sign/mining{ pixel_y = -32 }, @@ -61263,19 +59996,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cdj" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/camera{ - c_tag = "Docking-Medbay Bridge"; - dir = 8; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"cdk" = ( +"cai" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -61286,7 +60007,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdl" = ( +"caj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61296,7 +60017,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdm" = ( +"cak" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61306,7 +60027,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdn" = ( +"cal" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61318,7 +60039,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdo" = ( +"cam" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61329,7 +60050,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdp" = ( +"can" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61341,7 +60062,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdq" = ( +"cao" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -61357,12 +60078,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cdr" = ( +"cap" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cds" = ( +"caq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Chapel Office"; @@ -61373,13 +60094,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdt" = ( +"car" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdu" = ( +"cas" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -61388,7 +60109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdv" = ( +"cat" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61396,7 +60117,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdw" = ( +"cau" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -61406,13 +60127,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdx" = ( +"cav" = ( /obj/structure/closet/coffin, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cdy" = ( +"caw" = ( /obj/structure/chair/stool, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61420,7 +60141,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdz" = ( +"cax" = ( /obj/structure/table/wood/poker, /obj/item/weapon/gun/ballistic/revolver/russian, /turf/open/floor/wood{ @@ -61430,7 +60151,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdA" = ( +"cay" = ( /obj/structure/light_construct{ dir = 4 }, @@ -61442,7 +60163,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdB" = ( +"caz" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -61453,7 +60174,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cdC" = ( +"caA" = ( /obj/machinery/light/small{ dir = 1 }, @@ -61463,7 +60184,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdD" = ( +"caB" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -61476,7 +60197,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdE" = ( +"caC" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -61493,7 +60214,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdF" = ( +"caD" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61501,7 +60222,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdG" = ( +"caE" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61509,7 +60230,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdH" = ( +"caF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ dir = 4; @@ -61519,7 +60240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cdI" = ( +"caG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -61528,15 +60249,17 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cdJ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"caH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61547,11 +60270,15 @@ pixel_x = 0 }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cdK" = ( +"caI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -61570,20 +60297,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cdL" = ( +"caJ" = ( /obj/structure/tank_dispenser/oxygen, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cdM" = ( +"caK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdN" = ( +"caL" = ( /obj/structure/table/wood, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/structure/disposalpipe/segment, @@ -61591,7 +60318,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdO" = ( +"caM" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /obj/item/stack/packageWrap, @@ -61600,13 +60327,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdP" = ( +"caN" = ( /obj/structure/table/wood, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdQ" = ( +"caO" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -61621,7 +60348,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdR" = ( +"caP" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -61638,7 +60365,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdS" = ( +"caQ" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, /turf/open/floor/wood{ @@ -61647,7 +60374,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdT" = ( +"caR" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /turf/open/floor/plating{ @@ -61656,7 +60383,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdU" = ( +"caS" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -61669,7 +60396,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdV" = ( +"caT" = ( /obj/structure/disposalpipe/junction, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61677,7 +60404,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdW" = ( +"caU" = ( /obj/structure/grille/broken, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61685,7 +60412,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdX" = ( +"caV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -61695,25 +60422,25 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdY" = ( +"caW" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdZ" = ( +"caX" = ( /turf/closed/mineral, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cea" = ( +"caY" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"ceb" = ( +"caZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -61724,13 +60451,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cec" = ( +"cba" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ced" = ( +"cbb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -61739,7 +60466,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cee" = ( +"cbc" = ( /obj/structure/table/wood, /obj/item/weapon/nullrod, /obj/structure/disposalpipe/segment, @@ -61747,13 +60474,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cef" = ( +"cbd" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceg" = ( +"cbe" = ( /obj/structure/chair/wood/wings{ icon_state = "wooden_chair_wings"; dir = 1 @@ -61763,7 +60490,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceh" = ( +"cbf" = ( /obj/machinery/newscaster{ pixel_x = 32 }, @@ -61771,7 +60498,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cei" = ( +"cbg" = ( /obj/structure/closet/coffin, /obj/machinery/camera{ c_tag = "Chapel Coffins"; @@ -61782,7 +60509,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cej" = ( +"cbh" = ( /obj/item/chair/stool, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61790,7 +60517,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cek" = ( +"cbi" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = 0; @@ -61804,7 +60531,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cel" = ( +"cbj" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -61817,7 +60544,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cem" = ( +"cbk" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" @@ -61828,7 +60555,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cen" = ( +"cbl" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 4 @@ -61840,7 +60567,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceo" = ( +"cbm" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61853,7 +60580,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cep" = ( +"cbn" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -61867,7 +60594,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceq" = ( +"cbo" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61881,7 +60608,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cer" = ( +"cbp" = ( /obj/machinery/light/small, /obj/structure/disposalpipe/segment{ dir = 4 @@ -61892,7 +60619,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ces" = ( +"cbq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61903,26 +60630,26 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cet" = ( +"cbr" = ( /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating/asteroid, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"ceu" = ( +"cbs" = ( /turf/open/floor/plating/asteroid, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cev" = ( +"cbt" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cew" = ( +"cbu" = ( /obj/structure/falsewall{ desc = "A huge chunk of metal used to separate rooms. Nothing odd here, sir."; name = "inconspicuous wall" @@ -61931,7 +60658,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cex" = ( +"cbv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -61940,19 +60667,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cey" = ( +"cbw" = ( /obj/machinery/light, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cez" = ( +"cbx" = ( /obj/structure/closet/wardrobe/chaplain_black, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceA" = ( +"cby" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -61969,7 +60696,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceB" = ( +"cbz" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -61982,7 +60709,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceC" = ( +"cbA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -61997,7 +60724,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ceD" = ( +"cbB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -62010,7 +60737,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ceE" = ( +"cbC" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -62022,7 +60749,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ceF" = ( +"cbD" = ( /obj/structure/table, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62030,7 +60757,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceG" = ( +"cbE" = ( /obj/item/chair, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62038,7 +60765,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceH" = ( +"cbF" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -62051,7 +60778,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceI" = ( +"cbG" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 4 @@ -62063,7 +60790,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceJ" = ( +"cbH" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -62075,7 +60802,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceK" = ( +"cbI" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62083,13 +60810,13 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceL" = ( +"cbJ" = ( /obj/structure/glowshroom/single, /turf/open/floor/plating/asteroid, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"ceM" = ( +"cbK" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -62102,7 +60829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceN" = ( +"cbL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -62123,7 +60850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceO" = ( +"cbM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -62139,7 +60866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceP" = ( +"cbN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -62157,7 +60884,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceQ" = ( +"cbO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -62175,7 +60902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceR" = ( +"cbP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -62195,7 +60922,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceS" = ( +"cbQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -62203,7 +60930,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceT" = ( +"cbR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -62218,16 +60945,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ceU" = ( +"cbS" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ceV" = ( +"cbT" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -62243,7 +60976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ceW" = ( +"cbU" = ( /obj/machinery/door/window/northleft{ name = "Chapel Mail"; req_access_txt = "22" @@ -62255,13 +60988,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceX" = ( +"cbV" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceY" = ( +"cbW" = ( /obj/machinery/door/airlock{ name = "Crematorium"; req_access_txt = "22" @@ -62270,7 +61003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceZ" = ( +"cbX" = ( /obj/structure/cable/orange, /obj/machinery/power/apc{ dir = 2; @@ -62284,7 +61017,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cfa" = ( +"cbY" = ( /obj/machinery/computer/slot_machine, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62292,7 +61025,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cfb" = ( +"cbZ" = ( /obj/machinery/computer/slot_machine, /obj/structure/sign/poster/random{ name = "random contraband poster"; @@ -62306,7 +61039,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cfc" = ( +"cca" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -62318,7 +61051,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfd" = ( +"ccb" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -62331,7 +61064,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfe" = ( +"ccc" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -62343,7 +61076,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cff" = ( +"ccd" = ( /obj/machinery/light/small, /obj/structure/closet/toolcloset, /turf/open/floor/plating{ @@ -62352,7 +61085,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfg" = ( +"cce" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62360,7 +61093,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfh" = ( +"ccf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -62369,7 +61102,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cfi" = ( +"ccg" = ( /obj/machinery/light{ dir = 8 }, @@ -62379,7 +61112,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfj" = ( +"cch" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -62393,7 +61126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfk" = ( +"cci" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -62405,7 +61138,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfl" = ( +"ccj" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -62414,7 +61147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfm" = ( +"cck" = ( /obj/structure/bodycontainer/crematorium{ id = "creamed" }, @@ -62422,12 +61155,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfn" = ( +"ccl" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfo" = ( +"ccm" = ( /obj/machinery/camera{ c_tag = "Crematorium"; dir = 9; @@ -62442,7 +61175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfp" = ( +"ccn" = ( /obj/structure/plasticflaps, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -62454,7 +61187,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfq" = ( +"cco" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -62467,7 +61200,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfr" = ( +"ccp" = ( /obj/structure/disposalpipe/segment, /obj/structure/closet/firecloset/full, /turf/open/floor/plasteel/floorgrime{ @@ -62476,7 +61209,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfs" = ( +"ccq" = ( /obj/structure/grille/broken, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62484,7 +61217,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cft" = ( +"ccr" = ( /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62492,7 +61225,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfu" = ( +"ccs" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/clown, /turf/open/floor/plating{ @@ -62501,7 +61234,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfv" = ( +"cct" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/bananalamp, /obj/item/device/instrument/violin, @@ -62515,7 +61248,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfw" = ( +"ccu" = ( /obj/structure/mineral_door/wood{ name = "Secret Clown HQ" }, @@ -62525,7 +61258,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfx" = ( +"ccv" = ( /obj/machinery/light/small{ dir = 4 }, @@ -62535,7 +61268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cfy" = ( +"ccw" = ( /obj/structure/sign/map/left/ceres{ pixel_x = -32 }, @@ -62545,7 +61278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfz" = ( +"ccx" = ( /obj/machinery/light/small{ dir = 8 }, @@ -62560,7 +61293,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfA" = ( +"ccy" = ( /obj/machinery/button/crematorium{ id = "creamed"; pixel_x = -24 @@ -62569,20 +61302,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfB" = ( +"ccz" = ( /obj/machinery/light/small, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfC" = ( +"ccA" = ( /obj/structure/table/wood, /obj/item/weapon/storage/book/bible, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfD" = ( +"ccB" = ( /obj/structure/closet/crate{ name = "top secret clown supplies" }, @@ -62600,14 +61333,14 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfE" = ( +"ccC" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfF" = ( +"ccD" = ( /mob/living/carbon/monkey{ name = "Mr.Teeny" }, @@ -62617,7 +61350,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfG" = ( +"ccE" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62625,7 +61358,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfH" = ( +"ccF" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -62634,24 +61367,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cfI" = ( +"ccG" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "Docking Asteroid" }) -"cfJ" = ( +"ccH" = ( /turf/closed/mineral, /area/mine/unexplored{ name = "Docking Asteroid" }) -"cfK" = ( +"ccI" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Docking Asteroid" }) -"cfL" = ( +"ccJ" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -62660,7 +61393,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfM" = ( +"ccK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -62670,7 +61403,7 @@ /area/mine/unexplored{ name = "Civilian Asteroid" }) -"cfN" = ( +"ccL" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -62678,39 +61411,40 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/mine/unexplored{ - name = "Civilian Asteroid" - }) -"cfO" = ( +/obj/structure/grille, /obj/structure/window/reinforced{ dir = 8 }, +/turf/open/floor/plating/airless/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"ccM" = ( /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, -/area/hallway/primary/port) -"cfP" = ( -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/hallway/primary/port) -"cfQ" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"ccN" = ( /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, -/area/hallway/primary/port) -"cfR" = ( +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"ccO" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -62722,13 +61456,17 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/mine/unexplored{ - name = "Civilian Asteroid" +/area/construction/hallway{ + name = "Service-Science Bridge" }) -"cfS" = ( +"ccP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -62743,7 +61481,7 @@ /area/mine/unexplored{ name = "Civilian Asteroid" }) -"cfT" = ( +"ccQ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -62754,7 +61492,7 @@ }, /turf/open/space, /area/space) -"cfU" = ( +"ccR" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -62768,9 +61506,14 @@ icon_state = "pipe-c" }, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/space, -/area/space) -"cfV" = ( +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"ccS" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -62785,9 +61528,14 @@ }, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/space, -/area/space) -"cfW" = ( +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"ccT" = ( /obj/structure/table, /obj/item/toy/figure/clown, /turf/open/floor/plating{ @@ -62796,7 +61544,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfX" = ( +"ccU" = ( /obj/item/weapon/grown/bananapeel{ name = "state-of-the-art clown home defense peel" }, @@ -62811,7 +61559,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfY" = ( +"ccV" = ( /obj/structure/closet/crate/bin, /obj/item/clothing/mask/gas/mime, /turf/open/floor/plating{ @@ -62820,7 +61568,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfZ" = ( +"ccW" = ( /obj/machinery/vending/autodrobe{ desc = "A vending machine for costumes. The machine seems blessed by some higher power, allowing it to function without power. HONK!"; use_power = 0 @@ -62831,19 +61579,23 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cga" = ( +"ccX" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/mine/unexplored{ - name = "Civilian Asteroid" +/area/construction/hallway{ + name = "Service-Science Bridge" }) -"cgb" = ( +"ccY" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -62853,13 +61605,17 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/mine/unexplored{ - name = "Civilian Asteroid" +/area/construction/hallway{ + name = "Service-Science Bridge" }) -"cgc" = ( +"ccZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/glass_external{ @@ -62871,7 +61627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgd" = ( +"cda" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -62881,17 +61637,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/space, /area/space) -"cge" = ( +"cdb" = ( /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgf" = ( -/obj/item/weapon/pickaxe/mini, -/turf/open/floor/plating/asteroid/airless, -/area/space) -"cgg" = ( +"cdc" = ( /obj/machinery/light/small{ dir = 4 }, @@ -62902,7 +61654,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgh" = ( +"cdd" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -62916,23 +61668,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgi" = ( +"cde" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Docking Asteroid" }) -"cgj" = ( +"cdf" = ( /turf/closed/mineral/random/low_chance, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgk" = ( +"cdg" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgl" = ( +"cdh" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -62947,19 +61699,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgm" = ( +"cdi" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgn" = ( +"cdj" = ( /obj/item/weapon/ore/iron, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgo" = ( +"cdk" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/crate{ icon_state = "crateopen"; @@ -62971,10 +61723,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgp" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, +"cdl" = ( /obj/machinery/light{ dir = 8 }, @@ -62982,8 +61731,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, -/area/hallway/primary/port) -"cgq" = ( +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"cdm" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -62991,7 +61742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgr" = ( +"cdn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -62999,7 +61750,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgs" = ( +"cdo" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2; name = "Mix Input"; @@ -63013,7 +61764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgt" = ( +"cdp" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -63027,29 +61778,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgu" = ( +"cdq" = ( /turf/closed/mineral/random/labormineral, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cgv" = ( +"cdr" = ( /turf/closed/mineral/random/low_chance, /area/mine/unexplored{ name = "Civilian Asteroid" }) -"cgw" = ( +"cds" = ( /obj/item/weapon/ore/iron, /obj/item/weapon/ore/iron, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgx" = ( -/turf/open/floor/plating/asteroid, -/area/maintenance/port{ - name = "the bone zone" - }) -"cgy" = ( +"cdt" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -63065,7 +61811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgz" = ( +"cdu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -63078,16 +61824,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgA" = ( +"cdv" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgB" = ( +"cdw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -63098,7 +61847,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgC" = ( +"cdx" = ( /obj/structure/ore_box, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -63106,7 +61855,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cgD" = ( +"cdy" = ( /obj/item/weapon/ore/iron, /obj/item/weapon/ore/iron, /obj/item/weapon/ore/iron, @@ -63116,19 +61865,19 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cgE" = ( +"cdz" = ( /obj/item/weapon/storage/bag/ore, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgF" = ( +"cdA" = ( /obj/structure/ore_box, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgG" = ( +"cdB" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -63143,7 +61892,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgH" = ( +"cdC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -63151,7 +61900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgI" = ( +"cdD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -63160,18 +61909,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgJ" = ( +"cdE" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgK" = ( +"cdF" = ( /obj/item/weapon/storage/bag/ore, /obj/item/weapon/pickaxe/mini, /turf/open/floor/plating/astplate{ @@ -63180,109 +61932,75 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cgL" = ( +"cdG" = ( /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cgM" = ( +"cdH" = ( /obj/item/device/flashlight/lantern, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cgN" = ( +"cdI" = ( /turf/closed/mineral, /area/mine/unexplored{ name = "Research Asteroid" }) -"cgO" = ( +"cdJ" = ( /turf/closed/mineral/random/low_chance, /area/mine/unexplored{ name = "Research Asteroid" }) -"cgP" = ( +"cdK" = ( /obj/item/device/flashlight/lantern, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgQ" = ( +"cdL" = ( /obj/item/weapon/pickaxe/mini, /turf/open/floor/plating/asteroid, /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgR" = ( +"cdM" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Research Asteroid" }) -"cgS" = ( +"cdN" = ( /turf/open/floor/plating/asteroid/airless, /area/mine/unexplored{ name = "Research Asteroid" }) -"cgT" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/mine/unexplored{ - name = "Research Asteroid" - }) -"cgU" = ( -/obj/structure/window/reinforced{ +"cdO" = ( +/obj/machinery/light/small{ dir = 8 }, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, -/area/hallway/primary/aft) -"cgV" = ( -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/hallway/primary/aft) -"cgW" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"cdP" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Service-Research Bridge"; dir = 9; icon_state = "camera" }, -/obj/structure/disposalpipe/segment, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, -/area/hallway/primary/aft) -"cgX" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/mine/unexplored{ - name = "Research Asteroid" +/area/construction/hallway{ + name = "Service-Science Bridge" }) -"cgY" = ( +"cdQ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -63294,13 +62012,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgZ" = ( +"cdR" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cha" = ( +"cdS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -63312,42 +62030,31 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chb" = ( +"cdT" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"chc" = ( +"cdU" = ( /turf/closed/mineral, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"chd" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/hallway/primary/aft) -"che" = ( +"cdV" = ( /obj/machinery/power/solar{ id = "portsolar"; name = "Port Solar Array" }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"chf" = ( +"cdW" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chg" = ( +"cdX" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2; name = "Mix Output"; @@ -63361,7 +62068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chh" = ( +"cdY" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line, @@ -63374,10 +62081,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chi" = ( +"cdZ" = ( /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"chj" = ( +"cea" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -63392,7 +62099,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chk" = ( +"ceb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -63407,7 +62114,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chl" = ( +"cec" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -63421,29 +62128,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chm" = ( +"ced" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/escape) -"chn" = ( +"cee" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/escape) -"cho" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/hallway/primary/aft) -"chp" = ( +"cef" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -63453,21 +62146,21 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chq" = ( +"ceg" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chr" = ( +"ceh" = ( /turf/closed/wall/r_wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chs" = ( +"cei" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -63486,7 +62179,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cht" = ( +"cej" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63497,7 +62190,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chu" = ( +"cek" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63507,15 +62200,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chv" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"cel" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63525,11 +62219,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chw" = ( +"cem" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -63548,41 +62246,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chx" = ( -/turf/open/floor/mineral/titanium, -/turf/closed/wall/mineral/titanium/interior, -/area/shuttle/escape) -"chy" = ( -/obj/structure/table, -/obj/machinery/recharger, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"chz" = ( -/obj/structure/chair{ +"cen" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; dir = 1 }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"chA" = ( -/obj/machinery/computer/emergency_shuttle, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"chB" = ( -/obj/structure/table, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/weapon/crowbar, -/obj/item/weapon/storage/firstaid/fire, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"chC" = ( +"ceo" = ( /obj/structure/lattice, /obj/item/weapon/wirecutters, /turf/open/space, /area/space) -"chD" = ( +"cep" = ( /obj/structure/closet/crate{ name = "solar pack crate" }, @@ -63607,7 +62290,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chE" = ( +"ceq" = ( /obj/machinery/power/terminal{ dir = 4 }, @@ -63625,7 +62308,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chF" = ( +"cer" = ( /obj/machinery/power/smes, /obj/structure/cable/orange{ d2 = 2; @@ -63644,7 +62327,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chG" = ( +"ces" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -63658,35 +62341,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chH" = ( -/obj/machinery/computer/atmos_alert, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"chI" = ( -/obj/structure/chair{ - dir = 8 +"cet" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"chJ" = ( -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"chK" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"chL" = ( -/obj/machinery/computer/security, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"chM" = ( +"ceu" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"chN" = ( +"cev" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -63701,7 +62371,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"chO" = ( +"cew" = ( /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1; @@ -63721,7 +62391,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"chP" = ( +"cex" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -63736,7 +62406,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"chQ" = ( +"cey" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63755,7 +62425,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chR" = ( +"cez" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63768,7 +62438,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chS" = ( +"ceA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63787,7 +62457,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chT" = ( +"ceB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63805,7 +62475,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chU" = ( +"ceC" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -63817,7 +62487,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chV" = ( +"ceD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -63829,7 +62499,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chW" = ( +"ceE" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -63847,12 +62517,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chX" = ( +"ceF" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"chY" = ( +"ceG" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -63861,49 +62531,47 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"chZ" = ( -/obj/machinery/computer/crew, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"cia" = ( -/obj/structure/chair{ - dir = 8 +"ceH" = ( +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 0; - pixel_y = -30 +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"ceI" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/structure/reagent_dispensers/peppertank{ + pixel_x = -32 }, -/obj/machinery/light, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"cib" = ( -/obj/item/device/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = 0; - pixel_y = -29 +/turf/open/floor/mineral/plastitanium/brig{ + dir = 9; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"cic" = ( -/obj/machinery/button/flasher{ - id = "cockpit_flasher"; - pixel_x = 6; - pixel_y = -24 +"ceJ" = ( +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"cid" = ( -/obj/structure/chair{ - dir = 4 +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel }, -/obj/machinery/light, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"cie" = ( -/obj/machinery/computer/communications, -/turf/open/floor/mineral/titanium, +"ceK" = ( +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel + }, /area/shuttle/escape) -"cif" = ( +"ceL" = ( /obj/structure/closet/secure_closet/miner{ locked = 0 }, @@ -63914,7 +62582,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cig" = ( +"ceM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -63922,20 +62590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cih" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Aux Base Construction 2"; - dir = 6; - icon_state = "camera" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/shuttle/auxillary_base) -"cii" = ( +"ceN" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -63943,7 +62598,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cij" = ( +"ceO" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -63957,7 +62612,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"cik" = ( +"ceP" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -63986,7 +62641,7 @@ }, /turf/open/floor/plasteel, /area/storage/tech) -"cil" = ( +"ceQ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -63999,24 +62654,24 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"cim" = ( +"ceR" = ( /obj/structure/lattice, /obj/structure/sign/mining{ pixel_y = -32 }, /turf/open/space, /area/space) -"cin" = ( +"ceS" = ( /obj/structure/lattice/catwalk, /obj/item/weapon/wrench, /turf/open/space, /area/space) -"cio" = ( +"ceT" = ( /obj/structure/lattice, /obj/item/weapon/storage/toolbox/electrical, /turf/open/space, /area/space) -"cip" = ( +"ceU" = ( /obj/machinery/power/solar_control{ id = "portsolar"; name = "Aft Asteroid Solar Control"; @@ -64029,7 +62684,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"ciq" = ( +"ceV" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -64042,7 +62697,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"cir" = ( +"ceW" = ( /obj/machinery/power/apc{ dir = 4; name = "Aft Asteroid Solar APC"; @@ -64069,7 +62724,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"cis" = ( +"ceX" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -64087,7 +62742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cit" = ( +"ceY" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; opened = 1 @@ -64097,7 +62752,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ciu" = ( +"ceZ" = ( /obj/structure/chair, /turf/open/floor/plasteel/red/side{ tag = "icon-red (NORTHWEST)"; @@ -64106,7 +62761,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"civ" = ( +"cfa" = ( /obj/structure/chair, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -64114,7 +62769,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciw" = ( +"cfb" = ( /obj/structure/chair, /obj/machinery/light{ dir = 1 @@ -64125,7 +62780,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cix" = ( +"cfc" = ( /obj/structure/chair, /obj/machinery/camera{ c_tag = "Docking Security Holding Area"; @@ -64138,7 +62793,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciy" = ( +"cfd" = ( /obj/structure/chair, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -64151,7 +62806,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciz" = ( +"cfe" = ( /obj/structure/chair, /turf/open/floor/plasteel/red/side{ tag = "icon-red (NORTHEAST)"; @@ -64160,7 +62815,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciA" = ( +"cff" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -64168,14 +62823,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciB" = ( -/obj/machinery/door/airlock/glass{ - name = "Emergency Shuttle Cockpit"; - req_access_txt = "19" +"cfg" = ( +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1; + floor_tile = /obj/item/stack/tile/plasteel }, -/turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) -"ciC" = ( +"cfh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -64185,7 +62841,7 @@ /area/mine/unexplored{ name = "Research Asteroid" }) -"ciD" = ( +"cfi" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -64193,13 +62849,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/mine/unexplored{ - name = "Research Asteroid" +/area/construction/hallway{ + name = "Service-Science Bridge" }) -"ciE" = ( +"cfj" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -64211,13 +62871,17 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/mine/unexplored{ - name = "Research Asteroid" +/area/construction/hallway{ + name = "Service-Science Bridge" }) -"ciF" = ( +"cfk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -64232,7 +62896,7 @@ /area/mine/unexplored{ name = "Research Asteroid" }) -"ciG" = ( +"cfl" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -64240,12 +62904,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ciH" = ( +"cfm" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ciI" = ( +"cfn" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -64253,7 +62917,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ciJ" = ( +"cfo" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -64267,7 +62931,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"ciK" = ( +"cfp" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -64288,7 +62952,7 @@ /obj/machinery/light/small, /turf/open/floor/plasteel, /area/storage/tech) -"ciL" = ( +"cfq" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -64307,7 +62971,7 @@ }, /turf/open/floor/plasteel, /area/storage/tech) -"ciM" = ( +"cfr" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -64328,7 +62992,7 @@ /obj/machinery/light/small, /turf/open/floor/plasteel, /area/storage/tech) -"ciN" = ( +"cfs" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -64342,14 +63006,14 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"ciO" = ( +"cft" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ciP" = ( +"cfu" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -64360,12 +63024,12 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ciQ" = ( +"cfv" = ( /obj/item/solar_assembly, /obj/item/stack/sheet/glass, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"ciR" = ( +"cfw" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Solars"; req_access_txt = "10;11;12" @@ -64382,20 +63046,20 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"ciS" = ( +"cfx" = ( /obj/structure/grille/broken, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ciT" = ( +"cfy" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciU" = ( +"cfz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -64403,7 +63067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciV" = ( +"cfA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -64414,62 +63078,41 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciW" = ( +"cfB" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciX" = ( +"cfC" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciY" = ( +"cfD" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 4; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciZ" = ( -/obj/structure/chair, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/open/floor/mineral/plastitanium/brig, -/area/shuttle/escape) -"cja" = ( +"cfE" = ( /obj/structure/chair, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) -"cjb" = ( -/obj/machinery/flasher{ - id = "cockpit_flasher"; - pixel_x = 6; - pixel_y = 24 +"cfF" = ( +/turf/open/floor/mineral/plastitanium/brig{ + dir = 8; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) -"cjc" = ( -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"cjd" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"cje" = ( -/obj/structure/table, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 3 +"cfG" = ( +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" }, -/obj/item/weapon/crowbar, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) -"cjf" = ( +"cfH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -64477,12 +63120,12 @@ /area/mine/unexplored{ name = "Research Asteroid" }) -"cjg" = ( +"cfI" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjh" = ( +"cfJ" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -64491,13 +63134,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cji" = ( +"cfK" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjj" = ( +"cfL" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -64507,7 +63150,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjk" = ( +"cfM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -64520,12 +63163,12 @@ /area/mine/unexplored{ name = "Research Asteroid" }) -"cjl" = ( +"cfN" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjm" = ( +"cfO" = ( /obj/machinery/door/airlock/highsecurity{ name = "Secure Tech Storage"; req_access_txt = "19;23" @@ -64540,7 +63183,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjn" = ( +"cfP" = ( /obj/structure/ore_box, /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/cobweb, @@ -64550,7 +63193,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjo" = ( +"cfQ" = ( /obj/structure/ore_box, /obj/effect/turf_decal/delivery, /obj/machinery/light/small{ @@ -64562,7 +63205,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjp" = ( +"cfR" = ( /obj/structure/rack, /obj/item/weapon/pickaxe, /obj/item/weapon/pickaxe, @@ -64574,7 +63217,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjq" = ( +"cfS" = ( /obj/machinery/light/small{ dir = 4 }, @@ -64584,11 +63227,11 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjr" = ( +"cfT" = ( /obj/item/solar_assembly, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"cjs" = ( +"cfU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -64603,7 +63246,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjt" = ( +"cfV" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -64615,7 +63258,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cju" = ( +"cfW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -64626,7 +63269,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cjv" = ( +"cfX" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -64634,19 +63277,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cjw" = ( +"cfY" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjx" = ( +"cfZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cjy" = ( +"cga" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -64654,44 +63297,37 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cjz" = ( +"cgb" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cjA" = ( +"cgc" = ( +/obj/structure/chair{ + dir = 4 + }, /obj/machinery/flasher{ id = "shuttle_flasher"; pixel_x = -24; pixel_y = 6 }, -/obj/machinery/button/flasher{ - id = "shuttle_flasher"; - pixel_x = -24; - pixel_y = -6 - }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) -"cjB" = ( +"cgd" = ( /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) -"cjC" = ( +"cge" = ( /obj/machinery/door/airlock/glass{ name = "Emergency Shuttle Brig"; req_access_txt = "2" }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"cjD" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) -"cjE" = ( +"cgf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -64700,7 +63336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjF" = ( +"cgg" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -64708,12 +63344,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjG" = ( +"cgh" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjH" = ( +"cgi" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -64721,7 +63357,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjI" = ( +"cgj" = ( /obj/machinery/light/small{ dir = 8 }, @@ -64729,7 +63365,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjJ" = ( +"cgk" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -64745,7 +63381,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjK" = ( +"cgl" = ( /obj/machinery/power/apc{ dir = 1; name = "Tech Storage APC"; @@ -64759,10 +63395,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjL" = ( +"cgm" = ( /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai_upload) -"cjM" = ( +"cgn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -64775,7 +63411,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjN" = ( +"cgo" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -64789,7 +63425,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjO" = ( +"cgp" = ( /obj/machinery/power/apc{ dir = 1; name = "Mining Storage APC"; @@ -64805,7 +63441,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjP" = ( +"cgq" = ( /obj/machinery/power/port_gen/pacman, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/floorgrime{ @@ -64814,7 +63450,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjQ" = ( +"cgr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -64825,12 +63461,12 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjR" = ( +"cgs" = ( /obj/structure/lattice/catwalk, /obj/item/stack/sheet/glass, /turf/open/space, /area/space) -"cjS" = ( +"cgt" = ( /obj/structure/rack, /obj/item/weapon/pickaxe, /obj/effect/spawner/lootdrop/maintenance, @@ -64840,7 +63476,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjT" = ( +"cgu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -64852,47 +63488,47 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjU" = ( +"cgv" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjV" = ( +"cgw" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjW" = ( +"cgx" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/mini, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjX" = ( +"cgy" = ( /obj/structure/girder, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjY" = ( +"cgz" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 10; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cjZ" = ( +"cgA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cka" = ( +"cgB" = ( /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (WEST)"; icon_state = "redcorner"; @@ -64900,7 +63536,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckb" = ( +"cgC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -64908,7 +63544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckc" = ( +"cgD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -64916,7 +63552,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckd" = ( +"cgE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -64924,14 +63560,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cke" = ( +"cgF" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 6; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckf" = ( +"cgG" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Security Escape Airlock"; @@ -64941,39 +63577,52 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckg" = ( +"cgH" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckh" = ( +"cgI" = ( /obj/machinery/door/airlock/shuttle{ name = "Emergency Shuttle Airlock"; req_access_txt = "2" }, -/turf/open/floor/mineral/plastitanium/brig, +/turf/open/floor/plating, /area/shuttle/escape) -"cki" = ( +"cgJ" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/mineral/plastitanium/brig, -/area/shuttle/escape) -"ckj" = ( -/obj/structure/chair, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"ckk" = ( -/obj/structure/chair{ - dir = 4 +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (SOUTHWEST)"; + icon_state = "darkred"; + dir = 10; + floor_tile = /obj/item/stack/tile/plasteel }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) -"ckl" = ( +"cgK" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"cgL" = ( /obj/structure/table, -/turf/open/floor/mineral/titanium, +/obj/item/weapon/storage/box/teargas, +/obj/item/weapon/storage/box/zipties, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, /area/shuttle/escape) -"ckm" = ( +"cgM" = ( /obj/machinery/light/small{ dir = 4 }, @@ -64983,7 +63632,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckn" = ( +"cgN" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -64999,7 +63648,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cko" = ( +"cgO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -65015,7 +63664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckp" = ( +"cgP" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -65024,7 +63673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ckq" = ( +"cgQ" = ( /obj/docking_port/mobile/auxillary_base{ dheight = 4; dir = 4; @@ -65035,11 +63684,12 @@ /obj/machinery/computer/auxillary_base{ pixel_y = 0 }, +/obj/docking_port/stationary/public_mining_dock, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ckr" = ( +"cgR" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -65048,7 +63698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cks" = ( +"cgS" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -65057,7 +63707,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckt" = ( +"cgT" = ( /obj/structure/table, /obj/item/weapon/storage/bag/ore, /obj/item/weapon/storage/bag/ore, @@ -65067,7 +63717,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cku" = ( +"cgU" = ( /obj/structure/table, /obj/item/clothing/glasses/meson, /obj/item/weapon/paper{ @@ -65080,7 +63730,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ckv" = ( +"cgV" = ( /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -65088,14 +63738,14 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ckw" = ( +"cgW" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ckx" = ( +"cgX" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -65103,7 +63753,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cky" = ( +"cgY" = ( /obj/structure/sign/mining{ pixel_y = 32 }, @@ -65114,7 +63764,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ckz" = ( +"cgZ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -65122,10 +63772,10 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckA" = ( +"cha" = ( /obj/machinery/power/apc{ dir = 8; - name = "Arrival Hallway APC"; + name = "Arrival Hallway Maintenance APC"; pixel_x = -25; pixel_y = 1 }, @@ -65144,7 +63794,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckB" = ( +"chb" = ( /obj/machinery/light/small{ dir = 1 }, @@ -65154,7 +63804,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckC" = ( +"chc" = ( /obj/machinery/computer/station_alert, /obj/structure/cable/orange{ d2 = 2; @@ -65166,7 +63816,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckD" = ( +"chd" = ( /obj/machinery/camera{ c_tag = "Arrivals SMES"; dir = 6; @@ -65178,7 +63828,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckE" = ( +"che" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plating{ @@ -65187,13 +63837,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckF" = ( +"chf" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckG" = ( +"chg" = ( /obj/machinery/light/small{ dir = 1 }, @@ -65201,13 +63851,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckH" = ( +"chh" = ( /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckI" = ( +"chi" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -65216,7 +63866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckJ" = ( +"chj" = ( /obj/machinery/door/airlock/glass_security{ name = "Holding Area"; req_access_txt = "2" @@ -65226,18 +63876,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckK" = ( +"chk" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) -"ckL" = ( -/obj/structure/table, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"ckM" = ( +"chl" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -65246,7 +63888,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckN" = ( +"chm" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -65255,7 +63897,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckO" = ( +"chn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -65266,7 +63908,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckP" = ( +"cho" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -65276,7 +63918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckQ" = ( +"chp" = ( /obj/machinery/light/small{ dir = 8 }, @@ -65291,7 +63933,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckR" = ( +"chq" = ( /obj/structure/table, /obj/item/weapon/stock_parts/subspace/ansible, /obj/item/weapon/stock_parts/subspace/ansible, @@ -65304,7 +63946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckS" = ( +"chr" = ( /obj/structure/table, /obj/item/weapon/stock_parts/subspace/amplifier, /obj/item/weapon/stock_parts/subspace/amplifier, @@ -65313,7 +63955,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckT" = ( +"chs" = ( /obj/structure/table, /obj/item/weapon/stock_parts/subspace/analyzer, /obj/item/weapon/stock_parts/subspace/analyzer, @@ -65325,7 +63967,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckU" = ( +"cht" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -65336,7 +63978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckV" = ( +"chu" = ( /obj/structure/table, /obj/machinery/cell_charger{ pixel_y = 5 @@ -65349,7 +63991,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckW" = ( +"chv" = ( /obj/structure/table, /obj/item/stack/cable_coil{ pixel_x = -3; @@ -65364,7 +64006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckX" = ( +"chw" = ( /obj/structure/table, /obj/item/weapon/screwdriver{ pixel_y = 16 @@ -65374,7 +64016,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckY" = ( +"chx" = ( /obj/structure/table, /obj/item/weapon/aiModule/reset, /obj/machinery/light{ @@ -65385,7 +64027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"ckZ" = ( +"chy" = ( /obj/machinery/ai_status_display{ pixel_y = 32 }, @@ -65393,13 +64035,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cla" = ( +"chz" = ( /obj/machinery/computer/upload/borg, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"clb" = ( +"chA" = ( /obj/machinery/porta_turret/ai{ dir = 4 }, @@ -65407,13 +64049,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"clc" = ( +"chB" = ( /obj/machinery/computer/upload/ai, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cld" = ( +"chC" = ( /obj/structure/table, /obj/machinery/light{ dir = 4 @@ -65422,7 +64064,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cle" = ( +"chD" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; opened = 1 @@ -65439,7 +64081,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"clf" = ( +"chE" = ( /obj/machinery/light/small, /obj/structure/table, /turf/open/floor/plating{ @@ -65448,7 +64090,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"clg" = ( +"chF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -65460,7 +64102,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clh" = ( +"chG" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -65472,7 +64114,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cli" = ( +"chH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -65494,7 +64136,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clj" = ( +"chI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65506,7 +64148,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clk" = ( +"chJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -65518,14 +64160,14 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cll" = ( +"chK" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clm" = ( +"chL" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -65538,7 +64180,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cln" = ( +"chM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65550,7 +64192,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clo" = ( +"chN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65563,7 +64205,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clp" = ( +"chO" = ( /obj/machinery/power/apc{ dir = 2; name = "Auxillary Construction APC"; @@ -65587,7 +64229,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"clq" = ( +"chP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65600,13 +64242,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clr" = ( +"chQ" = ( /obj/structure/closet, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cls" = ( +"chR" = ( /obj/machinery/airalarm{ dir = 4; pixel_x = -23; @@ -65619,7 +64261,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clt" = ( +"chS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/escape{ tag = "icon-escape (NORTH)"; @@ -65628,7 +64270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clu" = ( +"chT" = ( /turf/open/floor/plasteel/escape/corner{ tag = "icon-escapecorner (NORTH)"; icon_state = "escapecorner"; @@ -65636,13 +64278,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clv" = ( +"chU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clw" = ( +"chV" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -65650,7 +64292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clx" = ( +"chW" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -65658,40 +64300,40 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cly" = ( +"chX" = ( /obj/machinery/door/airlock/shuttle{ name = "Emergency Shuttle Airlock" }, /obj/docking_port/mobile/emergency{ - name = "Box emergency shuttle"; - timid = 0 + dheight = 0; + dwidth = 15; + height = 20; + name = "Cere emergency shuttle"; + port_angle = 90; + preferred_direction = 2; + width = 42 }, /obj/docking_port/stationary{ dir = 4; - dwidth = 12; - height = 18; + dwidth = 15; + height = 20; id = "emergency_home"; - name = "BoxStation emergency evac bay"; + name = "CereStation emergency evac bay"; turf_type = /turf/open/space; - width = 32 + width = 42 }, /turf/open/floor/plating, /area/shuttle/escape) -"clz" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 +"chY" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/machinery/light{ + dir = 1 }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/neutral, /area/shuttle/escape) -"clA" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27; - pixel_y = 0 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"clB" = ( +"chZ" = ( /obj/structure/tank_dispenser/oxygen, /obj/machinery/light/small{ dir = 8 @@ -65700,7 +64342,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clC" = ( +"cia" = ( /obj/structure/rack, /obj/item/clothing/suit/space/fragile, /obj/item/clothing/head/helmet/space/fragile, @@ -65708,7 +64350,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clD" = ( +"cib" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -65721,13 +64363,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clE" = ( +"cic" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clF" = ( +"cid" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 1"; @@ -65741,7 +64383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clG" = ( +"cie" = ( /obj/machinery/light{ dir = 4 }, @@ -65752,7 +64394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clH" = ( +"cif" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -65767,7 +64409,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clI" = ( +"cig" = ( /obj/structure/table, /obj/item/weapon/stock_parts/subspace/filter, /obj/item/weapon/stock_parts/subspace/filter, @@ -65784,12 +64426,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"clJ" = ( +"cih" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"clK" = ( +"cii" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -65801,7 +64443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"clL" = ( +"cij" = ( /obj/structure/table, /obj/item/weapon/electronics/apc, /obj/item/weapon/electronics/airlock, @@ -65812,7 +64454,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"clM" = ( +"cik" = ( /obj/structure/table, /obj/item/weapon/aiModule/supplied/quarantine, /obj/machinery/camera/motion{ @@ -65822,17 +64464,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"clN" = ( +"cil" = ( /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"clO" = ( +"cim" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"clP" = ( +"cin" = ( /obj/structure/table, /obj/item/weapon/aiModule/supplied/freeform, /obj/structure/sign/kiddieplaque{ @@ -65845,7 +64487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"clQ" = ( +"cio" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -65857,7 +64499,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clR" = ( +"cip" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, /turf/open/floor/plasteel/floorgrime{ @@ -65866,7 +64508,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clS" = ( +"ciq" = ( /obj/machinery/power/terminal{ tag = "icon-term (WEST)"; icon_state = "term"; @@ -65885,7 +64527,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clT" = ( +"cir" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -65898,7 +64540,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clU" = ( +"cis" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -65911,7 +64553,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clV" = ( +"cit" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -65922,12 +64564,12 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clW" = ( +"ciu" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"clX" = ( +"civ" = ( /obj/structure/chair{ dir = 4 }, @@ -65938,7 +64580,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clY" = ( +"ciw" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -65947,42 +64589,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clZ" = ( -/obj/structure/chair{ - dir = 8 +"cix" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, /area/shuttle/escape) -"cma" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"cmb" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"cmc" = ( +"ciy" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmd" = ( +"ciz" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cme" = ( +"ciA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; @@ -65991,7 +64616,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmf" = ( +"ciB" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -66009,7 +64634,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmg" = ( +"ciC" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -66025,7 +64650,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmh" = ( +"ciD" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/clothing/glasses/meson, @@ -66036,7 +64661,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmi" = ( +"ciE" = ( /obj/structure/table, /obj/item/weapon/stock_parts/subspace/transmitter, /obj/item/weapon/stock_parts/subspace/transmitter, @@ -66047,7 +64672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmj" = ( +"ciF" = ( /obj/structure/table, /obj/item/weapon/stock_parts/micro_laser, /obj/item/weapon/stock_parts/manipulator, @@ -66068,7 +64693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmk" = ( +"ciG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -66078,7 +64703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cml" = ( +"ciH" = ( /obj/structure/table, /obj/item/device/aicard, /obj/item/weapon/aiModule/reset, @@ -66086,7 +64711,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmm" = ( +"ciI" = ( /obj/structure/table, /obj/item/device/flashlight{ pixel_x = 1; @@ -66102,7 +64727,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmn" = ( +"ciJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -66118,7 +64743,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmo" = ( +"ciK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -66126,13 +64751,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmp" = ( +"ciL" = ( /obj/structure/table, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmq" = ( +"ciM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -66140,7 +64765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmr" = ( +"ciN" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -66150,7 +64775,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cms" = ( +"ciO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -66164,7 +64789,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmt" = ( +"ciP" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -66177,7 +64802,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmu" = ( +"ciQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -66189,7 +64814,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmv" = ( +"ciR" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -66201,7 +64826,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmw" = ( +"ciS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -66213,7 +64838,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmx" = ( +"ciT" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -66225,7 +64850,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmy" = ( +"ciU" = ( /obj/machinery/door/airlock/maintenance{ name = "Docking Asteroid SMES Access"; req_access_txt = "10;11;12" @@ -66241,7 +64866,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmz" = ( +"ciV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -66253,45 +64878,45 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cmA" = ( +"ciW" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmB" = ( +"ciX" = ( /obj/structure/filingcabinet, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cmC" = ( +"ciY" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cmD" = ( +"ciZ" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cmE" = ( +"cja" = ( /obj/structure/closet, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cmF" = ( +"cjb" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmG" = ( +"cjc" = ( /obj/structure/chair{ dir = 4 }, @@ -66306,7 +64931,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cmH" = ( +"cjd" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -66314,25 +64939,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cmI" = ( +"cje" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmJ" = ( +"cjf" = ( /obj/item/clothing/head/cone, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmK" = ( +"cjg" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmL" = ( +"cjh" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27; pixel_y = 0 @@ -66344,7 +64969,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmM" = ( +"cji" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -66365,7 +64990,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmN" = ( +"cjj" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -66373,7 +64998,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmO" = ( +"cjk" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -66385,7 +65010,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmP" = ( +"cjl" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -66393,13 +65018,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cmQ" = ( +"cjm" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cmR" = ( +"cjn" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -66408,7 +65033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cmS" = ( +"cjo" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -66425,7 +65050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmT" = ( +"cjp" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -66445,7 +65070,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmU" = ( +"cjq" = ( /obj/machinery/porta_turret/ai{ dir = 4 }, @@ -66453,39 +65078,39 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmV" = ( +"cjr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmW" = ( +"cjs" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmX" = ( +"cjt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cmY" = ( +"cju" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter{ name = "Research Quantum Pad" }) -"cmZ" = ( +"cjv" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter{ name = "Docking Quantum Pad" }) -"cna" = ( +"cjw" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -66496,7 +65121,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnb" = ( +"cjx" = ( /obj/machinery/light/small{ dir = 8 }, @@ -66506,7 +65131,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnc" = ( +"cjy" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -66522,7 +65147,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnd" = ( +"cjz" = ( /obj/machinery/light/small{ dir = 1 }, @@ -66537,7 +65162,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cne" = ( +"cjA" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -66556,7 +65181,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cnf" = ( +"cjB" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -66566,7 +65191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cng" = ( +"cjC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -66579,7 +65204,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnh" = ( +"cjD" = ( /obj/machinery/light/small{ dir = 8 }, @@ -66587,7 +65212,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cni" = ( +"cjE" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -66595,13 +65220,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnj" = ( +"cjF" = ( /obj/structure/table/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnk" = ( +"cjG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -66609,7 +65234,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnl" = ( +"cjH" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -66619,7 +65244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnm" = ( +"cjI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -66636,7 +65261,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnn" = ( +"cjJ" = ( /obj/machinery/power/apc{ dir = 4; name = "Departures APC"; @@ -66656,7 +65281,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cno" = ( +"cjK" = ( /obj/structure/grille/broken, /obj/item/clothing/head/cone, /turf/open/floor/plating/astplate{ @@ -66665,7 +65290,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cnp" = ( +"cjL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light/small{ dir = 4 @@ -66674,7 +65299,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnq" = ( +"cjM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -66688,7 +65313,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnr" = ( +"cjN" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -66698,7 +65323,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cns" = ( +"cjO" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -66711,7 +65336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnt" = ( +"cjP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -66724,7 +65349,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnu" = ( +"cjQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -66732,7 +65357,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnv" = ( +"cjR" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -66748,7 +65373,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnw" = ( +"cjS" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -66756,7 +65381,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cnx" = ( +"cjT" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 1; name = "Construction Zone"; @@ -66768,7 +65393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cny" = ( +"cjU" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -66792,13 +65417,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cnz" = ( +"cjV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cnA" = ( +"cjW" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -66817,7 +65442,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cnB" = ( +"cjX" = ( /obj/structure/table, /obj/item/weapon/aiModule/core/full/asimov, /obj/item/weapon/aiModule/core/freeformcore, @@ -66841,7 +65466,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cnC" = ( +"cjY" = ( /obj/structure/table, /obj/item/weapon/aiModule/supplied/oxygen, /obj/item/weapon/aiModule/zeroth/oneHuman, @@ -66866,7 +65491,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cnD" = ( +"cjZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -66876,7 +65501,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnE" = ( +"cka" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -66895,7 +65520,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnF" = ( +"ckb" = ( /obj/machinery/power/apc{ dir = 1; name = "Research Quantum Pad APC"; @@ -66915,7 +65540,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnG" = ( +"ckc" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -66925,7 +65550,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnH" = ( +"ckd" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -66935,7 +65560,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnI" = ( +"cke" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -66954,7 +65579,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnJ" = ( +"ckf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -66973,7 +65598,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnK" = ( +"ckg" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -66986,7 +65611,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnL" = ( +"ckh" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -66998,7 +65623,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnM" = ( +"cki" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -67011,7 +65636,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnN" = ( +"ckj" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -67028,7 +65653,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnO" = ( +"ckk" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -67040,7 +65665,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnP" = ( +"ckl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -67053,7 +65678,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnQ" = ( +"ckm" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -67067,7 +65692,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnR" = ( +"ckn" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -67087,7 +65712,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cnS" = ( +"cko" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, @@ -67099,7 +65724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cnT" = ( +"ckp" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -67110,31 +65735,31 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnU" = ( +"ckq" = ( /obj/effect/landmark/blobstart, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnV" = ( +"ckr" = ( /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless; icon_state = "wood-broken" }, /area/security/vacantoffice) -"cnW" = ( +"cks" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnX" = ( +"ckt" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnY" = ( +"cku" = ( /obj/structure/chair{ dir = 4 }, @@ -67156,13 +65781,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cnZ" = ( +"ckv" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coa" = ( +"ckw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -67173,19 +65798,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cob" = ( -/obj/machinery/door/airlock/maintenance{ - name = "External Airlock Access"; - req_access_txt = "12" - }, +"ckx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/maintenance/external{ + name = "External Airlock Access"; + req_access_txt = "12" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coc" = ( +"cky" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -67196,7 +65821,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cod" = ( +"ckz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -67212,7 +65837,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coe" = ( +"ckA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -67231,7 +65856,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cof" = ( +"ckB" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Mix Output"; @@ -67249,14 +65874,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cog" = ( +"ckC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coh" = ( +"ckD" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -67269,7 +65894,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coi" = ( +"ckE" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -67278,7 +65903,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coj" = ( +"ckF" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67286,7 +65911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cok" = ( +"ckG" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -67299,7 +65924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"col" = ( +"ckH" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67312,7 +65937,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"com" = ( +"ckI" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67332,7 +65957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"con" = ( +"ckJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67346,7 +65971,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coo" = ( +"ckK" = ( /obj/structure/rack{ dir = 4 }, @@ -67377,7 +66002,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cop" = ( +"ckL" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -67395,7 +66020,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"coq" = ( +"ckM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -67404,7 +66029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cor" = ( +"ckN" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -67424,13 +66049,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cos" = ( +"ckO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cot" = ( +"ckP" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -67440,7 +66065,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cou" = ( +"ckQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/power/apc{ dir = 4; @@ -67456,7 +66081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cov" = ( +"ckR" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -67479,7 +66104,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cow" = ( +"ckS" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67487,7 +66112,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cox" = ( +"ckT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -67502,7 +66127,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"coy" = ( +"ckU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -67520,7 +66145,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"coz" = ( +"ckV" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67528,7 +66153,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"coA" = ( +"ckW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -67550,14 +66175,14 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"coB" = ( +"ckX" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coC" = ( +"ckY" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -67574,7 +66199,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coD" = ( +"ckZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -67586,7 +66211,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coE" = ( +"cla" = ( /obj/machinery/power/apc{ dir = 2; name = "Teleporter APC"; @@ -67610,7 +66235,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"coF" = ( +"clb" = ( /obj/machinery/light/small{ dir = 1 }, @@ -67626,24 +66251,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/effect/turf_decal/stripes/asteroid/line{ - icon_state = "ast_warn"; - dir = 4 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"coH" = ( +"clc" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -67660,7 +66268,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coI" = ( +"cld" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -67674,7 +66282,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"coJ" = ( +"cle" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -67685,7 +66293,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coK" = ( +"clf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -67695,7 +66303,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coL" = ( +"clg" = ( /obj/machinery/light/small{ dir = 4 }, @@ -67710,19 +66318,19 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coM" = ( +"clh" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"coN" = ( +"cli" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"coO" = ( +"clj" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -67736,27 +66344,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"coP" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"coQ" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"coR" = ( +"clk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -67770,7 +66358,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coS" = ( +"cll" = ( /obj/structure/closet/toolcloset, /turf/open/floor/plasteel/brown/corner{ tag = "icon-browncorner (WEST)"; @@ -67779,7 +66367,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coT" = ( +"clm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -67790,7 +66378,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coU" = ( +"cln" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -67798,7 +66386,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coV" = ( +"clo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -67811,7 +66399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coW" = ( +"clp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -67819,7 +66407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coX" = ( +"clq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -67827,7 +66415,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coY" = ( +"clr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -67837,12 +66425,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coZ" = ( +"cls" = ( /turf/open/floor/plasteel/brown/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpa" = ( +"clt" = ( /obj/structure/rack, /obj/item/weapon/circuitboard/machine/telecomms/processor, /obj/item/weapon/circuitboard/machine/telecomms/receiver, @@ -67856,13 +66444,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cpb" = ( +"clu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cpc" = ( +"clv" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -67883,11 +66471,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cpd" = ( +"clw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai_upload) -"cpe" = ( +"clx" = ( /obj/machinery/door/airlock/highsecurity{ icon_state = "door_closed"; locked = 0; @@ -67903,11 +66491,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cpf" = ( +"cly" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai_upload) -"cpg" = ( +"clz" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -67927,7 +66515,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cph" = ( +"clA" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67935,7 +66523,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpi" = ( +"clB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -67958,7 +66546,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpj" = ( +"clC" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -67982,7 +66570,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpk" = ( +"clD" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67990,7 +66578,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpl" = ( +"clE" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -68012,31 +66600,12 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpm" = ( +"clF" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cpn" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "Arrival Security Checkpoint APC"; - pixel_y = -24 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint2) -"cpo" = ( +"clG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68051,7 +66620,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpp" = ( +"clH" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -68067,7 +66636,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpq" = ( +"clI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68081,7 +66650,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cpr" = ( +"clJ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68097,7 +66666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cps" = ( +"clK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68112,25 +66681,18 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpt" = ( +"clL" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cpu" = ( +"clM" = ( /obj/machinery/door/airlock/shuttle{ name = "Emergency Shuttle Airlock" }, /turf/open/floor/plating, /area/shuttle/escape) -"cpv" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 0; - pixel_y = -30 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"cpw" = ( +"clN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 8; @@ -68143,7 +66705,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cpx" = ( +"clO" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel/brown{ tag = "icon-brown (SOUTHWEST)"; @@ -68152,19 +66714,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpy" = ( +"clP" = ( /obj/machinery/light, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpz" = ( +"clQ" = ( /obj/structure/mining_shuttle_beacon, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpA" = ( +"clR" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -68176,7 +66738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpB" = ( +"clS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -68187,14 +66749,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpC" = ( +"clT" = ( /obj/structure/closet/crate/rcd, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpD" = ( +"clU" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/metal/fifty, @@ -68205,7 +66767,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpE" = ( +"clV" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel/fifty, /obj/item/stack/sheet/rglass{ @@ -68216,7 +66778,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpF" = ( +"clW" = ( /obj/structure/table, /obj/item/device/assault_pod/mining, /obj/item/weapon/storage/box/lights/mixed, @@ -68227,7 +66789,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cpG" = ( +"clX" = ( /obj/machinery/vending/assist, /obj/machinery/camera{ c_tag = "Tech Storage South"; @@ -68237,7 +66799,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cpH" = ( +"clY" = ( /obj/structure/table, /obj/item/device/plant_analyzer, /obj/item/weapon/stock_parts/cell/high/plus, @@ -68247,7 +66809,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cpI" = ( +"clZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/turretid{ control_area = "AI Upload Chamber"; @@ -68261,7 +66823,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cpJ" = ( +"cma" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -68271,7 +66833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cpK" = ( +"cmb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -68280,7 +66842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cpL" = ( +"cmc" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -68297,7 +66859,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpM" = ( +"cmd" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -68310,7 +66872,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpN" = ( +"cme" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -68323,7 +66885,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpO" = ( +"cmf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -68333,7 +66895,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpP" = ( +"cmg" = ( /obj/machinery/light/small, /obj/structure/fans/tiny, /turf/open/floor/plating{ @@ -68342,7 +66904,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpQ" = ( +"cmh" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -68352,7 +66914,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpR" = ( +"cmi" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -68362,7 +66924,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpS" = ( +"cmj" = ( /obj/machinery/light/small, /obj/structure/fans/tiny, /turf/open/floor/plating{ @@ -68371,7 +66933,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpT" = ( +"cmk" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -68381,7 +66943,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpU" = ( +"cml" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -68395,7 +66957,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpV" = ( +"cmm" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -68408,7 +66970,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpW" = ( +"cmn" = ( /obj/structure/table, /obj/item/device/multitool, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -68420,7 +66982,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpX" = ( +"cmo" = ( /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -68428,7 +66990,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpY" = ( +"cmp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -68441,20 +67003,20 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpZ" = ( +"cmq" = ( /obj/machinery/light/small, /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cqa" = ( +"cmr" = ( /obj/machinery/computer/teleporter, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqb" = ( +"cms" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -68467,7 +67029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqc" = ( +"cmt" = ( /obj/machinery/light{ dir = 1 }, @@ -68475,7 +67037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqd" = ( +"cmu" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -68488,19 +67050,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqe" = ( +"cmv" = ( /obj/effect/turf_decal/bot, /obj/machinery/shieldwallgen, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqf" = ( +"cmw" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqg" = ( +"cmx" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -68515,7 +67077,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqh" = ( +"cmy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -68526,26 +67088,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqi" = ( +"cmz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless; icon_state = "wood-broken" }, /area/security/vacantoffice) -"cqj" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/escape{ - tag = "icon-escape (WEST)"; - icon_state = "escape"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/secondary/exit) -"cqk" = ( +"cmA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -68553,7 +67103,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cql" = ( +"cmB" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -68563,22 +67113,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cqm" = ( -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Cargo" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"cqn" = ( -/obj/machinery/door/airlock/glass{ - name = "Emergency Shuttle Infirmary" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/escape) -"cqo" = ( +"cmC" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/pod_2) -"cqp" = ( +"cmD" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 4; icon_state = "propulsion"; @@ -68586,7 +67124,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) -"cqq" = ( +"cmE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ icon_state = "tube1"; @@ -68599,7 +67137,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cqr" = ( +"cmF" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = 1; name = "Auxillary Base Construction"; @@ -68616,19 +67154,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cqs" = ( +"cmG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cqt" = ( +"cmH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cqu" = ( +"cmI" = ( /obj/machinery/door/airlock/engineering{ name = "Tech Storage"; req_access_txt = "23" @@ -68643,34 +67181,34 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cqv" = ( +"cmJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cqw" = ( +"cmK" = ( /obj/machinery/vending/snack/random, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cqx" = ( +"cmL" = ( /obj/machinery/vending/cola/random, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cqy" = ( +"cmM" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cqz" = ( +"cmN" = ( /turf/closed/wall/r_wall, /area/hallway/primary/aft) -"cqA" = ( +"cmO" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -68678,7 +67216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cqB" = ( +"cmP" = ( /obj/machinery/door/airlock/glass{ name = "Research Quantum Pad" }, @@ -68694,18 +67232,23 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cqC" = ( +"cmQ" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/space, -/area/space) -"cqD" = ( +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cmR" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cqE" = ( +"cmS" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -68716,7 +67259,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cqF" = ( +"cmT" = ( /obj/machinery/door/airlock/glass{ name = "Docking Quantum Pad" }, @@ -68732,7 +67275,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cqG" = ( +"cmU" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -68743,7 +67286,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cqH" = ( +"cmV" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -68754,7 +67297,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cqI" = ( +"cmW" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -68770,13 +67313,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cqJ" = ( +"cmX" = ( /obj/machinery/teleport/station, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqK" = ( +"cmY" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -68784,19 +67327,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqL" = ( +"cmZ" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqM" = ( +"cna" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqN" = ( -/obj/structure/closet/secure_closet/security/engine, +"cnb" = ( +/obj/structure/closet/secure_closet/security, /turf/open/floor/plasteel/red/side{ tag = "icon-red (NORTHWEST)"; icon_state = "red"; @@ -68804,14 +67347,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqO" = ( +"cnc" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 1; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqP" = ( +"cnd" = ( /obj/machinery/computer/security, /obj/machinery/light{ dir = 1 @@ -68822,7 +67365,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqQ" = ( +"cne" = ( /obj/machinery/computer/card, /obj/machinery/camera{ c_tag = "Docking Security Checkpoint"; @@ -68840,7 +67383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqR" = ( +"cnf" = ( /obj/machinery/computer/secure_data, /obj/machinery/newscaster/security_unit{ pixel_y = 32 @@ -68851,7 +67394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqS" = ( +"cng" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_y = 32 }, @@ -68867,7 +67410,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqT" = ( +"cnh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -68883,7 +67426,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqU" = ( +"cni" = ( /obj/machinery/door/airlock/security{ name = "Security Checkpoint"; req_access = null; @@ -68896,7 +67439,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqV" = ( +"cnj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -68908,7 +67451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqW" = ( +"cnk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -68916,7 +67459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqX" = ( +"cnl" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -68929,13 +67472,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqY" = ( +"cnm" = ( /obj/structure/table_frame/wood, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cqZ" = ( +"cnn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/table_frame/wood, /turf/open/floor/wood{ @@ -68943,43 +67486,26 @@ icon_state = "wood-broken" }, /area/security/vacantoffice) -"cra" = ( -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/escape) -"crb" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27; - pixel_y = 0 - }, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/escape) -"crc" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"crd" = ( +"cno" = ( /obj/docking_port/stationary/random{ dir = 8; - id = "pod_asteroid2"; - name = "asteroid" + id = "pod_lavaland2"; + name = "lavaland" }, /turf/open/space, /area/space) -"cre" = ( +"cnp" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/pod_2) -"crf" = ( +"cnq" = ( /obj/machinery/computer/shuttle/pod{ pixel_x = 0; pixel_y = -32; - possible_destinations = "pod_asteroid2"; + possible_destinations = "pod_lavaland2"; shuttleId = "pod2" }, /obj/structure/chair{ @@ -68990,7 +67516,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) -"crg" = ( +"cnr" = ( /obj/item/weapon/storage/pod{ pixel_x = 6; pixel_y = -28 @@ -69007,7 +67533,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) -"crh" = ( +"cns" = ( /obj/machinery/door/airlock/titanium{ name = "Escape Pod Airlock" }, @@ -69019,7 +67545,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) -"cri" = ( +"cnt" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4; name = "Research Escape Pod" @@ -69028,7 +67554,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crj" = ( +"cnu" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8; name = "Research Escape Pod" @@ -69037,7 +67563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crk" = ( +"cnv" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -69064,7 +67590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crl" = ( +"cnw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69081,7 +67607,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crm" = ( +"cnx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69101,7 +67627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crn" = ( +"cny" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69121,7 +67647,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cro" = ( +"cnz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69145,7 +67671,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crp" = ( +"cnA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69167,7 +67693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crq" = ( +"cnB" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -69184,7 +67710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crr" = ( +"cnC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69204,7 +67730,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crs" = ( +"cnD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69227,7 +67753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crt" = ( +"cnE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69242,7 +67768,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cru" = ( +"cnF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69262,7 +67788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crv" = ( +"cnG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69279,7 +67805,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crw" = ( +"cnH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69300,7 +67826,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crx" = ( +"cnI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69317,7 +67843,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cry" = ( +"cnJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69338,7 +67864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crz" = ( +"cnK" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable{ d1 = 4; @@ -69352,7 +67878,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crA" = ( +"cnL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69371,7 +67897,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crB" = ( +"cnM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69390,7 +67916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crC" = ( +"cnN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69406,7 +67932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crD" = ( +"cnO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69427,7 +67953,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crE" = ( +"cnP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69448,7 +67974,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crF" = ( +"cnQ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69462,7 +67988,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crG" = ( +"cnR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69481,7 +68007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crH" = ( +"cnS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69500,7 +68026,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crI" = ( +"cnT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -69519,7 +68045,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crJ" = ( +"cnU" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -69539,7 +68065,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crK" = ( +"cnV" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69551,19 +68077,24 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"crL" = ( +"cnW" = ( /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/open/floor/plasteel/neutral/side{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1; heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"crM" = ( +"cnX" = ( /obj/structure/sign/directions/evac{ dir = 4; icon_state = "direction_evac"; @@ -69584,7 +68115,7 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"crN" = ( +"cnY" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -69595,7 +68126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crO" = ( +"cnZ" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -69604,7 +68135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crP" = ( +"coa" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -69612,7 +68143,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crQ" = ( +"cob" = ( /obj/machinery/light{ dir = 1 }, @@ -69623,7 +68154,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crR" = ( +"coc" = ( /obj/structure/sign/directions/science{ dir = 8; icon_state = "direction_sci"; @@ -69643,7 +68174,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crS" = ( +"cod" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -69653,7 +68184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crT" = ( +"coe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -69666,7 +68197,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crU" = ( +"cof" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -69689,7 +68220,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crV" = ( +"cog" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -69705,7 +68236,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crW" = ( +"coh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -69721,7 +68252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crX" = ( +"coi" = ( /obj/machinery/light{ dir = 1 }, @@ -69743,7 +68274,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crY" = ( +"coj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69759,7 +68290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crZ" = ( +"cok" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69775,7 +68306,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csa" = ( +"col" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -69789,32 +68320,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csb" = ( +"com" = ( /obj/machinery/teleport/hub, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"csc" = ( +"con" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"csd" = ( +"coo" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cse" = ( +"cop" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csf" = ( +"coq" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -69827,7 +68358,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csg" = ( +"cor" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -69838,7 +68369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csh" = ( +"cos" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -69846,7 +68377,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csi" = ( +"cot" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -69854,13 +68385,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csj" = ( +"cou" = ( /obj/structure/table/wood, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csk" = ( +"cov" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/chair, /turf/open/floor/wood{ @@ -69868,7 +68399,7 @@ icon_state = "wood-broken" }, /area/security/vacantoffice) -"csl" = ( +"cow" = ( /obj/machinery/light/small{ dir = 4 }, @@ -69876,7 +68407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csm" = ( +"cox" = ( /obj/machinery/light/small{ dir = 8 }, @@ -69891,7 +68422,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"csn" = ( +"coy" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -69903,42 +68434,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cso" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/escape) -"csp" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"csq" = ( -/obj/structure/table, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/weapon/crowbar, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27; - pixel_y = 0 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/escape) -"csr" = ( +"coz" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"css" = ( +"coA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/sign/pods{ pixel_x = -32 @@ -69950,7 +68453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cst" = ( +"coB" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -69959,7 +68462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csu" = ( +"coC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -69971,13 +68474,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csv" = ( +"coD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csw" = ( +"coE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -69987,19 +68490,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csx" = ( +"coF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csy" = ( +"coG" = ( /obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csz" = ( +"coH" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -70009,13 +68512,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"csA" = ( +"coI" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csB" = ( +"coJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -70023,19 +68526,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csC" = ( +"coK" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csD" = ( +"coL" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csE" = ( +"coM" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -70047,7 +68550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csF" = ( +"coN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -70055,7 +68558,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csG" = ( +"coO" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -70065,12 +68568,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csH" = ( +"coP" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csI" = ( +"coQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/blue/corner{ tag = "icon-bluecorner (EAST)"; @@ -70079,7 +68582,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csJ" = ( +"coR" = ( /obj/structure/table, /obj/item/weapon/hand_tele, /obj/item/device/radio/beacon, @@ -70093,7 +68596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"csK" = ( +"coS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -70101,7 +68604,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"csL" = ( +"coT" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; icon_state = "plant-21" @@ -70112,7 +68615,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csM" = ( +"coU" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -70122,7 +68625,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csN" = ( +"coV" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -70136,7 +68639,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csO" = ( +"coW" = ( /obj/structure/chair/office/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -70145,12 +68648,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csP" = ( +"coX" = ( /turf/open/floor/plasteel/red/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csQ" = ( +"coY" = ( /obj/structure/table, /obj/item/weapon/crowbar, /obj/item/device/radio, @@ -70158,7 +68661,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csR" = ( +"coZ" = ( /obj/structure/table, /obj/machinery/recharger, /turf/open/floor/plasteel/red/side{ @@ -70167,19 +68670,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csS" = ( +"cpa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csT" = ( +"cpb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csU" = ( +"cpc" = ( /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -70197,10 +68700,8 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"csV" = ( +/area/hallway/secondary/entry) +"cpd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -70213,7 +68714,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"csW" = ( +"cpe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -70221,7 +68722,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"csX" = ( +"cpf" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -70231,20 +68732,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"csY" = ( -/obj/structure/closet, -/turf/open/floor/mineral/titanium/yellow, +"cpg" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/plasteel, /area/shuttle/escape) -"csZ" = ( -/obj/structure/closet/crate, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/escape) -"cta" = ( +"cph" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"ctb" = ( +"cpi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -70255,7 +68755,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctc" = ( +"cpj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70266,7 +68766,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctd" = ( +"cpk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70282,7 +68782,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cte" = ( +"cpl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70292,7 +68792,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctf" = ( +"cpm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70303,7 +68803,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctg" = ( +"cpn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70321,7 +68821,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cth" = ( +"cpo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70333,7 +68833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cti" = ( +"cpp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70348,7 +68848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctj" = ( +"cpq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70363,7 +68863,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctk" = ( +"cpr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -70371,7 +68871,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctl" = ( +"cps" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70380,7 +68880,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctm" = ( +"cpt" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/purple/corner{ tag = "icon-purplecorner (WEST)"; @@ -70389,7 +68889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctn" = ( +"cpu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70400,7 +68900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cto" = ( +"cpv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70414,7 +68914,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctp" = ( +"cpw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70425,7 +68925,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctq" = ( +"cpx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70440,7 +68940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctr" = ( +"cpy" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -70448,7 +68948,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cts" = ( +"cpz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70462,7 +68962,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctt" = ( +"cpA" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -70473,7 +68973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctu" = ( +"cpB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -70483,14 +68983,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctv" = ( +"cpC" = ( /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctw" = ( +"cpD" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -70504,80 +69004,96 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctx" = ( +"cpE" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cty" = ( +"cpF" = ( /obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctz" = ( +"cpG" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctA" = ( -/obj/structure/window/reinforced, +"cpH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/camera{ c_tag = "Research-Docking Bridge 1"; dir = 1; icon_state = "camera"; network = list("SS13") }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cpI" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/engine, -/area/space) -"ctB" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Research-Docking Bridge 2"; - dir = 1; - icon_state = "camera"; - network = list("SS13") +/obj/machinery/power/apc{ + dir = 2; + name = "Science-Docking Bridge APC"; + pixel_y = -24 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, /turf/open/floor/engine, -/area/space) -"ctC" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Research-Docking Bridge 3"; - dir = 1; - icon_state = "camera"; - network = list("SS13") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"ctD" = ( +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cpJ" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -70588,7 +69104,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctE" = ( +"cpK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -70601,7 +69117,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctF" = ( +"cpL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70614,7 +69130,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctG" = ( +"cpM" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -70625,7 +69141,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctH" = ( +"cpN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70642,7 +69158,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctI" = ( +"cpO" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -70662,7 +69178,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctJ" = ( +"cpP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70671,7 +69187,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctK" = ( +"cpQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -70682,7 +69198,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctL" = ( +"cpR" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -70694,7 +69210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"ctM" = ( +"cpS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -70703,7 +69219,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"ctN" = ( +"cpT" = ( /obj/machinery/door/airlock/command{ name = "Teleport Access"; req_access_txt = "17" @@ -70716,14 +69232,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"ctO" = ( +"cpU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"ctP" = ( +"cpV" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/window/brigdoor/northright{ @@ -70734,7 +69250,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"ctQ" = ( +"cpW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -70747,7 +69263,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"ctR" = ( +"cpX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock{ name = "Vacant Office"; @@ -70757,22 +69273,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"ctS" = ( +"cpY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"ctT" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/vacantoffice) -"ctU" = ( +"cpZ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /obj/machinery/camera{ @@ -70790,30 +69297,30 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ctV" = ( +"cqa" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, /area/shuttle/escape) -"ctW" = ( +"cqb" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"ctX" = ( +"cqc" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"ctY" = ( +"cqd" = ( /obj/machinery/mecha_part_fabricator, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"ctZ" = ( +"cqe" = ( /obj/machinery/door/poddoor/shutters{ id = "MechbayShutters" }, @@ -70821,7 +69328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cua" = ( +"cqf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -70836,7 +69343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cub" = ( +"cqg" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -70854,7 +69361,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cuc" = ( +"cqh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -70862,7 +69369,7 @@ /area/medical/research{ name = "Research Division" }) -"cud" = ( +"cqi" = ( /obj/machinery/door/airlock/research{ cyclelinkeddir = 2; name = "Research Division Access"; @@ -70882,19 +69389,19 @@ /area/medical/research{ name = "Research Division" }) -"cue" = ( +"cqj" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/research{ name = "Research Division" }) -"cuf" = ( +"cqk" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cug" = ( +"cql" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -70912,7 +69419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cuh" = ( +"cqm" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -70933,7 +69440,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cui" = ( +"cqn" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -70954,7 +69461,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cuj" = ( +"cqo" = ( /obj/machinery/door/airlock/maintenance{ name = "Science SMES Access"; req_access_txt = "10;11;12" @@ -70970,17 +69477,22 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cuk" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cqp" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/structure/lattice/catwalk, /obj/structure/girder, /obj/structure/grille, +/obj/structure/window/reinforced, /turf/open/space, -/area/space) -"cul" = ( +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cqq" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -70989,19 +69501,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cum" = ( +"cqr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cun" = ( +"cqs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuo" = ( +"cqt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -71009,7 +69521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cup" = ( +"cqu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71023,7 +69535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuq" = ( +"cqv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71034,7 +69546,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cur" = ( +"cqw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71050,7 +69562,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cus" = ( +"cqx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71062,7 +69574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cut" = ( +"cqy" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/arrival/corner{ tag = "icon-arrivalcorner (NORTH)"; @@ -71071,7 +69583,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuu" = ( +"cqz" = ( /obj/machinery/light{ dir = 1 }, @@ -71085,7 +69597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuv" = ( +"cqA" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel/arrival/corner{ tag = "icon-arrivalcorner (NORTH)"; @@ -71094,7 +69606,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuw" = ( +"cqB" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -71105,7 +69617,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cux" = ( +"cqC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71126,7 +69638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuy" = ( +"cqD" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -71141,7 +69653,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuz" = ( +"cqE" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -71177,7 +69689,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuA" = ( +"cqF" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -71186,7 +69698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuB" = ( +"cqG" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -71209,7 +69721,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuC" = ( +"cqH" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -71227,7 +69739,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuD" = ( +"cqI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71241,7 +69753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuE" = ( +"cqJ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -71252,7 +69764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuF" = ( +"cqK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71263,7 +69775,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuG" = ( +"cqL" = ( /obj/machinery/light{ dir = 1 }, @@ -71277,7 +69789,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuH" = ( +"cqM" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/red/corner{ tag = "icon-redcorner (EAST)"; @@ -71286,7 +69798,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuI" = ( +"cqN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71302,7 +69814,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuJ" = ( +"cqO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71314,7 +69826,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuK" = ( +"cqP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71330,7 +69842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuL" = ( +"cqQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71339,7 +69851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuM" = ( +"cqR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71347,7 +69859,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuN" = ( +"cqS" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -71355,16 +69867,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuO" = ( +"cqT" = ( /obj/structure/shuttle/engine/propulsion, /turf/open/floor/plating/airless, /area/shuttle/escape) -"cuP" = ( -/turf/open/space, -/area/mine/unexplored{ - name = "Research Asteroid" - }) -"cuQ" = ( +"cqU" = ( /obj/machinery/door/poddoor{ id = "mixvent"; name = "Mixer Room Vent" @@ -71373,7 +69880,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuR" = ( +"cqV" = ( /obj/structure/sign/vacuum{ pixel_y = 32 }, @@ -71381,7 +69888,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuS" = ( +"cqW" = ( /obj/machinery/sparker{ dir = 2; id = "mixingsparker"; @@ -71400,7 +69907,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuT" = ( +"cqX" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -71408,7 +69915,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuU" = ( +"cqY" = ( /obj/machinery/airlock_sensor{ id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; @@ -71423,7 +69930,7 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cuV" = ( +"cqZ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -71445,7 +69952,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuW" = ( +"cra" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; name = "mix to port" @@ -71454,7 +69961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuX" = ( +"crb" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, @@ -71465,13 +69972,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuY" = ( +"crc" = ( /obj/machinery/recharge_station, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cuZ" = ( +"crd" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -71481,13 +69988,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cva" = ( +"cre" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvb" = ( +"crf" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -71497,12 +70004,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvc" = ( +"crg" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvd" = ( +"crh" = ( /obj/machinery/button/door{ id = "MechbayShutters"; name = "Mechbay Shutters"; @@ -71518,13 +70025,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cve" = ( +"cri" = ( /obj/machinery/r_n_d/circuit_imprinter, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvf" = ( +"crj" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -71536,7 +70043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvg" = ( +"crk" = ( /obj/machinery/button/door{ id = "RoboticsShutters"; name = "Robotics Privacy Shutters"; @@ -71551,7 +70058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvh" = ( +"crl" = ( /obj/machinery/requests_console{ department = "Robotics"; departmentType = 2; @@ -71562,7 +70069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvi" = ( +"crm" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -71572,13 +70079,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvj" = ( +"crn" = ( /obj/structure/table/optable, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvk" = ( +"cro" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -71598,7 +70105,7 @@ /area/medical/research{ name = "Research Division" }) -"cvl" = ( +"crp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -71609,7 +70116,7 @@ /area/medical/research{ name = "Research Division" }) -"cvm" = ( +"crq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -71622,7 +70129,7 @@ /area/medical/research{ name = "Research Division" }) -"cvn" = ( +"crr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -71640,7 +70147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvo" = ( +"crs" = ( /obj/machinery/button/door{ id = "RnDShutters"; name = "Research Privacy Shutters"; @@ -71657,7 +70164,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvp" = ( +"crt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71668,7 +70175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvq" = ( +"cru" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -71679,7 +70186,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvr" = ( +"crv" = ( /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; @@ -71687,7 +70194,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvs" = ( +"crw" = ( /obj/structure/chair/office/light{ dir = 1 }, @@ -71698,7 +70205,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvt" = ( +"crx" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, /obj/item/stack/sheet/metal/fifty, @@ -71715,24 +70222,30 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvu" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cvv" = ( +"cry" = ( /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ +/obj/machinery/power/apc{ + dir = 1; + name = "Aft Asteroid Hallway APC"; + pixel_x = 0; + pixel_y = 25 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cvw" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"crz" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -71750,8 +70263,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cvx" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"crA" = ( /obj/machinery/power/apc{ dir = 8; name = "Aft Asteroid Maintenance APC"; @@ -71773,7 +70288,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cvy" = ( +"crB" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -71784,7 +70299,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cvz" = ( +"crC" = ( /obj/structure/rack, /obj/item/weapon/storage/bag/ore, /obj/item/weapon/pickaxe/emergency, @@ -71792,19 +70307,19 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cvA" = ( +"crD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvB" = ( +"crE" = ( /obj/effect/landmark/lightsout, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvC" = ( +"crF" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -71813,13 +70328,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvD" = ( +"crG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvE" = ( +"crH" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -71828,7 +70343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvF" = ( +"crI" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -71840,7 +70355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvG" = ( +"crJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -71852,7 +70367,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvH" = ( +"crK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71869,7 +70384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvI" = ( +"crL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -71886,7 +70401,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvJ" = ( +"crM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -71904,7 +70419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvK" = ( +"crN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -71915,7 +70430,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvL" = ( +"crO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -71927,7 +70442,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvM" = ( +"crP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -71939,7 +70454,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvN" = ( +"crQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -71950,7 +70465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvO" = ( +"crR" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -71958,7 +70473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvP" = ( +"crS" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -71971,18 +70486,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvQ" = ( +"crT" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvR" = ( +"crU" = ( /turf/open/floor/engine/vacuum{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cvS" = ( +"crV" = ( /obj/machinery/door/airlock/glass_research{ autoclose = 0; frequency = 1449; @@ -71999,13 +70514,13 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cvT" = ( +"crW" = ( /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" }, /area/toxins/mixing) -"cvU" = ( +"crX" = ( /obj/machinery/door/airlock/glass_research{ autoclose = 0; frequency = 1449; @@ -72022,7 +70537,7 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cvV" = ( +"crY" = ( /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; @@ -72030,12 +70545,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cvW" = ( +"crZ" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cvX" = ( +"csa" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27; pixel_y = 0 @@ -72051,12 +70566,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cvY" = ( +"csb" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvZ" = ( +"csc" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72065,7 +70580,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwa" = ( +"csd" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -72074,7 +70589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwb" = ( +"cse" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72082,7 +70597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwc" = ( +"csf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -72090,7 +70605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwd" = ( +"csg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -72098,7 +70613,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwe" = ( +"csh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -72108,13 +70623,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwf" = ( +"csi" = ( /obj/machinery/computer/operating, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwg" = ( +"csj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -72122,7 +70637,7 @@ /area/medical/research{ name = "Research Division" }) -"cwh" = ( +"csk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -72130,7 +70645,7 @@ /area/medical/research{ name = "Research Division" }) -"cwi" = ( +"csl" = ( /obj/machinery/light/small{ dir = 4 }, @@ -72140,7 +70655,7 @@ /area/medical/research{ name = "Research Division" }) -"cwj" = ( +"csm" = ( /obj/machinery/r_n_d/destructive_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72149,7 +70664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwk" = ( +"csn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -72157,7 +70672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwl" = ( +"cso" = ( /obj/machinery/r_n_d/protolathe, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -72166,7 +70681,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwm" = ( +"csp" = ( /obj/item/weapon/folder/white, /obj/item/weapon/disk/tech_disk{ pixel_x = 0; @@ -72184,12 +70699,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwn" = ( +"csq" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwo" = ( +"csr" = ( /obj/item/weapon/reagent_containers/glass/beaker/large{ pixel_x = -3; pixel_y = 3 @@ -72208,13 +70723,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwp" = ( +"css" = ( /obj/structure/closet/toolcloset, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cwq" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cst" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -72223,8 +70740,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cwr" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"csu" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -72236,8 +70755,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cws" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"csv" = ( /obj/machinery/door/airlock/maintenance{ name = "Science SMES Access"; req_access_txt = "10;11;12" @@ -72253,7 +70774,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cwt" = ( +"csw" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -72274,7 +70795,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cwu" = ( +"csx" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -72282,7 +70803,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwv" = ( +"csy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -72290,7 +70811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cww" = ( +"csz" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -72299,13 +70820,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwx" = ( +"csA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/arrival{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwy" = ( +"csB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -72317,7 +70838,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwz" = ( +"csC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -72326,7 +70847,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwA" = ( +"csD" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -72338,7 +70859,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwB" = ( +"csE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -72351,7 +70872,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwC" = ( +"csF" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -72368,7 +70889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwD" = ( +"csG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 4; @@ -72379,7 +70900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwE" = ( +"csH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 4; @@ -72390,7 +70911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwF" = ( +"csI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -72411,7 +70932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwG" = ( +"csJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72427,7 +70948,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwH" = ( +"csK" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -72441,7 +70962,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwI" = ( +"csL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72462,7 +70983,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwJ" = ( +"csM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -72486,7 +71007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwK" = ( +"csN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72503,7 +71024,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwL" = ( +"csO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -72520,7 +71041,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwM" = ( +"csP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -72529,7 +71050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwN" = ( +"csQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -72537,7 +71058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwO" = ( +"csR" = ( /obj/machinery/sparker{ dir = 2; id = "mixingsparker"; @@ -72552,7 +71073,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cwP" = ( +"csS" = ( /obj/structure/sign/fire{ pixel_y = -32 }, @@ -72565,7 +71086,7 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cwQ" = ( +"csT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -72589,7 +71110,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cwR" = ( +"csU" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; name = "port to mix" @@ -72598,22 +71119,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cwS" = ( +"csV" = ( /obj/machinery/mech_bay_recharge_port, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwT" = ( +"csW" = ( /turf/open/floor/mech_bay_recharge_floor, /area/assembly/robotics) -"cwU" = ( +"csX" = ( /obj/machinery/computer/mech_bay_power_console, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwV" = ( +"csY" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72625,7 +71146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwW" = ( +"csZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72633,7 +71154,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwX" = ( +"cta" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72642,7 +71163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwY" = ( +"ctb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -72651,7 +71172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwZ" = ( +"ctc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72662,7 +71183,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxa" = ( +"ctd" = ( /obj/structure/rack, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/metal/fifty, @@ -72685,7 +71206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxb" = ( +"cte" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -72693,7 +71214,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxc" = ( +"ctf" = ( /obj/structure/table, /obj/item/device/mmi, /obj/item/device/mmi, @@ -72702,7 +71223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxd" = ( +"ctg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/closet/l3closet/scientist, /turf/open/floor/plasteel/white{ @@ -72711,7 +71232,7 @@ /area/medical/research{ name = "Research Division" }) -"cxe" = ( +"cth" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -72721,7 +71242,7 @@ /area/medical/research{ name = "Research Division" }) -"cxf" = ( +"cti" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -72734,7 +71255,7 @@ /area/medical/research{ name = "Research Division" }) -"cxg" = ( +"ctj" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -72750,7 +71271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxh" = ( +"ctk" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -72759,7 +71280,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxi" = ( +"ctl" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72767,19 +71288,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxj" = ( +"ctm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxk" = ( +"ctn" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxl" = ( +"cto" = ( /obj/item/weapon/stock_parts/manipulator, /obj/item/weapon/stock_parts/capacitor, /obj/item/weapon/stock_parts/capacitor, @@ -72800,47 +71321,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxm" = ( -/obj/machinery/computer/station_alert, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cxn" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Aft Asteroid Hallway APC"; - pixel_x = 24; - pixel_y = 0 - }, +"ctp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/turf_decal/stripes/end{ - tag = "icon-warn_end (WEST)"; - icon_state = "warn_end"; - dir = 8 - }, -/turf/open/floor/plating{ +/turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cxo" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ctq" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cxp" = ( +"ctr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ @@ -72854,7 +71352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxq" = ( +"cts" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -72868,14 +71366,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxr" = ( +"ctt" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxs" = ( +"ctu" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -72890,7 +71388,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxt" = ( +"ctv" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ @@ -72910,7 +71408,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxu" = ( +"ctw" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -72919,7 +71417,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxv" = ( +"ctx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -72930,7 +71428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxw" = ( +"cty" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -72947,7 +71445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxx" = ( +"ctz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72955,26 +71453,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxy" = ( +"ctA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxz" = ( +"ctB" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxA" = ( -/obj/effect/landmark/start/roboticist, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/assembly/robotics) -"cxB" = ( +"ctC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -72984,7 +71476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxC" = ( +"ctD" = ( /obj/structure/table, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -72998,7 +71490,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxD" = ( +"ctE" = ( /obj/structure/window/reinforced, /obj/structure/table, /obj/item/device/assembly/flash/handheld, @@ -73011,7 +71503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxE" = ( +"ctF" = ( /obj/structure/table, /obj/structure/window/reinforced, /obj/item/weapon/surgical_drapes, @@ -73021,7 +71513,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxF" = ( +"ctG" = ( /obj/machinery/door/airlock/research{ cyclelinkeddir = 1; name = "Research Division Access"; @@ -73034,20 +71526,20 @@ /area/medical/research{ name = "Research Division" }) -"cxG" = ( +"ctH" = ( /obj/machinery/computer/rdconsole/core, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxH" = ( +"ctI" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxI" = ( +"ctJ" = ( /obj/machinery/r_n_d/circuit_imprinter, /obj/item/weapon/reagent_containers/glass/beaker/sulphuric, /obj/effect/turf_decal/stripes/line{ @@ -73057,7 +71549,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxJ" = ( +"ctK" = ( /obj/structure/table/glass, /obj/machinery/cell_charger, /obj/item/weapon/stock_parts/cell/high, @@ -73066,7 +71558,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxK" = ( +"ctL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -73074,7 +71566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxL" = ( +"ctM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -73084,7 +71576,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxM" = ( +"ctN" = ( /obj/item/weapon/stock_parts/console_screen, /obj/item/weapon/stock_parts/console_screen, /obj/item/weapon/stock_parts/console_screen, @@ -73109,7 +71601,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxN" = ( +"ctO" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -73124,8 +71616,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cxO" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ctP" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -73139,8 +71633,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cxP" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ctQ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -73157,8 +71653,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cxQ" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"ctR" = ( /turf/open/floor/plasteel/darkpurple/side{ tag = "icon-darkpurple (NORTH)"; icon_state = "darkpurple"; @@ -73166,7 +71664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cxR" = ( +"ctS" = ( /obj/machinery/light/small{ dir = 1 }, @@ -73177,7 +71675,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cxS" = ( +"ctT" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ dir = 8 @@ -73189,14 +71687,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cxT" = ( +"ctU" = ( /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cxU" = ( +"ctV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -73205,7 +71703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxV" = ( +"ctW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -73214,7 +71712,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxW" = ( +"ctX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -73224,7 +71722,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxX" = ( +"ctY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -73239,7 +71737,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxY" = ( +"ctZ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -73251,7 +71749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxZ" = ( +"cua" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10; pixel_x = 0; @@ -73264,7 +71762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cya" = ( +"cub" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/whitepurple/side{ @@ -73274,7 +71772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyb" = ( +"cuc" = ( /turf/open/floor/plasteel/whitepurple/corner{ tag = "icon-whitepurplecorner (NORTH)"; icon_state = "whitepurplecorner"; @@ -73282,13 +71780,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyc" = ( +"cud" = ( /obj/effect/landmark/start/scientist, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyd" = ( +"cue" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Toxins Mixing"; @@ -73303,7 +71801,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cye" = ( +"cuf" = ( /obj/machinery/computer/mech_bay_power_console, /obj/machinery/camera{ c_tag = "Robotics 2"; @@ -73314,13 +71812,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyf" = ( +"cug" = ( /obj/machinery/light, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyg" = ( +"cuh" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -73343,13 +71841,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyh" = ( +"cui" = ( /obj/machinery/computer/rdconsole/robotics, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyi" = ( +"cuj" = ( /obj/structure/table, /obj/machinery/cell_charger, /obj/item/weapon/stock_parts/cell/high, @@ -73359,7 +71857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyj" = ( +"cuk" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /obj/item/weapon/storage/toolbox/electrical{ @@ -73374,13 +71872,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyk" = ( +"cul" = ( /obj/machinery/computer/aifixer, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyl" = ( +"cum" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -73391,7 +71889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cym" = ( +"cun" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -73403,7 +71901,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyn" = ( +"cuo" = ( /obj/machinery/power/apc{ cell_type = 5000; dir = 2; @@ -73421,13 +71919,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyo" = ( +"cup" = ( /obj/machinery/light, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyp" = ( +"cuq" = ( /obj/structure/closet/wardrobe/robotics_black, /obj/item/device/radio/headset/headset_sci{ pixel_x = -3 @@ -73436,7 +71934,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyq" = ( +"cur" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -73446,7 +71944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyr" = ( +"cus" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/whitepurple/corner{ tag = "icon-whitepurplecorner (EAST)"; @@ -73457,7 +71955,7 @@ /area/medical/research{ name = "Research Division" }) -"cys" = ( +"cut" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (NORTH)"; @@ -73468,7 +71966,7 @@ /area/medical/research{ name = "Research Division" }) -"cyt" = ( +"cuu" = ( /turf/open/floor/plasteel/whitepurple/corner{ tag = "icon-whitepurplecorner (NORTH)"; icon_state = "whitepurplecorner"; @@ -73478,7 +71976,7 @@ /area/medical/research{ name = "Research Division" }) -"cyu" = ( +"cuv" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -73487,7 +71985,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyv" = ( +"cuw" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -73496,7 +71994,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyw" = ( +"cux" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73510,7 +72008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyx" = ( +"cuy" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -73519,24 +72017,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyy" = ( +"cuz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/whitepurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyz" = ( +"cuA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whitepurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyA" = ( +"cuB" = ( /turf/open/floor/plasteel/whitepurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyB" = ( +"cuC" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /obj/item/weapon/storage/toolbox/mechanical, @@ -73544,7 +72042,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyC" = ( +"cuD" = ( /obj/machinery/power/apc{ dir = 8; name = "Research and Development APC"; @@ -73559,8 +72057,10 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/toxins/lab) -"cyD" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cuE" = ( /obj/machinery/power/terminal{ dir = 4 }, @@ -73571,58 +72071,53 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"cyE" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable/orange, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cyF" = ( +/area/maintenance/aft{ + name = "Aft Asteroid Maintenance" + }) +"cuF" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cyG" = ( +"cuG" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cyH" = ( +"cuH" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cyI" = ( +"cuI" = ( /mob/living/simple_animal/slime, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cyJ" = ( +"cuJ" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cyK" = ( +"cuK" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cyL" = ( +"cuL" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/arrival) -"cyM" = ( +"cuM" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/arrival) -"cyN" = ( +"cuN" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -73639,7 +72134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyO" = ( +"cuO" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 4; initialize_directions = 11 @@ -73649,13 +72144,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyP" = ( +"cuP" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyQ" = ( +"cuQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/sign/nosmoking_2{ pixel_x = 32 @@ -73667,7 +72162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cyR" = ( +"cuR" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -73675,7 +72170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyS" = ( +"cuS" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -73684,7 +72179,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyT" = ( +"cuT" = ( /obj/machinery/door/airlock/glass_research{ name = "Robotics Lab"; req_access_txt = "29" @@ -73700,14 +72195,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyU" = ( +"cuU" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/research{ name = "Research Division" }) -"cyV" = ( +"cuV" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/whitepurple/corner{ @@ -73717,14 +72212,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyW" = ( +"cuW" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyX" = ( +"cuX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whitepurple/corner{ @@ -73734,18 +72229,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyY" = ( +"cuY" = ( /turf/open/floor/plasteel/darkpurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cyZ" = ( +"cuZ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/darkpurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cza" = ( +"cva" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -73753,12 +72248,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"czb" = ( +"cvb" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"czc" = ( +"cvc" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -73766,23 +72261,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"czd" = ( +"cvd" = ( /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"cze" = ( +"cve" = ( /obj/structure/table, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"czf" = ( +"cvf" = ( /obj/structure/frame/computer, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"czg" = ( +"cvg" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/space, /area/hallway/secondary/entry) -"czh" = ( +"cvh" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, @@ -73793,7 +72288,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czi" = ( +"cvi" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -73802,7 +72297,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czj" = ( +"cvj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/whitepurple/corner{ tag = "icon-whitepurplecorner (EAST)"; @@ -73811,7 +72306,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czk" = ( +"cvk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73822,7 +72317,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czl" = ( +"cvl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73834,7 +72329,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czm" = ( +"cvm" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -73845,7 +72340,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czn" = ( +"cvn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73861,7 +72356,7 @@ /area/medical/research{ name = "Research Division" }) -"czo" = ( +"cvo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73871,7 +72366,7 @@ /area/medical/research{ name = "Research Division" }) -"czp" = ( +"cvp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73884,7 +72379,7 @@ /area/medical/research{ name = "Research Division" }) -"czq" = ( +"cvq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73897,7 +72392,7 @@ /area/medical/research{ name = "Research Division" }) -"czr" = ( +"cvr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73911,7 +72406,7 @@ /area/medical/research{ name = "Research Division" }) -"czs" = ( +"cvs" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -73924,7 +72419,7 @@ /area/medical/research{ name = "Research Division" }) -"czt" = ( +"cvt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -73941,7 +72436,7 @@ /area/medical/research{ name = "Research Division" }) -"czu" = ( +"cvu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73954,7 +72449,7 @@ /area/medical/research{ name = "Research Division" }) -"czv" = ( +"cvv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73969,7 +72464,7 @@ /area/medical/research{ name = "Research Division" }) -"czw" = ( +"cvw" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -73980,7 +72475,7 @@ /area/medical/research{ name = "Research Division" }) -"czx" = ( +"cvx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -73994,7 +72489,7 @@ /area/medical/research{ name = "Research Division" }) -"czy" = ( +"cvy" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -74002,7 +72497,7 @@ /area/medical/research{ name = "Research Division" }) -"czz" = ( +"cvz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -74014,7 +72509,7 @@ /area/medical/research{ name = "Research Division" }) -"czA" = ( +"cvA" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -74029,7 +72524,7 @@ /area/medical/research{ name = "Research Division" }) -"czB" = ( +"cvB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74040,7 +72535,7 @@ /area/medical/research{ name = "Research Division" }) -"czC" = ( +"cvC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -74054,7 +72549,7 @@ /area/medical/research{ name = "Research Division" }) -"czD" = ( +"cvD" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -74068,7 +72563,7 @@ /area/medical/research{ name = "Research Division" }) -"czE" = ( +"cvE" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -74082,7 +72577,7 @@ /area/medical/research{ name = "Research Division" }) -"czF" = ( +"cvF" = ( /obj/structure/closet/l3closet/scientist, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -74090,14 +72585,14 @@ /area/medical/research{ name = "Research Division" }) -"czG" = ( +"cvG" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/research{ name = "Research Division" }) -"czH" = ( +"cvH" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -74112,7 +72607,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czI" = ( +"cvI" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod1"; name = "containment door 1" @@ -74134,7 +72629,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czJ" = ( +"cvJ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -74150,7 +72645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czK" = ( +"cvK" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -74165,7 +72660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czL" = ( +"cvL" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod2"; name = "containment door 2" @@ -74187,7 +72682,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czM" = ( +"cvM" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -74203,7 +72698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czN" = ( +"cvN" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -74218,7 +72713,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czO" = ( +"cvO" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod3"; name = "containment door 3" @@ -74240,7 +72735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czP" = ( +"cvP" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -74256,7 +72751,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czQ" = ( +"cvQ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -74271,7 +72766,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czR" = ( +"cvR" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod4"; name = "containment door 4" @@ -74293,7 +72788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czS" = ( +"cvS" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -74309,12 +72804,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czT" = ( +"cvT" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czU" = ( +"cvU" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "47" @@ -74323,32 +72818,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czV" = ( +"cvV" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"czW" = ( -/turf/open/floor/mineral/titanium, +"cvW" = ( +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"czX" = ( +"cvX" = ( /obj/structure/chair/comfy{ tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1 }, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"czY" = ( +"cvY" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"czZ" = ( +"cvZ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -74370,7 +72865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAa" = ( +"cwa" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -74388,7 +72883,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAb" = ( +"cwb" = ( /obj/item/device/assembly/prox_sensor{ pixel_x = -4; pixel_y = 1 @@ -74427,7 +72922,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAc" = ( +"cwc" = ( /obj/structure/chair/stool, /obj/structure/cable/orange{ d1 = 4; @@ -74444,7 +72939,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAd" = ( +"cwd" = ( /obj/structure/table/reinforced, /obj/item/weapon/wrench, /obj/item/weapon/screwdriver{ @@ -74465,7 +72960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAe" = ( +"cwe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74481,7 +72976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAf" = ( +"cwf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74500,7 +72995,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAg" = ( +"cwg" = ( /obj/machinery/door/airlock/glass_research{ name = "Toxins Lab"; req_access_txt = "8" @@ -74520,7 +73015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAh" = ( +"cwh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74541,7 +73036,7 @@ /area/medical/research{ name = "Research Division" }) -"cAi" = ( +"cwi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74559,7 +73054,7 @@ /area/medical/research{ name = "Research Division" }) -"cAj" = ( +"cwj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74577,7 +73072,7 @@ /area/medical/research{ name = "Research Division" }) -"cAk" = ( +"cwk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74598,7 +73093,7 @@ /area/medical/research{ name = "Research Division" }) -"cAl" = ( +"cwl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74617,7 +73112,7 @@ /area/medical/research{ name = "Research Division" }) -"cAm" = ( +"cwm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -74641,7 +73136,7 @@ /area/medical/research{ name = "Research Division" }) -"cAn" = ( +"cwn" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -74659,7 +73154,7 @@ /area/medical/research{ name = "Research Division" }) -"cAo" = ( +"cwo" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -74678,7 +73173,7 @@ /area/medical/research{ name = "Research Division" }) -"cAp" = ( +"cwp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -74697,7 +73192,7 @@ /area/medical/research{ name = "Research Division" }) -"cAq" = ( +"cwq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74715,7 +73210,7 @@ /area/medical/research{ name = "Research Division" }) -"cAr" = ( +"cwr" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/orange{ d1 = 4; @@ -74732,7 +73227,7 @@ /area/medical/research{ name = "Research Division" }) -"cAs" = ( +"cws" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74756,7 +73251,7 @@ /area/medical/research{ name = "Research Division" }) -"cAt" = ( +"cwt" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -74775,7 +73270,7 @@ /area/medical/research{ name = "Research Division" }) -"cAu" = ( +"cwu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74794,7 +73289,7 @@ /area/medical/research{ name = "Research Division" }) -"cAv" = ( +"cwv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74810,7 +73305,7 @@ /area/medical/research{ name = "Research Division" }) -"cAw" = ( +"cww" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74828,7 +73323,7 @@ /area/medical/research{ name = "Research Division" }) -"cAx" = ( +"cwx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74849,7 +73344,7 @@ /area/medical/research{ name = "Research Division" }) -"cAy" = ( +"cwy" = ( /obj/machinery/door/airlock/glass_research{ name = "Decontamination Center"; req_access_txt = "55" @@ -74871,7 +73366,7 @@ /area/medical/research{ name = "Research Division" }) -"cAz" = ( +"cwz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -74890,7 +73385,7 @@ /area/medical/research{ name = "Research Division" }) -"cAA" = ( +"cwA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -74900,7 +73395,7 @@ /area/medical/research{ name = "Research Division" }) -"cAB" = ( +"cwB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -74913,7 +73408,7 @@ /area/medical/research{ name = "Research Division" }) -"cAC" = ( +"cwC" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -74931,7 +73426,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAD" = ( +"cwD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -74947,7 +73442,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAE" = ( +"cwE" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -74964,7 +73459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAF" = ( +"cwF" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -74982,7 +73477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAG" = ( +"cwG" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -75000,7 +73495,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAH" = ( +"cwH" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -75018,7 +73513,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAI" = ( +"cwI" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -75027,7 +73522,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAJ" = ( +"cwJ" = ( /obj/structure/table, /obj/item/stack/sheet/mineral/plasma, /obj/item/device/radio/intercom{ @@ -75039,18 +73534,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAK" = ( +"cwK" = ( /turf/open/floor/plasteel/whitepurple{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAL" = ( +"cwL" = ( /obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plasteel/whitepurple{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAM" = ( +"cwM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -75068,13 +73563,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAN" = ( +"cwN" = ( /obj/machinery/door/airlock/shuttle{ name = "Cockpit" }, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"cAO" = ( +"cwO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -75088,7 +73583,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAP" = ( +"cwP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -75106,7 +73601,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAQ" = ( +"cwQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -75119,7 +73614,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAR" = ( +"cwR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -75137,7 +73632,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAS" = ( +"cwS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -75157,7 +73652,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAT" = ( +"cwT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -75170,7 +73665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAU" = ( +"cwU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75185,13 +73680,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAV" = ( +"cwV" = ( /obj/structure/closet/bombcloset, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAW" = ( +"cwW" = ( /obj/item/device/assembly/signaler{ pixel_x = 0; pixel_y = 8 @@ -75219,7 +73714,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAX" = ( +"cwX" = ( /obj/item/device/transfer_valve{ pixel_x = -5 }, @@ -75243,7 +73738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAY" = ( +"cwY" = ( /obj/item/device/assembly/timer{ pixel_x = 5; pixel_y = 4 @@ -75265,7 +73760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAZ" = ( +"cwZ" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -75274,13 +73769,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cBa" = ( +"cxa" = ( /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cBb" = ( +"cxb" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -75289,7 +73784,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cBc" = ( +"cxc" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -75297,7 +73792,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cBd" = ( +"cxd" = ( /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; @@ -75307,7 +73802,7 @@ /area/medical/research{ name = "Research Division" }) -"cBe" = ( +"cxe" = ( /obj/structure/sign/bluecross_2{ pixel_x = -32; pixel_y = -32 @@ -75318,7 +73813,7 @@ /area/medical/research{ name = "Research Division" }) -"cBf" = ( +"cxf" = ( /obj/machinery/power/apc{ cell_type = 5000; dir = 2; @@ -75332,7 +73827,7 @@ /area/medical/research{ name = "Research Division" }) -"cBg" = ( +"cxg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -75351,7 +73846,7 @@ /area/medical/research{ name = "Research Division" }) -"cBh" = ( +"cxh" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -75361,14 +73856,14 @@ /area/medical/research{ name = "Research Division" }) -"cBi" = ( +"cxi" = ( /turf/open/floor/plasteel/whitepurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/research{ name = "Research Division" }) -"cBj" = ( +"cxj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/whitepurple/corner{ tag = "icon-whitepurplecorner (WEST)"; @@ -75379,7 +73874,7 @@ /area/medical/research{ name = "Research Division" }) -"cBk" = ( +"cxk" = ( /obj/machinery/light, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75387,7 +73882,7 @@ /area/medical/research{ name = "Research Division" }) -"cBl" = ( +"cxl" = ( /obj/machinery/door/firedoor, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75395,7 +73890,7 @@ /area/medical/research{ name = "Research Division" }) -"cBm" = ( +"cxm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -75408,7 +73903,7 @@ /area/medical/research{ name = "Research Division" }) -"cBn" = ( +"cxn" = ( /obj/machinery/camera{ c_tag = "Research Eastern Wing"; dir = 1; @@ -75421,7 +73916,7 @@ /area/medical/research{ name = "Research Division" }) -"cBo" = ( +"cxo" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -75435,7 +73930,7 @@ /area/medical/research{ name = "Research Division" }) -"cBp" = ( +"cxp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -75445,7 +73940,7 @@ /area/medical/research{ name = "Research Division" }) -"cBq" = ( +"cxq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -75458,7 +73953,7 @@ /area/medical/research{ name = "Research Division" }) -"cBr" = ( +"cxr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -75468,7 +73963,7 @@ /area/medical/research{ name = "Research Division" }) -"cBs" = ( +"cxs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75489,7 +73984,7 @@ /area/medical/research{ name = "Research Division" }) -"cBt" = ( +"cxt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -75499,7 +73994,7 @@ /area/medical/research{ name = "Research Division" }) -"cBu" = ( +"cxu" = ( /obj/machinery/door/airlock/glass_research{ name = "Xenobiology"; req_access_txt = "55" @@ -75511,7 +74006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBv" = ( +"cxv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -75519,7 +74014,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBw" = ( +"cxw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75532,7 +74027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBx" = ( +"cxx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -75540,7 +74035,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBy" = ( +"cxy" = ( /obj/structure/sign/electricshock{ pixel_y = 32 }, @@ -75554,12 +74049,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBz" = ( +"cxz" = ( /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBA" = ( +"cxA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75569,7 +74064,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBB" = ( +"cxB" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -75579,7 +74074,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBC" = ( +"cxC" = ( /obj/machinery/light{ dir = 1 }, @@ -75590,7 +74085,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBD" = ( +"cxD" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -75599,7 +74094,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBE" = ( +"cxE" = ( /obj/machinery/door/firedoor, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -75608,7 +74103,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBF" = ( +"cxF" = ( /obj/structure/chair{ dir = 4 }, @@ -75616,13 +74111,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBG" = ( +"cxG" = ( /obj/machinery/computer/camera_advanced/xenobio, /turf/open/floor/plasteel/whitepurple{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBH" = ( +"cxH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75635,7 +74130,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cBI" = ( +"cxI" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -75648,32 +74143,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cBJ" = ( +"cxJ" = ( /obj/machinery/computer/arcade, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"cBK" = ( +"cxK" = ( /obj/structure/closet/emcloset, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"cBL" = ( +"cxL" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"cBM" = ( +"cxM" = ( /obj/machinery/vending/cola, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cBN" = ( +"cxN" = ( /obj/machinery/vending/snack/random, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cBO" = ( +"cxO" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -75686,24 +74181,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cBP" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Aft Asteroid Maintenance"; - req_access_txt = "47" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cBQ" = ( +"cxP" = ( /obj/machinery/door/airlock/command{ name = "Server Room"; req_access = null; @@ -75713,12 +74191,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cBR" = ( +"cxQ" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cBS" = ( +"cxR" = ( /obj/structure/bed/roller, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/whitepurple/corner{ @@ -75730,36 +74208,42 @@ /area/medical/research{ name = "Research Division" }) -"cBT" = ( +"cxS" = ( /turf/open/floor/plasteel/whitepurple/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/research{ name = "Research Division" }) -"cBU" = ( +"cxT" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"cBV" = ( +"cxU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rdoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cBW" = ( +"cxV" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rdoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cBX" = ( +"cxW" = ( /obj/machinery/door/airlock/glass_research{ name = "Research Director's Office"; req_access_txt = "30" @@ -75768,16 +74252,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cBY" = ( +"cxX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rdoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cBZ" = ( +"cxY" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -75785,7 +74272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCa" = ( +"cxZ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -75794,7 +74281,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCb" = ( +"cya" = ( /obj/machinery/door/airlock/glass_security{ name = "Security Office"; req_access_txt = "63" @@ -75809,12 +74296,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCc" = ( +"cyb" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cCd" = ( +"cyc" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -75839,7 +74326,7 @@ /area/medical/research{ name = "Research Division" }) -"cCe" = ( +"cyd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75855,7 +74342,7 @@ /area/medical/research{ name = "Research Division" }) -"cCf" = ( +"cye" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75876,7 +74363,7 @@ /area/medical/research{ name = "Research Division" }) -"cCg" = ( +"cyf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -75894,7 +74381,7 @@ /area/medical/research{ name = "Research Division" }) -"cCh" = ( +"cyg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75907,7 +74394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCi" = ( +"cyh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75930,7 +74417,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCj" = ( +"cyi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75944,7 +74431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCk" = ( +"cyj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75958,7 +74445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCl" = ( +"cyk" = ( /obj/machinery/monkey_recycler, /obj/structure/cable/orange{ d1 = 4; @@ -75972,8 +74459,8 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCm" = ( -/obj/machinery/smartfridge/extract, +"cyl" = ( +/obj/machinery/smartfridge/extract/preloaded, /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75986,7 +74473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCn" = ( +"cym" = ( /obj/machinery/processor{ desc = "A machine used to process slimes and retrieve their extract."; name = "Slime Processor" @@ -76003,21 +74490,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCo" = ( -/obj/effect/landmark/start/scientist, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/xenobiology) -"cCp" = ( +"cyn" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -76036,7 +74509,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCq" = ( +"cyo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -76044,7 +74517,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCr" = ( +"cyp" = ( /obj/structure/table, /obj/item/weapon/extinguisher, /obj/item/weapon/extinguisher, @@ -76056,7 +74529,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCs" = ( +"cyq" = ( /obj/machinery/power/apc{ dir = 8; name = "Xenobiology APC"; @@ -76075,7 +74548,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCt" = ( +"cyr" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -76092,44 +74565,44 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cCu" = ( +"cys" = ( /obj/machinery/door/airlock/shuttle, /obj/structure/fans/tiny, /turf/open/floor/mineral/titanium, /area/shuttle/arrival) -"cCv" = ( +"cyt" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cCw" = ( +"cyu" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cCx" = ( +"cyv" = ( /obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion"; dir = 4 }, /turf/closed/wall/mineral/titanium, /area/shuttle/transport) -"cCy" = ( +"cyw" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/transport) -"cCz" = ( +"cyx" = ( /obj/structure/window/shuttle, /obj/structure/grille, /turf/open/floor/plating, /area/shuttle/transport) -"cCA" = ( +"cyy" = ( /obj/structure/grille, /obj/structure/window/shuttle, /turf/open/floor/plating, /area/shuttle/transport) -"cCB" = ( +"cyz" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -76139,7 +74612,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cCC" = ( +"cyA" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -76147,7 +74620,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cCD" = ( +"cyB" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -76174,7 +74647,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cCE" = ( +"cyC" = ( /obj/machinery/power/apc{ dir = 1; name = "Toxins Lab APC"; @@ -76190,18 +74663,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cCF" = ( +"cyD" = ( /obj/machinery/r_n_d/server/core, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cCG" = ( +"cyE" = ( /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cCH" = ( +"cyF" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -76209,7 +74682,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cCI" = ( +"cyG" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -76219,12 +74692,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cCJ" = ( +"cyH" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cCK" = ( +"cyI" = ( /obj/structure/bed/roller, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/whitepurple/side{ @@ -76236,7 +74709,7 @@ /area/medical/research{ name = "Research Division" }) -"cCL" = ( +"cyJ" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -76247,7 +74720,7 @@ /area/medical/research{ name = "Research Division" }) -"cCM" = ( +"cyK" = ( /obj/structure/table, /obj/item/weapon/cartridge/signal/toxins, /obj/item/weapon/cartridge/signal/toxins{ @@ -76262,14 +74735,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cCN" = ( +"cyL" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cCO" = ( +"cyM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -76278,19 +74751,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"cCP" = ( +"cyN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cCQ" = ( +"cyO" = ( /obj/machinery/portable_atmospherics/scrubber/huge/movable, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"cCR" = ( +"cyP" = ( /obj/structure/table, /obj/item/weapon/paper_bin, /turf/open/floor/plasteel/red/side{ @@ -76300,7 +74773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCS" = ( +"cyQ" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/computer/security/telescreen{ @@ -76314,7 +74787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCT" = ( +"cyR" = ( /obj/structure/table, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -76322,14 +74795,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCU" = ( +"cyS" = ( /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 1; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCV" = ( +"cyT" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -76353,14 +74826,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cCW" = ( +"cyU" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cCX" = ( +"cyV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -76373,7 +74846,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cCY" = ( +"cyW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -76381,7 +74854,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cCZ" = ( +"cyX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -76391,7 +74864,7 @@ /area/medical/research{ name = "Research Division" }) -"cDa" = ( +"cyY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -76414,7 +74887,7 @@ /area/medical/research{ name = "Research Division" }) -"cDb" = ( +"cyZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -76424,7 +74897,7 @@ /area/medical/research{ name = "Research Division" }) -"cDc" = ( +"cza" = ( /obj/machinery/door/airlock/glass_research{ name = "Xenobiology"; req_access_txt = "55" @@ -76433,7 +74906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDd" = ( +"czb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -76444,7 +74917,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDe" = ( +"czc" = ( /obj/machinery/light, /obj/structure/sign/electricshock{ pixel_y = -32 @@ -76453,7 +74926,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDf" = ( +"czd" = ( /obj/structure/sign/electricshock{ pixel_y = -32 }, @@ -76461,7 +74934,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDg" = ( +"cze" = ( /obj/structure/sign/electricshock{ pixel_y = -32 }, @@ -76475,7 +74948,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDh" = ( +"czf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -76490,7 +74963,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cDi" = ( +"czg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -76509,7 +74982,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cDj" = ( +"czh" = ( /obj/structure/chair{ dir = 4 }, @@ -76519,19 +74992,19 @@ }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"cDk" = ( +"czi" = ( /obj/structure/chair{ dir = 8 }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"cDl" = ( +"czj" = ( /obj/structure/chair{ dir = 4 }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"cDm" = ( +"czk" = ( /obj/structure/chair{ dir = 8 }, @@ -76541,7 +75014,7 @@ }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"cDn" = ( +"czl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -76561,7 +75034,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cDo" = ( +"czm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -76582,47 +75055,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cDp" = ( +"czn" = ( /turf/open/floor/mineral/titanium/blue, /turf/closed/wall/mineral/titanium/interior, /area/shuttle/transport) -"cDq" = ( +"czo" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cDr" = ( +"czp" = ( /obj/machinery/computer/shuttle/ferry/request, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cDs" = ( +"czq" = ( /obj/structure/chair, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cDt" = ( +"czr" = ( /obj/structure/chair, /obj/machinery/light{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cDu" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = -32; - pixel_y = 0 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cDv" = ( +"czs" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -76635,7 +75093,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cDw" = ( +"czt" = ( /obj/machinery/light/small{ dir = 8 }, @@ -76643,7 +75101,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cDx" = ( +"czu" = ( /obj/machinery/door/airlock/glass_command{ name = "Server Room"; req_access_txt = "30" @@ -76652,19 +75110,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cDy" = ( +"czv" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cDz" = ( +"czw" = ( /obj/structure/chair/office/light, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cDA" = ( +"czx" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -76673,7 +75131,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cDB" = ( +"czy" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/o2, /obj/machinery/camera{ @@ -76682,6 +75140,7 @@ icon_state = "camera"; network = list("SS13") }, +/obj/item/clothing/neck/stethoscope, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; @@ -76691,7 +75150,7 @@ /area/medical/research{ name = "Research Division" }) -"cDC" = ( +"czz" = ( /obj/machinery/light, /obj/item/weapon/reagent_containers/blood/random, /obj/item/weapon/reagent_containers/blood/random, @@ -76703,7 +75162,7 @@ /area/medical/research{ name = "Research Division" }) -"cDD" = ( +"czA" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (SOUTHEAST)"; @@ -76714,29 +75173,30 @@ /area/medical/research{ name = "Research Division" }) -"cDE" = ( +"czB" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"cDF" = ( +"czC" = ( /obj/machinery/suit_storage_unit/rd, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cDG" = ( +"czD" = ( /obj/structure/table, /obj/machinery/newscaster/security_unit{ pixel_x = -28 }, +/obj/machinery/recharger, /turf/open/floor/plasteel/red/side{ icon_state = "red"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cDH" = ( +"czE" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -76746,12 +75206,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cDI" = ( +"czF" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cDJ" = ( +"czG" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -76768,14 +75228,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cDK" = ( +"czH" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cDL" = ( +"czI" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -76791,7 +75251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cDM" = ( +"czJ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76801,7 +75261,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cDN" = ( +"czK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76818,7 +75278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cDO" = ( +"czL" = ( /obj/machinery/door/airlock/glass_research{ name = "Testing Lab"; req_access_txt = "55" @@ -76840,7 +75300,7 @@ /area/medical/research{ name = "Research Division" }) -"cDP" = ( +"czM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -76859,7 +75319,7 @@ /area/medical/research{ name = "Research Division" }) -"cDQ" = ( +"czN" = ( /obj/structure/sign/xenobio{ pixel_x = 32 }, @@ -76869,7 +75329,7 @@ /area/medical/research{ name = "Research Division" }) -"cDR" = ( +"czO" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -76883,7 +75343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDS" = ( +"czP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -76896,7 +75356,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDT" = ( +"czQ" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -76907,7 +75367,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDU" = ( +"czR" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -76921,7 +75381,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDV" = ( +"czS" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -76935,7 +75395,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDW" = ( +"czT" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -76949,14 +75409,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDX" = ( +"czU" = ( /obj/structure/table, /obj/machinery/reagentgrinder, /turf/open/floor/plasteel/whitepurple{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDY" = ( +"czV" = ( /obj/structure/table, /obj/item/weapon/storage/box/beakers, /obj/item/weapon/storage/box/syringes, @@ -76966,7 +75426,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDZ" = ( +"czW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -76974,7 +75434,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEa" = ( +"czX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -76983,7 +75443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEb" = ( +"czY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -77001,7 +75461,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEc" = ( +"czZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -77018,11 +75478,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEd" = ( +"cAa" = ( /obj/machinery/door/airlock/shuttle, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cEe" = ( +"cAb" = ( /obj/machinery/door/airlock/shuttle, /obj/docking_port/mobile{ dir = 8; @@ -77046,13 +75506,13 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cEf" = ( +"cAc" = ( /obj/machinery/r_n_d/server/robotics, /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cEg" = ( +"cAd" = ( /obj/machinery/camera{ c_tag = "Research Server Room"; dir = 1; @@ -77063,25 +75523,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cEh" = ( +"cAe" = ( /obj/machinery/computer/rdservercontrol, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cEi" = ( +"cAf" = ( /obj/structure/table, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cEj" = ( +"cAg" = ( /obj/machinery/modular_computer/console/preset/research, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cEk" = ( +"cAh" = ( /obj/structure/rack, /obj/item/weapon/circuitboard/aicore{ pixel_x = -2; @@ -77092,7 +75552,7 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"cEl" = ( +"cAi" = ( /obj/machinery/computer/secure_data, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -77106,7 +75566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cEm" = ( +"cAj" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -77121,7 +75581,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cEn" = ( +"cAk" = ( /obj/machinery/light, /obj/structure/reagent_dispensers/peppertank{ pixel_y = -32 @@ -77130,8 +75590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cEo" = ( -/obj/structure/closet/secure_closet/security/engine, +"cAl" = ( /obj/machinery/power/apc{ cell_type = 5000; dir = 2; @@ -77142,11 +75601,12 @@ d2 = 4; icon_state = "0-4" }, +/obj/structure/closet/secure_closet/security/science, /turf/open/floor/plasteel/red/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cEp" = ( +"cAm" = ( /obj/structure/filingcabinet, /obj/structure/cable/orange{ d1 = 1; @@ -77159,21 +75619,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cEq" = ( +"cAn" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEr" = ( +"cAo" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEs" = ( +"cAp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -77183,12 +75643,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEt" = ( +"cAq" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEu" = ( +"cAr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/sign/map/left/ceres{ @@ -77198,22 +75658,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/suit_storage_unit/rd, -/obj/machinery/door/window/brigdoor/northleft{ - name = "Research Director's Hardsuit"; - req_access_txt = "30" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/research{ - name = "Research Division" - }) -"cEw" = ( +"cAs" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -77228,7 +75673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEx" = ( +"cAt" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod5"; name = "containment door 5" @@ -77250,7 +75695,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEy" = ( +"cAu" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -77266,7 +75711,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEz" = ( +"cAv" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -77281,7 +75726,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEA" = ( +"cAw" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod6"; name = "containment door 6" @@ -77303,7 +75748,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEB" = ( +"cAx" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -77319,7 +75764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEC" = ( +"cAy" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ @@ -77334,7 +75779,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cED" = ( +"cAz" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod7"; name = "containment door 7" @@ -77356,7 +75801,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEE" = ( +"cAA" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -77372,7 +75817,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEF" = ( +"cAB" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -77383,7 +75828,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEG" = ( +"cAC" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod8"; name = "containment door 8" @@ -77405,7 +75850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEH" = ( +"cAD" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment, @@ -77417,7 +75862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEI" = ( +"cAE" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -77425,7 +75870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEJ" = ( +"cAF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ name = "Kill Chamber"; @@ -77438,7 +75883,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEK" = ( +"cAG" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -77450,7 +75895,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cEL" = ( +"cAH" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -77464,29 +75909,29 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEM" = ( +"cAI" = ( /obj/structure/closet/crate, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cEN" = ( +"cAJ" = ( /obj/structure/closet/crate, /obj/machinery/light, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cEO" = ( +"cAK" = ( /obj/structure/chair{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cEP" = ( +"cAL" = ( /obj/structure/chair{ dir = 1 }, /obj/machinery/light, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) -"cEQ" = ( +"cAM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -77501,7 +75946,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cER" = ( +"cAN" = ( /obj/structure/closet/crate, /obj/item/weapon/storage/bag/ore, /obj/item/weapon/pickaxe/emergency, @@ -77509,7 +75954,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cES" = ( +"cAO" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -77519,12 +75964,12 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"cET" = ( +"cAP" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEU" = ( +"cAQ" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -77533,7 +75978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEV" = ( +"cAR" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -77552,14 +75997,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEW" = ( +"cAS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEX" = ( +"cAT" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, @@ -77568,7 +76013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEY" = ( +"cAU" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/darkpurple/side{ tag = "icon-darkpurple (NORTH)"; @@ -77577,14 +76022,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEZ" = ( +"cAV" = ( /turf/open/floor/circuit{ baseturf = /turf/open/floor/plating/asteroid/airless; initial_gas_mix = "n2=500;TEMP=80"; name = "Killroom Floor" }, /area/toxins/xenobiology) -"cFa" = ( +"cAW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -77594,7 +76039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFb" = ( +"cAX" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -77610,7 +76055,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFc" = ( +"cAY" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -77625,7 +76070,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFd" = ( +"cAZ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -77640,22 +76085,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFe" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cFf" = ( +"cBa" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -77677,7 +76107,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFg" = ( +"cBb" = ( /obj/machinery/power/apc{ dir = 1; name = "RnD Server APC"; @@ -77701,7 +76131,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cFh" = ( +"cBc" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -77718,7 +76148,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFi" = ( +"cBd" = ( /obj/machinery/light_switch{ pixel_y = -23 }, @@ -77727,7 +76157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cFj" = ( +"cBe" = ( /obj/machinery/computer/card/minor/rd, /obj/machinery/camera{ c_tag = "Research Director's Office"; @@ -77739,7 +76169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cFk" = ( +"cBf" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -77747,12 +76177,12 @@ /obj/effect/landmark/xmastree/rdrod, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"cFl" = ( +"cBg" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFm" = ( +"cBh" = ( /obj/machinery/shieldwallgen{ req_access = list(55) }, @@ -77764,7 +76194,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFn" = ( +"cBi" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -77772,7 +76202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFo" = ( +"cBj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/chair/stool, @@ -77780,7 +76210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFp" = ( +"cBk" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -77797,7 +76227,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFq" = ( +"cBl" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -77814,7 +76244,7 @@ name = "Killroom Floor" }, /area/toxins/xenobiology) -"cFr" = ( +"cBm" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -77825,7 +76255,7 @@ name = "Killroom Floor" }, /area/toxins/xenobiology) -"cFs" = ( +"cBn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -77837,18 +76267,7 @@ name = "Killroom Floor" }, /area/toxins/xenobiology) -"cFt" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cFu" = ( +"cBo" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -77856,7 +76275,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFv" = ( +"cBp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -77872,7 +76291,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFw" = ( +"cBq" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -77889,7 +76308,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFx" = ( +"cBr" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -77905,7 +76324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFy" = ( +"cBs" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/effect/turf_decal/stripes/line{ @@ -77915,19 +76334,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFz" = ( +"cBt" = ( /obj/effect/landmark/lightsout, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFA" = ( -/obj/effect/landmark/start/scientist, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/misc_lab) -"cFB" = ( +"cBu" = ( /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/device/destTagger, @@ -77935,13 +76348,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFC" = ( +"cBv" = ( /obj/machinery/light/small, /turf/open/floor/plasteel/darkpurple/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cFD" = ( +"cBw" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -77952,13 +76365,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cFE" = ( +"cBx" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cFF" = ( +"cBy" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -77971,7 +76384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFG" = ( +"cBz" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -77989,7 +76402,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFH" = ( +"cBA" = ( /obj/machinery/light/small, /obj/structure/closet/firecloset/full, /turf/open/floor/plating{ @@ -77998,7 +76411,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFI" = ( +"cBB" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78006,7 +76419,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFJ" = ( +"cBC" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -78031,7 +76444,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cFK" = ( +"cBD" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -78042,7 +76455,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFL" = ( +"cBE" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment{ @@ -78061,7 +76474,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFM" = ( +"cBF" = ( /obj/structure/window/reinforced, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -78074,7 +76487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFN" = ( +"cBG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -78091,7 +76504,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFO" = ( +"cBH" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ dir = 8 @@ -78100,7 +76513,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFP" = ( +"cBI" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ target_temperature = 80; dir = 2; @@ -78112,7 +76525,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFQ" = ( +"cBJ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/light/small{ dir = 1 @@ -78123,7 +76536,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFR" = ( +"cBK" = ( /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 14"; @@ -78134,7 +76547,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFS" = ( +"cBL" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -78146,7 +76559,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFT" = ( +"cBM" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -78158,7 +76571,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFU" = ( +"cBN" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -78172,7 +76585,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFV" = ( +"cBO" = ( /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 10"; @@ -78183,7 +76596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFW" = ( +"cBP" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -78200,7 +76613,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFX" = ( +"cBQ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -78214,10 +76627,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFY" = ( +"cBR" = ( /turf/closed/mineral, /area/hallway/secondary/entry) -"cFZ" = ( +"cBS" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -78227,14 +76640,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGa" = ( +"cBT" = ( /obj/effect/landmark/event_spawn, /obj/machinery/r_n_d/experimentor, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGb" = ( +"cBU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -78253,7 +76666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGc" = ( +"cBV" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78267,7 +76680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGd" = ( +"cBW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -78277,7 +76690,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGe" = ( +"cBX" = ( /obj/machinery/autolathe, /obj/structure/window/reinforced{ dir = 1; @@ -78293,7 +76706,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGf" = ( +"cBY" = ( /obj/structure/plasticflaps, /obj/structure/disposalpipe/segment{ dir = 4; @@ -78303,14 +76716,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGg" = ( +"cBZ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGh" = ( +"cCa" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -78325,7 +76738,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGi" = ( +"cCb" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78340,13 +76753,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGj" = ( +"cCc" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGk" = ( +"cCd" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -78354,7 +76767,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGl" = ( +"cCe" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -78362,11 +76775,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGm" = ( +"cCf" = ( /obj/structure/closet/wardrobe/mixed, -/turf/open/floor/mineral/titanium, +/turf/open/floor/plasteel/neutral, /area/shuttle/arrival) -"cGn" = ( +"cCg" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -78375,7 +76788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGo" = ( +"cCh" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -78388,7 +76801,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGp" = ( +"cCi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78398,7 +76811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGq" = ( +"cCj" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Disposals Maintenance"; req_access_txt = "12" @@ -78412,7 +76825,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGr" = ( +"cCk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78426,7 +76839,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGs" = ( +"cCl" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -78436,18 +76849,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGt" = ( +"cCm" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGu" = ( +"cCn" = ( /obj/machinery/light/small, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGv" = ( +"cCo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -78460,7 +76873,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGw" = ( +"cCp" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -78473,7 +76886,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGx" = ( +"cCq" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -78486,7 +76899,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGy" = ( +"cCr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -78496,7 +76909,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGz" = ( +"cCs" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -78508,22 +76921,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGA" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/closet/firecloset/full, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cGB" = ( +"cCt" = ( /obj/machinery/door/airlock/shuttle{ name = "Engines" }, /turf/open/floor/plating, /area/shuttle/arrival) -"cGC" = ( +"cCu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -78533,7 +76937,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGD" = ( +"cCv" = ( /obj/machinery/light/small{ dir = 1 }, @@ -78546,11 +76950,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGE" = ( +"cCw" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/asteroid, /area/hallway/secondary/entry) -"cGF" = ( +"cCx" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -78559,7 +76963,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGG" = ( +"cCy" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -78573,7 +76977,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGH" = ( +"cCz" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -78581,7 +76985,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGI" = ( +"cCA" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -78597,7 +77001,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGJ" = ( +"cCB" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -78609,7 +77013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGK" = ( +"cCC" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Injector Toggle"; @@ -78619,7 +77023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGL" = ( +"cCD" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -78628,24 +77032,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGM" = ( +"cCE" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGN" = ( +"cCF" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGO" = ( +"cCG" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/reinforced, /turf/open/floor/plating, /area/shuttle/arrival) -"cGP" = ( +"cCH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -78655,16 +77059,16 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGQ" = ( +"cCI" = ( /obj/structure/grille/broken, /turf/open/floor/plating/asteroid, /area/hallway/secondary/entry) -"cGR" = ( +"cCJ" = ( /turf/closed/wall, /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cGS" = ( +"cCK" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/deliveryChute{ tag = "icon-intake (NORTH)"; @@ -78675,29 +77079,20 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cGT" = ( +"cCL" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mine/unexplored{ name = "Research Asteroid" }) -"cGU" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cGV" = ( +"cCM" = ( /obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGW" = ( +"cCN" = ( /obj/machinery/shieldwallgen{ req_access = list(55) }, @@ -78706,7 +77101,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGX" = ( +"cCO" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -78717,7 +77112,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGY" = ( +"cCP" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -78726,7 +77121,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGZ" = ( +"cCQ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -78735,7 +77130,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHa" = ( +"cCR" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -78744,7 +77139,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHb" = ( +"cCS" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -78757,7 +77152,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHc" = ( +"cCT" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -78765,13 +77160,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHd" = ( +"cCU" = ( /obj/structure/shuttle/engine/propulsion{ name = "shuttle engine" }, /turf/open/floor/plating/airless, /area/shuttle/arrival) -"cHe" = ( +"cCV" = ( /obj/docking_port/stationary{ dir = 1; dwidth = 4; @@ -78788,12 +77183,12 @@ }, /turf/closed/wall/mineral/titanium, /area/shuttle/arrival) -"cHf" = ( +"cCW" = ( /turf/closed/wall, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHg" = ( +"cCX" = ( /obj/structure/disposaloutlet{ icon_state = "outlet"; dir = 1 @@ -78803,13 +77198,13 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHh" = ( +"cCY" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHi" = ( +"cCZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -78823,7 +77218,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHj" = ( +"cDa" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "47" @@ -78832,7 +77227,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHk" = ( +"cDb" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/cobweb, @@ -78842,7 +77237,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHl" = ( +"cDc" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -78851,10 +77246,10 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHm" = ( +"cDd" = ( /turf/closed/wall, /area/hallway/secondary/entry) -"cHn" = ( +"cDe" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -78867,13 +77262,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cHo" = ( +"cDf" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/rust, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHp" = ( +"cDg" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -78882,12 +77277,12 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHq" = ( +"cDh" = ( /turf/closed/wall/rust, /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHr" = ( +"cDi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78903,7 +77298,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHs" = ( +"cDj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78922,7 +77317,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHt" = ( +"cDk" = ( /obj/machinery/power/apc{ dir = 1; name = "Testing Lab APC"; @@ -78946,7 +77341,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHu" = ( +"cDl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78962,7 +77357,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHv" = ( +"cDm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -78978,7 +77373,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHw" = ( +"cDn" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating{ @@ -78987,7 +77382,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHx" = ( +"cDo" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/poppy, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -78997,7 +77392,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHy" = ( +"cDp" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 1; @@ -79008,7 +77403,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cHz" = ( +"cDq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79021,7 +77416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cHA" = ( +"cDr" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ d1 = 4; @@ -79030,7 +77425,7 @@ }, /turf/open/space, /area/space) -"cHB" = ( +"cDs" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ d1 = 2; @@ -79039,12 +77434,12 @@ }, /turf/open/space, /area/space) -"cHC" = ( +"cDt" = ( /turf/closed/wall/rust, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHD" = ( +"cDu" = ( /obj/machinery/power/apc{ dir = 1; name = "South-Eastern External Waste Belt APC"; @@ -79060,7 +77455,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHE" = ( +"cDv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -79072,7 +77467,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHF" = ( +"cDw" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -79081,7 +77476,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHG" = ( +"cDx" = ( /obj/machinery/conveyor/auto, /obj/machinery/light/small{ dir = 8 @@ -79090,7 +77485,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHH" = ( +"cDy" = ( /obj/structure/rack, /obj/item/clothing/mask/breath, /obj/item/weapon/tank/internals/emergency_oxygen, @@ -79101,7 +77496,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHI" = ( +"cDz" = ( /obj/effect/turf_decal/stripes/end, /obj/structure/cable/orange{ d2 = 2; @@ -79117,7 +77512,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHJ" = ( +"cDA" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating/astplate{ @@ -79126,7 +77521,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHK" = ( +"cDB" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -79141,7 +77536,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHL" = ( +"cDC" = ( /obj/structure/closet, /obj/item/seeds/random, /obj/item/seeds/chili, @@ -79151,7 +77546,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHM" = ( +"cDD" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79159,7 +77554,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHN" = ( +"cDE" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light/small{ dir = 4 @@ -79170,7 +77565,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHO" = ( +"cDF" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79183,7 +77578,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHP" = ( +"cDG" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -79194,7 +77589,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHQ" = ( +"cDH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -79204,7 +77599,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHR" = ( +"cDI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -79214,7 +77609,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHS" = ( +"cDJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -79222,7 +77617,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHT" = ( +"cDK" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 1 @@ -79234,13 +77629,13 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHU" = ( +"cDL" = ( /obj/machinery/conveyor/auto, /turf/open/floor/plating, /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHV" = ( +"cDM" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -79248,7 +77643,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHW" = ( +"cDN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -79258,13 +77653,13 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHX" = ( +"cDO" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHY" = ( +"cDP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; @@ -79276,7 +77671,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHZ" = ( +"cDQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; @@ -79293,7 +77688,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIa" = ( +"cDR" = ( /obj/structure/girder, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79301,7 +77696,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIb" = ( +"cDS" = ( /obj/structure/table, /obj/item/weapon/cultivator, /obj/item/seeds/banana, @@ -79311,7 +77706,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIc" = ( +"cDT" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79319,7 +77714,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cId" = ( +"cDU" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79327,21 +77722,21 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIe" = ( +"cDV" = ( /obj/structure/grille/broken, /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plating, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIf" = ( +"cDW" = ( /obj/effect/turf_decal/stripes/line, /obj/item/weapon/wrench, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIg" = ( +"cDX" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -79349,7 +77744,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIh" = ( +"cDY" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 1 @@ -79358,7 +77753,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIi" = ( +"cDZ" = ( /obj/machinery/conveyor/auto{ dir = 9; icon_state = "conveyor0"; @@ -79368,7 +77763,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIj" = ( +"cEa" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (SOUTHEAST)"; icon_state = "conveyor0"; @@ -79378,7 +77773,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIk" = ( +"cEb" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -79391,7 +77786,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIl" = ( +"cEc" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/orange{ d1 = 4; @@ -79402,7 +77797,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIm" = ( +"cEd" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79415,7 +77810,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIn" = ( +"cEe" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -79426,7 +77821,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIo" = ( +"cEf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79441,7 +77836,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIp" = ( +"cEg" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -79454,7 +77849,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIq" = ( +"cEh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -79466,7 +77861,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIr" = ( +"cEi" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -79484,7 +77879,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIs" = ( +"cEj" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -79503,7 +77898,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIt" = ( +"cEk" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -79519,7 +77914,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIu" = ( +"cEl" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/item/weapon/storage/toolbox/mechanical, @@ -79530,7 +77925,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIv" = ( +"cEm" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -79539,20 +77934,20 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIw" = ( +"cEn" = ( /obj/structure/table, /obj/item/weapon/weldingtool/mini, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIx" = ( +"cEo" = ( /obj/item/chair, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIy" = ( +"cEp" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (NORTHEAST)"; icon_state = "conveyor0"; @@ -79562,7 +77957,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIz" = ( +"cEq" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -79572,7 +77967,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIA" = ( +"cEr" = ( /obj/machinery/conveyor/auto{ dir = 10; icon_state = "conveyor0"; @@ -79583,7 +77978,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIB" = ( +"cEs" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -79599,14 +77994,14 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIC" = ( +"cEt" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cID" = ( +"cEu" = ( /obj/structure/disposalpipe/segment, /obj/structure/girder, /obj/structure/grille, @@ -79616,7 +78011,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIE" = ( +"cEv" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -79628,7 +78023,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIF" = ( +"cEw" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 1 @@ -79639,7 +78034,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIG" = ( +"cEx" = ( /obj/structure/girder, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79647,19 +78042,19 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIH" = ( +"cEy" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cII" = ( +"cEz" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime, /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIJ" = ( +"cEA" = ( /obj/machinery/light/small, /obj/machinery/conveyor/auto{ dir = 9; @@ -79670,7 +78065,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIK" = ( +"cEB" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -79681,7 +78076,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIL" = ( +"cEC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79689,7 +78084,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIM" = ( +"cED" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -79700,7 +78095,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIN" = ( +"cEE" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -79711,7 +78106,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIO" = ( +"cEF" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79721,7 +78116,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIP" = ( +"cEG" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79734,7 +78129,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIQ" = ( +"cEH" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" @@ -79745,7 +78140,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIR" = ( +"cEI" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; icon_state = "pipe-j2s"; @@ -79758,7 +78153,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIS" = ( +"cEJ" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; icon_state = "pipe-j2s"; @@ -79771,7 +78166,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIT" = ( +"cEK" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79781,7 +78176,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIU" = ( +"cEL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79794,7 +78189,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIV" = ( +"cEM" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79804,7 +78199,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIW" = ( +"cEN" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -79815,7 +78210,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIX" = ( +"cEO" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 }, @@ -79826,7 +78221,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIY" = ( +"cEP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79834,7 +78229,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIZ" = ( +"cEQ" = ( /obj/structure/disposaloutlet{ dir = 4 }, @@ -79845,7 +78240,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cJa" = ( +"cER" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -79856,14 +78251,14 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cJb" = ( +"cES" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /turf/open/floor/plating, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJc" = ( +"cET" = ( /obj/structure/table, /obj/item/weapon/storage/fancy/cigarettes, /turf/open/floor/plasteel/floorgrime{ @@ -79872,7 +78267,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJd" = ( +"cEU" = ( /obj/structure/chair{ dir = 8 }, @@ -79882,7 +78277,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJe" = ( +"cEV" = ( /obj/structure/closet/firecloset/full, /obj/item/weapon/coin/silver, /turf/open/floor/plasteel/floorgrime{ @@ -79891,7 +78286,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJf" = ( +"cEW" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79899,7 +78294,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJg" = ( +"cEX" = ( /obj/structure/table, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79907,7 +78302,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJh" = ( +"cEY" = ( /obj/docking_port/stationary{ dheight = 9; dir = 2; @@ -79920,55 +78315,19 @@ }, /turf/open/space, /area/space) -"cJi" = ( +"cEZ" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"cJj" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"cJk" = ( +"cFa" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"cJl" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"cJm" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"cJn" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"cJo" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"cJp" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/turret_protected/ai) -"cJq" = ( +"cFb" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -79977,7 +78336,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJr" = ( +"cFc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79989,7 +78348,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"cJs" = ( +"cFd" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -79998,20 +78357,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"cJt" = ( +"cFe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"cJu" = ( +"cFf" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"cJv" = ( +"cFg" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -80020,7 +78379,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"cJw" = ( +"cFh" = ( /obj/machinery/newscaster/security_unit{ pixel_x = 32 }, @@ -80028,7 +78387,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"cJx" = ( +"cFi" = ( /obj/machinery/light/small{ dir = 8 }, @@ -80043,7 +78402,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJy" = ( +"cFj" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -80052,7 +78411,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJz" = ( +"cFk" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -80061,7 +78420,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJA" = ( +"cFl" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -80076,7 +78435,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJB" = ( +"cFm" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -80086,7 +78445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJC" = ( +"cFn" = ( /obj/effect/turf_decal/delivery, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -80098,7 +78457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJD" = ( +"cFo" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/door/window/brigdoor/southleft{ name = "Armory Delievery Chute"; @@ -80109,7 +78468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJE" = ( +"cFp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80120,34 +78479,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"cJF" = ( +"cFq" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"cJG" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/warden) -"cJH" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/warden) -"cJI" = ( +"cFr" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"cJJ" = ( +"cFs" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -80156,19 +78500,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"cJK" = ( +"cFt" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"cJL" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/courtroom) -"cJM" = ( +"cFu" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = 32; @@ -80181,25 +78519,19 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJN" = ( +"cFv" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"cJO" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/bridge) -"cJP" = ( +"cFw" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"cJQ" = ( +"cFx" = ( /obj/machinery/newscaster{ pixel_y = 32 }, @@ -80207,40 +78539,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"cJR" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/courtroom) -"cJS" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/courtroom) -"cJT" = ( +"cFy" = ( /obj/structure/table, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cJU" = ( +"cFz" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cJV" = ( +"cFA" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"cJW" = ( +"cFB" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -80249,7 +78566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"cJX" = ( +"cFC" = ( /obj/structure/bed, /obj/structure/sign/poster/official/work_for_a_future{ pixel_x = -32 @@ -80258,18 +78575,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cJY" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cJZ" = ( +"cFD" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"cKa" = ( +"cFE" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -80285,7 +78597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cKb" = ( +"cFF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80306,7 +78618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cKc" = ( +"cFG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80327,7 +78639,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cKd" = ( +"cFH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -80342,13 +78654,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cKe" = ( +"cFI" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cKf" = ( +"cFJ" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -80356,24 +78668,18 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"cKg" = ( +"cFK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"cKh" = ( +"cFL" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"cKi" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cKj" = ( +"cFM" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -80381,7 +78687,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKk" = ( +"cFN" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -80392,7 +78698,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKl" = ( +"cFO" = ( /obj/machinery/hydroponics/soil, /obj/structure/sign/poster/random{ name = "random official poster"; @@ -80405,7 +78711,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKm" = ( +"cFP" = ( /obj/machinery/hydroponics/soil, /obj/machinery/newscaster{ pixel_y = -32 @@ -80416,25 +78722,25 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKn" = ( +"cFQ" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"cKo" = ( +"cFR" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"cKp" = ( +"cFS" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cKq" = ( +"cFT" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=EngineeringWest2"; location = "EngineeringWest"; @@ -80444,13 +78750,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cKr" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cKs" = ( +"cFU" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/sign/poster/random{ name = "random official poster"; @@ -80464,7 +78764,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKt" = ( +"cFV" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/newscaster{ pixel_x = 28 @@ -80475,7 +78775,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKu" = ( +"cFW" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=EngineeringMiddle2"; location = "EngineeringWest3"; @@ -80485,32 +78785,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cKv" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters{ - name = "Rehabilitation Dome" - }) -"cKw" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters{ - name = "Rehabilitation Dome" - }) -"cKx" = ( +"cFX" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"cKy" = ( +"cFY" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -80527,7 +78808,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cKz" = ( +"cFZ" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Cargo"; location = "Medbay2"; @@ -80537,68 +78818,27 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cKA" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engineering) -"cKB" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engineering) -"cKC" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = 24 - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cKD" = ( +"cGa" = ( /obj/machinery/status_display{ density = 0; layer = 4 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"cKE" = ( +"cGb" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall, /area/engine/supermatter) -"cKF" = ( +"cGc" = ( /turf/open/space/basic, /area/space) -"cKG" = ( -/turf/open/space/basic, -/area/space) -"cKH" = ( -/turf/open/space/basic, -/area/space) -"cKI" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/r_wall, -/area/engine/engineering) -"cKJ" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) -"cKK" = ( +"cGd" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"cKL" = ( -/turf/open/space/basic, -/area/space) -"cKM" = ( +"cGe" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Research"; location = "Service"; @@ -80608,10 +78848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cKN" = ( -/turf/open/space/basic, -/area/space) -"cKO" = ( +"cGf" = ( /obj/machinery/light/small{ dir = 1 }, @@ -80623,62 +78860,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cKP" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/genetics_cloning) -"cKQ" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - dir = 8; - freq = 1400; - location = "Hydroponics" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cKR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cKS" = ( +"cGg" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"cKT" = ( +"cGh" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"cKU" = ( +"cGi" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"cKV" = ( +"cGj" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /obj/machinery/ai_status_display, /turf/closed/wall/r_wall, /area/engine/supermatter) -"cKW" = ( +"cGk" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -80688,7 +78895,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cKX" = ( +"cGl" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line, /obj/machinery/door/window/southleft{ @@ -80699,7 +78906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cKY" = ( +"cGm" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; @@ -80716,7 +78923,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cKZ" = ( +"cGn" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -80725,14 +78932,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"cLa" = ( +"cGo" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cLb" = ( +"cGp" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -80740,7 +78947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cLc" = ( +"cGq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80754,40 +78961,26 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"cLd" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cLe" = ( +"cGr" = ( /obj/structure/plasticflaps, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"cLf" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cLg" = ( +"cGs" = ( /obj/machinery/ai_status_display, /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cLh" = ( +"cGt" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cLi" = ( +"cGu" = ( /obj/machinery/power/apc{ dir = 8; name = "Chapel Office APC"; @@ -80807,7 +79000,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cLj" = ( +"cGv" = ( /obj/machinery/door/window/westleft{ req_access_txt = "22" }, @@ -80815,15 +79008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cLk" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 24 - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cLl" = ( +"cGw" = ( /obj/structure/plasticflaps{ name = "Officer Beepsky's Home" }, @@ -80831,14 +79016,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cLm" = ( +"cGx" = ( /obj/structure/bed/dogbed, /mob/living/simple_animal/bot/secbot/beepsky/jr, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cLn" = ( +"cGy" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -80858,19 +79043,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cLo" = ( +"cGz" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cLp" = ( +"cGA" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cLq" = ( +"cGB" = ( /obj/structure/chair{ dir = 4 }, @@ -80884,19 +79069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cLr" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/secondary/exit) -"cLs" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cLt" = ( +"cGC" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=ArrivalsWest"; location = "Research"; @@ -80906,7 +79079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cLu" = ( +"cGD" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Departures"; location = "ArrivalsWest"; @@ -80916,7 +79089,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLv" = ( +"cGE" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -80924,19 +79097,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cLw" = ( +"cGF" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cLx" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cLy" = ( +"cGG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80950,7 +79117,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLz" = ( +"cGH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=ArrivalsMiddle"; @@ -80961,7 +79128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLA" = ( +"cGI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -80980,25 +79147,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLB" = ( +"cGJ" = ( /obj/machinery/ai_status_display, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLC" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/secondary/entry) -"cLD" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/secondary/entry) -"cLE" = ( +"cGK" = ( /obj/machinery/newscaster{ pixel_x = -28; pixel_y = 4 @@ -81007,22 +79162,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cLF" = ( +"cGL" = ( /obj/machinery/status_display{ density = 0; layer = 4 }, /turf/closed/wall/mineral/titanium, /area/shuttle/arrival) -"cLG" = ( +"cGM" = ( /obj/machinery/ai_status_display, /turf/closed/wall/mineral/titanium, /area/shuttle/arrival) -"cLH" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/mineral/titanium, -/area/shuttle/arrival) -"cLI" = ( +"cGN" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -81039,7 +79190,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLJ" = ( +"cGO" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -81050,25 +79201,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLK" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/arrival) -"cLL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 24 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/secondary/entry) -"cLM" = ( +"cGP" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; dir = 8; @@ -81080,7 +79213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cLN" = ( +"cGQ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -81089,18 +79222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cLO" = ( -/obj/machinery/ai_status_display, -/turf/closed/wall/mineral/titanium, -/area/shuttle/arrival) -"cLP" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/arrival) -"cLQ" = ( +"cGR" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -81109,7 +79231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"cLR" = ( +"cGS" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -81118,89 +79240,39 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"cLS" = ( +"cGT" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"cLT" = ( +"cGU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cLU" = ( +"cGV" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cLV" = ( +"cGW" = ( /obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/showroomfloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cLW" = ( -/obj/effect/landmark/start/security_officer, -/turf/open/floor/plasteel/showroomfloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/main) -"cLX" = ( -/obj/effect/landmark/start/security_officer, -/turf/open/floor/plasteel/showroomfloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/main) -"cLY" = ( -/obj/structure/chair/stool, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/locker) -"cLZ" = ( -/obj/effect/landmark/start/security_officer, -/turf/open/floor/plasteel/showroomfloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/main) -"cMa" = ( -/obj/effect/landmark/start/security_officer, -/turf/open/floor/plasteel/showroomfloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/main) -"cMb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/office) -"cMc" = ( +"cGX" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"cMd" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/toilet) -"cMe" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/toilet) -"cMf" = ( +"cGY" = ( /obj/structure/chair{ dir = 1 }, @@ -81210,27 +79282,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"cMg" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/toilet) -"cMh" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/toilet) -"cMi" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/crew_quarters/courtroom) -"cMj" = ( +"cGZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -81241,7 +79293,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"cMk" = ( +"cHa" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -81254,7 +79306,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cMl" = ( +"cHb" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -81270,13 +79322,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cMm" = ( +"cHc" = ( /obj/effect/landmark/start/janitor, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cMn" = ( +"cHd" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -81288,7 +79340,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cMo" = ( +"cHe" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/assistant, /turf/open/floor/grass{ @@ -81297,13 +79349,13 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cMp" = ( +"cHf" = ( /obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"cMq" = ( +"cHg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -81317,7 +79369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"cMr" = ( +"cHh" = ( /obj/structure/chair{ dir = 4 }, @@ -81326,35 +79378,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"cMs" = ( +"cHi" = ( /obj/effect/landmark/start/botanist, /turf/open/floor/plasteel/hydrofloor{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cMt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/botanist, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cMu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/landmark/start/botanist, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cMv" = ( -/obj/effect/landmark/start/botanist, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cMw" = ( +"cHj" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -81365,7 +79395,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cMx" = ( +"cHk" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -81383,7 +79413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cMy" = ( +"cHl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ dir = 8 @@ -81394,7 +79424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cMz" = ( +"cHm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -81409,14 +79439,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"cMA" = ( +"cHn" = ( /obj/structure/stacklifter, /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cMB" = ( +"cHo" = ( /obj/structure/chair/comfy/black{ tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; @@ -81429,32 +79459,32 @@ /area/library{ name = "Lounge" }) -"cMC" = ( +"cHp" = ( /obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"cMD" = ( +"cHq" = ( /obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cME" = ( +"cHr" = ( /obj/structure/weightlifter, /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cMF" = ( +"cHs" = ( /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"cMG" = ( +"cHt" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -81466,35 +79496,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"cMH" = ( +"cHu" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cMI" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMJ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMK" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cML" = ( +"cHv" = ( /obj/structure/chair{ dir = 4 }, @@ -81503,28 +79512,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cMM" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMN" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMO" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMP" = ( +"cHw" = ( /obj/machinery/droneDispenser/preloaded, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -81532,7 +79520,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cMQ" = ( +"cHx" = ( /obj/structure/rack, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/metal/fifty, @@ -81542,35 +79530,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cMR" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMS" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMT" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMU" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMV" = ( +"cHy" = ( /obj/machinery/light/small{ dir = 8 }, @@ -81580,7 +79540,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cMW" = ( +"cHz" = ( /obj/structure/rack, /obj/item/stack/sheet/glass/fifty, /obj/item/stack/sheet/glass/fifty, @@ -81590,44 +79550,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cMX" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMY" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cMZ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNa" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/chapel/main) -"cNb" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNc" = ( +"cHA" = ( /obj/machinery/door/airlock/maintenance{ name = "Maintenance Drone Dispensery"; req_access_txt = "12" @@ -81638,70 +79561,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cNd" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNe" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNf" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNg" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNh" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNi" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNj" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNk" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNl" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"cNm" = ( +"cHB" = ( /obj/structure/chair{ dir = 4 }, @@ -81713,7 +79573,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cNn" = ( +"cHC" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -81724,7 +79584,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cNo" = ( +"cHD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -81749,7 +79609,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cNp" = ( +"cHE" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -81762,7 +79622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cNq" = ( +"cHF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -81781,7 +79641,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cNr" = ( +"cHG" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -81800,7 +79660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cNs" = ( +"cHH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -81809,7 +79669,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cNt" = ( +"cHI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -81823,19 +79683,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cNu" = ( +"cHJ" = ( /obj/effect/landmark/start/scientist, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cNv" = ( -/obj/effect/landmark/start/scientist, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/misc_lab) -"cNw" = ( +"cHK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -81848,7 +79702,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNx" = ( +"cHL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -81866,7 +79720,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNy" = ( +"cHM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -81880,39 +79734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNz" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cNA" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cNB" = ( +"cHN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -81921,7 +79743,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNC" = ( +"cHO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -81929,7 +79751,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cND" = ( +"cHP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -81939,7 +79761,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNE" = ( +"cHQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ icon_state = "red"; @@ -81947,7 +79769,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNF" = ( +"cHR" = ( /obj/machinery/door/airlock/glass_security{ cyclelinkeddir = 2; id_tag = "innerbrig"; @@ -81968,7 +79790,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNG" = ( +"cHS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -81992,7 +79814,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNH" = ( +"cHT" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82004,7 +79826,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNI" = ( +"cHU" = ( /obj/structure/table, /obj/item/weapon/storage/fancy/donut_box, /turf/open/floor/plasteel/red/side{ @@ -82013,7 +79835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNJ" = ( +"cHV" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82026,7 +79848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNK" = ( +"cHW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -82045,40 +79867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNL" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d2 = 8; - icon_state = "0-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cNM" = ( -/obj/machinery/door/airlock/glass_security{ - cyclelinkeddir = 2; - id_tag = "innerbrig"; - name = "Brig"; - req_access_txt = "0"; - req_one_access_txt = "38;63" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (WEST)"; - icon_state = "redcorner"; - dir = 8; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cNN" = ( +"cHX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82090,19 +79879,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNO" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "frontbrig"; - name = "Emergency External Blast Doors" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cNP" = ( +"cHY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -82114,12 +79891,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNQ" = ( +"cHZ" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNR" = ( +"cIa" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -82132,7 +79909,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNS" = ( +"cIb" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-21"; layer = 4.1; @@ -82146,7 +79923,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNT" = ( +"cIc" = ( /obj/machinery/airalarm{ dir = 4; pixel_x = -23; @@ -82157,7 +79934,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"cNU" = ( +"cId" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/deliveryChute{ desc = "A chute for big and small crimnals alike!"; @@ -82174,7 +79951,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"cNV" = ( +"cIe" = ( /obj/machinery/light/small{ dir = 8 }, @@ -82182,12 +79959,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNW" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cNX" = ( +"cIf" = ( /obj/structure/chair{ dir = 8 }, @@ -82200,7 +79972,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNY" = ( +"cIg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -82215,13 +79987,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNZ" = ( +"cIh" = ( /obj/machinery/holopad, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOa" = ( +"cIi" = ( /obj/structure/chair{ dir = 8 }, @@ -82229,13 +80001,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOb" = ( +"cIj" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"cOc" = ( +"cIk" = ( /obj/structure/chair{ dir = 8 }, @@ -82249,7 +80021,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOd" = ( +"cIl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -82265,7 +80037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOe" = ( +"cIm" = ( /obj/structure/chair{ dir = 8 }, @@ -82281,7 +80053,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOf" = ( +"cIn" = ( /obj/structure/grille/broken, /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ @@ -82290,7 +80062,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOg" = ( +"cIo" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -82301,7 +80073,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOh" = ( +"cIp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -82314,14 +80086,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOi" = ( +"cIq" = ( /turf/open/floor/plasteel/red/corner{ icon_state = "redcorner"; dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOj" = ( +"cIr" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-21"; layer = 4.1; @@ -82334,7 +80106,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOk" = ( +"cIs" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -82345,7 +80117,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOl" = ( +"cIt" = ( /obj/structure/table, /obj/item/weapon/book/manual/wiki/security_space_law, /turf/open/floor/plasteel/red/corner{ @@ -82354,7 +80126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOm" = ( +"cIu" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82380,7 +80152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOn" = ( +"cIv" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82396,13 +80168,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOo" = ( +"cIw" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOp" = ( +"cIx" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82410,7 +80182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOq" = ( +"cIy" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -82419,15 +80191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOr" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/brig) -"cOs" = ( +"cIz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -82440,7 +80204,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOt" = ( +"cIA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82456,7 +80220,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOu" = ( +"cIB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -82475,23 +80239,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/red/corner{ - tag = "icon-redcorner (EAST)"; - icon_state = "redcorner"; - dir = 4; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOw" = ( +"cIC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82508,7 +80256,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOx" = ( +"cID" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82529,7 +80277,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOy" = ( +"cIE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82546,7 +80294,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOz" = ( +"cIF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -82562,7 +80310,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOA" = ( +"cIG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -82573,7 +80321,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOB" = ( +"cIH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -82588,7 +80336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOC" = ( +"cII" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -82599,7 +80347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cOD" = ( +"cIJ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -82613,7 +80361,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOE" = ( +"cIK" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -82622,7 +80370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOF" = ( +"cIL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82630,31 +80378,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOJ" = ( +"cIM" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -82666,63 +80390,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cON" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOR" = ( +"cIN" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -82739,7 +80407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOS" = ( +"cIO" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -82751,23 +80419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOV" = ( +"cIP" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -82776,7 +80428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cOW" = ( +"cIQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -82785,163 +80437,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cOX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cOZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPk" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"cPq" = ( +"cIR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82951,7 +80447,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cPr" = ( +"cIS" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -82960,7 +80456,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cPs" = ( +"cIT" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -82969,7 +80465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cPt" = ( +"cIU" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82977,65 +80473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cPu" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPv" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/janitor) -"cPB" = ( +"cIV" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -83044,70 +80482,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cPC" = ( +"cIW" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cPD" = ( +"cIX" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/engine, -/area/space) -"cPE" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPF" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPG" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/plasteel/red/side{ - icon_state = "red"; - dir = 10; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPH" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/red/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPI" = ( -/obj/structure/table, -/obj/item/weapon/storage/fancy/donut_box, -/turf/open/floor/plasteel/red/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPJ" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPK" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPL" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPM" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPN" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPO" = ( +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cIY" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -83117,216 +80505,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cPP" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPQ" = ( -/obj/structure/bed/dogbed, -/mob/living/simple_animal/bot/secbot/beepsky, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPR" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPS" = ( +"cIZ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/engine, -/area/space) -"cPT" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPU" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPV" = ( -/obj/structure/table, -/obj/item/weapon/reagent_containers/food/snacks/grown/potato, -/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPW" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cPX" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'WARNING: LOOSE CANNON'."; - name = "WARNING: LOOSE CANNON"; - pixel_y = 32 - }, -/turf/open/space, -/area/space) -"cPY" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPZ" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQa" = ( -/obj/structure/plasticflaps{ - name = "Officer Beepsky's Home" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cQb" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/space) -"cQc" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQd" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQe" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQf" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQg" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQh" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQi" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQj" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQk" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQl" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQm" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQn" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQo" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQp" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQq" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQr" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQs" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQt" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQu" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQv" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQw" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQx" = ( +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cJa" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQy" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cQz" = ( +"cJb" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -83335,10 +80527,16 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQA" = ( +"cJc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; @@ -83346,7 +80544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQB" = ( +"cJd" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -83355,9 +80553,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQC" = ( +"cJe" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -83365,7 +80566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cQD" = ( +"cJf" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -83374,7 +80575,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQE" = ( +"cJg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83385,7 +80586,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQF" = ( +"cJh" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -83394,26 +80595,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQG" = ( +"cJi" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQH" = ( +"cJj" = ( /obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless +/obj/structure/cable{ + icon_state = "1-2" }, -/area/hallway/primary/central) -"cQI" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQJ" = ( -/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -83421,76 +80613,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cQK" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQL" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQM" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQN" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQO" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cQP" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQQ" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cQR" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQS" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQT" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cQU" = ( +"cJk" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -83501,7 +80624,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cQV" = ( +"cJl" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83511,7 +80634,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cQW" = ( +"cJm" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83519,7 +80642,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQX" = ( +"cJn" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -83531,39 +80654,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRc" = ( +"cJo" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -83572,7 +80663,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cRd" = ( +"cJp" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -83581,67 +80672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cRe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRh" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRl" = ( +"cJq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83649,15 +80680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"cRm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/storage/eva) -"cRn" = ( +"cJr" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -83666,31 +80689,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"cRo" = ( +"cJs" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"cRp" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cRq" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/neutral/corner{ - tag = "icon-neutralcorner (NORTH)"; - icon_state = "neutralcorner"; - dir = 1; - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"cRr" = ( +"cJt" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -83698,143 +80703,13 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cRs" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRt" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/storage/eva) -"cRu" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRv" = ( +"cJu" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cRw" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRx" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRy" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRz" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRA" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRB" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRF" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRK" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cRL" = ( +"cJv" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -83845,286 +80720,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cRM" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, +"cJw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/engine, -/area/space) -"cRN" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRO" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRP" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRQ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRR" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRS" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRT" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRU" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRV" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRW" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRX" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRY" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cRZ" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSa" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSb" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSc" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSd" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSe" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSf" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSg" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSh" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSi" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSj" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSk" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSl" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSm" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSn" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSo" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSp" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSq" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSr" = ( +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cJx" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -84136,7 +80740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSs" = ( +"cJy" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -84151,7 +80755,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSt" = ( +"cJz" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -84160,16 +80764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cSu" = ( -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-j1"; - dir = 1 - }, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cSv" = ( +"cJA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84177,47 +80772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cSx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cSy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cSz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cSA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cSB" = ( +"cJB" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -84226,109 +80781,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSC" = ( +"cJC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/engine, -/area/space) -"cSD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cSS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cST" = ( +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cJD" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -84337,7 +80798,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cSU" = ( +"cJE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -84352,7 +80813,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cSV" = ( +"cJF" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -84361,23 +80822,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cSW" = ( +"cJG" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cSX" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/medical) -"cSY" = ( +"cJH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cSZ" = ( +"cJI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -84389,7 +80845,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cTa" = ( +"cJJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84400,39 +80856,31 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cTb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, +"cJK" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cTc" = ( +"cJL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cTd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/plasteel/green/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cTe" = ( +"cJM" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -84441,19 +80889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cTf" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cTg" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cTh" = ( +"cJN" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -84465,7 +80901,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cTi" = ( +"cJO" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -84482,41 +80918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cTj" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/medical) -"cTk" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/orange{ - d2 = 4; - icon_state = "0-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/medical) -"cTl" = ( +"cJP" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -84530,7 +80932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cTm" = ( +"cJQ" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -84539,7 +80941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"cTn" = ( +"cJR" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -84548,19 +80950,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"cTo" = ( -/mob/living/simple_animal/pet/cat/Runtime, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"cTp" = ( +"cJS" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"cTq" = ( +"cJT" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -84569,7 +80965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTr" = ( +"cJU" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84577,23 +80973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/engineering) -"cTt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/engineering) -"cTu" = ( +"cJV" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -84602,43 +80982,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTv" = ( +"cJW" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cTw" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/engineering) -"cTx" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/checkpoint/engineering) -"cTy" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cTz" = ( +"cJX" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -84658,7 +81012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTA" = ( +"cJY" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -84667,25 +81021,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTB" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cTC" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"cTD" = ( +"cJZ" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -84695,73 +81031,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"cTE" = ( +"cKa" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"cTF" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTG" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTH" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTI" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTJ" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTK" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTL" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTM" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTN" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/library) -"cTO" = ( +"cKb" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cTP" = ( +"cKc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84770,46 +81052,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cTQ" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"cTR" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"cTS" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"cTT" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"cTU" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/port) -"cTV" = ( +"cKd" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cTW" = ( +"cKe" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -84818,14 +81076,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cTX" = ( +"cKf" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, /turf/open/floor/plasteel/neutral/corner{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cTY" = ( +"cKg" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (EAST)"; @@ -84834,7 +81098,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cTZ" = ( +"cKh" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -84843,38 +81107,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUa" = ( +"cKi" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUb" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUc" = ( +"cKj" = ( /obj/machinery/ai_status_display, /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUd" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUe" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUf" = ( +"cKk" = ( /obj/machinery/power/apc{ dir = 2; name = "Arrival Security Checkpoint APC"; @@ -84897,16 +81143,8 @@ /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"cUg" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUh" = ( +/area/security/checkpoint2) +"cKl" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /obj/structure/cable/orange{ d1 = 1; @@ -84919,13 +81157,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cUi" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUj" = ( +"cKm" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -84934,7 +81166,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cUk" = ( +"cKn" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84942,7 +81174,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cUl" = ( +"cKo" = ( /obj/machinery/disposal/deliveryChute{ desc = "A chute for big and small criminals alike!"; name = "Criminal Delivery Chute" @@ -84959,7 +81191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cUm" = ( +"cKp" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -84968,7 +81200,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUn" = ( +"cKq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84976,31 +81208,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUr" = ( +"cKr" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -85012,22 +81220,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUs" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cUt" = ( +"cKs" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cUu" = ( +"cKt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -85045,319 +81244,27 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUv" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/teleporter) -"cUw" = ( +"cKu" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUx" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/teleporter) -"cUy" = ( -/obj/structure/window/reinforced, +"cKv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/engine, -/area/space) -"cUz" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 }, /turf/open/floor/engine, -/area/space) -"cUA" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUB" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUC" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUD" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUE" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUF" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUG" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUH" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUI" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUJ" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUK" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUL" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUM" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUN" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUO" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUP" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUQ" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUR" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUS" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUT" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUU" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUV" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUW" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUX" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUY" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cUZ" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVa" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVb" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVc" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVd" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVe" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVf" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVg" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVh" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVi" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVj" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVk" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVl" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVm" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVn" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/space) -"cVo" = ( +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cKw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -85369,7 +81276,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVp" = ( +"cKx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85377,7 +81284,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVq" = ( +"cKy" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85385,7 +81292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVr" = ( +"cKz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -85397,7 +81304,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVs" = ( +"cKA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85405,23 +81312,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cVt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/teleporter) -"cVu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/teleporter) -"cVv" = ( +"cKB" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -85430,7 +81321,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cVw" = ( +"cKC" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -85439,7 +81330,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cVx" = ( +"cKD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -85450,7 +81341,7 @@ /area/medical/research{ name = "Research Division" }) -"cVy" = ( +"cKE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85460,7 +81351,7 @@ /area/medical/research{ name = "Research Division" }) -"cVz" = ( +"cKF" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85468,107 +81359,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cVA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/lab) -"cVB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/lab) -"cVC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/lab) -"cVD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/lab) -"cVE" = ( -/obj/machinery/status_display{ - density = 0; - layer = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVM" = ( +"cKG" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -85582,87 +81373,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cVN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVX" = ( +"cKH" = ( /obj/machinery/ai_status_display, /obj/structure/disposalpipe/segment{ dir = 4 @@ -85671,55 +81382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cVY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cVZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cWa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cWb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cWc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cWd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/aft) -"cWe" = ( +"cKI" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -85728,37 +81391,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cWf" = ( +"cKJ" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cWg" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/assembly/robotics) -"cWh" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/assembly/robotics) -"cWi" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/assembly/robotics) -"cWj" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/assembly/robotics) -"cWk" = ( +"cKK" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -85766,7 +81405,7 @@ /area/medical/research{ name = "Research Division" }) -"cWl" = ( +"cKL" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -85775,7 +81414,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cWm" = ( +"cKM" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -85787,25 +81426,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cWn" = ( +"cKN" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cWo" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"cWp" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"cWq" = ( +"cKO" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -85814,7 +81441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cWr" = ( +"cKP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85822,7 +81449,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cWs" = ( +"cKQ" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -85841,7 +81468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cWt" = ( +"cKR" = ( /obj/machinery/door/airlock{ name = "Bathroom" }, @@ -85849,7 +81476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"cWu" = ( +"cKS" = ( /obj/structure/toilet{ dir = 4 }, @@ -85857,7 +81484,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"cWv" = ( +"cKT" = ( /obj/machinery/light/small{ dir = 4 }, @@ -85865,25 +81492,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"cWw" = ( +"cKU" = ( /obj/structure/sign/bluecross_2, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"cWx" = ( +"cKV" = ( /obj/structure/sign/bluecross_2, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"cWy" = ( +"cKW" = ( /mob/living/carbon/monkey, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"cWz" = ( +"cKX" = ( /obj/machinery/light{ dir = 1 }, @@ -85891,13 +81518,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"cWA" = ( +"cKY" = ( /obj/structure/sign/bluecross_2, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cWB" = ( +"cKZ" = ( /obj/structure/flora/tree/palm, /obj/machinery/camera{ c_tag = "Genetics Monkey Dome"; @@ -85908,13 +81535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"cWC" = ( -/mob/living/carbon/monkey, -/turf/open/floor/grass{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/genetics) -"cWD" = ( +"cLa" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -85923,13 +81544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"cWE" = ( -/mob/living/carbon/monkey, -/turf/open/floor/grass{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/genetics) -"cWF" = ( +"cLb" = ( /obj/structure/urinal{ pixel_x = -32 }, @@ -85939,13 +81554,13 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cWG" = ( +"cLc" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cWH" = ( +"cLd" = ( /obj/structure/sign/poster/official/pda_ad{ pixel_x = -32 }, @@ -85953,94 +81568,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"cWI" = ( +"cLe" = ( /obj/machinery/pdapainter, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"cWJ" = ( +"cLf" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) -"cWK" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWL" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWM" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWN" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWO" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWP" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWQ" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWR" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWS" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWT" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWU" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWV" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWW" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cWX" = ( +"cLg" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"cWY" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/supermatter) -"cWZ" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXa" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXb" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXc" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXd" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/supermatter) -"cXe" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXf" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXg" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXh" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXi" = ( +"cLh" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -86048,38 +81590,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"cXj" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/supermatter) -"cXk" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/supermatter) -"cXl" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXm" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXn" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXo" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXp" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXq" = ( +"cLi" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -86096,118 +81607,13 @@ name = "reinforced floor" }, /area/engine/supermatter) -"cXr" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXs" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXt" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXu" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXv" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXw" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXx" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXy" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXz" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXA" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXB" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXC" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXD" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXE" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXF" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXG" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXH" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXI" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXJ" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXK" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXL" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXM" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXN" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXO" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXP" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXQ" = ( +"cLj" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"cXR" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXS" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXT" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXU" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXV" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"cXW" = ( +"cLk" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -86215,15 +81621,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cXX" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/mixing) -"cXY" = ( +"cLl" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -86242,7 +81640,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cXZ" = ( +"cLm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -86253,7 +81651,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cYa" = ( +"cLn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -86266,7 +81664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cYb" = ( +"cLo" = ( /obj/structure/closet/l3closet/scientist{ pixel_x = -2 }, @@ -86274,7 +81672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cYc" = ( +"cLp" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "47" @@ -86289,11 +81687,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cYd" = ( +"cLq" = ( /obj/item/clothing/head/sombrero/shamebrero, /turf/open/floor/plating/asteroid/airless, /area/space) -"cYe" = ( +"cLr" = ( /obj/structure/sign/poster/contraband/borg_fancy_1{ pixel_x = 32 }, @@ -86303,7 +81701,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"cYf" = ( +"cLs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -86316,7 +81714,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYg" = ( +"cLt" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -86325,7 +81723,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYh" = ( +"cLu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -86335,17 +81733,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYi" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYj" = ( +"cLv" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -86354,7 +81742,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYk" = ( +"cLw" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -86362,7 +81750,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYl" = ( +"cLx" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -86370,7 +81758,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYm" = ( +"cLy" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -86380,7 +81768,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYn" = ( +"cLz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -86392,7 +81780,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYo" = ( +"cLA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -86404,31 +81792,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYp" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYq" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYr" = ( +"cLB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -86439,16 +81803,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYs" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYt" = ( +"cLC" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -86464,7 +81819,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYu" = ( +"cLD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -86479,79 +81834,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYv" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYw" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYx" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYy" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYz" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYA" = ( +"cLE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -86563,7 +81846,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYB" = ( +"cLF" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -86571,7 +81854,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYC" = ( +"cLG" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -86579,7 +81862,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYD" = ( +"cLH" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -86589,7 +81872,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cYE" = ( +"cLI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -86603,66 +81886,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYF" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYG" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYH" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYI" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYJ" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYK" = ( +"cLJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -86678,29 +81902,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYL" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYM" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/item/device/assembly/mousetrap/armed, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYN" = ( +"cLK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -86713,62 +81915,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYO" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYP" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYQ" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYR" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYS" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYT" = ( +"cLL" = ( /obj/machinery/light/small{ dir = 4 }, @@ -86778,39 +81925,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYU" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYV" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cYW" = ( +"cLM" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -86823,7 +81938,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYX" = ( +"cLN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -86837,7 +81952,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYY" = ( +"cLO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -86850,7 +81965,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYZ" = ( +"cLP" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -86858,42 +81973,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZa" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZb" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZc" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZd" = ( +"cLQ" = ( /obj/machinery/light/small{ dir = 8 }, @@ -86904,7 +81984,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZe" = ( +"cLR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/airalarm{ dir = 8; @@ -86915,28 +81995,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cZf" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZg" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZh" = ( +"cLS" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -86946,9 +82005,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZi" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, +"cLT" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -86956,40 +82013,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZj" = ( -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZk" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZl" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZm" = ( +"cLU" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -87002,80 +82026,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZn" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZo" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZp" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZq" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZr" = ( +"cLV" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"cZs" = ( -/obj/structure/chair/stool, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"cZt" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/grille/broken, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZu" = ( +"cLW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -87087,7 +82044,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZv" = ( +"cLX" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -87100,23 +82057,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZw" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZx" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZy" = ( +"cLY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87128,21 +82069,13 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZz" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZA" = ( +"cLZ" = ( /obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cZB" = ( +"cMa" = ( /obj/structure/grille/broken, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -87150,7 +82083,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZC" = ( +"cMb" = ( /obj/structure/closet/crate, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -87158,19 +82091,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZD" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZE" = ( +"cMc" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; @@ -87179,11 +82100,15 @@ req_one_access = null; req_one_access_txt = "0" }, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"cZF" = ( +"cMd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; @@ -87192,11 +82117,15 @@ req_one_access = null; req_one_access_txt = "0" }, +/obj/machinery/door/poddoor/preopen{ + id = "bridge"; + name = "Emergency Blast Door" + }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"cZG" = ( +"cMe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87209,7 +82138,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZH" = ( +"cMf" = ( /obj/structure/closet/firecloset/full, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -87218,7 +82147,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZI" = ( +"cMg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -87238,50 +82167,23 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cZJ" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZK" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZL" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZM" = ( +"cMh" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"cZN" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"cZO" = ( +"cMi" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "qmoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"cZP" = ( +"cMj" = ( /obj/machinery/door/airlock/glass_mining{ name = "Quartermaster's Office"; req_access_txt = "41"; @@ -87291,83 +82193,65 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"cZQ" = ( +"cMk" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "qmoffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"cZR" = ( +"cMl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"cZS" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"cZT" = ( +"cMm" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/spawner/lootdrop/costume, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"cZU" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"cZV" = ( +"cMn" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; pixel_y = 23 }, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (NORTHWEST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 9; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (NORTHWEST)" }, /area/quartermaster/qm) -"cZW" = ( +"cMo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/qm) -"cZX" = ( +"cMp" = ( /turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 1 }, /area/quartermaster/qm) -"cZY" = ( -/turf/open/floor/plasteel/brown{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1 - }, -/area/quartermaster/qm) -"cZZ" = ( +"cMq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (NORTHEAST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (NORTHEAST)" }, /area/quartermaster/qm) -"daa" = ( +"cMr" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -87378,24 +82262,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dab" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dac" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dad" = ( +"cMs" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -87415,22 +82282,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"dae" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"daf" = ( +"cMt" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (WEST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (WEST)" }, /area/quartermaster/qm) -"dag" = ( +"cMu" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/weapon/folder, @@ -87439,7 +82301,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"dah" = ( +"cMv" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -87451,13 +82313,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"dai" = ( +"cMw" = ( /obj/machinery/holopad, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daj" = ( +"cMx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -87466,37 +82328,13 @@ }, /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (EAST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 4; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (EAST)" }, /area/quartermaster/qm) -"dak" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dal" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dam" = ( +"cMy" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -87506,7 +82344,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dan" = ( +"cMz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -87523,21 +82361,21 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dao" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"dap" = ( +"cMA" = ( /obj/structure/closet/secure_closet/quartermaster, +/obj/machinery/button/door{ + id = "qmoffice"; + name = "Office Emergency Lockdown"; + pixel_x = -24 + }, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (WEST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 8; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (WEST)" }, /area/quartermaster/qm) -"daq" = ( +"cMB" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -87546,18 +82384,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"dar" = ( +"cMC" = ( /obj/machinery/computer/cargo, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"das" = ( +"cMD" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"dat" = ( +"cME" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; departmentType = 2; @@ -87567,23 +82405,13 @@ }, /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel/brown{ - tag = "icon-brown (EAST)"; - icon_state = "brown"; + baseturf = /turf/open/floor/plating/asteroid/airless; dir = 4; - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + icon_state = "brown"; + tag = "icon-brown (EAST)" }, /area/quartermaster/qm) -"dau" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dav" = ( +"cMF" = ( /obj/machinery/light/small{ dir = 4 }, @@ -87593,7 +82421,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daw" = ( +"cMG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87610,16 +82438,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dax" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"day" = ( +"cMH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87632,12 +82451,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daz" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"daA" = ( +"cMI" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plasteel/brown{ tag = "icon-brown (SOUTHWEST)"; @@ -87646,7 +82460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daB" = ( +"cMJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -87661,18 +82475,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daC" = ( +"cMK" = ( /obj/machinery/light, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daD" = ( +"cML" = ( /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daE" = ( +"cMM" = ( /obj/item/weapon/twohanded/required/kirbyplants{ tag = "icon-plant-21"; icon_state = "plant-21" @@ -87684,7 +82498,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daF" = ( +"cMN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -87697,7 +82511,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"daG" = ( +"cMO" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -87707,62 +82521,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daH" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daI" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daJ" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"daK" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"daL" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"daM" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/quartermaster/qm) -"daN" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/grille/broken, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daO" = ( +"cMP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87775,15 +82534,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daP" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daQ" = ( +"cMQ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -87793,63 +82544,25 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daR" = ( +"cMR" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Fore Asteroid Hallway APC"; + pixel_x = 23; + pixel_y = 2 + }, /obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "0-8" }, -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daS" = ( -/obj/machinery/light/small{ - dir = 4 +/obj/effect/turf_decal/stripes/end{ + dir = 8 }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daT" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daU" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daV" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"daW" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, /area/hallway/primary/fore) -"daX" = ( +"cMS" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -87863,7 +82576,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daY" = ( +"cMT" = ( /obj/structure/sign/biohazard{ desc = "A sign stating that there are better, more efficient methods of suicide that don't cause extra work for security and the janitor. Volunteer to be miner bait, be voluntary specimen for Research, or just find your nearest external airlock! "; name = "SUICIDE HOPLINE ISN'T THE WAY!"; @@ -87876,17 +82589,24 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"daZ" = ( +"cMU" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"dba" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cMV" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87899,113 +82619,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dbb" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbc" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbd" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbe" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbf" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbg" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbh" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbi" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbj" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbk" = ( +"cMW" = ( /obj/structure/grille/broken, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -88013,38 +82627,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dbl" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbm" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbn" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbo" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbp" = ( +"cMX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -88057,46 +82640,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbt" = ( +"cMY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -88110,72 +82654,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dby" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbz" = ( +"cMZ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/orange{ d1 = 4; @@ -88186,20 +82665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbB" = ( +"cNa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -88213,7 +82679,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbC" = ( +"cNb" = ( /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -88227,71 +82693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbD" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbG" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbI" = ( +"cNc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -88304,54 +82706,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbJ" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge Ceneter"; - dir = 1 - }, -/turf/open/floor/engine, -/area/space) -"dbK" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbM" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbN" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/fore{ - name = "Fore Asteroid Maintenance" - }) -"dbO" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/fore) -"dbP" = ( +"cNd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/airalarm{ @@ -88359,6 +82714,9 @@ icon_state = "alarm0"; pixel_x = -22 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -88366,7 +82724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbQ" = ( +"cNe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -88375,8 +82733,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/fore) -"dbR" = ( +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cNf" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -88388,7 +82748,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbS" = ( +"cNg" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -88396,7 +82756,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbT" = ( +"cNh" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -88405,7 +82765,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbU" = ( +"cNi" = ( /obj/structure/girder, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -88413,7 +82773,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbV" = ( +"cNj" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -88422,7 +82782,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbW" = ( +"cNk" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -88430,7 +82790,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbX" = ( +"cNl" = ( /obj/machinery/camera{ c_tag = "Service SMES"; dir = 6; @@ -88449,7 +82809,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbY" = ( +"cNm" = ( /obj/machinery/power/apc{ dir = 1; name = "Port Asteroid Maintence APC"; @@ -88472,7 +82832,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbZ" = ( +"cNn" = ( /obj/machinery/light/small{ dir = 8 }, @@ -88482,7 +82842,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dca" = ( +"cNo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -88494,7 +82854,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcb" = ( +"cNp" = ( /obj/machinery/light/small{ dir = 1 }, @@ -88503,7 +82863,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcc" = ( +"cNq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -88519,7 +82879,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcd" = ( +"cNr" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -88535,7 +82895,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dce" = ( +"cNs" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -88547,7 +82907,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcf" = ( +"cNt" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -88560,7 +82920,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcg" = ( +"cNu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -88578,7 +82938,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dch" = ( +"cNv" = ( /obj/machinery/light/small{ dir = 4 }, @@ -88599,7 +82959,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dci" = ( +"cNw" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -88607,7 +82967,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcj" = ( +"cNx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -88620,7 +82980,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dck" = ( +"cNy" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -88632,7 +82992,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcl" = ( +"cNz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88647,7 +83007,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcm" = ( +"cNA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88663,7 +83023,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcn" = ( +"cNB" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -88675,15 +83035,16 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dco" = ( +"cNC" = ( /obj/machinery/light/small{ dir = 4 }, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dcp" = ( +"cND" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -88695,7 +83056,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcq" = ( +"cNE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88707,19 +83068,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dcs" = ( +"cNF" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88731,7 +83080,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dct" = ( +"cNG" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -88744,7 +83093,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcu" = ( +"cNH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -88757,7 +83106,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcv" = ( +"cNI" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -88781,28 +83130,23 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcw" = ( +"cNJ" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcx" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcy" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcz" = ( +"cNK" = ( /obj/structure/table, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dcA" = ( +"cNL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -88818,7 +83162,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcB" = ( +"cNM" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -88832,48 +83176,13 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcC" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcD" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcE" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcF" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcG" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcH" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcI" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dcJ" = ( +"cNN" = ( /obj/machinery/vending/coffee, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcK" = ( +"cNO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -88886,7 +83195,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcL" = ( +"cNP" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -88899,7 +83208,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcM" = ( +"cNQ" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/food/snacks/baguette, /obj/structure/sign/poster/official/the_owl{ @@ -88914,7 +83223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcN" = ( +"cNR" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -88924,13 +83233,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcO" = ( +"cNS" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcP" = ( +"cNT" = ( /obj/structure/table/wood, /obj/item/device/instrument/guitar, /obj/item/device/instrument/violin, @@ -88943,7 +83252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcQ" = ( +"cNU" = ( /obj/machinery/light_switch{ pixel_y = 28 }, @@ -88954,12 +83263,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcR" = ( +"cNV" = ( /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcS" = ( +"cNW" = ( /obj/machinery/door/window/eastright{ name = "Theatre Stage" }, @@ -88967,7 +83276,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcT" = ( +"cNX" = ( /turf/open/floor/plasteel/stairs{ tag = "icon-stairs (WEST)"; icon_state = "stairs"; @@ -88975,7 +83284,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcU" = ( +"cNY" = ( /obj/structure/chair/wood, /obj/machinery/light/small{ dir = 1 @@ -88984,7 +83293,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcV" = ( +"cNZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -88992,13 +83301,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcW" = ( +"cOa" = ( /obj/structure/chair/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcX" = ( +"cOb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/extinguisher_cabinet{ pixel_x = -24 @@ -89009,7 +83318,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"dcY" = ( +"cOc" = ( /obj/machinery/light/small{ dir = 1 }, @@ -89018,36 +83327,14 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dcZ" = ( +"cOd" = ( /obj/structure/grille/broken, /obj/item/stack/rods, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dda" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"ddb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"ddc" = ( +"cOe" = ( /obj/structure/table, /obj/item/weapon/lipstick/random, /obj/item/weapon/lipstick/random, @@ -89060,13 +83347,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddd" = ( +"cOf" = ( /obj/effect/landmark/start/mime, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dde" = ( +"cOg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -89075,7 +83362,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddf" = ( +"cOh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -89083,7 +83370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddg" = ( +"cOi" = ( /obj/structure/table/wood, /obj/structure/sign/poster/random{ name = "random contraband poster"; @@ -89102,13 +83389,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddh" = ( +"cOj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddi" = ( +"cOk" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -89117,7 +83404,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddj" = ( +"cOl" = ( /obj/structure/table/wood, /obj/item/candle, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -89127,7 +83414,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddk" = ( +"cOm" = ( /obj/structure/chair/wood{ tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; @@ -89138,16 +83425,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddl" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"ddm" = ( +"cOn" = ( /obj/structure/chair/wood{ tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; @@ -89165,7 +83443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddn" = ( +"cOo" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -89176,7 +83454,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddo" = ( +"cOp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89186,23 +83464,13 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddp" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddq" = ( +"cOq" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddr" = ( +"cOr" = ( /obj/machinery/light/small{ dir = 1 }, @@ -89210,13 +83478,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dds" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddt" = ( +"cOs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -89230,20 +83492,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ddu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"ddv" = ( +"cOt" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "46" @@ -89252,7 +83501,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddw" = ( +"cOu" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -89261,18 +83510,18 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddx" = ( +"cOv" = ( /obj/effect/landmark/start/clown, /turf/open/floor/plasteel/redyellow{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddy" = ( +"cOw" = ( /turf/open/floor/plasteel/redyellow{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddz" = ( +"cOx" = ( /obj/machinery/door/airlock{ name = "Theatre Backstage"; req_access_txt = "46" @@ -89281,12 +83530,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddA" = ( -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"ddB" = ( +"cOy" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -89295,19 +83539,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddC" = ( +"cOz" = ( /obj/structure/table/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddD" = ( -/obj/structure/chair/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"ddE" = ( +"cOA" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -89316,13 +83554,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddF" = ( -/obj/structure/chair/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"ddG" = ( +"cOB" = ( /obj/machinery/door/airlock/glass{ name = "The Chuckle Den" }, @@ -89330,20 +83562,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddH" = ( +"cOC" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddI" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddJ" = ( +"cOD" = ( /obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -89351,7 +83577,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddK" = ( +"cOE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89364,37 +83590,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddL" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddM" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddN" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddO" = ( +"cOF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89405,47 +83601,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddP" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddQ" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddR" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddS" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"ddT" = ( +"cOG" = ( /obj/machinery/light/small{ dir = 1 }, @@ -89455,7 +83611,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddU" = ( +"cOH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -89468,20 +83624,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ddV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"ddW" = ( +"cOI" = ( /obj/structure/closet/secure_closet/freezer/cream_pie, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -89495,7 +83638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddX" = ( +"cOJ" = ( /obj/structure/table, /obj/item/clothing/mask/facehugger/toy, /obj/item/clothing/mask/fakemoustache, @@ -89506,7 +83649,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddY" = ( +"cOK" = ( /obj/structure/table, /obj/item/clothing/mask/pig, /obj/item/clothing/mask/cowmask, @@ -89521,7 +83664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddZ" = ( +"cOL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -89529,7 +83672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dea" = ( +"cOM" = ( /obj/structure/piano, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -89538,14 +83681,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"deb" = ( +"cON" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dec" = ( +"cOO" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -89554,7 +83697,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ded" = ( +"cOP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -89562,16 +83705,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dee" = ( -/obj/structure/table/wood, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"def" = ( +"cOQ" = ( /obj/structure/chair/wood{ tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; @@ -89588,7 +83722,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"deg" = ( +"cOR" = ( /obj/structure/table/wood, /obj/item/candle, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -89598,7 +83732,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"deh" = ( +"cOS" = ( /obj/structure/chair/wood{ tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; @@ -89612,15 +83746,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dei" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre) -"dej" = ( +"cOT" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -89631,7 +83757,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dek" = ( +"cOU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -89640,7 +83766,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"del" = ( +"cOV" = ( /obj/machinery/door/airlock/maintenance{ name = "Starboard Asteroid Maintenance Access"; req_access_txt = "12" @@ -89649,37 +83775,19 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dem" = ( +"cOW" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"den" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deo" = ( +"cOX" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dep" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"deq" = ( +"cOY" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -89688,37 +83796,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"der" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"des" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"det" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"deu" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"dev" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/cmo) -"dew" = ( +"cOZ" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"dex" = ( +"cPa" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -89726,7 +83809,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dey" = ( +"cPb" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -89735,7 +83818,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dez" = ( +"cPc" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -89747,19 +83830,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deA" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deB" = ( +"cPd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89772,31 +83843,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deE" = ( +"cPe" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89816,19 +83863,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"deF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deG" = ( +"cPf" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89841,7 +83876,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deH" = ( +"cPg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -89856,7 +83891,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"deI" = ( +"cPh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 4 @@ -89865,7 +83900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"deJ" = ( +"cPi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -89876,13 +83911,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"deK" = ( +"cPj" = ( /obj/machinery/suit_storage_unit/cmo, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deL" = ( +"cPk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -89890,7 +83925,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deM" = ( +"cPl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -89903,7 +83938,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deN" = ( +"cPm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -89911,7 +83946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deO" = ( +"cPn" = ( /obj/machinery/light/small{ dir = 4 }, @@ -89920,7 +83955,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"deP" = ( +"cPo" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89933,7 +83968,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deQ" = ( +"cPp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89946,20 +83981,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deR" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/grille/broken, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deS" = ( +"cPq" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -89976,7 +83998,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deT" = ( +"cPr" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89991,42 +84013,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deU" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deV" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"deW" = ( +"cPs" = ( /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"deX" = ( +"cPt" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/keycard_auth{ pixel_x = -24 @@ -90035,19 +84027,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deY" = ( +"cPu" = ( /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deZ" = ( +"cPv" = ( /obj/structure/table/glass, /obj/item/clothing/glasses/hud/health, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfa" = ( +"cPw" = ( /obj/structure/table/glass, /obj/item/clothing/neck/stethoscope, /obj/item/weapon/folder, @@ -90055,27 +84047,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfb" = ( +"cPx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/holopad, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfc" = ( +"cPy" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"dfd" = ( -/obj/structure/girder, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dfe" = ( +"cPz" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -90083,12 +84067,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dff" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"dfg" = ( +"cPA" = ( /obj/machinery/computer/card/minor/cmo, /obj/machinery/requests_console{ announcementConsole = 1; @@ -90102,7 +84081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfh" = ( +"cPB" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -90110,14 +84089,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfi" = ( +"cPC" = ( /obj/machinery/computer/med_data/laptop, /obj/structure/table/glass, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfj" = ( +"cPD" = ( /obj/structure/chair{ dir = 8 }, @@ -90126,7 +84105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfk" = ( +"cPE" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ @@ -90138,7 +84117,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfl" = ( +"cPF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -90147,7 +84126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfm" = ( +"cPG" = ( /obj/machinery/light/small{ dir = 1 }, @@ -90158,7 +84137,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfn" = ( +"cPH" = ( /obj/structure/closet/secure_closet/personal/patient, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -90167,7 +84146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfo" = ( +"cPI" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -90178,7 +84157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfp" = ( +"cPJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -90186,7 +84165,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfq" = ( +"cPK" = ( /obj/machinery/light{ dir = 1 }, @@ -90194,7 +84173,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfr" = ( +"cPL" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -90203,15 +84182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfs" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dft" = ( +"cPM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -90224,20 +84195,20 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dfu" = ( +"cPN" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"dfv" = ( +"cPO" = ( /obj/machinery/computer/crew, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfw" = ( +"cPP" = ( /obj/structure/table/glass, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -90249,7 +84220,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfx" = ( +"cPQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ @@ -90261,24 +84232,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfy" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/surgery) -"dfz" = ( +"cPR" = ( /obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfA" = ( +"cPS" = ( /obj/structure/closet, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dfB" = ( +"cPT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -90288,20 +84254,18 @@ /area/mine/unexplored{ name = "Medical Asteroid" }) -"dfC" = ( +"cPU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cmooffice" + }, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfD" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/surgery) -"dfE" = ( +"cPV" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -90310,7 +84274,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfF" = ( +"cPW" = ( /obj/structure/closet/secure_closet/personal/patient, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -90319,7 +84283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfG" = ( +"cPX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -90330,7 +84294,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfH" = ( +"cPY" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -90344,7 +84308,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfI" = ( +"cPZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -90354,15 +84318,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dfJ" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dfK" = ( +"cQa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -90373,43 +84329,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"dfL" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dfM" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - icon_state = "ast_warn"; - dir = 4 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dfN" = ( -/obj/structure/window/reinforced, -/obj/machinery/camera{ - c_tag = "Medbay-Engineering Bridge 2"; - dir = 1 - }, -/turf/open/floor/engine, -/area/space) -"dfO" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dfP" = ( +"cQb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 2; @@ -90419,14 +84339,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"dfQ" = ( +"cQc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"dfR" = ( +"cQd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -90436,28 +84356,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dfS" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dfT" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dfU" = ( +"cQe" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -90465,14 +84364,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dfV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"dfW" = ( +"cQf" = ( /obj/machinery/door/airlock/medical{ name = "Morgue"; req_access_txt = "0"; @@ -90485,7 +84377,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dfX" = ( +"cQg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -90495,7 +84387,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dfY" = ( +"cQh" = ( /obj/structure/table, /obj/item/weapon/folder, /obj/machinery/camera{ @@ -90508,7 +84400,7 @@ dir = 5 }, /area/medical/morgue) -"dfZ" = ( +"cQi" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -90526,42 +84418,7 @@ dir = 5 }, /area/medical/morgue) -"dga" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dgb" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgc" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgd" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"dge" = ( +"cQj" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -90569,14 +84426,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/medbay) -"dgg" = ( +"cQk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -90584,7 +84434,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"dgh" = ( +"cQl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -90592,7 +84442,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"dgi" = ( +"cQm" = ( /obj/structure/bodycontainer/morgue, /obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/vault{ @@ -90600,15 +84450,7 @@ dir = 5 }, /area/medical/morgue) -"dgj" = ( -/obj/structure/bodycontainer/morgue, -/obj/effect/landmark/revenantspawn, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/medical/morgue) -"dgk" = ( +"cQn" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -90625,28 +84467,7 @@ dir = 5 }, /area/medical/morgue) -"dgl" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgm" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgn" = ( +"cQo" = ( /obj/machinery/light/small{ dir = 4 }, @@ -90656,13 +84477,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgo" = ( +"cQp" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgp" = ( +"cQq" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -90677,36 +84498,7 @@ dir = 5 }, /area/medical/morgue) -"dgq" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgr" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgs" = ( -/obj/structure/bodycontainer/morgue, -/obj/effect/landmark/revenantspawn, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/medical/morgue) -"dgt" = ( +"cQr" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -90716,7 +84508,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgu" = ( +"cQs" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -90726,57 +84518,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dgv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgA" = ( +"cQt" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -90787,27 +84529,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dgB" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgC" = ( +"cQu" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgD" = ( +"cQv" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -90815,7 +84544,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgE" = ( +"cQw" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -90823,7 +84552,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgF" = ( +"cQx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -90841,7 +84570,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"dgG" = ( +"cQy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -90849,7 +84578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgH" = ( +"cQz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -90857,15 +84586,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/morgue) -"dgJ" = ( +"cQA" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -90875,77 +84596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgK" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/morgue) -"dgL" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgM" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgN" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgO" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgP" = ( +"cQB" = ( /obj/item/stack/rods, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; @@ -90958,7 +84609,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgQ" = ( +"cQC" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -90967,7 +84618,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgR" = ( +"cQD" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/camera{ c_tag = "Morgue South"; @@ -90981,7 +84632,7 @@ dir = 5 }, /area/medical/morgue) -"dgS" = ( +"cQE" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -90991,47 +84642,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgT" = ( -/obj/structure/bodycontainer/morgue, -/obj/effect/landmark/revenantspawn, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/medical/morgue) -"dgU" = ( -/obj/structure/bodycontainer/morgue, -/obj/effect/landmark/revenantspawn, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/medical/morgue) -"dgV" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/medical/morgue) -"dgW" = ( -/obj/structure/closet, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dgX" = ( -/obj/structure/girder, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dgY" = ( +"cQF" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -91040,15 +84651,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dgZ" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dha" = ( +"cQG" = ( /obj/machinery/door/airlock/maintenance{ name = "Morgue"; req_access_txt = "5" @@ -91062,7 +84665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dhb" = ( +"cQH" = ( /obj/machinery/light{ dir = 1 }, @@ -91071,13 +84674,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhc" = ( +"cQI" = ( /obj/structure/rack, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dhd" = ( +"cQJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -91086,7 +84689,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhe" = ( +"cQK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -91100,14 +84703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhf" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dhg" = ( +"cQL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -91118,15 +84714,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhh" = ( -/obj/structure/girder, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dhi" = ( +"cQM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -91140,7 +84728,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhj" = ( +"cQN" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91148,7 +84736,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhk" = ( +"cQO" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -91160,42 +84748,14 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhl" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dhm" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dhn" = ( +"cQP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dho" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/engine/engineering) -"dhp" = ( +"cQQ" = ( /obj/effect/landmark/start/station_engineer, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -91204,14 +84764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhq" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/asteroid, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dhr" = ( +"cQR" = ( /obj/structure/grille, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91219,7 +84772,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhs" = ( +"cQS" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -91229,7 +84782,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dht" = ( +"cQT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -91239,7 +84792,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dhu" = ( +"cQU" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -91249,7 +84802,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhv" = ( +"cQV" = ( /obj/structure/sign/enginesafety{ pixel_y = -32 }, @@ -91261,7 +84814,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhw" = ( +"cQW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -91282,7 +84835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhx" = ( +"cQX" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -91291,14 +84844,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhy" = ( +"cQY" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhz" = ( +"cQZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -91306,15 +84859,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dhB" = ( +"cRa" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -91327,24 +84872,16 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhC" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dhD" = ( +"cRb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dhE" = ( +"cRc" = ( /turf/closed/wall, /area/crew_quarters/chief) -"dhF" = ( +"cRd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -91364,10 +84901,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dhG" = ( -/turf/closed/wall, -/area/crew_quarters/chief) -"dhH" = ( +"cRe" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -91376,14 +84910,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhI" = ( +"cRf" = ( /obj/structure/grille/broken, /obj/item/stack/rods, /turf/open/floor/plating/asteroid, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dhJ" = ( +"cRg" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -91391,15 +84925,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dhL" = ( +"cRh" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -91412,7 +84938,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhM" = ( +"cRi" = ( /obj/structure/closet/wardrobe/mixed, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91420,7 +84946,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhN" = ( +"cRj" = ( /obj/machinery/light/small{ dir = 4 }, @@ -91430,32 +84956,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhO" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dhP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/chief) -"dhQ" = ( +"cRk" = ( /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dhR" = ( -/turf/open/floor/plasteel/neutral{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/chief) -"dhS" = ( +"cRl" = ( /obj/structure/filingcabinet/chestdrawer, /obj/item/weapon/paper/monitorkey, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -91464,7 +84970,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dhT" = ( +"cRm" = ( /obj/item/weapon/cartridge/engineering{ pixel_x = 4; pixel_y = 5 @@ -91486,17 +84992,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dhU" = ( -/turf/closed/wall, -/area/crew_quarters/chief) -"dhV" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/asteroid, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dhW" = ( +"cRn" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -91505,7 +85001,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhX" = ( +"cRo" = ( /obj/machinery/light/small{ dir = 1 }, @@ -91516,7 +85012,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhY" = ( +"cRp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -91530,7 +85026,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhZ" = ( +"cRq" = ( /obj/item/stack/rods, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91538,19 +85034,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dia" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/chief) -"dib" = ( +"cRr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dic" = ( +"cRs" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -91558,7 +85048,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"did" = ( +"cRt" = ( /obj/structure/table/reinforced, /obj/item/weapon/clipboard, /obj/item/clothing/glasses/meson{ @@ -91568,7 +85058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"die" = ( +"cRu" = ( /obj/structure/chair{ dir = 8 }, @@ -91582,7 +85072,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dif" = ( +"cRv" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -91591,7 +85081,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dig" = ( +"cRw" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -91600,24 +85090,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dih" = ( -/turf/closed/wall, -/area/crew_quarters/chief) -"dii" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dij" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dik" = ( +"cRx" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91625,14 +85098,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dil" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dim" = ( +"cRy" = ( /obj/structure/girder, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91640,28 +85106,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"din" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dio" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dip" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diq" = ( +"cRz" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -91672,38 +85117,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dir" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"dis" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dit" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"diu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/chief) -"div" = ( +"cRA" = ( /obj/structure/table/reinforced, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -91711,30 +85125,24 @@ }, /obj/item/weapon/stamp/ce, /obj/item/weapon/pen, -/obj/machinery/light, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"diw" = ( +"cRB" = ( /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/machinery/airalarm{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 +/obj/structure/cable{ + icon_state = "1-2" }, /turf/open/floor/plasteel/neutral{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dix" = ( -/turf/closed/wall, -/area/crew_quarters/chief) -"diy" = ( +"cRC" = ( /obj/machinery/light/small{ dir = 8 }, @@ -91743,7 +85151,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diz" = ( +"cRD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -91758,155 +85166,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"diA" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diB" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diC" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diD" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diE" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diF" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diG" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diH" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diI" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diJ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"diK" = ( +"cRE" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -91917,14 +85177,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"diL" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diM" = ( +"cRF" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -91933,29 +85186,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"diN" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diO" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diP" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"diQ" = ( +"cRG" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91963,20 +85194,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"diR" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"diS" = ( +"cRH" = ( /obj/structure/grille/broken, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91984,7 +85202,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diT" = ( +"cRI" = ( /obj/structure/girder, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91992,7 +85210,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"diU" = ( +"cRJ" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92000,15 +85218,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diV" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"diW" = ( +"cRK" = ( /obj/structure/closet/emcloset, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -92017,7 +85227,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diX" = ( +"cRL" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -92026,7 +85236,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diY" = ( +"cRM" = ( /obj/structure/girder, /obj/item/stack/rods, /turf/open/floor/plating{ @@ -92035,13 +85245,13 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diZ" = ( +"cRN" = ( /obj/structure/rack, /turf/open/floor/plating/asteroid, /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dja" = ( +"cRO" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -92050,7 +85260,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djb" = ( +"cRP" = ( /obj/structure/grille/broken, /obj/item/stack/rods, /turf/open/floor/plating{ @@ -92059,23 +85269,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djc" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djd" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dje" = ( +"cRQ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -92084,23 +85278,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djf" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djg" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"djh" = ( +"cRR" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92108,7 +85286,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dji" = ( +"cRS" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -92118,16 +85296,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djj" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djk" = ( +"cRT" = ( /obj/structure/girder, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92135,7 +85304,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djl" = ( +"cRU" = ( /obj/structure/girder, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92143,7 +85312,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djm" = ( +"cRV" = ( /obj/machinery/light/small, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92151,47 +85320,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djn" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djo" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djp" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/asteroid, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djq" = ( -/obj/structure/closet, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djr" = ( -/obj/structure/girder, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"djs" = ( +"cRW" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating{ @@ -92200,23 +85329,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djt" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dju" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djv" = ( +"cRX" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92224,7 +85337,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djw" = ( +"cRY" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -92233,7 +85346,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djx" = ( +"cRZ" = ( /obj/structure/closet/crate, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92241,69 +85354,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djz" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djB" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djC" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djD" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djE" = ( -/obj/structure/girder, -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djF" = ( +"cSa" = ( /obj/structure/closet/crate, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92311,7 +85362,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djG" = ( +"cSb" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92319,64 +85370,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djH" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djI" = ( -/obj/machinery/light/small, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djJ" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djK" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djL" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djM" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djN" = ( -/obj/machinery/light/small, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djO" = ( +"cSc" = ( /obj/structure/table, /obj/item/weapon/reagent_containers/syringe/charcoal, /turf/open/floor/plating{ @@ -92385,7 +85379,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djP" = ( +"cSd" = ( /obj/structure/table, /obj/item/clothing/mask/muzzle, /obj/item/clothing/glasses/sunglasses/blindfold, @@ -92395,15 +85389,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djQ" = ( -/obj/structure/closet, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djR" = ( +"cSe" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -92418,35 +85404,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djS" = ( -/obj/structure/girder, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djT" = ( -/obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"djU" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/obj/machinery/camera{ - c_tag = "Docking-Medbay Bridge 2"; - dir = 8; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"djV" = ( +"cSf" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -92454,400 +85412,14 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"djW" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating/asteroid, -/area/maintenance/port{ - name = "Port Asteroid Maintenance" - }) -"djX" = ( +"cSg" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"djY" = ( -/obj/machinery/holopad, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"djZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/keycard_auth{ - pixel_x = 0; - pixel_y = 24 - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dka" = ( -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkc" = ( -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 4; - name = "CE Office APC"; - pixel_x = 24; - pixel_y = 0 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/obj/structure/cable{ - icon_state = "0-2"; - d2 = 2 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 1; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkd" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dke" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dkf" = ( -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Engineer's Desk"; - departmentType = 3; - name = "Chief Engineer RC"; - pixel_x = -32; - pixel_y = 0 - }, -/obj/machinery/computer/apc_control, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkg" = ( -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkh" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/clipboard, -/obj/item/weapon/lighter, -/obj/item/clothing/glasses/meson{ - pixel_y = 4 - }, -/obj/item/weapon/stamp/ce, -/obj/item/weapon/stock_parts/cell/high/plus, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dki" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkk" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dkl" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dkm" = ( -/obj/machinery/computer/station_alert, -/obj/machinery/button/door{ - desc = "A remote control-switch for the engineering security doors."; - id = "Engineering"; - name = "Engineering Lockdown"; - pixel_x = -24; - pixel_y = -10; - req_access_txt = "10" - }, -/obj/machinery/button/door{ - desc = "A remote control-switch for secure storage."; - id = "Secure Storage"; - name = "Engineering Secure Storage"; - pixel_x = -24; - pixel_y = 0; - req_access_txt = "11" - }, -/obj/machinery/button/door{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_x = -24; - pixel_y = 10; - req_access_txt = "24" - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkn" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/landmark/start/chief_engineer, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dko" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/paper/monitorkey, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 1; - external_pressure_bound = 101.325; - on = 1; - pressure_checks = 1 - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkq" = ( -/obj/structure/closet/secure_closet/engineering_chief{ - req_access_txt = "0" - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkr" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dks" = ( -/obj/machinery/camera{ - c_tag = "Chief Engineer's Office"; - dir = 4; - network = list("SS13") - }, -/obj/machinery/airalarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/obj/machinery/computer/card/minor/ce, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkt" = ( -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dku" = ( -/obj/structure/table/reinforced, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/pen, -/obj/item/weapon/storage/fancy/cigarettes, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkv" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkw" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 27 - }, -/obj/structure/filingcabinet/chestdrawer, -/mob/living/simple_animal/parrot/Poly, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkx" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dky" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dkz" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkD" = ( -/obj/item/weapon/cartridge/engineering{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/weapon/cartridge/engineering{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/weapon/cartridge/engineering{ - pixel_x = 3 - }, -/obj/structure/table/reinforced, -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/item/weapon/cartridge/atmos, -/turf/open/floor/plasteel/neutral{ - dir = 2 - }, -/area/space) -"dkE" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dkF" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/theatre{ - name = "Top Secret Clown HQ" - }) -"dkG" = ( +"cSh" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92855,7 +85427,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkH" = ( +"cSi" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -92867,7 +85439,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkI" = ( +"cSj" = ( /obj/machinery/camera{ c_tag = "Aux Base Construction North"; dir = 1; @@ -92878,7 +85450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"dkJ" = ( +"cSk" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -92890,7 +85462,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkK" = ( +"cSl" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -92903,7 +85475,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkL" = ( +"cSm" = ( /obj/machinery/light/small{ dir = 4 }, @@ -92913,7 +85485,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkM" = ( +"cSn" = ( /obj/machinery/light/small{ dir = 1 }, @@ -92923,7 +85495,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkN" = ( +"cSo" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92931,15 +85503,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkO" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dkP" = ( +"cSp" = ( /obj/machinery/light/small{ dir = 1 }, @@ -92949,7 +85513,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkQ" = ( +"cSq" = ( /obj/structure/grille, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92957,7 +85521,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkR" = ( +"cSr" = ( /obj/machinery/camera{ c_tag = "Aux Base Construction South"; dir = 6; @@ -92967,7 +85531,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"dkS" = ( +"cSs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -92979,19 +85543,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkT" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dkU" = ( +"cSt" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93004,7 +85556,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkV" = ( +"cSu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93017,32 +85569,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkW" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dkX" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dkY" = ( +"cSv" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -93050,19 +85577,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkZ" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dla" = ( +"cSw" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -93071,19 +85586,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlb" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlc" = ( +"cSx" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -93091,19 +85594,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dld" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dle" = ( +"cSy" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -93113,7 +85604,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlf" = ( +"cSz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -93125,19 +85616,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlg" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlh" = ( +"cSA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -93150,32 +85629,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dli" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlj" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlk" = ( +"cSB" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -93183,15 +85637,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dll" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating/asteroid, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlm" = ( +"cSC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -93204,7 +85650,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dln" = ( +"cSD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93218,19 +85664,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlo" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlp" = ( +"cSE" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -93242,7 +85676,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlq" = ( +"cSF" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -93258,7 +85692,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlr" = ( +"cSG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -93271,14 +85705,14 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dls" = ( +"cSH" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlt" = ( +"cSI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93291,7 +85725,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlu" = ( +"cSJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -93304,7 +85738,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlv" = ( +"cSK" = ( /obj/structure/closet/crate, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -93312,27 +85746,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlw" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlx" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dly" = ( +"cSL" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -93340,40 +85754,14 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlz" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Research-Docking Bridge 5"; - dir = 1; - icon_state = "camera"; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"dlA" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Research-Docking Bridge 4"; - dir = 1; - icon_state = "camera"; - network = list("SS13") - }, -/turf/open/floor/engine, -/area/space) -"dlB" = ( +"cSM" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlC" = ( +"cSN" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -93381,26 +85769,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlD" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlE" = ( +"cSO" = ( /obj/item/stack/rods, /turf/open/floor/plating/asteroid, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlF" = ( +"cSP" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -93409,7 +85784,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlG" = ( +"cSQ" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -93418,7 +85793,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlH" = ( +"cSR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -93427,36 +85802,10 @@ /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, -/area/hallway/primary/aft) -"dlI" = ( -/obj/structure/grille, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlJ" = ( -/obj/structure/grille, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlK" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlL" = ( +"cSS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93466,7 +85815,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlM" = ( +"cST" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -93476,21 +85825,21 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlN" = ( +"cSU" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlO" = ( +"cSV" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlP" = ( +"cSW" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/power/apc{ @@ -93507,26 +85856,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlQ" = ( +"cSX" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlR" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dlS" = ( +"cSY" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/machinery/light{ @@ -93537,14 +85874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlT" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dlU" = ( +"cSZ" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/oxygen, /obj/structure/cable/orange{ @@ -93556,14 +85886,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlV" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dlW" = ( +"cTa" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -93573,7 +85896,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlX" = ( +"cTb" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -93583,7 +85906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlY" = ( +"cTc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -93600,7 +85923,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlZ" = ( +"cTd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -93608,7 +85931,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dma" = ( +"cTe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -93616,15 +85939,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"dmb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/mixing) -"dmc" = ( +"cTf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -93632,7 +85947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dmd" = ( +"cTg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -93645,7 +85960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dme" = ( +"cTh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -93658,20 +85973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dmf" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dmg" = ( +"cTi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -93688,73 +85990,30 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dmh" = ( +"cTj" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dmi" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dmj" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dmk" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dml" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/toxins/storage) -"dmm" = ( +"cTk" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmn" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmo" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmp" = ( +"cTl" = ( /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmq" = ( +"cTm" = ( /obj/structure/displaycase/labcage, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmr" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dms" = ( +"cTn" = ( /obj/machinery/button/door{ id = "researchlockdown"; name = "Research Emergency Lockdown"; @@ -93766,11 +86025,17 @@ scrub_N2O = 0; scrub_Toxins = 0 }, +/obj/machinery/button/door{ + id = "rdoffice"; + name = "Office Emergency Lockdown"; + pixel_x = -24; + pixel_y = -8 + }, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmt" = ( +"cTo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -93778,13 +86043,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmu" = ( +"cTp" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmv" = ( +"cTq" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -93798,7 +86063,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmw" = ( +"cTr" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -93807,7 +86072,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmx" = ( +"cTs" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -93821,18 +86086,13 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmy" = ( +"cTt" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmz" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmA" = ( +"cTu" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = 1; @@ -93848,19 +86108,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmB" = ( +"cTv" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"dmC" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmD" = ( +"cTw" = ( /obj/machinery/requests_console{ announcementConsole = 1; department = "Research Director's Desk"; @@ -93873,7 +86128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmE" = ( +"cTx" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -93881,13 +86136,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmF" = ( +"cTy" = ( /obj/machinery/computer/mecha, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmG" = ( +"cTz" = ( /obj/structure/rack, /obj/item/device/paicard{ pixel_x = 4 @@ -93900,19 +86155,7 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"dmH" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dmI" = ( +"cTA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -93927,7 +86170,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmJ" = ( +"cTB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93943,7 +86186,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmK" = ( +"cTC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93958,7 +86201,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmL" = ( +"cTD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93974,12 +86217,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmM" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmN" = ( +"cTE" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -93993,7 +86231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmO" = ( +"cTF" = ( /obj/structure/rack, /obj/item/device/aicard, /obj/effect/turf_decal/stripes/line{ @@ -94001,12 +86239,12 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"dmP" = ( +"cTG" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmQ" = ( +"cTH" = ( /obj/structure/grille, /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94014,42 +86252,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmR" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmS" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmT" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmU" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmV" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmW" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmX" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/crew_quarters/hor) -"dmY" = ( +"cTI" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -94059,7 +86262,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmZ" = ( +"cTJ" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94067,7 +86270,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dna" = ( +"cTK" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -94082,7 +86285,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnb" = ( +"cTL" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille, /turf/open/floor/plating{ @@ -94091,7 +86294,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnc" = ( +"cTM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -94108,7 +86311,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnd" = ( +"cTN" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -94124,14 +86327,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dne" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating/asteroid, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnf" = ( +"cTO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -94144,7 +86340,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dng" = ( +"cTP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94157,7 +86353,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnh" = ( +"cTQ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -94170,28 +86366,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dni" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnj" = ( -/obj/structure/grille, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnk" = ( +"cTR" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -94205,30 +86380,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnl" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnn" = ( +"cTS" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plating{ @@ -94237,28 +86389,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dno" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnp" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dnq" = ( +"cTT" = ( /obj/machinery/light/small, /obj/structure/chair{ dir = 4 @@ -94269,7 +86400,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnr" = ( +"cTU" = ( /obj/structure/table, /obj/item/weapon/wrench, /turf/open/floor/plating{ @@ -94278,7 +86409,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dns" = ( +"cTV" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -94294,7 +86425,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnt" = ( +"cTW" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94310,7 +86441,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnu" = ( +"cTX" = ( /obj/machinery/light/small{ dir = 8 }, @@ -94321,7 +86452,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnv" = ( +"cTY" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -94330,7 +86461,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnw" = ( +"cTZ" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94338,16 +86469,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnx" = ( -/obj/structure/girder, -/obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/aft{ - name = "Aft Asteroid Maintenance" - }) -"dny" = ( +"cUa" = ( /obj/structure/girder, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94355,7 +86477,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnz" = ( +"cUb" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -94365,17 +86487,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"dnA" = ( +"cUc" = ( /obj/structure/disposaloutlet{ dir = 8 }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, /obj/structure/lattice/catwalk, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /turf/open/space, /area/space) -"dnB" = ( +"cUd" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 8 @@ -94383,7 +86505,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"dnC" = ( +"cUe" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -94393,7 +86515,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"dnD" = ( +"cUf" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating/airless/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94401,7 +86523,7 @@ /area/mine/unexplored{ name = "Cargo Asteroid" }) -"dnE" = ( +"cUg" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -94410,7 +86532,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"dnF" = ( +"cUh" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -94425,31 +86547,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"dnG" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/mine/unexplored{ - name = "Cargo Asteroid" - }) -"dnH" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/mine/unexplored{ - name = "Cargo Asteroid" - }) -"dnI" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/mine/unexplored{ - name = "Cargo Asteroid" - }) -"dnJ" = ( +"cUi" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -94462,7 +86560,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dnK" = ( +"cUj" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -94477,31 +86575,26 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dnL" = ( +"cUk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/weapon/twohanded/required/kirbyplants/dead, /turf/open/floor/plasteel/cafeteria{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dnM" = ( +"cUl" = ( /turf/closed/mineral, /area/derelict/secret{ valid_territory = 0 }) -"dnN" = ( +"cUm" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/derelict/secret{ valid_territory = 0 }) -"dnO" = ( -/turf/closed/mineral, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnP" = ( +"cUn" = ( /obj/structure/girder, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94509,56 +86602,21 @@ /area/derelict/secret{ valid_territory = 0 }) -"dnQ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnR" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnS" = ( +"cUo" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/derelict/secret{ valid_territory = 0 }) -"dnT" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnU" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnV" = ( +"cUp" = ( /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/derelict/secret{ valid_territory = 0 }) -"dnW" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnX" = ( +"cUq" = ( /obj/structure/closet, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/spawner/lootdrop/maintenance, @@ -94569,14 +86627,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"dnY" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dnZ" = ( +"cUr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -94587,74 +86638,14 @@ /area/derelict/secret{ valid_territory = 0 }) -"doa" = ( +"cUs" = ( /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/derelict/secret{ valid_territory = 0 }) -"dob" = ( -/obj/machinery/door/airlock/glass_external{ - cyclelinkeddir = 8 - }, -/obj/structure/barricade/wooden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doc" = ( -/obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dod" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doe" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dof" = ( -/turf/closed/mineral, -/area/derelict/secret{ - valid_territory = 0 - }) -"dog" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doh" = ( -/obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doi" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doj" = ( +"cUt" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-20"; light_color = "#E1E17D"; @@ -94668,43 +86659,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"dok" = ( -/obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dol" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dom" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"don" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doo" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dop" = ( +"cUu" = ( /obj/structure/bed, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -94712,21 +86667,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doq" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dor" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dos" = ( +"cUv" = ( /obj/structure/sign/map/left/ceres{ pixel_x = 32 }, @@ -94746,19 +86687,12 @@ /area/derelict/secret{ valid_territory = 0 }) -"dot" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dou" = ( +"cUw" = ( /turf/closed/mineral/random/low_chance, /area/derelict/secret{ valid_territory = 0 }) -"dov" = ( +"cUx" = ( /obj/structure/filingcabinet/chestdrawer, /obj/item/weapon/paper/crumpled{ info = "I can't be here for much longer, this station is too empty for its own good. Something is wrong..." @@ -94777,14 +86711,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"dow" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"dox" = ( +"cUy" = ( /obj/item/weapon/paper/crumpled/bloody{ info = "...THE HOPLINE CALLS...IT THIRSTS FOR BLOOD...I MUST GO..." }, @@ -94794,7 +86721,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doy" = ( +"cUz" = ( /obj/structure/chair{ dir = 4 }, @@ -94804,7 +86731,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doz" = ( +"cUA" = ( /obj/structure/table, /obj/item/weapon/pen, /turf/open/floor/plating{ @@ -94813,26 +86740,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doA" = ( -/turf/closed/mineral, -/area/derelict/secret{ - valid_territory = 0 - }) -"doB" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doC" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doD" = ( +"cUB" = ( /obj/structure/sign/map/left{ pixel_y = -32 }, @@ -94842,7 +86750,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doE" = ( +"cUC" = ( /obj/structure/table, /obj/structure/sign/map/right{ pixel_y = -32 @@ -94853,7 +86761,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doF" = ( +"cUD" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -94865,7 +86773,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doG" = ( +"cUE" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime{ @@ -94874,63 +86782,13 @@ /area/derelict/secret{ valid_territory = 0 }) -"doH" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doI" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doJ" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doK" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doL" = ( -/obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doM" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doN" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/derelict/secret{ - valid_territory = 0 - }) -"doO" = ( +"cUF" = ( /obj/machinery/smartfridge/food, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"doP" = ( +"cUG" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/northleft{ name = "Kitchen Pick-Up"; @@ -94944,40 +86802,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"doQ" = ( -/obj/structure/disposalpipe/segment{ +"cUH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/structure/table/reinforced, -/obj/machinery/door/window/southleft{ - name = "Hydroponics Pick-Up"; - req_access_txt = "35" - }, /turf/open/floor/plasteel/darkgreen{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"doR" = ( -/obj/structure/window/reinforced/fulltile, -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"doS" = ( +"cUI" = ( /obj/machinery/plantgenes, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"doT" = ( -/obj/structure/window/reinforced/fulltile, -/obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hydroponics) -"doU" = ( +"cUJ" = ( /obj/machinery/recharge_station, /obj/machinery/light/small{ dir = 8 @@ -94986,13 +86825,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"doV" = ( +"cUK" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"doW" = ( +"cUL" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -95001,17 +86840,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"doX" = ( +"cUM" = ( /turf/open/floor/plasteel/darkred{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"doY" = ( -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/ai_monitored/security/armory) -"doZ" = ( +"cUN" = ( /obj/machinery/button/door{ id = "armoryaccess"; name = "Armory Shutter Access"; @@ -95022,7 +86856,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dpa" = ( +"cUO" = ( /obj/machinery/light/small{ dir = 4 }, @@ -95030,79 +86864,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dpb" = ( +"cUP" = ( /obj/structure/closet/secure_closet/CMO, /turf/open/floor/plasteel/barber{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dpc" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dpd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dpe" = ( -/obj/structure/table, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dpf" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dpg" = ( -/obj/structure/table, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dph" = ( -/obj/machinery/door/airlock/glass_external{ - cyclelinkeddir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/starboard{ - name = "Starboard Asteroid Maintenance" - }) -"dpi" = ( +"cUQ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Mix To Incinerator"; @@ -95114,7 +86882,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpj" = ( +"cUR" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ tag = "icon-manifold (NORTH)"; icon_state = "manifold"; @@ -95126,7 +86894,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpk" = ( +"cUS" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; @@ -95139,7 +86907,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpl" = ( +"cUT" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -95147,15 +86915,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpm" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpn" = ( +"cUU" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating/astplate{ @@ -95164,7 +86924,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpo" = ( +"cUV" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating{ @@ -95173,7 +86933,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpp" = ( +"cUW" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "12" @@ -95185,7 +86945,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpq" = ( +"cUX" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -95196,7 +86956,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpr" = ( +"cUY" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -95204,23 +86964,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dps" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpt" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpu" = ( +"cUZ" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating{ @@ -95229,48 +86973,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpv" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpw" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpx" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpy" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpz" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpA" = ( +"cVa" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -95283,93 +86986,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpB" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpC" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpD" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpF" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpH" = ( -/obj/effect/spawner/lootdrop/grille_or_trash, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpJ" = ( +"cVb" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; @@ -95381,7 +86998,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpK" = ( +"cVc" = ( /obj/machinery/light/small{ dir = 8 }, @@ -95397,7 +87014,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpL" = ( +"cVd" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; @@ -95409,7 +87026,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpM" = ( +"cVe" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; @@ -95422,81 +87039,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpN" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (SOUTHWEST)"; - icon_state = "intact"; - dir = 10 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpO" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpP" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (NORTHEAST)"; - icon_state = "intact"; - dir = 5 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpQ" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (SOUTHWEST)"; - icon_state = "intact"; - dir = 10 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpS" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (NORTHEAST)"; - icon_state = "intact"; - dir = 5 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpT" = ( +"cVf" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHWEST)"; @@ -95509,7 +87052,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpU" = ( +"cVg" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -95521,7 +87064,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpV" = ( +"cVh" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -95533,19 +87076,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpW" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Central Asteroid Maintenance"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpX" = ( +"cVi" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -95558,43 +87089,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dpZ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqa" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (NORTHEAST)"; - icon_state = "intact"; - dir = 5 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqb" = ( +"cVj" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -95606,91 +87101,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqc" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqd" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqe" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqf" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqg" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqh" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqi" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - tag = "icon-intact (EAST)"; - icon_state = "intact"; - dir = 4 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqj" = ( +"cVk" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 2; @@ -95708,7 +87119,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqk" = ( +"cVl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -95721,20 +87132,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dql" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqm" = ( +"cVm" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /obj/structure/cable{ d1 = 4; @@ -95748,33 +87146,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqn" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqp" = ( +"cVn" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -95786,35 +87158,17 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqq" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, -/turf/open/floor/plating/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqr" = ( +"cVo" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqs" = ( +"cVp" = ( /turf/closed/wall/rust{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqt" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqu" = ( +"cVq" = ( /obj/machinery/door/airlock/atmos{ name = "Turbine Access"; req_access_txt = "32" @@ -95830,27 +87184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqv" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqw" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqx" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqy" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqz" = ( +"cVr" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "12" @@ -95867,7 +87201,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqA" = ( +"cVs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -95883,115 +87217,22 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqC" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqE" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 - }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/maintcentral{ - name = "Central Asteroid Maintenance" - }) -"dqI" = ( +"cVt" = ( /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, +/obj/structure/sign/mining{ + pixel_y = -32 + }, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqJ" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqK" = ( +"cVu" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4; @@ -96002,7 +87243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqL" = ( +"cVv" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "plasma tank pump" @@ -96011,7 +87252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqM" = ( +"cVw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -96029,14 +87270,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqN" = ( +"cVx" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/weapon/extinguisher, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqO" = ( +"cVy" = ( /obj/machinery/power/terminal{ dir = 4 }, @@ -96048,7 +87289,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqP" = ( +"cVz" = ( /obj/machinery/power/smes{ capacity = 9e+006; charge = 10000 @@ -96061,17 +87302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqQ" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqR" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqS" = ( +"cVA" = ( /obj/machinery/atmospherics/components/unary/tank/toxins{ dir = 4 }, @@ -96079,16 +87310,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqT" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "plasma tank pump" - }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqU" = ( +"cVB" = ( /obj/machinery/atmospherics/pipe/manifold4w/general{ level = 2 }, @@ -96107,7 +87329,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqV" = ( +"cVC" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, @@ -96121,7 +87343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqW" = ( +"cVD" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96137,7 +87359,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqX" = ( +"cVE" = ( /obj/machinery/airalarm{ desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; @@ -96161,17 +87383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqY" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dqZ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dra" = ( +"cVF" = ( /obj/structure/chair/stool, /obj/structure/cable{ icon_state = "0-4"; @@ -96187,7 +87399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drb" = ( +"cVG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -96198,7 +87410,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drc" = ( +"cVH" = ( /obj/machinery/atmospherics/components/binary/valve{ name = "Mix to Space" }, @@ -96211,13 +87423,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drd" = ( +"cVI" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dre" = ( +"cVJ" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96227,7 +87439,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drf" = ( +"cVK" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Incinerator to Output"; @@ -96237,17 +87449,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drg" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drh" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"dri" = ( +"cVL" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -96258,7 +87460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drj" = ( +"cVM" = ( /obj/machinery/computer/turbine_computer{ id = "incineratorturbine" }, @@ -96270,14 +87472,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drk" = ( +"cVN" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/floorgrime{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drl" = ( +"cVO" = ( /obj/machinery/button/door{ id = "auxincineratorvent"; name = "Auxiliary Vent Control"; @@ -96298,7 +87500,7 @@ }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/incinerator) -"drm" = ( +"cVP" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96310,7 +87512,7 @@ }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/incinerator) -"drn" = ( +"cVQ" = ( /obj/machinery/doorButtons/airlock_controller{ idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; @@ -96332,22 +87534,7 @@ /obj/machinery/meter, /turf/open/floor/plasteel/floorgrime, /area/maintenance/incinerator) -"dro" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drp" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drq" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drr" = ( +"cVR" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/general/visible, @@ -96355,12 +87542,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drs" = ( +"cVS" = ( /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drt" = ( +"cVT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 2 }, @@ -96368,7 +87555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dru" = ( +"cVU" = ( /obj/machinery/door/airlock/glass{ autoclose = 0; frequency = 1449; @@ -96386,18 +87573,13 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drv" = ( +"cVV" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drw" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drx" = ( +"cVW" = ( /obj/structure/lattice, /obj/machinery/atmospherics/components/binary/pump{ dir = 2; @@ -96406,12 +87588,7 @@ }, /turf/open/space, /area/maintenance/incinerator) -"dry" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drz" = ( +"cVX" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2; on = 1 @@ -96433,7 +87610,7 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drA" = ( +"cVY" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96441,7 +87618,7 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drB" = ( +"cVZ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; on = 1 @@ -96465,30 +87642,12 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drC" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drD" = ( +"cWa" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/space, /area/maintenance/incinerator) -"drE" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drF" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 2 - }, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drG" = ( +"cWb" = ( /obj/machinery/door/airlock/glass{ autoclose = 0; frequency = 1449; @@ -96506,23 +87665,7 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drH" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drI" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/maintenance/incinerator) -"drJ" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/open/space, -/area/maintenance/incinerator) -"drK" = ( +"cWc" = ( /obj/machinery/door/poddoor{ id = "auxincineratorvent"; name = "Auxiliary Incinerator Vent" @@ -96531,7 +87674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drL" = ( +"cWd" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -96541,7 +87684,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drM" = ( +"cWe" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96557,7 +87700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drN" = ( +"cWf" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; external_pressure_bound = 0; @@ -96571,21 +87714,10 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drO" = ( +"cWg" = ( /turf/closed/wall/r_wall, /area/maintenance/incinerator) -"drP" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/open/space, -/area/maintenance/incinerator) -"drQ" = ( -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"drR" = ( -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"drS" = ( +"cWh" = ( /obj/machinery/power/compressor{ comp_id = "incineratorturbine"; dir = 1; @@ -96600,21 +87732,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drT" = ( -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"drU" = ( -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"drV" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/open/space, -/area/maintenance/incinerator) -"drW" = ( -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"drX" = ( +"cWi" = ( /obj/machinery/power/turbine{ luminosity = 2 }, @@ -96623,23 +87741,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drY" = ( -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"drZ" = ( +"cWj" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1 }, /turf/open/floor/plating/airless, /area/maintenance/incinerator) -"dsa" = ( +"cWk" = ( /obj/structure/sign/fire{ pixel_x = 0; pixel_y = 0 }, /turf/closed/wall/r_wall, /area/maintenance/incinerator) -"dsb" = ( +"cWl" = ( /obj/machinery/door/poddoor{ id = "turbinevent"; name = "Turbine Vent" @@ -96648,13 +87763,4191 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dsc" = ( -/obj/structure/sign/fire{ +"cWm" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Armory APC"; pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/rack, +/obj/item/weapon/storage/box/chemimp{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/weapon/reagent_containers/glass/bottle/morphine, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"cWn" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/rack, +/obj/item/weapon/storage/lockbox/loyalty, +/obj/item/weapon/storage/box/trackimp, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkred/side{ + icon_state = "darkred"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"cWo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"cWp" = ( +/obj/structure/closet/secure_closet{ + name = "contraband locker"; + req_access_txt = "3" + }, +/obj/effect/spawner/lootdrop/armory_contraband{ + loot = list(/obj/item/weapon/gun/ballistic/automatic/pistol = 5, /obj/item/weapon/gun/ballistic/shotgun/automatic/combat = 5, /obj/item/weapon/gun/ballistic/revolver/mateba, /obj/item/weapon/gun/ballistic/automatic/pistol/deagle, /obj/item/weapon/storage/box/syndie_kit/throwing_weapons = 3) + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/ai_monitored/security/armory) +"cWq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWr" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWs" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWt" = ( +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWu" = ( +/obj/machinery/camera{ + c_tag = "Security Interrogation"; + dir = 9; + icon_state = "camera"; + network = list("SS13"); + tag = "null" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWw" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWx" = ( +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWy" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWB" = ( +/obj/structure/table/wood, +/obj/item/device/taperecorder, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWF" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door_timer{ + id = "Cell 8"; + name = "Cell 8"; + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWG" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Security Transfer Range APC"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWH" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWI" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWJ" = ( +/obj/structure/mineral_door/iron{ + name = "Transfer Center" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door_timer{ + id = "Cell 7"; + name = "Cell 7"; + pixel_x = 32; + pixel_y = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWL" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/prison) +"cWM" = ( +/obj/machinery/door/airlock/security{ + name = "Inmate Transfer Facility"; + req_access_txt = "2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWN" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWO" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/security/transfer) +"cWQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ceoffice" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief) +"cWR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/glass_engineering{ + name = "Chief Engineer's Office"; + req_access_txt = "56" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief) +"cWS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "ceoffice" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief) +"cWT" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cWU" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cWV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cWW" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cWX" = ( +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cWY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cWZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cXa" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cXb" = ( +/obj/machinery/camera{ + c_tag = "Command-Service Bridge"; + dir = 4; + icon_state = "camera" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXc" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXd" = ( +/obj/machinery/camera{ + c_tag = "Command-Engineering Bridge"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cXe" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cXf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/power/apc{ + dir = 8; + name = "Medical-Cargo Bridge APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cXg" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cXh" = ( +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cXi" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Command-Service Bridge APC"; + pixel_x = -25 + }, +/obj/structure/cable{ + icon_state = "0-4"; + d2 = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXk" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXm" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cXn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Medbay-Cargo Bridge"; + dir = 4; + icon_state = "camera" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cXo" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cXp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cXq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXs" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXu" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXv" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXw" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXx" = ( +/obj/machinery/camera{ + c_tag = "Service-Engineering Bridge 1"; + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXy" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Service-Engineering Bridge APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXA" = ( +/obj/machinery/camera{ + c_tag = "Service-Engineering Bridge 2"; + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXB" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cXC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cXD" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXE" = ( +/obj/machinery/camera{ + c_tag = "Medbay-Engineering Bridge"; + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXF" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Engineering-Medical Bridge APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXG" = ( +/obj/machinery/camera{ + c_tag = "Medbay-Engineering Bridge 2"; + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXH" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/turf/open/space, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"cXJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Engineering-Medical Bridge" + }) +"cXK" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXL" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXM" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXN" = ( +/obj/machinery/camera{ + c_tag = "Docking-Medbay Bridge"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXP" = ( +/obj/machinery/light/small{ + brightness = 3; + dir = 8 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXQ" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Docking-Medical Bridge APC"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/structure/cable{ + icon_state = "0-2"; + d2 = 2 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXR" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXS" = ( +/obj/machinery/camera{ + c_tag = "Docking-Medbay Bridge 2"; + dir = 8; + network = list("SS13") + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cXT" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cXU" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cXV" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cXW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cXX" = ( +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cXY" = ( +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cXZ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYa" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cYc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + icon_state = "neutralcorner"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/aft) +"cYd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 5"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYe" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 2"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 3"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Research-Docking Bridge 4"; + dir = 1; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYi" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"cYj" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/space, +/area/space) +"cYk" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/grille, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/space, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/space, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYm" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/space, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYo" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYq" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYr" = ( +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 1"; + dir = 8; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYs" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; pixel_y = 0 }, /turf/closed/wall/r_wall, -/area/maintenance/incinerator) +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYu" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/space, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYw" = ( +/obj/structure/lattice/catwalk, +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/space, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYx" = ( +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 2"; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYy" = ( +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 3"; + network = list("SS13") + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYz" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Cargo-AI-Command Bridge APC"; + pixel_y = 24 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYA" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYB" = ( +/obj/machinery/camera{ + c_tag = "Core-Command-Cargo Bridge 3"; + network = list("SS13") + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cYD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cYE" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYF" = ( +/obj/machinery/light, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYG" = ( +/obj/machinery/light/small, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYH" = ( +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYI" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/grille, +/obj/structure/window/reinforced, +/turf/open/space, +/area/construction/hallway{ + name = "Cargo-AI-Command Bridge" + }) +"cYJ" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cYK" = ( +/obj/machinery/light/small{ + brightness = 3; + dir = 8 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cYL" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Service Bridge" + }) +"cYM" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "Command-Engineering Bridge APC"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1; + d2 = 2 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cYN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Command-Engineering Bridge" + }) +"cYO" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Medical-Cargo Bridge" + }) +"cYP" = ( +/obj/machinery/door/airlock/glass, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cYQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cYR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/central) +"cYS" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Docking-Medical Bridge" + }) +"cYT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"cYU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/power/apc{ + dir = 4; + name = "Service-Science Bridge APC"; + pixel_x = 23; + pixel_y = 2 + }, +/obj/structure/cable, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"cYV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"cYW" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/engine{ + baseturf = /turf/open/floor/plating/asteroid/airless; + name = "reinforced floor" + }, +/area/construction/hallway{ + name = "Service-Science Bridge" + }) +"cYX" = ( +/obj/effect/landmark/lightsout, +/turf/open/floor/engine, +/area/construction/hallway{ + name = "Science-Docking Bridge" + }) +"cYY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (NORTH)"; + icon_state = "neutralcorner"; + dir = 1; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cYZ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cZa" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Cargo Hallway APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/effect/turf_decal/stripes/end{ + tag = "icon-warn_end (EAST)"; + icon_state = "warn_end"; + dir = 4 + }, +/obj/structure/cable/orange{ + d2 = 4; + icon_state = "0-4" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/fore) +"cZb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Cargo Hallway APC"; + pixel_x = -23; + pixel_y = 2 + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cZc" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + icon_state = "ast_warn"; + dir = 8 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/fore{ + name = "Fore Asteroid Maintenance" + }) +"cZd" = ( +/obj/structure/table, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cZe" = ( +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cZf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/port) +"cZg" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"cZh" = ( +/obj/structure/table, +/turf/open/floor/plasteel/white{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/medical/medbay) +"cZi" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/library) +"cZj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cZk" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cZl" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"cZm" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/abandoned) +"cZn" = ( +/obj/machinery/door/airlock/titanium{ + name = "mech bay external airlock" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/docking_port/mobile{ + dheight = 0; + dir = 2; + dwidth = 8; + height = 16; + id = "whiteship"; + launch_status = 0; + name = "NT Recovery White-Ship"; + port_angle = -90; + preferred_direction = 1; + roundstart_move = "whiteship_away"; + width = 16 + }, +/obj/docking_port/stationary{ + dir = 2; + dwidth = 8; + height = 16; + id = "whiteship_home"; + name = "SS13: Auxiliary Dock, Station-Port"; + width = 16 + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"cZo" = ( +/obj/structure/shuttle/engine/propulsion{ + tag = "icon-propulsion (NORTH)"; + icon_state = "propulsion"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"cZp" = ( +/obj/machinery/mech_bay_recharge_port{ + tag = "icon-recharge_port"; + icon_state = "recharge_port"; + dir = 2 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZq" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZr" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZs" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"cZt" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/frame/machine, +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZu" = ( +/obj/structure/shuttle/engine/heater{ + tag = "icon-heater (NORTH)"; + icon_state = "heater"; + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/shuttle/abandoned) +"cZv" = ( +/obj/structure/mecha_wreckage/ripley, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/abandoned) +"cZw" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZx" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"cZy" = ( +/obj/effect/spawner/lootdrop{ + loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5); + lootdoubles = 0; + name = "25% mech 75% wreckage ripley spawner" + }, +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/abandoned) +"cZz" = ( +/obj/machinery/computer/mech_bay_power_console, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZA" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZB" = ( +/obj/machinery/door/airlock/titanium{ + name = "mech bay" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZC" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"cZD" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + name = "spare equipment crate" + }, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZE" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZF" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZG" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZH" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZI" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/obj/item/weapon/pickaxe, +/obj/item/weapon/pickaxe, +/obj/item/weapon/storage/toolbox/emergency/old, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZJ" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/abandoned) +"cZK" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "cerewhiteleft"; + name = "Cargo Blast Door Toggle"; + pixel_x = -24 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZL" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZM" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/obj/item/weapon/storage/bag/ore, +/obj/item/weapon/pickaxe, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZN" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZO" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + name = "spare equipment crate" + }, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZP" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "cerewhiteright"; + name = "Cargo Blast Door Toggle"; + pixel_x = 24 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"cZQ" = ( +/obj/machinery/door/poddoor{ + id = "cerewhiteleft" + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"cZR" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"cZS" = ( +/obj/machinery/door/poddoor{ + id = "cerewhiteright" + }, +/turf/open/floor/plating, +/area/shuttle/abandoned) +"cZT" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/crowbar, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"cZU" = ( +/obj/machinery/computer/aifixer, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"cZV" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"cZW" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"cZX" = ( +/obj/machinery/computer/card, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"cZY" = ( +/obj/machinery/computer/emergency_shuttle, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"cZZ" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"daa" = ( +/obj/structure/table, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dab" = ( +/obj/machinery/computer/cargo/request, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dac" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/storage/firstaid/o2, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dad" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/power/apc{ + dir = 8; + name = "Starboard Primary Hallway APC"; + pixel_x = -25; + pixel_y = 1 + }, +/obj/structure/cable, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hallway/primary/starboard) +"dae" = ( +/obj/structure/table, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"daf" = ( +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dag" = ( +/obj/structure/chair/comfy/beige{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dah" = ( +/turf/open/floor/plasteel/darkpurple, +/area/shuttle/escape) +"dai" = ( +/obj/machinery/computer/station_alert, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"daj" = ( +/obj/structure/chair/office/light{ + tag = "icon-officechair_white (NORTH)"; + icon_state = "officechair_white"; + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dak" = ( +/obj/machinery/computer/communications, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dal" = ( +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dam" = ( +/obj/structure/chair/comfy/beige{ + tag = "icon-comfychair (NORTH)"; + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dan" = ( +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dao" = ( +/obj/structure/table, +/obj/item/weapon/book/manual/wiki/security_space_law, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"dap" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/structure/closet/crate{ + name = "spare equipment crate" + }, +/obj/item/weapon/storage/toolbox/mechanical/old, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/item/clothing/glasses/welding, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"daq" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "spare equipment crate"; + opened = 1 + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dar" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) +"das" = ( +/obj/effect/turf_decal/delivery{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"dat" = ( +/obj/machinery/computer/med_data, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"dau" = ( +/turf/open/floor/plasteel/darkpurple/side{ + dir = 1 + }, +/area/shuttle/escape) +"dav" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"daw" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"dax" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"day" = ( +/turf/open/floor/plasteel/darkyellow/side{ + tag = "icon-darkyellow (NORTH)"; + icon_state = "darkyellow"; + dir = 1 + }, +/area/shuttle/escape) +"daz" = ( +/obj/machinery/computer/security, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"daA" = ( +/obj/structure/ore_box, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"daB" = ( +/obj/machinery/door/airlock/titanium{ + name = "cockpit" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daC" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/tank_dispenser/oxygen{ + layer = 2.7; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/abandoned) +"daD" = ( +/obj/machinery/computer/crew, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"daE" = ( +/obj/structure/chair/comfy/beige{ + dir = 8 + }, +/turf/open/floor/plasteel/darkblue, +/area/shuttle/escape) +"daF" = ( +/turf/open/floor/plasteel/darkblue/side{ + tag = "icon-darkblue (NORTH)"; + dir = 1 + }, +/area/shuttle/escape) +"daG" = ( +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1 + }, +/area/shuttle/escape) +"daH" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"daI" = ( +/obj/machinery/computer/secure_data, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"daJ" = ( +/obj/structure/table, +/obj/item/device/gps{ + gpstag = "NTCONST1"; + pixel_x = -1; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daK" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daL" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daM" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daN" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/weapon/storage/firstaid/regular, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daO" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"daP" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"daQ" = ( +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/darkred/side{ + tag = "icon-darkred (NORTH)"; + icon_state = "darkred"; + dir = 1 + }, +/area/shuttle/escape) +"daR" = ( +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/plasteel/darkred, +/area/shuttle/escape) +"daS" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daT" = ( +/obj/machinery/door/airlock/glass{ + name = "Emergency Shuttle Cockpit"; + req_access_txt = "19" + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"daU" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daV" = ( +/obj/structure/chair/comfy/black, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daW" = ( +/obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"daX" = ( +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred (NORTHEAST)"; + icon_state = "darkred"; + dir = 5; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"daY" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (WEST)"; + icon_state = "neutral"; + dir = 8 + }, +/area/shuttle/escape) +"daZ" = ( +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (EAST)"; + icon_state = "neutral"; + dir = 4 + }, +/area/shuttle/escape) +"dba" = ( +/obj/machinery/mech_bay_recharge_port{ + tag = "icon-recharge_port"; + icon_state = "recharge_port"; + dir = 2 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbb" = ( +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbc" = ( +/obj/structure/table, +/obj/item/weapon/phone{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dbd" = ( +/obj/machinery/computer/shuttle/white_ship, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dbe" = ( +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -1; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dbf" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"dbg" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/flasher{ + id = "shuttle_flasher"; + pixel_x = 24; + pixel_y = 6 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"dbh" = ( +/obj/machinery/button/flasher{ + id = "shuttle_flasher"; + pixel_x = -24; + pixel_y = -6 + }, +/obj/structure/table, +/obj/machinery/recharger, +/turf/open/floor/mineral/plastitanium/brig{ + dir = 8; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, +/area/shuttle/escape) +"dbi" = ( +/turf/open/floor/mineral/plastitanium/brig{ + dir = 4; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, +/area/shuttle/escape) +"dbj" = ( +/turf/open/floor/mech_bay_recharge_floor, +/area/shuttle/escape) +"dbk" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"dbl" = ( +/obj/machinery/door/airlock/glass_security{ + name = "Emergency Shuttle Brig"; + req_access_txt = "2" + }, +/turf/open/floor/mineral/plastitanium/brig{ + icon_state = "darkredfull" + }, +/area/shuttle/escape) +"dbm" = ( +/obj/machinery/computer/mech_bay_power_console, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbn" = ( +/turf/open/floor/mineral/plastitanium/brig{ + tag = "icon-darkred"; + icon_state = "darkred"; + dir = 2; + floor_tile = /obj/item/stack/tile/plasteel + }, +/area/shuttle/escape) +"dbo" = ( +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (WEST)"; + icon_state = "brown"; + dir = 8 + }, +/area/shuttle/escape) +"dbp" = ( +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbq" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + tag = "icon-warningline (NORTH)"; + icon_state = "warningline"; + dir = 1 + }, +/obj/structure/closet, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (EAST)"; + icon_state = "brown"; + dir = 4 + }, +/area/shuttle/escape) +"dbr" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/brig{ + dir = 6; + floor_tile = /obj/item/stack/tile/plasteel; + icon_state = "darkred" + }, +/area/shuttle/escape) +"dbs" = ( +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Cargo" + }, +/turf/open/floor/plasteel/darkyellow, +/area/shuttle/escape) +"dbt" = ( +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (WEST)"; + icon_state = "brown"; + dir = 8 + }, +/area/shuttle/escape) +"dbu" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbv" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (EAST)"; + icon_state = "brown"; + dir = 4 + }, +/area/shuttle/escape) +"dbw" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dbx" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/cups, +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 27 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dby" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dbz" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dbA" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/donkpockets, +/obj/item/weapon/storage/box/donkpockets, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dbB" = ( +/obj/structure/sign/nanotrasen{ + pixel_x = -32; + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbC" = ( +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (SOUTHWEST)"; + icon_state = "brown"; + dir = 10 + }, +/area/shuttle/escape) +"dbD" = ( +/turf/open/floor/plasteel/brown, +/area/shuttle/escape) +"dbE" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/brown, +/area/shuttle/escape) +"dbF" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet, +/turf/open/floor/plasteel/brown{ + tag = "icon-brown (SOUTHEAST)"; + icon_state = "brown"; + dir = 6 + }, +/area/shuttle/escape) +"dbG" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbH" = ( +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (EAST)"; + icon_state = "neutralcorner"; + dir = 4 + }, +/area/shuttle/escape) +"dbI" = ( +/turf/open/floor/plasteel/neutral/side, +/area/shuttle/escape) +"dbJ" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 27 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbK" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbL" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dbM" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dbN" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -28 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbO" = ( +/obj/structure/sign/bluecross_2{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbP" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 + }, +/area/shuttle/escape) +"dbQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbR" = ( +/obj/machinery/door/airlock/glass_medical{ + name = "Emergency Shuttle Medbay" + }, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dbS" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + tag = "icon-neutralcorner (WEST)"; + icon_state = "neutralcorner"; + dir = 8 + }, +/area/shuttle/escape) +"dbT" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"dbU" = ( +/mob/living/simple_animal/bot/medbot{ + name = "Speedy* Recovery" + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTHWEST)"; + icon_state = "whiteblue"; + dir = 9 + }, +/area/shuttle/escape) +"dbV" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dbW" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dbX" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dbY" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTH)"; + icon_state = "whiteblue"; + dir = 1 + }, +/area/shuttle/escape) +"dbZ" = ( +/obj/structure/table, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/obj/item/weapon/wrench, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTHEAST)"; + icon_state = "whiteblue"; + dir = 5 + }, +/area/shuttle/escape) +"dca" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dcb" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8 + }, +/area/shuttle/escape) +"dcc" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dcd" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dce" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dcf" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"dcg" = ( +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (EAST)"; + icon_state = "whitebluecorner"; + dir = 4 + }, +/area/shuttle/escape) +"dch" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (NORTHEAST)"; + icon_state = "whiteblue"; + dir = 5 + }, +/area/shuttle/escape) +"dci" = ( +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHWEST)"; + icon_state = "whiteblue"; + dir = 10 + }, +/area/shuttle/escape) +"dcj" = ( +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dck" = ( +/turf/open/floor/plasteel/whiteblue/corner{ + tag = "icon-whitebluecorner (WEST)"; + icon_state = "whitebluecorner"; + dir = 8 + }, +/area/shuttle/escape) +"dcl" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4 + }, +/area/shuttle/escape) +"dcm" = ( +/obj/machinery/computer/arcade, +/turf/open/floor/plasteel/neutral, +/area/shuttle/escape) +"dcn" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dco" = ( +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dcp" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/obj/machinery/iv_drip, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dcq" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4 + }, +/area/shuttle/escape) +"dcr" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/empty, +/obj/item/weapon/reagent_containers/blood/AMinus, +/obj/item/weapon/reagent_containers/blood/BMinus{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/blood/BPlus{ + pixel_x = 1; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/blood/OMinus, +/obj/item/weapon/reagent_containers/blood/OPlus{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/random, +/obj/item/weapon/reagent_containers/blood/APlus, +/obj/item/weapon/reagent_containers/blood/random, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dcs" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/weapon/circular_saw, +/obj/item/weapon/scalpel{ + pixel_y = 12 + }, +/obj/item/weapon/hemostat, +/obj/item/weapon/surgicaldrill, +/obj/item/weapon/cautery{ + pixel_x = 4 + }, +/obj/item/weapon/retractor, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dct" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/crowbar, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (EAST)"; + icon_state = "whiteblue"; + dir = 4 + }, +/area/shuttle/escape) +"dcu" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dcv" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dcw" = ( +/obj/structure/table, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/obj/item/clothing/suit/apron/surgical, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/weapon/surgical_drapes, +/obj/item/weapon/razor, +/turf/open/floor/plasteel/whiteblue, +/area/shuttle/escape) +"dcx" = ( +/obj/structure/table, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/toxin, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHWEST)"; + icon_state = "whiteblue"; + dir = 10 + }, +/area/shuttle/escape) +"dcy" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 1 + }, +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dcz" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/whiteblue/side, +/area/shuttle/escape) +"dcA" = ( +/obj/machinery/sleeper{ + icon_state = "sleeper-open"; + dir = 8 + }, +/turf/open/floor/plasteel/whiteblue/side{ + tag = "icon-whiteblue (SOUTHEAST)"; + icon_state = "whiteblue"; + dir = 6 + }, +/area/shuttle/escape) +"dcB" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/plasteel/neutral/side{ + tag = "icon-neutral (NORTH)"; + icon_state = "neutral"; + dir = 1 + }, +/area/shuttle/escape) +"dcC" = ( +/obj/machinery/door/airlock/glass_engineering{ + name = "Engine Room"; + req_one_access_txt = "10;24" + }, +/turf/open/floor/plasteel/yellow, +/area/shuttle/escape) +"dcD" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcE" = ( +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcF" = ( +/obj/structure/toilet{ + icon_state = "toilet00"; + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcG" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHWEST)"; + icon_state = "yellow"; + dir = 9 + }, +/area/shuttle/escape) +"dcH" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dcI" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/monitor, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dcJ" = ( +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHEAST)"; + icon_state = "yellow"; + dir = 5 + }, +/area/shuttle/escape) +"dcK" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcM" = ( +/obj/structure/closet/secure_closet/engineering_personal, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10 + }, +/area/shuttle/escape) +"dcN" = ( +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8 + }, +/area/shuttle/escape) +"dcO" = ( +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (EAST)"; + icon_state = "yellowcorner"; + dir = 4 + }, +/area/shuttle/escape) +"dcP" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/metalfoam, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dcQ" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTH)"; + icon_state = "yellow"; + dir = 1 + }, +/area/shuttle/escape) +"dcR" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (NORTHEAST)"; + icon_state = "yellow"; + dir = 5 + }, +/area/shuttle/escape) +"dcS" = ( +/obj/structure/urinal{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcT" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/freezer, +/area/shuttle/escape) +"dcU" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10 + }, +/area/shuttle/escape) +"dcV" = ( +/obj/structure/sign/electricshock{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4 + }, +/area/shuttle/escape) +"dcW" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10 + }, +/area/shuttle/escape) +"dcX" = ( +/obj/structure/table, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/electrical, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dcY" = ( +/obj/structure/table, +/obj/structure/sign/enginesafety{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dcZ" = ( +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -29 + }, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"dda" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"ddb" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/yellow/side, +/area/shuttle/escape) +"ddc" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 0; + pixel_y = -30 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHEAST)"; + icon_state = "yellow"; + dir = 6 + }, +/area/shuttle/escape) +"ddd" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/shuttle/escape) +"dde" = ( +/turf/open/floor/plating, +/area/shuttle/escape) +"ddf" = ( +/obj/machinery/light/small{ + tag = "icon-bulb1 (NORTH)"; + icon_state = "bulb1"; + dir = 1 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"ddg" = ( +/obj/machinery/power/terminal{ + tag = "icon-term (EAST)"; + icon_state = "term"; + dir = 4 + }, +/turf/open/floor/plating, +/area/shuttle/escape) +"ddh" = ( +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/shuttle/escape) +"ddi" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/shuttle/escape) +"ddj" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/shuttle/escape) +"ddk" = ( +/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plating, +/area/shuttle/escape) +"ddl" = ( +/obj/effect/landmark/carpspawn, +/turf/open/space/basic, +/area/space) +"ddm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/construction/hallway{ + name = "Service-Engineering Bridge" + }) +"ddn" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddo" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddp" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddq" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddr" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dds" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/space, +/area/space) +"ddt" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/eastright{ + name = "Hydroponics Desk"; + req_access_txt = "35" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddx" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddy" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddz" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/camera{ + c_tag = "Hydroponics Bee Reserve North"; + dir = 9; + icon_state = "camera"; + network = list("SS13") + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddA" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddB" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddC" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddD" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddE" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddF" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddG" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddH" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ddI" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddK" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/darkgreen/side{ + tag = "icon-darkgreen (WEST)"; + icon_state = "darkgreen"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddN" = ( +/obj/effect/landmark/lightsout, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddQ" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 4 + }, +/area/hydroponics) +"ddR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddS" = ( +/obj/machinery/door/airlock/glass{ + name = "Bee Reserve"; + req_access_txt = "35" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddU" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddV" = ( +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddW" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j1s"; + name = "disposal pipe - Hydroponics"; + sortType = 21 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"ddX" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ddZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dea" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deb" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dec" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"ded" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dee" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"def" = ( +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deg" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deh" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/plasticflaps, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"dei" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"dej" = ( +/obj/effect/landmark/start/botanist, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dek" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"del" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dem" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"den" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dep" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deq" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"der" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"des" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/darkgreen/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"det" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deu" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dev" = ( +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dew" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dex" = ( +/obj/machinery/door/airlock/glass{ + name = "Hydroponics"; + req_access_txt = "35" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/hydrofloor{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dey" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"dez" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deC" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deD" = ( +/obj/machinery/vending/hydroseeds, +/obj/machinery/camera{ + c_tag = "Hydroponics South 1"; + dir = 1; + network = list("SS13"); + pixel_x = 0; + pixel_y = 0; + start_active = 1 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deE" = ( +/obj/machinery/vending/hydronutrients, +/obj/machinery/light, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deF" = ( +/obj/structure/closet{ + name = "Bee-keeping suits" + }, +/obj/item/clothing/head/beekeeper_head, +/obj/item/clothing/head/beekeeper_head, +/obj/item/clothing/suit/beekeeper_suit, +/obj/item/clothing/suit/beekeeper_suit, +/obj/item/weapon/melee/flyswatter, +/obj/item/weapon/melee/flyswatter, +/obj/machinery/camera{ + c_tag = "Hydroponics South 2"; + dir = 1; + network = list("SS13"); + pixel_x = 0; + pixel_y = 0; + start_active = 1 + }, +/turf/open/floor/plasteel/darkgreen{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deG" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/open/floor/grass{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deH" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "Hydroponics APC"; + pixel_x = -23; + pixel_y = 2 + }, +/obj/effect/turf_decal/stripes/asteroid/end{ + tag = "icon-ast_warn_end (EAST)"; + icon_state = "ast_warn_end"; + dir = 4 + }, +/obj/structure/cable/orange, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/hydroponics) +"deI" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) +"deJ" = ( +/obj/item/device/assembly/mousetrap/armed, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/open/floor/plating/astplate{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/port{ + name = "Port Asteroid Maintenance" + }) (1,1,1) = {" aaa @@ -99193,8 +94486,8 @@ aaa aaa aaa aaa -aad aaa +aad aaa aaa aaa @@ -99548,6 +94841,7 @@ aaa aaa aaa aaa +aaa aac aac aac @@ -99620,7 +94914,6 @@ aaa aaa aaa aaa -aaa aac aac aad @@ -99877,6 +95170,7 @@ aaa aaa aaa aaa +aaa aac aac aad @@ -99924,7 +95218,6 @@ aaa aaa aaa aaa -aaa aad aaa aaa @@ -100384,6 +95677,7 @@ aaa aaa aaa aaa +aaa aad aaa aaa @@ -100480,7 +95774,6 @@ aaa aaa aaa aaa -aaa aad aad aad @@ -100740,14 +96033,14 @@ aaa aaa aaa aaa -aad -aad -aad -aad -aab -aab -aab aaa +aad +aad +aad +aad +aab +aab +aab aaa aaa aaa @@ -100802,7 +96095,7 @@ aai aai aai aai -aer +aeh aai aai aai @@ -101055,15 +96348,15 @@ aai aai aai aai +acT +adj +acT acU -adm -acU -acV -aes -aeP -afg -afk -afH +aei +aeE +aeS +aeW +aft aaa aaa aaa @@ -101204,6 +96497,7 @@ aaa aaa aaa aaa +aaa aag aaa aaa @@ -101280,7 +96574,6 @@ aaa aaa aaa aaa -aaa "} (19,1,1) = {" aaa @@ -101312,15 +96605,16 @@ acd acd abT aai -acV -acV -acV -acV -aet -acV -afh -afk -afI +acU +acU +acU +acU +aej +acU +aeT +aeW +afu +aaa aaa aaa aaa @@ -101537,7 +96831,6 @@ aaa aaa aaa aaa -aaa "} (20,1,1) = {" aaa @@ -101569,15 +96862,15 @@ aan aan aan aai -acW acV -acV -acV -aeu -aeQ -afi -afk -afJ +acU +acU +acU +aek +aeF +aeU +aeW +afv aaa aaa aaa @@ -101700,13 +96993,13 @@ aaa aaa aaa aaa -aZm -aZm -cdT -cdT -cdT -aZm -aZm +aXL +aXL +caR +caR +caR +aXL +aXL aaa aaa aaa @@ -101826,15 +97119,15 @@ aan aan aan aai -acX -acV -acV -acV -aev +acW +acU +acU +acU +ael aai aai aai -agl +afX aaa aaa aaa @@ -101875,12 +97168,12 @@ aaa aad aab aab -dnS -dnZ -dnN -dnS -dou -dnN +cUo +cUr +cUm +cUo +cUw +cUm aac aac aac @@ -101957,13 +97250,13 @@ aaa aaa aaa aaa -aZm -bdM -beC -bUi -ceF -cfc -aZm +aXL +bcj +bcX +bRl +cbD +cca +aXL aaa aaa aaa @@ -102083,13 +97376,13 @@ acq aan aan aai -acY -acV -acV -acV -aew +acX +acU +acU +acU +aem aai -afj +aeV aaa aaa aaa @@ -102131,14 +97424,14 @@ aaa aaa aab aad -dnM -dnS -doa -dnP -doa -dov -dnN -dnN +cUl +cUo +cUs +cUn +cUs +cUx +cUm +cUm aac aac aad @@ -102212,17 +97505,17 @@ aaa aaa aaa aaa -aZm -aZm -aZm -cdC -bVi -bVi -ceG -beC -aZm -aZm -aZm +aXL +aXL +aXL +caA +bSl +bSl +cbE +bcX +aXL +aXL +aXL aaa aaa aaa @@ -102273,13 +97566,13 @@ aaa aaa aaa aaa -cGR -cGR -cGR -cGR -cGR -cGR -cGR +cCJ +cCJ +cCJ +cCJ +cCJ +cCJ +cCJ aaa aaa aaa @@ -102338,12 +97631,12 @@ aai aai aai acE -acM +acL aai aai -adn -adC -adW +adk +adw +adM aai aai aai @@ -102388,14 +97681,14 @@ aaa aad aad aad -dnN -dnS -dnZ -dnV -dop -doa -doD -dnS +cUm +cUo +cUr +cUp +cUu +cUs +cUB +cUo aac aac aad @@ -102414,7 +97707,7 @@ aba abr abr abV -bat +aYS aaa aaa aaa @@ -102469,17 +97762,17 @@ aaa aaa aaa aaa -aYO -bpL -cdk -cdD -cdU -cel -ceH -cfd -cfr -bpL -cfL +aXn +bnM +cai +caB +caS +cbj +cbF +ccb +ccp +bnM +ccJ aaa aaa aaa @@ -102530,14 +97823,14 @@ aaa aaa aaa aaa -cGS -cHh -cHp -cHG -cHU -cIi -cHq -cGR +cCK +cCY +cDg +cDx +cDL +cDZ +cDh +cCJ aaa aaa aaa @@ -102596,15 +97889,15 @@ aan acr aan aan -acQ +acP aan aan aan aan aaB -aeR -afk -afH +aeG +aeW +aft aaa aaa aaa @@ -102645,14 +97938,14 @@ aac aac aad aad -dnM -dnV -dnP -doj -dnV -dox -doE -dnS +cUl +cUp +cUn +cUt +cUp +cUy +cUC +cUo aac aad aad @@ -102726,17 +98019,17 @@ aaa aaa aaa aaa -aZm -aYX -cdl -cdE -cdV -cem -ceI -cfe -aZm -aZm -aZm +aXL +aXw +caj +caC +caT +cbk +cbG +ccc +aXL +aXL +aXL aaa aaa aaa @@ -102765,14 +98058,14 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -102787,14 +98080,15 @@ aaa aaa aaa aaa -cGR -cGR -cHq -cHH -cHV -cIj -cIi -cGR +cCJ +cCJ +cDh +cDy +cDM +cEa +cDZ +cCJ +aaa aaa aaa aaa @@ -102858,10 +98152,9 @@ aan aan aan aan -aeS -afk -afI -aaa +aeH +aeW +afu aaa aaa aaa @@ -102902,14 +98195,14 @@ aac aac aad aad -dnP -dnV -dnV -dnP -doa -doy -doF -dnP +cUn +cUp +cUp +cUn +cUs +cUz +cUD +cUn aac aad aab @@ -102983,17 +98276,17 @@ aaa aaa aaa aaa -aYP -aYP -cdl -cdF -cdW -cen -ceJ -cff -aYX -aYP -aYP +aXo +aXo +caj +caD +caU +cbl +cbH +ccd +aXw +aXo +aXo aaa aaa aaa @@ -103022,14 +98315,14 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -103046,13 +98339,13 @@ aaa aaa abC aaa -cGR -cHI -cHW -cIk -cIB -cGR -cGR +cCJ +cDz +cDN +cEb +cEs +cCJ +cCJ aaa aaa aaa @@ -103116,9 +98409,9 @@ acG aan aan aaB -aeR -afk -afJ +aeG +aeW +afv aaa aaa aaa @@ -103159,14 +98452,14 @@ aaa aad aac aac -dnN -dnX -dnV -dnV -dos -doz -doG -dnN +cUm +cUq +cUp +cUp +cUv +cUA +cUE +cUm aac aad aab @@ -103238,19 +98531,19 @@ aaa aaa aaa aaa -aYP -aYP -aYP -aYP -cdl -cdG -cdX -ceo -cdF -cfg -aYX -aYP -aYP +aXo +aXo +aXo +aXo +caj +caE +caV +cbm +caD +cce +aXw +aXo +aXo aaa aaa aaa @@ -103278,14 +98571,15 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -103297,19 +98591,18 @@ aaa aaa aaa aaa -aaa -cgN -cgN +cdI +cdI aaa abC aaa -cGR -cGR -cHX -cIl -cIj -cIJ -cGR +cCJ +cCJ +cDO +cEc +cEa +cEA +cCJ aaa aaa aaa @@ -103370,8 +98663,8 @@ acr aai aai aai -adD -adX +adx +adN aai aai aai @@ -103416,14 +98709,14 @@ aaa aad aac aac -dnN -dnN -dnM -dnS -dnS -dnM -dnN -dnS +cUm +cUm +cUl +cUo +cUo +cUl +cUm +cUo aad aad aab @@ -103495,24 +98788,24 @@ aaa aaa aaa aaa -aYP -aYP -aYP -aZn -cdm -aZm -baz -cep -aYX -aYX -aYX -aYP -aYP -aYP -aYP -aYP -aYP -aYP +aXo +aXo +aXo +aXM +cak +aXL +aYY +cbn +aXw +aXw +aXw +aXo +aXo +aXo +aXo +aXo +aXo +aXo aaa aaa aaa @@ -103535,14 +98828,15 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -103551,22 +98845,21 @@ aaa aaa aaa aaa -aaa -cgS -cgS -cgS -cgN -cgN -cgN +cdN +cdN +cdN +cdI +cdI +cdI abC aaa aaa -cGR -cHq -cIm -cHq -cIK -cGR +cCJ +cDh +cEd +cDh +cEB +cCJ aaa aaa aaa @@ -103625,12 +98918,12 @@ aan aan aan aai -acZ +acY aan aan aan -aex -aeT +aen +aeI aai aaa aaa @@ -103740,36 +99033,36 @@ aaa aaa aaa aaa -aZm -aZm -bVg -bVg -bVg -aZm -aZm -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aZn -cdn -aZA -aZy -ceq -djV -aZo -aZn -aYT -aYT -aYT -aYT -aYT -aYT -aYP +aXL +aXL +bSj +bSj +bSj +aXL +aXL +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXM +cal +aXZ +aXX +cbo +cSf +aXN +aXM +aXs +aXs +aXs +aXs +aXs +aXs +aXo aaa aaa aaa @@ -103792,14 +99085,15 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -103808,22 +99102,21 @@ aaa aaa aaa aaa -aaa -cgS -cgS -cgS -cgN -cgN +cdN +cdN +cdN +cdI +cdI aaa abC aaa aaa aaa -cGR -cIn -cHq -cIL -cGR +cCJ +cEe +cDh +cEC +cCJ aaa aaa aaa @@ -103882,15 +99175,15 @@ aan aan aan aai -ada +acZ aan aan aan -aey +aeo aai aai aai -agm +afY aaa aaa aaa @@ -103993,40 +99286,40 @@ aaa aaa aaa aaa -aYT -bjB -bjB -bjB -aZm -bUh -bVh -bVW -bWK -bXm -aYX -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aZn -cdo -aZA -cdY -bCF -djV -aZo -aZo -aYT -aYT -aYT -aYT -aYT -aYT -aYP +aXs +bhP +bhP +bhP +aXL +bRk +bSk +bSY +bTL +bUn +aXw +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXM +cam +aXZ +caW +bAk +cSf +aXN +aXN +aXs +aXs +aXs +aXs +aXs +aXs +aXo aaa aaa aaa @@ -104050,37 +99343,37 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa aaa -cgS -cgS -cgS -cgS -cgS -cgS -cgS +cdN +cdN +cdN +cdN +cdN +cdN +cdN aaa abC aaa aaa aaa -cGR -cIm -cGR -cIM -cGR +cCJ +cEd +cCJ +cED +cCJ aaa aaa aaa @@ -104139,15 +99432,15 @@ aan acG aan aai -adb +ada aan aan aan aan aan -afl -afk -afH +aeX +aeW +aft aaa aaa aaa @@ -104230,16 +99523,16 @@ aaa aaa aaa aaa -bjB -bjB -bjB -bjB -bjB -bjB -bjB -bjB -bjB -bjB +bhP +bhP +bhP +bhP +bhP +bhP +bhP +bhP +bhP +bhP aaa aaa aaa @@ -104250,45 +99543,45 @@ aaa aaa aaa aaa -aYP -bjB -bjB -bjB -aYX -bUi -bVi -beC -bWL -beC -aYX -aYT -aYT -aYT -aZo -dbU -aZm -aYX -aZn -aZm -cdp -bbu -bbu -cdp -aZo -aZo -aZo -aZo -aZo -aZn -aZn -aZn -aZn -aYP -aYP -cgN -cgS -cgS -cgS +aXo +bhP +bhP +bhP +aXw +bRl +bSl +bcX +bTM +bcX +aXw +aXs +aXs +aXs +aXN +cNi +aXL +aXw +aXM +aXL +can +aZT +aZT +can +aXN +aXN +aXN +aXN +aXN +aXM +aXM +aXM +aXM +aXo +aXo +cdI +cdN +cdN +cdN aaa aaa aaa @@ -104307,34 +99600,34 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa -cgS -cgS -cgS -cgN -cgN -cgS -cgS -cgS +cdN +cdN +cdN +cdI +cdI +cdN +cdN +cdN aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -104396,15 +99689,15 @@ aai aai aai aai -adc +adb ace aan aan aan aan -afm -afk -afI +aeY +aeW +afu aaa aaa aaa @@ -104487,66 +99780,66 @@ aaa aaa aaa aaa -bjB -bjB -bjB -bjB -aYP -aYP -aYT -bjB -bjB -bjB -bjB -bjB +bhP +bhP +bhP +bhP +aXo +aXo +aXs +bhP +bhP +bhP +bhP +bhP aaa aaa aaa aaa -bjB -bjB -bjB -aYP -aYP -aYP -aYT -aYT -aZm -aYX -aZm -bVX -bWM -bXn -aZm -aYT -aZo -aZo -aZm -ccr -aZA -bbg -aZA -bHy -bCF -aZA -aZA -cer -aYX -ceK -cfs -aZz -aZA -aZA -cge -aZn -cgj -cgv -cgv -cgN -cgN -cgN -cgS -cgS +bhP +bhP +bhP +aXo +aXo +aXo +aXs +aXs +aXL +aXw +aXL +bSZ +bTN +bUo +aXL +aXs +aXN +aXN +aXL +bZq +aXZ +aZF +aXZ +bEP +bAk +aXZ +aXZ +cbp +aXw +cbI +ccq +aXY +aXZ +aXZ +cdb +aXM +cdf +cdr +cdr +cdI +cdI +cdI +cdN +cdN aaa aaa aaa @@ -104575,23 +99868,23 @@ aaa aaa aaa aaa -cgR -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgS -cgS +cdM +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdN +cdN aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -104651,17 +99944,17 @@ aaa aaa aaa aaa -acN +acM aai -add -ado +adc +adl aan -adY -adY +adO +adO acG -afn -afk -afJ +aeZ +aeW +afv aaa aaa aaa @@ -104736,74 +100029,74 @@ aaa aaa aaa aaa -bjB -bjB -bjB +bhP +bhP +bhP aaa -bjB -bjB -bjB -bjB -bjB -aYP -aYP -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYP -aYT -aYT -aYT -aYT -aYP -aYP -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aZm -aYX -aYX -bXo -aYX -aZo -aZm -aYX -bWp -blT -bbf -bbf -bbf -bbf -bmN -aZA -aZA -ces -ceK -ceK -cft -aZA -aZA -aZA -aZA -aZX -cgj -cgj -cgj -cgO -cgO -cgN -cgS -cgS +bhP +bhP +bhP +bhP +bhP +aXo +aXo +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXo +aXs +aXs +aXs +aXs +aXo +aXo +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXL +aXw +aXw +bUp +aXw +aXN +aXL +aXw +bTq +bkc +aZE +aZE +aZE +aZE +bkU +aXZ +aXZ +cbq +cbI +cbI +ccr +aXZ +aXZ +aXZ +aXZ +aYw +cdf +cdf +cdf +cdJ +cdJ +cdI +cdN +cdN aaa aaa aaa @@ -104832,23 +100125,23 @@ aaa aaa aaa aaa -cgR -cgR -cgR -cgR -cgR -cgR -cgN -cgS -cgS -cgN +cdM +cdM +cdM +cdM +cdM +cdM +cdI +cdN +cdN +cdI aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -104992,76 +100285,76 @@ aaa aaa aaa aaa -bjB -bjB -aYP -aYP +bhP +bhP +aXo +aXo aaa -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aZo -aZo -aYX -bWN -bXp -aZn -aYX -aZm -dhj -beC -bCF -blT -bbf -bbf -bVY -bbf -bbf -bbf -bmN -aZn -aZn -aZn -aZn -aZn -aZn -bec -aZA -aZA -aZA -cgj -cgj -cgj -cgO -cgN -cgS -cgS +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXN +aXN +aXw +bTO +bUq +aXM +aXw +aXL +cQN +bcX +bAk +bkc +aZE +aZE +bTa +aZE +aZE +aZE +bkU +aXM +aXM +aXM +aXM +aXM +aXM +bcx +aXZ +aXZ +aXZ +cdf +cdf +cdf +cdJ +cdI +cdN +cdN aaa aaa aaa @@ -105084,20 +100377,20 @@ aaa aaa aaa aaa -cgS +cdN aaa aaa -cgS -cgS -cgS -cgR -cgR -cgR -cgR -cgR -cgN -cgS -cgS +cdN +cdN +cdN +cdM +cdM +cdM +cdM +cdM +cdI +cdN +cdN aaa aaa abC @@ -105105,7 +100398,7 @@ aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -105193,15 +100486,15 @@ aaa aaa aaa aaa -awc -awc -awd -awc -awc -awd -awc -awc -awc +avw +avw +avx +avw +avw +avx +avw +avw +avw aaa aaa aaa @@ -105236,95 +100529,95 @@ aaa aaa aaa aaa -aYN -aZg -aYN +aXm +aXF +aXm aaa aaa abC aaa aaa aaa -aYP +aXo aaa aaa aaa -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aYP -aYP -aYT -aZo -aZo -aZo -aZo -aZo -aZn -aZn -aZz -aZA -bHy -aZm -beC -aZz -bCF -bCF -aZA -ccr -bbg -aZA -aZA -aZA -bec -aZm -aZn -djX -djX -cea -cea -djX -aZn -cgm -aZA -aZA -cgj -cgj -cgO -cgO -cgO -cgO -cgS -cgS -cgS -cgS -cgS -cgS +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXo +aXo +aXs +aXN +aXN +aXN +aXN +aXN +aXM +aXM +aXY +aXZ +bEP +aXL +bcX +aXY +bAk +bAk +aXZ +bZq +aZF +aXZ +aXZ +aXZ +bcx +aXL +aXM +cSg +cSg +caY +caY +cSg +aXM +cdi +aXZ +aXZ +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdN +cdN +cdN +cdN +cdN +cdN aaa aaa aaa @@ -105341,28 +100634,28 @@ aaa aaa aaa aaa -cgS -cgS +cdN +cdN aaa -cgS -cgS -cgS -cgR -cgR -cgR -cgR -cgR -cgN -cgS -cgS -cgS +cdN +cdN +cdN +cdM +cdM +cdM +cdM +cdM +cdI +cdN +cdN +cdN aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -105450,15 +100743,15 @@ aaa aaa aaa aaa -awd -axf -ayb -azI -aAW -aAW -aDh -aEw -aFQ +avx +awy +axu +aza +aAo +aAo +aCy +aDM +aFf aaa aaa aaa @@ -105493,94 +100786,94 @@ aaa aaa aaa aaa -aYN -aZh -aYN +aXm +aXG +aXm aaa aaa abC aaa aaa -aYP -aYP +aXo +aXo aaa -aYP -aYP -aYP +aXo +aXo +aXo +aXs +aXo +aXo +aXo +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXM +aXL +aXM +aXw +cNi +aXL +aXL +aXM +aXM +aXN +aXw +aXw +aXL +aXM +bSm aYT -aYP -aYP -aYP -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aZn -aZm -aZn -aYX -dbU -aZm -aZm -aZn -aZn -aZo -aYX -aYX -aZm -aZn -bVj -bau -aZn -aZz -blT -bbf -bbf -bbf -bbf -bmN -bCF -aZA -aZA -bbg -aZm -aYX -aZm -aZn -aZn -cea -cea -cfD -cfE -cfW -cea -cgj -cgj -cgj -aZA -aZA -cgj -cgj -cgO -cgO -cgO -cgO -cgO -cgS -cgS -cgS +aXM +aXY +bkc +aZE +aZE +aZE +aZE +bkU +bAk +aXZ +aXZ +aZF +aXL +aXw +aXL +aXM +aXM +caY +caY +ccB +ccC +ccT +caY +cdf +cdf +cdf +aXZ +aXZ +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdJ +cdN +cdN +cdN aaa aaa aaa @@ -105598,28 +100891,28 @@ aaa aaa aaa aaa -cgS -cgS -cgR -cgR -cgR -cgS -cgS -cgR -cgR -cgR -cgR -cgN -cgN -cgS -cgS +cdN +cdN +cdM +cdM +cdM +cdN +cdN +cdM +cdM +cdM +cdM +cdI +cdI +cdN +cdN aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -105707,28 +101000,28 @@ aaa aaa aaa aaa -awd -axg -ayc -awc -aAW -aAW -aAW -aEw -aFQ +avx +awz +axv +avw +aAo +aAo +aAo +aDM +aFf aaa aaa aaa aaa aaa abC -afV -afV -afV -afV -afV -afV -afV +afH +afH +afH +afH +afH +afH +afH abC aaa aaa @@ -105750,99 +101043,99 @@ aaa aaa aaa aaa -aYN -aZi -aYN +aXm +aXH +aXm aaa aaa abC aaa aaa -aYP -aYP -aZo -aZo -aZo -aYT -aYT -aYT -aYT -aYT -aZo -aZo -aZo -aZo -bnS -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aZn -aZm -aZm -bFa -bec -bHy -bec -aZA -aZn -bNg -bNg -aZA -aZm -aZA -aZA -blT -bbf -bVY -bMd -bbf -bmN -blT -bbf -bbf -bbf -bbf -bmN -cad -aYX -aYX -aYX -aZn -aZn -aZn -aZn -cea -cfu -cfE -cfE -cfX -cea -cgj -cgj -cgj -cgj -aZA -bec -cgj -cgj -cgO -cgO -cgO -cgO -cgN -cgS -cgS -cgN -cgS -cgS -cgS -cgS +aXo +aXo +aXN +aXN +aXN +aXs +aXs +aXs +aXs +aXs +aXN +aXN +aXN +aXN +blY +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXM +aXL +aXL +bCz +bcx +bEP +bcx +aXZ +aXM +bKr +bKr +aXZ +aXL +aXZ +aXZ +bkc +aZE +bTa +bJq +aZE +bkU +bkc +aZE +aZE +aZE +aZE +bkU +bXd +aXw +aXw +aXw +aXM +aXM +aXM +aXM +caY +ccs +ccC +ccC +ccU +caY +cdf +cdf +cdf +cdf +aXZ +bcx +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdI +cdN +cdN +cdI +cdN +cdN +cdN +cdN aaa aaa aaa @@ -105854,29 +101147,29 @@ aaa aaa aaa aaa -cgS -cgR -cgR -cgR -cgR -cgR -cgS -cgS -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgN +cdN +cdM +cdM +cdM +cdM +cdM +cdN +cdN +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdI aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -105964,28 +101257,28 @@ aaa aaa aaa aaa -awd -axh -ayd -azJ -aAX -aCa -aAW -aEw -aFQ +avx +awA +axw +azb +aAp +aBs +aAo +aDM +aFf aaa aaa aaa aaa abC abC -afV -aOF -aPB -aRj -aSd -ajr -afV +afH +aNy +aOo +aPQ +aQK +aiZ +afH abC abC aaa @@ -106007,99 +101300,99 @@ aaa aaa aaa aaa -aYN -aZj -aYN -aYN -aYN -aYN +aXm +aXI +aXm +aXm +aXm +aXm aaa aaa -aYP -aYP -aZo -dci -aZo -aYX -aYX -dbV -aZm -aZm -aZo -bec -bad -aZm -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aZn -bCE -bbf -bbf -bbf -bbf -bbf -bbf -bMd -bbf -bbf -bbf -bbf -bbf -bbf -bmN -bVk -bVZ -bPW -bPW -bPW -bYP -aZA -aZA -aZA -bWp -cbw -cbZ -aZm -aZn -aZo -aZo -aZo -aZn -aZn -cea -cfv -cfF -cfE -cfE -djX -aZn -aZn -cgj -cgj -cgP -aZA -aZA -cgj -cgj -cgO -cgO -cgO -cgO -cgO -cgO -cgO -cgO -cgN -cgN -cgN +aXo +aXo +aXN +cNw +aXN +aXw +aXw +cNj +aXL +aXL +aXN +bcx +aYC +aXL +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXM +bAj +aZE +aZE +aZE +aZE +aZE +aZE +bJq +aZE +aZE +aZE +aZE +aZE +aZE +bkU +bSn +bTb +bNd +bNd +bNd +bVQ +aXZ +aXZ +aXZ +bTq +bYv +bYY +aXL +aXM +aXN +aXN +aXN +aXM +aXM +caY +cct +ccD +ccC +ccC +cSg +aXM +aXM +cdf +cdf +cdK +aXZ +aXZ +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdJ +cdJ +cdJ +cdJ +cdI +cdI +cdI aaa aaa aaa @@ -106110,30 +101403,30 @@ aaa aaa aaa aaa -cgS -cBU -cBU -cBU -cBU -cBU -cBU -cBU -cgS -cgS -cgR -cgR -cgR -cgR -cgR -cgR -cgN +cdN +cxT +cxT +cxT +cxT +cxT +cxT +cxT +cdN +cdN +cdM +cdM +cdM +cdM +cdM +cdM +cdI aaa abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -106221,30 +101514,30 @@ aaa aaa aaa aaa -awc -awc -aye -awc -awc -awc -aDi -awc -awc +avw +avw +axx +avw +avw +avw +aCz +avw +avw aaa aaa aaa aaa -afV -afV -afS -aOG -akp -aym -aym -aym -afS -afV -afV +afH +afH +afE +aNz +ajW +axF +axF +axF +afE +afH +afH aaa aaa aaa @@ -106259,104 +101552,104 @@ aaa aaa aaa aaa -aYN -aYN -aYN -aYN -aYN -aYX -aZk -aZu -aZJ -aZW -aZJ +aXm +aXm +aXm +aXm +aXm +aXw +aXJ +aXT +aYi +aYv +aYi aaa aaa -aYP -aZm -aZm -bFm -beD -dcA -dcK -beD -ddt -ddU -bkb -bkb -bSs -aZo -aYT -aYT -aYT -bsc -bsd -bsd -bsd -bsd -bsc -bsc -bsc -dgu -bEd -bnT -bnT -bnT -dhi -dft -bnT -bnT -bOv -dhL -bQY -bPW -dhL -dhL -bVl -aYX -aZA -aZA -aZA -bCW -aZA -bbi -bdL -aZm -aZn -aZo -aZo -aZo -aZo -aZo -aZo -aZn -aZn -djX -cea -cfE -cfE -cfY -cea -aZn -aZn -cgn -cgE -cgQ -aZA -aZA -aZA -cgj -cgj -cgO -cgO -cgO -cgO -cgO -cgO -cgO -cgN -cgN -cgN +aXo +aXL +aXL +bCG +bcY +cNL +cNO +bcY +cOs +cOH +bip +bip +bPw +aXN +aXs +aXs +aXs +bpZ +bqa +bqa +bqa +bqa +bpZ +bpZ +bpZ +cQs +bBD +blZ +blZ +blZ +cQM +cPM +blZ +blZ +bLD +cRh +bOd +bNd +cRh +cRh +bSo +aXw +aXZ +aXZ +aXZ +bAw +aXZ +aZH +bci +aXL +aXM +aXN +aXN +aXN +aXN +aXN +aXN +aXM +aXM +cSg +caY +ccC +ccC +ccV +caY +aXM +aXM +cdj +cdz +cdL +aXZ +aXZ +aXZ +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdJ +cdJ +cdJ +cdI +cdI +cdI aaa aaa aaa @@ -106367,30 +101660,30 @@ aaa aaa aaa aaa -cgS -cBU -dlN -dlS -dlW -cCO -dmh -cBU -cgS -cgS -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgR +cdN +cxT +cSU +cSY +cTa +cyM +cTj +cxT +cdN +cdN +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdM abC aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -106478,30 +101771,30 @@ aaa aaa aaa aaa -awe -axi -ayf -axi -aAY -axi -aDj -axi +avy +awB +axy +awB +aAq +awB +aCA +awB acj aaa aaa aaa aaa -aLv -aMC -aNz -aNz -aPC -ahA -aSe -aSe -aTM -aMC -aVn +aKz +aLC +aMv +aMv +aOp +ahm +aQL +aQL +aSq +aLC +aTR aaa aaa aaa @@ -106516,105 +101809,105 @@ aaa aaa aaa aaa -aYO -aYR -aYS -aYV -aYX -aZa -aZb -aZv -aYX -aYN -aYN -aYP -aYP -aZn -aZm -aZA -bCW -dcp -dcB -dcL -dcL -dcL -dcL -dcL -dez -deP -aZm -aYT -aYT -aYT -bsc -btx -bty -bwx -bty -bzs -bty -bsd -dgu -deT -aYX -aZm -aYX -dhj -aZm -cfg -beC -dhB -aZn -aZm -dbV -aYX -aZm -aZm -aZn -aZn -aZn -aZA -bCW -aZn -aZm -aZm -aZm -aZo -aZo -aZo -aZo -aZo -aZn -aZn -cdZ -cdZ -cdZ -djX -cfG -cfE -cfZ -cea -aZn -cgn -cgw -cgF -cgj -cgj -aZA -aZA -aZA -cgj -cgj -cgj -cgj -cgj -cgO -cgO -cgO -cgO -cgO -cgN -cgS +aXn +aXq +aXr +aXu +aXw +aXz +aXA +aXU +aXw +aXm +aXm +aXo +aXo +aXM +aXL +aXZ +bAw +cND +cNM +cNP +cNP +cNP +cNP +cNP +cPc +cPo +aXL +aXs +aXs +aXs +bpZ +bru +brv +bum +brv +bxa +brv +bqa +cQs +cPr +aXw +aXL +aXw +cQN +aXL +cce +bcX +cRa +aXM +aXL +cNj +aXw +aXL +aXL +aXM +aXM +aXM +aXZ +bAw +aXM +aXL +aXL +aXL +aXN +aXN +aXN +aXN +aXN +aXM +aXM +caX +caX +caX +cSg +ccE +ccC +ccW +caY +aXM +cdj +cds +cdA +cdf +cdf +aXZ +aXZ +aXZ +cdf +cdf +cdf +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdJ +cdI +cdN aaa aaa aaa @@ -106625,29 +101918,29 @@ aaa aaa aaa aaa -cBU -dlO -dlO -cDE -dmc -dmh -cBU -cgS -cgS -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgR -cGT +cxT +cSV +cSV +czB +cTf +cTj +cxT +cdN +cdN +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdM +cCL aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -106736,29 +102029,29 @@ aaa abC abC abC -axj -ayg -axj +awC +axz +awC abC -axj -ayg -axj +awC +axz +awC abC abC aaa aaa aaa -afV -afV -afV -aOH -aPD -aiW -aym -aym -afS -afV -afV +afH +afH +afH +aNA +aOq +aiE +axF +axF +afE +afH +afH aaa aaa aaa @@ -106773,138 +102066,138 @@ aaa aaa aaa aaa -aYN -aYN -aYN -aYW -aYY -aZb -aZl -aZw -aYX -aZn +aXm +aXm +aXm +aXv +aXx +aXA +aXK +aXV +aXw +aXM +aXs +aXs +aXs +aXN aYT -aYT -aYT -aZo -bau -aZA -bCW -dcq -dcw -dcw -dcw -ddv -dcw -dcw -dcq -bCW -dbU -aYT -aYT -aYP -bsc -bty -bvc -bwy -byg -bzt -bAy -bsd -dgu -deT -aYX -bGn -bHz -beC -aZm -aZm -dhr -bfr -dhM -aYX -aZn -aZo -aZo -aZo -aZo -aZo -aZn -aZB -bYQ -aZn -aZn -aZn -bWO -bWO -bWO -bWO -bWO -bWO -aZn -cdZ -cdZ -ceu -cev -cfw -cev -cev -djX -cea -aZn -cgo -aZn -aZn -aZn -cgj -cgj -aZA -aZA -aZA +aXZ +bAw +cNE +cNJ +cNJ +cNJ +cOt +cNJ +cNJ +cNE +bAw +cNi +aXs +aXs +aXo +bpZ +brv +bsU +bun +bvR +bxb +byf +bqa +cQs +cPr +aXw +bDH +bEQ +bcX +aXL +aXL +cQR bdL -cgj -cgj -cgj -cgO -cgO -cgO -cgO -cgO -cgN -cgN +cRi +aXw +aXM +aXN +aXN +aXN +aXN +aXN +aXM +aYa +bVR +aXM +aXM +aXM +bTP +bTP +bTP +bTP +bTP +bTP +aXM +caX +caX +cbs +cbt +ccu +cbt +cbt +cSg +caY +aXM +cdk +aXM +aXM +aXM +cdf +cdf +aXZ +aXZ +aXZ +bci +cdf +cdf +cdf +cdJ +cdJ +cdJ +cdJ +cdJ +cdI +cdI aaa aaa aaa aaa aaa aaa -cgS +cdN aaa aaa aaa -cBU -dlP -dlU -dlX -dmd -dmh -cBU -cgS -cgS -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgR -cgN +cxT +cSW +cSZ +cTb +cTg +cTj +cxT +cdN +cdN +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdM +cdI aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -106990,30 +102283,30 @@ abW abW abW abW -atR -atR -atR -axk -ayh -axo -atR -axo -aDk -aEx -atR -atR +atl +atl +atl +awD +axA +awH +atl +awH +aCB +aDN +atl +atl abW abW aaa abW abW -afS -aym -aiW -aht -aSf -aTi -afV +afE +axF +aiE +ahf +aQM +aRO +afH abW abW aaa @@ -107032,136 +102325,136 @@ aaa aaa aaa aaa -aYN -aYN -aYN -aYN -aZm -aZx -aYX -aZn -aYT -aYT -aYT -aZo -aZo -aZm -dcj -dcq -dcw -dcM -ddc -ddw -ddW -dcw -deB -deQ -aZo -aYT -aYT -aYP -bsc -bty -bvd -bwz -byh -bzu -bAz -bsd -dgu -deT -aYX -aYX -aZm -aZn -aZn -aZn -dhs -bfr -beC -aYX -aZn -bHA -bHA -bHA -bHA -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -cbx -cbx -cbx -cbx -bWO -aZn -cea -cet -ceu -cdZ -cea -djX -djX -djX -aYP -aZn -aZn -aZn -aYP -cgN -cgO -cgj -cgj -cgj -aZA -aZA -aZA -aZA -cgj -cgj -cgj -cgj -cgO -cgO -cgN -cgN -cgS +aXm +aXm +aXm +aXm +aXL +aXW +aXw +aXM +aXs +aXs +aXs +aXN +aXN +aXL +cNx +cNE +cNJ +cNQ +cOe +cOu +cOI +cNJ +cPd +cPp +aXN +aXs +aXs +aXo +bpZ +brv +bsV +buo +bvS +bxc +byg +bqa +cQs +cPr +aXw +aXw +aXL +aXM +aXM +aXM +cQS +bdL +bcX +aXw +aXM +bER +bER +bER +bER +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bYw +bYw +bYw +bYw +bTP +aXM +caY +cbr +cbs +caX +caY +cSg +cSg +cSg +aXo +aXM +aXM +aXM +aXo +cdI +cdJ +cdf +cdf +cdf +aXZ +aXZ +aXZ +aXZ +cdf +cdf +cdf +cdf +cdJ +cdJ +cdI +cdI +cdN aaa aaa aaa aaa -cgS -ctW -cuQ -cuQ -cuQ -ctW -dlQ -dlQ -cDE -dme -dmh -cBU -cgS -cgS -cgS -cgN -cgR -cgR -cgR -cgR -cgR -cgR +cdN +cqb +cqU +cqU +cqU +cqb +cSX +cSX +czB +cTh +cTj +cxT +cdN +cdN +cdN +cdI +cdM +cdM +cdM +cdM +cdM +cdM aaa aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -107247,33 +102540,33 @@ acH acH acH acH -atR -auV -awf -axl -ayi -azK -aAZ -aCb -axl -axl -aFR -atR +atl +aup +avz +awE +axB +azc +aAr +aBt +awE +awE +aFg +atl abW acH acH acH acH -afS -aym -aPE -aRk -aSg -aTj -afV +afE +axF +aOr +aPR +aQN +aRP +afH abW abW -akG +akm abC abC abC @@ -107293,132 +102586,132 @@ abC abC abC abC -aZm -aZy -aZK -aZn -aZo -aZo -aYX -aYX -aZm -dcb -bCW -beA -dcw -dcN -ddd -ddx -ddX -dcw -dcq -deQ -aYX -aYT -aYT -aYP -bsd -bty -bve -bwA -byi -bzv -bAA -bsc -dgu -deT -dbU -aZn -aZn -aZn -aZn -aZn -aZn -bOw -dhN -aZn -aZn -bHA -bUj -bVm -bWa -bWO -bXq -bYd -bYR -bZp -cWF -cao -caY -cby -cca -bYd -bYd -bWO -aZn -cdZ -ceu -cdZ -cdZ -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aYP -cgN -cgO -cgO -cgO -cgj -cgj -bec -aZA -aZA -aZA -bec -cgj -cgj -cgO -cgO -cgO -cgN -cgN +aXL +aXX +aYj +aXM +aXN +aXN +aXw +aXw +aXL +cNp +bAw +bcV +cNJ +cNR +cOf +cOv +cOJ +cNJ +cNE +cPp +aXw +aXs +aXs +aXo +bqa +brv +bsW +bup +bvT +bxd +byh +bpZ +cQs +cPr +cNi +aXM +aXM +aXM +aXM +aXM +aXM +bLE +cRj +aXM +aXM +bER +bRm +bSp +bTc +bTP +bUr +bVe +bVS +bWq +cLb +bXn +bXX +bYx +bYZ +bVe +bVe +bTP +aXM +caX +cbs +caX +caX +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXo +cdI +cdJ +cdJ +cdJ +cdf +cdf +bcx +aXZ +aXZ +aXZ +bcx +cdf +cdf +cdJ +cdJ +cdJ +cdI +cdI aaa aaa aaa aaa -cgS -ctW -cuR -cvR -cvR -ctW -cCQ -cCQ -dlY -dme -dmh -cBU -cCB -cjU -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgR +cdN +cqb +cqV +crU +crU +cqb +cyO +cyO +cTc +cTh +cTj +cxT +cyz +cgv +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdM aaa aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -107503,32 +102796,32 @@ abW acH acH acH -aez -atS -auW -awg -axm -axm -azL -aBa -axm -aDl -axm -aFS -atR -aez -aqG -afS -afV -afS -afV -afV -aPF -aRl -afS -afS -afS -adZ +aep +atm +auq +avA +awF +awF +azd +aAs +awF +aCC +awF +aFh +atl +aep +aqg +afE +afH +afE +afH +afH +aOs +aPS +afE +afE +afE +adP abW abW aaa @@ -107549,133 +102842,133 @@ aaa aaa aaa aaa -aYP -aYX -aZz -aZz -aZz -aZm -aZm -bbg -dbW -aZA -bFm -bCY -dcs -dcw -dcO -dde -ddy -ddY -dcw -dcq -bfq -aZm -aYT -aYT -aYT -bsd -btz -bvf -bwB -byj -bzw -bty -bsc +aXo +aXw +aXY +aXY +aXY +aXL +aXL +aZF +cNk +aXZ bCG -blW -aYX -aZn -aZn -bHA -bHA -bHA -bHA -bHA -bHA -bHA -bHA -bHA -bUk -bVn -bWb -bWP -bXr -bXr -bYS -bXr -bXr -cap -caZ -bXr -ccb -ccs -ccJ -bWO -aZn -cdZ -ceu -ceL -cdZ -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -cgN -cgO -cgO -cgO -cgO -cgj -cgj -cgj -cgj -aZA -aZA -aZA -aZn -aZn -aZn -cgN -cgN -cgN +bAy +cNF +cNJ +cNS +cOg +cOw +cOK +cNJ +cNE +bdK +aXL +aXs +aXs +aXs +bqa +brw +bsX +buq +bvU +bxe +brv +bpZ +bAl +bkf +aXw +aXM +aXM +bER +bER +bER +bER +bER +bER +bER +bER +bER +bRn +bSq +bTd +bTQ +bUs +bUs +bVT +bUs +bUs +bXo +bXY +bUs +bZa +bZr +bZI +bTP +aXM +caX +cbs +cbJ +caX +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +cdI +cdJ +cdJ +cdJ +cdJ +cdf +cdf +cdf +cdf +aXZ +aXZ +aXZ +aXM +aXM +aXM +cdI +cdI +cdI aaa aaa aaa aaa -cgS -ctW -cuS -cvR -cwO -ctW -cBU -cBU -dlZ -dmg -ctW -ctW -cCC -cjU -chc -cjU -cjV -cgu -cgu -cgR -cgN -cgN -cgN +cdN +cqb +cqW +crU +csR +cqb +cxT +cxT +cTd +cTi +cqb +cqb +cyA +cgv +cdU +cgv +cgw +cdq +cdq +cdM +cdI +cdI +cdI aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -107759,33 +103052,33 @@ acH acH acH acH -aez -aez -atR -auX -awh -axn -ayj -azL -aAZ -axn -ayj -axm -aFT -atR -aIo -afq -aqH -afq -afq -afq -afq -aPG -aPG -afq -aTk -afV -afV +aep +aep +atl +aur +avB +awG +axC +azd +aAr +awG +axC +awF +aFi +atl +aHz +afc +aqh +afc +afc +afc +afc +aOt +aOt +afc +aRQ +afH +afH acH acH abE @@ -107806,133 +103099,133 @@ aaa aaa aaa aaa -aYP -aZn -aYX -aZL -aZz -aZz -aZz -aZz -aZz -aZz -bCW -dck -dct -dcw -dcw -ddf -ddz -ddZ -dcw -deE -bfr -aZm -aYX -aYX -aZo -bsd -bsd -bsd -bwC -bwC -bsd -bsd -bsc -bCH -blW -aYX -aZn -aZn -bHA -bKz -bMe -bNh -bOx -cME -bMe -bPX -bHC -bIY -bKF -bWc -bWQ -bXs -bXs -bWQ -bZq -bWQ -caq -bWQ -bXs -bXs -cct -ccK -bWO -aZn -cdZ -ceu -cdZ -cdZ -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYP -cgN -cgN -cgO -cgO -cgO -cgO -cgO -cgj -cgj -aZA -aZA -aZA -bbu -aZA -aZn -aZo -cgR -cgN -cgS +aXo +aXM +aXw +aYk +aXY +aXY +aXY +aXY +aXY +aXY +bAw +cNy +cNG +cNJ +cNJ +cOh +cOx +cOL +cNJ +cPe +bdL +aXL +aXw +aXw +aXN +bqa +bqa +bqa +bur +bur +bqa +bqa +bpZ +bAm +bkf +aXw +aXM +aXM +bER +bHP +bJr +bKs +bLF +cHr +bJr +bNe +bET +bGp +bHV +bTe +bTR +bUt +bUt +bTR +bWr +bTR +bXp +bTR +bUt +bUt +bZs +bZJ +bTP +aXM +caX +cbs +caX +caX +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXo +cdI +cdI +cdJ +cdJ +cdJ +cdJ +cdJ +cdf +cdf +aXZ +aXZ +aXZ +aZT +aXZ +aXM +aXN +cdM +cdI +cdN aaa aaa aaa -cgS -ctW -cuT -cvS -cuT -ctW -cxY -cyN -cXY -cYa -cYb -ctW -cCB -cjU -cjV -cjX -cgL -cjV -cjU -cgR -cgR -cgR -cgR +cdN +cqb +cqX +crV +cqX +cqb +ctZ +cuN +cLl +cLn +cLo +cqb +cyz +cgv +cgw +cgy +cdG +cgw +cgv +cdM +cdM +cdM +cdM aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -108005,45 +103298,45 @@ aaa aaa aaa abC -afV -ajo -ajo -ajo -afV +afH +aiW +aiW +aiW +afH acH acH acH acH -aez -aez -afV -afV -atR -atR -atR -axo -ayk -azM -atR -axo -aDm -axo -aFU -atR -aIp -aJx -aqk -aox -aox -aNA -afo -aot -aeV -afq -afq -aUW -afV -aez +aep +aep +afH +afH +atl +atl +atl +awH +axD +aze +atl +awH +aCD +awH +aFj +atl +aHA +aIG +apK +anY +anY +aMw +afa +anV +aeJ +afc +afc +aTA +afH +aep acH abE aaa @@ -108062,134 +103355,134 @@ aaa aaa aaa aaa -aYP -aYP -aYP -aZn -aZn -aZX -aZz -aZz -bbu -aZn -aZn -dcc -dcl -aZn -dcw -dcP -ddg -dcR -dea -dcw -dcs -bfr -beC -beC -aZm -aYX -aZm -aZn -bvg -bwD -dfR -bzx -aZn -aZn -dgu -blW -aYX -aZm -aZn -bHA -bKA -bKA -bKA -bKA -bKA -bKA -bKA -bHA -bIZ -bKF -bWd -bWO -bXt -bXt -bWO -bZr -bWO -car -bWO -cbz -cbz -cbz -cbz -bWO -aZn -cdZ -cev -cdZ -cdZ -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -cgR -cgR -cgN -cgN -cgO -cgO -cgO -cgO -cgj -aZn -aZn -aZn -aZA -aZA -bad -aZo -cgR -cgN -cgS +aXo +aXo +aXo +aXM +aXM +aYw +aXY +aXY +aZT +aXM +aXM +cNq +cNz +aXM +cNJ +cNT +cOi +cNV +cOM +cNJ +cNF +bdL +bcX +bcX +aXL +aXw +aXL +aXM +bsY +bus +cQd +bxf +aXM +aXM +cQs +bkf +aXw +aXL +aXM +bER +bHQ +bHQ +bHQ +bHQ +bHQ +bHQ +bHQ +bER +bGq +bHV +bTf +bTP +bUu +bUu +bTP +bWs +bTP +bXq +bTP +bYy +bYy +bYy +bYy +bTP +aXM +caX +cbt +caX +caX +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +cdM +cdM +cdI +cdI +cdJ +cdJ +cdJ +cdJ +cdf +aXM +aXM +aXM +aXZ +aXZ +aYC +aXN +cdM +cdI +cdN aaa aaa aaa -cgN -ctW -cuU -cvT -cwP -ctW -cxZ -cyO -czh -czZ -cAU -cYc -cCD -cDv -dmx -cEQ -cFb -cmA -cjV -cgu -cgR -cgR -cgR +cdI +cqb +cqY +crW +csS +cqb +cua +cuO +cvh +cvZ +cwU +cLp +cyB +czs +cTs +cAM +cAX +ciW +cgw +cdq +cdM +cdM +cdM aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -108262,45 +103555,45 @@ aaa aaa abW abW -afS -ajp -ako -ajr -afS +afE +aiX +ajV +aiZ +afE acH acH acH -aez -afS -akp -cYl -akp -cYt -auY -awi -axp -ayl -azN -aBb -aCc -aDn -aEy -aFV -aHr -cYK -aJy -afo -aju -afo -aNB -aOI -aSe -aRm +aep +afE +ajW +cLx +ajW +cLC aus -akq -akq -aqm -aez +avC +awI +axE +azf +aAt +aBu +aCE +aDO +aFk +aGF +cLJ +aIH +afa +ajc +afa +aMx +aNB +aQL +aPT +atM +ajX +ajX +apM +aep acH abW abE @@ -108308,6 +103601,7 @@ abE aaa aaa aaa +cGc aaa aaa aaa @@ -108316,138 +103610,137 @@ aaa aaa aaa aaa -aaa -aYP -aYT -aYT -aYT -aYT -aYT -aYX -aYX -dbT -dbU -aZm -aZm -aZm -dcd -dcm -aZm -dcw -dcQ -ddh -ddB -deb -dcw -deG -deS -dfe -dfe -bbf -dfe -dfe -bbf -bbf -bbf -dfe -dfe -dfe -dfe -dgA -blW -dgY -aYX -bHA -bHA -cMA -bKA -bKB -bKA -bKB -bKA -bKB -bHA -bUl -bVo -bWe -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bWO -bHA -bHA -cew -bHA -bHA -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -aYT -cgR -cgR -cgN -cgN -cgO -cgO -cgO -cgO -cgO -cgN -cgN -aZn -aZn -aZA -aZA -aZn -cgR -cgN -cgS +aXo +aXs +aXs +aXs +aXs +aXs +aXw +aXw +cNh +cNi +aXL +aXL +aXL +cNr +cNA +aXL +cNJ +cNU +cOj +cOy +cON +cNJ +cPf +cPq +cPz +cPz +aZE +cPz +cPz +aZE +aZE +aZE +cPz +cPz +cPz +cPz +cQt +bkf +cQF +aXw +bER +bER +cHn +bHQ +bHR +bHQ +bHR +bHQ +bHR +bER +bRo +bSr +bTg +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bTP +bER +bER +cbu +bER +bER +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +aXs +cdM +cdM +cdI +cdI +cdJ +cdJ +cdJ +cdJ +cdJ +cdI +cdI +aXM +aXM +aXZ +aXZ +aXM +cdM +cdI +cdN aaa aaa aaa -cgN -ctW -cuT -cvU -cuT -cxu -cya -cyP -czi -cAa -cAV -ctW -cCE -cgL -cgL -cxT -cFc -dmQ -cjU -cjV -cgR -cgR -cgN +cdI +cqb +cqX +crX +cqX +ctw +cub +cuP +cvi +cwa +cwV +cqb +cyC +cdG +cdG +ctU +cAY +cTH +cgv +cgw +cdM +cdM +cdI aaa aaa aaa -cjU -cIo -cjU +cgv +cEf +cgv aaa abC aaa @@ -108519,46 +103812,46 @@ aaa aaa abW abW -afV -ajq -akp -ala -afV +afH +aiY +ajW +akG +afH abW -aez -afV -cYj -afS -cYt -cYE -cYN -cYK -auZ -awj -axq -aym -azO -aBc -aCd -aDo -aEz -aFW -daa -aSe -aJz -afq -aLm -afV +aep +afH +cLv +afE +cLC +cLI +cLK +cLJ +aut +avD +awJ +axF +azg +aAu +aBv +aCF +aDP +aFl +cMr +aQL +aII +afc +afH +afH +aMy aNC -aOJ -aLm -aLn -aLn -aLn -akp -alo -afS -aez +afH +afE +afE +afE +ajW +akT +afE +aep abW abW abE @@ -108574,139 +103867,139 @@ aaa aaa aaa aaa -aYT -aYT -aYT -aYT -aZm -aZm -aYX -beC -aZz -dbV -aZm -bdM -dbZ -dce -dcn -beB -dcw -dcR -bhi -dcR -bjk -dcw +aXs +aXs +aXs +aXs +aXL +aXL +aXw +bcX +aXY +cNj +aXL +bcj +cNn +cNs +cNB +bcW +cNJ +cNV +bfz +cNV +bhz +cNJ +bjf +bkd bkT -blU -bmM -dft -bnT -bnT -bse -bnT -bvh -bwE -dft -dft -dft -dft -dft -bEe -aZz -bec -bHA -bIV -bIW -bIW -bNi -bKA -bPZ -bPZ -bPZ -bTn -bPZ -bVp -bWf -bWR -bXu -bYe -bYT -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bYT -bIW -ceM -bHA -aYT -aYT -aYT -aYT -aYT -aYP -aYP -aYP -aYT -cgR -cgR -cgN -cgN -cgN -cgN -cgN -cgN -cgN -cgN -cgN -aZn -aZA -aZA -aZA -aZn -cgR -cgN -cgS +cPM +blZ +blZ +bqb +blZ +bsZ +but +cPM +cPM +cPM +cPM +cPM +bBE +aXY +bcx +bER +bGm +bGn +bGn +bKt +bHQ +bNf +bNf +bNf +bQr +bNf +bSs +bTh +bTS +bUv +bVf +bVU +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bVU +bGn +cbK +bER +aXs +aXs +aXs +aXs +aXs +aXo +aXo +aXo +aXs +cdM +cdM +cdI +cdI +cdI +cdI +cdI +cdI +cdI +cdI +cdI +aXM +aXZ +aXZ +aXZ +aXM +cdM +cdI +cdN aaa aaa aaa -cgN -ctW -cuV -cvV -cwQ -cvV -cyb -cvW -cXZ -cAb -cAW -ctW -ckH -ckz -cjV -cgu -dmI -cjU -cFH -cjU -cgR -cgR -cgN -cgN -cgN -cgN -cjU -cIp -cjU -cIN -cjU +cdI +cqb +cqZ +crY +csT +crY +cuc +crZ +cLm +cwb +cwW +cqb +chh +cgZ +cgw +cdq +cTA +cgv +cBA +cgv +cdM +cdM +cdI +cdI +cdI +cdI +cgv +cEg +cgv +cEE +cgv aaa aaa aaa @@ -108776,46 +104069,46 @@ abW abW acH acH -afS -ajr -akp -akq -afS +afE +aiZ +ajW +ajX +afE acH -aez -cYn -aCr -cJx -cJA -arS -arS -arS -arS -arS -axr -arS -arS -arS -arS -arS -aEA -aFX -arS -aqG -anC -aUW -aLm -aMD +aep +cLz +aBJ +cFi +cFl +aro +aro +aro +aro +aro +awK +aro +aro +aro +aro +aro +aDQ +aFm +aro +aqg +anh +aTA +afH +aLD +aMz aND -aOK -aPH -aRn -aSh -aLm -akp -afV -aVo -afV +cLW +aPU +aQO +afH +ajW +afH +aTS +afH abW abW abE @@ -108829,143 +104122,143 @@ aaa aaa aaa aaa -aYP -aYP -aYP -aYP -aYP -aYP -aZm -dbR -ceG -beC -aZm -aZm -aZm -bdN -beC -dcf -bVi -dcu -dcw -dcS -bhj -biv -bjl -dcw +aXo +aXo +aXo +aXo +aXo +aXo +aXL +cNf +cbE +bcX +aXL +aXL +aXL +bck +bcX +cNt +bSl +cNH +cNJ +cNW +bfA +bgL +bhA +cNJ +bjg +bke bkU -blV -bmN -bau -aZX -bqE -aZm -aZm -dbV -aZm -bmO -bmO -bmO -bmO -bmO -bmO -aZz -bbE -bHB -bIW -bKC -bMf -bNj -bOy -bOy -bOy -bOy -bOy -bOy -bVq -bOA -bWS -bXv -bYf -bYT -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bYT -bYf -ceN -bHA aYT -aYT -aYT -aYT -aYT -aYP -bjB -aYP -aYP -cgN -cgN -cgS -cgN -cgS -cgN -cgN -cgN -cgR -cgR -aZo -aZn -aZA -cge -bec -aZn -aZo -cgN -cgN +aYw +boB +aXL +aXL +cNj +aXL +bkV +bkV +bkV +bkV +bkV +bkV +aXY +bad +bES +bGn +bHS +bJs +bKu +bLG +bLG +bLG +bLG +bLG +bLG +bSt +bLI +bTT +bUw +bVg +bVU +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bVU +bVg +cbL +bER +aXs +aXs +aXs +aXs +aXs +aXo +bhP +aXo +aXo +cdI +cdI +cdN +cdI +cdN +cdI +cdI +cdI +cdM +cdM +aXN +aXM +aXZ +cdb +bcx +aXM +aXN +cdI +cdI aaa aaa aaa -cgN -ctW -cXW -cvW -cXW -cvW -cvW -cvW -dma -cAc -cAX -ctW -cBR -cBR -cBR -cBR -dmJ -coJ -dmY -cjV -cgR -cgR -cgR -cgN -chc -chc -cjU -cIo -cjV -cIO -cjU -cJb -cJb +cdI +cqb +cLk +crZ +cLk +crZ +crZ +crZ +cTe +cwc +cwX +cqb +cxQ +cxQ +cxQ +cxQ +cTB +cle +cTI +cgw +cdM +cdM +cdM +cdI +cdU +cdU +cgv +cEf +cgw +cEF +cgv +cES +cES aaa aaa aaa @@ -109033,49 +104326,49 @@ acH acH acH acH -afV -ajs -aym -alb -afS -aez -afV -cYo -arS -cJy -cJB -arS -asM -atT -arS -awk -axs -ayn -azP -aBd -aCe -aDp -aEB -aFY -arS -afV -anC -aKF -aLn -aME -daW -daW -daZ -daW -daW -aLn -akp -akp -cYl -aez +afH +aja +axF +akH +afE +aep +afH +cLA +aro +cFj +cFm +aro +asi +atn +aro +avE +awL +axG +azh +aAv +aBw +aCG +aDR +aFn +aro +afH +anh +aJM +afE +aLE +axF +axF +cMU +cLY +cLW +afE +ajW +ajW +cLx +aep acH abW -akG +akm abC abC abC @@ -109090,139 +104383,139 @@ abC abC abC abD -aYP -aYP -aZm -dbS -beC -aYX -aZm -aZo -aZm -dbX -bVi -bfr -bVi -bhk -dcw -dcT -ddi -ddC -dec -dcw +aXo +aXo +aXL +cNg +bcX +aXw +aXL +aXN +aXL +cNl +bSl +bdL +bSl +bfB +cNJ +cNX +cOk +cOz +cOO +cNJ +bjh +bkf +aYa +aXM +aXM +aXM +aXM +aXM +aXM +aXM bkV -blW -aZB -aZn -aZn -aZn -aZn -aZn -aZn -aZn -bmO -bzy -bAB -bBy -bBz -bmO -bka -bbE -bHB -bIX -bKD -bMg -bNk -bOz -bQa -bQa -bQa -bQa -bQa -bVr -bWg -bMj -bXw -bYg -bYT -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bYT -bYg -ceO -bHA -aYT -aYT -aYT -aYP -aYP -bjB -bjB -aYP -aYP -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgR -cgR -aZo -bec -aZA -aZA -cfs -cge -aZn -cgR -cgR +bxg +byi +bze +bzf +bkV +bio +bad +bES +bGo +bHT +bJt +bKv +bLH +bNg +bNg +bNg +bNg +bNg +bSu +bTi +bJw +bUx +bVh +bVU +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bVU +bVh +cbM +bER +aXs +aXs +aXs +aXo +aXo +bhP +bhP +aXo +aXo +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdM +cdM +aXN +bcx +aXZ +aXZ +ccq +cdb +aXM +cdM +cdM aaa -crd +cno aaa -cgN -ctW -cuW -cvW -cwR -cxv -cyc -cvW -dma -cAd -cAY -ctW -cCF -cDw -cEf -cBR -dmK -cjU -dmZ -cjU -cgu -cgu -cgu -chc -chc -chc -cjV -cIq -cIC -cIP -cIC -cJc -cJb +cdI +cqb +cra +crZ +csU +ctx +cud +crZ +cTe +cwd +cwY +cqb +cyD +czt +cAc +cxQ +cTC +cgv +cTJ +cgv +cdq +cdq +cdq +cdU +cdU +cdU +cgw +cEh +cEt +cEG +cEt +cET +cES aaa aaa aaa @@ -109289,47 +104582,47 @@ acH acH acH acH -aez -afV -afV -afS -alc -afS -aez -akp -cYo -arS -cJz -cJC -cJD -asN -atU -ava -awl -cLV -ayo -azQ -aBe -azQ -aDq -aEC -aFZ -arS -afS -anC -aKG -aLn -aMF +aep +afH +afH +afE +akI +afE +aep +ajW +cLA +aro +cFk +cFn +cFo +asj +ato +auu +avF +cGW +axH +azi +aAw +azi +aCH +aDS +aFo +aro +afE +anh +aJN +afE +aLF +aMA aNE -aOL -aPI -aRo -daW -aLm -cZh -aUQ -afS -aez +aOu +aPV +cMR +afH +cLS +aTu +afE +aep acH abE abE @@ -109347,139 +104640,139 @@ aaa aaa aaa aaa -aYP -aYP -aZm -aYX -aYX -aYX -aZo -aZo -aZm -dbY -dca -dcg -bdP -dcv -dcw -bgt -bhl -bgt -ded -dcw +aXo +aXo +aXL +aXw +aXw +aXw +aXN +aXN +aXL +cNm +cNo +cNu +bcl +cNI +cNJ +beK +bfC +beK +cOP +cNJ +bjh +bkf bkV -blW -bmO -bmO -bpx -bmO -bmO -bmO -bmO -bmO -bmO -bzy -bzy -bBz -bBz -bmO -aZz -bGo -bHA -bIY -bKE -bMh -bNi -bOA -bQb -bQZ -bSb -bSb -bUm -bKA -bWh -bHA -bXx -bYg -bYT -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bYT -bYg -ceP -bHA -aYT -aYP -aYP -bjB -bjB -bjB -bjB -aYP -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgR -cgR -aZo -aZn -aZn -aZm -ceK -cno -aZm -cgR -cgR -cqo -cre -cqo -cgN -ctW -cuX -cvX -cuX -cxw -cyd -cyQ -czj -cAe -cAZ -ctW -cCG -cCJ -cCG -cBR -dmK -cjV -cjU -cjV -cjV -cgu -cjV -cjV -cjU -chb -cjV -cIr -cID -cIQ -cIC -cJd -cjU +bkV +bny +bkV +bkV +bkV +bkV +bkV +bkV +bxg +bxg +bzf +bzf +bkV +aXY +bDI +bER +bGp +bHU +bJu +bKt +bLI +bNh +bOe +bPf +bPf +bRp +bHQ +bTj +bER +bUy +bVh +bVU +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bVU +bVh +cbN +bER +aXs +aXo +aXo +bhP +bhP +bhP +bhP +aXo +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdM +cdM +aXN +aXM +aXM +aXL +cbI +cjK +aXL +cdM +cdM +cmC +cnp +cmC +cdI +cqb +crb +csa +crb +cty +cue +cuQ +cvj +cwe +cwZ +cqb +cyE +cyH +cyE +cxQ +cTC +cgw +cgv +cgw +cgw +cdq +cgw +cgw +cgv +cdT +cgw +cEi +cEu +cEH +cEt +cEU +cgv aaa aaa aaa @@ -109523,11 +104816,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -109546,49 +104839,49 @@ acH acH acH acH -afS -cJq -aqm -akq -ald -akq -akq -akp -cYo -arS -arS -arS -arS -asO -atU -ava -awm -cLV -cLV -azR -cLV -cLV -aDr -aED -aGa -arS -adZ -aJA -afV -aLm -aMG -aNF -aLm -aPJ -aRp -aLm -aLm -aTN -aTN -aLn -aLn -aLm -aLm +afE +cFb +apM +ajX +akJ +ajX +ajX +ajW +cLA +aro +aro +aro +aro +ask +ato +auu +avG +cGW +cGW +azj +cGW +cGW +aCI +aDT +aFp +aro +adP +aIJ +afH +afH +aLG +aEt +afH +cYZ +aPW +aKq +aKq +aSr +aSr +aKr +aKr +aKq +aKq abE abE aaa @@ -109607,136 +104900,136 @@ aaa aaa aaa aaa -aYP -aYT -aYT -aYT -aZY -aZY -bdQ -aZY -dch -bgu -bgu -dcw -dcU -ddj -dcW -dec -dcw +aXo +aXs +aXs +aXs +aYx +aYx +bcm +aYx +cNv +beL +beL +cNJ +cNY +cOl +cOa +cOO +cNJ +bjh +bkf bkV -blW -bmO -bnU -bpy -bqF -bsf -btA -bvi -bwF -byk -bzy -bzy -bBz -bBz -bmO -aZz -aZm -bHA -bIZ -bKF -bMh -bNi -bOB -bQb -bRa -bSc -bSd -bUn -bKA -bWi -bHA -bXy -bYg -bYT -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bZs -bYT -bYg -ceQ -bHA -aYP -aYP -aYP -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgR -cgR -cjg -cjg -cjg -cmI -cmI -cjg -cjg -cgN -cqo -crf -cqo -cgN -ctX -ctX -ctX -ctX -ctX -ctX -ctX -czk -cAe -cBa -ctW -cCH -cDx -cCH -cBR -dmL -cFu -cFI -dnb -cFu -cFu -dnb -cFu -cFI -cHJ -cHY -cIs -cIE -cIR -cIC -cIC -cjU +bma +bnz +boC +bqc +brx +bta +buu +bvV +bxg +bxg +bzf +bzf +bkV +aXY +aXL +bER +bGq +bHV +bJu +bKt +bLJ +bNh +bOf +bPg +bPh +bRq +bHQ +bTk +bER +bUz +bVh +bVU +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bWt +bVU +bVh +cbO +bER +aXo +aXo +aXo +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdM +cdM +cfI +cfI +cfI +cje +cje +cfI +cfI +cdI +cmC +cnq +cmC +cdI +cqc +cqc +cqc +cqc +cqc +cqc +cqc +cvk +cwe +cxa +cqb +cyF +czu +cyF +cxQ +cTD +cBo +cBB +cTL +cBo +cBo +cTL +cBo +cBB +cDA +cDP +cEj +cEv +cEI +cEt +cEt +cgv aaa aaa aaa @@ -109780,11 +105073,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -109803,197 +105096,197 @@ acH acH acH acH -avi -akq -afq -afq -afq -akq -akq -akq -aBC -aCr -apX -aoq -arS -asP -atV -arS -awn -axt -axt -axt -axt -axt -aDs -aEE -aGb -aHs -aHs -aHs -aHs -aHs -aHs -aHs -aHs -aPK -aRq -aSi -aLm -aTO -aTO -aUw -aMo -aMn -aLm +auC +ajX +afc +afc +afc +ajX +ajX +ajX +aAU +aBJ +apx +anT +aro +asl +atp +aro +avH +awM +awM +awM +awM +awM +aCJ +aDU +aFq +aGG +aGG +aGG +aGG +aGG +aGG +aGG +aGG +aOw +aPX +aQP +aKq +aSs +aSs +aTa +aLo +aLn +aKq abE abE abE -aXR -aXR -aXR +aWs +aWs +aWs aaa -aXR -aXR -aXR -aXR +aWs +aWs +aWs +aWs aaa -aXR -aXR -aXR -aXR -aXR -aXR -aYP -aYT -aYT -aYP -aZY -bbv -bbW -aZY -aZY -aZY -dcw -dcw -dcV -ddk -ddE -def -dcw -bkW -deT -bmO -bnV -bpz -bqG -bqG -bqG -bqG -bwG -bqI -bqI -bqI -bqI -bCI -bmO -aZz -bbV -bHC -bJa -bKG -bMh -bNi -bOA -bQb -bRa -bSd -bSd -bUn -bKA -bKA -bHC -bXz -bYg -bYT -bYT -bYT -bYT -cba -bYT -bYT -cba -bYT -bYT -bYT -bYT -bYg -bXz -bHA -aYP -aYP -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgR -cgR -cjg -clB -cmc -cmJ -cmd -cnZ -cjg -cgN -cqo -crg -cqo -cgN -cta -doU -cuY -cwS -cLE -cwS -ctX -czl -cAf -cBb -ctW -cCI -cDy -cEg -cBR -cFf -cDv -dna -cDv -cDv -dnh -dnh -dnh -cDv -cHK -cHZ -cIt -cIF -cIS -cll -cJe -cjU +aWs +aWs +aWs +aWs +aWs +aWs +aXo +aXs +aXs +aXo +aYx +aZU +bav +aYx +aYx +aYx +cNJ +cNJ +cNZ +cOm +cOA +cOQ +cNJ +bji +cPr +bkV +bmb +bnA +boD +boD +boD +boD +buv +boF +boF +boF +boF +bAn +bkV +aXY +bau +bET +bGr +bHW +bJu +bKt +bLI +bNh +bOf +bPh +bPh +bRq +bHQ +bHQ +bET +bUA +bVh +bVU +bVU +bVU +bVU +bXZ +bVU +bVU +bXZ +bVU +bVU +bVU +bVU +bVh +bUA +bER +aXo +aXo +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdM +cdM +cfI +chZ +ciy +cjf +ciz +ckv +cfI +cdI +cmC +cnr +cmC +cdI +cph +cUJ +crc +csV +cGK +csV +cqc +cvl +cwf +cxb +cqb +cyG +czv +cAd +cxQ +cBa +czs +cTK +czs +czs +cTQ +cTQ +cTQ +czs +cDB +cDQ +cEk +cEw +cEJ +chK +cEV +cgv aaa aaa aaa @@ -110037,11 +105330,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -110057,52 +105350,52 @@ acH acH acH acH -afr -afr -afr -afr -afr -alf -afr -alf -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -arS -arS -arS -arS -arS -arS -arS -aDt -aEF -aGc -aHs -aIq -aJB -aKH -aLw -aMH -aNG -aHs -aPL -aRr -aSj -aLm -aNp -aNp -aNp -aNp -aMp -aLm +afd +afd +afd +afd +afd +akL +afd +akL +afd +afd +afd +afd +afd +afd +afd +afd +afd +afd +aro +aro +aro +aro +aro +aro +aro +aCK +aDV +aFr +aGG +aHB +aIK +aJO +aKA +aLH +aMB +aGG +aOx +aPY +aQQ +aKq +aMl +aMl +aMl +aMl +aLp +aKq abE abE abE @@ -110121,136 +105414,136 @@ abC aaa aaa aaa -aYP -aYT -aYT -aYP -aZY -bbw -bbX -bbX -bbX -bbX -dcw -dcJ -dcW -ddi -dcW -deg -dcw +aXo +aXs +aXs +aXo +aYx +aZV +cZe +baw +baw +cZe +cNJ +cNN +cOa +cOk +cOa +cOR +cNJ +bjh +cPr bkV -deT -bmO -bnV -bpA -bqH -bqH -bqH -bvj -bwH -byl -bzz -bzz -bBA -bqI -bpx -aZz -bbg -bHA -bJb -bKF -bMi -bNi -bOA -bQb -bRb -bSe -bSe -bUo -bKA -bWi -bHA -bXz -bYg -bYU -bSf -bTo -bSf -bIW -cbA -ccc -bIW -bSf -bSf -bTo -bYU -bYg -bXz -bHA -aYP -bjB -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgN +bmb +bnB +boE +boE +boE +btb +buw +bvW +bxh +bxh +bzg +boF +bny +aXY +aZF +bER +bGs +bHV +bJv +bKt +bLI +bNh +bOg +bPi +bPi +bRr +bHQ +bTk +bER +bUA +bVh +bVV +bPj +bQs +bPj +bGn +bYz +bZb +bGn +bPj +bPj +bQs +bVV +bVh +bUA +bER +aXo +bhP +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdI +cfI +cia +ciz cjg -clC -cmd -cmK -cmd -cnZ -cjg -cjg -cqp -crh -cqp -cta -cta -cuZ -cvY -cwT -cvY -cwT -ctX -czm -cAg -cBc -ctW -cCJ -cDz -cEh -cBR -cFg -cxT -ckH -chb -cGu -cjV -cjU -chc -chb -cgL -cjV -cIc -cIG -cIT -cIC -cJf -cjU +ciz +ckv +cfI +cfI +cmD +cns +cmD +cph +cph +crd +csb +csW +csb +csW +cqc +cvm +cwg +cxc +cqb +cyH +czw +cAe +cxQ +cBb +ctU +chh +cdT +cCn +cgw +cgv +cdU +cdT +cdG +cgw +cDT +cEx +cEK +cEt +cEW +cgv aaa aaa aaa @@ -110294,11 +105587,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -110314,54 +105607,54 @@ acH acH acH acH -afr -agn -ahj -ahU -aiC -ajv -ahV -alg -alH -amm -anm -aoa -alH -apY -anm -arT -alH -atW -anm -awo -alH -ayp -anm -aBf -afr -aDu -aEG -aGd -aHt -aIr -aJC -aJC -aLx -aJC -aJC -aHs -aPM -aRs -aSk -aTl -aTP -aNp -aNp -aNp -aWg -aLm -aLm -aLm +afd +afZ +agV +ahG +ail +ajd +ahH +akM +alm +alR +amR +anD +alm +apy +amR +arp +alm +atq +amR +avI +alm +axI +amR +aAx +afd +aCL +aDW +aFs +aGH +aHC +aIL +aIL +aKB +aIL +aIL +aGG +aOy +aPZ +aQR +aRR +aSt +aMl +aMl +aMl +aUK +aKq +aKq +aKq aaa aaa abC @@ -110380,134 +105673,134 @@ aaa aaa aaa aaa -aZY -aZY -aZY -bbw -bbX -bbX -bdf -bdS -dcw -dcw -dcw -ddm -bgt -deh -dcw +aYx +aYx +aYx +cZd +cZe +cZe +bbC +bcn +cNJ +cNJ +cNJ +cOn +beK +cOS +cNJ +bjh +cPr bkV -deT -bmO -bnW -bpB -bqI -bqI -bqI -bqI -bqI -bqI -bqI -bqI -bBB -bqI -bmO -aZz -aZX -bHA -bJc -bKF -bMh -bNi -bOA -bQb -bIW -bSf -bTo -bUp -bKA -bWi -bHA -bXA -bYh -bMf -bMf -bMf -bMf -bMf -cbB -ccd -ccu -ccu -ccu -ccu -ccu -cex -ceR -bHA -bHA -bHA -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cjg -cjg -cjg -clD -cmd -cmd -cmd -cmd -cjg -cjg -cjg -cri -cjg -cta -ctY -cva -cvY -cwU -cvY -cye -cta -czn -cAh -cBd -cBQ -cCJ -cDA -cEi -cBR -cFd -cgL -cjU -cjV -chc -chc -chc -chc -cjV -cjV -cjV -cIu -cIG -cIU -cll -cJg -cJb +bmc +bnC +boF +boF +boF +boF +boF +boF +boF +boF +bzh +boF +bkV +aXY +aYw +bER +bGt +bHV +bJu +bKt +bLI +bNh +bGn +bPj +bQs +bRs +bHQ +bTk +bER +bUB +bVi +bJs +bJs +bJs +bJs +bJs +bYA +bZc +bZt +bZt +bZt +bZt +bZt +cbv +cbP +bER +bER +bER +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cfI +cfI +cfI +cib +ciz +ciz +ciz +ciz +cfI +cfI +cfI +cnt +cfI +cph +cqd +cre +csb +csX +csb +cuf +cph +cvn +cwh +cxd +cxP +cyH +czx +cAf +cxQ +cAZ +cdG +cgv +cgw +cdU +cdU +cdU +cdU +cgw +cgw +cgw +cEl +cEx +cEL +chK +cEX +cES aaa aaa aaa @@ -110551,11 +105844,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -110570,201 +105863,201 @@ acH acH acH acH -afr -afr -ago -ahk -ahV -aiD -ajw -akr -alh -alH -amn -ann -ann -alH -apZ -ann -ann -alH -atX -anv -ann -alH -ayq -ann -ann -afr -aDv -aEH -aGe -aHu -aIs -aJD -aKI -aIs -aIs -aNH -aHs -aPL -aRt -aSl -aLm -aTQ -aUR -aUR -aUR -aWp -aWG -aWU -aXj -aXB -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aYF -aZZ -bav +afd +afd +aga +agW +amS +aim +aje +ajg +akN +alm +alS +amS +amS +alm +apz +amS +amS +alm +atr +ana +amS +alm +axJ +amS +amS +afd +aCM +aDX +aFt +aGI +aHD +aIM +aJP +aHD +aHD +aMC +aGG +aOx +aQa +aQS +aKq +aSu +aTv +aTv +aTv +aUT +aVj +aVw +aVK +aWc +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aXg +aYy +aYU +aZw +aZW +bax baX -bbx -bbY -bcz -bcz -bcz -bcz -bfu -dcw -bhl -bgt -ded -dcw -bkX -blX -bmO -bnX -bpC -bqJ -bsg -btB -bvk -bwI -bym -bzA -bAC -bBB -bCJ -bmO -bFb -bGp -bHA -bJd -bKH -bMh -bNi -bOA -bQb -bIW -bSg -bTp -bUq -bIW -bWk -bHA -bXB -bYi -bYV -bZt -bYi -cas -cbb -cbC -cce -bMg -bMg -bMg -cdH -bMg -bMg -ceS +cZf +cZf +baX +bdM +cNJ +bfC +beK +cOP +cNJ +bjj +bkg +bkV +bmd +bnD +boG +bqd +bry +btc +bux +bvX +bxi +byj +bzh +bAo +bkV +bCA +bDJ +bER +bGu +bHX +bJu +bKt +bLI +bNh +bGn +bPk +bQt +bRt +bGn +bTl +bER +bUC +bVj +bVW +bWu +bVj +bXr +bYa +bYB +bZd +bJt +bJt +bJt +caF +bJt +bJt +cbQ +ccf +ccv +ccF +ccK +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN cfh -cfx cfH -cfM -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -ciC -cjf -cjE -ckm -ckM -clE -clE -clE -cnp -coa -cjg -cjg -cmd -cmd -csr -cta -ctY -cva -cvY -cvY -cvY -cyf -cta -czo -cAi -cyU -cBR -cBR -cBR -cBR -cBR -cFd -cgL -clr -cjU -cgu -chc -chc -chc -chc -chc -cjV -cjU -cjU -cIV -cjV -cJb -cJb +cgf +cgM +chl +cic +cic +cic +cjL +ckw +cfI +cfI +ciz +ciz +coz +cph +cqd +cre +csb +csb +csb +cug +cph +cvo +cwi +cuU +cxQ +cxQ +cxQ +cxQ +cxQ +cAZ +cdG +chQ +cgv +cdq +cdU +cdU +cdU +cdU +cdU +cgw +cgv +cgv +cEM +cgw +cES +cES aaa aaa aaa @@ -110808,11 +106101,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -110827,199 +106120,199 @@ acH acH acH acH -afr -afL -agp -ahl -ahW -aiE -ajx -ahV -ali -alH -amo -ann -aob -alH -amo -ann -aob -alH -amo -ann -aob -alH -amo -ann -aob -afr -aDv -aEI -aGf -aHv -aIt -aJE -aKJ -aLy -aMI -aNI -aHs -aPL -aRt -aSm -aLm -aLm -aLm -aLm -aPl -aLm -aLm -aLm -aLm -aXC -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aXS -aZM -aZY -aZY -aZY -aZY -aZY -bcA -aZY -aZY -aZY -bfv -dcw -ddn -ddG -dej -dcw -bkY -blY -bmO -bmO -bpD -bmO -bmO -btC -btC -btC -btC -bmO -bmO -bBC -bmO -cKS -bFc -bFc -bHA -bHA -bKI -bMj -bNl -bOC -bNl -bMj -bHA -bHA -bHA -bHA -bHA -bHC -bHA -bHA -bHA -bHA -bHA -bHA -bOC -cbD -ccf -bMj -bHA -bHA -bHA -cLh -bHA -bHA -bHA -bHA -bHA -cfN -cga -cga -cga -cga -cga -cga -cgT -cgT -cgT -cgT -cgT -cgT -cgT -ciD -cjg -cjg -cjg -ckN -cjg -cjg -cjg -cjg -cob -cjg -cjg -cjg -crj -cjg -cta -cta -cvb -cvZ -cwV -cxx -cyg -cta -czo -cAi -cBe -cBS -cCK -cDB -czG -chb -cFd -cxT -ckH -cjU -cjV -cgu -cgu -chc -chc -chc -cgN -cgS -cjU -cIW -cjU +afd +afx +agb +agX +ahI +ain +ajf +amS +akO +alm +alT +amS +anE +alm +alT +amS +anE +alm +alT +amS +anE +alm +alT +amS +anE +afd +aCM +aDY +aFu +aGJ +aHE +aIN +aJQ +aKC +aLI +aMD +aGG +aOx +aQa +aQT +aKq +aKq +aKq +aKq +aOc +aKq +aKq +aKq +aKq +aWd +aWt +aWt +cWV +aWt +aWt +aWt +cWV +aWt +aWt +cWV +aWt +aWt +aWt +cWV +aWt +aWt +aYl +aYx +aYx +aYx +aYx +aYx +baY +aYx +aYx +aYx +bdN +cNJ +cOo +cOB +cOT +cNJ +bjk +bkh +bkV +bkV +bnE +bkV +bkV +brz +brz +brz +brz +bkV +bkV +bzi +bkV +cGg +bCB +bCB +bER +bER +bHY +bJw +bKw +bLK +bKw +bJw +bER +bER +bER +bER +bER +bET +bER +bER +bER +bER +bER +bER +bLK +bYC +bZe +bJw +bER +bER +bER +cGt +bER +bER +bER +bER +bER +ccL +ccX +ccX +ccX +cYT +ccX +ccX +cYT +ccX +ccX +cYT +ccX +ccX +ccX +cfi +cfI +cfI +cfI +chm +cfI +cfI +cfI +cfI +ckx +cfI +cfI +cfI +cnu +cfI +cph +cph +crf +csc +csY +ctz +cuh +cph +cvo +cwi +cxe +cxR +cyI +czy +cvG +cdT +cAZ +ctU +chh +cgv +cgw +cdq +cdq +cdU +cdU +cdU +cdI +cdN +cgv +cEN +cgv aaa aaa aaa @@ -111065,11 +106358,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc aaa abC abE @@ -111084,197 +106377,197 @@ acH acH acH acH -afr -afr -afr -afr -ahX -aiF -ajy -aks -alj -alH -amp -ano -aoc -alH -amp -aqV -aoc -alH -amp -avb -aoc -alH -amp -azS -aoc -afr -cNw -aEI -aGg -aHs -aIu -aJF -aKK -aLz -aMJ -aNJ -aOM -aPL -aRt -aSn -aSU -aTR -aSU -aSU -aVJ -aSU -aVB -aSU -aSR -ary -ary -ary -ary -ary -ary -ary -ary -aYI -ary -ary -ary -ary -ary -ary -ary -ary -ary -baa -baw -baY -bby -bbZ -bcB -bcB -bdT -bcB -bfw -dcX -bhm -bcB -bKJ -bkd -bkZ -blZ -bby -bcB -bpE -bcB -bsh -btD -bcB -bcB -bcB -bzB -bAD -bBD -bcB -bcB -bcB -bcB -bHD -cMy -bKJ -bcB -bcB -bOD -bcB -bcB -bSh -btD -bsh -bdT -bWl -bcB -bcB -bby -bcB -bcB -bZV -bcB -cbc -cbE +afd +afd +afd +afd +ahJ +aio +ajg +ajY +akP +alm +alU +amT +anF +alm +alU +aqv +anF +alm +alU +auv +anF +alm +alU +azk +anF +afd +cHK +aDY +aFv +aGG +aHF +aIO +aJR +aKD +aLJ +aME +aNF +aOx +aQa +aQU +aRA +aSv +aRA +aRA +aUn +aRA +aUf +aRA +aRx +cWT +cWT +cWT +cWT +cWT +cWT +cWT +cXb +cWT +cWT +cXi +cWT +cWT +cWT +cWT +cWT +cWT +cWT +aYz +aYV +aZx +aZX +bay +baZ +baZ +bco +baZ +bdO +cOb +bfD +baZ +bHZ +biq +bjl +bki +aZX +baZ +bnF +baZ +bqe +brA +baZ +baZ +baZ +bxj +byk +bzj +baZ +baZ +baZ +baZ +bEU +cHl +bHZ +baZ +baZ +bLL +baZ +baZ +bPl +brA +bqe +bco +bTm +baZ +baZ +aZX +baZ +baZ +bWV +baZ +bYb +bYD +bZf +bZu +baZ +bco +byk +baZ +bqe +cbR ccg -ccv -bcB -bdT -bAD -bcB -bsh -ceT -cfi -cfy -baa -cfO -cfO -cfO -cfO -cgp -cfO -cfO -cgU -cgU -cgU -cgU -cgU -cgU -cgU -cgU -cjh -cjF -cjF -ckO -clF -cme -cme -cnq -coc -cme -cpw -cqq -cme -css -ctb -ctZ -cvc -cvc -cNs -cvc -cyh -cyR -czp -cAi -cyU -cyU -cyU -cDC -czG -ckH -cFh -cFv -cgL -cgL -cjU -cgu -cgu -chc -chc -chc -cgN -cgS -cgS +ccw +aYz +ccM +ccM +ccM +ccM +cdl +ccM +ccM +cdO +ccM +ccM +cdl +ccM +ccM +ccM +ccM +cfJ +cgg +cgg +chn +cid +ciA +ciA +cjM +cky +ciA +clN +cmE +ciA +coA +cpi +cqe +crg +crg +cHH +crg +cui +cuR +cvp +cwi +cuU +cuU +cuU +czz +cvG +chh +cBc +cBp +cdG +cdG +cgv +cdq +cdq +cdU +cdU +cdU +cdI +cdN +cdN aaa aaa aaa @@ -111342,196 +106635,196 @@ acH acH acH abW -afr -agq -ahm -ahY -aiG -ajz -cJt -akt -alI -amq -anp -aod -apk -aqa -anp -aod -asQ -aqa -anp -aod -axu -ayr -azT -aBg -afr -aDv -aEJ -aGh -aHs -aIv -aJG -aKK -aLA -aMK -aNK -aHs -aPL -cKd -aSo -aRD -aTS -aRD -aRD -aRD -aRD -aRD -aRD -aRP -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -bab -bax -baZ -bbz -bbz -bbz -bbz -bdU -bbz -bfx -bbz -bbz -biw -dek -bbz -bla -bma -bmP -bmP -bpF -bqK -bsi -btE -cKM -bax -bax -bax -bax -bax -bax -bax -bax -bGq -cMw -bax -bKK -bax -bax -bax -bQc -bax -bSi -bTq -bax -bHE -bax -bax -bax -bax -bax -bax -bax -bGq -bSi -bKK -cch -ccw -bax -bHE -bax -bax -bax -bTq -bax -bax -bab -cfP -cfP -cfP -cfP -cfP -cfP -cfP -cgV -cgV -cgV -cgV -cgV -cgV -cgV -cgV -cji -cjG -cjG -ckP -cjG -cjG -cjG -cnr -cjG -cjG -cjG -cjG -cjG -cLt -ctc -ctZ -cvc -cvc -cwX -cvc -cyi -cyR -czq -cAj -cyU -cBT -cCL -cDD -czG -cER -ckH -cFw -cFv -chb -cgu -cgu -cgu -cgu -cgu -chc -cgN -cgS -cgS +afd +agc +agY +anE +aip +ajh +cFe +ajZ +aln +alV +amU +anG +aoL +apA +amU +anG +asm +apA +amU +anG +awN +axK +azl +aAy +afd +aCM +aDZ +aFw +aGG +aHG +aIP +aJR +aKE +aLK +aMF +aGG +aOx +cFH +aQV +aQk +aSw +aQk +aQk +aQk +aQk +aQk +aQk +aQw +cWT +cWT +cWT +cWT +cWT +cWT +cWT +cWT +cYL +cWT +cXj +cWT +cWT +cWT +cWT +cWT +cWT +cWT +aYA +aYW +aZy +aZY +aZY +aZY +aZY +bcp +aZY +bdP +aZY +aZY +bgM +cOU +aZY +bjm +bkj +bkW +bkW +bnG +boH +bqf +brB +cGe +aYW +aYW +aYW +aYW +aYW +aYW +aYW +aYW +bDK +cHj +aYW +bIa +aYW +aYW +aYW +bNi +aYW +bPm +bQu +aYW +bEV +aYW +aYW +aYW +aYW +aYW +aYW +aYW +bDK +bPm +bIa +bZg +bZv +aYW +bEV +aYW +aYW +aYW +bQu +aYW +aYW +aYA +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +ccM +cfK +cgh +cgh +cho +cgh +cgh +cgh +cjN +cgh +cgh +cgh +cgh +cgh +cGC +cpj +cqe +crg +crg +cta +crg +cuj +cuR +cvq +cwj +cuU +cxS +cyJ +czA +cvG +cAN +chh +cBq +cBp +cdT +cdq +cdq +cdq +cdq +cdq +cdU +cdI +cdN +cdN aaa aaa aaa @@ -111591,204 +106884,204 @@ abE abW acH acH -abW -acO -acO -acO -acO -acO -acO -acO -acO -acO -afr -ahZ -aiH -ajA -aku -alk -alJ -amr -anq -aoe -ajF -ajF -ajF -arU -ajF -ajF -ajF -aoe -axv -ays -azU -aBh -aBj -aDv -aEI -aGi -aHw -aHx -aHx -aHx -aHx -aHx -aHx -aHx -aPL -aRt -aSp -aSN -aTT -aSN -aSN -aVK -aSN -aSN -aSN -aSP -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -bac -bay -bba -bbA -bbA -bbA -bbA -bdV -beE -bfy -bbA -bbA -bix -bix -bbA -blb -bmb -bmQ -bnY -bpG -bqL -bsj -btF -bvl -bwJ -byn -bvl -bvl -bvl -bvl -bvl -bvl -bGr -cMx -bvl -bGr -bvl -bvl -bvl -bvl -byn -bSj -bmQ -bUr -bHF -bvl -bvl -bvl -bvl -bvl -bvl -bnY -cat -cbd -cbF -cci -ccx -ccL +acN +acN +acN +acN +acN +acN +acN +acN +acN +acN +afd +ahK +aiq +aji +aka +akQ +alo +alW +amV +anH +ajm +ajm +ajm +arq +ajm +ajm +ajm +anH +awO +axL +azm +aAz +aAB +aCM +aDY +aFx +aGK +aGL +aGL +aGL +aGL +aGL +aGL +aGL +aOx +aQa +aQW +aRu +aSx +aRu +aRu +aUo +aRu +aRu +aRu +aRw +cWT +cWT +cWT +cWW +cWT +cWT +cWT +cXc +cWT +cWT +cXk +cXl +cXl +cXl +cXm +cXl +cXl +cXl +aYB +cXo +aZz +aZZ +aZZ +aZZ +aZZ +bcq +bcZ +bdQ +aZZ +aZZ +bgN +bgN +aZZ +bjn +bkk +bkX +bme +bnH +boI +bqg +brC +btd +buy +bvY +btd +btd +btd +btd +btd +btd +bDL +cHk +btd +bDL +btd +btd +btd +btd +bvY +bPn +bkX +bRu +bEW +btd +btd +btd +btd +btd +btd +bme +bXs +bYc +bYE +bZh +bZw +bZK +cao +caG +aYX +aYX +cbS +aYX +cKd +cKf +ccN +ccN +ccN +ccN +cYU +cYW +cYW +cdP +cYW +cYW +cYW +cYW +cYW +cYW +cYW +cfL +cKg +cgN +cgi +cie +cgi +cjh +cjO +ckz +clk +clk +clk +cnv +coB +cpk +cph +crh +csd +ctb +ctA +cuk +cuS +cvr +cwk +cxf +cTk +cTk +cTk +cTt +cTk +cTk +cTk +cAZ +ctU +cgw +cdU cdq +cdq +cdq +cdU cdI -bay -bay -ceU -bay -cTV -cTX -cfQ -cfQ -cfQ -cfQ -cfQ -cfQ -cfQ -cgW -chd -chd -cho -chd -chd -chd -chd -cjj -cTY -ckn -cjH -clG -cjH -cmL -cns -cod -coR -coR -coR -crk -cst -ctd -cta -cvd -cwa -cwY -cxy -cyj -cyS -czr -cAk -cBf -dmm -dmm -dmm -dmy -dmm -dmm -dmm -cFd -cxT -cjV -chc -cgu -cgu -cgu -chc -cgN -cgN -cgS +cdI +cdN aaa aaa aaa @@ -111848,211 +107141,211 @@ abE abW acH acH -abW -acO -acO -acO -acO -acO -acO -acO -acO -doW -acO -acO -afr -afr -afr -afr -alf -ams -anr -aof -apl -aof -aof -aof -aof -aof -apl -aof -axw -ayt -aof -aof -aCf -aDw -aEK -aGj -aHx -aIw -aJH -aKL -aLB -aJI -aNL -aON -aPL -aRt -aSl -aTm -aTm -aTm -aTm -cKf -aTm -aLm -aLm -aLm -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aXD -aZY -baz -bbb -bbB -bbB -bbB -cKn -bbB -bbB -bbB -bbB -bbB -bbB -bbB -bbB -blc -bmc -bmR -blc -bbB -bqM -bsk -btG -bBK -bvs -bvs -bvs -bvs -cTv -cTv -cTv -cTv -cTD -bvs +acN +acN +acN +acN +acN +acN +acN +acN +acN +cUL +acN +acN +afd +afd +afd +afd +akL +alX +amW +anI +aoM +anI +anI +anI +anI +anI +aoM +anI +awP +axM +anI +anI +aBx +aCN +aEa +aFy +aGL +aHH +aIQ +aJS +aKF +aIR +aMG +aNG +aOx +aQa +aQS +aRS +aRS +aRS +aRS +cFJ +aRS +aKq +aKq +aKq +aWe +aWe +aWe +cWX +aWe +aWe +aWe +cWX +aWe +aWe +cWX +aWe +aWe +aWe +cWX +aWe +aWe +aWe +aYx +aYY +aZA +baa +baa +baa +cFQ +baa +baa +baa +baa +baa +baa +baa +baa +bjo +bkl +bkY +bjo +baa +boJ +bqh +brD +bzq +btk +btk +btk +ddI +cJW +btk +btk +btk +cJZ +btk +cKa +cKa +cKa +cKa +cKa +cKa +cKa +bPo +bQv +bRv +cKa +cKa +cKa +bUD +cKb +cGs +bWb +bWW +bXt +bYd +bYF +bWb +cKc +bZL +cKb +caH +cKb +cKb +cKb +cKb +cKe +aYx +ccO +ccY +ccY +ccY +cYV +ccY +ccY +cYV +ccY +ccY +cYV +ccY +ccY +ccY +cfj +cfI +cfI +cKh +cKi +cKi +cKj +cKi +cKi +ckA +cKi +cKi +cKp +cnw +cgh +cpl +cqf +cri +crg +csZ +ctB +cul +cuR +cvq +cwj +cxg +cxU +cyK +cTn +cTl +cTw cTE -cTE -cTE -cTE -cTE -cTE -cTE -bSk -bTr -bUs -cTE -cTE -cTE -bXC -cTO -cLg -bZa -bZW -cau -cbe -cbG -bZa -cTP -ccM -cTO -cdJ -cTO -cTO -cTO -cTO -cTW -aZY -cfR -cgb -cgb -cgb -cgb -cgb -cgb -cgX -cgX -cgX -cgX -cgX -cgX -cgX -ciE -cjg -cjg -cTZ -cUa -cUa -cUc -cUa -cUa -coe -cUa -cUa -cUm -crl -cjG -cte -cua -cve -cvc -cwW -cxz -cyk -cyR -czq -cAj -cBg -cBV -cCM -dms -dmp -dmD -dmN -dmm -cFd -cCC -cjU -cjU -cjV -cgu -cgu -chc -cgN -cgS -cgS +cTk +cAZ +cyA +cgv +cgv +cgw +cdq +cdq +cdU +cdI +cdN +cdN aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -112105,59 +107398,59 @@ abE abW acH acH -abW -acO -acO -adF -aea -aeB -aeB -aeB -aeB -agr -doX -doZ -aiI -akw -akv -ajB -afr -amt -anr -aof -aog -aog -aqW -arV -asR -aog -aog -aof -axx -ayt -aof -aof -aBm -aDv -aEI -aGj -aHx -aIx -aJI -aJI -aJI -aJI -aNM -aOO -aPL -aRt -aSq -aTn -aTU -aUS -aVp -aVL -aWq +acN +acN +ady +adQ +aeq +aeq +aeq +aeq +aeq +agd +cUM +cUN +air +akc +akb +ajj +afd +alY +amW +anI +anJ +anJ +aqw +arr +asn +anJ +anJ +anI +awQ +axM +anI +anI +aAE +aCM +aDY +aFy +aGL +aHI +aIR +aIR +aIR +aIR +aMH +aNH +aOx +aQa +aQX +aRT +aSy +aTw +aTT +aUp +aUU abE abE aaa @@ -112178,138 +107471,138 @@ aaa aaa aaa aaa -aYP -aZn -aZy -bbc -bbB -bca -bcC -bdg -bbB -beF -bfz -bcD -bhn -biy -bjm -bke -bjp -bmd -bmS -bnZ -blc -bqN -bsl -btH -cTa -bvn -byo -bvm -bAE -bBE -bBE -bBE -bBE -bGs -bvm -bJf -bKL -bMk -bJe -bOE -bQd -bRc -bSl -bTs -bUt -bVs -bVs -bJe -bXD -bYj -bYm -bZu -bZX -bZD -cbf -cbH -ccj -ccy -ccN -aZY -cdK -ceb -ceb -ceb -cfj -cfz -cfj -cfS -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -ciF -cjk -cjk -cko -ckQ -clH -cmf -cmM -cnt -cof -cjg -cgN -cUn -crm -cjG -ctf -cub -cvf -cwb -cwZ -cvc -cyl -cta -czs -cAl -cBh -cBW -cCN -dmt -dmA -dmE -cFi -dmm -cFJ -dnc -coJ -clV -cjV -chc -chc -chc -cgN -cgN -cgS +aXo +aXM +aXX +aZB +baa +baz +bba +bbD +baa +bda +bdR +bbb +bfE +bgO +bhB +bir +bhE +bkm +bkZ +bmf +bjo +boK +bqi +brE +cJJ +btf +bvZ +bwe +byl +bwc +bte +bzk +dew +bDM +bte +bGw +bIb +bJx +bGv +bLM +bNj +bOh +bPp +bQw +bRw +bSv +bSv +bGv +bUE +bVk +bVn +bWv +bWX +bWD +bYe +bYG +bZi +bZx +bZM +aYx +caI +caZ +caZ +caZ +cch +ccx +cch +ccP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cfk +cfM +cfM +cgO +chp +cif +ciB +cji +cjP +ckB +cfI +cdI +cKq +cnx +cgh +cpm +cqg +crj +cse +ctc +crg +cum +cph +cvs +cwl +cxh +cxV +cyL +cTo +cTu +cTx +cBd +cTk +cBC +cTM +cle +cit +cgw +cdU +cdU +cdU +cdI +cdI +cdN aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -112362,59 +107655,59 @@ abW abW abW abW -abW -acO -acO -adG -aeb -aeC -aeY -afs -afM -ags -doX -dpa -aiJ -akw -akw -ajB -afr -ams -anr -cJu -aog -aqb -aqX -arW -asS -atY -aog -cJv -axw -ayt -cZr -aBi -afr -aDu -aEL -aGk -aHy -aIy -aJJ -aJJ -aLC -aMM -aNN -aOP -aPL -aRu -aSr -aTo -aTV -aUT -aVq -aVM -aWq +acN +acN +cWm +adS +adR +aer +aeK +afe +afy +age +cUM +cUO +ais +akc +akc +ajj +afd +alX +amW +cFf +anJ +apB +aqx +ars +aso +ats +anJ +cFg +awP +axM +cLV +aAA +afd +aCL +aEb +aFz +aGM +aHJ +aIS +aIS +aKG +aLL +aMI +aNI +aOx +aQb +aQY +aRU +aSz +aTx +aTU +aUq +aUU abE aaa aaa @@ -112435,138 +107728,138 @@ aaa aaa aaa aaa -aYP -aZn -aZA -baB -bbB -bcb -bcD -bdh -bbB -beG -bfA -bgv -bho -biz -bjn -bkf -bld -bme -bmT -boa -bpH -bqO -bsm -btI -cTb -bvo -bvo -bzC -bAF -bBF -cMt -bBF -bFd -bGt -bvm -bJg -bKM -bMl -bNm -bKO -bKO -bRd -bSl -bTs -bUu -bVt -bWm -bJe -bJe -bJe -bYm -bZv -bZY -bZD -cbf -cbI -cck -ccy -bYm -aZY -bbX -bbX -bbX -ceV -aZY -aZY -aZY -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cjg -cjg -cjg -cmg -cmN -cnu -cog -cjg -cgN -cUn -crn -cjG -ctf -cta -cvg -cwc -cxa -cxB -cym -cyT -czt -cAm -cBi -cBX -dmp -dmu -cEj -dmF -cFj -dmm -chc -dmK -cjU -cjV -cjV -cjU -chc -cjV -chc -cgN -cgN +aXo +aXM +aXZ +aZa +baa +baA +bbb +bbE +baa +bdb +bdS +beM +bfF +bgP +bhC +bis +bjp +bkn +bla +bmg +bnI +boL +bqj +brF +cJK +btg +btg +bxk +bym +bzl +bte +dem +bwf +bDN +bte +bGx +bIc +bJy +bKx +bIe +bIe +bOi +bPp +bQw +bRx +bSw +bTn +bGv +bGv +bGv +bVn +bWw +bWY +bWD +bYe +bYH +bZj +bZx +bVn +aYx +baw +baw +baw +cbT +aYx +aYx +aYx +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cfI +cfI +cfI +ciC +cjj +cjQ +ckC +cfI +cdI +cKq +cny +cgh +cpm +cph +crk +csf +ctd +ctC +cun +cuT +cvt +cwm +cxi +cxW +cTl +cTp +cAg +cTy +cBe +cTk +cdU +cTC +cgv +cgw +cgw +cgv +cdU +cgw +cdU +cdI +cdI aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -112610,7 +107903,7 @@ aaa aaa aaa aaa -aaa +cGc aaa aaa abE @@ -112619,59 +107912,59 @@ abW abW abW abW -abW -acO -acO -adH -aec -aeD -aeD -aeD -aeD -agt -acO -acO -afr -ajD -akx -akx -akx -amu -anr -aoh -apm -apo -asT -arX -cLR -atZ -avc -aoh -axw -ayt -afr -aBj -afr -aDv -aEM -aGl -aHz -aIz -aJK -aKM -aLD -cMj -aNO -aHx -aPN -aRv -aSs -aTp -aTW +acN +acN +cWn +adS +aes +aes +aes +aes +aes +agf +acN +acN +afd +ajk +akd +akd +akd +alZ +amW +anK +aoN +aoP +asp +art +cGS +att +auw +anK +awP +axM +afd +aAB +afd +aCM +aEc +aFA +aGN +aHK +aIT +aJT +aKH +cGZ +aMJ +aGL +aOz +aQc +aQZ +aRV +aSA +aTy +aTV +aUr aUU -aVr -aVN -aWq abE aaa aaa @@ -112691,139 +107984,139 @@ aaa aaa aaa aaa -aYP -aYT -aZn -aZz -bbd -bbB -bcc -bcE -bdi -bdW -beH -bfB -bgw -bhp -biA -bjo -bkg -ble -bmf -bmU -bob -bpI -bqP -bsn -btJ -cTc -bvp -bvp -bzD -bvp -bvp -bCK -bEf -bFe -bGu -bvm -bJh -bKN -bMm -bJe -bKO -bQe -bMn -bSl -bTs -bUu -bVt -bVt -bWT -bXE -bYk -bYm -bYX -bYX -bZD -cbf -cbJ -bYX -ccz -ccO -aZY -bbX -bbX -bbX -bbw -aZY -aYP -bjB -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgN -cgN -cjg -cmh -cmO -cnv -coh -cjg -cgN -cUn -cro -csu -ctg -cta -cvh -cwd -cxb -cxC -cyn -cta -czu -cAn -cBj -cBY -dnL -cCP -dmB -cES -cFk -dmm -chc -cFd -cll -cll -cll -cll -cll -dnu -chc -cgN -cgN +aXo +aXs +aXM +aXY +aZC +baa +baB +bbc +bbF +bcr +bdc +bdT +beN +bfG +bgQ +bhD +bit +bjq +bko +blb +bmh +bnJ +boM +bqk +brG +cJL +bth +bth +bxl +ddJ +ddX +bte +bBF +cHi +bDU +bte +bGy +bId +bJz +bGv +cZi +bNk +bJA +bPp +bQw +bRx +bSw +bSw +bTU +bUF +bVl +bVn +bVY +bVY +bWD +bYe +bYI +bVY +bZy +bZN +aYx +baw +baw +baw +aZV +aYx +aXo +bhP +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdI +cdI +cfI +ciD +cjk +cjR +ckD +cfI +cdI +cKq +cnz +coC +cpn +cph +crl +csg +cte +ctD +cuo +cph +cvu +cwn +cxj +cxX +cUk +cyN +cTv +cAO +cBf +cTk +cdU +cAZ +chK +chK +chK +chK +chK +cTX +cdU +cdI +cdI aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -112867,7 +108160,7 @@ aaa aaa aaa aaa -aaa +cGc aaa aaa abE @@ -112876,59 +108169,59 @@ abE abW abW abW -abW -acO -acO -adI -aed -aeE -aeZ -aft -afN -agu -aho -aic -aiK -ajE -aky -aky -aky -amv -ans -aoi -apn -aqc -aqZ -arY -aqc -aua -avd -awp -axy -ayu -azV -aBk -azV -aDx -aEN -aGm -aHA -aIA -aJL -aKN -aLE -aMN -aNP -aHx -aPO -aRw -aSl -aTm -aTm -aTm -aVs -aTm -aTm +acN +acN +adz +cWo +adT +aet +aeL +aff +afz +agg +aha +ahN +ait +ajl +ake +ake +ake +ama +amX +anL +aoO +apC +aqy +aru +apC +atu +aux +avJ +awR +axN +azn +aAC +azn +aCO +aEd +aFB +aGO +aHL +aIU +aJU +aKI +aLM +aMK +aGL +aOA +aQd +aQS +aRS +aRS +aRS +aTW +aRS +aRS abE abC abC @@ -112946,141 +108239,141 @@ abC abC abC abC -aZc -aYP -aYP -aZn -aZm -baA -bbe -bbC -bcd -bcF -bdj -bbB -beI -bfC -bgx -bhq -biB -bjp -bkh -blf -bmg -bmV -bjp +aXB +aXo +aXo +aXM +aXL +aYZ +aZD +bab +baC +bbd +bbG +baa +bdd +bdU +beO +bfH +bgR +bhE +biu +bjr +bkp blc -bqQ -bax -btK -cTd -bvq -bvq -bvm -bAG -bBG -bCL -bBG -bFf +bhE +bjo +boN +aYW +brI +bzr +bti +ddt +bte +byn +bzm +bte +bBF +bCC +bDO +bte bGv -bvm -bJe -bJe -bJe -bJe -bOF -bKO -bRe -bSl -bTs -bUv -bVu -bVu -bJe -bXF -bYl -bYm -bZw -bZX -bZD -cbf -cbK -bZX -ccy -ccP -aZY -cdL -cec -cec -bbw -aZY -aYP -bjB -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgN -cgN -cjg -cjg -cjg -cjg -cjg -cjg -cgN -cUn -crp -cjG -cth -cLw -cvi -cwe -cvY -cxD -cyo -cta -czv -cAj -cBk -dmm -dmq -cDF -cEk -dmG -dmO -dmm -chc -dnd -dnf -dnf -cGv -cHi -dns -cHM -cjV -cgN -cgN +bGv +bGv +bGv +bLN +bIe +bOj +bPp +bQw +bRy +bSx +bSx +bGv +bUG +bVm +bVn +bWx +bWX +bWD +bYe +bYJ +bWX +bZx +bZO +aYx +caJ +cba +cba +aZV +aYx +aXo +bhP +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdI +cdI +cfI +cfI +cfI +cfI +cfI +cfI +cdI +cKq +cnA +cgh +cpo +cGF +crm +csh +csb +ctE +cup +cph +cvv +cwj +cxk +cTk +cTm +czC +cAh +cTz +cTF +cTk +cdU +cTN +cTO +cTO +cCo +cCZ +cTV +cDD +cgw +cdI +cdI aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aab @@ -113124,7 +108417,7 @@ aaa aaa aaa aaa -aaa +cGc aaa aaa abE @@ -113133,54 +108426,54 @@ abE abW abW abW -abW -acO -acO -adJ -aee -aeF -afa -afu -afO -agv -ahp -aid -aiL -ajF -ajF -ajF -ajF -amw -ans -aoj -apo -aqd -ara -arZ -ara -ara -ara -awq -axz -ayv -azW -aBl -azW -aDy -aEO -aGj -cJP -aHx -aHx -aHx -aHx -aHx -aHx -aHx -aPP -aRt -aSl -aLm +acN +acN +adA +adU +aeu +aes +aeM +afg +afA +agh +ahb +ahO +aiu +ajm +ajm +ajm +ajm +amb +amX +anM +aoP +apD +aqz +arv +aqz +aqz +aqz +avK +awS +axO +azo +aAD +azo +aCP +aEe +aFy +cFw +aGL +aGL +aGL +aGL +aGL +aGL +aGL +aOB +aQa +aQS +aKq abW abW abW @@ -113203,141 +108496,141 @@ aaa aaa aaa aaa -aYP -aYT -aYT -aZn -bad -baB -aZn -bbB -bce -bcG -bdk -bbB -beJ -bcD -bgx -bhq -biB -bjp -bki -blg -bmh -bmS -boc -bpJ -bqR -bax -btL -bBL -bwK -byp -bvm -bAH -bBG -bCM -bBG -bFf -bGw -bBK -bJi -bKO -bKO -bKO -bKO -bQf -bRf -bSl -bTs -bUu -bVt -bWm -bJe -bJe -bJe -bYm -bZx -bZY -bZD -cbf -cbI -bZY -ccA -ccQ -aZY -aZY -aZY -aZY -aZY -aZY -aYP -aYP -bjB -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgN -cgN -cgR -cgR -cgR -cgR -cgN -cgN -cgN -cgN -cUr -crl -cjG -cti -cta -cvj -cwf -cxc -cxE -cyp -cta -czw -cAo -cBl -cWl -cWn -cWn -cWn -cWq -dmP -dmm -chc -chc -chc -cjX -cjV -cjV -dmK -cIc -cjV -chc -cgN +aXo +aXs +aXs +aXM +aYC +aZa +aXM +baa +baD +bbe +bbH +baa +bde +bbb +beO +bfH +bgR +bhE +biv +bjs +bkq +bkZ +bmi +bnK +boO +aYW +brH +bzr +buz +bwa +ddA +byo +ddY +bte +den +dex +bte +bzq +bGz +bIe +bIe +bIe +bIe +bNl +bOk +bPp +bQw +bRx +bSw +bTn +bGv +bGv +bGv +bVn +bWy +bWY +bWD +bYe +bYH +bWY +bZz +bZP +aYx +aYx +aYx +aYx +aYx +aYx +aXo +aXo +bhP +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdI +cdI +cdM +cdM +cdM +cdM +cdI +cdI +cdI +cdI +cKr +cnw +cgh +cpp +cph +crn +csi +ctf +ctF +cuq +cph +cvw +cwo +cxl +cKL +cKN +cKN +cKN +cKO +cTG +cTk +cdU +cdU +cdU +cgy +cgw +cgw +cTC +cDT +cgw +cdU +cdI aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aad aad @@ -113381,7 +108674,7 @@ aaa aaa aaa aaa -aaa +cGc aaa aaa abE @@ -113390,54 +108683,54 @@ abE abW abW abW -abW -acO -acO -adK -aef -aef -afb -aee -afP -agw -acO -acO -afr -ajG -akz -akz -akz -amx -anr -aok -app -aqe -cLQ -arX -arb -apo -ave -awr -axA -ayw -afr -aBm -afr -aDz -aEI -aGf -cNC -aIB -cNJ -cNP -cNV -cJT -cJX -cKa -cKb -aRt -aSl -aLm +acN +acN +adB +adV +adV +adU +aeN +adU +afB +agi +acN +acN +afd +ajn +akf +akf +akf +amc +amW +anN +aoQ +apE +cGR +art +aqA +aoP +auy +avL +awT +axP +afd +aAE +afd +aCQ +aDY +aFu +cHO +aHM +cHV +cHY +cIe +cFy +cFC +cFE +cFF +aQa +aQS +aKq abW abW abW @@ -113460,134 +108753,134 @@ aaa aaa aaa aaa -aYP -aYT -aYT -aZn -aZA -baB -aZn -bbB -bcf -bcG -bcD -bbB -beK -bcF -bgx -bhq -biB -bjp -bkj -bjp -bmi -bmS -bjp -bbB -bqS -bax -btM -bBL -bwL -byq -bzE -bAI -byr -bCN -bAI -bFg -doS -bBL -bJj -bKP -bMn -bMn -bMn -bQg -bQg -bSl -bTs -bUu -bVt -bVt -bWT -bXE -cMG -bYm +aXo +aXs +aXs +aXM +aXZ +aZa +aXM +baa +baE +bbe +bbb +baa +bdf +bbd +beO +bfH +bgR +bhE +biw +bhE +bkr +bkZ +bhE +baa +boP +aYW +brI +bzr +buA +bwb +bxm +ddK +ddZ +bAp +deo +bCD +deD +bzr +bGA +bIf +bJA +bJA +bJA +bNm +bNm +bPp +bQw +bRx +bSw +bSw +bTU +bUF +cHt +bVn +bWA +cHv +bWD +bYe +bYK +cHv bZA -cML -bZD -cbf -cbL -cML -ccB -ccR -cdr -cdr -cdr -cdr -cdr -cdr -cdr -aYP -aYP -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgS -cgN -cgN -cgN -cgR -cgR -cgR -cgR -cgN -cgN -cgN -cgN +bZQ +cap +cap +cap +cap +cap +cap +cap +aXo +aXo +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdN +cdI +cdI +cdI +cdM +cdM +cdM +cdM +cdI +cdI +cdI +cdI +cKh +cKt +cKu +cpq +cKC +cKJ +cKJ +cKJ +cKJ +cur +cKJ +cvx +cwp +cKK +cKM +cyP +czD +cAi +cKP +cAP +cAP +cAP +cAP +cAP +cAP +cAP +cAP +cTC +chK cTZ -cUu -cUw -ctj -cVw -cWf -cWf -cWf -cWf -cyq -cWf -czx -cAp -cWk -cWm -cCR -cDG -cEl -cWr -cET -cET -cET -cET -cET -cET -cET -cET -dmK -cll -dnw -chc -cgN +cdU +cdI aaa aaa aaa @@ -113647,54 +108940,54 @@ abE abW abW abW -abW -acO -acO -adL -aef -aef -aef -aef -afQ -adM -ahn -aib -aiM -ajH -akw -akw -afr -amy -anr -cJv -aog -aqf -arc -arX -asU -aub -aog -cJu -axw -ayt -cZr -aBi -afr -aDv -cNx -aGn -cND -aIC -cNK -cNQ -cNQ -cJU -cNQ -cOm -cKc -aRt -aSl -aLm +acN +acN +adC +adV +adV +adV +adV +adV +afC +adC +agZ +ahM +aiv +ajo +akc +akc +afd +amd +amW +cFg +anJ +apF +aqB +art +asq +atv +anJ +cFf +awP +axM +cLV +aAA +afd +aCM +cHL +aFC +cHP +aHN +cHW +cHZ +cHZ +cFz +cHZ +cIu +cFG +aQa +aQS +aKq abW acH acH @@ -113717,134 +109010,134 @@ aaa aaa aaa aaa -aYP -aYT -aYT -aZn -aZA -baC +aXo +aXs +aXs +aXM +aXZ +aZb +aZE +bac +baF bbf -bbD -bcg -bcH -bdl -bdX -beL -bfE -bbB -bhr -biC -bjq -bkk -bjq +bbI +bcs +bdg +bdV +baa +bfI +bgS +bhF +bix +bhF +bks +bld bmj -bmW -bod -bpK -bqT -bso -btM -bvr -bwM -byr -byr -bwM -byr -bCO -bwM -bFg -byr -bBL -bJk -bKO -bMo -bNn -bNn -bNn -bNn -bSm -bTt -bUw -bVv -bVv -bJe -bXF -bYl -bYm -bZz -bZZ -cav -cbg -cbM -ccl -ccC -ccS -cds -cdM -ced -ccW -ceW -cfk -cdr -aYP -aYP -bjB -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -crl -cjG -ctk -cVx -cvk -cwg -cxd -cuc -cyr -cwg -czy -cAq -cwh -cCa -cCS -cDH -cEm -cWs -cET -cFl -cFl -cFZ -cFl -cFl -cGV -cET -dmK -cll -cHM -chc -cgN +bnL +boQ +bql +brI +bzr +ddn +bwc +ddB +ddL +dea +bAq +dep +dey +deE +bzr +bGB +bIe +bJB +bKy +bKy +bKy +bKy +bPq +bQx +bRz +bSy +bSy +bGv +bUG +bVm +bVn +bWz +bWZ +bXu +bYf +bYL +bZk +bZB +bZR +caq +caK +cbb +bZV +cbU +cci +cap +aXo +aXo +bhP +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +cnw +cgh +cpr +cKD +cro +csj +ctg +cqh +cus +csj +cvy +cwq +csk +cxZ +cyQ +czE +cAj +cKQ +cAP +cBg +cBg +cBS +cBg +cBg +cCM +cAP +cTC +chK +cDD +cdU +cdI aaa aaa aaa @@ -113904,54 +109197,54 @@ abE abW abW abW -abW -acO -acO -adM -aeg -aeG -afc -afv -aeG -agx -acO -aia -aiN -ajB -akA -ajB -afr -amz -anr -aof -aog -aog -aqW -asa -asR -aog -aog -aws -axw -ayt -aof -aof -aBj -aDu -cNy -cNB -cNE -aID -cNH -aKO -cNX -cOc -cOg -cOn -cOt -aRt -aSl -aLm +acN +acN +adC +adW +aev +cWp +aeO +afh +aev +agj +acN +ahL +aiw +ajj +akg +ajj +afd +ame +amW +anI +anJ +anJ +aqw +arw +asn +anJ +anJ +avM +awP +axM +anI +anI +aAB +aCL +cHM +cHN +cHQ +aHO +cHT +aJV +cIf +cIk +cIo +cIv +cIA +aQa +aQS +aKq abW acH acH @@ -113974,134 +109267,134 @@ aaa aaa aaa aaa -aYP -aYP -aYP -aYX -aZL -baD -aZn -bbB -bch -bch -bch -bch -bch -bfF -bgy -bhs -biD -blh -bkl -blh +aXo +aXo +aXo +aXw +aYk +aZc +aXM +baa +baG +baG +baG +baG +baG +bdW +beP +bfJ +bgT +bjt +biy +bjt +bkt +bhE bmk -bjp -boe -bbB -bqU -bax -btM -bvr -bwM -bys -byr -bwM -byr -bCN -bwM -bFg -byr -bBL -bJl -bKQ -bMp -bNo -bOG -bOG -bOG -bSn -bTu -bUx -bVt -bWm -bJe -bJe -bJe -bYm -bZA -bZA -bZD -bZD -cbL -bZA -ccD -ccT -cdt +baa +boR +aYW +brI +btj +ddo +bwc +ddC +ddM +deb +dej +deq +dez +cUI +bzr +bGC +bIg +bJC +bKz +bLO +bLO +bLO +bPr +bQy +bRA +bSw +bTn +bGv +bGv +bGv +bVn +bWA +bWA +bWD +bWD +bYK +bWA +bZC +bZS +car +caL +cbc +car +cbV +ccj +cap +cap +aXo +aXo +aXo +bhP +bhP +bhP +bhP cdN -cee -cdt -ceX +cdN +cdN +cdN +cdN +ceu +ceL cfl -cdr -cdr -aYP -aYP -aYP -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -cif -ciG -ciG -ciG -ciG -ciG -ciG -ciG -cmP -chM -coi -coS -cpx -chM -crq -csv -ctl -cud -cvl -cwh -cxe -cxF -cys -cwh -czz -cAr -cyU -cBZ -cCT -cDI -cEn -cET -cET -cFl -cFl -cGa -cFl -cFl -cFl -cET -dmK -cCC -cjV -chc -cgN +cfl +cfl +cfl +cfl +cfl +cfl +cjl +ceu +ckE +cll +clO +ceu +cnB +coD +cps +cqi +crp +csk +cth +ctG +cut +csk +cvz +cwr +cuU +cxY +cyR +czF +cAk +cAP +cAP +cBg +cBg +cBT +cBg +cBg +cBg +cAP +cTC +cyA +cgw +cdU +cdI aaa aaa aaa @@ -114161,63 +109454,63 @@ abE abW abW abW -abW -acO -acO -doV -acO -acO -acO -acO -acO -acO -acO -acO -afr -afr -afr -afr -alf -amy -anr -aof -apq -aof -aof -aof -aof -aof -apq -aof -axw -ayt -aof -aof -aCf -aDw -aEK -aGo -aES -aIF -aES -aES -aES -aES -aNQ -cOo -aPR -cOA -aSz -cOE -adZ -adZ -aez -aez -aWr -aWr -aWr -aWr -aXE +acN +acN +cUK +acN +acN +acN +acN +acN +acN +acN +acN +acN +afd +afd +afd +afd +akL +amd +amW +anI +aoR +anI +anI +anI +anI +anI +aoR +anI +awP +axM +anI +anI +aBx +aCN +aEa +aFD +aEh +aHP +aEh +aEh +aEh +aEh +aML +cIw +aOD +cIG +aRg +cIK +adP +adP +aep +aep +aUV +aUV +aUV +aUV +aWf abW aaa aaa @@ -114231,134 +109524,134 @@ aaa aaa aaa aaa -aYT -aYT -aYT -aZn -aZA -baB -aZn -aZn -bch -bcI -bcK -bcK -bch -cKo -bch -bch -biE -doO -bkm -bli -bli -bli -bch -bch -bqU -bax -btM -bvr -bwM -byr -byr -bwM -bBH -bCP -bwM -bFh -bGx -bBL -bJm -bJm -bMq -bNp -bJm -bJm -bJm -bJm -bTv -bUu -bVt -bVt -bWT -bXE -bYk -bYm -bZB -caa -caw -caw -cbN -caa -ccE -ccU -cdu -cdO -cef -cey -cdr +aXs +aXs +aXs +aXM +aXZ +aZa +aXM +aXM +baG +bbg +bbi +bbi +baG +cFR +baG +baG +bgU +cUF +biz +bju +bju +bju +baG +baG +boR +aYW +brI +btj +buB +ddu +ddD +ddN +bzn +bAr +buB +bzo +bDP +bzr +bGD +bGD +bJD +bKA +bGD +bGD +bGD +bGD +bQz +bRx +bSw +bSw +bTU +bUF +bVl +bVn +bWB +bXa +bXv +bXv +bYM +bXa +bZD +bZT +cas +caM +cbd +cbw +cap +cck +ccy +cap +aXo +aXo +aXo +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +ceu +ceM cfm -cfA -cdr -aYP -aYP -aYP -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -cig -ciH -ciH -ciH -ciH -ciH -ciH -ciH -cmQ +cfm +cfm +cfm +cfm +cfm +cfm +cjm +cjS +ckF +clm +clP +ceu cnw -coj -coT -cpy -chM -crl -csw -ctm -cVy -cvm -cwi -cxf -cue -cyt -cyU -czo -cAj -cyU -cBZ -cCU -cDI -cEo -cET -cET -cFl -cFl -cFl -cFl -cGF -cFl -cET -cFd -cll -dlG -chc -cgN +coE +cpt +cKE +crq +csl +cti +cqj +cuu +cuU +cvo +cwj +cuU +cxY +cyS +czF +cAl +cAP +cAP +cBg +cBg +cBg +cBg +cCx +cBg +cAP +cAZ +chK +cSQ +cdU +cdI aaa aaa aaa @@ -114418,65 +109711,65 @@ abE abW abW acH -acH -acO -acO -acO -acO -acO -acO -acO -acO -acO -acO -acO -aiO -ajI -akB -all -alK -amA -ant -aol -apr -apr -apr -aol -asV -apr -apr -aol -axB -ays -azU -aBn -aBm -aDv -cNx -aGp -cNF -cNG -cNF -aKQ -cNY -cOd -cOh -aOQ -cOu -cOB -aSl -cOF -aez -adZ -aez -aez -aWs -aWH -aWV -aXk -aXE -aXE -aXE +acN +acN +acN +acN +acN +acN +acN +acN +acN +afd +afd +afd +cWz +cWv +akh +akR +alp +amf +amY +aoS +aoS +anO +aoS +aoS +asr +aoS +aoS +anO +awU +axL +azm +aAF +aAE +aCM +cHL +aFE +cHR +cHS +cHR +aJW +cIg +cIl +cIp +aNJ +cIB +cIH +aQS +cIL +aep +adP +aep +aep +aUW +aVk +aVx +aVL +aWf +aWf +aWf abC abC abC @@ -114488,134 +109781,134 @@ aaa aaa aaa aaa -aYT -aYT -aYT -aZn -aZA -baE -aZm -aZn -bch -bcJ -bcN -bdY -beM -bfG -bgz -bht -biF -bjs -bkn -bjw -bjw -bjw -bof -bch -bqU -bax -btM -bvr -bwM -byr -byr -bwM -byr -cMu -bwM -bFg -bGy -bBL -bJn -bKR -bMr -bNq -bOH -bQh -bRg -bJm -bJm -bUy -bVw -bVw -bJe -bXF -bYl -bYm +aXs +aXs +aXs +aXM +aXZ +aZd +aXL +aXM +baG +bbh +bbl +bct +bdh +bdX +beQ +bfK +bgV +bhG +biA +bhK +bhK +bhK +bml +baG +boR +aYW +brI +btj +ddp +ddv +ddE +ddO +dec +bwc +der +deA +bDQ +bzr +bGE +bIh +bJE +bKB +bLP +bNn +bOl +bGD +bGD +bRB +bSz +bSz +bGv +bUG +bVm +bVn +bWA +bWA +bXw +bWD +bWA +cHv bZA -bZA -cax -bZD -bZA -cML -ccB -ccV -cdv -cdP -ceg -ccW -ceY -cfn -cfB -cdr -aYP -aYP -aYP -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -cig -ciH -ciH -ciH -ciH -ciH -ciH -ciH -cmQ +bZU +cat +caN +cbe +bZV +cbW +ccl +ccz +cap +aXo +aXo +aXo +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +ceu +ceM +cfm +cfm +cfm +cfm +cfm +cfm +cfm +cjm +cjS +ckF +cln +clQ +ceu cnw -coj -coU -cpz -chM -crl -cjG -ctn -cVz -cuf -cuf -cuf -cuf -cyu -cuf -czA -cAs -cBm -cCb -cCV -cDJ -cEp -cEU -cET -cFl -cFl -cFl -cFl -cGG -cFl -cET -dnt -cIc -cgu -chc -cgN +cgh +cpu +cKF +cqk +cqk +cqk +cqk +cuv +cqk +cvA +cws +cxm +cya +cyT +czG +cAm +cAQ +cAP +cBg +cBg +cBg +cBg +cCy +cBg +cAP +cTW +cDT +cdq +cdU +cdI aaa aaa aaa @@ -114684,195 +109977,195 @@ abW abW abW abW -abW -agy -agy -aiP -ajJ -ajJ -alm -afr -amB -anp -aom -aps -aqg -anp -aom -asW -aqg -anp -aom -axC -ayx -azT -aBo -afr -aDu -aEQ -aGq -aHE -aIG -aHE -aKR -aHC -aHC -cOi -aOR -aPS -aRt -aSl -cOF -aez -adZ -apx -afq -aWs -aWI -aWW -aXl -aXF -aXT -aXF -aYn -aYn -aYn -aYn -aXB +afd +cWq +cWv +cWA +ajq +ajZ +akS +cWE +amg +cWF +apG +amU +cWI +cWK +cWL +amU +apG +amU +anP +awV +axQ +azl +aAG +afd +aCL +aEf +aFF +aGR +aHQ +aGR +aJX +aGQ +aGQ +cIq +aNK +aOE +aQa +aQS +cIL +aep +adP +aoX +afc +aUW +aVl +aVy +aVM +aWg +aWu +aWg +aWO +aWO +aWO +aWO +aWc abC abC abC abC abC abC -aYT -aYT -aYT -aZn -aZA -baB +aXs +aXs +aXs +aXM +aXZ +aZa +aZF +aXM +baG +bbi bbg -aZn -bch -bcK -bcI -bcK -bcN -bfH -bch -bhu -biG -bjt -bko -bjw -bjt -bjw -bjw -bch -bqU -bax -btN -bBL -bwM -byr -byr -bwM -byr -bCN -bwM -bFg -bGz -bBL -bJo -bJr -bMr -bNr -bOI -bOI -bRh -bSo -bJm -bJm -bJm -bJm -bJm -bJm -bYm -bYm -bZC -bZX -bZD -bZD -bZw +bbi +bbl +bdY +baG +bfL +bgW +bhH +biB +bhK +bhH +bhK +bhK +baG +boR +aYW +brJ +bzr +ddq +ddw +ddF +ddP +ded +bwc +des +deB +bDR +bzr +bGF +bGI +bJE +bKC +bLQ +bLQ +bOm +bPs +bGD +bGD +bGD +bGD +bGD +bGD +bVn +bVn +bWC +bWX +bWD +bWD +bWx +bZl +bZA +bZV +cau +caO +cbf +cbx +cap ccm -ccB -ccW -cdw -cdQ -ceh -cez -cdr -cfo -cfC -cdr -aYP -aYP -aYP -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -cig -ciH -ciH -ciH -ckp -ciH -ciH -ciH -cmQ -chM -cok -coU -cpA -chM +ccA +cap +aXo +aXo +aXo +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +ceu +ceM +cfm +cfm +cfm +cgP +cfm +cfm +cfm +cjm +ceu +ckG +cln +clR +ceu +cnC +cgh +cpv +cKF crr -cjG -cto -cVz -cvn -cwj -cxg -cxG -cyv -cuf -czw -cAt -cBl -cCc -cCc -cCc -cCc -cET -cET -cET -cFK -cFl -cFl -cGH -cET -cET -dmK -cJf -cjV -chc -cgN +csm +ctj +ctH +cuw +cqk +cvw +cwt +cxl +cyb +cyb +cyb +cyb +cAP +cAP +cAP +cBD +cBg +cBg +cCz +cAP +cAP +cTC +cEW +cgw +cdU +cdI aaa aaa aaa @@ -114941,195 +110234,195 @@ abW abW abW abW -abW -agy -agz -aiQ -agA -ajJ -ajJ -afr -amC -anu -aon -alH -amC -ard -aon -alH -amC -avf -aon -alH -amC -azX -aon -afr -aDv -aEI -aGr -aES -cNH -aES -cNR -cNZ -aHC -cOj -aES -aPT -aRt -aSl -cOF -aez -aez -afq -aVO -aWt -aWJ -aWX -aXm -aXE -aXE -aXE +afd +cWr +cWw +cWw +cWC +afd +amh +amZ +anQ +alm +amh +aqC +anQ +alm +cWM +alm +amh +auz +anQ +alm +amh +azp +anQ +afd +aCM +aDY +aFG +aEh +cHT +aEh +cIa +cIh +aGQ +cIr +aEh +aOF +aQa +aQS +cIL +aep +aep +afc +aUs +aUX +aVm +aVz +aVN +aWf +aWf +aWf abC abC abC abC -aYA +aXb abC aaa aaa aaa aaa -aYP -aYT -aYT -aYT -aZn -bae -baF -bbh -aZn -bch -bcL -bdm +aXo +aXs +aXs +aXs +aXM +aYD +aZe +aZG +aXM +baG +bbj +bbJ +bcu +bbl bdZ -bcN -bfI -bch -bhv -biG -bju -bkp -blj -bml -bjw -bjw -doP -bqU -bax -btO -doQ -bAJ -byt -bzF -bAJ -bBI -bCQ -bAJ -bFi -bGA -bBL -bJp -bKU -bMs -bNs -bOJ -bQi -bRi -bSp -bJm -bUz -bVx -bJr -bVx -bUz -bYm -bYW -bZx -bZY -bZD -bZD -bZx -bZY -ccF -ccX -cdr -cdr -cdr -cdr -cdr -cLj -cdr -cdr -aYP -aYP -aYP -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -cig -ciH -ciH -dkI -ckq -dkR -ciH -ciH -cmQ -cnx -col -coV -cpB -cqr +baG +bfM +bgW +bhI +biC +bjv +bku +bhK +bhK +cUG +boR +aYW +brK +bzr +byq +bwd +bxn +ddQ +bzo +byp +det +bzm +bDS +bzr +bGG +bIj +bJF +bKD +bLR +bNo +bOn +bPt +bGD +bRC +bSA +bGI +bSA +bRC +bVn +bVX +bWy +bWY +bWD +bWD +bWy +bWY +bZE +bZW +cap +cap +cap +cap +cap +cGv +cap +cap +aXo +aXo +aXo +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +ceu +ceM +cfm +cfm +cSj +cgQ +cSr +cfm +cfm +cjm +cjT +ckH +clo +clS +cmF +cnD +coF +cpt +cKF crs -csx -ctm -cVz +csn +ctk +ctI +cux +cqk cvo -cwk -cxh -cxH -cyw -cuf -czo -cAj -cBk -cCc -cCW -cDK -cEq -cEU -cFm -cFx -cFL -cGb -cGw -cGI -cGW -cET -dmK -cll -cgu -chc -cgN +cwj +cxk +cyb +cyU +czH +cAn +cAQ +cBh +cBr +cBE +cBU +cCp +cCA +cCN +cAP +cTC +chK +cdq +cdU +cdI aaa aaa aaa @@ -115198,195 +110491,195 @@ acH acH abW abW -abW -afR -afR -agA -agA -agA -agA -afr -amD -ann -aoo -alH -amD -ann -aoo -alH -amD -ann -aoo -alH -amD -ann -aoo -afr -aDA -aEI -aGs -aHB -cNI -cNN -aKT -aHC -aHC -cOk -cOp -cOt -aRy -aSu -cOF -aez -afV -alR -anC -aWs -aWs -aWr -aWs -aXE +afd +cWs +cWx +cWB +cWC +afd +ami +amS +anR +alm +ami +amS +anR +alm +cWN +alm +ami +amS +anR +alm +ami +amS +anR +afd +aCR +aDY +aFH +aGP +cHU +cHX +aJZ +aGQ +aGQ +cIs +cIx +cIA +aQf +aRb +cIL +aep +afH +alw +anh +aUW +aUW +aUV +aUW +aWf abW aaa aaa aaa aaa abC -aYA +aXb abC aaa aaa aaa aaa -aYP -aYT -aYT -aYT -aZn -aZm -aZA -baB -aZn -bch -bcM -bdn -bea -beN -beN -bgA -bhw -biH -bjv -bkq -blk -bmm -bmX +aXo +aXs +aXs +aXs +aXM +aXL +aXZ +aZa +aXM +baG +bbk +bbK +bcv +bdi +bdi +beR +bfN +bgX +bhJ +biD bjw -bch -bqV -bsp -btP -bBL -bvm -bvm -bzG -bvm -bvm -bCR -doR -bFj -doR -bBL -bJq -bKT -bMs -bNs -bOK -bQj -bRj -bSp -bJm -bJr -bVx -bWn -bVx -bJr -bYm -bYX -bZD -bZD -bZD -bZD -bZD -bZD -bYX -ccY -cdx -cdx -cdx -bYm -cdr -cfp -cdr -aZn -aYP +bkv +ble +bhK +baG +boS +bqm +brL +bzr +ddr +ddx +bxo +ddR +dee +bAs +cUH +bCE +deF +bzr +bGH +bIi +bJF +bKD +bLS +bNp +bOo +bPt +bGD +bGI +bSA +bTo +bSA +bGI +bVn +bVY +bWD +bWD +bWD +bWD +bWD +bWD +bVY +bZX +cav +cav +cav +bVn +cap +ccn +cap +aXM +aXo aaa -bjB -bjB -bjB -bjB -bjB -cgS -cgS -cgS -cgS -cgS -chM -cig -ciH -ciH -ciH -ckr -ciH -ciH -ciH -cmQ -chM -com -coW -cpC -cqs +bhP +bhP +bhP +bhP +bhP +cdN +cdN +cdN +cdN +cdN +ceu +ceM +cfm +cfm +cfm +cgR +cfm +cfm +cfm +cjm +ceu +ckI +clp +clT +cmG +cnE +coG +cpm +cql crt -csy -ctf -cug -cvp -cwl -cxi -cxI -cyx -cyV -czB -cAu -cBn -cCc -cCW -cDK -cEr -cCc -cFn -cFy -cFM -cGc -cGx -cGJ -cFn -cCc -cHr -cCC -cjU -chc -cgN +cso +ctl +ctJ +cuy +cuV +cvB +cwu +cxn +cyb +cyU +czH +cAo +cyb +cBi +cBs +cBF +cBV +cCq +cCB +cBi +cyb +cDi +cyA +cgv +cdU +cdI aaa aaa aaa @@ -115454,52 +110747,52 @@ acH acH acH abW -acH -acH -afR -afR -agy -ajJ -agA -agA -afr -amE -anv -ann -alH -aqh -ann -ann -alH -auc -ann -ann -alH -ayy -ann -ann -afr -aDB -cNy -aKS -aKS -aII -aJN -aIH -aKS -aKS -aNR -cOq -cOw -aRx -aSt -cOJ -aez -afq -aoR -apu -aez -adZ +abW +afd +cWt +cWy +cWy +cWD +afd +amj +ana +amS +alm +apH +amS +amS +alm +cWN +alm +atw +amS +amS +alm +axR +amS +amS +afd +aCS +cHM +aJY +aJY +aHS +aIV +aHR +aJY +aJY +aMM +cIy +cIC +aQe +aRa +cIM +aep +afc +aos +aoU +aep +adP abW abW abW @@ -115509,141 +110802,141 @@ aaa aaa aaa abC -aYA +aXb abC aaa aaa aaa aaa -aYP -aYP -aYP -aYP -aYP -aZn -aZA -baB -bbE -bci -bcN -bcN -beb -beO -bfJ -bch -bhx -biI -bjw -bjw -bjw -bjw -bjw -bog -bch -bqU -bax -btQ -bBL -bwO -byu -bzH -bzH -bzH -bCS -byv -bFk -byv -bBL -bJr -cMB -bMs -bNs -bOK -bQk -bRk -bSq -bJm -bJr -bVy -bJr -bJr -bJr -bYm -bYY -bZD -cab -cab -cab -cab -bZD -bYX -ccY -cdx -cdx -cdx -bYm -cLi -aZA +aXo +aXo +aXo +aXo +aXo +aXM +aXZ +aZa bad -aZo -aYP +baH +bbl +bbl +bcw +bdj +bea +baG +bfO +bgY +bhK +bhK +bhK +bhK +bhK +bmm +baG +boR +aYW +brM +bzr +bte +bwe +bxp +ddS +bte +bAt +bwe +bwe +bte +bzr +bGI +cHo +bJF +bKD +bLS +bNq +bOp +bPu +bGD +bGI +bSB +bGI +bGI +bGI +bVn +bVZ +bWD +bXb +bXb +bXb +bXb +bWD +bVY +bZX +cav +cav +cav +bVn +cGu +aXZ +aYC +aXN +aXo aaa aaa aaa aaa aaa aaa -cgS -cgS -cgS -cgS -cgS -chM -cig -ciH -ciH -ciH -ciH -ciH -ciH -ciH -cmQ -cnw -con -coX -cpD -chM +cdN +cdN +cdN +cdN +cdN +ceu +ceM +cfm +cfm +cfm +cfm +cfm +cfm +cfm +cjm +cjS +ckJ +clq +clU +ceu +cnF +cgh +cpm +cql cru -cjG -ctf -cug -cvq -cwm -cxj -cxJ -cyy -cyW -czy -cAj -cyU -cCc -cCX -cDL -cEs -cEV -cEs -cEs -cEs -cGd -cEt -cGK -cEt -cCc -cHr -cxT -cjU -chc -cgN +csp +ctm +ctK +cuz +cuW +cvy +cwj +cuU +cyb +cyV +czI +cAp +cAR +cAp +cAp +cAp +cBW +cAq +cCC +cAq +cyb +cDi +ctU +cgv +cdU +cdI aaa aaa aaa @@ -115711,62 +111004,62 @@ acH acH acH abW -acH -acH -acH -afR -agz -ahq -agA -agA -afr -amF -anw -aop -alH -aqi -anw -asb -alH -aud -anw -awt -alH -ayz -anw -aBp -afr -aDC -aER -aGu -aHH -aIJ -cNN -cNS -cOa -cOe -cOl -cOp -cOt -aRt -aSv -cOF -adZ -apx -anC -aez -aez +abW +afd +cWu +cWs +cWs +ahc +afd +amk +anb +anS +alm +apI +anb +arx +alm +aiy +alm +atx +anb +avN +alm +axS +anb +aAH +afd +aCT +aEg +aFI +aGS +aHT +cHX +cIb +cIi +cIm +cIt +cIx +cIA +aQa +aRc +cIL +adP +aoX +anh +aep +aep abW abW abW -akG +akm aaa aaa aaa aaa aaa abC -aYA +aXb abC aaa aaa @@ -115774,76 +111067,76 @@ aaa aaa aaa aaa -aZc -aYT -aYT -aZo -aZn -baF -bbh -bch -bch -bch -bch -bch -bch -bch -bhy -biJ +aXB +aXs +aXs +aXN +aXM +aZe +aZG +baG +baG +baG +baG +baG +baG +baG +bfP +bgZ +bhL +biE bjx -bkr -bll +bkw +blf bmn -bmY -boh -bch -bqU -bax -btO -bBL -bwP -cMs -bzI -byv -byv -bCT -cMs -bFk -bGB -bBL -bJs -bJr -bMr -bNs -bKR -bKR -bKR -bKR -bTw -bUA -bVz -bWo -bVz -bUA -bYm -bYX -bZD -cab -bZD -cbh -cab -bZD -bYX -ccZ -bYX -bYX -bYX -bYm -cfq -aZA -aZo -aZo -aYP +baG +boR +aYW +brK +bzr +buC +ddy +bxq +ddT +def +bAu +deu +bCF +bDT +bzr +bGJ +bGI +bJE +bKD +bIh +bIh +bIh +bIh +bQA +bRD +bSC +bTp +bSC +bRD +bVn +bVY +bWD +bXb +bWD +bYg +bXb +bWD +bVY +bZY +bVY +bVY +bVY +bVn +cco +aXZ +aXN +aXN +aXo aaa aaa aaa @@ -115853,54 +111146,54 @@ aaa aaa aaa aaa -cgS -cgS -chM -cig -ciH -ciH -ciH -ciH -ciH -ciH -ciH -cmQ +cdN +cdN +ceu +ceM +cfm +cfm +cfm +cfm +cfm +cfm +cfm +cjm +cjS +ckJ +clr +clV +ceu cnw -con -coY -cpE -chM -crl -cjG -ctf -cuh -cvr -cwn -cxk -cxK -cyz -cyX -cvl -cAv -cBo -cCc -cCY -cDM -cNu -cEt -cEt -cFz -cEt -cEt -cNu -cGL -cGX -cCc -dmK -cxT -cjV -cgu -cgN +cgh +cpm +cqm +crv +csq +ctn +ctL +cuA +cuX +crp +cwv +cxo +cyb +cyW +czJ +cHJ +cAq +cAq +cBt +cAq +cAq +cHJ +cCD +cCO +cyb +cTC +ctU +cgw +cdq +cdI aaa aaa aaa @@ -115968,139 +111261,139 @@ abW acH acH acH -acH -afR -agy -agy -agA -agA -agA -agA -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -aDD -aES -aGv -aES -aES -aES -aES -aGv -aES -aES -aES -cOx -aRt -aSl -cOF -adZ -aUV -anC -aez -aez +abW +afd +afd +afd +afd +afd +afd +afd +afd +afd +afd +afd +afd +afd +afd +cWO +afd +afd +afd +afd +afd +afd +afd +afd +afd +aCU +aEh +aFJ +aEh +aEh +aEh +aEh +aFJ +aEh +aEh +aEh +cID +aQa +aQS +cIL +adP +aTz +anh +aep +aep abW abW abW abW aaa -aYe -aYe -aYe -aYe -aYe -aYA -aYe -aYe -aYe -aYe -aYe +aWF +aWF +aWF +aWF +aWF +aXb +aWF +aWF +aWF +aWF +aWF aaa aaa -aYP -aYT -aYT -aYT -aZn -bbi -bbF -bcj -bcj -bdo -bbh -bad -aZn -bch -bch -bch -bch -bch -bch -bch -bch -boi -bch -bqU -bax -btR -bBL -bwQ -byw -bzJ -byw -bBJ -byw -bEh -bFl -bGC -bBL -bJt -bKV -bMt -bNs -bOL -bQl -bRl -bSr -bTx -bJu -bJu -bJu -bJu -bJu -bYn -bYZ -bZE -bZD -cay -bZD -bZD -bZE -bYX -ccY -cdx -cdx -cei -bYm -bCW -aZA -aZn -aZn -aYP +aXo +aXs +aXs +aXs +aXM +aZH +bae +baI +baI +bbL +aZG +aYC +aXM +baG +baG +baG +baG +baG +baG +baG +baG +bmo +baG +boR +aYW +brN +bzr +buD +bwg +bxr +ddU +bzp +dek +bBG +bwg +deG +bzr +bGK +bIk +bJG +bKD +bLT +bNr +bOq +bPv +bQB +bGL +bGL +bGL +bGL +bGL +bVo +bWa +bWE +bWD +bXx +bWD +bWD +bWE +bVY +bZX +cav +cav +cbg +bVn +bAw +aXZ +aXM +aXM +aXo aaa aaa aaa @@ -116112,52 +111405,52 @@ aaa aaa aaa aaa -chM -cii -ciI -ciI -ciI -ciI -ciI -ciI -ciI -cmR -chM -coo -coZ -cpF -chM -crl -cjG -ctf -cui -cvs -cwn -cwn -cxL -cyA -cuf -czo -cAw -cBp -cCc -cCY -cDM -cEt -cEt -cEt -cEt -cEt -cEt -cEt -cEt -cEt -cHj -cHs -cll -cgu -cgR -cgN +ceu +ceN +cfn +cfn +cfn +cfn +cfn +cfn +cfn +cjn +ceu +ckK +cls +clW +ceu +cnw +cgh +cpm +cqn +crw +csq +csq +ctM +cuB +cqk +cvo +cww +cxp +cyb +cyW +czJ +cAq +cAq +cAq +cAq +cAq +cAq +cAq +cAq +cAq +cDa +cDj +chK +cdq +cdM +cdI aaa aaa aaa @@ -116225,138 +111518,138 @@ abW acH acH acH -afR -agy -agA -agA -agA -agA -ajJ -agA -agy -agy -agy -agy -agy -agy -agy -adZ -adZ -adZ -adZ -adZ -adZ -adZ -azY -aBq -aCg -aDE -aET -aGw -aHI -azY -aJR -cNT -aJR -aJR -aJR -aLm -aPV -aRt -aSl -cOF -adZ -aUW -anC -aez -aez +abW +abW +abW +abW +abW +abW +abW +agk +agk +agk +agk +agk +agk +agm +agm +aiy +agk +adP +adP +adP +adP +adP +azq +aAI +aBy +aCV +aEi +aFK +aGT +azq +aIZ +cIc +aIZ +aIZ +aIZ +aKq +aOG +aQa +aQS +cIL +adP +aTA +anh +aep +aep abW abW aaa aaa aaa -aYf -aYf -aYf -aYf -aYf -aYB -aYJ -aYJ -aYJ -aYJ -aYJ +aWG +aWG +aWG +aWG +aWG +aXc +aXj +aXj +aXj +aXj +aXj aaa aaa -aYP -aYT -aYT -aYT -aZn -aYX -bbG -aZA -aZA -aZA -baF -bcj -bcj -bcj -bhz -biK +aXo +aXs +aXs +aXs +aXM +aXw +baf +aXZ +aXZ +aXZ +aZe +baI +baI +baI +bfQ +bha +bhM +biF bjy -bks -blm -bmo -bmZ -boj -bpL -bqW -bsi -btS -bBL -bwR -bvm -bvm -bAK -bBK -bvs -bvs -bvs -bvs -bHG -bJu -bJu -bJu -bNt -bJu -bJu -bJu -bJu -bTy -aZn -aZo -aZo -aZo -aZn -bYo -bZa -bZa -bZa -bZa -bZa -bZa -bZa -bZa -cda -bYm -bYm -bYm -bYm -bCW -bGo -aYX -aYP +bkx +blg +bmp +bnM +boT +bqf +brO +bzr +buE +ddz +ddG +ddV +deg +del +dev +deC +bCF +bzr +bQB +bGL +bGL +bKE +bGL +bGL +bGL +bGL +bQC +aXM +aXN +aXN +aXN +aXM +bVp +bWb +bWb +bWb +bWb +bWb +bWb +bWb +bWb +bZZ +bVn +bVn +bVn +bVn +bAw +bDI +aXw +aXo aaa aaa aaa @@ -116369,52 +111662,52 @@ aaa aaa aaa aaa -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -chM -cNo -cNp -cNq -cVz -cvt -cwo -cxl -cxM -cyB -cuf -czC -cAx -cBq -cCc -cCY -cDN -cEu -cEW -cFo -cEW -cEW -cEW -cGy -cGM -cGY -cCc -cHt -cll -dny -cgR -cgN +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +ceu +cHD +cHE +cHF +cKF +crx +csr +cto +ctN +cuC +cqk +cvC +cwx +cxq +cyb +cyW +czK +cAr +cAS +cBj +cAS +cAS +cAS +cCr +cCE +cCP +cyb +cDk +chK +cUa +cdM +cdI aaa aaa aaa @@ -116482,138 +111775,138 @@ abW acH acH acH -afR -agz -ahq -agA -agA -agA -agA -agy -aig -agy -agy -agA -agA -agy -agy -afS -afS -afS -afV -afV -adZ -adZ -azY -aBr -aCh -aDF -aEU -aGx -aHJ -aIK -aJO -aJQ -aJQ -aJR -aNS -aLm -aPW -aRz -cMl -cOF -aez -anN -ayB -afS -aez -adZ +acH +acH +acH +acH +acH +acH +acH +agk +ahP +agk +agl +cWG +agl +aix +ajp +cWP +agk +adP +adP +adP +adP +adP +azq +aAJ +aBz +aCW +aEj +aFL +aGU +aHU +aIW +aIY +aIY +aIZ +aMN +aKq +aOH +aQg +cHb +cIL +aep +ans +axU +afE +aep +adP abW aaa aaa aaa -aYg -aYg -aYg -aYg -aYg -aYC -aYg -aYg -aYg -aYg -aYg +aWH +aWH +aWH +aWH +aWH +aXd +aWH +aWH +aWH +aWH +aWH aaa aaa aaa -aYP -aYT -aYT -aYT -aZo -aZn -aZn -aZm -aZA -bec -bbi -aZA -aZA -bbE -biL +aXo +aXs +aXs +aXs +aXN +aXM +aXM +aXL +aXZ +bcx +aZH +aXZ +aXZ +bad +bhb +bhN +biG bjz -bkt -bln -bmp -aZm -bok -aZm -bqX -bbz -btT -cTe -bwS -byx -bzK -cKQ -cKR -bCV -aZo -aZn -bGD -bkb -bkb -bKW -bMu -bNu -bkb -bQm -bkb -bSs -aZB -bbg -aZo -aZo -aZo -aZo -bFm -bkb -bkb -bkb -caz -bkb -bkb -ccn -bkb -bMu -bkb -bkb -bkb -ceA -bCY -bFn -aZo -aYP +bky +aXL +bmq +aXL +boU +aZY +brP +cJM +buF +btk +bxs +byr +bzq +btk +btk +btk +btk +bEX +deI +bTq +aXZ +bCG +bip +bNs +bip +bPw +aYa +aZF +aXN +aXN +aXN +aXN +bCG +bip +bip +bip +bXy +bip +bip +bZm +bip +bJH +bip +bip +bip +cby +bAy +bCH +aXN +aXo aaa aad aaa @@ -116627,51 +111920,51 @@ aad aaa aaa abC -cgN -cgN -cgR -cgR -cgR -cgR -cgN -cgN -cgN -cgN -cgN -cgR -cgR -cjg -crl -cjG -ctp -cVz -cuf -cuf -cuf -cuf -cuf -cuf -cue -cAy -cBr -cue -cCZ -cDO -cue -cEX -cFp -cFB -cEt -cGe -cGz -cGN -cGZ -cCc -dmK -cll -cjV -cgR -cgN +cdI +cdI +cdM +cdM +cdM +cdM +cdI +cdI +cdI +cdI +cdI +cdM +cdM +cfI +cnw +cgh +cpw +cKF +cqk +cqk +cqk +cqk +cqk +cqk +cqj +cwy +cxr +cqj +cyX +czL +cqj +cAT +cBk +cBu +cAq +cBX +cCs +cCF +cCQ +cyb +cTC +chK +cgw +cdM +cdI aaa aaa aaa @@ -116739,52 +112032,52 @@ abW abW abW acH -afR -agA -agA -aie -agA -agA -akC -agz -alL -akD -amG -amG -alN -agA -agy -afV -asX -aue -avg -afS -axD -afS -azY -aBs -aCi -aDG -aEV -aGy -aHK -aIL -aJP -aJP -aJP -aMQ -aNT -aLm -aPQ -aRt -aSl -cOF -aez -afq -anC -afq -aez -adZ +acH +acH +acH +acH +acH +acH +acH +agk +alq +akj +aml +aiy +agl +cWJ +agk +agk +agk +adP +adP +adP +adP +adP +azq +aAK +aBA +aCX +aEk +aFM +aGV +aHV +aIX +aIX +aIX +aLN +aMO +aKq +aOC +aQa +aQS +cIL +aep +afc +anh +afc +aep +adP abW aaa aaa @@ -116794,7 +112087,7 @@ abC abC abC abC -arw +aqV abC abC abC @@ -116803,75 +112096,75 @@ abC aaa aaa aaa -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aZo -aZo -aZn -aZm -aZn -aZn -aZn -aZm +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXN +aXN +aXM +aXL +aXM +aXM +aXM +aXL +bhO +biH bjA -bku -blo -bmq -aZm -bol -aZm -bqY -bbz -btU -bvt -bwT -byy -bBL -bAL -bBL -bCW -aZA -bFm -bCY -aZA -bbi -aZA -aZA -aZA -aZA -bbi -aZA -bSt -bkb -bkb -bkb -bkb -bkb -bMu -bCY -aZA -bbi -aZz -bad -bbg -aZo -aYX -aZo -bqE -aZA -bWp -bbi -ceB -aZn -aZn -aZo -aYT -aYP +bkz +aXL +bmr +aXL +boV +aZY +brQ +btl +buG +caE +cak +bys +deh +bAv +aXN +bCG +deH +bip +deJ +bip +bip +bAy +aXZ +aZH +aXZ +bPx +bip +bip +bip +bip +bip +bJH +bAy +aXZ +aZH +aXY +aYC +aZF +aXN +aXw +aXN +boB +aXZ +bTq +aZH +cbz +aXM +aXM +aXN +aXs +aXo aaa aaa aaa @@ -116886,49 +112179,49 @@ aaa abC aaa aaa -cgN -cgN -cjl -cjl -cjl -cjl -cjl -cgN -cgN -cgN -cgR -cLp -crv -cst -cte -cUr -cvu -cwp -cxm -cxN -cyC -cue -czD -cAz -cBs -cCd -cDa -cDP -cue -cue -cCc -cCc -cFN -cCc -cCc -cCc -cHa -cCc -cHu -cll -cjV -cgR -cgN +cdI +cdI +cfN +cfN +cfN +cfN +cfN +cdI +cdI +cdI +cdM +cGA +cnG +coB +cpl +cKr +che +css +chc +ctO +cuD +cqj +cvD +cwz +cxs +cyc +cyY +czM +cqj +cqj +cyb +cyb +cBG +cyb +cyb +cyb +cCR +cyb +cDl +chK +cgw +cdM +cdI aaa aaa aaa @@ -116990,145 +112283,145 @@ abC abC abC abC -ads +adm abW abW abW abW acH -afR -agA -agA -agA -agA -agA -akD -aln -alM -amG -anx -amG -amG -akC -agz -afV -aym -auf -aym -afS -akp -aOF -cJJ -aBt -aCj -aDH -aDI -aGz -aHL -aIK -aJQ -aJQ -cMf -aMR -aNU -aLm -aPX -aRt -aSx -cOF -aez -aez -anC -afq -aez -adZ +acH +acH +acH +acH +acH +acH +acH +agk +alr +aml +anc +cWH +ajp +aki +agl +afE +afE +afE +afH +afH +awW +afE +cFs +aAL +aBB +aCY +aCZ +aFN +aGW +aHU +aIY +aIY +cGY +aLO +aMP +aKq +aOI +aQa +aRe +cIL +aep +aep +anh +afc +aep +adP abW aaa aaa aaa -aYe -aYe -aYe -aYe -aYe -arw -aYe -aYe -aYe -aYe -aYe +aWF +aWF +aWF +aWF +aWF +aqV +aWF +aWF +aWF +aWF +aWF aaa aaa aaa -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aYT -aYT -aYT -aZo -aZm -aZm -aZm -aZm -aZm -aZm -bom -aZm -bqZ -bab -baa -bvm -bwU -bvm -bzL -bAM -bBM -bCX -bkb -bCY -bbg -aZn -aZm -bKX -bKX -bKX -bKX -aZm -aZn -bSu -aZn -bUB -aZA -bWp -aZA -aZA -aZA -aZo -aZm -cac -aZm -aZo -aZo -aZo -cbO -cbO -cbO -cbO -cbO -ceC -cbO -aYP -aYT -aYT -aYP +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXs +aXs +aXs +aXN +aXL +aXL +aXL +aXL +aXL +aXL +bms +aXL +boW +aYA +aYz +aXL +buH +bcX +cak +byt +cak +bAx +bip +bAy +aZF +aXM +aXL +bIl +bIl +bIl +bIl +aXL +aXM +bPy +aXM +bRE +aXZ +bTq +aXZ +aXZ +aXZ +aXN +aXL +bXc +aXL +aXN +aXN +aXN +bYN +bYN +bYN +bYN +bYN +cbA +bYN +aXo +aXs +aXs +aXo aaa aaa aaa @@ -117144,48 +112437,48 @@ abC aaa aaa aaa -cgN -cjl -ckR -clI -cmi -cjl -cjl -cjl -cjl -cjl -cjl -crl -cjG -cte -cUn -cvv -cwq -dlH -cxO -cyD -cue -czE -cAA -cwg -cCe -cDb -cyU -cue -chc -chc -cCc -cLM -cGf -cFI -cFI -cHb -cGv -cHv -cCC -cjU -cgR -cgN +cdI +cfN +chq +cig +ciE +cfN +cfN +cfN +cfN +cfN +cfN +cnw +cgh +cpl +cKq +cry +cst +cSR +ctP +cuE +cqj +cvE +cwA +csj +cyd +cyZ +cuU +cqj +cdU +cdU +cyb +cGP +cBY +cBB +cBB +cCS +cCo +cDm +cyA +cgv +cdM +cdI aaa aaa aaa @@ -117253,139 +112546,139 @@ abW abW abW acH -afR -agy -agA -aif -aiR -ajK -agy -agy -alN -alN -amG -amG -agA -afR -afR -afV -asY -aym -cYZ -akH -axE -ayA -azY -aBu -aCk -aDI -aEW -aDI -aDI -aIM -aJR -aJR -aJR -aJR -aJR -aOT -aPQ -aRt -aSm -cOF -aez -afq -anC -afq -aez -adZ +acH +acH +acH +acH +acH +acH +abW +agk +als +als +aml +aml +agm +afD +afD +afH +ass +aty +auA +afE +ajW +axT +azq +aAM +aBC +aCZ +aEl +aCZ +aCZ +aHW +aIZ +aIZ +aIZ +aIZ +aIZ +aNL +aOC +aQa +aQT +cIL +aep +afc +anh +afc +aep +adP abW aaa aaa aaa -aYf -aYf -aYf -aYf -aYf -arw -aYJ -aYJ -aYJ -aYJ -aYJ +aWG +aWG +aWG +aWG +aWG +aqV +aXj +aXj +aXj +aXj +aXj aaa aaa aaa -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYT -aYP -aYT -aYT -aYT -aYT -aYP -aYP -aYP -aYP -aYP -aZm -bon -bpM -cRM -arz -arz -bvm -bwV -byz -bzM -beD -beD -bCY -bbi -bFn -aZn -aZn -aZm -bjB -bjB -bjB -bjB -aZm -aZn -aZn -aZo -aYX -aZn -aZn -aZo -aZo -aZo -aZo -aZm -djh -aZm -aYP -cbO -cbO -cbO -cdb -cdy -cdR -cdc -ceD -cbO -cbO -aYT -aYT -aYP +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXs +aXo +aXs +aXs +aXs +aXs +aXo +aXo +aXo +aXo +aXo +aXL +bmt +bnN +cJw +cXw +cXw +cXH +buI +aXL +ddH +ddW +dei +bAw +aZH +bCH +aXM +aXM +aXL +bhP +bhP +bhP +bhP +aXL +aXM +aXM +aXN +aXw +aXM +aXM +aXN +aXN +aXN +aXN +aXL +cRR +aXL +aXo +bYN +bYN +bYN +caa +caw +caP +cab +cbB +bYN +bYN +aXs +aXs +aXo aaa aaa aad @@ -117398,51 +112691,51 @@ aaa aaa aaa abC -chN -ciJ -cjl -cjl -cks -ckS -clJ -cmj -cjl -cny -cop -cpa -cpG -cjl -crw -csz -ctq -cuj -cvw -cwr -cxn -cxP -cyE -cue -czF -cAB -cBt -cCf -cyU -cDQ -cue -chc -chc -cCc -cFO -cLN -cxT -dkQ -cln -cxT -cxT -dnv -chc -cgN -cgN +cev +cfo +cfN +cfN +cgS +chr +cih +ciF +cfN +cjU +ckL +clt +clX +cfN +cnH +coH +cpx +cqo +crz +csu +ctp +ctQ +cip +cqj +cvF +cwB +cxt +cye +cuU +czN +cqj +cdU +cdU +cyb +cBH +cGQ +ctU +cSq +chM +ctU +ctU +cTY +cdU +cdI +cdI aaa aaa aaa @@ -117511,138 +112804,138 @@ abW abW acH acH -agy -agy -aig -afR -afR -afR -afR -afR -afR -afR -afR -agy -afR -aez -afV -afV -afV -afV -afV -akp -cYo -cJK -aBt -aCl -aDJ -aDI -aGA -aHL -aIK -aJQ -aJQ -aJQ -aMS -aJR -aOU -aPY -aRA -aSy -cOR +abW +abW +acH +acH +acH +acH +afD +afD +afD +afD +aiz +ajr +afD +acH +afH +axF +atz +axF +afE +ajW +cLA +cFt +aAL +aBD +aDa +aCZ +aFO +aGW +aHU +aIY +aIY +aIY +aLP +aIZ +aNM +aOJ +aQh +aRf +cIN +aSB +ahd aTX -ahr -aVt -aVP -aez -adZ -akG +aUt +aep +adP +akm abC abC abC -aYg -aYg -aYg -aYg -aYg -arw -aYg -aYg -aYg -aYg -aYg +aWH +aWH +aWH +aWH +aWH +aqV +aWH +aWH +aWH +aWH +aWH abC abC abC abC abD -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYP -aYP -bjB -bjB -bjB -bjB -arw -bpN -cRM -arz -arz -bvm -bwW -bvm -aZn -aZn -aZn -aZn -aZm -aZn -aZn -aZm -aZm -bjB +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXo +aXo +bhP +bhP +bhP +bhP +aqV +bnO +cJw +cXw +cXw +cXH +buJ +bwh +bxt +bcY +bcY +bAy +aXL +aXM +aXM +aXL +aXL +bhP aaa aaa -bjB -aZm -aZm -aYP -aYT -aYT -aYP -aYP -aYT -aYT -aYT -aYT -aZm -cac -aZm -aYP -cbO -cco -ccG -cdc -cdf -cdf -cdc -ceE -ceZ -cbO -aYT -aYT -aYP +bhP +aXL +aXL +aXo +aXs +aXs +aXo +aXo +aXs +aXs +aXs +aXs +aXL +bXc +aXL +aXo +bYN +bZn +bZF +cab +cae +cae +cab +cbC +cbX +bYN +aXs +aXs +aXo aaa aaa aaa @@ -117654,52 +112947,52 @@ aaa aaa aaa aaa -chN -cij -ciK -cjl -cjI -cjl -ckT -clJ -cmk -cmS -cnz -cnz -cnz -cnz -cqt -crx -csx -ctr -cUn -cjg -cws -cxo -cxo -cxo -cxo -czG -cue -cBu -cCg -cDc -czG -czG -czG -cxo -cxo -cxo -cjU -cnL -dnk -coD -cgL -chc -cgu -cgu -cgR -cgN +cev +ceO +cfp +cfN +cgj +cfN +chs +cih +ciG +cjo +cjV +cjV +cjV +cjV +cmH +cnI +coF +cpy +cKq +cgv +csv +ctq +ctq +ctq +ctq +cvG +cqj +cxu +cyf +cza +cvG +cvG +cvG +ctq +ctq +ctq +cgv +ckh +cTR +ckZ +cdG +cdU +cdq +cdq +cdM +cdI aaa aaa aaa @@ -117768,51 +113061,51 @@ abW abW abW abW -adZ -adZ -adZ -aez -aez -aez -aez -aez -aez -aez -aez -adZ -adZ -aez -adZ -aez -aez -adZ -afS -akp -cZm -cJK -aBs -aCm -aDK -aEX -aGB -aDK -aIN -aJS -aJS -aJS -aMT -aNV -aOV -aPZ -aRB -dbp -cOS -aTY -afq -afV -aez -aez -adZ +abW +abW +abW +acH +acH +acH +acH +acH +acH +acH +acH +abW +abW +acH +afH +ast +axF +cLP +akn +awX +cLU +cFt +aAK +aBE +aDb +aEm +aFP +aDb +aHX +aJa +aJa +aJa +aLQ +aMQ +aNN +aOK +aQi +cMX +cIO +aSC +afc +afH +aep +aep +adP abW aaa aaa @@ -117822,7 +113115,7 @@ abC abC abC abC -arw +aqV abC abC abC @@ -117832,131 +113125,131 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa aaa aaa aaa -aYP -aYP -aYT -aYT -aYT -aYT -aYT -aYP -bjB -aZc +aXo +aXo +aXs +aXs +aXs +aXs +aXs +aXo +bhP +aXB aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvu -bwX -bjB -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP -bjB +aqV +bnO +cJw +cXw +cXw +cXH +buK +aXL +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo +bhP aaa aaa aaa aaa -bjB -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP -bjB -bjB -bjB -aYP -cbO -ccp -cbO -cdd -cdy -cdy -cco -cej -cfa -cbO -aYT -aYT +bhP +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo +bhP +bhP +bhP +aXo +bYN +bZo +bYN +cac +caw +caw +bZn +cbh +cbY +bYN +aXs +aXs +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chO -cik -ciL -cjm -cjJ -cjm -ckU -clK -ckU -ckU -ckU -ckU -ckU -ckU -cqu -cry -cjG -cte -cUn -cvx -cwt -cxo -cxQ -cyF -cyY -czH -cAC -cBv -cCh -cBz -cDR -cEw -cxQ -cyF -cyY -cxo -chc -clq -cgL -cgL -ckF -chc -cgR -cgR -cgR -cgN +cew +ceP +cfq +cfO +cgk +cfO +cht +cii +cht +cht +cht +cht +cht +cht +cmI +cnJ +cgh +cpl +cKq +crA +csw +ctq +ctR +cuF +cuY +cvH +cwC +cxv +cyg +cxz +czO +cAs +ctR +cuF +cuY +ctq +cdU +chP +cdG +cdG +chf +cdU +cdM +cdM +cdM +cdI aaa aaa aaa @@ -118024,100 +113317,100 @@ aaa aaa aaa abW -adZ -adZ -adZ -afV -adZ -adZ -adZ -adZ -adZ -aez -aez -aez -aez -aez -aez -aez -afV -afS -afV -afV -cZj -cYo -azY -aBv -aCn -aDL -aEY -aGC -aHM -aIK -cMf -aJQ -aJQ -aMU -aNW -aLm +adP +adP +adP +afH +adP +adP +adP +adP +adP +aep +aep +aep +aep +aep +aep +afH +afH +afH +afH +afH +cLT +cLA +azq +aAN +aBF +aDc +aEn +aFQ +aGX +aHU +cGY +aIY +aIY +aLR +aMR +aKq +aOL aQa -aRt -dbp -cOF -anC -aez -aez -aez -aez +cMX +cIL +anh +aep +aep +aep +aep abW abW aaa aaa aaa -aYe -aYe -aYe -aYe -aYe -arw -aYe -aYe -aYe -aYe -aYe +aWF +aWF +aWF +aWF +aWF +aqV +aWF +aWF +aWF +aWF +aWF aaa aaa aaa -aXn +aVO aaa aaa aaa aaa aaa aaa -aYP -aYP -aYP -aYP -aYP -aYP -aYP -aYP +aXo +aXo +aXo +aXo +aXo +aXo +aXo +aXo aaa abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +cXq +cXs +cXw +cXw +ddm +dds aaa -aYP -aYP +aXo +aXo aaa aaa aaa @@ -118129,91 +113422,91 @@ aaa aaa aaa aaa -bjB -bjB -aYP -aYP -bjB -bjB -aYP -aYP -aYP -aYP -aYP -bjB -bjB -bjB -aYT -cbO -cbO -ccH -cde -cdz -cdS -cej -cdf -cfb -cbO -aYP -aYP +bhP +bhP +aXo +aXo +bhP +bhP +aXo +aXo +aXo +aXo +aXo +bhP +bhP +bhP +aXs +bYN +bYN +bZG +cad +cax +caQ +cbh +cae +cbZ +bYN +aXo +aXo +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chP -cil -ciM -cjl -cjK -cjl -ckV -clJ -clJ -cmT -clJ -coq -cpb -cpb -cqv -crz -cjG -cts -cUn -cll -cln -cxo -cxR -cyG -cyY -czI -cAD -cBw -cCi -cBA -cDS -cEx -cxQ -cyF -cFC -cxo -cjU -cln -cjU -cjU -cjU -cjU -cgR -cgN -cgN -cgN +cex +ceQ +cfr +cfN +cgl +cfN +chu +cih +cih +cjp +cih +ckM +clu +clu +cmJ +cnK +cgh +cpz +cKq +chK +chM +ctq +ctS +cuG +cuY +cvI +cwD +cxw +cyh +cxA +czP +cAt +ctR +cuF +cBv +ctq +cgv +chM +cgv +cgv +cgv +cgv +cdM +cdI +cdI +cdI aaa aaa aaa @@ -118280,50 +113573,50 @@ abC abC abC abC -afw -afS -afw -afq -afq -aUW -adZ -afS -afV -alO -afS -afV -afV -aez -aez -aez -aez -adZ -aug -aqG -cYj -akp -cYo -azY -aBw -aCo -aDM -aEZ -aGD -aHN -azY -azY -azY -cJK -azY -azY -aLm -aQb -aRt -dbp -cOF -aTZ -aez -aez +afi +afE +afi +afc +afc +aTA +adP +afE +afH +alt +afE +afH +afH +aep +aep +aep +aep +adP +atA +aqg +cLv +ajW +cLA +azq +aAO +aBG +aDd +aEo +aFR +aGY +azq +azq +azq +cFt +azq +azq +aKq +aOM +aQa +cMX +cIL +aSD +aep +aep abW abW abW @@ -118331,20 +113624,20 @@ abW aaa aaa aaa -aYf -aYf -aYf -aYf -aYf -arw -aYJ -aYJ -aYJ -aYJ -aYJ +aWG +aWG +aWG +aWG +aWG +aqV +aXj +aXj +aXj +aXj +aXj aaa aaa -aXn +aVO aaa aaa aaa @@ -118352,12 +113645,12 @@ aaa aaa aaa aaa -aZc -aYP -aYP -aYP -aYP -aYP +aXB +aXo +aXo +aXo +aXo +aXo aaa aaa aaa @@ -118365,13 +113658,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -118380,97 +113673,97 @@ aaa aaa abC aaa +cGc aaa aaa aaa aaa aaa aaa -aaa -bjB -bjB -bjB -bjB -bjB -bjB -aYP -aYP -aYP -aYP -bjB -bjB -bjB -aYT -aYT -aYT -cbO -cdf -cdf -cdf -cdf -cco -cbO -cbO -aYP -aYP +bhP +bhP +bhP +bhP +bhP +bhP +aXo +aXo +aXo +aXo +bhP +bhP +bhP +aXs +aXs +aXs +bYN +cae +cae +cae +cae +bZn +bYN +bYN +aXo +aXo +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chP -ciN -cjl -cjl -cks -ckW -clJ -cml -cjl -cnA -cor -cpc -cpH -cjl -crA -cjG -cte -cUn -cll -clj -cxo -cxS -cyH -cyZ -czJ -cAE -cBx -cCj -cDd -cDT -cEy -cEY -cyH -cFD -cxo -cjU -dng -coJ -dmY -dkN -cjU -cgR -cgN -cgN +cex +cfs +cfN +cfN cgS +chv +cih +ciH +cfN +cjW +ckN +clv +clY +cfN +cnL +cgh +cpl +cKq +chK +chI +ctq +ctT +cuH +cuZ +cvJ +cwE +cxx +cyi +czb +czQ +cAu +cAU +cuH +cBw +ctq +cgv +cTP +cle +cTI +cSo +cgv +cdM +cdI +cdI +cdN aaa aaa aaa @@ -118537,49 +113830,49 @@ acI acI acI acI -afx -afT -agB -ahr -aih -aiT -ahr -ahr -cYf -aCr -amH -cYm -aoq -afV -aqG -afV -alR -afq -akq -cYj -akp -akp -cYo -azY -azY -azY -azY -azY -azY -azY -azY -dam -daG -aOH -aRj -aNX -aLm -aQc -aRt -dbp -cOV -aTr -cPs +afj +afF +agn +ahd +ahQ +aiB +ahd +ahd +cLs +aBJ +amm +cLy +anT +afH +aqg +afH +alw +afc +ajX +cLv +ajW +ajW +cLA +azq +azq +azq +azq +azq +azq +azq +azq +cMy +cMO +aNA +aPQ +aMS +aKq +aON +aQa +cMX +cIP +aRX +cIT abW abW abW @@ -118588,20 +113881,20 @@ abW aaa aaa aaa -aYg -aYg -aYg -aYg -aYg -arw -aYg -aYg -aYg -aYg -aYg +aWH +aWH +aWH +aWH +aWH +aqV +aWH +aWH +aWH +aWH +aWH aaa aaa -aXn +aVO aaa aaa aaa @@ -118611,10 +113904,10 @@ aaa aaa abC aaa -aYP -aYP -aYP -aYP +aXo +aXo +aXo +aXo aaa aaa aaa @@ -118622,112 +113915,112 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw -aaa +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa +cGc aaa aaa abC aaa +cGc aaa aaa aaa aaa aaa aaa -aaa -aZc -bjB -bjB -bjB -bjB -bjB -aYP -aZc +aXB +bhP +bhP +bhP +bhP +bhP +aXo +aXB aaa aaa abC -bjB -aYT -aYT -aYT -aYT -cbO -cdg -cdA -cdf -cek -cbO -cbO -aYP -aYP -bjB +bhP +aXs +aXs +aXs +aXs +bYN +caf +cay +cae +cbi +bYN +bYN +aXo +aXo +bhP +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cjl -ckX -clL -cmm -cjl -cjl -cjl -cjl -cjl -cjl -crB -cjG -cte -cUn -ckB -dkU -cxo -cxo -cxo -cxo -cxo -cxo -cBy -cNt -cDe -cxo -cxo -cxo -cxo -cxo -cxo -chc -cln -cjU -cll -dnq -cjU -cgR -cgN -cgS -cgS +cdI +cdI +cfN +chw +cij +ciI +cfN +cfN +cfN +cfN +cfN +cfN +cnM +cgh +cpl +cKq +chb +cSt +ctq +ctq +ctq +ctq +ctq +ctq +cxy +cHI +czc +ctq +ctq +ctq +ctq +ctq +ctq +cdU +chM +cgv +chK +cTT +cgv +cdM +cdI +cdN +cdN aaa aaa aaa @@ -118794,49 +114087,49 @@ abC abC abC abC -afw -afw -afS -afS -afS -adZ -ajL -akp -akp -akp -aBC -aCr -aCr -aCr -aqj -ahr -asc -asZ -cYW -cYW -awv -cYN -ayC -azZ -aBx -aCp -aDN -aFa -aBx -aBx -aBx -aJT -aBx -aBx -aCp -daX -aOW -aQd -aRC -dbt -aTr -aUa -cPt +afi +afi +afE +afE +afE +adP +ajs +ajW +ajW +ajW +aAU +aBJ +aBJ +aBJ +apJ +ahd +ary +asu +cLM +cLM +avP +cLK +axV +azr +aAP +aBH +aDe +aEp +aAP +aAP +aAP +aJb +aAP +aAP +aBH +cMS +aNO +aOO +aQj +cMY +aRX +aSE +cIU abW abW abW @@ -118850,7 +114143,7 @@ abC abC abC abC -arw +aqV abC abC abC @@ -118879,13 +114172,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -118894,7 +114187,7 @@ aaa aaa abC aaa -aaa +cGc aaa aaa aaa @@ -118912,79 +114205,79 @@ abC aaa aaa abC -bjB -aYP -aYP -aYT -aYT -cbO -cdh -cdh -cdh -cdh -cbO -aYP -aYP -aYP +bhP +aXo +aXo +aXs +aXs +bYN +cag +cag +cag +cag +bYN +aXo +aXo +aXo +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa -aaa -aaa -aag -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cjl -cjl -cjl -cjl -cjl -cgN -cgN -cgN -cjg -cqw -crC -cjG -cte -cUn -cll -cln -cxo -cxQ -cyF -cyY -czK -cAF -cBz -cCk -cBz -cDU -cEz -cxQ -cyF -cyY -cxo -chb -cln -cjU -dnn -dnr -cjU -cgN -cgN -cgN -cgS +cdI +cdI +cfN +cfN +cfN +cfN +cfN +cdI +cdI +cdI +cfI +cmK +cnN +cgh +cpl +cKq +chK +chM +ctq +ctR +cuF +cuY +cvK +cwF +cxz +cyj +cxz +czR +cAv +ctR +cuF +cuY +ctq +cdT +chM +cgv +cTS +cTU +cgv +cdI +cdI +cdI +cdN aaa aaa aaa @@ -119051,71 +114344,71 @@ aaa aaa aaa aaa -afy -afU -agC -ahs -afV -adZ -afV -afV -cYg -cYj -aez -afV -adZ -akp -aii -aSe -aot -amJ -cYX -avj -cYA -afS -ayD -aAa -akp -akp -cZC -cYC -cYm -cYg -cYl -dav -cYj -akp -akp -auZ -akH -aQa -aRD -dbp -aTq -aUb -cOV -aTr -aTr -cPs +afk +afG +ago +ahe +afH +adP +afH +afH +cLt +cLv +aep +afH +adP +ajW +ahR +aQL +anV +amo +cLN +auD +cLE +afE +axW +azs +ajW +ajW +cMb +cLG +cLy +cLt +cLx +cMF +cLv +ajW +ajW +aut +akn +aOL +aQk +cMX +aRW +aSF +cIP +aRX +aRX +cIT abW abW aaa aaa aaa -aYe -aYe -aYe -aYe -aYe -aYA -aYe -aYe -aYe -aYe -aYe +aWF +aWF +aWF +aWF +aWF +aXb +aWF +aWF +aWF +aWF +aWF aaa aaa -aXn +aVO aaa aaa aaa @@ -119136,13 +114429,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -119169,79 +114462,79 @@ abC aaa aaa abC -arw +aqV abC -aYP -aYP -aYP -aYT -bjB -bjB -bjB -bjB -aYP -aYP +aXo +aXo +aXo +aXs +bhP +bhP +bhP +bhP +aXo +aXo aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgR -cgN -cgN -cgN -cgN -cgN -cgN -cgN -cgN -cgR -cjg -cqx -crC -cjG -cte -cVM -cvy -cln -cxo -cxR -cyI -cyY -czL -cAD -cBA -cCi -cBA -cDS -cEA -cxQ -cyF -cFC -cxo -cgL -cln -cjU -cjU -cjU -cjU -cgR -cgN -cgN -cgS +cdM +cdM +cdI +cdI +cdI +cdI +cdI +cdI +cdI +cdI +cdM +cfI +cmL +cnN +cgh +cpl +cKG +crB +chM +ctq +ctS +cuI +cuY +cvL +cwD +cxA +cyh +cxA +czP +cAw +ctR +cuF +cBv +ctq +cdG +chM +cgv +cgv +cgv +cgv +cdM +cdI +cdI +cdN aaa aaa aaa @@ -119308,71 +114601,71 @@ abC abC abC abC -afw -afw -agD -aht -afV -adZ -adZ -aez -aez -afV -aez -aez -aii -aSe -aiX -cYt -cYN -cYK -afV -aht -akp -afS -ayE -aAb -aBy -aBy -aBy -aBy -cMc -cMc -cMc -cMc -cMc -aGE -aGE -aGE -aGE -aQe -aRD -dbp -aTq -aUc -aUX -aVu -aVQ -cPt +afi +afi +agp +ahf +afH +adP +adP +aep +aep +afH +aep +aep +ahR +aQL +aiF +cLC +cLK +cLJ +afH +ahf +ajW +afE +axX +azt +aAQ +aAQ +aAQ +aAQ +cGX +cGX +cGX +cGX +cGX +aFS +aFS +aFS +aFS +aOP +aQk +cMX +aRW +aSG +aTB +aTY +aUu +cIU abW abW aaa aaa aaa -aYf -aYf -aYf -aYf -aYf -aYD -aYJ -aYJ -aYJ -aYJ -aYJ +aWG +aWG +aWG +aWG +aWG +aXe +aXj +aXj +aXj +aXj +aXj abC abC -aXn +aVO aaa aaa aaa @@ -119393,13 +114686,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +cXq +cXs +cXw +cXx +btm +aqV aaa aaa aaa @@ -119426,12 +114719,12 @@ abC aaa aaa abC -arw +aqV abC -aYP -aYP -aYP -bjB +aXo +aXo +aXo +bhP aaa aaa aaa @@ -119441,64 +114734,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgR -cgN -cjL -cjL -cjL -cgN -cgN -cgN -cgR -cgR -cjg -cqy +cdM +cdM +cdI +cgm +cgm +cgm +cdI +cdI +cdI +cdM +cdM +cfI +cmM +cnN +coE +cpy +cKq crC -csw -ctr -cUn -cvz -cln -cxo -cxS -cyH -cyZ -czM -cAE -cBz -cCl -cBz -cDT -cEB -cEY -cyH -cFD -cxo -cgL -cln -cmF -cjU -cgR -cgR -cgR -cgN -cgN -cgR +chM +ctq +ctT +cuH +cuZ +cvM +cwE +cxz +cyk +cxz +czQ +cAx +cAU +cuH +cBw +ctq +cdG +chM +cjb +cgv +cdM +cdM +cdM +cdI +cdI +cdM aaa aaa aaa @@ -119566,70 +114859,70 @@ aaa aaa aaa aaa -afV -afS -aht -afV -adZ -adZ -adZ -adZ -aez -aez -adZ -aht -cYt -cYE -cYK -afV -afS -adZ -aht -akp -afS -ayF -aAc -aBz -aCq -aDO -aFb -aGE -aHO -aIO -aJU -aGE -aLH -aGE -aNY -aGE -aQa -aRD -dbp -aTq -aUd -aUc -aVv -aVR -cPt +afH +afE +ahf +afH +adP +adP +adP +adP +aep +aep +adP +ahf +cLC +cLI +cLJ +afH +afE +adP +ahf +ajW +afE +axY +azu +aAR +aBI +aDf +aEq +aFS +aGZ +aHY +aJc +aFS +aKJ +aFS +aMT +aFS +aOL +aQk +cMX +aRW +aSH +aSG +aTZ +aUv +cIU abW abW aaa aaa aaa -aYg -aYg -aYg -aYg -aYg -aYA -aYg -aYg -aYg -aYg -aYg +aWH +aWH +aWH +aWH +aWH +aXb +aWH +aWH +aWH +aWH +aWH aaa aaa -aXn +aVO aaa aaa aaa @@ -119650,13 +114943,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -btV -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -119665,7 +114958,7 @@ aad aaa abC aaa -aaa +aag aaa aad aac @@ -119683,7 +114976,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -119698,64 +114991,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgR -cjL -cjL -cjL -cjL -cjL -cjL -cjL -cjL -cgR -cjg -cjg -crD -cjG -cte -cUn -dlB -cln -cxo -cxo -cxo -cxo -cxo -cxo -cBB -cCm -cDf -cxo -cxo -cxo -cxo -cxo -cxo -clr -cln -cjX -cjV -cjU -cjU -cjV -cjV -cjU -cgR +cdM +cdM +cgm +cgm +cgm +cgm +cgm +cgm +cgm +cgm +cdM +cfI +cfI +cnO +cgh +cpl +cKq +cSM +chM +ctq +ctq +ctq +ctq +ctq +ctq +cxB +cyl +czd +ctq +ctq +ctq +ctq +ctq +ctq +chQ +chM +cgy +cgw +cgv +cgv +cgw +cgw +cgv +cdM aaa aaa aaa @@ -119824,68 +115117,68 @@ aaa aaa aaa aaa -afV -ahu -afS -adZ -adZ -adZ -adZ -aez -aez -afS -aor -cYu -adZ -adZ -adZ -adZ -adZ -aPE -cZh -afV -ayG -aAd -cZu -aym -aym -aFc -aGE -aGE -aIP -aGE -aGE -aLI -aGE -aNZ -aGE -aQa -aRD -dbp -aTq -aUe -aUc -aUc -aVS -cPt +afH +ahg +afE +adP +adP +adP +adP +aep +aep +afE +anU +cLD +adP +adP +adP +adP +adP +aOr +cLS +afH +axZ +azv +cLW +axF +axF +aEr +aFS +aFS +aHZ +aFS +aFS +aKK +aFS +aMU +aFS +aOL +aQk +cMX +aRW +aSI +aSG +aSG +aUw +cIU abW abW -aXn -aXn +aVO +aVO aaa aaa abC aaa aaa aaa -aYE +aXf aaa aaa aaa abC aaa aaa -aXn +aVO aaa aaa aaa @@ -119907,13 +115200,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -119940,7 +115233,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -119955,64 +115248,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgR -cjL -cjL -ckY -clM -cjL -cjL -cjL -cjL -cjL -cjL -cqz -crC -cjG -cte -cUn -dlC -clo -cxo -cxQ -cyF -cyY -czN -cAG -cBz -cCn -cBz -cDV -cEC -cxQ -cyF -cyY -cxo -dlB -cln -cgL -cjU -cHk -cll -cHL -cIa -cjU -cgR +cdM +cdM +cgm +cgm +chx +cik +cgm +cgm +cgm +cgm +cgm +cgm +cmN +cnN +cgh +cpl +cKq +cSN +chN +ctq +ctR +cuF +cuY +cvN +cwG +cxz +cym +cxz +czS +cAy +ctR +cuF +cuY +ctq +cSM +chM +cdG +cgv +cDb +chK +cDC +cDR +cgv +cdM aaa aaa aaa @@ -120080,56 +115373,56 @@ aaa aaa aaa aaa -afV -afV -ahv -afS -adZ -adZ -adZ -adZ -aez -aez -afS -cYr -cYu -afV -are -are -are -are -avk -akH -are -afV -afV -aBB -akp -aym -aFd -aGE -aHP -aHP -aHP -aHP -aLJ -aHP -aHP -aGE -aQa -aRD -dbp -aTq -aUf -aUc -cMm -aVT -cPt +afH +afH +ahh +afE +adP +adP +adP +adP +aep +aep +afE +cLB +cLD +afH +aqD +aqD +aqD +aqD +auE +akn +aqD +afH +afH +aAT +ajW +axF +aEs +aFS +aHa +aHa +aHa +aHa +aKL +aHa +aHa +aFS +aOL +aQk +cMX +aRW +aSJ +aSG +cHc +aUx +cIU abW abE aaa aaa -aXn +aVO aaa abC aaa @@ -120141,7 +115434,7 @@ aaa aaa abC aaa -aXn +aVO aaa aaa aaa @@ -120164,13 +115457,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -120197,7 +115490,7 @@ abC aaa aaa abC -arw +aqV abC aaa aag @@ -120212,64 +115505,64 @@ aaa aaa aaa aac +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgR -cgR -cjL -cjL -ckZ -clN -cmn -cmU -cnB -cjL -cjL -cjL -cjL -crC -cjG -ctt -cUn -ckG -cln -cxo -cxR -cyF -cyY -czO -cAD -cBA -cCi -cBA +cdM +cdM +cdM +cgm +cgm +chy +cil +ciJ +cjq +cjX +cgm +cgm +cgm +cgm +cnN +cgh +cpA +cKq +chg +chM +ctq +ctS +cuF +cuY +cvO +cwD +cxA +cyh +cxA +czP +cAz +ctR +cuI +cBv +ctq +cBZ +chM +cmo +cCT +crB +chK +chK cDS -cED -cxQ -cyI -cFC -cxo -cGg -cln -cpX -cHc -cvy -cll -cll -cIb -cjV -cgR +cgw +cdM aaa aaa aaa @@ -120337,58 +115630,58 @@ aaa aaa aaa aaa -afV -agE -ahw -afS -adZ -adZ -adZ -adZ -adZ -afV -afV -ahv -cYu -aez -are -asd -ata -auh -avl -aww -axF -ayH -are -cZv -cZy -cZy -aFe -aGE -aHP -aIQ -aIQ -aKW -aLK -aHP -aOa -aGE -aQa -aRE -dbz -aTq -aUg -aUc -aUc -aVT -aWu +afH +agq +ahi +afE +adP +adP +adP +adP +adP +afH +afH +ahh +cLD +aep +aqD +arz +asv +atB +auF +avQ +awY +aya +aqD +cLX +cLY +cLY +aEt +aFS +aHa +aIa +aIa +aKa +aKM +aHa +aMV +aFS +aOL +aQl +cMZ +aRW +aSK +aSG +aSG +aUx +aUY abE abE aaa aaa aaa -aXn -aXn +aVO +aVO aaa aaa aaa @@ -120396,8 +115689,8 @@ abC aaa aaa aaa -aXn -aXn +aVO +aVO aaa aaa aaa @@ -120421,13 +115714,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aac @@ -120454,7 +115747,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -120469,64 +115762,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgR -cgR -cjL -cjL -cla -clO -cmo -cmV -cmV -cos -cpd -cpI -cpd -crx -csx -ctu -cUn -chb -cln -cxo -cxS -cyH -cyZ -czP -cAE -cBz -cCh -cBz +cdM +cdM +cdM +cgm +cgm +chz +cim +ciK +cjr +cjr +ckO +clw +clZ +clw +cnI +coF +cpB +cKq +cdT +chM +ctq +ctT +cuH +cuZ +cvP +cwE +cxz +cyg +cxz +czQ +cAA +cAU +cuH +cBw +ctq +cdG +chM +cCn +cgw +cDc +cDn +cDD cDT -cEE -cEY -cyH -cFD -cxo -cgL -cln -cGu -cjV -cHl -cHw -cHM -cIc -cjU -cgS +cgv +cdN aaa aaa aaa @@ -120594,51 +115887,51 @@ aaa aaa aaa aaa -afV -agF -ahx -afV -afV -afV -adZ -afV -adZ -afV -aii -aiX -cYu -adZ -arf -ase -cLS -atb -atb -atf -axG -atf -are -are -are -are -arf -are -are -aGE -aGE -aKX -aLL -aMW -aGE -aGE -aQa -aRD -dbp -aTq -aUh -aUc -aUc -aVU -aWu +afH +agr +ahj +afH +afH +afH +adP +afH +adP +afH +ahR +aiF +cLD +adP +aqE +arA +cGT +asw +asw +asz +awZ +asz +aqD +aqD +aqD +aqD +aqE +aqD +aqD +aFS +aFS +aKb +aKN +aLS +aFS +aFS +aOL +aQk +cMX +aRW +aSL +aSG +aSG +aUy +aUY abE abE aaa @@ -120647,11 +115940,11 @@ aaa aaa aaa aaa -aXn -aXn -aXn -aXn -aXn +aVO +aVO +aVO +aVO +aVO aaa aaa aaa @@ -120678,13 +115971,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +cXq +cXt +cXw +cXw +btm +aqV aaa aaa aaa @@ -120711,7 +116004,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -120726,64 +116019,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aac -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgR -cgR -cgR -cjL -cjL -clb -clO -cmp -cmW -clN -cot -cpe -cpJ -cpe -crE -cjG -ctv -cUn -cgL -cln -cxo -cxo -cxo -cxo -cxo -cxo -cBC -cCh -cDg -cxo -cxo -cxo -cxo -cxo -cxo -chb -cln -cgL -cjU -cjU -cll -cll -cll -cIv -cgS +cdI +cdM +cdM +cdM +cgm +cgm +chA +cim +ciL +cjs +cil +ckP +clx +cma +clx +cnP +cgh +cpC +cKq +cdG +chM +ctq +ctq +ctq +ctq +ctq +ctq +cxC +cyg +cze +ctq +ctq +ctq +ctq +ctq +ctq +cdT +chM +cdG +cgv +cgv +chK +chK +chK +cEm +cdN aaa aaa aaa @@ -120851,51 +116144,51 @@ aaa aaa aaa aaa -afW -agG -ahy -aii -aiU -ajM -akE -afo -aSe -aSe -any -ahs -cYu -aOF -are -cJE -atc -aui -avm -atf -avl -aww -aAe -aww -aCs -aDP -aFf -aGF -are -aIR -aJV -aKY -aLM -aJX -aOb -are -aQf -aRF -dbB -aTs -aUi +afI +ags +ahk +ahR +aiC +ajt +akk +afa +aQL +aQL +and +ahe +cLD +aNy +aqD +cFp +asx +atC +auG +asz +auF +avQ +azw +avQ +aBK +aDg +aEu +aFT +aqD +aIb +aJd +aKc +aKO +aJe +aMW +aqD +aOQ +aQm +cNa +aRY +aSM +aTC +aSG +aUz aUY -aUc -aVV -aWu abE abE aaa @@ -120935,13 +116228,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -120968,7 +116261,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -120983,64 +116276,64 @@ aaa aaa aaa aaa -aad -aac -aac -aac -aac +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cgN -cgN -cjL -cjL -clc -clO -cmq -cmX -cmX -cou -cpf -cpK -cpf -crF -cjG -ctv -cUn -cgL -cnM -cxo -cxQ -cyF -cyY -czQ -cAH -cBz -cCh -cBz -cDW -cEF -cxQ -cyF -cyY -cxo -cgL -cln -ckH -cgu -cjU -cHx -cHN -cId -cIv -cgS +cdI +cdI +cdI +cdI +cgm +cgm +chB +cim +ciM +cjt +cjt +ckQ +cly +cmb +cly +cnQ +cgh +cpC +cKq +cdG +cki +ctq +ctR +cuF +cuY +cvQ +cwH +cxz +cyg +cxz +czT +cAB +ctR +cuF +cuY +ctq +cdG +chM +chh +cdq +cgv +cDo +cDE +cDU +cEm +cdN aaa aaa aaa @@ -121108,51 +116401,51 @@ aaa aaa aaa aaa -afW -agH -ahz -ahB -aiV -ajM -akE -afo -ale -afo -afo -aov -apt -aql -are -ase -atd -auj -avn -awx -atf -atf -atf -atb -axG -aDQ -aFf -aGG -are -aIR -aJX -aKZ -aLN +afI +agt +ahl +ahn +aiD +ajt +akk +afa +akK +afa +afa +anW +aoT +apL +aqD +arA +asy +atD +auH +avR +asz +asz +asz +asw +awZ +aDh +aEu +aFU +aqD +aIb +aJe +aKd +aKP +aLT aMX -aOc -are -aQg -aRG -aSA -aTt -aUj -aUZ -aVw -aVW -cPt +aqD +aOR +aQn +aRh +aRZ +aSN +aTD +aUa +aUA +cIU abE aaa aaa @@ -121192,13 +116485,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -121225,7 +116518,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -121240,64 +116533,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgR -cgN -cgN -cjL -cjL -ckZ -clN -cmr -cmU -cnC -cjL -cjL -cjL -cjL -crG -cjG -ctv -cUn -chb -cln -cxo -cxR -cyJ -cyY -czR -cAD -cBA -cCp -cBA -cDS -cEG -cxQ -cyF -cFC -cxo -cgL -cln -cnX -cjU -cjV -cjV -cjV -cjU -cjU -cgR +cdI +cdM +cdI +cdI +cgm +cgm +chy +cil +ciN +cjq +cjY +cgm +cgm +cgm +cgm +cnR +cgh +cpC +cKq +cdT +chM +ctq +ctS +cuJ +cuY +cvR +cwD +cxA +cyn +cxA +czP +cAC +ctR +cuF +cBv +ctq +cdG +chM +ckt +cgv +cgw +cgw +cgw +cgv +cgv +cdM aaa aaa aaa @@ -121365,51 +116658,51 @@ aaa aaa aaa aaa -afW -agI -ahA -ahw -aiW -afV -afV -afV -adZ -afS -alR -aeV -cYo -cYg -are -asf -atb -atb -atb -atf -axH -cLS -aAf -atd -axG -aDR -aFf -aGF -are -aIR -aJX -aKZ -aLM -aJX -aOc -are -aQh -aRD -dbC -cOW -aTr -aTr -aTr -aTr -cPB +afI +agu +ahm +ahi +aiE +afH +afH +afH +adP +afE +alw +aeJ +cLA +cLt +aqD +arB +asw +asw +asw +asz +axa +cGT +azx +asy +awZ +aDi +aEu +aFT +aqD +aIb +aJe +aKd +aKO +aJe +aMX +aqD +aOS +aQk +cNb +cIQ +aRX +aRX +aRX +aRX +cIV abW aaa aaa @@ -121449,13 +116742,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -121467,14 +116760,14 @@ aaa aaa aaa aaa -aZt -aZt -aZt -aZf -aZI -aZf -aZf -aZf +aXS +aXS +aXS +aXE +aYh +aXE +aXE +aXE aaa aaa aaa @@ -121482,7 +116775,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -121497,64 +116790,64 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cgR -cgR -cjL -cjL -cld -clP -cjL -cjL -cjL -cjL -cjL -cjL -cqz -crH -cjG -ctv -cUn -ckG -cln -cxo -cxS -cyH -cyZ -czS -cAE -cBD -cCq -cBz -cDT -cEH -cEY -cyH -cFD -cxo -ckF -cln -cmF -cjU -cgR -cgR -cgN -cgN -cgN -cgN +cdI +cdI +cdM +cdM +cgm +cgm +chC +cin +cgm +cgm +cgm +cgm +cgm +cgm +cmN +cnS +cgh +cpC +cKq +chg +chM +ctq +ctT +cuH +cuZ +cvS +cwE +cxD +cyo +cxz +czQ +cAD +cAU +cuH +cBw +ctq +chf +chM +cjb +cgv +cdM +cdM +cdI +cdI +cdI +cdI aaa aaa aaa @@ -121622,46 +116915,46 @@ aaa aaa aaa aaa -afW -agJ -ahB -aij -aiX -afS -adZ -adZ -afV -afq -amJ -aow -cYA -adZ -are -asg -ata -ata -ata -ata -ata -ayI -aAg -aBD -aCt -aDR -aFf -cZT -are -aIR -aJX -aKZ -aLM -aJX -aOd -are -aQh -aRD -dbp -cOF +afI +agv +ahn +ahS +aiF +afE +adP +adP +afH +afc +amo +anX +cLE +adP +aqD +arC +asv +asv +asv +asv +asv +ayb +azy +aAV +aBL +aDi +aEu +cMm +aqD +aIb +aJe +aKd +aKO +aJe +aMY +aqD +aOS +aQk +cMX +cIL acH acH acH @@ -121706,13 +116999,13 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +cXq +cXt +cXw +cXy +btm +aqV aaa aaa aaa @@ -121722,24 +117015,24 @@ aaa abD aaa aaa -aZf -aZf -aZt -aZt -aZt -aZt -aZt -aZf -aZf -aZf -aZf -aZf -aZf -aZI -aZt -aZt -aZf -aZf +aXE +aXE +aXS +aXS +aXS +aXS +aXS +aXE +aXE +aXE +aXE +aXE +aXE +aYh +aXS +aXS +aXE +aXE abC aaa aaa @@ -121754,63 +117047,63 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cgR -cgR -cjL -cjL -cjL -cjL -cjL -cjL -cjL -cjL -cgN -cgN -cjg -crC -cjG -ctv -cUn -cgL -cln -cxo -cxo -cxo -cxo -cxo -cAI -cBE -cBE -cBE -cAI -cxo -cxo -cxo -cxo -cxo -chc -cln -cgL -cgu -cgR -cgR -cgN -cgN -cgN +cdI +cdI +cdM +cdM +cgm +cgm +cgm +cgm +cgm +cgm +cgm +cgm +cdI +cdI +cfI +cnN +cgh +cpC +cKq +cdG +chM +ctq +ctq +ctq +ctq +ctq +cwI +cxE +cxE +cxE +cwI +ctq +ctq +ctq +ctq +ctq +cdU +chM +cdG +cdq +cdM +cdM +cdI +cdI +cdI aaa aaa aaa @@ -121879,46 +117172,46 @@ aaa aaa aaa aaa -afW -agK -ahC -aik -afS -afS -adZ -adZ -afV -afq -amK -afS -adZ -adZ -are -ash -atf -auk -avo -awy -awy -ayJ -aAh -atf -axG -aDS -are -are -are -are -are -aKZ -aLM -are -are -are -aQi -aRD -dbp -cOF +afI +agw +aho +ahT +afE +afE +adP +adP +afH +afc +amp +afE +adP +adP +aqD +arD +asz +atE +auI +avS +avS +ayc +azz +asz +awZ +aDj +aqD +aqD +aqD +aqD +aqD +aKd +aKO +aqD +aqD +aqD +aOT +aQk +cMX +cIL acH acH acH @@ -121956,50 +117249,50 @@ aaa aaa aaa aaa -aaa +cGc aaa aaa abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXz +cXI +aqV aaa aaa aaa aaa aaa aaa -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZf -aZf -aZf -aZt -aZt -aZt +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXE +aXE +aXE +aXS +aXS +aXS aaa aaa aaa @@ -122011,63 +117304,63 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgN -cgN -cgN -cgN -cgN -cjL -cjL -cjL -cgN -cgN -cgN -cgN -cgN -cgN -ckN -crI -cst -ctv -cVX -cgL -cjt -clg -cxT -cmA -chc -czT -cAJ -cAK -cAK -cAK -cDX -cEI -cEZ -cFq -czT -cFP -cGh -coD -cgL -chc -cgR -cgR -cgN -cgN -cgN +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cdM +cdI +cdI +cdI +cdI +cdI +cgm +cgm +cgm +cdI +cdI +cdI +cdI +cdI +cdI +chm +cnT +coB +cpC +cKH +cdG +cfV +chF +ctU +ciW +cdU +cvT +cwJ +cwK +cwK +cwK +czU +cAE +cAV +cBl +cvT +cBI +cCa +ckZ +cdG +cdU +cdM +cdM +cdI +cdI +cdI aaa aaa aaa @@ -122136,193 +117429,193 @@ aaa aaa aaa aaa -afV -agL -ahw -ail -afS -adZ -adZ -adZ -adZ -afq -amM -adZ -apv -apv -apv -asi -atg -aul -apv -apv -cJI -ayK -aAi -aBE -aCu -aDT -aFg -aFg -aHQ -aIS -aJY -aDT -aLO -aFg -aFg -aOX -aQj -aRH -dbp -cOF -acH -acH -acH -acH -aUk -aUk -aUk -aUk -aUk -aUk -aUk -abC -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aaa -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -arw -bpN -cRM -arz -aSQ -bvv -arw -aaa -aaa -aaa -aZf -aZt -aZt -aZt -aZH -aZH -aZH -aZt -aZt -aZt -aZt -aZt -aZt -aZH -aZH -aZH -aZH -aZt -aZt -aZt -aZt -aZf -aZf -aZf -aZf -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cgN -cgN -cgR -cgR -cgR -cgR -cgN -cmY -cmY -cmY -cmY -cmY -cjg -crJ -csu -ctw -cUn -cjX -dlE -cln -cll -cxT -cpX -czU -cAK -cBF -cAK -cBF -cAK -cEJ -cEZ +afH +agx +ahi +ahU +afE +adP +adP +adP +adP +afc +amr +adP +aoV +aoV +aoV +arE +asA +atF +aoV +aoV cFr -cFE -cFQ -cGi -cgL -cGu -cjU -cgN -cgN -cgN +ayd +azA +aAW +aBM +aDk +aEv +aEv +aHb +aIc +aJf +aDk +aKQ +aEv +aEv +aNP +aOU +aQo +cMX +cIL +acH +acH +acH +acH +aSO +aSO +aSO +aSO +aSO +aSO +aSO +abC +aaa +aaa +aaa +aaa +aaa +aab +aab +aab +aaa +aab +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aqV +bnO +cJw +cXw +cXz +cXI +aqV +aaa +aaa +aaa +aXE +aXS +aXS +aXS +aYg +aYg +aYg +aXS +aXS +aXS +aXS +aXS +aXS +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aXS +aXE +aXE +aXE +aXE +aXS +aXS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +cdI +cdI +cdI +cdI +cdM +cdM +cdM +cdM +cdI +cju +cju +cju +cju +cju +cfI +cnU +coC +cpD +cKq +cgy +cSO +chM +chK +ctU +cmo +cvU +cwK +cxF +cwK +cxF +cwK +cAF +cAV +cBm +cBx +cBJ +cCb +cdG +cCn +cgv +cdI +cdI +cdI aaa aaa aaa @@ -122393,57 +117686,57 @@ aaa aaa aaa aaa -afV -agM -ahD -ahw -afV -adZ -adZ -adZ -afS -afq -amK -afV -apv -aqn -arg -asj -ath -aum -arg -awz -apv -ayL -aAj -aBF -awy -aDU -awy -awy -aHR -aIT -awy -aDU -awy -awy -awy -aOY -aQk -aRI -dbz -aTu -aUk -aUk -aUk -aUk -aUk -aWK -aWL -aXo -aXG -aXU -aUk +afH +agy +ahp +ahi +afH +adP +adP +adP +afE +afc +amp +afH +aoV +apN +aqF +arF +asB +atG +aqF +avT +aoV +aye +azB +aAX +avS +aDl +avS +avS +aHc +aId +avS +aDl +avS +avS +avS +aNQ +aOV +aQp +cMZ +aSa +aSO +aSO +aSO +aSO +aSO +aVn +aVo +aVP +aWh +aWv +aSO abC aaa aaa @@ -122477,45 +117770,45 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXz +cXI +aqV aaa aaa aaa -aZt -aZt -bAd -bAd -bBN -bBN -bBN -bBN -bBN -bBN -bAd -bAd -byS -cMH -byS -bBN -aZH -aZH -aZt -aZt -aZt -aZt -byS -cae -byS -aZt -aZt -aZt -aZt +aXS +aXS +bxK +bxK +bzs +bzs +bzs +bzs +bzs +bzs +bxK +bxK +bwA +cHu +bwA +bzs +aYg +aYg +aXS +aXS +aXS +aXS +bwA +bXe +bwA +aXS +aXS +aXS +aXS aaa aaa aaa @@ -122525,6 +117818,62 @@ aaa aad aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +cdM +cdI +cft +cft +cft +cft +cft +cdI +cdI +cju +cjZ +ckR +clz +cmc +cmO +cnV +cgh +cpC +cKq +cdU +ctU +cfV +cSs +cuK +cdU +cvT +cwL +cxG +cyp +cxG +czV +cAE +cAV +cBn +cvT +ckh +ckZ +cdG +cdG +cgv +cdM +cdM +cdI +cdI aaa aaa aaa @@ -122535,77 +117884,21 @@ aaa aaa aaa aaa -aaa -aaa -cgR -cgN -ciO -ciO -ciO -ciO -ciO -cgN -cgN -cmY -cnD -cov -cpg -cpL -cqA -crK -cjG -ctv -cUn -chc -cxT -cjt -dkS -cyK -chc -czT -cAL -cBG -cCr -cBG -cDY -cEI -cEZ -cFs -czT -cnL -coD -cgL -cgL -cjU -cgR -cgR -cgN -cgN -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -122650,57 +117943,57 @@ aaa aaa aaa aaa -afV -afV -ahv -afV -afV -adZ -adZ -adZ -alP -akq -amK -afV -apv -aqo -arh -ask -ath -aun -avp -awA -axI -axI -axI -aBG -aCv -aDV -axI -axI -axI -axG -atf -aLa -atf -atf -atf -aOZ -aQl -aRF -dbB -aTv -aUl -aVa -aVx -aVX -aWv -cKg -aWv -aWv -aWv -aXV -aUk +afH +afH +ahh +afH +afH +adP +adP +adP +alu +ajX +amp +afH +aoV +apO +aqG +arG +asB +atH +auJ +avU +axb +axb +axb +aAY +aBN +aDm +axb +axb +axb +awZ +asz +aKe +asz +asz +asz +aNR +aOW +aQm +cNa +aSb +aSP +aTE +aUb +aUB +aUZ +cFK +aUZ +aUZ +aUZ +aWw +aSO abC aaa aaa @@ -122734,125 +118027,110 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -btW -bvv -arw -aaa -aaa -aaa -aZt -bAd -byS -byS -bDa -cMH -byS -bBN -byS -byS -cMH -byS -bxu -dge -bAe -bAd -cMH -byS -bAd -bBN -aZH -aZt -cMH -bYK -byS -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cgR -cgN -ciO -cjn -cjM -ckt -ciO -cgR -cgN -cmY -cnE -cow -cph -cpM -cqB -crL -cjG -ctv -cUn -cjU -ckB -dkQ -dlL -chc -cjU -czT -czT -czT -czT -czT -czT -czT -czT -czT -czT -cln -cgL -cgL -cmA -cjU -cgR -cgR -cgN -cgN -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aqV +bnO +cJw +cXw +cXz +cXI +aqV aaa aaa aaa +aXS +bxK +bwA +bwA +bAA +cHu +bwA +bzs +bwA +bwA +cHu +bwA +bvh +cQj +bxL +bxK +cHu +bwA +bxK +bzs +aYg +aXS +cHu +bVL +bwA +aXS +aXS +aXS +aXS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +cdM +cdI +cft +cfP +cgn +cgT +cft +cdM +cdI +cju +cka +ckS +clA +cmd +cmP +cnW +coH +cYb +cKq +cgv +chb +cSq +cSS +cdU +cgv +cvT +cvT +cvT +cvT +cvT +cvT +cvT +cvT +cvT +cvT +chM +cdG +cdG +ciW +cgv +cdM +cdM +cdI +cdI aaa aaa aaa @@ -122863,6 +118141,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -122908,208 +118201,193 @@ aaa aaa aaa aaa -afV -ahu -afV -adZ -adZ -adZ -adZ -alQ -amJ -anz -adZ -apv -apv -apv -ask -ath -auo -apv -apv -axI -ayM -aAk -aBH -aCw -aDW -aAk -aGH -axI -aIU -aJZ -aLb -aJZ -aMY -cJZ -are -aQm -aRJ -dbI -aTw -aUm -aVb -aVy -aVY -aWw -aWL -aWw -aXp -aXH -aXW -aUk -abC -aaa -aaa -aaa -aaa -aaa -aad -aac -aab -aad -aab -aab -aad -aac -aac -aab -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -arw -bpN -cRM -arz +afH +ahg +afH +adP +adP +adP +adP +alv +amo +ane +adP +aoV +aoV +aoV +arG +asB +atI +aoV +aoV +axb +ayf +azC +aAZ +aBO +aDn +azC +aFV +axb +aIe +aJg +aKf +aJg +aLU +cFD +aqD +aOX +aQq +cNc +aSc aSQ -bvv -arw -aaa -aaa -aZf -aZt -bAd -byS -bFo -byQ -dhc -byS -cMH -cMH -cbr -dfU -dgQ -dhZ -cbr -cbr -cbr -diU -diX -bWU -byS -bAd -byS -byS -dji -cMH -aZH -aZt -aZt -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aTF +aUc +aUC +aVa +aVo +aVa +aVQ +aWi +aWx +aSO +abC aaa aaa aaa aaa aaa aad +aac +aab +aad +aab +aab +aad +aac +aac +aab +aaa +aaa +aaa +aaa +abC aaa aaa aaa aaa aaa -cgN -ciO -cjo -cjM -cku -ciO -cgR -cgN -cmY -cnF -cox -cpi -cpN -cqA -crM -cjG -ctx -cUn -cjU -cll -dkQ -dlM -dkS -cjU -cjU -chc -chc -cCs -chc -chc -cjU -chc -cjU -cnL -coD -chb -cjU -cjU -cjU -cgR -cgR -cgN -cgN -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aqV +cXq +cXs +cXw +cXA +btm +aqV +aaa +aaa +aXE +aXS +bxK +bwA +bCI +bwy +cQI +bwA +cHu +cHu +bYq +cQe +cQC +cRq +bYq +bYq +bYq +cRJ +cRL +bTV +bwA +bxK +bwA +bwA +cRS +cHu +aYg +aXS +aXS +aXS +aXS +aXS +aXS +aaa +aaa +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +cdI +cft +cfQ +cgn +cgU +cft +cdM +cdI +cju +ckb +ckT +clB +cme +cmO +cnX +cgh +cpE +cKq +cgv +chK +cSq +cST +cSs +cgv +cgv +cdU +cdU +cyq +cdU +cdU +cgv +cdU +cgv +ckh +ckZ +cdT +cgv +cgv +cgv +cdM +cdM +cdI +cdI aaa aaa aaa @@ -123120,6 +118398,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -123164,57 +118457,57 @@ aaa aaa aaa aaa -afV -afS -aht -afS -adZ -adZ -adZ -adZ -cYk -amK -aez -aez -apv -aqn -ari -ask -ath -auo -arg -awz -axI -ayN -aAl -aBI -aCw -aDX -aFh -aGI -axI -aIV -aIW -aLc -aIW -aMZ -are -aPa -aQh -aRD -aSB -aTx -aUn -aVc -aVz -aVZ -aWx -cKh -aWw -aWw -aWw -aWL -aUk +afH +afE +ahf +afE +adP +adP +adP +adP +cLw +amp +aep +aep +aoV +apN +aqH +arG +asB +atI +aqF +avT +axb +ayg +azD +aBa +aBO +aDo +aEw +aFW +axb +aIf +aIg +aKg +aIg +aLV +aqD +aNS +aOS +aQk +aRi +aSd +aSR +aTG +aUd +aUD +aVb +cFL +aVa +aVa +aVa +aVo +aSO abC aaa aaa @@ -123248,48 +118541,48 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXz +cXI +aqV aaa aaa -aZt -bAd -bAd -byQ -bEj -dpl -dpm -dpn -dpo -dpp -dpq -dpr -dps -dpt -dpu -dpv -dpw -dpx -dpy -dpz -dpB -dpD -dpF -dpH -caf -bBN -bBN -aZt -aZt -aZt -aZt -aZt -aZt +aXS +bxK +bxK +bwy +bBI +cUT +cUT +cUU +cUV +cUW +cUX +cUY +cUY +cUY +cUZ +cUY +cUY +cUZ +cUY +cUY +cUY +cUY +cUZ +cUZ +bXf +bzs +bzs +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -123309,49 +118602,49 @@ aaa aaa aaa aaa -cgN -ciO -cjp -cjN -ckv -ciO -cgR -cgN -cmY -cnG -cnG -cmY -cpO -cmY -cjF -cjG -ctv -cUn -cjU -dlF -chc -chb -cjt -cjT -cjT -cjT -cBH -cCt -cjT -dmv -cEK -dlf -cjT -coD -cgL +cdI +cft +cfR +cgo +cgV +cft +cdM +cdI +cju +ckc +ckc +cju +cmf +cju +cgg +cgh +cYc +cKq +cgv +cSP +cdU +cdT +cfV cgu cgu -cgR -cgR -cgR -cgN -cgN -cgN +cgu +cxH +cyr +cgu +cTq +cAG +cSz +cgu +ckZ +cdG +cdq +cdq +cdM +cdM +cdM +cdI +cdI +cdI aaa aaa aaa @@ -123362,21 +118655,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aac -aad -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -123421,57 +118714,57 @@ aaa aaa aaa aaa -afV -agN -aht -afS -adZ -adZ -adZ -afS -alR -amL -afS -aez -apv -aqp -arj -asl -ath -aup -avq -awB -axI -axI -axI -aBI -aCw -aDY -axI -axI -axI -cJQ -aIW -aIW -aIW -aIW -are -aPb -aQh -aRD -aSm -aTu -aUk -aUk -aUk -aUk -aUk -aWN -aWL -aXq -aWL -aXU -aYh +afH +agz +ahf +afE +adP +adP +adP +afE +alw +amq +afE +aep +aoV +apP +aqI +arH +asB +atJ +auK +avV +axb +axb +axb +aBa +aBO +aDp +axb +axb +axb +cFx +aIg +aIg +aIg +aIg +aqD +aNT +aOS +aQk +aQT +aSa +aSO +aSO +aSO +aSO +aSO +aVp +aVo +aVR +aVo +aWv +aWI abC aaa aaa @@ -123505,48 +118798,48 @@ abC aaa aaa aaa -arw -bpN +aqV +bnO +cJw +cXw +cXz +cXI +aqV +aaa +aaa +aXS +bzs +cHu +bAB +bBJ +bDV +bDV +bDV +bDV +bDV +bDV +bDV +bxK +cHu +bwA +bxK +cRH +cRK cRM -arz -aSQ -bvv -arw -aaa -aaa -aZt -bBN -cMH -bDb -bEk -bGE -bGE -bGE -bGE -bGE -bGE -bGE -bAd -cMH -byS -bAd -diS -diW -diY -cbr -cbr -djb -diU -cbr -dpJ -dpL -bAd -aZt -aZt -aZt -aZt -aZt -aZt +bYq +bYq +cRP +cRJ +bYq +cVb +cVd +bxK +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -123566,48 +118859,48 @@ aaa aaa aaa aaa -cgN -ciO -ciO -cjO -ckw -ciO -ciO -cgN -cgN +cdI +cft +cft +cgp +cgW +cft +cft +cdI +cdI abC abC -cmY -cpP -cmY -cjF -cjG -ctv -cUn -cgN -dlG -cjU -ckz -cgL -cgL -cgL -ckH -cgL -ckz -cgL -cjt -cng -coD -cgL -cgL -ckz -cjU -cgR -cgR -cgR -cgR -cgN -cgN +cju +cmg +cju +cgg +cgh +cYc +cKq +cdI +cSQ +cgv +cgZ +cdG +cdG +cdG +chh +cdG +cgZ +cdG +cfV +cjC +ckZ +cdG +cdG +cgZ +cgv +cdM +cdM +cdM +cdM +cdI +cdI aaa aaa aaa @@ -123619,21 +118912,21 @@ aaa aaa aaa aaa -aaa -aaa -aad -aab -aac -aac -aac -aac -aac -aab -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -123678,57 +118971,57 @@ aaa aaa aaa aaa -afV -agO -ahE -afS -adZ -adZ -adZ -aez -alS -amM -afV -aez -apv -apv -apv -asm -ath -aup -apv -apv -axI -ayM -aAk -aBI -aCw -aDY -aAk -aGJ -axI -aIX -aKa -aLd -aLP -aNa -are -aPc -aQh -aRD -aSl -cOF +afH +agA +ahq +afE +adP +adP +adP +aep +alx +amr +afH +aep +aoV +aoV +aoV +arI +asB +atJ +aoV +aoV +axb +ayf +azC +aBa +aBO +aDp +azC +aFX +axb +aIh +aJh +aKh +aKR +aLW +aqD +aNU +aOS +aQk +aQS +cIL acH acH acH acH -aUk -aUk -aUk -aUk -aUk -aUk -aUk +aSO +aSO +aSO +aSO +aSO +aSO +aSO abC aaa aaa @@ -123762,48 +119055,48 @@ abC aaa aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw +aqV +bnO +cJw +cXw +cXz +cXI +aqV aaa -aZt -aZt -bBN -byS -byQ -bEk -bGE -bHH -bHH -bKY -bMv -bHH -bOM -bOM -bOM -bOM -bOM -bOM -bOM -bOM -bOM -bOM -bOM -bOM -bOM -dgQ -dpM -byS -bAd -bBN -cMH -byS -bAd -aZt +aXS +aXS +bzs +bwA +bwy +bBJ +bDV +bEY +bEY +bIm +bJI +bEY +bLU +bLU +bLU +bLU +bLU +bLU +bLU +bLU +bLU +bLU +bLU +bLU +bLU +cQC +cVe +bwA +bxK +bzs +cHu +bwA +bxK +aXS aaa aaa aaa @@ -123824,47 +119117,47 @@ aaa aaa aaa aaa -cgR -ciO -cjP -ckx -cle -ciO -cgR -cgN +cdM +cft +cgq +cgX +chD +cft +cdM +cdI aaa aaa -cmY -cpQ -cmY -crN -cjG -cty -cWe -cgN -cgN -cjU -cjV -cjU -cjX -cgL -ckH -cgL -cjU -cgL -cxT -cxT -cgL -cjX -cjU -cjU -cjU -cgR -cgR -cgR -cgR -cgN -cgN +cju +cmh +cju +cnY +cgh +cpF +cKI +cdI +cdI +cgv +cgw +cgv +cgy +cdG +chh +cdG +cgv +cdG +ctU +ctU +cdG +cgy +cgv +cgv +cgv +cdM +cdM +cdM +cdM +cdI +cdI aaa aaa aaa @@ -123876,21 +119169,21 @@ aaa aaa aaa aaa -aaa -aaa -aad -aad -aac -aac -aac -aac -aac -aad -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -123935,46 +119228,46 @@ aaa aaa aaa aaa -afV -agP -afS -afS -adZ -adZ -adZ -afV -alT -amN -anA -adZ -apv -aqq -arg -asl -ath -aup -arg -awz -axI -ayO -aAm -aBJ -aCw -aDZ -aFi -aGK -axI -are -are -arf -are -are -are -are -aQn -cMk -aSC -cOF +afH +agB +afE +afE +adP +adP +adP +afH +aly +ams +anf +adP +aoV +apQ +aqF +arH +asB +atJ +aqF +avT +axb +ayh +azE +aBb +aBO +aDq +aEx +aFY +axb +aqD +aqD +aqE +aqD +aqD +aqD +aqD +aOY +cHa +aRj +cIL acH acH abE @@ -124009,59 +119302,59 @@ aaa abC abC abC -aZd -aZd -aZd -aZd -aZe -aZf -aZI -aZf +aXC +aXC +aXC +aXC +aXD +aXE +aYh +aXE aaa aaa -arw -bpN -cRM -arz -aSQ -bvv -arw -aZt -aZt -aZt -bAd -bAd -byQ -dpk -bGE -bHI -bJv -bKZ -bMw -bMw -bOM -bQn -bRm -bQn -bOM -bUC -bVB -bUC -bOM -bXG -bYp -bXG -bOM -cbr -dpN -dpP -cMH -byS -cbr -cdi -byS -byS -byS +aqV +bnO +cJw +cXw +cXz +cXI +aqV +aXS +aXS +aXS +bxK +bxK +bwy +cUS +bDV +bEZ +bGM +bIn +bJJ +bJJ +bLU +bNt +bOr +bNt +bLU +bRF +bSE +bRF +bLU +bUH +bVq +bUH +bLU +bYq +cVb +cVd +cHu +bwA +bYq +cah +bwA +bwA +bwA abC abC abC @@ -124081,47 +119374,47 @@ abC abC abC abC -ciO -ciO -ciO -cky -clf -ciO -cgR -cgN +cft +cft +cft +cgY +chE +cft +cdM +cdI aaa aaa aaa -arw -cjg -cjh -cji -ctz -cjg -cgN -cgN -chc -cgR -cjU -cgu -cgu -cjU -cjU -cjU -chc -dmw -cjU -cjU -cjU -cjU -cgR -cgR -cgR -cgR -cgR -cgR -cgN -cgN +aqV +cfI +cfJ +cfK +cpG +cfI +cdI +cdI +cdU +cdM +cgv +cdq +cdq +cgv +cgv +cgv +cdU +cTr +cgv +cgv +cgv +cgv +cdM +cdM +cdM +cdM +cdM +cdM +cdI +cdI aaa aaa aaa @@ -124133,21 +119426,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aad -aac -aac -aac -aac -aac -aab -aab -aad -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -124192,51 +119485,51 @@ aaa aaa aaa aaa -afV -agQ -afV +afH +agC +afH abW abW -adZ -adZ -afV -aez -afq -amK -adZ -apv -aqr -ark -asn -ati -aup -avr -awC -axI -axI -axI -aBK -aCw -aDZ -axI -axI -axI +adP +adP +afH +aep +afc +amp +adP +aoV +apR +aqJ +arJ +asC +atJ +auL +avW +axb +axb +axb +aBc +aBO +aDq +axb +axb +axb abW abW abW abW abW abW -aLm -aQh -aRD -aSl -cOF +aKq +aOS +aQk +aQS +cIL acH abE abE abE -aWy +aVc aaa aaa aaa @@ -124263,66 +119556,66 @@ aaa abC abC abC -aZd -aZd -aZd -baJ -aZr -aZC -bhA -cKj -aZt -aZt -aZf -aZf +aXC +aXC +aXC +aZi +aXQ +aYb +bfR +cFM +aXS +aXS +aXE +aXE aaa -arw -bpN -cRM -arz -aSQ -bvv -arw -aZt -aZt -aZH -bAd -bAd -bEi -bEk -bGE -bHJ -bHJ -bKZ -bMx -bMx -bOM -bQn -bRn -bQn -bOM -bUC -bVC -bUC -bOM -bXG +aqV +cXq +cXs +cXw +cXz +btm +aqV +aXS +aXS +aYg +bxK +bxK +bBH +bBJ +bDV +bFa +bFa +bIn +bJK +bJK +bLU +bNt +bOs +bNt +bLU +bRF +bSF +bRF +bLU +bUH +bVr +bUH +bLU +bwA +cQe +cVb +cVd +bwA bYq -bXG -bOM -byS -dfU -dpQ -dpS -byS -cbr -dgD -cdB -bLA -cdB -aZf -arw -arw -arw +cQv +caz +bIO +caz +aXE +aqV +aqV +aqV abC abC abC @@ -124334,51 +119627,51 @@ aaa aaa abC abC -arw -arw -arw -arw -ciP -cjq -cjQ -ckw -ciO -ciO -cgR -cgN +aqV +aqV +aqV +aqV +cfu +cfS +cgr +cgW +cft +cft +cdM +cdI aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -cgN -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgN -cgN -cgN -cgN -cgN +aqV +cmQ +cXY +cXY +cKv +cqp +cdI +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdI +cdI +cdI +cdI +cdI aaa aaa aaa @@ -124390,21 +119683,21 @@ aaa aaa aaa aaa -aad -aaa -aaa -aac -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -124455,40 +119748,40 @@ abW abW abW abW -adZ -aez -afV -afq -amK -afV -apv -apv -apv -apv -atj -apv -apv -apv -axI -ayM -aAk -aBJ -aCw -aDZ -aAk -aGH -aHS -aHS -aHS -aHS -aHS -aHS +adP +aep +afH +afc +amp +afH +aoV +aoV +aoV +aoV +asD +aoV +aoV +aoV +axb +ayf +azC +aBb +aBO +aDq +azC +aFV +aHd +aHd +aHd +aHd +aHd +aHd abW -aLm -aQh -aRD -aSx -cOF +aKq +aOS +aQk +aRe +cIL abE abE abE @@ -124517,66 +119810,66 @@ aaa aaa abC abC -aZd -aZd -aZd -bcO -bbk -bed -beP -bck -bgB -bhB -aZe -aZt -aZt -aZf -aZf +aXC +aXC +aXC +bbm +aZJ +bcy +bdk +baJ +beS +bfS +aXD +aXS +aXS +aXE +aXE aaa -arw -bpN -cRM -arz -aSQ -bvv -arw -aZf -aZt -aZH -bAd -cMH -byQ -bEk -bGE -bHK -bHK -bKZ -bMy -bMy -bOM -bQo -bRo -bSv -bOM -bUD -bVD -bWq -bOM -bXH -bYr -bZb -bOM -bAd -diS -djs -dpT -dpW -dpY -dqa -cMH -cMH -byS -aZI +aqV +bnO +cJw +cXw +cXz +cXI +aqV +aXE +aXS +aYg +bxK +cHu +bwy +bBJ +bDV +bFb +bFb +bIn +bJL +bJL +bLU +bNu +bOt +bPz +bLU +bRG +bSG +bTr +bLU +bUI +bVs +bWc +bLU +bxK +cRH +cRW +cVf +cUW +cUX +cVd +cHu +cHu +bwA +aYh abC abC abC @@ -124594,48 +119887,48 @@ aaa abC abC abC -cim -ciO -ciO -ciO -ciO -ciO -cgR -cgR -cgN +ceR +cft +cft +cft +cft +cft +cdM +cdM +cdI aaa aaa aaa -arw -cqC -aQS -arz -dlz -cuk -cgN -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgN -cgN -cgN -cgN -cgN +aqV +cmQ +cXY +cXY +cKv +cqp +cdI +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdI +cdI +cdI +cdI +cdI aaa aaa aaa @@ -124647,21 +119940,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aad -aac -aac -aab -aac -aac -aad -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -124713,39 +120006,39 @@ abW abW acH acH -aez -afS -awZ -amK -afS -adZ -cYg -arl -cYj -aiS -auq -aoq -awD -axI -ayP -aAn -aBL -aCx -aDZ -aFj -aGL -aHS -aIY -aKb -aLe -aLQ -aHS +aep +afE +awt +amp +afE +adP +cLt +aqK +cLv +aiA +atK +anT +avX +axb +ayi +azF +aBd +aBP +aDq +aEy +aFZ +aHd +aIi +aJi +aKi +aKS +aHd abW -aLm -aQo -aRD -aSl -aTy +aKq +aOZ +aQk +aQS +aSe abE abE abE @@ -124772,68 +120065,68 @@ aaa aaa aaa abC -aZd -aZd -aZr -aZC -aZQ -bbj -bbj -aZC -beQ -bfK -cMo -bhC -aZe -aZt -aZt -aZf -aZf -aZf -arw -bpN -cRM -arz -aSQ -bvv -arw -aZf -aZt -aZH -bBN -bCZ -bEj -bEl -bGE -bGE -bGE -bLa -bGE -bGE -bOM -bQp -bRp -bSw -bOM -bQp -bRp -bWr -bOM -bXI -bRp -bZc -bOM -bGE -cMH -cMH -byS -cMH -dfU -dqb -byS -byS -aZt -aZt +aXC +aXC +aXQ +aYb +aYp +aZI +aZI +aYb +bdl +beb +cHe +bfT +aXD +aXS +aXS +aXE +aXE +aXE +aqV +bnO +cJw +cXw +cXz +cXI +aqV +aXE +aXS +aYg +bzs +bAz +bBI +bBK +bDV +bDV +bDV +bIo +bDV +bDV +bLU +bNv +bOu +bPA +bLU +bNv +bOu +bTs +bLU +bUJ +bOu +bWd +bLU +bDV +cHu +cHu +bwA +cHu +cQe +cVj +bwA +bwA +aXS +aXS aaa aaa aaa @@ -124852,43 +120145,43 @@ aaa aaa aaa aaa -cgN -cgN -cgN -cgN -cgN -cgN -cgN -cgN +cdI +cdI +cdI +cdI +cdI +cdI +cdI +cdI aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -aXR +aWs aaa -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgN +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdI aaa aaa aaa @@ -124904,21 +120197,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -124971,38 +120264,38 @@ abW acH acH acH -afV -afS -anB -aox -apw -aox -aox -aox -atk -aur -cYN -awE -afV -axI -axI -axI -aCy -aEa -aEa -aEa -aHS -aIZ -aKc -aLf -aLR -aHS +afH +afE +ang +anY +aoW +anY +anY +anY +asE +atL +cLK +avY +afH +axb +axb +axb +aBQ +aDr +aDr +aDr +aHd +aIj +aJj +aKj +aKT +aHd abW -aLm -aQp -aRD -aSl -aTy +aKq +aPa +aQk +aQS +aSe abE abE abE @@ -125028,69 +120321,69 @@ aaa aaa aaa abC -aZN -baf -baG -baj -aZQ -bck -aZQ -aZQ -aZQ -beR -bfL -bfL -bhD -aZe -aZH -aZt -aZt -aZt +aYm +aYE aZf -boo -bpO -cRM -arz -aSQ -bvw -bwY -aZf -aZt -bAd -byS -bAf -bEk -bAd -bGE -bHL -bJw -bJx -bJx -bGE -bON -bQq -bOO -bSx -bTA -bQq -bOO -bSx -bWV -bXJ -bOO -bZd -bZF -bGE -cbr -cMV -cbr -byS -cbr -dqc -djm -bAd -aZt -aZt +aYI +aYp +baJ +aYp +aYp +aYp +bdm +bec +bec +bfU +aXD +aYg +aXS +aXS +aXS +aXE +bmu +bnP +cJw +cXw +cXz +btn +buL +aXE +aXS +bxK +bwA +bxM +bBJ +bxK +bDV +bFc +bGN +bGO +bGO +bDV +bLV +bNw +bLW +bPB +bQE +bNw +bLW +bPB +bTW +bUK +bLW +bWe +bWF +bDV +bYq +cHy +bYq +bwA +bYq +cVj +cRV +bxK +aXS +aXS aaa aaa aaa @@ -125112,38 +120405,38 @@ aaa aaa aaa aaa -cgN -cgN -cgN -cgN -cgN +cdI +cdI +cdI +cdI +cdI aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -aXR +aWs aaa aaa aaa aaa aaa -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgN +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdI aaa aaa aaa @@ -125161,21 +120454,21 @@ aaa aaa aaa aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -125228,38 +120521,38 @@ acH acH acH acH -afV -afV -anC -afq -afq -afq -alS -afq -aqG -aus -akp -awF -aSe -aSe -aSe -aSe -aSe -aEb -aFk -aGM -aHT -aJa -aKd -aLg -aLS -aHS +afH +afH +anh +afc +afc +afc +alx +afc +aqg +atM +ajW +avZ +aQL +aQL +aQL +aQL +aQL +aDs +aEz +aGa +aHe +aIk +aJk +aKk +aKU +aHd abW -aLm -cOy -aRD -aSl -aTy +aKq +cIE +aQk +aQS +aSe abE abE abE @@ -125285,69 +120578,71 @@ aaa aaa aaa abC -aZN -aZC -baH -baH -aZQ -aZQ -bah -aZQ -aZQ -beR -bfL -bfL -bhE -cKk -aZH -aZH -aZH -aZH -bal -bop -bal -cSr -bao -btX -bal -bwZ -bal -aZt -bAd -cMH -byQ -dgP -bFp -bGF -bHM -bJx -bJx -bJx -bNv -bOO -bQq -bOO -bSy -bSy -bQq -bOO -bSy -bSy -bXJ -bOO -bZe -bXJ -bGE -cMP -cbr -dgD -cNc -dht -dqd -djO -byS -aZH -aZt +aYm +aYb +aZg +aZg +aYp +aYp +aYG +aYp +aYp +bdm +bec +bec +bfV +cFN +aYg +aYg +aYg +aYg +aYK +bmv +aYK +cJx +aYN +brR +aYK +buM +aYK +aXS +bxK +cHu +bwy +cQB +bCJ +bDW +bFd +bGO +bGO +bGO +bKF +bLW +bNw +bLW +bPC +bPC +bNw +bLW +bPC +bPC +bUK +bLW +bWf +bUK +bDV +cHw +bYq +cQv +cHA +cQT +cVj +cSc +bwA +aYg +aXS +aXS +aXS aaa aaa aaa @@ -125375,47 +120670,30 @@ aaa aaa aaa aaa +aqV +cXX +cXZ +cXY +cYd +cXX aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgN -cgN -cgN -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa aaa +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdI +cdI +cdI aaa aaa aaa @@ -125433,6 +120711,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -125485,38 +120778,38 @@ acH acH acH abW -adZ -adZ -anD -aoy -apx -aqs -akq -aso -aso -aso -aso -aso -aso -ayQ -ayQ -ayQ -ayQ -ayQ -aFl -aGN -aHT -aJb -aKe -aHT -aHT -aHS -aHT -aHT -aQq -aRE -aSt -aTy +adP +adP +ani +anZ +aoX +apS +ajX +arK +arK +arK +arK +arK +arK +ayj +ayj +ayj +ayj +ayj +aEA +aGb +aHe +aIl +aJl +aHe +aHe +aHd +aHe +aHe +aPb +aQl +aRa +aSe abE abE abE @@ -125542,69 +120835,71 @@ aaa aaa aaa abC -aZd -bag -baH -baH -aZQ -aZr -bag -aZC -aZQ -cMn -bfM -bfM -cKs -aZe -aZH -aZH -aZH -aZH -bal -boq -cQD -cSs -baO -bhM -bal -cKO -bal -aZt -bAd -bAd -dgC -dpi -bFq -bGG -bHN -bJy -bJy -bJy -bNw -bOP -bQr -bRq -bSz -bTB -bUE -bVE -bWs -bWW -bXK -bYs -bZf -bXJ -bGE -cMQ -cMW -cbr -cMH -bAd -dqe -djP -djl -aZH -aZt +aXC +aYF +aZg +aZg +aYp +aXQ +aYF +aYb +aYp +cHd +bed +bed +cFU +aXD +aYg +aYg +aYg +aYg +aYK +bmw +cJf +cJy +aZn +cXB +aYK +cGf +aYK +aXS +bxK +bxK +cQu +cUQ +bCK +bDX +bFe +bGP +bGP +bGP +bKG +bLX +bNx +bOv +bPD +bQF +bRH +bSH +bTt +bTX +bUL +bVt +bWg +bUK +bDV +cHx +cHz +bYq +cHu +bxK +cVj +cSd +cRU +aYg +aXS +aXS +aXS aaa aaa aaa @@ -125632,46 +120927,29 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -cgN -cgN -cgR -cgR -cgR -cgR -cgR -cgN -cgN -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa aaa +cdI +cdI +cdM +cdM +cdM +cdM +cdM +cdI +cdI aaa aaa aaa @@ -125690,6 +120968,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -125741,165 +121034,165 @@ abW acH acH acH -akF -akF -akF -akF -akF -akF -akF -aqG -aso -atl -aut -avs -awG -atp -ayR -aAo -aBM -aCz -ayV -aFm -aGO -aHT -aJc -aKf -cWH -aLT -aHS -aOe -aPd -aQr -aRD -aSl -aTy -abE -abE -abE -abE -akG -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -aZd -aZC -bag -baI -baJ -aZQ -bah -baf -aZC -aZQ -beS -aZQ -aZr -bag -aZe -aZH -bal -bal -bal -bal -bor -cQW -baN -baO -bhM -bal -bwZ -bal -bal -bal -bal -bDb -dpj -bFr -bGH -bHO -bJz -bJz -bMz -bNx -bOQ -bQs -bRr -bSA -bTC -bQs -bQs -bWt -bWX -bXL -bYt -bZg -bXJ -bOM -bOM -bOM -bOM -bOM -byS -dqf -bAe -cMH -aZH -aZt -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +akl +akl +akl +akl +akl +akl +akl +aqg +arK +asF +atN +auM +awa +asJ +ayk +azG +aBe +aBR +ayo +aEB +aGc +aHe +aIm +aJm +cLd +aKV +aHd +aMZ +aNV +aPc +aQk aQS -arz -cUy -cuk +aSe +abE +abE +abE +abE +akm +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aXC +aYb +aYF +aZh +aZi +aYp +aYG +aYE +aYb +aYp +bdn +aYp +aXQ +aYF +aXD +aYg +aYK +aYK +aYK +aYK +bmx +cJm +aZm +aZn +cXB +aYK +buM +aYK +aYK +aYK +aYK +bAB +cUR +bCL +bDY +bFf +bGQ +bGQ +bJM +bKH +bLY +bNy +bOw +bPE +bQG +bNy +bNy +bTu +bTY +bUM +bVu +bWh +bUK +bLU +bLU +bLU +bLU +bLU +bwA +cVj +bxL +cHu +aYg +aXS +aXS +aXS +aXS aaa aaa -aXR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cKv +cqp +aaa +aaa +aWs aaa aaa aaa @@ -125998,39 +121291,39 @@ abW acH acH acH -akF -alU -amO -anE -amR -apy -akF -akp -aso -atm -auu -avt -awH -atp -ayS -aAp -aBN -aCA -ayV -aFn -aGP -aHT -aJd -aKg -aLi -aLU -aHS -daY -aPe -aQr -aRD -aSl -aTy +akl +alz +amt +anj +amw +aoY +akl +ajW +arK +asG +atO +auN +awb +asJ +ayl +azH +aBf +aBS +ayo +aEC +aGd +aHe +aIn +aJn +aKm +aKW +aHd +cMT +aNW +aPc +aQk +aQS +aSe abE abE abE @@ -126055,73 +121348,73 @@ aaa aaa aaa abC -aZd -aZO -aZF -baJ -baI -aZr -aZQ -aZC -aZC -aZQ +aXC +aYn +aYe +aZi +aZh +aXQ +aYp +aYb +aYb +aYp +bdo +aYF beT -bag -bgC -cKt -aZe -aZH -bal -bbQ -bbQ -bna -bos -cQW -baN +cFV +aXD +aYg +aYK +bap +bap +blh +bmy +cJm +aZm +aZn +brS +aYK +buO +bwi baO -btY -bal -bxb -byA -bcp -bAO -bal -bDc -bEk -bAd -bGI -bHP -bJA -bLb -bMA -bNy -bJz -bQt -bRs -bSB -bTD -bTD -bTD -bWu -bTD -bXM -bYu -bZh -bZG -cag -caA -cbi -cbi -bOM -dge -dqg -dqr -dqJ -dqR -dqZ -drh -drp -aaa +byu +aYK +bAC +bBJ +bxK +bDZ +bFg +bGR +bIp +bJN +bKI +bGQ +bNz +bOx +bPF +bQH +bQH +bQH +bTv +bQH +bUN +bVv +bWi +bWG +bXg +bXz +bYh +bYh +bLU +cQj +cVj +cVo +cVo +cVp +cVp +cVo +cVo +aXS aaa aaa aaa @@ -126148,21 +121441,15 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa aaa aaa @@ -126179,6 +121466,12 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -126255,39 +121548,39 @@ acH acH acH abW -akF -alV -amP -anF -aoz -apz -aqt -akp -aso -atn -auv -avt -awI -atp -ayT -aAq -aBN -aCB -ayV -aFo -aGQ -aHT -aJe -aKh -aLh -aLV -cJV -aOf -aPe -aQr -aRD -aSl -aTy +akl +alA +amu +ank +aoa +aoZ +apT +ajW +arK +asH +atP +auN +awc +asJ +aym +azI +aBf +aBT +ayo +aED +aGe +aHe +aIo +aJo +aKl +aKX +cFA +aNa +aNW +aPc +aQk +aQS +aSe abE abE abE @@ -126312,72 +121605,72 @@ aaa aaa aaa abC -aZd -aZP -bah -aZQ -aZQ -aZr -aZr -aZr -aZQ -aZQ -beU -aZe -aZe -aZe -aZe -aZH -bal -bcp -bcp -bnb -bcp -cQX -bra +aXC +aYo +aYG +aYp +aYp +aXQ +aXQ +aXQ +aYp +aYp +bdp +aXD +aXD +aXD +aXD +aYg +aYK baO -btZ -bal -bxb -bcp -bcp -bAP -bBO -bDd -bEk -byS -bGI -bHQ -bJx -bLc -bJx -bNz -bJx -bQu -bRt -bSC -bTE -bTE -bTE -bSC -bJx -bXN -bYv -bZi -bZH -bRp -caB -cbj -cbP -bOM -dfU -dqh -dqs -dqK -dqS -dra -dri -drq +baO +bli +baO +cJn +boX +aZn +brT +aYK +buO +baO +baO +byv +bzt +bAD +bBJ +bwA +bDZ +bFh +bGO +bIq +bGO +bKJ +bGO +bNA +bOy +bPG +bQI +bQI +bQI +bPG +bGO +bUO +bVw +bWj +bWH +bOu +bXA +bYi +bYO +bLU +cQe +cVj +cVp +cVu +cVA +cVF +cVL +cVo aaa aaa aaa @@ -126405,15 +121698,15 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -aXR +aWs aaa aaa aaa @@ -126430,12 +121723,12 @@ aaa aaa aaa aaa -aaa -aac -aad -aad -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -126512,186 +121805,147 @@ acH acH acH abW -akF -alW -amQ -amQ -aoA -apA -aqu -akp -aso -ato -auw -avt -awJ -atp -ayU -aAr -aBN -aCC -ayV -aEc -aGR -aHT -aJf -aKi -aLh -cWI -aNb -aOf -aPe -aQr -aRL -aSl -aTy -abE -abE -abE -abE -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aZd -aZC -aZr -aZQ -baK -aZQ -aZQ -aZC -bag -bck -bck -beV -bfN -bgD -bhF -aZe -aZt -bal -bcp -bcp -bnb -bcY -cQW -baN -baO -bhM -bal -bxa -bcp -bcp -bAP -bBO -bDe -bEl -cMH -bGI -bHR -bJx -bLd -bJA -bNA -bOR -bQv -bRu -bSD -bTF -bTF -bTF -bTK -bJx -bXO -bYw -bZj -bZI -cah -caC -cbi -cbi -bOM -cbr -dqi -dqt -dqL -dqT -drb -drj -drr -drx -drD -drJ -drP -drV -drZ -aaa -aaa -aaa -aaa -aaa -aab -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +akl +alB +amv +amv +aob +apa +apU +ajW +arK +asI +atQ +auN +awd +asJ +ayn +azJ +aBf +aBU +ayo +aDt +aGf +aHe +aIp +aJp +aKl +cLe +aLX +aNa +aNW +aPc +aQs aQS -arz -ctA -cuk +aSe +abE +abE +abE +abE +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abC -abC -aXR +aXC +aYb +aXQ +aYp +aZj +aYp +aYp +aYb +aYF +baJ +baJ +bdq +bee +beU +bfW +aXD +aXS +aYK +baO +baO +bli +bbw +cJm +aZm +aZn +cXB +aYK +buN +baO +baO +byv +bzt +bAE +bBK +cHu +bDZ +bFi +bGO +bIr +bGR +bKK +bLZ +bNB +bOz +bPH +bQJ +bQJ +bQJ +bQO +bGO +bUP +bVx +bWk +bWI +bXh +bXB +bYh +bYh +bLU +bYq +cVj +cVo +cVv +cVv +cVG +cVM +cVR +cVW +cWa +cWa +cWa +cWa +cWj aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aad +aab +aac +aac aac aac aab +aab aaa aaa aaa @@ -126701,6 +121955,45 @@ aaa aaa aaa aaa +aqV +cXX +cYa +cXY +cpH +cXX +abC +abC +aWs +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -126769,39 +122062,39 @@ acH acH acH abW -akF -alX -amR -anG -aoB -amR -aqu -arm -aso -atp -atp -avu -awK -atp -ayV -aAs -ayV -aCD -ayV -aFp -aGS -aHU -aJg -aKj -aLj -aLW -aNb -aOf -aPe -aQr -aRD -aSl -aTy +akl +alC +amw +anl +aoc +amw +apU +aqL +arK +asJ +asJ +auO +awe +asJ +ayo +azK +ayo +aBV +ayo +aEE +aGg +aHf +aIq +aJq +aKn +aKY +aLX +aNa +aNW +aPc +aQk +aQS +aSe abE abE abE @@ -126825,79 +122118,79 @@ aaa aaa aaa abC -aZd -aZD -aZQ -aZQ -aZC -bbj -aZF -aZQ -aZC -bdp -bdq -bdq -bdp -bdr -bhG -aZe -aZt -bal -bcp -bcp -bnb -bco -cQW -baN +aXC +aYc +aYp +aYp +aYb +aZI +aYe +aYp +aYb +bbM +bbN +bbN +bbM +bbO +bfX +aXD +aXS +aYK baO -bua -bvx -bxc -bcp -dfu -bco -bal -bDf -byB -byB -bGI -bHS -bJB -bLe -bGE -bGE -bGE -bGE -bRv -bSE -bTG -bTG -bTG -bWv -bJx -bXP -bYx -bOO -bZJ -bOM -bOM -bOM -bOM -bOM -djb -dqj -dqu -dqM -dqU -drc -drk -drs -dry -drE -drK -drQ -arw -arw +baO +bli +baN +cJm +aZm +aZn +brU +bto +buP +baO +cPN +baN +aYK +bAF +bwj +bwj +bDZ +bFj +bGS +bIs +bDV +bDV +bDV +bDV +bOA +bPI +bQK +bQK +bQK +bTw +bGO +bUQ +bVy +bLW +bWJ +bLU +bLU +bLU +bLU +bLU +cRP +cVk +cVq +cVw +cVB +cVH +cVN +cVS +cVS +cVS +cWc +cWg +aqV +aqV aaa aaa aaa @@ -126919,38 +122212,38 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aac -aac -aab -aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -127025,40 +122318,40 @@ abW acH acH acH -akF -akF -alY -amS -alY -aoC -apB -aqv -aqt -akF -atq -cJF -avv -awL -awL -ayW -aAt -ayX -aCE -aEc -aFq -aGT -aCO -aJh -aEc -aLk -aLX -cJW -aOf -aPe -aQr -aRD -aSl -cOF +akl +akl +alD +amx +alD +aod +apb +apV +apT +akl +asK +cFq +auP +awf +awf +ayp +azL +ayq +aBW +aDt +aEF +aGh +aCg +aIr +aDt +aKo +aKZ +cFB +aNa +aNW +aPc +aQk +aQS +cIL abE abE abE @@ -127082,79 +122375,79 @@ aaa aaa aaa abC -aZd -aZE -aZQ -aZQ -baL -bbk -bbj -aZQ -aZQ -bdq -bee -beW +aXC +aYd +aYp +aYp +aZk +aZJ +aZI +aYp +aYp +bbN +bcz bdr -beg -bhH -aZe -aZt -bal -ben -bmr -bnc -dfu -cQW -brb -bsq -bub -bal -bal -byB -byB -byB -bBP -bDg -bEm -bFs -bGJ -bHT -bJC -bLf -bMB -bNB -bOS -bGE -bRw -bJx -bTH -bUF -bVF -bJx -bJx -bXP -bYy -bZk -bZG -cag -caD -cbk -cbk -bOM -cbr -dqk -dqv -dqN -dqV -drd -drl -drt -drz -drF -drL -drR -drW -dsa +bbO +bcB +bfY +aXD +aXS +aYK +bcI +bkA +blj +cPN +cJm +boY +bqn +brV +aYK +aYK +bwj +bwj +bwj +bzu +bAG +bBL +bCM +bEa +bFk +bGT +bIt +bJO +bKL +bMa +bDV +bOB +bGO +bQL +bRI +bSI +bGO +bGO +bUQ +bVz +bWl +bWG +bXg +bXC +bYj +bYj +bLU +bYq +cVl +cVo +cVx +cVC +cVI +cVO +cVT +cVX +cVT +cWd +cWg +cWg +cWk aaa aaa aaa @@ -127176,38 +122469,38 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aab -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -127282,40 +122575,40 @@ abW acH acH acH -akF -alp -alZ -amT -alY -aoD -amR -aqw -arn -asp -apI -alY -avw -awM -awM -ayX -aze -ayX -aCF -aEc -aFr -aGT -awM -aJi -aEc -aLh +akl +akU +alE +amy +alD +aoe +amw +apW +aqM +arL +api +alD +auQ +awg +awg +ayq +ayx +ayq +aBX +aDt +aEG +aGh +awg +aIs +aDt +aKl +aLa aLY -aNc -aOg -aPf -aQr -aRD -aSl -cOF +aNb +aNX +aPc +aQk +aQS +cIL abW abE abE @@ -127338,80 +122631,80 @@ aaa aaa aaa abC -aZd -aZp -aZr -aZR -bai -bai -bbl -bbH -bcl -bcP -bdq +aXC +aXO +aXQ +aYq +aYH +aYH +aZK +bag +baK +bbn +bbN +bcA +cJk bef -cQU -bfO -bgE -bhI -cRr -cQG -cQG -cQG -cQG -bnd -cQG -cRc -brc -bsr -buc -bal -bal -byB -bzN -bAQ -bBQ -bDh -bAQ -bAQ -bGK -bHU -bJD -bLg -bMC -bNC -bOT -bGE -bRx -bSF -bTI -bUG -bVG -bJx -cMF -bXP -bYz -bOO -bZH -bRp -caE -cbl -cbQ -bOM -cbr -dql -dqw -dqO -dqW -dre -drm -dru -drA -drG -drM -drS -drX -dsb +beV +bfZ +cJt +cJi +cJi +cJi +cJi +blk +cJi +cJo +boZ +bqo +brW +aYK +aYK +bwj +bxu +byw +bzv +bAH +byw +byw +bEb +bFl +bGU +bIu +bJP +bKM +bMb +bDV +bOC +bPJ +bQM +bRJ +bSJ +bGO +cHs +bUQ +bVA +bLW +bWH +bOu +bXD +bYk +bYP +bLU +bYq +cVl +cVp +cVy +cVD +cVJ +cVP +cVU +cVY +cWb +cWe +cWh +cWi +cWl aaa aaa aaa @@ -127433,38 +122726,38 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aac -aab -aab -aab -aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -127539,40 +122832,40 @@ abW acH acH acH -akF -alq -ama -amU -alY -aoE -amR -aqx -aro -apI -apI -alY -avx -awM -awM -ayY -aAu -aBO -aCG -aEd -aFs -aGT -awM -aJj -aEc -asu -asu -asu -asu -asu -aQh -aRD -aSm -cOF +akl +akV +alF +amz +alD +aof +amw +apX +aqN +api +api +alD +auR +awg +awg +ayr +azM +aBg +aBY +aDu +aEH +aGh +awg +aIt +aDt +arQ +arQ +arQ +arQ +arQ +aOS +aQk +aQT +cIL abW abW abW @@ -127595,80 +122888,80 @@ aaa aaa aaa abC -aZd -aZq -aZq -aZq -baj -aZq -aZq -aZq -aZe -bcQ -bdp -bdr -beX -bfP -bgF -bgb -biM -biM -biM -blp -biM -bne -bot -biM -brd -bss -bud -biM -bxd -byC -bzO -bAR -bBR -bDi -bEn -bFt -bGL -bHV -bJE -bLh -bMD -bND -bOU -bQw -bRy -bSG -bJx -bJx -bRt -bJx -bJx -bXO -bYA -bZj -bZI -cah -caF -cbk -cbk -bOM -cbr -dqm -dqx -dqP -dqX -drf -drn -drv -drB -drH -drN -drT -drY -dsc +aXC +aXP +aXP +aXP +aYI +aXP +aXP +aXP +aXD +bbo +bbM +bbO +bds +beg +beW +bes +bhc +bhc +bhc +bjB +bhc +bll +bmz +bhc +bpa +bqp +brX +bhc +buQ +bwk +bxv +byx +bzw +bAI +bBM +bCN +bEc +bFm +bGV +bIv +bJQ +bKN +bMc +bNC +bOD +bPK +bGO +bGO +bOy +bGO +bGO +bUP +bVB +bWk +bWI +bXh +bXE +bYj +bYj +bLU +bYq +cVm +cVp +cVz +cVE +cVK +cVQ +cVV +cVZ +cVV +cWf +cWg +cWg +cWk aaa aaa aaa @@ -127690,38 +122983,38 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp abC abC -aXR -aaa -aaa -aaa -aaa -aad -aac -aad -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aab -aab -aab -aab -aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -127796,40 +123089,40 @@ abW abW abW acH -akF -akF -akF -amV -alY -aoF -apC -aqy -aro -apI -apI -alY -avy -awN -awN -awN -aze -ayX -aCH -cJN -aFt -aGT -awM -aze -aCO -aEd +akl +akl +akl +amA +alD +aog +apc +apY +aqN +api +api +alD +auS +awh +awh +awh +ayx +ayq +aBZ +cFv +aEI +aGh +awg +ayx +aCg +aDu +aLb aLZ -aNd -aOh -asu -aQs -aRD -aSl -cOF +aNc +arQ +aPd +aQk +aQS +cIL abW abW abW @@ -127852,80 +123145,80 @@ aaa aaa aaa abC -aZd -aZr -aZF -aZQ -bag -aZQ -aZQ -bbI -aZe -bcR -bdr -beg -beY -bfQ -cKq -cKu -baO -baO -baO -baO -baO -bnf -bjG -bjG -bjG -bst -bue -bvy -bxe -byD -bzP -bAS -bBS -bAS -bAS -bFu -bGM -bHW -bJF -bLi -bGI -bNC -bOT -bGE -bRz -bSH -bTJ -bJx -bVI -bVG -bJx -bXP -bYx -bOO -bZK -bOM -bOM -bOM -bOM -bOM -cbr -dqn -dqy -dqQ -dqY -drg -dro -drw -drC -drI -drO -drU -arw -arw +aXC +aXQ +aYe +aYp +aYF +aYp +aYp +bah +aXD +bbp +bbO +bcB +bdt +beh +cFT +cFW +aZn +aZn +aZn +aZn +aZn +blm +bhU +bhU +bhU +bqq +brY +btp +buR +bwl +bxw +byy +bzx +byy +byy +bCO +bEd +bFn +bGW +bIw +bDZ +bKM +bMb +bDV +bOE +bPL +bQN +bGO +bSK +bSJ +bGO +bUQ +bVy +bLW +bWK +bLU +bLU +bLU +bLU +bLU +bYq +cVl +cVo +cVo +cVo +cVp +cVo +cVS +cVS +cVS +cWg +cWg +aqV +aqV aaa aaa aaa @@ -127947,38 +123240,38 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aad -aaa -aaa -aad -aac -aac -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aab -aab -aaa +aqV +cXX +cXZ +cXY +cKv +cXX aaa aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -128055,38 +123348,38 @@ abW acH acH abW -akF -amW -alY -aoG -apD -aqz -aro -asq -atr -alY -avz -awO -axJ -ayZ -aAv -ayX -aCI -aEe -aFu -aGU -aHV -aze -aCO -aEe +akl +amB +alD +aoh +apd +apZ +aqN +arM +asL +alD +auT +awi +axc +ays +azN +ayq +aCa +aDv +aEJ +aGi +aHg +ayx +aCg +aDv +aLc aMa -aNe -awM -aEe -aQt -aRJ -aSl -cOF +awg +aDv +aPe +aQq +aQS +cIL acH acH abW @@ -128109,131 +123402,83 @@ aaa aaa aaa abC -aZd -aZs -aZG -aZS -bak -aZq -cKl -cKm -aZe -bcS -bds -beh -beZ -bfR -bgG -bhJ -biN -biN -biN -biN -biN -bng -bou -bpP -biN -bsu -buf -baP -bxf -byE -bzQ -bAT -bBT -bDj -bEo -bFv -bGN -bHX -bJG -bLj -bGI -bNE -bOV -bGE -bRA -bSI -bTK -bUH -bRt -bWw -bWY -bXP -bYB -bZk -bZG -cag -caG -cbm -cbm -bOM -djs -dqo -dgE -byS -aZH -aZt -aZt -aZt -abC -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa +aXC aXR -aaa -aaa -aaa -aaa -aad -aad -aac -aab -aab +aYf +aYr +aYJ +aXP +cFO +cFP +aXD +bbq +bbP +bcC +bdu +bei +beX +bga +bhd +bhd +bhd +bhd +bhd +bln +bmA +bnQ +bhd +bqr +brZ +aZo +buS +bwm +bxx +byz +bzy +bAJ +bBN +bCP +bEe +bFo +bGX +bIx +bDZ +bKO +bMd +bDV +bOF +bPM +bQO +bRK +bOy +bTx +bTZ +bUQ +bVC +bWl +bWG +bXg +bXF +bYl +bYl +bLU +cRW +cVl +cQw +bwA +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa aaa aaa aaa -aab -aab -aab -aab -aaa -aad aaa aaa aaa @@ -128252,6 +123497,54 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cKv +cqp +aaa +aaa +aWs +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -128312,43 +123605,43 @@ abW acH acH abW -akF -akF -akF -aoH -apE -aqA -arp -asr -ats -aux -avA -awP -awP -aza -aAw -aBP -aCJ -cZE -aFv -aGV -aCJ -aJk -aKk -aEf +akl +akl +akl +aoi +ape +aqa +aqO +arN +asM +atR +auU +awj +awj +ayt +azO +aBh +aCb +cMc +aEK +aGj +aCb +aIu +aJr +aDw +aLd aMb -aNf -aKk -aEf -aQu -aRD -aSl -cOF +aJr +aDw +aPf +aQk +aQS +cIL acH acH abW abE -akG +akm abC abC abC @@ -128366,77 +123659,77 @@ abC abC abC abC -aZe -cKj -aZe -aZe -aZe -cKk -aZe -aZe -aZe -aZe -aZe -aZe -cQV -baN -baO -bhK -biO -biO -biO -biO -cKx -biO -biO -biO -biO -biO -biO -biO -biO -biO -biO -biO -bBU -bDk -bEp -bFw -biO -bHY -bJH -bpS -bGJ -bNF -dhD -dhD -dhD -dhD -bTL -bUI -bVJ -bVJ -bJx -bXP -bYC -bOO -bZH -bRp -caH -cbn -cbR -bOM -djF -dqp -djR -cMH -aZH -aZt -aZt -aZt -aaa -aaa -aaa +aXD +cFM +aXD +aXD +aXD +cFN +aXD +aXD +aXD +aXD +aXD +aXD +cJl +aZm +aZn +bgb +bhe +bhe +bhe +bhe +cFX +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bzz +bAK +bBO +bCQ +bhe +bFp +bGY +bnT +bEa +bKP +cRb +cRb +cRb +cRb +bQP +bRL +bSL +bSL +bGO +bUQ +bVD +bLW +bWH +bOu +bXG +bYm +bYQ +bLU +cSa +cVn +cSe +cHu +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -128461,38 +123754,38 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aad -aaa -aaa -aab -aab -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -128571,36 +123864,36 @@ abW abW acH acH -akF -aoI -apF -aqB -arq -arq -apF -auy -avB -awQ -axK -azb -aAx -aBQ -aCK -aEg -aFw -aGW -aHW -aJl -aKl -aLl +akl +aoj +apf +aqb +aqP +aqP +apf +atS +auV +awk +axd +ayu +azP +aBi +aCc +aDx +aEL +aGk +aHh +aIv +aJs +aKp +aLe aMc -aNg -aOi -aLl -aQv -aRM -aSt -cOJ +aNd +aKp +aPg +aQt +aRa +cIM acH acH abW @@ -128623,74 +123916,75 @@ aaa aaa aaa aaa -aZf -aZt -aZt -aZt -aZt -aZt -bbm -bbJ -bcm -bcT -bdt -bbm -cQW -bfS -baO -bhL -biO -bjC -bkv -bkv -bkv -bkv -bkv -bkv -bkv -bkv -bpQ -bvz -bxg -byF -cWJ +aXE +aXS +aXS +aXS +aXS +aXS +aZL +bai +baL +bbr +bbQ +aZL +cJm +bej +aZn +bgc +bhe +bhQ +biI +biI +biI +biI +biI +biI +biI +biI +bnR +btq +buT +bwn +cLf abC abC abC abC -bFx -dhb -dhd -bJI -bLk -bME -bOW -dhE -bQx -bnk -bSJ -bTM -bUJ -bVK -bWx -bWZ -bXQ -bYD -bZj -bZL -cah -caI -cbm -cbm -bOM -bAd -dgQ -dqz -bBN -aZH -aZt -aZt -aZt +bCR +cQH +cQJ +bGZ +bIy +bJR +bMe +cRc +bND +blr +bPN +bQQ +bRM +bSM +bTy +bUa +bUR +bVE +bWk +bWL +bXh +bXH +bYl +bYl +bLU +bxK +cQC +cVr +bzs +aYg +aXS +aXS +aXS +aXS aaa aaa aaa @@ -128717,30 +124011,29 @@ aaa aaa aaa aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aac -aac -aac -aac -aab -aab -aab -aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -128828,36 +124121,36 @@ abW abW acH acH -anH -aoJ -apG -aqC -arr -ass -att -auz -avC -awR -awR -azc -aAy -aBR -awL -cZF -aFx -aGX -aHX -azf -aKm -aEh +anm +aok +apg +aqc +aqQ +arO +asN +atT +auW +awl +awl +ayv +azQ +aBj +awf +cMd +aEM +aGl +aHi +ayy +aJt +aDy +aLf aMd -aNh -aKm -aEh -aQw -aRD -aSl -cOF +aJt +aDy +aPh +aQk +aQS +cIL acH acH abW @@ -128880,75 +124173,75 @@ aaa aaa aaa aaa -aZf -aZf -aZt -aZt -aZt -aZt -bbm -bbm -bcn -bcU -bdu -bbm -cQX -baN -baO -bhM -biO -bjD -bkw -blq -bkw -blq +aXE +aXE +aXS +aXS +aXS +aXS +aZL +aZL +baM +bbs +bbR +aZL +cJn +aZm +aZn +bgd +bhe +bhR +biJ +bjC +biJ +bjC abC -cWJ -cWJ -cWJ -cKE -bvA -bxh -bms -cWJ -cWJ -cWJ -cWJ -cWJ -cXQ -bGP -dhe -bJJ -dhn -dhn -dhu -bOX -bQy -dib -bSK -bTM -bUK -bVL -bWy -bXa -bWy -bYE -bWy -bZM -bOM -bOM -bOM -bOM -bOM -cbr -diU -dqA -byS -aZH -aZt -aZt -aZt -aaa +cLf +cLf +cLf +cGb +btr +buU +bkB +cLf +cLf +cLf +cLf +cLf +cLj +bEg +cQK +bHa +cQP +cQP +cQU +bMf +bNE +cRr +bPO +bQQ +bRN +bSN +bTz +bUb +bTz +bVF +bTz +bWM +bLU +bLU +bLU +bLU +bLU +bYq +cRJ +cVs +bwA +aYg +aXS +aXS +aXS +aXS aaa aaa aaa @@ -128975,29 +124268,29 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aac -aac -aac -aad -aab -aab -aac -aaa +aqV +cXX +cYa +cXY +cYe +cXX aaa aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -129085,172 +124378,42 @@ abW abW abW abW -akF -aoK -apH -aqD -ars -ast -apI -alY -avD -awS -axL -ayZ -aAv -ayX -aCL -aEe -aFy -aGY -aHY -awM -aCO -aEe -aMe -aHY -awM -aEe -aQx -aRD -aSl -cOF -aLm -aLm -aLm -aLm -aLm -aLm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aZf -aZf -aZt -aZt -aZt -bal -bal -bal -bal -bdv -bal -cQW -baN -bgH -bhM -biO -bjD -bkx -bky -bls -bky -bkv -bpQ -bre -bsv -bug -bvB -bxi -byG -byG -byG -byG -bDl -bEq -bFy -bGQ -bIb -bJK -bLm -bMF -bPa -bOY -dhQ -dic -bSL -bTM -bUL -bTC -bWz -bXb -bXR -bYF -bZl -bZN -cag -caJ -cbo -cbo -bOM -djG -bAd -dqB -bBN -aZH -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +akl +aol +aph +aqd +aqR +arP +api +alD +auX +awm +axe +ays +azN +ayq +aCd +aDv +aEN +aGm +aHj +awg +aCg +aDv +aLg +aHj +awg +aDv +aPi +aQk aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aac -aac -aac -aab -aab -aac -aac +cIL +aKq +aKq +aKq +aKq +aKq +aKq aaa aaa aaa @@ -129268,6 +124431,136 @@ aaa aaa aaa aaa +aXE +aXE +aXS +aXS +aXS +aYK +aYK +aYK +aYK +bbS +aYK +cJm +aZm +beY +bgd +bhe +bhR +biK +biL +bjE +biL +biI +bnR +bpb +bqs +bsa +bts +buV +bwo +bwo +bwo +bwo +bAL +bBP +bCS +bEh +bFs +bHb +bIA +bJS +bMi +bMg +cRk +cRs +bPP +bQQ +bRO +bQG +bTA +bUc +bUS +bVG +bWm +bWN +bXg +bXI +bYn +bYn +bLU +cSb +bxK +cVl +bzs +aYg +aXS +aXS +aXS +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cKv +cmQ +aaa +aaa +aWs +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -129338,46 +124631,46 @@ abE abE abE abW -akG +akm abW abW abW -akF -aoL -cJw -aqE -aqE -aqE -apI -alY -avE -awT -awT -awT -aze -ayX -aCH -cJN -aFz -aze -awM -awM -aCO -aEc -aMf -aNi -awN -asu -aQy -aRD -aSl -cOF -aUo +akl +aom +cFh +aqe +aqe +aqe +api +alD +auY +awn +awn +awn +ayx +ayq +aBZ +cFv +aEO +ayx +awg +awg +aCg +aDt +aLh +aMe +awh +arQ +aPj +aQk +aQS +cIL +aSS +aTH +aUe +aUE aVd -aVA -aWa -aWz -aLm +aKq aaa aaa aaa @@ -129395,88 +124688,91 @@ aaa aaa aaa aaa -aZf -aZf -aZf -aZf -aZt -bal -bbK -bco -bcp -bdw -bcp -cQW +aXE +aXE +aXE +aXE +aXS +aYK +baj baN baO -bhM -biO -bjD -bkx -cWJ -cWJ -cWJ -cWJ -cWJ -brf -bsw -buh -bvC -bxj -bxj -bzR -bAU -bAU -bDm -bEr -bFz -bGR -bIc -bJL -bLn -bMG -bNG -bOZ -dhQ -did -div -bTM -bUM -bVM -bRs -bXc -bXS -bYG -bJx -bZO -bRp -caK -cbo -cbS -bOM -bAd -byS -dqC -byS -aZH -aZH -aZH -aZt -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +bbT +baO +cJm +aZm +aZn +bgd +bhe +bhR +biK +cLf +cLf +cLf +cLf +cLf +bpc +bqt +bsb +btt +buW +buW +bxy +byA +byA +bAM +bBQ +bCT +bEi +bFt +bHc +bIB +bJT +bKQ +bMh +cRk +cRt +cRA +cWQ +bRP +bSO +bOx +bUd +bUT +bVH +bGO +bWO +bOu +bXJ +bYn +bYR +bLU +bxK +bwA +cVl +bwA +aYg +aYg +aYg +aXS +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -129486,28 +124782,29 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aac -aab -aab -aab -aab -aad -aad +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -129527,11 +124824,7 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -cJh +cEY aaa aaa aaa @@ -129599,44 +124892,44 @@ abC aaa aaa abE -akF -akF -akF -akF -akF -akF -akF -anH -avF -awM -awM -azd -aze -aBO -aCM -aEd -aFA -aze -awM -aJm -asu -asu -asu -asu -asu -asu -aQz -aRD -aSq -aTz -aUp +akl +akl +akl +akl +akl +akl +akl +anm +auZ +awg +awg +ayw +ayx +aBg +aCe +aDu +aEP +ayx +awg +aIw +arQ +arQ +arQ +arQ +arQ +arQ +aPk +aQk +aQX +aSf +aST +aTI +aTI +aUF aVe -aVe -aWb -aWA -aLm -aLm -aLm +aKq +aKq +aKq aaa aaa aaa @@ -129653,87 +124946,87 @@ aaa aaa aaa aaa -aZf -aZf -bal -bal -bal -bbL -bcp -bcp -bdx -bcp -cQW -bfT +aXE +aXE +aYK +aYK +aYK +bak baO -bhM -biO -bjD -bkx -cWJ -bms -bnh -bov -bpR -brg -bsx -cWJ -bvD -bvD -bvD -cWJ -bAV -bBV -bDn -bEs -bFA -cXQ -bId -cMz -bLo -bMH -bPa -dhF -bQz -die -diw -bTM -bUN -bJx -bTH -bXd -bSF -bYH -bSF -bZP -cah -caL -cbo -cbo -bOM -bAd -cMH -dqD -byS -aZH -aZH -aZH +baO +bbU +baO +cJm +bek +aZn +bgd +bhe +bhR +biK +cLf +bkB +blo +bmB +bnS +bpd +bqu +cLf +btu +btu +btu +cLf +byB +bzA +bAN +bBR +bCU +cLj +bFu +cHm +bIC +bJU +bMi +cRd +bNF +cRu +cRB +cWR +bRQ +bGO +bQL +bUe +bPJ +bVI +bPJ +bWP +bXh +bXK +bYn +bYn +bLU +bxK +cHu +cVl +bwA +aYg +aYg +aYg aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cZo +cZu +cZJ +cZQ +cZQ +cZJ +cGc +cGc +cGc +cGc aaa aaa aaa @@ -129746,29 +125039,29 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aab -aab -aad -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -129857,175 +125150,175 @@ aaa aaa aaa aaa -aoM -aoM -aoM -art -asu -atu -asu -avG -awM -awM -aze -aze -ayX -aCN -aEc -aFB -aze -awM -aJn -asu +aon +aon +aon +aqS +arQ +asO +arQ +ava +awg +awg +ayx +ayx +ayq +aCf +aDt +aEQ +ayx +awg +aIx +arQ abW abW abW abW -aLm -aQA -aRD -aSl -cOF -aUq -aVf -aVf -aWc -aWB -aWO -aWY -aXr -aUC -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aOv -bam -baM -bam -bbM -bbM -bcV -bdy -bcp -cQW -bfU -baO -bhM -biO -bjD -bkx -cWJ -bms -bni -cWJ -cKD -brh -bsy -cWJ -bvE -bvE -byH -cWJ -bAV -bBW -bDo -bEt -bFB -cXQ -bIe -bJK -bLo -dhp -bNH -bPb -dhS -dif -bSM -bTM -bUO -bVN -bWA -bXe -bJx -bYI -bTD -bZQ -bOM -bOM -bOM -bOM -bOM -bAd -bAd -dqE -bBN -aZH -aZH -aZH -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +aKq +aPl +aQk aQS -arz -ctB -cuk +cIL +aSU +aTJ +aTJ +aUG +aVf +aVq +aVA +aVS +aTg +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aNo +aYL +aZl +aYL +bal +bal +bbt +bbV +baO +cJm +bel +aZn +bgd +bhe +bhR +biK +cLf +bkB +blp +cLf +cGa +bpe +bqv +cLf +btv +btv +bwp +cLf +byB +bzB +bAO +bBS +bCV +cLj +bFv +bHb +bIC +cQQ +bKR +bMj +cRl +cRv +bPQ +cWS +bRR +bSP +bTB +bUf +bGO +bVJ +bQH +bWQ +bLU +bLU +bLU +bLU +bLU +bxK +bxK +cVl +bzs +aYg +aYg +aYg +aaa +cGc +cGc +cZo +cZu +cZm +cZm +cZm +cZJ +cZs +cZs +cZJ +cZm +cZm +cZm +cGc +cGc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aqV +cXX +cXZ +cXY +cpI +cXX abC abC -aXR -aaa -aaa -aaa -aad -aaa -aab -aab -aad -aaa -aaa -aaa -aaa -aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -130113,188 +125406,188 @@ abC aaa aaa aaa -anI -aoN -apJ -aqF -aru -asv -atv -asv -avH -awL -awL -azf -aAz -ayX -aCO -aEc -aFC -aze -aCO -asu -asu +ann +aoo +apj +aqf +aqT +arR +asP +arR +avb +awf +awf +ayy +azR +ayq +aCg +aDt +aER +ayx +aCg +arQ +arQ abW abW abW abW -aLm -aQB -aRD -aSl -cOF -aLm -aLm -aLm -aLm -aLm -aLm -aLm -aLm -aXI -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aXX -aZT -bal -bal -cQD -cQG -cQG -cQG -bdz -cQG -cRc -baN -baO -bhM -biO -bjD -bkx -cWJ -bmt -bnj -bow -cWJ -bri -bsz -cWJ -bvF -bxk -bxk -bsG -cWJ -cWJ -bDp -bEt -bFC -cKV -bIf -bJK -bMI -bNI -dhv -bPc -dhT -dig -bSN -bTN -bUP -bVO -bWB -bXf -bXT -bYJ -bZm -bZR -bGE -bAd -bAd -byS -bAd -byS -cbr -dqF -bBN -aZH -aZH -aZH -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +aKq +aPm +aQk aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cIL +aKq +aKq +aKq +aKq +aKq +aKq +aKq +aKq +aWj +aWy +aWy +cWY +aWy +aWy +aWy +cWY +aWy +aWy +cWY +aWy +aWy +aWy +cWY +aWy +aWy +aYs +aYK +aYK +cJf +cJi +cJi +cJi +bbW +cJi +cJo +aZm +aZn +bgd +bhe +bhR +biK +cLf +bkC +blq +bmC +cLf +bpf +bqw +cLf +btw +buX +buX +bqD +cLf +cLf +bAP +bBS +bCW +cGj +bFw +bHb +bJV +bKS +cQV +bMk +cRm +cRw +bPR +bQR +bRS +bSQ +bTC +bUg +bUU +bVK +bWn +bWR +bDV +bxK +bxK +bwA +bxK +bwA +bYq +cVl +bzs +aYg +aYg +aYg aaa +cGc +cZm +cZm +cZm +cZm +cZm +cZm +cZK +cZR +cZR +dap +daA +cZm +cZm +cZm +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa +aqV +cmQ +cXY +cYX +cYf +cqp aaa aaa +aWs aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -130360,9 +125653,9 @@ aaa aaa aaa aaa -afV -agR -afV +afH +agD +afH aaa aaa aaa @@ -130371,171 +125664,158 @@ aaa aaa aaa aaa -aoM -aoM -aoM -art -asw -asw -asw -avI -awU -axM -azg -aAA -azg -aCP -azg -aFD -aGZ -aHZ -aFI +aon +aon +aon +aqS +arS +arS +arS +avc +awo +axf +ayz +azS +ayz +aCh +ayz +aES +aGn +aHk +aEX abW abW abW abW abW -aLm -aQB -aRD -aSD -cPq -aUr -aSU -aVB -aWd -aSU -aSU -aSU -aSR -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ban -baN -cQE -bbN -baN -baN -bdA -bei -bfb -bfV -baO -bhM -biO -bjD -bkx -cWJ -bmu -bms -bms -cXi -brj -bsA -cWJ -bvG -bvG -bvG -bzS -bAW -bBX -bDq -bEt -bFD -bGS -bHZ -bJK -bLo -bNJ -bPd -dhE -dhE -dhE -dhE -bTO -bUQ -bVP -bWC -bGF -bGE -bGE -bGE -bGE -bGE -byS -bAd -djv -byS -bPt -byP -dqG -djk -aZH -aZt -aaa -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aKq +aPm +aQk +aRk +cIR +aSV +aRA +aUf +aUH +aRA +aRA +aRA +aRx +cWU +cWU +cWU +cYJ +cWU +cWU +cWU +cYK +cWU +cWU +cYK +cWU +cWU +cWU +cYJ +cWU +cWU +cWU +aYM +aZm +cJg +bam +aZm +aZm +bbX +bcD +bdw +bem +aZn +bgd +bhe +bhR +biK +cLf +bkD +bkB +bkB +cLh +bpg +bqx +cLf +btx +btx +btx +bxz +byC +bzC +bAQ +bBS +bCX +bEj +bFq +bHb +bIC +bKT +bMl +cRc +cRc +cRc +cRc +bQS +bRT +bSR +bTD +bDW +bDV +bDV +bDV +bDV +bDV +bwA +bxK +cRX +bwA +bMB +bwx +cVl +cRT +aYg +aXS aaa aaa +cGc +cZm +cZp +cZv +cZz +cZm +cZD +cZL +cZx +cZs +cZL +cZm +cZm +cZm +daU +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa aaa @@ -130552,6 +125832,19 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -130617,185 +125910,172 @@ aaa aaa aaa aaa -afV -agP -afV -afV -afV -afV -afV +afH +agB +afH +afH +afH +afH +afH abW aaa -amX +amC abE abW aaa abE abW -asw -atw -auA -avJ -awV -axM -azh -aAB -aBS -aCQ -azg -aFE -aHa -aIa -aFI +arS +asQ +atU +avd +awp +axf +ayA +azT +aBk +aCi +ayz +aET +aGo +aHl +aEX abW -aLm -aLm -aLm -aLm -aLm -aQC -aRE -aSE -cPr -aUs -aRG -aRG -aRG -aRG -aRG -aRG -cPC -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cPD -cQx -cQz -cQF -baO -baO -baO -bdB -bej -bfc -bfW -bgI -bhN -cKx -bjD -bkx -cWJ -bmv -bms -box -cXi -brk -brk -bui -bvH -bxl -bvH -bzT -bAX -bBY -bDr -bEu -bFE -bGT -bIa -bJN -bLp -bMJ -dhw -bPe -bQA -bRB -bSO -bTP -bUR -bVQ -bWD -dpA -dpC -dpE -dpG -dpI -dpK -dpO -dpR -dpU -djw -byP -byP -dqH -cMH -aZH -aZt -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aaa -aac -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa +afH +afH +afH +afH +aKq +aPn +aQl +aRl +cIS +aSW +aQn +aQn +aQn +aQn +aQn +aQn +cIW +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cIX +cJa +cJb +cJh +aZn +aZn +aZn +bbY +bcE +bdx +ben +beZ +bge +cFX +bhR +biK +cLf +bkE +bkB +bmD +cLh +bph +bph +bsc +bty +buY +bty +bxA +byD +bzD +bAR +bBT +bCY +bEk +bFr +bHd +bID +bJW +cQW +bMm +bNG +bOG +bPS +bQT +bRU +bSS +bTE +cVa +cVa +cVa +cVa +cVa +cVc +cVa +cVa +cVg +cRY +bwx +bwx +cZj +cHu +aYg aaa aaa +cGc +cGc +cZm +cZq +cZr +cZr +cZm +cZE +cZL +cZx +cZR +daq +cZm +daJ +daS +daM +cZm +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cmQ aaa aaa +aWs aaa aaa aaa @@ -130809,6 +126089,19 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -130874,198 +126167,198 @@ aaa aaa aaa aaa -afV -agS -ahF -aim -aiY -ajN -afS -afS -adZ -akG +afH +agE +ahr +ahV +aiG +aju +afE +afE +adP +akm abW abW acH acH acH -asw -atx -auB -avJ -awW -axM -azi -aAC -aBS -aCR -azg -aFF -aHb -aIb -aFI +arS +asR +atV +avd +awq +axf +ayB +azU +aBk +aCj +ayz +aEU +aGp +aHm +aEX abW -aLm -aMg -aNj -aOj -aPg -aQD -aRD -aSF -aSN -aUt -aSN -aSN -aWe -aSN -aSN -aSN -aSP -arA -arA -arA -arA -arA -arA -arA -arA -aYK -arA -arA -arA -arA -arA -arA -arA -arA -arA -bap -cQA +afH +aLi +aMf +cLz +aNY +aPo +aQk +aRm +aRu +aSX +aRu +aRu +aUI +aRu +aRu +aRu +aRw +cWU +cWU +cWU +cWU +cWU +cWU +cWU +cXd +cWU +cWU +cYM +cYN +cYN +cYN +cYN +cYN +cYN +cYN +cYP +cJc +cYQ +cYQ baP -baP -bcq -baP -baP -bek -baP -bfX -bgJ -bhO -biO -bjD -bkx -cWJ -bmu -bms -bms -cXi -brl -bsB -cWJ -bvI -bvI -bvI -bzU -bAY -bBX -bDs -bEv -bFF -bGU -bIg -bJK -bLo -bLo -dhx -dhH -bQB -bRC -bSP -bTQ -bUS -bQH -bQH -bQH -bQH -bQH -byS -bAe -djk -cbr -byP -dpV -dpX -dpZ -dqq -dqI -byS -aZH -aaa -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aab -aad -aad -aac -aac -aad +cYQ +cYR +bcF +aZo +beo +bfa +bgf +bhe +bhR +biK +cLf +bkD +bkB +bkB +cLh +bpi +bqy +cLf +btz +btz +btz +bxB +byE +bzC +bAS +bBU +bCZ +bEl +bFx +bHb +bIC +bIC +cQX +cRe +bNH +bOH +bPT +bQU +bRV +bNN +bNN +bNN +bNN +bNN +bwA +bxL +cRT +bYq +bwx +cVh +cVi +cVi +cVi +cVt +bwA +bwA +cZl +cZl +cZl +bwA +cZm +cZr +cZw +cZw +cZB +cZF +cZM +cZx +cZR +dar +daB +daK +daL +daK +dbc +cZC +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cXX +cYa +cXY +cYf +cXX abC abC -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131131,198 +126424,198 @@ aaa aaa aaa aaa -afV -agT -ahG -ain -aiZ -ajO -akH -cYh -afV -afS -adZ -aez -aez -aez -aez -asw -aty -auC -avJ -awX -axM -azj -aAD -aBS -aCS -azg -aFG -aHc -aIc -aFI -adZ -aLm -aMh -aNk -aOk -aPh -aQE -aRD -aSl -aLm -aLm -aLm -aLm -aPl -aLm -aLm -aLm -aLm -aXJ -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aXY -aZU -bal -cQB -cQG -cQG -cQG -cQG -cQG -cQG -cRd -bfY -bgK -bhP -biO -bjD -bkx -cWJ -bmw -cWX -boy -cWJ -cXq -bsC -cWJ -bvJ -bxm -bxm -bzV -cWJ -cWJ -bDt -bEt -bFC -cXQ -bIh -bJO -bLq -cMC -bLo -bPa -bQC -bRD -bSQ -bTS -bUT -bQH -bWE -bXg -bXU -bQH -bAd -bAd -byS -cMH -byS -bDb -byQ -byQ -byO -byP -bAd -aZt -aaa -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aab -aab -aad -aac -aac -aad -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +afH +agF +ahs +ahW +aiH +ajv +akn +cLu +afH +afE +adP +aep +aep +aep +aep +arS +asS +atW +avd +awr +axf +ayC +azV +aBk +aCk +ayz +aEV +aGq +aHn +aEX +adP +afH +aLj +aMg +aNe +aNZ +aPp +aQk aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa +aKq +aKq +aKq +aKq +aOc +aKq +aKq +aKq +aKq +aWk +aWz +aWz +cWZ +aWz +aWz +aWz +cWZ +aWz +aWz +cWZ +aWz +aWz +aWz +cWZ +aWz +aWz +aYt +aYK +cJd +cJi +cJi +cJi +cJi +cJi +cJi +cJp +bep +bfb +bgg +bhe +bhR +biK +cLf +bkF +cLg +bmE +cLf +cLi +bqz +cLf +btA +buZ +buZ +bxC +cLf +cLf +bAT +bBS +bCW +cLj +bFy +bHe +bIE +cHp +bIC +bMi +bNI +bOI +bPU +bQV +bRW +bNN +bTF +bUh +bUV +bNN +bxK +bxK +bwA +cHu +bwA +bAB +bwy +bwy +bww +cZk +caz +cQo +bYq +bYq +bYq +caz +cZn +cZs +cZx +cZx +cZC +cZs +cZs +cZx +cZR +cZR +cZC +daL +daK +daV +dbd +cZC +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs +aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131388,198 +126681,198 @@ aaa aaa aaa aaa -afV -agT -ahH -aio -aio -ajP -akH -cYh -amb -cYl -akp -afV -afS -cYj -arv -asw -atz -auD -avK -awY -axM -azk -aAE -aBT -aCT -azg -aFH -aHd -aId -aFI -adZ -aLm -aMi -aNl -aOl -aLm -aQF -aRD -aSl -aLm -aUu -aVg -aVC -aWf -aWC -aWP -aWZ -aXs -aXK -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aZV -baq -baQ -bbn -bbO -bcp -bcW -bco -bco -cQW -bfY -bgK -bhP -biO -bjD -bkx -cWJ -bms -bnl -cWJ -cKE -brh -bsy -cWJ -bvK -bxn -bvK -cWJ -bAZ -bBZ -bDs -bEt -bFB -cXQ -bIi -bJK -bLo -bLo -bLo -bPf -bQD -bRE -bSQ -bTS -bUU -bVR -bWF -bXg -bXV -bQH -bAd -bAd -bAd -bAd -bAd -byQ -byP -byP -bYK -byS -byS -aZt -aaa -aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -aab -aab -aad -aac -aac -aac -aad -aad -aaa -aaa -aaa -aaa -aaa -arw -cqC +afH +agF +aht +ahX +ahX +ajw +akn +cLu +alG +cLx +ajW +afH +afE +cLv +aqU +arS +asT +atX +ave +aws +axf +ayD +azW +aBl +aCl +ayz +aEW +aGr +aHo +aEX +adP +afH +aNz +aMh +cLA +aKq +aPq +aQk aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aKq +aSY +aTK +aUg +aUJ +aVg +aVr +aVB +aVT +aWl +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aYu +aYP +aZp +aZM +ban +baO +bbu +baN +baN +cJm +bep +bfb +bgg +bhe +bhR +biK +cLf +bkB +bls +cLf +cGb +bpe +bqv +cLf +btB +bva +btB +cLf +byF +bzE +bAS +bBS +bCV +cLj +bFz +bHb +bIC +bIC +bIC +bMn +bNJ +bOJ +bPU +bQV +bRX +bST +bTG +bUh +bUW +bNN +bxK +bxK +bxK +bxK +bxK +bwy +bwx +bwx +bwx +bVL +cHu +cHu +cZl +cZl +cZl +bwA +cZm +cZr +cZr +cZr +cZB +cZG +cZF +cZR +cZR +cZR +daB +daM +daM +daL +dbe +cZC +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs +aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131645,174 +126938,54 @@ aaa aaa aaa aaa -afV -agU -ahI -ahI -aja -ajQ -afS -afS -aiS -akp -alS -akq -amb -akp -akp -asw -asw -asw -asw -asw -asw -azl -azl -azl -azl -azl -aFI -aFI -aFI -aFI -adZ -aLm -aMj -aNl -daZ -aLm -aQG -aRN -aSG -aTA -aUv +afH +agG +ahu +ahu +aiI +ajx +afE +afE +aiA +ajW +alx +ajX +alG +ajW +ajW +arS +arS +arS +arS +arS +arS +ayE +ayE +ayE +ayE +ayE +aEX +aEX +aEX +aEX +adP +afH +axF +aMh +aLE +aKq +aPr +aQu +aRn +aSg +aSZ +aTL +aTL +aTL aVh -aVh -aVh -aWD -aLm -aLm -aLm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bal -bal -bal -bbP -bcr -bcX -bcX -bel -bfd -bfZ -bgL -bhP -biO -bjD -bkx -cWJ -bms -cWX -cWX -bpT -bri -bsD -cWJ -bvL -bvL -bvL -cWJ -bAZ -bBZ -bDs -bEw -bFG -cXQ -bIj -bJP -bLr -bML -bLr -bPg -bQE -bRF -bSR -bTT -bUU -bVR -bWF -bXg -bXW -bQH -bAd -bAd -bAd -byS -cbp -byQ -byP -byS -bAd -bAd -bAd -aZt -aaa -aaa -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aad -aac -aac -aac -aad -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa +aKq +aKq +aKq aaa aaa aaa @@ -131831,12 +127004,132 @@ aaa aaa aaa aaa +aYK +aYK +aYK +bao +baQ +bbv +bbv +bcG +bdy +beq +bfc +bgg +bhe +bhR +biK +cLf +bkB +cLg +cLg +bnU +bpf +bqA +cLf +btC +btC +btC +cLf +byF +bzE +bAS +bBV +bDa +cLj +bFA +bHf +bIF +bJX +bIF +bMo +bNK +bOK +bPV +bQW +bRX +bST +bTG +bUh +bUX +bNN +bxK +bxK +bxK +bwA +bYo +bwy +bwx +bwA +bxK +bxK +bxK +aXS aaa aaa +cGc +cGc +cZm +cZq +cZr +cZr +cZm +cZH +cZN +cZx +cZx +das +cZm +daN +daS +daL +cZm +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131902,198 +127195,198 @@ aaa aaa aaa aaa -afV -afW -afW -afS -ajb -afS -afS -adZ -adZ -afV -afq -akq -akq -akq -akp -cYC -atA -auE -ahr -aqj -aCr -aCr -aAF -aBU -aCr +afH +afI +afI +afE +aiJ +afE +afE +adP +adP +afH +afc +ajX +ajX +ajX +ajW +cLG +asU +atY +ahd +apJ +aBJ +aBJ +azX +aBm +aBJ +cMe +aBJ +aGs +aAS +adP +adP +afH +aLk +aMi +aNf +aNY +aPs +aQk +aRo +aKq +aMl +aMl +aMl +aMl +aMl +aKq +abW +abW +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGc +cGc +aaa +aaa +aXE +aXS +aYK +bap +baR +baO +baO +bcH +cJm +bep +bfd +bgg +bhe +bhR +biK +cLf +cLf +cLf +cLf +cLf +bpe +bqB +bsd +btD +bvb +bwq +bxD +byG +byG +bAU +bBW +bDb +bDc +bFt +bHg +bIC +bJY +bIC +bMp +bNJ +bOL +bPW +bQX +bRY +bNN +bTH +bUh +bUY +bNN +bxK +bxK +bxK +bwA +bwy +bwx +cRZ +cHu +aXS +aXS +aXS +aXS +aaa +aaa +aaa +aaa +cZm +cZt +cZy +cZA +cZm +cZI +cZO +cZx +cZx cZG -aCr -aHe -aBA -adZ -adZ -aLm -aMk -aNm -aOm -aPg -aQH -aRD -aSH -aLm -aNp -aNp -aNp -aNp -aNp -aLm -abW -abW -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cKF -cKF -aaa -aaa -aZf -aZt -bal -bbQ -bcs -bcp -bcp -bem -cQW -bfY -bgM -bhP -biO -bjD -bkx -cWJ -cWJ -cWJ -cWJ -cWJ -brh -bsE -buj -bvM -bxo -byI -bzW -bBa -bBa -bDu -bEx -bFH -bFI -bIc -bJQ -bLo -bMM -bLo -bPh -bQD -bRG -bSS -bTU -bUV -bQH -bWG -bXg -bXX -bQH -bAd -bAd -bAd -byS -byQ -byP -djx -cMH -aZt -aZt -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aad -aac -aac -aac -aad -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cZm +cZm +cZm +daW +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aqV +cXX +cXZ +cXY +cYg +cXX +aaa +aaa +aWs +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -132162,49 +127455,49 @@ aaa abC abC abC -afW -ajc -ahI -afV +afI +aiK +ahu +afH abC -akG -adZ -afV -aUV -cYB -aqH -akq -akq -akq -alQ -akq -akq -akq -akp -akq -akq -akq -akq -akq -akq -anC -dam -afS -aLn +akm +adP +afH +aTz +cLF +aqh +ajX +ajX +ajX +alv +ajX +ajX +ajX +ajW +ajX +ajX +ajX +ajX +ajX +ajX +anh +cMy +afE +afE +aLl +aMj +aNg +aKq +aPt +aQk +aRp +aKq +aTa +aTa aMl -aNn -aOn -aLm -aQI -aRD -aSI -aLm -aUw -aUw -aNp -aWg -aMo -aLm +aUK +aLo +aKq abW abW aaa @@ -132223,134 +127516,134 @@ aaa aaa aaa aaa -cKF -aaa -aZf -aZt -bal -bbQ -bct -bcY -bcp -ben -cQW -bfY -bgM -bhP -biO -bjD -bkx -bkw -blq -bkw -blq -cWJ -brj -bsF -buk -bvN -buk -byJ -bzX -buk -buk -bDv -bEy -bFI -bGV -bIk -bJR -bLs -bMN -bNK -bPi -bQF -bRH -bST -bTV -bUW -bVS -bWH -bXh -bXY -bQH -bAd -bAd -bAd -byQ -byP -byP -bAd -bAd -aZH -aZH -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aab -aaa -aaa -aaa -aaa +cGc aaa +aXE +aXS +aYK +bap +baS +bbw +baO +bcI +cJm +bep +bfd +bgg +bhe +bhR +biK +biJ +bjC +biJ +bjC +cLf +bpg +bqC +bse +btE +bse +bwr +bxE +bse +bse +bAV +bBX +bDc +bEm +bFB +bHh +bIG +bJZ +bKU +bMq +bNL +bOM +bPX +bQY +bRZ +bSU +bTI +bUi +bUZ +bNN +bxK +bxK +bxK +bwy +bwx +bwx +bxK +bxK +aYg +aYg +aXS +aXS aaa aaa aaa aaa +cZm +cZm +cZm +cZm +cZm +cZm +cZP +cZx +cZR +cZF +daC +cZm +cZm +cZm +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -132419,49 +127712,49 @@ aaa aaa aaa abC -afW -ajd -ajR -afV +afI +aiL +ajy +afH aaa abW abW -aez -aez -afS -aez -afV -cYj -cYT -apx -afq -afq -alQ -afV -aoy -apx -aqH -akq -afq -afq -anC -akq -aKn -aLn -aLn -aLm -aLm -aLm -aQB -aRD -aSJ -aLm -aLm -aLm -aLm -aLm -aLm -aLm +aep +aep +afE +aep +afH +cLv +cLL +aoX +afc +afc +alv +afH +anZ +aoX +aqh +ajX +afc +afc +anh +ajX +aJu +afE +afE +afH +afH +aKq +aPm +aQk +aRq +aKq +aKq +aKq +aKq +aKq +aKq +aKq abW abW aaa @@ -132482,132 +127775,132 @@ aaa aaa aaa aaa -aZt -aZt -bal -bal -bal -bal -bal -bal -cQX -bfY -bgM -bhP -biO -bjD -bky -bls -bky -bls -bkx -cWJ -brm -bsG -cKD -bvO -bxp -byK -bzY -bBb -bBb -bBb -bBb -bBb -bGW -bIl -bJS -bLl -bLl -bLl -bPj -bQB -bRI -bSU -bSS -bUX -bQH -bWI -bWI -bWI -bQH -bAd -bAd -byS -caM -byP -byS -bAd -aZt -aZH -aZH -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aac -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aXS +aXS +aYK +aYK +aYK +aYK +aYK +aYK +cJn +bep +bfd +bgg +bhe +bhR +biL +bjE +biL +bjE +biK +cLf +bpj +bqD +cGa +btF +bvc +bws +bxF +byH +byH +byH +byH +byH +bEn +bFC +bHi +bIz +bIz +bIz +bMr +bNH +bON +bPY +bPW +bSa +bNN +bTJ +bTJ +bTJ +bNN +bxK +bxK +bwA +bXL +bwx +bwA +bxK +aXS +aYg +aYg +aXS +aXS +aaa +aaa +cGc +cGc +cGc +cZo +cZu +cZm +cZm +cZm +cZJ +cZR +cZs +cZJ +cZm +cZm +cZm +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -132676,43 +127969,43 @@ aaa aaa aaa abC -afV -afV -agP -afV +afH +afH +agB +afH aaa abW abW abW acH acH -aez -afV -afS -afV -adZ -adZ -awZ -aqG -adZ -afS -aez -aez -cZH -afq -aoy -aIe -aCr -daw -cZG -daO -cZG -dba -aPi -aQJ -aRD -aSI -aLm +aep +afH +afE +afH +adP +adP +awt +aqg +adP +afE +aep +aep +cMf +afc +anZ +aHp +aBJ +cMG +cMe +cMP +cMe +cMV +aOa +aPu +aQk +aRp +aKq acH acH acH @@ -132739,132 +128032,132 @@ aaa aaa aaa aaa -aZH -aZH -aZH -aZt -aZH -aZH -aZH -aZH -cQW -bga -bgM -bhQ -biO +aYg +aYg +aYg +aXS +aYg +aYg +aYg +aYg +cJm +ber +bfd +bgh +bhe +bhS +biI +biI +biI +biI bjE -bkv -bkv -bkv -bkv -bls abC abC -bsH -cWJ -bvP -bxq -byL -cWJ +bqE +cLf +btG +bvd +bwt +cLf abC abC abC abC -blr -bGO -bIm -bJT -bLt -bMO -bLt -bPk -bQG -bRJ -bSU -bSS -bUY -bQH -bWI -bWI -bXZ -bQH -bAd -bAd -cMH -dgC -byP -byS -bBN -aZH -aZH -aZH -aZt -aZt -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bjD +bEf +bFD +bHj +bIH +bKa +bIH +bMs +bNM +bOO +bPY +bPW +bSb +bNN +bTJ +bTJ +bVa +bNN +bxK +bxK +cHu +cQu +bwx +bwA +bzs +aYg +aYg +aYg +aXS +aXS +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cZo +cZu +cZJ +cZS +cZS +cZJ +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -132934,11 +128227,11 @@ aaa aaa aaa abC -afV -agQ -afV +afH +agC +afH abC -akG +akm abW abW abW @@ -132948,28 +128241,28 @@ acH acH acH acH -aez -aez -aez +aep +aep +aep acH acH acH -aez -aEi -afS -afV -aez -afV -cYj -akp -cYC -dav -auZ -aPj -aQa -aRD -aSI -aLm +aep +aDz +afE +afH +aep +afH +cLv +ajW +cLG +cMF +aut +akn +aOL +aQk +aRp +aKq acH acH acH @@ -132994,134 +128287,134 @@ aaa aaa aaa aaa -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -cQW -bfY -bgM -bhP -biO -biO -biO -biO -cKx -biO -biO -biO -biO -biO -biO -biO -biO -biO -biO -biO -biO -biO -bEz -biO -biO -bIn -bJU -bpS -biO -biO -biO -bQH -bRK -bSU -bTW -bQH -bQH -bWJ -bXi -bXZ -bQH -byS -bAd -byQ -byP -byP -cMH -aZH -aZH -aZH -aZH -aZt -aZt +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +cJm +bep +bfd +bgg +bhe +bhe +bhe +bhe +cFX +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bhe +bBY +bhe +bhe +bFE +bHk +bnT +bhe +bhe +bhe +bNN +bOP +bPY +bQZ +bNN +bNN +bTK +bUj +bVa +bNN +bwA +bxK +bwy +bwx +bwx +cHu +aYg +aYg +aYg +aYg +aXS +aXS aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa -aac -aac -aac -aac -aac +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cYf +cqp abC abC -aXR -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aac -aab -aab -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -133209,24 +128502,24 @@ acH acH acH acH -aez -afS -afS -akp -aez +aep +afE +afE +ajW +aep acH acH -aez -aez -afS -afV -aLm -aLm -aLm -aQf -aRJ -aSK -aLm +aep +aep +afE +afH +aKq +aKq +aKq +aOQ +aQq +aRr +aKq acH acH acH @@ -133251,79 +128544,81 @@ aaa aaa aaa aaa -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -cQW -bfY -bgN -bhR -bfb -bjF -bfb -bfb -bfb -bnm -boz -bpU -boz -bsI -bul -bvQ -bxr -byM -bzZ -bBc -bCa -bDw -bEA -bFJ -bGX -bIo -bJV -bLu -bJZ -bJZ -bJZ -bJZ -bRL -bSV -bSS -bUZ -bQH -bQH -bQH -bQH -bQH -bTz -byQ -byQ -byP -bEi -bBN -aZH -aZH -aZH -aZH -aZt -aZt +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +cJm +bep +bfe +bgi +bdw +bhT +bdw +bdw +bdw +blt +bmF +bnV +bmF +bqF +bsf +btH +bve +bwu +bxG +byI +bzF +bAW +bBZ +bDd +bEo +bFF +bHl +bII +bHp +bHp +bHp +bHp +bOQ +bPZ +bPW +bSc +bNN +bNN +bNN +bNN +bNN +bQD +bwy +bwy +bwx +bBH +bzs +aYg +aYg +aYg +aYg +aXS +aXS aaa aaa aaa -aaa -aaa -aac -aac -aac -aac -aac +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -133342,43 +128637,41 @@ aaa aaa aaa aaa +aqV +cXX +cYa +cXY +cYf +cXX aaa aaa -arw -cqC -aQS -arz -ctC -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -133466,31 +128759,31 @@ abW abW abW abW -adZ -akp -akp -akp -aez +adP +ajW +ajW +ajW +aep acH acH acH acH acH abW -aLm -aOp -aPk -aQK -aRO -aSL -aLm +aKq +aNi +aOb +aPv +aQv +aRs +aKq acH acH acH acH acH abW -akG +akm abC abC abC @@ -133508,81 +128801,81 @@ abC abC abC abC -aZI -aZt -aZt -aZH -aZH -aZH -bcu -bcu -bcu -bcu -cRl -bfY -bgO -bhS -biP -bjG -bjG -bjG -bjG -bnn -bjG -bjG -brn -bst -bum -bvR -bxs -byN -bAa -bBd -bBd -bDx -bEB -bEB -bBd -bDx -bJW -bLv -bJZ -bNM -bPl -bJZ -bRM -bSW -bSS -bVa -bQH -bAd -bAd -bAd -byS -bDc -byQ -byP -dja -byS -bBN -aZH -aZH -aZt -aZt -aZt +aYh +aXS +aXS +aYg +aYg +aYg +baT +baT +baT +baT +cJq +bep +bff +bgj +bhf +bhU +bhU +bhU +bhU +blu +bhU +bhU +bpk +bqq +bsg +btI +bvf +bwv +bxH +byJ +byJ +bAX +bCa +bCa +byJ +bAX +bHm +bIJ +bHp +bKV +bMt +bHp +bOR +bQa +bPW +bSd +bNN +bxK +bxK +bxK +bwA +bAC +bwy +bwx +cRO +bwA +bzs +aYg +aYg +aXS +aXS +aXS aaa aaa aaa aaa -aaa -aad -aac -aac -aac -aac -aac -aad -aad +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -133601,34 +128894,12 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa aaa @@ -133636,6 +128907,28 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -133721,152 +129014,33 @@ abW abW abW abW -afS -afS -afS -afS -cYC -afV -adZ +afE +afE +afE +afE +cLG +afH +adP abW abW abW abW -aLm -aLm -aLm -aOq -aLm -aQL -aRD -aSl -aLm -acH -acH -acH -acH -abW -abW -abW -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aZt -aZt -aZt -aZH -aZH -aZH -bcu -bcZ -bdC -beo -cRl -bgb -bgP -bhT -biQ -bjH -bjH -blt -bjH -bno -boA -bjH -bro -bsr -bun -bvS -bxt -byE -bAb -bAR -bCb -bDy -bEC -bFK -bGY -bIp -bJX -bLw -bMP -bNN -bPm -bJZ -bRN -bSX -bTX -bVb -bQH -bAd -bAd -bAd -cMH -byQ -byP -djl -bZS -cMH -cMH -bZS -aZH -aZH -aZH -aZt -aaa -aaa -aaa -aaa -aac -aac -aac -aac -aac -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -cqC +aKq +aKq +aKq +aNj +aKq +aPw +aQk aQS -arz -cUy -cuk -aaa -aaa -aXR +aKq +acH +acH +acH +acH +abW +abW +abW aaa aaa aaa @@ -133884,6 +129058,125 @@ aaa aaa aaa aaa +aXS +aXS +aXS +aYg +aYg +aYg +baT +bbx +bbZ +bcJ +cJq +bes +bfg +bgk +bhg +bhV +bhV +bjF +bhV +blv +bmG +bhV +bpl +bqo +bsh +btJ +bvg +bwm +bxI +byx +bzG +bAY +bCb +bDe +bEp +bFG +bHn +bIK +bKb +bKW +bMu +bHp +bOS +bQb +bRa +bSe +bNN +bxK +bxK +bxK +cHu +bwy +bwx +cRU +bWS +cHu +cHu +bWS +aYg +aYg +aYg +aXS +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aqV +cmQ +cXY +cXY +cYf +cqp +aaa +aaa +aWs +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa aaa aaa aaa @@ -133978,29 +129271,29 @@ abW abW abW abW -afS -azm -akp -cYl -akp -afS -adZ +afE +ayF +ajW +cLx +ajW +afE +adP abW abW abW abW +aKq aLm -aMm -aMn -aOq -aLm -aQM -aRK -aSw -aLm -aLm -aLm -aLm +aLn +aNj +aKq +aPx +aQr +aRd +aKq +aKq +aKq +aKq abE abE abE @@ -134022,79 +129315,81 @@ aaa aaa aaa aaa -aZf -aZt -aZt -aZH -aZH -aZH -bcu -bda -bdD -bdD -cRn -cRo -bgQ -bhU -bgQ -cRo -cRv -cQG -cQG -bnp -cQG -cQG -brp -cQz -buo -cQG -cQG -cTm -bAc -bBe +aXE +aXS +aXS +aYg +aYg +aYg +baT +bby +bca +bca +cJr +cJs +bfh +bgl +bfh +cJs +cJu +cJi +cJi +blw +cJi +cJi +bpm +cJb +bsi +cJi +cJi +cJQ +bxJ +byK +bzH +bAZ bCc -bDz -bED -bFL -bGZ -bIq -bJY -bLx -bMQ -bNO -bPn -bJZ -bQH -bQH -bTY -bQH -bQH -cMH -byS -byS -cMH -byQ -byP -bZS -cMH -cbq -cbT -cMH -aZH -aZH -aZH +bDf +bEq +bFH +bHo +bIL +bKc +bKX +bMv +bHp +bNN +bNN +bRb +bNN +bNN +cHu +bwA +bwA +cHu +bwy +bwx +bWS +cHu +bYp +bYS +cHu +aYg +aYg +aYg aaa aaa aaa aaa aaa -aac -aac -aac -aac -aac -aac -aac +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -134113,17 +129408,15 @@ aaa aaa aaa aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk +aqV +cmQ +cXY +cXY +cYf +cqp abC abC -aXR +aWs aaa aaa aaa @@ -134235,29 +129528,29 @@ abW abW abW abW -afS -azn -akp -cJM -afV -afV +afE +ayG +ajW +cFu +afH +afH abW abW abW abW abW -aLm -aMn -aNo -aOq -aPl -aQN -aRD -aSM -aTB -aUx -aNp -aLm +aKq +aLn +aMk +aNj +aOc +aPy +aQk +aRt +aSh +aTb +aMl +aKq abE abE abE @@ -134279,77 +129572,81 @@ aaa aaa aaa aaa -aZf -aZt -aZt -aZH -aZH -aZH -bcu -bdb -bdD -bdD -bfe -bgc -bgR -bhV -biR -bjI -bkz -blu -bmx -bnq -bco -bal -brq -bsJ -bup -bal -bxu -cTn -cTp -cTq +aXE +aXS +aXS +aYg +aYg +aYg +baT +bbz +bca +bca +bdz +bet +bfi +bgm +bhh +bhW +biM +bjG +bkG +blx +baN +aYK +bpn +bqG +bsj +aYK +bvh +cJR +cJS +cJT +bzI +bBa bCd -bDA -bEE -bFM -bHa -bBf -bJZ -bJZ -bJZ -bNP -bPo -bJZ -bJZ -bQH -cLc -cLe -cbr -cMV -cMH -cMH -byQ -byP -byP -caj -caN -caO -cbr -bZS -aZH -aZH -aZH +bDg +bEr +byL +bHp +bHp +bHp +bKY +bMw +bHp +bHp +bNN +cGq +cGr +bYq +cHy +cHu +cHu +bwy +bwx +bwx +bXi +bXM +bXN +bYq +bWS +aYg +aYg +aYg aaa aaa -aaa -aaa -aab -aac -aac -aac -aac -aad +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -134368,22 +129665,15 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa +aWs aaa aaa aaa @@ -134391,6 +129681,9 @@ aaa aaa aaa aaa +cyv +cAa +cyv aaa aaa aaa @@ -134490,31 +129783,31 @@ aaa aaa abW abW -akG +akm abW -afV -azo -aAG -afV -afV +afH +ayH +azY +afH +afH abW abW abW abW abW abW -aLm -aMo -aNp -aOq -aLm -aQO -aRD -aSN -aLm -aUy -aVi -aLm +aKq +aLo +aMl +aNj +aKq +aPz +aQk +aRu +aKq +aTc +aTM +aKq abE abE abE @@ -134536,77 +129829,81 @@ aaa aaa aaa aaa -aZf -aZf -aZt -aZH -aZH -aZH -bcu -bdb -bdE -bep -bff -bgd -bgS -bhW -biS -bjJ -bkz -bcp -bcp -bnr -bco -bal -baP -cSv -buq -bvT -bxv -dfU -bAd -cTr +aXE +aXE +aXS +aYg +aYg +aYg +baT +bbz +bcb +bcK +bdA +beu +bfj +bgn +bhi +bhX +biM +baO +baO +bly +baN +aYK +aZo +cJA +bsk +btK +bvi +cQe +bxK +cJU +bzJ +bBb bCe -bDB -bEF -bFN -bHb -bBf -bJZ -bLy -bMR -bNQ -bPp -bJZ -bJZ -bQH -bTZ -bQH -bAd -cbr -cbr -byP -byP -byO -bZS -cMH -cMH -cbr -cbU -cMH -aZH -aZH -aZH +bDh +bEs +byL +bHp +bIM +bKd +bKZ +bMx +bHp +bHp +bNN +bRc +bNN +bxK +bYq +bYq +bwx +bwx +bww +bWS +cHu +cHu +bYq +bYT +cHu +aYg +aYg +aYg aaa aaa -aaa -aad -aac -aac -aac -aac -aac -aab +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -134625,30 +129922,26 @@ aaa aaa aaa aaa +aqV +cXX +cXZ +cXY +cYh +cXX aaa aaa -aaa -aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa aaa aaa +cyv +czn +czo +czn +cyv aaa aaa aaa @@ -134749,10 +130042,10 @@ aaa aaa abC aaa -afV -ajo -ajo -afV +afH +aiW +aiW +afH abW abW abW @@ -134760,18 +130053,18 @@ abW abW abW abW -aLm -aMo -aNp -aOq -aLm -aQP -aRD -aSN -aLm -aUy -aNp -aLm +aKq +aLo +aMl +aNj +aKq +aPA +aQk +aRu +aKq +aTc +aMl +aKq abE abE abE @@ -134783,6 +130076,7 @@ aaa aaa aaa aaa +aag aaa aaa aaa @@ -134792,78 +130086,77 @@ aaa aaa aaa aaa -aaa -aZf -aZf -aZt -aZH -aZH -aZH -bcu -bdc -bdF -beq -beq -bge -bgT -bhX -biT -bjK -bkz -bcY -bcp -bns -boB -bal -baP -cSv -bhP -bvU -bxw -cbr -bAe -cTr +aXE +aXE +aXS +aYg +aYg +aYg +baT +bbA +bcc +bcL +bcL +bev +bfk +bgo +bhj +bhY +biM +bbw +baO +blz +bmH +aYK +aZo +cJA +cXC +btL +bvj +bYq +bxL +cJU +bzK +bBc bCf -bDC -bEG -bFO -bHc -bBf -bJZ -bLz -bLz -bLz -bPq -bJZ -bJZ -cLa -cLa -cLa -bAd -cMH -byP -byP -byP -byP -cMH -cak -caO -cbr -cbr -cMH -aZt +bDi +bEt +byL +bHp +bIN +bIN +bIN +bMy +bHp +bHp +cGo +cGo +cGo +bxK +cHu +bwx +bwx +bwx +bwx +cHu +bXj +bXN +bYq +bYq +cHu +aXS aaa aaa aaa aaa -aaa -aad -aac -aac -aac -aac -aac -cgf +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -134886,26 +130179,26 @@ aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa +aWs aaa aaa aaa aaa aaa aaa +cyw +czo +czo +cAI +cyw aaa aaa aaa @@ -135017,18 +130310,18 @@ abW abW abW abW -aLm -aMp -aNq -aOq -aLm -aQN -aRD -aSN -aLm -aUy -aNq -aLm +aKq +aLp +aMm +aNj +aKq +aPy +aQk +aRu +aKq +aTc +aMm +aKq abE abE abE @@ -135050,119 +130343,119 @@ aaa aaa aaa aaa -aZf -aZf -aZt -aZH -aZH -aZH -bcu -bdb -bdD -bdD -bfg -bgf -bgU -bhY -biU -bjL -bkz -bcp -bcp -bnt -boC -bfa -baP -cSv -bur -bal -bxx -cbr -cbr -cTr +aXE +aXE +aXS +aYg +aYg +aYg +baT +bbz +bca +bca +bdB +bew +bfl +bgp +bhk +bhZ +biM +baO +baO +blA +bmI +bdv +aZo +cJA +bsl +aYK +bvk +bYq +bYq +cJU +bzL +bBd bCg -bDD -bEH -bFP -bHd -bBf -bJZ -bLz -bLz -bNR -bPr -bJZ -bJZ -bAd -bAd -bAd -bAd -bAd -bVA -byQ -byP -dje -cMH -cal -caP -caO -caO -cMH -aZt +bDj +bEu +byL +bHp +bIN +bIN +bLa +bMz +bHp +bHp +bxK +bxK +bxK +bxK +bxK +bSD +bwy +bwx +cRQ +cHu +bXk +bXO +bXN +bXN +cHu +aXS aaa aaa aaa aaa -aaa -aad -aac -aac -aac -aac -aac -aab +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aag aaa aaa -chi -chi -chC +cdZ +cdZ +ceo abC abC -ciQ -cjr -cjr -chi -chi +cfv +cfT +cfT +cdZ +cdZ aaa aaa aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa +aWs aaa aaa aaa aaa aaa aaa +cyw +czp +czo +cAJ +cyw aaa aaa aaa @@ -135274,18 +130567,18 @@ abW abW abW abW -aLm -aLm -aLm -aOr -aLm -aQQ -aRD -aSi -aLm -aUz -aLm -aLm +aKq +aKq +aKq +aNk +aKq +aPB +aQk +aQP +aKq +aTd +aKq +aKq abE abE abE @@ -135307,112 +130600,107 @@ aaa aaa aaa aaa -aZf -aZf -aZt -aZH -aZH -aZH -bcu -bdb -bdD -bdD -bfh -bgc -bgV -bhZ -biV -bjM -bkz -bbQ -bbQ -bnu -boD -bal -baP -cSv -bus -bal -bxy -byR -cbr -cTu -cTq -cTz -bBf -bBf -bBf -bBf -bJZ -bLz -bLz -bLz -bPs -bJZ -bJZ -bAd -bAd -bAd -bAd -byS -bYa -byQ -byP -bAd -cMH -bZS -bZS -cbs -cbV -cMH -aZt +aXE +aXE +aXS +aYg +aYg +aYg +baT +bbz +bca +bca +bdC +bet +bfm +bgq +bhl +bia +biM +bap +bap +blB +bmJ +aYK +aZo +cJA +bsm +aYK +bvl +bwz +bYq +cJV +cJT +cJX +byL +byL +byL +byL +bHp +bIN +bIN +bIN +bMA +bHp +bHp +bxK +bxK +bxK +bxK +bwA +bVb +bwy +bwx +bxK +cHu +bWS +bWS +bYr +bYU +cHu +aXS +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa -aaa -aac -aac -aac -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -arw +aqV abC -arw -aYn -aXB -cin -aYn -aYn -cjR -aYB -arw +aqV +aWO +aWc +ceS +aWO +aWO +cgs +aXc +aqV aaa aaa aaa aaa aaa aaa -arw -cqC -aQS -arz -dlA -cuk -aaa -aXR -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa +aWs aaa aaa aaa @@ -135420,6 +130708,11 @@ aaa aaa aaa aaa +cyx +czq +czo +cAK +cyx aaa aaa aaa @@ -135476,37 +130769,37 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaf -aaf -aaf -aeh -aeh -aeh -aeh -aeh -aeh -aaa -aaa -ahT -ajS -ahT +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +abC aaa aaa aaa @@ -135520,8 +130813,8 @@ aaa aaa abC aaa -aaa -aaa +cGc +cGc aaa aaa aaa @@ -135533,15 +130826,15 @@ abW abW abW abW -aLm -aOs -aLm -aQN -aRD -aSO -aLm -aUA -aLm +aKq +aNl +aKq +aPy +aQk +aRv +aKq +aTe +aKq aaa aaa aaa @@ -135564,112 +130857,107 @@ aaa aaa aaa aaa -aZf -aZf -aZt -aZt -aZH -aZH -bcu -bcu -bcu -bcu -bcu -bcu -bcu -bcu -bcu -bcu -bkz -bal -bal -bal -boE -bal -baP -cSv -bhP -bal -bxz -byS -cbr -cbr -cTu -cTA -bBf -bBN -bBN -bBN -bJZ -bJZ -bJZ -bJZ -bJZ -bJZ -bJZ -bAd -bAd -bAd -bAd -byS -byQ -byP -bYK -byS -aZH -aZH -cMH -bZS -cMH -cMH -aZt +aXE +aXE +aXS +aXS +aYg +aYg +baT +baT +baT +baT +baT +baT +baT +baT +baT +baT +biM +aYK +aYK +aYK +bmK +aYK +aZo +cJA +cXC +aYK +bvm +bwA +bYq +bYq +cJV +cJY +byL +bzs +bzs +bzs +bHp +bHp +bHp +bHp +bHp +bHp +bHp +bxK +bxK +bxK +bxK +bwA +bwy +bwx +bVL +bwA +aYg +aYg +cHu +bWS +cHu +cHu +aXS +aaa +aaa +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa -aaa -aaa -aaa -aab -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -che -che -che +cdV +cdV +cdV abC -aYB +aXc abC -chi -che -che -che -chi +cdZ +cdV +cdV +cdV +cdZ aaa aaa aaa aaa aaa aaa -arw -cqC -aQS -arz -cUy -cuk -aaa -aXR -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa +aWs aaa aaa aaa @@ -135677,6 +130965,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -135748,28 +131041,28 @@ aaa aaa aaa aaa -aaf -aaf -adg -adg -adg -adg -adg +aaa +aaa aaf aaf aaf -adg -adg -adg -adg -ajT -ahT -aaa -aaa -aaa -aaa +adX +adX +adX +adX +adX +adX aaa aaa +ahF +ajz +ahF +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -135777,9 +131070,9 @@ aaa aaa abC aaa -aaa -aaa -aaa +cGc +cGc +cGc aaa aaa abW @@ -135790,15 +131083,15 @@ abW abW abW abW -aLm -aOt -aLm -aQR -aRP -aSP -aLm -aUz -aLm +aKq +aNm +aKq +aPC +aQw +aRw +aKq +aTd +aKq abC abC abC @@ -135821,65 +131114,65 @@ abC abC abC abC -aZI -aZt -aZt -aZt -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZt -aZt -aZt -bal -boF -bal -brr -cSv -bhP -bal -bxA -cMH -dge -cbr -bBN -bBN -cMH -cMH -cMH -caM -bJZ -bJZ -bJZ -bJZ -bJZ -bJZ -bJZ -bAd -bAd -bAd -byS -byQ -byO -byP -byS -bBN -aZt -aZt -aZt -aZt -aZt -aZt -aZt +aYh +aXS +aXS +aXS +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aYK +bmL +aYK +bpo +cJA +cXC +aYK +bvn +cHu +cQj +bYq +bzs +bzs +cHu +cHu +cHu +bXL +bHp +bHp +bHp +bHp +bHp +bHp +bHp +bxK +bxK +bxK +bwA +bwy +bww +bwx +bwA +bzs +aXS +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -135901,8 +131194,8 @@ aaa aaa aaa abC -aYG -cio +aXh +ceT aaa aaa aaa @@ -135914,18 +131207,13 @@ aaa aaa aaa aaa -arw -cqD -crO -csA -ctD -cqD -aXR -aaa -aaa -aaa -aaa -aaa +aqV +cmR +cnZ +coI +cpJ +cmR +aWs aaa aaa aaa @@ -135934,6 +131222,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -136002,25 +131295,25 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaf +aaf +add +add +add +add +add aaf aaf aaf -aaf -aaf -adg -adt -adt -adt -adg -adg -adg -adg -adg -adt -adt -adt -ajT -aae +add +add +add +add +ajA +ahF aaa aaa aaa @@ -136034,13 +131327,13 @@ aaa aaa abC aaa -aaa -aaa -aaa +cGc +cGc +cGc aaa aaa abW -akG +akm abW abW abW @@ -136048,13 +131341,13 @@ abW abW abW aaa -aOu -aPm -aQS -arz -aSQ -aTC -aUB +aNn +aOd +aqW +aqW +aqW +aSi +aTf aaa aaa aaa @@ -136078,64 +131371,64 @@ aaa aaa aaa aaa -aZt -aZt -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZt -aZt -aZf -bal -boG -bal -bap -cSB -but -bal -bxz -byS -bAd -dgn -cbr -cbr -dgQ -dfU -byP -bDa -byQ -byQ -byQ -bNS -byS -bAd -bAd -byS -bAd -bAd -cMH -byQ -byP -byS -bBN -aZH -aZt -aZt -aZt -aZt -aZt -aZt +aXS +aXS +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aXS +aXS +aXE +aYK +bmM +aYK +aYO +cJB +bsn +aYK +bvm +bwA +bxK +cQo +bYq +bYq +cQC +cQe +bwx +bAA +bwy +bwy +bwy +bLb +bwA +bxK +bxK +bwA +bxK +bxK +cHu +bwy +bwx +bwA +bzs +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -136158,31 +131451,26 @@ aaa aaa aaa abC -aYG +aXh abC aaa aaa aaa aaa -cfI -cfI -cfI -aaa -aaa -aaa -cmZ -cpR -cmZ -crP -csB -ctE -cul -cfJ -aaa -aaa +ccG +ccG +ccG aaa aaa aaa +cjv +cmi +cjv +coa +coJ +cpK +cqq +ccH aaa aaa aaa @@ -136191,6 +131479,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -136256,29 +131549,29 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaf +aaf +aaf +aaf +aaf +add +adn +adn +adn +add +add +add +add +add +adn +adn +adn +ajA aae -aae -aae -aae -aae -aae -aae -aae -adg -adt -adN -aei -aeH -adt -afz -adt -agV -ahJ -aip -adt -ajU -aae -aae +aaa aaa aaa aaa @@ -136291,9 +131584,9 @@ aaa aaa abC aaa -aaa -aaa -aaa +cGc +cGc +cGc aaa aaa aaa @@ -136305,13 +131598,13 @@ abW abW abW aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -136336,63 +131629,63 @@ aaa aaa aaa aaa -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZt -aZt -aZf -aZf +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aXS +aXS +aXE +aXE aaa -boH -bpV -aQS -cSC -aSQ -bvV -bxB -aZt -bAd -byS -cbr -dgD -bvU -bDd -byP -byP -byP -byP -byO -byQ -dhI -byS -bAd -diy -bUa -byS -byQ -byQ -byP -cMH -aZH -aZH -aZt -aZt -aZt -aZt -aZt -aZt +bmN +bnW +aPD +cJC +cXD +btM +bvo +aXS +bxK +bwA +bYq +cQv +btL +bAD +bwx +bwx +bwx +bwx +bww +bwy +cRf +bwA +bxK +cRC +bRd +bwA +bwy +bwy +bwx +cHu +aYg +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -136414,33 +131707,28 @@ aaa aaa aaa aaa -chp -chQ -chp -cfI -cfI -cfI -cfI -cfI -cfI -cfJ -cfJ -cfI -cfI -cmZ -cpS -cmZ -crP -csC -ctF -cqD -cfJ -cfJ -aaa -aaa -aaa -aaa -aaa +cef +cey +cef +ccG +ccG +ccG +ccG +ccG +ccG +ccH +ccH +ccG +ccG +cjv +cmj +cjv +coa +coK +cpL +cmR +ccH +ccH aaa aaa aaa @@ -136448,6 +131736,11 @@ aaa aaa aaa aaa +cyy +czq +czo +cAK +cyy aaa aaa aaa @@ -136508,9 +131801,9 @@ aaa aaa aaa aaa -aaf -aaf -aaf +aaa +aaa +aaa aaa aaa aae @@ -136521,21 +131814,21 @@ aae aae aae aae -adg -adt -adO -aej -aeI -afd -afA -afd -agW -ahK -aiq -adt -ajT +add +adn +adD +adY +aew +adn +afl +adn +agH +ahv +ahY +adn +ajB +aae aae -aaf aaa aaa aaa @@ -136548,9 +131841,9 @@ aaa aaa abC aaa -aaa -aaa -aaa +cGc +cGc +cGc aaa aaa aaa @@ -136562,13 +131855,13 @@ aaa aaa aaa aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -136593,63 +131886,63 @@ aaa aaa aaa aaa -aZH -aZH -aZH -aZH -aZH -aZt -aZt -aZt -aZt -aZt -aZt -aZH -aZH -aZH -aZt -aZt -aZf -aZf +aYg +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aXS +aXS +aXS +aYg +aYg +aYg +aXS +aXS +aXE +aXE aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw -aZt -aZt -bAd -byS -dgE -byS -byQ -bBg -bDb -byQ -byQ -byP -byP -byQ -dgC -byQ -byQ -byQ -bDa -byQ -byP -dja -cMH -aZH -aZH -aZt -aZt -aZt -aZt -aZt -aZt +aqV +bnX +aPD +cJC +cXD +btN +aqV +aXS +aXS +bxK +bwA +cQw +bwA +bwy +byM +bAB +bwy +bwy +bwx +bwx +bwy +cQu +bwy +bwy +bwy +bAA +bwy +bwx +cRO +cHu +aYg +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -136671,33 +131964,28 @@ aaa aaa aaa aaa -chp -chR -chp -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cmZ -cnH -cnH -cmZ -cpT -cmZ -crQ -csC -ctF -cqD -cfJ -cfJ -aaa -aaa -aaa -aaa -aaa +cef +cez +cef +ccG +ccG +ccG +ccH +ccH +ccH +ccH +cjv +ckd +ckd +cjv +cmk +cjv +cob +coK +cpL +cmR +ccH +ccH aaa aaa aaa @@ -136705,6 +131993,11 @@ aaa aaa aaa aaa +cyw +czr +czo +cAL +cyw aaa aaa aaa @@ -136764,37 +132057,35 @@ aaa aaa aaa aaa -aaf -aaf -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -aae -adg -adu -adt -adt -adt -adt -afB -afX -adt -adt -adt -aje -ajT +aaa aaf aaf aaf +aaa +aaa aae +aae +aae +aae +aae +aae +aae +aae +add +adn +adE +adZ +aex +aeP +afm +aeP +agI +ahw +ahZ +adn +ajA +aae +aaf aaa aaa aaa @@ -136803,6 +132094,16 @@ aaa aaa aaa aaa +aaa +aaa +abC +aaa +cGc +cGc +cGc +aaa +aaa +aaa abC aaa aaa @@ -136811,21 +132112,13 @@ aaa aaa aaa aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -136854,59 +132147,59 @@ aaa aaa aaa aaa -aZt -aZt -aZt -aZf -aZf -aZf -aZf -aZH -aZH -aZH -aZH -aZf -aZf -aZI +aXS +aXS +aXS +aXE +aXE +aXE +aXE +aYg +aYg +aYg +aYg +aXE +aXE +aYh aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw -aZt -aZt -aZt -bBN -bBN -byS -cMH -byS -bBN -cMH -cMH -byS -byP -byP -byP -byO -byP -byP -byP -byP -byP -cMH -byS -aZH -aZt -aZt -aZt -aZt -aZt -aZt -aZt +aqV +bnX +aPD +cJC +cXD +btN +aqV +aXS +aXS +aXS +bzs +bzs +bwA +cHu +bwA +bzs +cHu +cHu +bwA +bwx +bwx +bwx +bww +bwx +bwx +bwx +bwx +bwx +cHu +bwA +aYg +aXS +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -136926,35 +132219,30 @@ aaa aaa aaa aaa -cfI -chp -chp -chS -chp -chp -cfI -cfJ -cfJ -cgi -cgi -cgi -cmZ -cnI -coy -cpj -cpU -cqE -crR -csD -ctG -cqD -cfJ -cfJ -aaa -aaa -aaa -aaa -aaa +ccG +cef +cef +ceA +cef +cef +ccG +ccH +ccH +cde +cde +cde +cjv +cke +ckU +clC +cml +cmS +coc +coL +cpM +cmR +ccH +ccH aaa aaa aaa @@ -136962,6 +132250,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -137020,14 +132313,8 @@ aaa aaa aaa aaa -aae -aae -aae -aae -aae -aae -aae -aae +aaa +aaf aaf aae aae @@ -137035,24 +132322,29 @@ aae aae aae aae -adg -adv -adP -aek -aeJ -afe -afC -afd -afd -ahL -air -ajf -ajT +aae +aae +aae +aae +aae +aae +add +ado +adn +adn +adn +adn +afn +afJ +adn +adn +adn +aiM +ajA aaf aaf aaf aae -aaf aaa aaa aaa @@ -137060,6 +132352,15 @@ aaa aaa aaa aaa +aaa +abC +aaa +cGc +cGc +cGc +aaa +aaa +aaa abC aaa aaa @@ -137068,21 +132369,13 @@ aaa aaa aaa aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +cYs +cYx +aqW +cYF +cYH +aqV aaa aaa aaa @@ -137111,57 +132404,57 @@ aaa aaa aaa aaa -aZf -aZf -aZf -aZf -aZf -aZt -aZt -aZt -aZt -aZH -aZH -aZf +aXE +aXE +aXE +aXE +aXE +aXS +aXS +aXS +aXS +aYg +aYg +aXE aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw -aZt -aZt -aZt -aZt -aZt -aZH -aZH -aZH -aZt -aZt -aZt -byS -byS -bBN -bBN -cMH -bBN -bBN -byS -cMH -cMH -byS -aZH -aZH -aZt -aZt -aZt -aZt -aZf +aqV +cXr +cXu +cJC +cXE +cXJ +aqV +aXS +aXS +aXS +aXS +aXS +aYg +aYg +aYg +aXS +aXS +aXS +bwA +bwA +bzs +bzs +cHu +bzs +bzs +bwA +cHu +cHu +bwA +aYg +aYg +aXS +aXS +aXS +aXS +aXE aaa aaa aaa @@ -137182,43 +132475,43 @@ aaa aaa aaa aaa -cfJ -cfI -chq -chD -chT -cip -chr -cjV -cjU -chc -cgu -cgu -cgu -cmZ -cnJ -coz -cpk -cpV -cqF -crS -csC -ctH -cqD -cfJ -cfJ -cfJ -aaa -aaa -aaa -aaa -aaa +ccH +ccG +ceg +cep +ceB +ceU +ceh +cgw +cgv +cdU +cdq +cdq +cdq +cjv +ckf +ckV +clD +cmm +cmT +cod +coK +cpN +cmR +ccH +ccH +ccH aaa aaa aaa aaa aaa aaa +cyw +cyx +cAb +cyx +cyw aaa aaa aaa @@ -137276,7 +132569,7 @@ aaa aaa aaa aaa -aaf +aaa aae aae aae @@ -137286,29 +132579,29 @@ aae aae aae aaf -aaf -aaf -aaf -aaf -aaf -aaf -adg -adg -adQ -ael -aeK -adS -afD -adS -adt -ahM -ais -adg -ajT aae -aaf aae aae +aae +aae +aae +add +adp +adF +aea +aey +aeQ +afo +aeP +aeP +ahx +aia +aiN +ajA +aaf +aaf +aaf +aae aaf aaa aaa @@ -137319,9 +132612,9 @@ aaa aaa abC aaa -aaa -aaa -aaa +cGc +cGc +cGc aaa aaa aaa @@ -137333,13 +132626,13 @@ aaa aaa aaa aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -137368,56 +132661,56 @@ aaa aaa aaa aaa -aZI -aZf -aZf -aZt -aZt -aZt -aZt -aZI -aZt -aZt +aYh +aXE +aXE +aXS +aXS +aXS +aXS +aYh +aXS +aXS aaa aaa aaa abC aaa -arw -bpW -aQS -cSC -buu -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa -aZt -aZt -aZt -aZH -aZH -aZH -aZH -aZt -aZt -aZt -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZH -aZt -aZt -aZt -aZt -aZt -aZt +aXS +aXS +aXS +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -137438,43 +132731,43 @@ aaa aaa aaa aaa -cfI -cfI -cfI -chr -chE -chU -ciq -ciR -cjs -cjS -cll -cjV -cjU -chc -cna -cnK -coA -cpl -cpW -cqG -crT -csC -ctF -cqD -cfJ -cfJ -cfJ -cfJ -cqD -cza -cqD +ccG +ccG +ccG +ceh +ceq +ceC +ceV +cfw +cfU +cgt +chK +cgw +cgv +cdU +cjw +ckg +ckW +clE +cmn +cmU +coe +coK +cpL +cmR +ccH +ccH +ccH +ccH +cmR +cva +cmR aaa aaa aaa -cqD -cza -cqD +cmR +cva +cmR aaa aaa aaa @@ -137534,46 +132827,54 @@ aaa aaa aaa aaf -aaf -aaf -aal -aal -aal -aal -aal -aal -aal -aal -aal -aal -aal -aaf -aaf -aaf -adg -adR -aem -aeL -adS -afE -adS -adt -adt -adt -adg -ajV +aae +aae +aae +aae aae aae aae aae aaf aaf +aaf +aaf +aaf +aaf +aaf +add +add +adG +aeb +aez +adI +afp +adI +adn +ahy +aib +add +ajA +aae +aaf +aae +aae +aaf aaa aaa aaa aaa aaa aaa +aaa +abC +aaa +cGc +cGc +cGc +aaa +aaa +aaa abC aaa aaa @@ -137581,22 +132882,14 @@ aaa aaa aaa aaa -aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQT -arz -aSQ -aTD -arw +cGc +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -137640,13 +132933,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa aaa aaa @@ -137657,24 +132950,24 @@ aaa aaa aaa aaa -aZt -aZH -aZH -aZH -aZH -aZt -aZt -aZt -aZH -aZH -aZH -aZH -aZt -aZt -aZt -aZt -aZt -aZt +aXS +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aYg +aYg +aYg +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -137692,52 +132985,52 @@ aaa aaa aaa aaa -cfI -cfI -cfI -cfI -cfI -cfI -chq -chF -chV -cir -chq -dkH -dkJ -dkK -dkS -cHM -cjV -cmZ -cmZ -cmZ -cmZ -cmZ -cmZ -crU -csE -ctI -cqD -cfJ -cfJ -cfJ -cfJ -cxr -czb -cxr +ccG +ccG +ccG +ccG +ccG +ccG +ceg +cer +ceD +ceW +ceg +cSi +cSk +cSl +cSs +cDD +cgw +cjv +cjv +cjv +cjv +cjv +cjv +cof +coM +cpO +cmR +ccH +ccH +ccH +ccH +ctt +cvb +ctt aaa aaa aaa -cxr -czb -cxr +ctt +cvb +ctt aaa aaa -cqD -cqD -cqD -cqD +cmR +cmR +cmR +cmR aaa aaa aaa @@ -137792,8 +133085,7 @@ aaa aaa aaf aaf -aal -aal +aaf aal aal aal @@ -137807,23 +133099,23 @@ aal aal aaf aaf -adw -adS -adS -adS -adS -afF -adS -adS -adS -adS -adw -ajV -aae -aae -aae -aae aaf +add +adH +aec +aeA +adI +afq +adI +adn +adn +adn +add +ajC +aae +aae +aae +aae aaf aaf aaa @@ -137831,6 +133123,15 @@ aaa aaa aaa aaa +aaa +abC +aaa +cGc +cGc +cGc +aaa +aaa +aaa abC aaa aaa @@ -137839,21 +133140,13 @@ aaa aaa aaa aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -137897,13 +133190,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa aaa aaa @@ -137914,24 +133207,24 @@ aaa aaa aaa aaa -aZt -aZH -aZH -aZH -aZH -aZt +aXS +aYg +aYg +aYg +aYg +aXS aaa -aZI -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt +aYh +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -137949,52 +133242,52 @@ aaa aaa aaa aaa -cfI -cfI -cfI -cfI -cfI -cfI -chq -chq -chr -chr -chr -cjU -cgu -dkL -dkH -dkJ -cms -cnb -cmA -coB -cgL -cpX -cqH -crV -csC -ctF -cWG -cqD -cqD -cqD -cqD -cqD -czc -cqD -cqD -cqD -cqD -cqD -czc -cqD -cqD -cqD -cul -cFR -cGj -cqD +ccG +ccG +ccG +ccG +ccG +ccG +ceg +ceg +ceh +ceh +ceh +cgv +cdq +cSm +cSi +cSk +ciO +cjx +ciW +ckX +cdG +cmo +cmV +cog +coK +cpL +cLc +cmR +cmR +cmR +cmR +cmR +cvc +cmR +cmR +cmR +cmR +cmR +cvc +cmR +cmR +cmR +cqq +cBK +cCc +cmR aaa aaa aaa @@ -138051,38 +133344,38 @@ aaf aaf aal aal -aau -aax -aax -abl -aax -abM -aax -aax -aaw +aal +aal +aal +aal +aal +aal +aal +aal aal aal aal aaf -adw -adT -aen -aeM -adS -afG -afY -agX -ahN -ait -adw -ajV +aaf +adq +adI +adI +adI +adI +afr +adI +adI +adI +adI +adq +ajC +aae +aae aae aae aaf aaf aaf -aaf -aaf aaa aaa aaa @@ -138090,27 +133383,27 @@ aaa aaa abC aaa +cGc +cGc +cGc +aaa +aaa +aaa +abC +aaa aaa aaa aaa aaa aaa aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -138154,13 +133447,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa aaa aaa @@ -138179,14 +133472,14 @@ aaa aaa aaa abC -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -138206,52 +133499,52 @@ aaa aaa aaa aaa -cfI -cfI -cfI -cfI -cfI -cfI -cfJ -cgi -cgi -cgi -cgi +ccG +ccG +ccG +ccG +ccG +ccG +ccH +cde +cde +cde +cde +cdq +cdq +cgw +cgv +cSv +ciP +cSk cgu -cgu -cjV -cjU -dkY -cmt -dkJ -cjT -coC -cBH -cpY -cqI -crW -csF -cVo -cum -cum -cum -cxp -cxU -cxU -cxU -cxU -cxU -cBI -cxU -cDh -cxU -cxU -cxU -cxU -cBI -cFS -cGk -cxr +ckY +cxH +cmp +cmW +coh +coN +cKw +cqr +cqr +cqr +ctr +ctV +ctV +ctV +ctV +ctV +cxI +ctV +czf +ctV +ctV +ctV +ctV +cxI +cBL +cCd +ctt aaa aaa aaa @@ -138303,36 +133596,36 @@ aaa aaa aaa aaa -aae -aae -aae +aaa +aaf +aaf aal aal -aav +aau aax -aaw -aaw -abx aax +abl +aax +abM aax aax aaw -acL -cJi aal aal aal -adU -aeo -aeM -aff -aeM -afZ -agY -aeM -aiu -adw -ajV +aaf +adq +adJ +aed +aeB +adI +afs +afK +agJ +ahz +aic +adq +ajC aae aae aaf @@ -138347,9 +133640,9 @@ aaa aaa abC aaa -aaa -aaa -aaa +cGc +cGc +cGc aaa aaa aaa @@ -138361,13 +133654,13 @@ aaa aaa aaa aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +cYs +aqW +aqW +cYG +cYH +aqV aaa aaa aaa @@ -138411,13 +133704,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +cXr +cXv +cJC +cXF +cXJ +aqV aaa aaa aaa @@ -138461,54 +133754,54 @@ aaa aaa aaa aaa -cfJ -cfI -cfI -cfI -cfI -cfI -cfI -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgu -cgu -cgu -cjU -cjV -cjV -dlf -coD -cgL -cpZ -cqD -crX -csG -ctK -cun -cun -cwu -cxq -cxV -cxV -cxV -cxV -cAM -cxV -cxV -cDi -cDZ -cDZ -cDZ -cDZ -cLJ -cDZ -cGl -cxr +ccH +ccG +ccG +ccG +ccG +ccG +ccG +ccH +ccH +cde +cde +cde +cde +cde +cdq +cdq +cdq +cgv +cgw +cgw +cSz +ckZ +cdG +cmq +cmR +coi +coO +cpQ +cqs +cqs +csx +cts +ctW +ctW +ctW +ctW +cwM +ctW +ctW +czg +czW +czW +czW +czW +cGO +czW +cCe +ctt aaa aaa aaa @@ -138565,36 +133858,36 @@ aae aae aal aal -aaw -aaE -aaS -cJk -aaX -abN -abZ -acn -acu +aav aax aaw +aaw +abx +aax +aax +aax +aaw +acK +cEZ aal aal aal -aal -aal -aal -aal -aal -aga -agZ -ahO -aiv -adw -ajW -akI -akI -akI -akI -akI +adK +aee +aeB +aeR +aeB +afL +agK +aeB +aid +adq +ajC +aae +aae +aaf +aaf +aaf aaf aaf aaa @@ -138604,27 +133897,27 @@ aaa aaa abC aaa +cGc +cGc +cGc +aaa +aaa +aaa +abC +aaa aaa aaa aaa aaa aaa aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -138668,13 +133961,13 @@ aag aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -138718,54 +134011,54 @@ aaa aaa aaa aaa -cfI -cfI -cfI -cfI -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chc -cnM -cgL -dls -cjU -cqD -crY -cLu -cVp -csC -csC -cwv -cul -cxr -cxr -cxr -cxr -cqD -cza -cza -cqD -cxr -cxr -cxr -cxr -cqD -cza -cza -cqD +ccG +ccG +ccG +ccG +ccG +ccG +ccG +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +ccH +cdU +cki +cdG +cSH +cgv +cmR +coj +cGD +cKx +coK +coK +csy +cqq +ctt +ctt +ctt +ctt +cmR +cva +cva +cmR +ctt +ctt +ctt +ctt +cmR +cva +cva +cmR aaa aaa aaa @@ -138821,39 +134114,39 @@ aae aae aae aal -cJi +aal aaw -aaF -aaT -aax -aby +aaE +aaS +cFa aaX -aca +abN +abZ +acn +acu aax -acv -aax -dnz +aaw aal -adh -adx -adh -adh -adh -adh aal -agb -aha -ahP -aiw -adw -ajX -akJ -akJ -akJ -amY -akI -akI -akI +aal +aal +aal +aal +aal +aal +afM +agL +ahA +aie +adq +ajD +ako +ako +ako +ako +ako +aaf +aaf aaa aaa aaa @@ -138862,26 +134155,26 @@ aaa abC aaa aaa +cGc +cGc +aaa +aaa +aaa +abC +aaa +aaa aaa aaa aaa aaa aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -arw -aPn -aQS -arz -aSQ -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -138925,13 +134218,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -138974,55 +134267,55 @@ aaa aaa aaa aaa -cfJ -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cfJ -cfJ -cfJ -cfJ -chc -chc -cln -chb -cjV -chc -cqD -crZ -csH -cVq -csH -csC -cwv -cqD +ccH +ccG +ccG +ccG +ccH +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +cde +ccH +ccH +ccH +ccH +cdU +cdU +chM +cdT +cgw +cdU +cmR +cok +coP +cKy +coP +coK +csy +cmR aaa aaa aaa aaa -cxr -czb -czb -cxr +ctt +cvb +cvb +ctt aaa aaa aaa aaa -cxr -czb -czb -cxr +ctt +cvb +cvb +ctt aaa aaa aaa @@ -139078,67 +134371,67 @@ aae aae aae aal -aal +cEZ +aaw +aaF +aaT aax -aaG -aaU -abm -abm -abO +aby aaX +aca aax acv aax -aau +cUb aal -cJi +ade +adr +ade +ade +ade +ade aal -aal -aal -aal -cJi -aal -agc -ahb -aeM -aix -adw -ajY -akK -als -als -amZ -anJ -aoO -apK -aqI -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aPn -aQS -arz -aSQ -aTD -arw +afN +agM +ahB +aif +adq +ajE +akp +akp +akp +amD +ako +ako +ako +cGc +cGc +cGc +cGc +cGc +abC +cGc +cGc +cGc +cGc +cGc +cGc +cGc +abC +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -139150,15 +134443,15 @@ aaa aaa aaa aaa -aXn -aXn -aXn -aXn +aVO +aVO +aVO +aVO aaa -aXn -aXn -aXn -aXn +aVO +aVO +aVO +aVO aaa aaa aaa @@ -139182,13 +134475,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -139231,55 +134524,55 @@ aaa aaa aaa aaa -cfI -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cfJ -cjU -cjV -clh -clQ -cmu -ckG -cln -dlc -chc -chc -cqD -csa -csI -cVr -cuo -csC -cww -cqD +ccG +ccG +ccG +ccG +ccH +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +ccH +cgv +cgw +chG +cio +ciQ +chg +chM +cSx +cdU +cdU +cmR +col +coQ +cKz +cqt +coK +csz +cmR aaa aaa aaa aaa -cqD -czc -czc -cqD +cmR +cvc +cvc +cmR aaa aaa aaa aaa -cqD -czc -czc -cqD +cmR +cvc +cvc +cmR aaa aaa aaa @@ -139337,65 +134630,65 @@ aae aal aal aax -aaH -aaS -abn -aaS -abP -aax +aaG +aaU +abm +abm +abO aaX -acw aax -acP +acv +aax +aau aal -aaw -ady -adV -aaw -ady -aaw +cEZ aal -agd -ahc -adw -adw -adw -agk -akL -akI -akI -akI -akI -akI -akI -akI -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -arx -aPo -aQS -arz -aSQ -aTD -arw +aal +aal +aal +cEZ +aal +afO +agN +aeB +aig +adq +ajF +akq +akX +akX +amE +ano +aop +apk +aZq +aqi +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aOe +aqW +aqW +aqW +aSj +aqV abC abC abC @@ -139404,8 +134697,8 @@ abC abC abC abC -aXn -aXn +aVO +aVO aaa aaa abC @@ -139417,8 +134710,8 @@ aaa abC aaa aaa -aXn -aXn +aVO +aVO abC abC abC @@ -139439,13 +134732,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -dfN -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -139486,59 +134779,59 @@ aac aaa aaa aaa -cfI -cfI -cfI -cfI -cfI -cfI -cfJ -cgi -cgi -cgi -cfJ -cfJ -cfJ -cgi -cgi -cgi -cfJ -cjU -ckA -cli -clR -cmv -ckH -clq -chc -cpm -cpm -cpm -cpm -cpm -cVs -cup -csB -cwx -cqD +ccG +ccG +ccG +ccG +ccG +ccG +ccH +cde +cde +cde +ccH +ccH +ccH +cde +cde +cde +ccH +cgv +cha +chH +cip +ciR +chh +chP +cdU +clF +clF +clF +clF +clF +cKA +cqu +coJ +csA +cmR aaa aaa aaa aaa -cyL -cyL -cCu -cyL -cyM -cyM -cyM -cyM -cyL -cCu -cyL -cyL -cyL -cyL +cuL +cuL +cys +cuL +cuM +cuM +cuM +cuM +cuL +cys +cuL +cuL +cuL +cuL aaa aaa aaa @@ -139593,66 +134886,66 @@ aae aae aal aal -aaw -aaI -aaS -aaS -aaS +aax aaH -aaE aaS -acx -abZ -abZ -acR -adi -adi -adi -adi -aeN -adi -acR -age -ahd -ahQ -aiy -ajg -ahQ -akM -alt -alt -ana -alt -alt -apL -aqJ -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -arz -arz -aSQ -aTD -arw +abn +aaS +abP +aax +aaX +acw +aax +acO +aal +aaw +ads +adL +aaw +ads +aaw +aal +afP +agO +adq +adq +adq +afW +akr +ako +ako +ako +ako +ako +ako +ako +cYk +cYm +cYm +cYm +cYn +cYm +cYm +cYm +cYn +cYm +cYm +cYm +cYn +cYm +cYm +cYm +cYn +cYm +cYm +cYm +cYm +cYt +cYy +aqW +cYF +cYH +aqV aaa aaa aaa @@ -139660,23 +134953,23 @@ aaa aaa aaa aaa -aXn -aXn +aVO +aVO abC aaa aaa abC aaa aaa -aYL +aXk aaa aaa abC aaa aaa abC -aXn -aXn +aVO +aVO aaa aaa aaa @@ -139696,13 +134989,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +cXr +cXu +cJC +cXG +cXJ +aqV aaa aaa aaa @@ -139743,59 +135036,59 @@ aad aaa aaa aaa -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cjV -dkM -clj -clS -cmw -cgL -cln -cjU -cpm -cqa -cqJ -csb -csJ -ctL -cuq -csC -cwv -cxr +ccG +ccG +ccG +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +cgw +cSn +chI +ciq +ciS +cdG +chM +cgv +clF +cmr +cmX +com +coR +cpR +cqv +coK +csy +ctt aaa -cyL -cyL -cyL -cyL -cBJ -czW -cDj -cDl -cDl -cDl -cDl -cDj -czW -cGm -cLG -cGO -cHd +cuL +cuL +cuL +cuL +cxJ +cvW +czh +czj +czj +czj +czj +czh +cvW +cCf +cGM +cCG +cCU aaa aaa aaa @@ -139850,90 +135143,90 @@ aae aae aal aal -aay -aaJ -aaV +aaw +aaI aaS -abz -abQ -acb -aco -acy -acK -abm -acS -adj -adz -adj -aep -aeO -adj -acS -agf -ahe -agk -aiz -ajh -agk -akN -alu -amc -anb -amc -amc -apM -aqK -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -dbJ -aTD -arw +aaS +aaS +aaH +aaE +aaS +acx +abZ +abZ +acQ +adf +adf +adf +adf +aeC +adf +acQ +afQ +agP +ahC +aih +aiO +ahC +aks +akY +akY +amF +akY +akY +apl +aqj +aqW +aqW +aqW +aqW +cYo +aqW +aqW +aqW +cYq +aqW +aqW +aqW +cYo +aqW +aqW +aqW +cYq +aqW +aqW +aqW +aqW +cYo +aqW +aqW +aqW +aSj +aqV +cGc aaa aaa aaa aaa aaa aaa -aaa -aXn +aVO aaa abC -aYo -aYo -aYo -aYo -aYo -aYG -aYo -aYo -aYo -aYo -aYo +aWP +aWP +aWP +aWP +aWP +aXh +aWP +aWP +aWP +aWP +aWP abC aaa -aXn +aVO aaa aaa aaa @@ -139953,13 +135246,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aSQ -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -140000,59 +135293,59 @@ aaa aaa aaa aaa -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cjV -ckC -clk -clT -cmx -cjT -cnN +ccG +ccG +ccG +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +ccH +cgw chc -cpm -cqb -cqK -cqK -cqK -cVs -cur -csC -cwv -cxr +chJ +cir +ciT +cgu +ckj +cdU +clF +cms +cmY +cmY +cmY +cKA +cqw +coK +csy +ctt aaa -cyL -czd -czV -cLF -cBK -czW -czW -czW -czW -czW -czW -czW -czW -czW -cGB -cGO -cHd +cuL +cvd +cvV +cGL +cxK +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cCt +cCG +cCU aaa aaa aaa @@ -140107,66 +135400,66 @@ aae aae aal aal -aaw -aaK -aaW +aay +aaJ +aaV aaS -aaS -aaw -aaE -aaS -acz -acc -acc -acT -adk -adA -adk -adk -adk -adk -acT -agg -ahf -ahR -aiA -aji -ahR -akO -alv -amd -anc -anK -amd -amd -aqL -arA -arA -arA -arA -arA -axa -arA -arA -arA -arA -arA -arA -arA -arA -arA -aJo -arA -arA -arA -arA -arA -arA -arz -arz -aSQ -aTD -arw +abz +abQ +acb +aco +acy +acJ +abm +acR +adg +adt +adg +aef +aeD +adg +acR +afR +agQ +afW +aii +aiP +afW +akt +akZ +alH +amG +alH +alH +apm +aqk +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +cYE +aqW +aSj +aqV aaa aaa aaa @@ -140174,23 +135467,23 @@ aaa aaa aag aaa -aXn +aVO aaa aaa -aYp -aYu -aYu -aYu -aYu -aYM -aYQ -aYQ -aYQ -aYQ -aYZ +aWQ +aWV +aWV +aWV +aWV +aXl +aXp +aXp +aXp +aXp +aXy aaa aaa -aXn +aVO aaa aaa aaa @@ -140210,106 +135503,106 @@ aaa aaa abC aaa -arw -bpW -aQS +aqV +bnX +aPD +cJC +aPD +btN +aqV +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +ccG +ccG +ccG +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +cgw +chd +chK +cis +ciU +cjy +cSi cSC -aSQ -bvW -arw +clF +cmt +cmZ +cmZ +coS +cpS +cqx +crD +csA +ctt aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cfI -cfI -cfI -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cjV -ckD -cll -clU -cmy -cnc -dkH -dlm -cpm -cqc -cqL -cqL -csK -ctM -cus -cvA -cwx -cxr -aaa -cyM -cze -czW -cAN -czW -czW -cDk -cDk -cDk -cDk -cDk -cDk -czW -czW -cyL -cGO -cHd +cuM +cve +cvW +cwN +cvW +cvW +czi +czi +czi +czi +czi +czi +cvW +cvW +cuL +cCG +cCU aaa aaa aaa @@ -140364,66 +135657,66 @@ aae aae aal aal -aax aaw +aaK +aaW aaS -abo aaS -abR -aax -aaX -acA -aax -acP -aal -adl -adB aaw -aaw -adB -adl -aal -agh -ahg -agk -agk -agk -agk -akP -akI -akI -akI -akI -akI -akI -akI -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -arB -aPp -aQS -arz -aSQ -aTD -arw +aaE +aaS +acz +acc +acc +acS +adh +adu +adh +adh +adh +adh +acS +afS +agR +ahD +aij +aiQ +ahD +aku +ala +alI +amH +anp +alI +alI +aql +aqW +aqW +aqW +aqW +aqX +aqW +aqW +aqW +aqW +aqW +aqW +aqW +cYr +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -140431,23 +135724,23 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa -aYq -aYq -aYq -aYq -aYq -aYG -aYq -aYq -aYq -aYq -aYq +aWR +aWR +aWR +aWR +aWR +aXh +aWR +aWR +aWR +aWR +aWR aaa aaa -aXn +aVO aaa aaa aaa @@ -140467,13 +135760,13 @@ aaa aaa abC aaa -boI -bpX -aQS -cSC -aSQ -bvX -bxC +bmO +bnY +aPD +cJC +aPD +btO +bvp aaa aaa aaa @@ -140514,59 +135807,59 @@ aaa aaa aaa aaa -cfI -cfI -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -cjU -ckE -cIC -cll -cjU -cnd -cnO -dln -cpm -cqd -cqM -csc -cqM -ctN -cut -csC -cwv -cxr +ccG +ccG +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +cgv +che +cEt +chK +cgv +cjz +ckk +cSD +clF +cmu +cna +con +cna +cpT +cqy +coK +csy +ctt aaa -cyM -czf -czX -cyL -czW -czW -cLG -cyM -cyM -cyM -cyM -cLF -czW -czW -cyL -cyL -cHe +cuM +cvf +cvX +cuL +cvW +cvW +cGM +cuM +cuM +cuM +cuM +cGL +cvW +cvW +cuL +cuL +cCV aaa aaa aaa @@ -140623,64 +135916,64 @@ aal aal aax aaw -aaX -aaw -aaw -aaw -aaX +aaS +abo +aaS +abR aax -acB +aaX +acA aax -aau +acO aal +adi +adv +aaw +aaw +adv +adi aal -aal -aal -aal -aal -aal -aal -agi -ahh -ahS -aiB -agk -ajZ -akQ -alw -ame -ame -anL -aoP -apN -aqM -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aPq -aQS -arz -aSQ -aTD -arw +afT +agS +afW +afW +afW +afW +akv +ako +ako +ako +ako +ako +ako +ako +cYl +cYl +cYl +cYl +cYp +cYl +cYl +cYl +cYp +cYl +cYl +cYl +cYp +cYl +cYl +cYl +cYp +cYl +cYl +cYl +cYl +aOf +cYz +aqW +cYF +cYH +aqV aaa aaa aaa @@ -140688,7 +135981,7 @@ aaa aaa aaa aaa -aXn +aVO abC abC abC @@ -140696,7 +135989,7 @@ abC abC abC abC -aYG +aXh abC abC abC @@ -140704,7 +135997,7 @@ abC abC abC abC -aXn +aVO aaa aaa aaa @@ -140724,25 +136017,25 @@ aaa aaa abC aaa -boJ -baS -baT -cST -buv -baS -bxD +bmP +aZr +aZs +cJD +bso +aZr +bvq aaa aaa aaa aaa -bbo -bbo -bbo -bbo -bbo -bbo -baW -baW +aZN +aZN +aZN +aZN +aZN +aZN +aZv +aZv aaa aaa aaa @@ -140772,58 +136065,58 @@ aaa aaa aaa aaa -cfI -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cjU -cjU -cjV -cjU -cjV -chb -cnP -cln -cpm -cqe -cqe -cqe -cqe -cVs -cuq -csC -cwv -cxr +ccG +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cgv +cgv +cgw +cgv +cgw +cdT +ckl +chM +clF +cmv +cmv +cmv +cmv +cKA +cqv +coK +csy +ctt aaa -cyM -cze -czW -cAN -czW -czW -cDl -cDl -cDl -cDl -cDl -cDl -czW -czW -cyL -cGO -cHd +cuM +cve +cvW +cwN +cvW +cvW +czj +czj +czj +czj +czj +czj +cvW +cvW +cuL +cCG +cCU aaa aaa aaa @@ -140877,67 +136170,67 @@ aae aae aae aal -cJi -aaw -aaF -aaT +aal aax -aby +aaw +aaX +aaw +aaw +aaw aaX -aca aax acB aax -aaw +aau aal -adh -adh -adh -aeq -adh -adh aal -agj -ahi -cYe -aiB -agk -ajX -akJ -akJ -akJ -akJ -akI -akI -akI -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aal +aal +aal +aal +aal +aal +afU +agT +ahE +aik +afW +ajG +akw +alb +alJ +alJ +anq +aoq +apn +cYj +aqm +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -140948,20 +136241,20 @@ aaa aaa aaa aaa -aYo -aYo -aYo -aYo -aYo -aYG -aYo -aYo -aYo -aYo -aYo +aWP +aWP +aWP +aWP +aWP +aXh +aWP +aWP +aWP +aWP +aWP aaa aaa -aXn +aVO aaa aaa aaa @@ -140976,38 +136269,38 @@ aaa abC aaa aaa -bbo -bbo +aZN +aZN aaa abC aaa -boJ -baS -bbS -bCj -buw -baS -bxE -baS -bbo +bmP +aZr +bar +bzO +bsp +aZr +bvr +aZr +aZN aaa -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -baW -baW -baW -baW -bbo -bbo -bbp -bbo -bbp +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZv +aZv +aZv +aZv +aZN +aZN +aZO +aZN +aZO abC abC abC @@ -141029,58 +136322,58 @@ abC abC abC abC -cfK -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -cfJ -cfJ -cjV -ckF -cnP -coE -cpm -cUj -cUt -cUt -cUt -cVv -cuq -csC -cwv -cxr +ccI +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +ccH +ccH +cgw +chf +ckl +cla +clF +cKm +cKs +cKs +cKs +cKB +cqv +coK +csy +ctt aaa -cyL -czd -czY -cLG -czW -czW -czW -czW -czW -czW -czW -czW -czW -czW -cGB -cGO -cHd +cuL +cvd +cvY +cGM +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cvW +cCt +cCG +cCU aaa aaa aaa @@ -141130,43 +136423,43 @@ aaa aaa aaa aaa -aaf -aaf -aaf -aal +aae +aae +aae aal +cEZ aaw -aaE -aaS -cJk +aaF +aaT +aax +aby aaX -abS -acc -acp -acC +aca +aax +acB aax aaw aal +ade +ade +ade +aeg +ade +ade aal -aal -aal -aal -aal -aal -aal -agk -agk -agk -agk -agk -ajW -akI -akI -akI -akI -akI -aaf -aaa +afV +agU +cLr +aik +afW +ajE +akp +akp +akp +akp +ako +ako +ako abC aaa aaa @@ -141188,13 +136481,13 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -141202,20 +136495,20 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa -aYp -aYu -aYu -aYu -aYu -aYM -aYQ -aYQ -aYQ -aYQ -aYZ +aWQ +aWV +aWV +aWV +aWV +aXl +aXp +aXp +aXp +aXp +aXy aaa aaa aaa @@ -141228,43 +136521,43 @@ aaa aaa aaa aaa -bbo -bbo -bbp -bbo -bbo -bbo -bbo -bbo +aZN +aZN +aZO +aZN +aZN +aZN +aZN +aZN abC aaa -boJ -baS -bbS -bCj -bux -baS -bxF -baS -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbq -bbq -bbq -bbo -bbo -baW +bmP +aZr +bar +bzO +bsq +aZr +bvs +aZr +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZP +aZP +aZP +aZN +aZN +aZv aaa aaa aaa @@ -141286,58 +136579,58 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -cfJ -cfJ -chc -ckF -cnP -cUf -cqf -cUk -cqN -csd -csL -cqf -cuu -cvB -cwv -cxr +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +ccH +ccH +cdU +chf +ckl +cKk +cmw +cKn +cnb +coo +coT +cmw +cqz +crE +csy +ctt aaa -cyL -cyL -cyL -cyL -cBL -czW -cDm -cDk -cDk -cDk -cDk -cDm -czW -cGm -cLF -cGO -cHd +cuL +cuL +cuL +cuL +cxL +cvW +czk +czi +czi +czi +czi +czk +cvW +cCf +cGL +cCG +cCU aaa aaa aaa @@ -141387,42 +136680,50 @@ aaa aaa aaa aaa -aaa +aaf aaf aaf aal aal -aaz +aaw +aaE +aaS +cFa +aaX +abS +acc +acp +acC aax aaw -aaw -abA -aax -aax -aax -aaw -acL -cJi aal aal +aal +aal +aal +aal +aal +aal +afW +afW +afW +afW +afW +ajD +ako +ako +ako +ako +ako aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -ajV -aaf -aaf -aaf -aaf -aaf -aaf +aaa +abC +aaa +aaa +aaa +aaa +aaa +cGc aaa abC aaa @@ -141432,26 +136733,18 @@ aaa aaa aaa aaa +cGc abC aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -141459,23 +136752,23 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa -aYq -aYq -aYq -aYq -aYq -aYG -aYq -aYq -aYq -aYq -aYq +aWR +aWR +aWR +aWR +aWR +aXh +aWR +aWR +aWR +aWR +aWR aaa aaa -aXn +aVO aaa aaa aaa @@ -141485,43 +136778,43 @@ aaa aaa aaa aaa -bbq -bbq -bbq -bbq -bbq -bbq -bbo -bbo +aZP +aZP +aZP +aZP +aZP +aZP +aZN +aZN abC -baS -boK -baS -bbS -bCj -buw -baS -bxG -baS -baS -baS -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbo -bbo -bbo +aZr +bmQ +aZr +bar +bzO +bsp +aZr +bvt +aZr +aZr +aZr +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZN +aZN +aZN aaa aaa aaa @@ -141544,57 +136837,57 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chc -cjU -cnP -clj -cqf -cUl -cqO -cse -csM -cqf -cuq -csC -cwv -cqD +ccH +ccH +ccH +cde +cde +cde +cde +cde +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +cdU +cgv +ckl +chI +cmw +cKo +cnc +cop +coU +cmw +cqv +coK +csy +cmR aaa aaa aaa aaa -cyL -cyL -cCu -cyL -cyM -cyM -cyM -cyM -cyL -cCu -cyL -cyL -cyL -cyL +cuL +cuL +cys +cuL +cuM +cuM +cuM +cuM +cuL +cys +cuL +cuL +cuL +cuL aaa aaa aaa @@ -141649,31 +136942,31 @@ aaf aaf aal aal -aau -aaL +aaz aax -abp -aax -abM -aax -aaL aaw +aaw +abA +aax +aax +aax +aaw +acK +cEZ aal aal -aal -aaf -aaf -aae -aae -aae -aae -aae aaf aaf aaf aaf aaf -ajV +aaf +aaf +aaf +aaf +aaf +aaf +ajC aaf aaf aaf @@ -141702,13 +136995,13 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -141716,7 +137009,7 @@ aaa aaa aaa aaa -aXn +aVO abC abC abC @@ -141724,7 +137017,7 @@ abC abC abC abC -aYG +aXh abC abC abC @@ -141732,7 +137025,7 @@ abC abC abC abC -aXn +aVO aaa aaa aaa @@ -141742,41 +137035,41 @@ aaa aaa aaa aaa -bbq -bbq -bbq -bbq -bbq -bbq -bbo -bbq +aZP +aZP +aZP +aZP +aZP +aZP +aZN +aZP abC -baS -boL -baS -brs -bCj -buw -baS -bxH -byT -bAg -baS -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -baS -baS -baS -baS -baS -baS -bbo +aZr +bmR +aZr +bpp +bzO +bsp +aZr +bvu +bwB +bxN +aZr +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZr +aZr +aZr +aZr +aZr +aZr +aZN aaa aaa aaa @@ -141801,55 +137094,55 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -chc -dlh -clj -cqf -cqf -cqP -cse -csN -ctO -cuq -csC -cwv -cqD +ccH +ccH +ccH +cde +cde +cde +cde +cde +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +cdU +cSA +chI +cmw +cmw +cnd +cop +coV +cpU +cqv +coK +csy +cmR aaa aaa aaa aaa -cqD -cza -cza -cqD +cmR +cva +cva +cmR aaa aaa aaa aaa -cqD -cza -cza -cqD +cmR +cva +cva +cmR aaa aaa aaa @@ -141906,18 +137199,18 @@ aaf aaf aal aal +aau +aaL +aax +abp +aax +abM +aax +aaL +aaw aal aal aal -aal -aal -aal -aal -aal -aal -aal -aal -aaf aaf aaf aae @@ -141930,7 +137223,7 @@ aaf aaf aaf aaf -ajV +ajC aaf aaf aaf @@ -141959,13 +137252,13 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYv +cYB +aqW +cYG +cYH +aqV aaa aaa aaa @@ -141973,23 +137266,23 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa -aYo -aYo -aYo -aYo -aYo -aYG -aYo -aYo -aYo -aYo -aYo +aWP +aWP +aWP +aWP +aWP +aXh +aWP +aWP +aWP +aWP +aWP aaa aaa -aXn +aVO aaa aaa aaa @@ -141998,42 +137291,42 @@ abC aaa aaa aaa -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbq -bbq -baS -baS -boM -bdK -bbS -bCj -buw -baS -bxI -byU -bAh -baS -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -baS +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZr +aZr +bmS +bch +bar +bzO +bsp +aZr +bvv +bwC +bxO +aZr +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZr +bcd bdG -bfl -bey -bgo -baS -bbp +bcT +beF +aZr +aZO abC abC abC @@ -142058,55 +137351,55 @@ abC abC abC abC -cfK -cfJ -baS -baS -baS -baS -baS -baS -baS -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -cjV -dlh -dkH -cUh -cqf -cqQ -cse -csO -ctP -cuv -cvC -cwy -cqD +ccI +ccH +aZr +aZr +aZr +aZr +aZr +aZr +aZr +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +cgw +cSA +cSi +cKl +cmw +cne +cop +coW +cpV +cqA +crF +csB +cmR aaa aaa aaa aaa -cxr -czb -czb -cxr +ctt +cvb +cvb +ctt aaa aaa aaa aaa -cxr -czb -czb -cxr +ctt +cvb +cvb +ctt aaa aaa aaa @@ -142159,7 +137452,6 @@ aaa aaa aaa aaa -aaa aaf aaf aal @@ -142173,24 +137465,25 @@ aal aal aal aal +aal +aal aaf aaf aaf -aaf -aae -aae -aae -aae aae aae aae aae aae aaf -ajV aaf -aae -aae +aaf +aaf +aaf +ajC +aaf +aaf +aaf aaf aaf aaf @@ -142215,14 +137508,14 @@ aaa abC aaa aaa -aaa -arw -aPq -aQU -arz -aSQ -aTD -arw +cGc +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -142230,23 +137523,23 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa -aYp -aYu -aYu -aYu -aYu -aYM -aYQ -aYQ -aYQ -aYQ -aYZ +aWQ +aWV +aWV +aWV +aWV +aXl +aXp +aXp +aXp +aXp +aXy aaa aaa -aXn +aVO aaa aaa aaa @@ -142254,43 +137547,43 @@ aaa abC aaa aaa -bbo -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbq -bbq -baS -bnv -boN -baS -bbS -bCj -buw -baS -bxJ -byV -bAi -baS -bbo -bbo -bbo -bbo -bbo -bbo -bbo -bbo -baS -bey -bey -bey -bey -baS -bbo +aZN +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZr +blC +bmT +aZr +bar +bzO +bsp +aZr +bvw +bwD +bxP +aZr +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZN +aZr +bcT +bcT +bcT +bcT +aZr +aZN aaa aaa aaa @@ -142316,54 +137609,54 @@ aaa aaa aaa aaa -cfJ -baS -cgq -cgy -cgG -cgY -bAg -baS -cfJ -cfJ -cfJ -cgi -cgi -cgi -baS -baS -baS -baS -cgi -cjV -cnQ -dlp -clj -cqf -cqR -cse -csP -ctO -cuq -csC -cwv -cLB -cxr -cxr -cxr -cxr -cqD -czc -czc -cqD -cxr -cxr -cxr -cxr -cqD -czc -czc -cqD +ccH +aZr +cdm +cdt +cdB +cdQ +bxN +aZr +ccH +ccH +ccH +cde +cde +cde +aZr +aZr +aZr +aZr +cde +cgw +ckm +cSE +chI +cmw +cnf +cop +coX +cpU +cqv +coK +csy +cGJ +ctt +ctt +ctt +ctt +cmR +cvc +cvc +cmR +ctt +ctt +ctt +ctt +cmR +cvc +cvc +cmR aaa aaa aaa @@ -142419,15 +137712,17 @@ aaa aaa aaf aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal +aal aaf aaf aaf @@ -142438,19 +137733,17 @@ aae aae aae aae -aaf -aae aae aae aae aaf -ajV +ajC aaf aae aae aaf aaf -aaa +aaf aaa abC aaa @@ -142462,9 +137755,48 @@ aaa aaa abC aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +abC aaa aaa aaa +aqV +cYu +cYA +aqW +aqW +aSj +aqV +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aVO +aaa +aaa +aWR +aWR +aWR +aWR +aWR +aXh +aWR +aWR +aWR +aWR +aWR +aaa +aaa +aVO aaa aaa aaa @@ -142472,83 +137804,44 @@ aaa abC aaa aaa -aaa -arw -aPq -aQS -arz -aSQ -aTD -arw -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aXn -aaa -aaa -aYq -aYq -aYq -aYq -aYq -aYG -aYq -aYq -aYq -aYq -aYq -aaa -aaa -aXn -aaa -aaa -aaa -aaa -abC -aaa -aaa -bbo -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbq -bbq -baS -bnw -boO -baS -bbS -bCj -buw -baS -bxJ -byV -bAj -baS -baS -baS -baS -bbo -bbo -bbo -bbo -bbo -baS -bey -bey -bey -bey -baS -baS -baS +aZN +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZr +blD +bmU +aZr +bar +bzO +bsp +aZr +bvw +bwD +bxQ +aZr +aZr +aZr +aZr +aZN +aZN +aZN +aZN +aZN +aZr +bcT +bcT +bcT +bcT +aZr +aZr +aZr aaa aaa aaa @@ -142572,55 +137865,55 @@ aaa aaa aaa aaa -baS -baS -baS -cgr -byV -cgH -cgZ -chf -baS -baS -cfJ -cfJ -cgi -cgi -cgi -baS -bNT -bey -baS -cgi -cjU -cjV -coF -dlt -cqf -cqS -cse -csQ -cqf -cuw -cvD -ctJ -cxp -cxU -cxU -cxU -cxU -cAO -cxU -cxU -cDh -cxU -cxU -cFa -cxU -cxU -cFS -cGk -cxr +aZr +aZr +aZr +cdn +bwD +cdC +cdR +cdW +aZr +aZr +ccH +ccH +cde +cde +cde +aZr +bLc +bcT +aZr +cde +cgv +cgw +clb +cSI +cmw +cng +cop +coY +cmw +cqB +crG +cpP +ctr +ctV +ctV +ctV +ctV +cwO +ctV +ctV +czf +ctV +ctV +cAW +ctV +ctV +cBL +cCd +ctt aaa aaa aaa @@ -142677,18 +137970,18 @@ aaa aaf aaf aaf -aae -aae -aae -aae -aae aaf aaf aaf aaf -aae -aae -aae +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf aae aae aae @@ -142701,14 +137994,14 @@ aae aae aae aaf -ajV +ajC +aaf +aae +aae aaf aaf aaa aaa -aaa -aaa -aaa abC aaa aaa @@ -142730,13 +138023,13 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -142744,7 +138037,7 @@ aaa aaa aaa aaa -aXn +aVO abC abC abC @@ -142752,7 +138045,7 @@ abC abC abC abC -aYG +aXh abC abC abC @@ -142760,124 +138053,124 @@ abC abC abC abC -aXn +aVO aaa aaa aaa aaa abC -bbo -bbo -bbo -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbq -bbq -baS -bnx -boP -baS -brt -bsK -buy -baS -bxK -byW -bAk -baS -bCh -bDE -baS -bbo -bbo -bbo -bbo -bbo -baS -bev -bPu -bQI -bRO -bSY -bUb -bSY -bVT -bVT -bVT -bVT -bxC -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -cfT -cgc -cgg -bSY -cgs -cgz -cgI -cha -chg -chj -baS -cfJ -cfJ -cfJ -cfJ -cfJ -baS -bey -cLm -baS -cgi -cgu -cIa -dlq -cpo -cqf -cqT -csf -csR -cqf -cux -cvE -cwz -cxs -cxW -cxW -cxW -cxW -cAP -cxW -cxW -cDn -cEa -cEa -cEa -cEa -cFF -cFT -cGl -cxr +aZN +aZN +aZN +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZr +blE +bmV +aZr +bpq +bqH +bsr +aZr +bvx +bwE +bxR +aZr +bzM +bBe +aZr +aZN +aZN +aZN +aZN +aZN +aZr +bcQ +bMC +bNO +bOT +bQc +bRe +bQc +bSV +bSV +bSV +bSV +bvp +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +ccQ +ccZ +cdc +bQc +cdo +cdu +cdD +cdS +cdX +cea +aZr +ccH +ccH +ccH +ccH +ccH +aZr +bcT +cGx +aZr +cde +cdq +cDR +cSF +clG +cmw +cnh +coq +coZ +cmw +cqC +crH +csC +ctu +ctX +ctX +ctX +ctX +cwP +ctX +ctX +czl +czX +czX +czX +czX +cBy +cBM +cCe +ctt aaa aaa aaa @@ -142931,11 +138224,6 @@ aaa aaa aaa aaa -aaa -aaa -aaf -aaf -aaf aaf aaf aaf @@ -142944,7 +138232,10 @@ aae aae aae aae -aae +aaf +aaf +aaf +aaf aae aae aae @@ -142955,11 +138246,13 @@ aae aae aae aaf +aae +aae +aae +aae aaf +ajC aaf -ahT -aka -ahT aaf aaa aaa @@ -142987,13 +138280,13 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -143001,140 +138294,140 @@ aaa aaa aaa aaa -aXn +aVO aaa aaa -aYo -aYo -aYo -aYo -aYo -aYG -aYo -aYo -aYo -aYo -aYo +aWP +aWP +aWP +aWP +aWP +aXh +aWP +aWP +aWP +aWP +aWP aaa aaa -aXn +aVO aaa aaa aaa aaa abC -bbo -bbo -bbq -bbq -bbq -bbq -baS -baS -baS -baS -baS -baS -baS -bny -baS -baS -bbS -bCj -buw -baS -baS -byX -baS -baS -baS -bDF -baS -baS -baS -baS -baS -baS -bdK -baS -bPv -baS -baS -baS -baS -baS -baS -baS -baS -baS -bYL -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -bZn -cfU -baS -baS -baS -baS -baS -bdK -baS -baS -chk -baS -baS -baS -baS -baS -baS -baS -cLl -baS -baS -baS -baS -baS -coH -cpp -cqf -cqU -cqf -cqf -cqf -cuy -cvF -cwA -cul -cxr -cxr -cxr -cxr -cqD -cBM -cCv -cqD -cxr -cxr -cxr -cxr -cul -cFU -cGj +aZN +aZN +aZP +aZP +aZP +aZP +aZr +aZr +aZr +aZr +aZr +aZr +aZr +blF +aZr +aZr +bar +bzO +bsp +aZr +aZr +bwF +aZr +aZr +aZr +bBf +aZr +aZr +aZr +aZr +aZr +aZr +bch +aZr +bMD +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +bVM +bWo +bWo +bWo +cXL +bWo +bWo +bWo +bWo +cXL +bWo +bWo +bWo +bWo +cXL +bWo +bWo +bWo +ccR +aZr +aZr +aZr +aZr +aZr +bch +aZr +aZr +ceb +aZr +aZr +aZr +aZr +aZr +aZr +aZr +cGw +aZr +aZr +aZr +aZr +aZr +clc +clH +cmw +cni +cmw +cmw +cmw cqD +crI +csD +cqq +ctt +ctt +ctt +ctt +cmR +cxM +cyt +cmR +ctt +ctt +ctt +ctt +cqq +cBN +cCc +cmR aaa aaa aaa @@ -143190,11 +138483,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aaf +aaf +aaf +aaf +aaf aaf aae aae @@ -143214,10 +138507,10 @@ aae aaf aaf aaf -ahT -akb -ahT -aaa +ahF +ajH +ahF +aaf aaa aaa aaa @@ -143244,154 +138537,154 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw +aqV +cYv +cYA +aqW +cYF +cYH +aqV +aaa +aaa +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +aWQ +aWV +aWV +aWV +aWV +aXl +aXp +aXp +aXp +aXp +aXy +aaa +aaa +aVO aaa aaa aaa aaa -alx -alx -alx -aaa -aaa -aaa -aYp -aYu -aYu -aYu -aYu -aYM -aYQ -aYQ -aYQ -aYQ -aYZ -aaa -aaa -aXn +aZO +aZN +aZN +aZP +aZP +aZP +aZP +aZr +bgs +bhn +bhn +bjH +bkH +bkH +blG +bkH +bnZ +bpr +bqI +bss +bhn +bhn +bwG +bxS +byN +bzN +bxS +bxS +bxS +bxS +bFI +bxS +bxS +bxS +bxS +bME +bNP +bOU +bsp +bRf +bSf +bSW +bsp +bUk +bso +cXK +cXK +cXK +cXK +cXM +cXK +cXK +cXK +cXK +cXP +cXK +cXK +cXK +cXK +cXM +cXK +cXK +cXK +cXK +bso +bUk +bsp +bSW +bgs +bhn +bhn +cdY +cec +cei +ces +ceE +ceX +ces +ces +ces +ces +cGy +ces +ces +cjA +ckn +cld +clI +cmx +cnj +bxS +bxS +cpW +cqE +crJ +csy +cmR aaa aaa aaa aaa -bbp -bbo -bbo -bbq -bbq -bbq -bbq -baS -bib -biX -biX -blv -bmy -bmy -bnz -bmy -bpY -bru -bsL -buz -biX -biX -byY -bAl -bBh -bCi -bAl -bAl -bAl -bAl -bIr -bAl -bAl -bAl -bAl -bPw -bQJ -bRP -buw -bUc -bVc -bVU -buw -bXj -buv -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -buv -bXj -buw -bVU -bib -biX -biX -chh -chl -chs -chG -chW -cis -chG -chG -chG -chG -cLn -chG -chG -cne -cnR -coI -cpq -cqg -cqV -bAl -bAl -ctQ -cuz -cvG -cwv -cqD +cmR +cmR +cmR +cmR aaa aaa aaa aaa -cqD -cqD -cqD -cqD -aaa -aaa -aaa -aaa -cqD -cqD -cqD -cqD +cmR +cmR +cmR +cmR aaa aaa aaa @@ -143452,7 +138745,7 @@ aaa aaa aaa aaa -aaa +aaf aae aae aae @@ -143470,26 +138763,26 @@ aae aae aaf aaf +aaf +ahF +ajI +ahF +aaa +aaa +aaa +aaa aaa aaa abC -aaa -aaa -aaa -aaa -aaa -aaa -alx -alF -alx -alx -alx -alx -alx -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc abC -aaa +cGc aaa aaa aaa @@ -143501,138 +138794,138 @@ abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw -aaa -aaa -aaa -alx -alx -alx -alx -aaa -aaa -aaa -aYq -aYq -aYq -aYq -aYq -aYG -aYq -aYq -aYq -aYq -aYq -aaa -aaa -aXn +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa aaa -bbo -bbo -bbo -baS -baS -baS -baS -baS -bic -cKy -biY -blw -deH -biY -bnA -bHe -cRL -bHe -bsM -bbs -bbs -bbs -bbs -bbs -bBi -bCj -bbT -bEI -bFQ -bHe -bIs -bHe -bHe -bHe -bHe -bPx -bpZ -bfn -bbs -bbs -bbs -bbs -bbs -bbs -baU -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -baU -bbs -cgk -bbs -bpZ -bbs -bbs -bfn -bbs -cht -bbs -bbs -bbs -bbs -cju -bbs -bbs -bbs -bbs -bbs -bbs -cNn -bbs -bil -bpZ -cqW -bbs -bbs -bbs -cuA -cvH -cwv -cqD +alc +alc +alc +aaa +aaa +aaa +aWR +aWR +aWR +aWR +aWR +aXh +aWR +aWR +aWR +aWR +aWR +aaa +aaa +aVO +aaa +aaa +aaa +aaa +aZN +aZN +aZN +aZr +aZr +aZr +aZr +aZr +bgt +cFY +bho +bjI +cPg +bho +blH +bEv +cJv +bEv +bqJ +aZR +aZR +aZR +aZR +aZR +byO +bzO +bas +bCh +bDk +bEv +bFJ +bEv +bEv +bEv +bEv +bMF +boa +bdI +aZR +aZR +aZR +aZR +aZR +aZR +aZt +cXK +cXK +cXK +cXK +cXK +cXK +cXK +cXK +cXK +cYS +cXK +cXK +cXK +cXK +cXK +cXK +cXK +cXK +cXK +aZt +aZR +cdg +aZR +boa +aZR +aZR +bdI +aZR +cej +aZR +aZR +aZR +aZR +cfW +aZR +aZR +aZR +aZR +aZR +aZR +cHC +aZR +bgC +boa +cnk +aZR +aZR +aZR +cqF +crK +csy +cmR aaa aaa aaa @@ -143710,13 +139003,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae +aae +aae +aae +aae +aae +aae +aae +aae aae aae aae @@ -143725,187 +139020,185 @@ aae aae aaf aaf -aaf -ahT -abC -abC -abC +cYi +cYi +cYi abC aaa aaa aaa aaa -alx -alx -alx -alx -alx -and -and -alx -alx -alx -abC aaa +alc +alk +alc +alc +alc +alc +alc aaa -alx -alx -alx -alx -alx aaa abC aaa aaa aaa -arw -aPq -aQS -arz -aSQ -aTD -arw -aaa -aaa -aaa -alx -alx -alx -alF -abC -abC -abC -abC -abC -abC -abC -abC -aYG -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -bbp -bbo -bbo -baS -ber -dcz -bgg -baS -bid -bbs -bjO -blx -deI -bkA -bnB -boR -bqa -brv -cSU -buA -bsN -bvY -byZ -byZ -bBj -bCk -bDG -bEJ -bFR -bHf -bIt -bHf -bLB -bHf -bHf -bPy -bQK -bRQ -cLb -bSZ -bVd -bSZ -bSZ -bSZ -bYb -arA -arA -arA -arA -arA -cdj -arA -arA -arA -arA -arA -arA -arA -djU -arA -arA -arA -arA -arA -bYb -bSZ -bSZ -bSZ -cgA -cgJ -bSZ -bRQ -cLb -chu -bkA -bkA -bkA -bkA -cjv -bkA -bkA -bkA -bkA -cmz -cnf -cnS -bkA -cpr -cqh -cqX -cqh -cqh -cqh -cuB -cvI -cwB -cqD aaa aaa aaa aaa -cqD -cqD -cqD -cqD +aaa +abC +aaa +aaa +aaa +aqV +cYu +cYA +aqW +aqW +aSj +aqV +aaa +aaa +aaa +alc +alc +alc +alc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +abC +aXh +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZO +aZN +aZN +aZr +bcM +cNK +bex +aZr +bgu +aZR +bic +bjJ +cPh +biN +blI +bmW +bob +bps +cJE +bst +bqK +btP +bwH +bwH +byP +bzP +bBg +bCi +bDl +bEw +bFK +bEw +bIP +bEw +bEw +bMG +bNQ +bOV +cGp +bQd +bSg +bQd +bQd +bQd +bVc +cXK +cXK +cXK +cXK +cXN +cXK +cXK +cXK +cXK +cXQ +cXR +cXR +cXR +cXR +cXS +cXR +cXR +cXR +cXR +cXT +cXU +cXU +cXU +cdv +cdE +cXU +cXV +cXW +cek +biN +biN +biN +biN +cfX +biN +biN +biN +biN +ciV +cjB +cko +biN +clJ +cmy +cnl +cmy +cmy +cmy +cqG +crL +csE +cmR aaa aaa aaa aaa -cqD -cqD -cqD -cqD +cmR +cmR +cmR +cmR +aaa +aaa +aaa +aaa +cmR +cmR +cmR +cmR aaa aaa aaa @@ -143988,56 +139281,56 @@ aaa aaa abC abC +aaa +aaa +aaa +aaa +alc +alc +alc +alc +alc +amI +amI +alc +alc +alc abC aaa aaa -aaa -alx -alx -and -alx -and -and -and -alx -alx -and -alF -alx -and -and -alx -alx -alx -alx +alc +alc +alc +alc +alc aaa abC aaa aaa aaa -aOv -aPr -aQS -arz -aSQ -aTE -aUC -aaa -aaa -akR -alx -alx -alx -alx -aaa -aaa -aaa -aaa +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa +alc +alc +alc +alk abC -aYG +abC +abC +abC +abC +abC +abC +abC +aXh abC aaa aaa @@ -144050,119 +139343,119 @@ aaa aaa aaa aaa -bbo -bbo -bbo -baS -bes +aZN +aZN +aZN +aZr +bcN +cZg bey -bgh -bgW -bie -biZ -bjP -baS -deJ -deW -deW -deW -bqb -cSt -cSV -bqb -bqb -bqb -bxL -bxL -bBk -bCl -bxL -bEK -cKT -bEK -bEK -bEK -bEK -bEK -baS -bPz -baS -baS -baS -baS -baS -baS -baS -baS -baS -bYM -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -bZo -cfV -baS -baS -baS -baS -baS -baS -baS -baS -baS -chv -baS -baS -baS -baS -baS -baS -baS -baS -bdK -baS -baS -baS -coJ -cpp -baS -baS -baS -baS -baS -cuC -cvJ -cwC -cLB -cxr -cxr -cxr -cxr -cqD -cBN -cCw -cqD -cxr -cxr -cxr -cxr -cul -cFV -cGj -cqD +bfn +bgv +bhp +bid +aZr +cPi +cPs +cPs +cPs +boc +cJz +cJF +boc +boc +boc +bvy +bvy +byQ +bzQ +bvy +bCj +cGh +bCj +bCj +bCj +bCj +bCj +aZr +bMH +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +bVN +bWp +bWp +bWp +cXO +bWp +bWp +bWp +bWp +cXO +bWp +bWp +bWp +bWp +cXO +bWp +bWp +bWp +ccS +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +cel +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +bch +aZr +aZr +aZr +cle +clH +aZr +aZr +aZr +aZr +aZr +cqH +crM +csF +cGJ +ctt +ctt +ctt +ctt +cmR +cxN +cyu +cmR +ctt +ctt +ctt +ctt +cqq +cBO +cCc +cmR aaa aaa aaa @@ -144244,57 +139537,57 @@ aaa aaa aaa abC -aaa abC abC -alF -alx -alx -and -and -afV -afV -afS -aez -afV -adZ -aez -afV -afV -aez -aez -alx -and -and -alx -alx aaa aaa aaa -aKo -aOw -aKo -aQV -aRP -aSR -aLm -aUD -aLm -akR -akR -alx -alx -alx -alx -alx -alx -aaa -aaa +alc +alc +amI +alc +amI +amI +amI +alc +alc +amI +alk +alc +amI +amI +alc +alc +alc +alc aaa +abC +cGc +cGc +cGc +aNo +cYw +cYA +aqW +aqW +cYI +aTg +cGc +cGc +akx +alc +alc +alc +alc +cGc +cGc +cGc +cGc +cGc aaa aaa abC -aYG +aXh abC aaa aaa @@ -144307,119 +139600,119 @@ aaa aaa aaa aaa -bbo -bbo -bbo -baS -bet -bfi -bgi -bgX -bif -bja -bjQ -baS -bly -bia -biW -bjN -bqb -brw -bsO -buB -bvZ -cTh -cMr -bxM -btb -bCm -bDH -bEK -bFS -bHg -bIu -bKa -bLC -bEK -dpc -bPA -dpd -bRR -dph -bUd -bVe -bVV -bVV -bVV -bVV -bYN -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aZV -cgd -cgh -cgl -cgt -cgB -cgB -cgB -cgB -cgB -chw -baS -cfJ -cgi -cgi -cgu -cjU -cjU -cll -cJf -dla -cll -cHM -coK -cps -cjV -chc -chc -chc -cqD -cuD -cvK -cwD -cxp -cxU -cxU -cxU -cxU -cAQ -cxU -cxU -cDh -cxU -cxU -cxU -cxU -cBI -cFS -cGn -cxr +aZN +aZN +aZN +aZr +bcO +bdD +bez +bfo +bgw +bhq +bie +aZr +bjK +bgr +bhm +bib +boc +bpt +bqL +bsu +btQ +cJN +cHh +bvz +bqY +bzR +bBh +bCj +bDm +bEx +bFL +bHq +bIQ +bCj +bLc +bMI +bcS +bOW +baq +bRg +bSh +bSX +bSX +bSX +bSX +bVO +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aYu +cda +cdd +cdh +cdp +cdw +cdw +dad +cdw +cdw +cem +aZr +ccH +cde +cde +cdq +cgv +cgv +chK +cEW +cSw +chK +cDD +clf +clK +cgw +cdU +cdU +cdU +cmR +cqI +crN +csG +ctr +ctV +ctV +ctV +ctV +cwQ +ctV +ctV +czf +ctV +ctV +ctV +ctV +cxI +cBL +cCg +ctt aaa aaa aaa @@ -144502,56 +139795,56 @@ aaa aaa abC aaa +abC +abC +alk +alc +alc +amI +amI +afH +afH +afE +aep +afH +adP +aep +afH +afH +aep +aep +alc +amI +amI +alc +alc aaa aaa -alx -alx -and -aez -aez -afV -aqH -afq -apx -cZd -cYm -aiS -azp -amb -aBV -adZ -afV -afV -aez -alx -alx -alx -akR -akR -aKo -aOx -aKo -aQW -aRD -aSS -aLm -aUE -aLm -alx -alx -alx -and -and -alx -alx -alx +aaa +aJv +aNp +aJv +aPE +aQw +aRx +aKq +aTh +aKq +akx +akx +alc +alc +alc +alc +alc +alc aaa aaa aaa aaa aaa abC -aYG +aXh abC aaa aaa @@ -144564,47 +139857,47 @@ aaa aaa aaa aaa -bbq -bbq -bbq -baS -beu -bfj -bgj -baS -big -bja -bjP -deo -deo -deo -deo -deo -bqb -brx -bsP -cSW -buC -cTi -bxN -buH -btb -bCm -buH -bEL -bFT -bHh -bIv -bHh -bLD -bEK -dhy -bIO -dhy -dpf -bgs -bgs -bgs +aZP +aZP +aZP +aZr +bcP +bdE +beA +aZr +bgx +bhq +bid +cOX +cOX +cOX +cOX +cOX +boc +bpu +bqM +cJG +bsv +cJO +bvA +bsA +bqY +bzR +bsA +bCk +bDn +bEy +bFM +bEy +bIR +bCj +bcT +bMJ +bcT +bcd +aZr +aZr +aZr aaa aaa aaa @@ -144629,54 +139922,54 @@ aaa aaa aaa aaa -baS -baS -baS -bey -bey -bey -bey -baS -baS -baS -cfJ -cgi -cgi -cgu -cjV -dkN -clm -dkJ -dkJ -cng -dkJ -coL -dlu -cjU -chc -chc -chc -cqD -cuE -cvL -cwE -cxq -cxV -cxV -cxV -cxV -cAR -cxV -cxV -cDi -cDZ -cDZ -cDZ -cDZ -cLJ -cDZ -cGl -cxr +aZr +aZr +aZr +bcT +bcT +bcT +bcT +aZr +aZr +aZr +ccH +cde +cde +cdq +cgw +cSo +chL +cSk +cSk +cjC +cSk +clg +cSJ +cgv +cdU +cdU +cdU +cmR +cqJ +crO +csH +cts +ctW +ctW +ctW +ctW +cwR +ctW +ctW +czg +czW +czW +czW +czW +cGO +czW +cCe +ctt aaa aaa aaa @@ -144759,56 +140052,56 @@ aaa aaa abC aaa -akR -alx -and -and -aez -afS -afV -aoQ -afq -akq -alQ -akq -akq -akp -cYo -akp -cYl -akp -amb -cYj -aez -and -and -aKo -aLo -aLo -aKo -aOy -aKo -aQW -aRD -aST -aLm -aUF -aLm -aLm -aLm -alx -and -and -alx -alx -alx -alx -alx +aaa +aaa +alc +alc +amI +aep +aep +afH +aqh +afc +aoX +cLQ +cLy +aiA +ayI +alG +aBn +adP +afH +afH +aep +alc +alc +alc +akx +akx +aJv +aNq +aJv +cYC +aQk +aRy +aKq +aTi +aKq +alc +alc +alc +amI +amI +alc +alc +alc +aaa +aaa +aaa aaa aaa abC -abC -aYG +aXh abC aaa aaa @@ -144821,47 +140114,47 @@ aaa aaa aaa aaa -bbq -bbq -bbq -baS -dco -bfk -bgk -baS -big -bjb -bjR -deo -deK -deX -dfg -dfv -bqb -bry -bsP -cSW -buD -cTi -bxO -buH -btb -bCn -bDI -bEM -bFU -bHi -bIw -bHh -bLE -bEK -dhy -bIO -dhy -dpg -bgs -bbo -bbo +aZP +aZP +aZP +aZr +cNC +bdF +beB +aZr +bgx +bhr +bif +cOX +cPj +cPt +cPA +cPO +boc +bpv +bqM +cJG +bsw +cJO +bvB +bsA +bqY +bzS +bBi +bCl +bDo +bEz +bFN +bEy +bIS +bCj +bcT +bMJ +bcT +bcM +aZr +aZN +aZN aaa aaa aaa @@ -144885,55 +140178,55 @@ abC aaa aaa aaa -cfJ -cfJ -cfJ -baS +ccH +ccH +ccH +aZr +bcd +bNR bdG -bQL -bfl -bgo -baS -cfJ -cgi -cgi -cgi -cgi -cgu -cjU -dkN -clj -clW -clW -clW -clW -clW -clW -clW -clW -clW -clW -clW -cuF -cvM -cwF -cqD -cxr -cxr -czg -cxr -cqD -cza -cza -cqD -cxr -cxr -cxr -cxr -cqD -cza -cza -cqD +beF +aZr +ccH +cde +cde +cde +cde +cdq +cgv +cSo +chI +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +cqK +crP +csI +cmR +ctt +ctt +cvg +ctt +cmR +cva +cva +cmR +ctt +ctt +ctt +ctt +cmR +cva +cva +cmR aaa aaa aaa @@ -145015,57 +140308,57 @@ aaa aaa aaa abC -akR -akR -alx -and -and -aez -apO -aoR -ahr -ahr -ahr -cYY -avL -ahr -ahr -azq -cYY -ahr -ahr -aEj -afS -afV -aez -aez -aKo -aLp -aMq +aaa +akx +alc +amI +amI +aep +afE +afH +aor +afc +ajX +alv +ajX +ajX +ajW +cLA +ajW +cLx +ajW +alG +cLv +aep +amI +amI +aJv +aKs +aKs +aJv aNr -aOz -aPs -aQW -aRD -aSU -aLm -aUG -aVj -aVD -aLm -alx -and -aXa -aXb -aXa -aXa -aYi -alx -aaa +aJv +cYC +aQk +aRz +aKq +aTj +aKq +aKq +aKq +alc +amI +amI +alc +alc +alc +alc +alc aaa +cGc abC -aYF -aYH +abC +aXh abC aaa aaa @@ -145078,119 +140371,119 @@ aaa aaa aaa aaa -bbq -bbq -bbq -baS -baS -baS -baS -baS -big -bja -bjP -deq -blA -deY -deY -boV -bqb -brz -bsQ -cSY -buE -cTi -bxP -bza -bBl -bCo -bDJ -bEN -bFV -bHh -bIx -bHh -bLF -bEK -bNU -bPC -dpe -bRS -bgs -bbo -bbo -bbo -bbo +aZP +aZP +aZP +aZr +aZr +aZr +aZr +aZr +bgx +bhq +bid +cOY +bjL +cPu +cPu +bmY +boc +bpw +bqN +cJH +bsx +cJO +bvC +bwI +byR +bzT +bBj +bCm +bDp +bEy +bFO +bEy +bIT +bCj +bLd +bMK +bNR +bOX +aZr +aZN +aZN +aZN +aZN aaa -aXR -aXR -aXR -aXR -aXR -aXR -aXR -aXR -aXR -aXR +aWs +aWs +aWs +aWs +aWs +aWs +aWs +aWs +aWs +aWs aaa -aXR -aXR -aXR -aXR -aXR -aXR -aXR +aWs +aWs +aWs +aWs +aWs +aWs +aWs aaa aaa -cfJ -cfJ -cfJ -baS -baS -baS -baS -baS -baS -cfJ -cgi -cgi -cgi -cgi -cgu -cjV -cll -dkU -clW -cmB -cnh -cmC -cnV -cmC -cpt -cpt -csg -cpt -clW -cuE -cvN -cwG -cqD -cfI -cfI +ccH +ccH +ccH +aZr +aZr +aZr +aZr +aZr +aZr +ccH +cde +cde +cde +cde +cdq +cgw +chK +cSt +ciu +ciX +cjD +ciY +ckr +ciY +clL +clL +cor +clL +ciu +cqJ +crQ +csJ +cmR +ccG +ccG aaa aaa -cxr -czb -czb -cxr +ctt +cvb +cvb +ctt aaa aaa aaa aaa -cxr -czb -czb -cxr +ctt +cvb +cvb +ctt aaa aaa aaa @@ -145270,59 +140563,59 @@ aaa aaa aaa aaa -ajj -akc -anQ -dnE -ajn -aez -afS -afV -afq -anC -arC -arC -arC -arC -arC -arC -arC -arC -arC -arC -afq -anC -afS -adZ -aIf -adZ -aKo +aaa +abC +akx +akx +alc +amI +amI +aep +apo +aos +ahd +ahd +ahd +cLO +avf +ahd +ahd +ayJ +cLO +ahd +ahd +aDA +afE +afH +aep +aep +aJv +aKt aLq -aMr +aMn aNs -aOA -aPt -aQX -aRD -aSV -aLm -aUH -aVk -aVE -aLm -afV -afV -aXa -aXt -aXL -aXZ -aYi -aYi -aYi -abC -abC -aYG +aOg +cYC +aQk +aRA +aKq +aTk +aTN +aUh +aKq +alc +amI +aVC +aVD +aVC +aVC +aWJ +alc +aaa +aaa abC +aXg +aXi abC aaa aaa @@ -145334,50 +140627,50 @@ aaa aaa aaa aaa -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbq -baS -big -bja -bjP -deo -deL -deZ -dfh -boW -bqb -brA -bsR -cSZ -buF -cTl -bxQ -brQ -bBm -bCp -bDK -bEM -bFU -bHi -bIy -bKb -bLG -bEK -bNV -bOq -bgs -bgs -bgs -bbo -bbo -bbo -bbo +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZr +bgx +bhq +bid +cOX +cPk +cPv +cPB +bmZ +boc +bpx +bqO +cJI +bsy +cJP +bvD +bpN +byS +bzU +bBk +bCl +bDo +bEz +bFP +bHr +bIU +bCj +bLe +bLy +aZr +aZr +aZr +aZN +aZN +aZN +aZN aaa aaa aaa @@ -145398,56 +140691,56 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgu -cjV -ckB -clj -clW -cmC -cni -cmC -cnj -cmC -cmC -cnV -csh -cpt -clW -cuG -csC -cLA -cqD -cfI -cfI -cfI +ccH +ccH +ccH +ccH +ccH +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cdq +cgw +chb +chI +ciu +ciY +cjE +ciY +cjF +ciY +ciY +ckr +cos +clL +ciu +cqL +coK +cGI +cmR +ccG +ccG +ccG aaa -cqD -czc -czc -cqD +cmR +cvc +cvc +cmR aaa aaa aaa aaa -cqD -czc -czc -cqD +cmR +cvc +cvc +cmR aaa aaa aaa @@ -145527,58 +140820,59 @@ aaa aaa aaa aaa -ajk -alE -akd -dnF -ajn -ajn -aUW -aoQ -aoR -aqN -arC -asx -atB -asx -atC -atC -axN -azr -asx -arC -aqH -aEk -amb -akp -cZB -afS -aKp +aiR +ajJ +anv +cUg +aiV +aep +afE +afH +afc +anh +aqY +aqY +aqY +aqY +aqY +aqY +aqY +aqY +aqY +aqY +afc +anh +afE +adP +aHq +adP +aJv +aKu aLr -aMs +aMo aNt -aOB -aPu -aQY -aRF -aSW -cKe -aUI -aVl -aVF -aLm -ajt -aqH -aXb -aXu -aXM -aYa -aYj -aYr -aYj -aYn -aYn -aYH +aOh +cYD +aQk +aRB +aKq +aTl +aTO +aUi +aKq +afH +afH +aVC +aVU +aWm +aWA +aWJ +aWJ +aWJ +abC +abC +aXh +abC abC aaa aaa @@ -145590,52 +140884,51 @@ aaa aaa aaa aaa -aaa -bbo -bbo -bbo -bbo -bbo -bbq -bbo -bbq -baS -big -bja -bjP -deo -deM -dfa -dfi -dfw -bqb -brB -bsS -buG -bqb -bqb -bzb -bzb -bBn -bCq -brE -bEL -bFT -bHh -bIz -bHh -bLH -bEK -bNW -bPE -bgs -bgp -bbq -bbq -bbo -bbo -bbo -bbp +aZN +aZN +aZN +aZN +aZN +aZP +aZN +aZP +aZr +bgx +bhq +bid +cOX +cPl +cPw +cPC +cPP +boc +bpy +bqP +bsz +boc +boc +bwJ +bwJ +byT +bzV +bpB +bCk +bDn +bEy +bFQ +bEy +bIV +bCj +bLf +bML +beJ +beG +aZP +aZP +aZN +aZN +aZN +aZO abC abC abC @@ -145655,43 +140948,43 @@ abC abC abC abC -cfK -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgu -chc -cll -dkV -clW -cmD -cnj -cnT -cnj -cnV -cmC -cpt -csi -csS -ctR -cuH -csC -cwG -cxr -cfI -cfI -cfI +ccI +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cdq +cdU +chK +cSu +ciu +ciZ +cjF +ckp +cjF +ckr +ciY +clL +cot +cpa +cpX +cqM +coK +csJ +ctt +ccG +ccG +ccG aaa aaa aaa @@ -145784,55 +141077,58 @@ aaa aaa aaa aaa -ajl -ake -akS -aly -amf -ane -alr -aoR -apP -afV -arC -asy -atC -asx -asx -axb -atC -atC -aAH -arC -afS -amI -aCr -aCr -aCr -aBA -aKo -aKo -aKo -aKo -aKo -aKo -aQZ -aRQ -aSX -aLm -aUJ -aVe -aVG -aLm -alR -aWQ -aXc -aXv -aXN -aYb -aYi -aYi -aYi +aiS +alj +ajK +cUh +aiV +aiV +aTA +aor +aos +aqn +aqY +arT +asV +arT +asW +asW +axg +ayK +arT +aqY +aqh +aDB +alG +ajW +cMa +afE +aJw +aKv +aLs +aMp +aNu +aOi +aPF +aQm +aRC +cFI +aTm +aTP +aUj +aKq +ajb +aqh +aVD +aVV +aWn +aWB +aWK +aWS +aWK +aWO +aWO +aXi abC abC abC @@ -145845,54 +141141,51 @@ abC abC abC abC -abC -abC -abC -bbp -bbo -bbo -bbo -bbo -bbq -bbo -bbq -baS -big -bja -bjP -deo -deN -dfb -dfj -boX -bqc -brC -bsT -buH -buH -bwc -bxS -bAm -bxS -bCr -bDL -bEK -bFW -bHj -bIz -bKc -bLI -bEK -bNX -bPF -bQM -bgs -bgp -bgp -bbq -bbq -bbo -bbo +aZO +aZN +aZN +aZN +aZN +aZP +aZN +aZP +aZr +bgx +bhq +bid +cOX +cPm +cPx +cPD +bna +bod +bpz +bqQ +bsA +cZh +btR +bvE +bxT +bvE +bzW +bBl +bCj +bDq +bEA +bFQ +bHs +bIW +bCj +bLg +bMM +bNS +beJ +beG +beG +aZP +aZP +aZN +aZN aaa aaa aaa @@ -145912,43 +141205,43 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgu -chc -cxT -clj -clW -cmC -cmC -cnU -coM -cpt -cpt -cpt -cpt -cpt -clW -cuI -csC -cwG -cxr -cfI -cfI -cfI +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cdq +cdU +ctU +chI +ciu +ciY +ciY +ckq +clh +clL +clL +clL +clL +clL +ciu +cqN +coK +csJ +ctt +ccG +ccG +ccG aaa aaa aaa @@ -146041,54 +141334,59 @@ aaa aaa aaa aaa -cJr -akf -akT -aly -amg -ajn -anM -aoS -cYC -adZ -arC -asz -atD -auF -avM -atC -axO -atC -aAI -arC -adZ -afS -afV -aiS -dad -dan -day -aCr -aBA -cYl -dam -aLm -aRa -aRK -aSY -aLm -aUK -aVf -aVH -aLm -aqH -anC -aXb -aXb -aXa -aXb -aYi -alx +aiT +ajL +aky +ald +alK +amJ +akW +aos +app +afH +aqY +arU +asW +arT +arT +awu +asW +asW +azZ +aqY +afE +amn +aBJ +aBJ +aBJ +aAS +aJv +aJv +aJv +aJv +aJv +aJv +aPG +aQx +aRD +aKq +aTn +aTI +aUk +aKq +alw +aVs +aVE +aVW +aWo +aWC +aWJ +aWJ +aWJ +abC +abC +abC +abC aaa aaa aaa @@ -146100,57 +141398,52 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -bbq -bbq -bbq -bbq -bbq -bbq -bbq -bbq -cKp -big -bja -bjP -deo -blB -bmA -dfk -dfx -bqd -brD -bsU -bza -buI -bqe -bxT -bzc -bBo -bCr -brE -bEK -bFX -bHh -bIz -bKd -bLJ -bEK -dhy -bPG -bQN -bRT -bTa -bgs -bbq -bbo -baW -baW -baW +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZP +cFS +bgx +bhq +bid +cOX +bjM +bkJ +cPE +cPQ +boe +bpA +bqR +bwI +bsB +bof +bvF +bwK +byU +bzW +bpB +bCj +bDr +bEy +bFQ +bHt +bIX +bCj +cQY +bMN +bNT +bOY +bQe +beJ +aZP +aZN +aZv +aZv +aZv aaa aaa aaa @@ -146169,43 +141462,43 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -cfJ -chc -cjW -cxT -clp -clW -cmC -cmC -cnV -cmC -cnV -cpt -cqY -csj -csj -clW -cuH -csC -cwG -cxr -cfI -cfI -cfI +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +ccH +cdU +cgx +ctU +chO +ciu +ciY +ciY +ckr +ciY +ckr +clL +cnm +cou +cou +ciu +cqM +coK +csJ +ctt +ccG +ccG +ccG aaa aaa aaa @@ -146298,54 +141591,54 @@ aaa aaa aaa aaa -ajl -akg -akU -aly -amh -ajn -anN -aoT -adZ -adZ -arC -asx -atC -auG -avN -auG -axP -axO -aAI -arC -adZ -adZ -cZM -cZM -cZM -cZM -cZM -cZM -anC -cYl -afS -aPl -aRb -aRR -aSZ -aTF -aUL -aLm -aLm -aLm -aoR -apu -afS -alx -alx -alx -alx -alx +cFc +ajM +akz +ald +alL +aiV +anr +aot +cLG +adP +aqY +arV +asX +atZ +avg +asW +axh +asW +aAa +aqY +adP +afE +afH +aiA +cMs +cMz +cMH +aBJ +aAS +cLx +cMy +aKq +aPH +aQr +aRE +aKq +aTo +aTJ +aUl +aKq +aqh +anh +aVD +aVD +aVC +aVD +aWJ +alc aaa aaa aaa @@ -146361,53 +141654,53 @@ aaa aaa aaa aaa -aaa -bbq -bbq -bbq -baS -baS -baS -baS -baS -baS -big -bja -bjS -deo -blC -dpb -bnC -deY -dfC -dfK -cMq -buH -bHn -bqe -buH -bAn -bBp -bCr -bDM -bEK -bFY -bHk -bIA -bKe -bLK -bEK -bNY -bNZ -dhW -dhy -diz -bgr -bbq -bbo -baW -baW -baW +cGc +aZP +aZP +aZP +aZP +aZP +aZP +aZP +aZP +cFS +bgx +bhq +bid +cOX +bjN +cUP +blJ +cPu +cPU +cQa +cHg +bsA +bEE +bof +bsA +bxU +byV +bzW +bBm +bCj +bDs +bEB +bFR +bHu +bIY +bCj +bLh +bLi +cRn +cQY +cRD +beI +aZP +aZN +aZv +aZv +aZv aaa aaa aaa @@ -146426,43 +141719,43 @@ aaa aaa aaa aaa -cfJ -cfJ -cgi -cgi -cjV -cjV -cgu -cgu -cfJ -cfJ -cgi -cgi -cfJ -chc -cjU -cjU -cjX -cxT -cln -clW -cmC -cnk -cnW -cnW -cnW -cqi -cqZ -csk -csT -ctS -cuJ -cvD -cwH -cxr -cfI -cfI -cfI +ccH +ccH +cde +cde +cgw +cgw +cdq +cdq +ccH +ccH +cde +cde +ccH +cdU +cgv +cgv +cgy +ctU +chM +ciu +ciY +cjG +cks +cks +cks +cmz +cnn +cov +cpb +cpY +cqO +crG +csK +ctt +ccG +ccG +ccG aaa aaa aaa @@ -146555,54 +141848,54 @@ aaa aaa aaa aaa -ajl -akf -akU -alz -ami -ajn -ajn -anV -anV -anV -arC -arC -arC -auH -avO -auH -arC -arC -aAJ -arC -anV -anV -cZM -cZV -daf -dap -daA -cZM -amI -ahr -aOo -aPv -aRc -aRS -aTa -aLm -aLm -aLm -adZ -adZ -anC -afq -aLm -aLm -aLm -aLm -aLm -alx +aiT +ajN +akA +ald +alM +aiV +ans +aou +adP +adP +aqY +arT +asW +aua +avh +aua +axi +axh +aAa +aqY +adP +adP +cMh +cMh +cMh +cMh +cMh +cMh +anh +cLx +afE +aOc +aPI +aQy +aRF +aSk +aTp +aKq +aKq +aKq +aos +aoU +afE +alc +alc +alc +alc +alc aaa aaa aaa @@ -146619,54 +141912,54 @@ aaa aaa aaa aaa -bbq -bbq -bbo -baS -bdG -bew -bfl -bgl -baS +aZP +aZP +aZP +aZr +aZr +aZr +aZr +aZr +aZr +bgx +bhq big -bja -bjP -dew -bkD -bkD -bkD -bkD -bqe -brE -bsT -buH -bHn -cWw -bzd -bqe -bqe -bCs -bDN -bEK -bFZ -bEM -bIB -bKf -bEK -bEK -cKY -bNZ -bNZ -dhy -diz -bgp -bbq -bbq -bbo -bbo -baW -baW -baW +cOZ +biQ +biQ +biQ +biQ +bof +bpB +bqQ +bsA +bEE +cKU +bwL +bof +bof +bzX +bBn +bCj +bDt +bCl +bFS +bHv +bCj +bCj +cGm +bLi +bLi +cQY +cRD +beG +aZP +aZP +aZN +aZN +aZv +aZv +aZv aaa aaa aaa @@ -146683,42 +141976,42 @@ aaa aaa aaa aaa -cfJ -cfJ -cgi -cgi -cjV -cgC -cgK -cjV -chc -cjU -cgu -cgu -chc -chc -ciS -cjw -cjw -cxT -dkU -clW -cmE -cnl -cmC -cnV -cmC -cmC -cmC -csl -cmC -clW -cLy -csC -cwG -cxr -cfI -cfI +ccH +ccH +cde +cde +cgw +cdx +cdF +cgw +cdU +cgv +cdq +cdq +cdU +cdU +cfx +cfY +cfY +ctU +cSt +ciu +cja +cjH +ciY +ckr +ciY +ciY +ciY +cow +ciY +ciu +cGG +coK +csJ +ctt +ccG +ccG aaa aaa aaa @@ -146812,55 +142105,54 @@ aaa aaa aaa aaa -ajl -akf -akU -alA -amh -anf -ajn -aoU -cYD -aqO -arD -asA -atE -auI -avP -auI -axQ -azs -aAK -aBW -aCU -aEl -cZO -cZW -dag -daq -daB -cZM -daQ -aUW -avh -aPw -aRd -aRD -aTb -aLm -adZ -adZ -adZ -aWh -apu -aez -aLm -aMo -aMn -aYc -aLm -alx -alx +aiT +ajM +akA +ale +alN +aiV +aiV +any +any +any +aqY +aqY +aqY +aub +avi +aub +aqY +aqY +aAb +aqY +any +any +cMh +cMn +cMt +cMA +cMI +cMh +amn +ahd +aNh +aOj +aPJ +aQz +aRG +aKq +aKq +aKq +adP +adP +anh +afc +aKq +aKq +aKq +aKq +aKq +alc aaa aaa aaa @@ -146877,53 +142169,54 @@ aaa aaa aaa aaa -bbq -bbo -baS -bdH -bex -bex -bgm -bgY -bih -bjc -bjR -bkD -blD -bmC -bnD -boY -bqf -brF -bsV -buJ -dfP -dfQ -dfQ -dfQ -bBq -bCt -bDO -bEO -bGa -bHl -bIC -bKg -bLL -bMS -bLP -bPH -bNZ -dik -diz -bgp -bbq -bbq -bbo -bbo -bbo -baW -baW +aZP +aZP +aZN +aZr +bcd +bcR +bdG +beC +aZr +bgx +bhq +bid +biQ +bjO +bkK +blK +bnb +bog +bpC +bqS +bsC +cQb +cQc +cQc +cQc +byW +bzY +bBo +bCn +bDu +bEC +bFT +bHw +bIZ +bKe +bJd +bMO +bLi +cRx +cRD +beG +aZP +aZP +aZN +aZN +aZN +aZv +aZv aaa aaa aaa @@ -146939,43 +142232,43 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgu -cgD -cxT -cgL -cgL -chb -cgL -chc -cgL -cxT -ciS -cjw -cjV -dkP -clj -clW -clW -clW -clW -clW -clW -clW -clW -clW -clW -clW -cuK -csC -cwG -cxr -cfI -cfI +ccH +ccH +ccH +cde +cde +cdq +cdy +ctU +cdG +cdG +cdT +cdG +cdU +cdG +ctU +cfx +cfY +cgw +cSp +chI +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +ciu +cqP +coK +csJ +ctt +ccG +ccG aaa aaa aaa @@ -147069,55 +142362,55 @@ aaa aaa aaa aaa -cJs -akf -akU -aly -amj -ang -anO -aoV -apQ -apQ -arE -arE -cLT -arE -avQ -apQ -apQ -azt -aAL -aBX -cZA -aEn -cZP -cZX -dah -dar -daC -cZM -afV -aez -afV -aLm -aRe -aRT -aTc -aPv -aUM -ahr -ahr -apu -afV -aez -aLm -aNp -aNp -aYd -aLm -aLm -aLm +aiT +ajM +akA +alf +alM +amK +aiV +aov +cLH +aqo +aqZ +arW +asY +auc +avj +auc +axj +ayL +aAc +aBo +aCm +aDC +cMi +cMo +cMu +cMB +cMJ +cMh +cMQ +aTA +auB +akn +aPK +aQk +aRH +aKq +adP +adP +adP +aUL +aoU +aep +aKq +aLo +aLn +aWD +aKq +alc +alc aaa aaa aaa @@ -147134,53 +142427,53 @@ aaa aaa aaa aaa -baS -baS -baS -bdI -bey -bey -bgn -baS -big -bbs +aZP +aZN +aZr +bce +bcS +bcS +beD +bfp +bgy +bhs +bif +biQ bjP -bkD -blE -bmD -bnE -boZ -bqg -brG -bsW -buH -buH -buH -buH -buH -bxQ -bCu -bDP -bDP -bGb -bHm -bID -bKh -bLM -bMT -bOb -bPI -bNZ -dhy -bTc -bgr -bbo -bbq -bbq -bbo -bbo -baW -baW +bkL +blL +bnc +boh +bpD +bqT +bsA +bsA +bsA +bsA +bsA +bvD +bzZ +bBp +bBp +bDv +bED +bFU +bHx +bJa +bKf +bLj +bMP +bLi +cQY +bQg +beI +aZN +aZP +aZP +aZN +aZN +aZv +aZv aaa aaa aaa @@ -147196,43 +142489,43 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgu -cgu -cgM -dkG -cgL -cgL -cxT -cgL -cgL -cit -chc -chc -cjU -dkQ -clj -cjU -cjV -chc -cjU -cjU -chc -chc -chc -chc -chc -ctT -cuF -csC -cwG -cxr -cfI -cfI +ccH +ccH +ccH +cde +cde +cdq +cdq +cdH +cSh +cdG +cdG +ctU +cdG +cdG +ceY +cdU +cdU +cgv +cSq +chI +cgv +cgw +cdU +cgv +cgv +cdU +cdU +cdU +cdU +cdU +cqq +cqK +coK +csJ +ctt +ccG +ccG aaa aaa aaa @@ -147326,118 +142619,118 @@ aaa aaa aaa aaa -ajl -akh -akV -alB -amk -anh -anP -aoW -aoW -aoW -arF -arF -aoW -arF -avR +cFd +ajM +akA +ald +alO +amL +ant +aow +apq +apq +ara +ara +cGU +ara +avk +apq +apq +ayM +aAd +aBp +cLZ +aDD +cMj +cMp +cMv +cMC +cMK +cMh +afH +aep +afH +aKq +aPL +aQA +aRI +aOj +aTq +ahd +ahd aoU -aoU -aoU -aoU -aBX -aoU -aEn -cZQ -cZX -dai -das -daD -anV -anV -anV -anV -anV -aRd -aRD -aTa -aPw -alr -aqH -aoy -afK -afV -aez -aLm -aXw -aXO -aXO -aYk -aYs -aYv -aYw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -bar -baR -baR -bbR -bcv -bbR -bdJ -ber -ber -bgo -baS -bii -bjd -bjT -bkD -blF -bmE -bnF -bpa -bqh -brH -bsX -brQ -brQ -brQ -bze -brQ -brQ -bCv -buH -buH -buH -bHn -buH -bKi -bLN -bMU -bOc -bPJ -bNZ -dim -diz -bgp -bbq -bbq -bbq -bbo -bbo -bbo -bbo +afH +aep +aKq +aMl +aMl +aWE +aKq +aKq +aKq +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aZr +aZr +aZr +bcf +bcT +bcT +beE +aZr +bgx +bhq +bid +biQ +bjQ +bkM +blM +bnd +boi +bpE +bqU +bpN +bpN +bpN +bwM +bpN +bpN +bAa +bsA +bsA +bsA +bEE +bsA +bHy +bJb +bKg +bLk +bMQ +bLi +cRy +cRD +beG +aZP +aZP +aZP +aZN +aZN +aZN +aZN aaa aaa aaa @@ -147453,42 +142746,42 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgu -cgu -cgu -chc -chc -cgu -cgu -chc -cjV -chc -chc -chc -chc -cjU -clq -cll -cjU -dle -dlk -cjU -dlv -cjU -cjV -cjV -csU -clW -cuG -csC -cwG -cxr -cfI +ccH +ccH +ccH +cde +cde +cdq +cdq +cdq +cdU +cdU +cdq +cdq +cdU +cgw +cdU +cdU +cdU +cdU +cgv +chP +chK +cgv +cSy +cSB +cgv +cSK +cgv +cgw +cgw +cpc +cmR +cqL +coK +csJ +ctt +ccG aaa aaa aaa @@ -147583,118 +142876,118 @@ aaa aaa aaa aaa -ajm -aki +aiT +ajO +akB +alg +alP +amM +anu +aox +aox +aox +arb +arb +aox +arb +avl +aov +aov +aov +aov +aBp +aov +aDD +cMk +cMp +cMw +cMD +cML +any +any +any +any +any +aPK +aQk +aRG +akn akW -alC -alD -ani -ajn -aoU -aoU -aqP -arG -asB -atF -asG -avS -axc -aoW -aoW -aoW -aBY -azy -cZI -cZR -cZZ -daj -dat -daE -anV -aMt -aNu -aOC -aPx -aRf -aRU -aTa -aLm -aLm -aLm -aLm -aLm -aLm -aLm -aLm -aXx -cKe -aLm -aLm -aLm -aLm -aYx -aYz -aYz -aYz -aYz -aYz -aYz -aYz -aYz -aYz -aYz -aYz -aYz -bas -baS -baS -baS -baS -baS -baS -baS -baS -cKp -baS -bij -bbs -bjU -bkD -bkD -bkD -bkD -bkD -bqi -brI -bsY -bqe -bwd -bwd -bqe -bwd -bqe -bwd -bwd -bqe -bGc -bHo -bIE -bIE -bIE -bMV -bOc -bPK -bNZ -bQM -bTd -bgs -bbq -bbq -bbq -bbo -bbo -bbo -bbp +aqh +anZ +afw +afH +aep +aKq +aVX +aWp +aWp +aWL +aWT +aWW +aWX +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aqV +aYQ +aZq +aZq +baq +baU +baq +bcg +bcM +bcM +beF +aZr +bgz +bht +bih +biQ +biQ +biQ +biQ +biQ +boj +bpF +bqV +bof +btS +btS +bof +btS +bof +btS +btS +bof +bDw +bEF +bFV +bFV +bFV +bKh +bLk +bMR +bLi +bNS +bQh +beJ +aZP +aZP +aZP +aZN +aZN +aZN +aZO abC abC abC @@ -147710,47 +143003,42 @@ abC abC abC abC -cfK -cfI -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi +ccI +ccG +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cde +cdq +cdq +cgv +cfV cgu cgu -cjU -cjt -cjT -cjT -cnm -cjT -dlr -cjT -dkJ -cng -csm -csV -coJ -cuF -cvO -cwH -cxr -cfI -aaa -aaa -aaa -aaa -aaa +cjI +cgu +cSG +cgu +cSk +cjC +cox +cpd +cle +cqK +crR +csK +ctt +ccG aaa aaa aaa @@ -147777,6 +143065,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -147840,118 +143133,118 @@ aaa aaa aaa aaa -ajn -akj -ajn -alD -aml -anj -ajn -aoU -aoU -aoY -arH -asC -anV -auJ -avT -aoY -aoU -aoU -aAM -anV -aCW -aEn -anV -anV -anV -anV -anV -anV -aMu -aoU -aoU -aBX -aRg -aRD -aTd -aTG -aUN -aTG -aTG -aWi -aTG -aWR -dbP -aXy -aTG -aTG -aYl -aYt -cPO -cPT -cPT -cPT -cPT -cPT -cPT -aYU -cPT -cPT -cPT -cPT -cPT -cPT -cPT -cQC -bbr -cQJ -bcw -cQJ -cQJ -cQJ -bfm -cQJ -cQJ -bik -bbs -bjP -bkD -blG -bmF -bnG -bpb -bqj -brJ -bsZ -cKK -bwe +aiU +ajP +akC +alh +ali +amN +aiV +aov +aov +aqp +arc +arX +asZ +asc +avm +awv +aox +aox +aox +aBq +ayQ +cMg +cMl +cMq +cMx +cME +cMM +any +aLt +aMq +aNv +aOk +aPM +aQB +aRG +aKq +aKq +aKq +aKq +aKq +aKq +aKq +aKq +aVY +cFI +aKq +aKq +aKq +aKq +aWY +aXa +aXa +aXa +cXe +aXa +aXa +aXa +aXa +cXe +aXa +aXa +aXa +aYR +aZr +aZr +aZr +aZr +aZr +aZr +aZr +aZr +cFS +aZr +bgA +bhq +bii +biQ +bjR +bkN +blN +bne +bok +bpG +bqW +cGd +btT +bvG +bwN bxV -bzf -bAo -bBr -bxV -bDQ -bwc -buH -bHn -bIE -bKj -bLO -cMD -bOd -bPL -bNZ -dhy -diz -bgp -bgp -bbq -bbq -bbo -bbo -bbo -bbo +byX +bvG +bBq +btR +bsA +bEE +bFV +bHz +bJc +cHq +bLl +bMS +bLi +cQY +cRD +beG +beG +aZP +aZP +aZN +aZN +aZN +aZN aaa aaa aaa @@ -147967,62 +143260,57 @@ aaa aaa aaa aaa -cfI -cfI -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cgi -cgi -cgi -cgi -cgi -cgu -cgu -cjU -clr -ckz -cgL -cln -chb -cgL -cxT -dkG -cIc -cHM -dly -coJ -cuF -csC -cwI -cqD -cfI -cfI +ccG +ccG +ccH +cde +cde +cde +cde +cde +cde +cde +ccH +cde +cde +cde +cde +cde +cdq +cdq +cgv +chQ +cgZ +cdG +chM +cdT +cdG +ctU +cSh +cDT +cDD +cSL +cle +cqK +coK +csL +cmR +ccG +ccG aaa aaa -cqD -cza -cza -cqD -aaa -aaa -aaa -aaa -cqD -cza -cza -cqD -aaa +cmR +cva +cva +cmR aaa aaa aaa aaa +cmR +cva +cva +cmR aaa aaa aaa @@ -148034,6 +143322,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -148097,118 +143390,118 @@ aaa aaa aaa aaa -aaa -aaa -ajn -ajn -ajn -ajn -ajn -aoU -aoU -aoY -arI -arM -aoY -arM -arI -aoY -axR -azv -aAN -anV -aCX -aEo -aBW -aHf -aIg -aJp -aKq -aLs -aMv -aoU -aoU -aBX -aRg -aRV -aTe -aRD -aUO -aRD -aRD -aWj -aRD -aTS -aRD -aRD -aRD -aRD -aYm -aRD -aRP -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -arz -baU -bbs -bbT -bbs -bbs -bbs -bbs -bfn -bbs -bbs -bil -cKz +aiV +ajQ +aiV +ali +alQ +amO +aiV +aov +aov +aoz +ard +arY +any +aud +avn +aoz +aov +aov +aAe +any +aCn +aDD +any +any +any +any +any +any +aLu +aov +aov +aBp +aPN +aQk +aRJ +aSl +aTr +aSl +aSl +aUM +cYY +aVt +cNd +aVZ +aSl +aSl +aWM +aWU +cIY +cIZ +cIZ +cIZ +cIZ +cXf +aXt +aXt +aXt +aXt +cXn +aXt +aXt +aXt +aXt +cJe +aZQ +cJj +baV +cJj +cJj +cJj +bdH +cJj +cJj +bgB +cXp +bid +biQ bjP -bkD -blE -bmD -bnE -bpc -bqg -brG -bta -buK -bwf +bkL +blL +bnf +boh +bpD +bqX +bsD +btU +bvH +bwO bxW -bzg -bAp -bBs -bCw -bDR -bEP -bDK -bHn -bIE -bKk -bLP -bLP -bOc -bPM -bNZ -dhy -bTe -bMb -bgs -bbq -bbq -bbo -bbo -bbq -bbo +byY +bAb +bBr +bCo +bBk +bEE +bFV +bHA +bJd +bJd +bLk +bMT +bLi +cQY +bQi +bJo +beJ +aZP +aZP +aZN +aZN +aZP +aZN aaa aaa aaa @@ -148224,62 +143517,57 @@ aaa aaa aaa aaa -cfI -cfI -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -cfJ -cfJ -cfJ -cgu -cgu -cgu -chc -cjU -dlc -cnn -ckz -chc -cjV -chc -cjU -chc -chX -chX -cNr -cvP -cwJ -cqD -cfI -cfI -cfI -aaa -cxr -czb -czb -cxr -aaa -aaa -aaa -aaa -cxr -czb -czb -cxr +ccG +ccG +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ccH +ccH +ccH +cdq +cdq +cdq +cdU +cgv +cSx +cjJ +cgZ +cdU +cgw +cdU +cgv +cdU +ceF +ceF +cHG +crS +csM +cmR +ccG +ccG +ccG aaa +ctt +cvb +cvb +ctt aaa aaa aaa aaa +ctt +cvb +cvb +ctt aaa aaa aaa @@ -148291,6 +143579,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -148356,116 +143649,116 @@ aaa aaa aaa aaa -aaa -akR -akR -akR -anV -aoY -aoY -aoY -arH -asD -aoY -auK -avT -aoY -aoY -aoY -aoY -anV -aCY -aEp -aFJ -aHg -aIh -aoU -aEn -aoY -aMw -aoU -aoU -aPy -aRh -aRW -aTf -aTH -aUP -aVm -aVI -aWk -aWE -aWS -aXd -aQN -aXP -aQN -aQN -aQN -aQR -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -baV -bbt -bbU -bcx -bdd -bdd -bez -bfo -bdd -bdd -bim -bcx -bjV -bkD -blF -bmE -bnF -bpd -bqh -brH -btb -buL -bwg -bxX -bzh -bzh -bzh -bCx -bDS -bEQ -bGd -bHp -bIE -bKl -bLP -bLP -bOc -bPN -bNZ -bRU -bTf -bUe -bgr -bbq -bbq -bbo -bbq -bbq -bbq +aiV +aiV +aiV +aiV +aiV +aov +aov +aoz +are +ari +aoz +ari +are +aoz +axk +ayN +aAf +any +aCo +aDE +aBo +aGt +aHr +aIy +aJx +aKw +aLv +aov +aov +aBp +aPN +aQC +aRK +aQk +aTs +aQk +aQk +aUN +aQk +aSw +aQk +aQk +aQk +aQk +aWN +aQk +aQw +cXa +cXa +cXa +cXa +cXa +cXa +cYO +cXa +cXa +cXa +cXa +cXa +cXa +cXa +aZt +aZR +bas +aZR +aZR +aZR +aZR +bdI +aZR +aZR +bgC +cFZ +bid +biQ +bjQ +bkM +blM +bng +boi +bpE +bqY +bsE +btV +bvI +bwP +bwP +bwP +bAc +bBs +bCp +bDx +bEG +bFV +bHB +bJd +bJd +bLk +bMU +bLi +bOZ +bQj +bRh +beI +aZP +aZP +aZN +aZP +aZP +aZP aaa aaa aaa @@ -148481,62 +143774,57 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chX -chX -chX -chX -chX -chX -chX -chY -chX -chX -chX -chX -chX -chX -chY -chX -chX -ctU -cuL -cvQ -cwK -cLB -cxr -cxr -cxr -cxr -cqD -czc -czc -cqD -cxr -cxr -cxr -cxr -cqD -czc -czc -cqD -aaa -aaa -aaa -aaa -aaa +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ceF +ceF +ceF +ceF +ceF +ceF +ceF +ceG +ceF +ceF +ceF +ceF +ceF +ceF +ceG +ceF +ceF +cpZ +cqQ +crT +csN +cGJ +ctt +ctt +ctt +ctt +cmR +cvc +cvc +cmR +ctt +ctt +ctt +ctt +cmR +cvc +cvc +cmR aaa aaa aaa @@ -148548,6 +143836,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -148614,115 +143907,115 @@ aaa aaa aaa aaa -aaa -aaa -abC -arw -aoZ -aoZ -aoZ -arJ -asE -aoZ -auL -avU -aoZ -aoZ -aoZ -aaa -anV -aCZ -aEq -aFK -aHh -aoU -aoU -aKr -aLt -aMx -aoU -aoU +akx +akx +akx +any +aoz +aoz +aoz +ard +arZ +aoz +aue +avn +aoz +aoz +aoz +aoz +any +aCp +aDF +aEY +aGu +aHs +aov +aDD +aoz +aLw +aov +aov +aOl +aPO +aQD +aRL +aSm +aTt +aTQ +aUm +aUO +aVi +aVu +aVF +aPy +aWq aPy aPy -aRX -aTg -aTI -anV -aLm -aLm -aWl -aPJ -aPl -aLm -aLm -aLm -aLm -aLm -aLm -aLm -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -aYy -baS -baS -baS -baS -baS -bdK -baS -baS -baS -bgZ -bin -baS -bjW -bjW -bjW -bjW -bjW -bjW -bjW -brK -btc -bqe -bwh -bxY -bzi -bAq -bBt -bwh -bxY -bqe -bGe -bHn -bIE -bKm -bLP -bMX -bOe -bLQ -bQO -bRV -bTg -bIO -bgr -bbq -bbq -bbo -bbq -bbq -bbq +aPy +aPC +cXa +cXa +cXa +cXa +cXg +cXa +cXa +cXa +cXa +cXg +cXa +cXa +cXa +cXa +aZu +aZS +bat +baW +bbB +bbB +bcU +bdJ +bbB +bbB +bgD +baW +bij +bik +bik +bik +bik +bik +bik +bpH +bqZ +bof +btW +bvJ +bwQ +bxX +byZ +btW +bvJ +bof +bDy +bEE +bFV +bHC +bJd +bKi +bLm +bJe +bNU +bPa +bQk +bGf +beI +aZP +aZP +aZN +aZP +aZP +aZP aaa aaa aaa @@ -148738,62 +144031,57 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chY -ciu -ciT -ciT -cjY -ciA -cls -cNm -cmG -clX -cnY -cLq -clX -cNm -clX -csn -clu -clu -cuM -csC -cwL -cxt -cxX -cxX -cxX -cxX -cAS -cxX -cxX -cDo -cEb -cxU -cxU -cxU -cxU -cFS -cGk -cxr -aaa -aaa -aaa -aaa -aaa +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +cde +cde +ccH +ceG +ceZ +cfy +cfy +cgz +cff +chR +cHB +cjc +civ +cku +cGB +civ +cHB +civ +coy +chT +chT +cqR +coK +csO +ctv +ctY +ctY +ctY +ctY +cwS +ctY +ctY +czm +czY +ctV +ctV +ctV +ctV +cBL +cCd +ctt aaa aaa aaa @@ -148805,6 +144093,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -148874,113 +144167,113 @@ aaa aaa aaa abC -arw -aoZ -apR -apR -apR -apR -atG -apR -apR -apR -axS -aoZ -aAO -aoY -aDa -aEr -aBY -aHi -aoU -aoU -aKs -aoY -aMy -aoU -aoU -aoU -aoU -aRY -azA -aTJ -anV -alx -aLm -aWm -aPI -aUR -dbQ -aXz -aLm -alx -alx -alx +aqV +aoA +aoA +aoA +arf +asa +aoA +auf +avo +aoA +aoA +aoA aaa -aaa -abC -aaa -aaa -aaa -aaa -abC -aaa -aaa -aaa -aaa -abC -aaa -aaa -baW -baW -bbo -bbo -bbq -bbq -bbq -bbq -bgs -bha -bio -bje -bjW -bkE -blH -blI -blI -bpe -bjW -brL -bsY -bqe -bwd -bwd -bqe -bwd -bqe -bwd -bwd -bqe -bGf -bHn -bIF -bKn -cKW -bMY -bOf -bPO -bNZ -bgq -bTh -bUf -bgs -bbo -bbo -bbo -bbq -bbq -bbq -bbo +any +aCq +aDG +aEZ +aGv +aov +aov +aJy +aKx +aLx +aov +aov +aOl +aOl +aQE +aRM +aSn +any +aKq +aKq +aUP +aOv +aOc +aKq +aKq +aKq +aKq +aKq +aKq +aKq +aWZ +aWZ +aWZ +aWZ +cXh +aWZ +aWZ +aWZ +aWZ +cXh +aWZ +aWZ +aWZ +aWZ +aZr +aZr +aZr +aZr +aZr +bch +aZr +aZr +aZr +bfq +bgE +aZr +bik +biR +bjS +bjT +bjT +bnh +bik +bpI +bqV +bof +btS +btS +bof +btS +bof +btS +btS +bof +bDz +bEE +bFW +bHD +cGk +bKj +bLn +bMV +bLi +beH +bQl +bRi +beJ +aZN +aZN +aZN +aZP +aZP +aZP +aZN aaa aaa aaa @@ -148995,64 +144288,59 @@ aaa aaa aaa aaa -cfI -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chX -civ -ciU -cjx -cjZ -ckI -clt -cjx -cmH -cjx -cjx -cjx -cjx -cjx -cjx -cjx -cjx -cjx -cuN -cLz -cwM -cxq -cxV -cxV -cxV -cxV -cAT -cBO -cxV -cDi -cEc -cEL -cEL -cLI -cFG -cFW -cGo -cxr -cfI -cfI -aaa -aaa -aaa -aaa -aaa +ccG +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +ccH +ceF +cfa +cfz +cfZ +cgA +chi +chS +cfZ +cjd +cfZ +cfZ +cfZ +cfZ +cfZ +cfZ +cfZ +cfZ +cfZ +cqS +cGH +csP +cts +ctW +ctW +ctW +ctW +cwT +cxO +ctW +czg +czZ +cAH +cAH +cGN +cBz +cBP +cCh +ctt +ccG +ccG aaa aaa aaa @@ -149062,6 +144350,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -149131,48 +144424,48 @@ aaa aaa aaa abC -arw -aoZ -apR -apR -apR -apR -apR -apR -apR -apR -apR -azw -aAP -aoY -aCW -aEs -anV -aHj -aIi -azy -aKt -aBY -aMz -aoW -aoW -aoW -aoW -aRZ -cOC -aTJ -anV -alx -aLm -aWn -aOl -daW -aXe -aXA -aLm -alx -alx -alx +aqV +aoA +apr +apr +apr +apr +ata +apr +apr +apr +axl +aoA +aAg +aoz +aCr +aDH +aBq +aGw +aov +aov +aJz +aoz +aLy +aov +aov +aov +aov +aQF +ayS +aSo +any +alc +afH +aUQ +cZa +cZb +cNe +aWa +afH +alc +alc +alc aaa aaa abC @@ -149188,56 +144481,56 @@ aaa abC aaa aaa -baW -baW -baW -bbo -bbq -bbq -bbq -bbq -bgp -bhb -ddo -bjf -bjW -bkF -blI -bmG -blI -bpf -bqk -brM -btd -buM -bwi -bwi -bzj -bwi -bBu -bwi -bDT -bER -bGg -bHq -bIE -bKo -cKX -bMZ -bOg -bLP -bNZ -bgq -bTi -diK -bgq -bbo -bbq -bbq -bbq -bbo -bbo -baW +aZv +aZv +aZN +aZN +aZP +aZP +aZP +aZP +beJ +bfr +bgF +bhu +bik +biS +bjT +bkO +bjT +bni +bol +bpJ +bra +bsF +btX +btX +bwR +btX +bza +btX +bBt +bCq +bDA +bEH +bFV +bHE +cGl +bKk +bLo +bJd +bLi +beH +bQm +cRE +beH +aZN +aZP +aZP +aZP +aZN +aZN +aZv aaa aaa aaa @@ -149252,73 +144545,73 @@ aaa aaa aaa aaa -cfI -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chX -civ -ciV -ciX -cka -chX -clu -ciX -ciV -ciX -ciX -ciX -ciX -ciX -ciX -ciX -ckb -clv -cum -cum -cwN -cul -cqD -cqD -cza -cqD -cqD -cqD -cqD -cqD -cza -cqD -cqD -cqD -cul -cFX -cGp -cqD -cfJ -cfI -cfI -cfI -aaa -cfJ -aaa -aaa -aaa -aaa +ccG +ccH +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +ccH +ceF +cfa +cfA +cfC +cgB +ceF +chT +cfC +cfA +cfC +cfC +cfC +cfC +cfC +cfC +cfC +cgC +chU +cqr +cqr +csQ +cqq +cmR +cmR +cva +cmR +cmR +cmR +cmR +cmR +cva +cmR +cmR +cmR +cqq +cBQ +cCi +cmR +ccH +ccG +ccG +ccG aaa +ccH aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -149388,113 +144681,113 @@ aaa aaa aaa abC -arw -aoZ -apR -apR -apR -apR -apR -apR -apR -apR -apR -azw -aAP -aoY -aCW -aEs -anV -aHk -aCW -aJq -aKu -aLu -aMA -aoU -aoU -aoU -aoU -aRY -apb -aTJ -anV -alx -aLm -aMg -aWF -aWT -aXf -aNF -aLm -alx -alx -alx -alx -aXR -aXR -aXR +aqV +aoA +apr +apr +apr +apr +apr +apr +apr +apr +apr +ayO +aAh +aoz +aCn +aDI +any +aGx +aHt +ayQ +aJA +aBq +aLz +aox +aox +aox +aox +aQG +cII +aSo +any +alc +afH +aUR +aLE +ajW +atz +aWb +afH +alc +alc +alc aaa -aXR -aXR -aXR -aXR aaa -aXR -aXR -aXR -aXR -aXR -baW -baW -baW -bbo -bbo -bbo -bbq -bbq -bgr -bhc -bip -btq -bjW -bkG -blJ -bmH -bnH -bpg -bql -brN -bsW -brE -buH -buH -buH -buH -buH -buH -bDU -bES -bDI -buH -cWA -bIE -bIE -bIE -bIE -bNZ -bNZ -bgq -diz -dhy -bgq -bbo -bbq -bbq -bbq -bbo -bbo -baW +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aaa +aaa +abC +aaa +aaa +aZv +aZv +aZv +aZN +aZN +aZN +aZP +aZP +beI +bft +bgG +brn +bik +biT +bjU +bkP +blO +bnj +bom +bpK +bqT +bpB +bsA +bsA +bsA +bsA +bsA +bsA +bBu +bCr +bBi +bsA +cKY +bFV +bFV +bFV +bFV +bLi +bLi +beH +cRD +cQY +beH +aZN +aZP +aZP +aZP +aZN +aZN +aZv aaa aaa aaa @@ -149509,73 +144802,73 @@ aaa aaa aaa aaa -cfI -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cgi -cgi -cgi -cgi -cgi -cfJ -chX -ciw -ciW -ciX -ckb -ckJ -clv -clv -clv -clv -clv -clv -clv -cqk -clv -clv -csW -chX -cqD -cqD -cqD -cqD -cfI -cxr -czb -cxr -cfI -cfI -cfI -cxr -czb -cxr -cfI -cfJ -cqD -cqD -cGq -cqD -cfJ -cfJ -cfJ -cfI -cfI -cfJ -aaa -aaa -aaa -aaa -aaa +ccG +ccH +ccH +ccH +ccH +cde +cde +cde +cde +cde +cde +cde +ccH +ceF +cfb +cfB +cfC +cgC +chj +chU +chU +chU +chU +chU +chU +chU +cmA +chU +chU +cpe +ceF +cmR +cmR +cmR +cmR +ccG +ctt +cvb +ctt +ccG +ccG +ccG +ctt +cvb +ctt +ccG +ccH +cmR +cmR +cCj +cmR +ccH +ccH +ccH +ccG +ccG +ccH aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -149645,113 +144938,113 @@ aaa aaa aaa abC -arw -aoZ -apR -apR -apR -apR -apR -apR -apR -apR -apR -azw -aAP -aoY -aDb +aqV +aoA +apr +apr +apr +apr +apr +apr +apr +apr +apr +ayO +aAh +aoz +aCn +aDI +any +aGy +aCn +aIz +aJB +aKy +aLA +aov +aov +aov +aov +aQF +aoC +aSo +any +alc +afH +aLi +aAU +aVv +aVG aEt -anV -aHl -aCW -aoU -aKv -aoY -aMB -aNv -aOD -aPz -aRi -aSa -aTh -aTK -anV -alx -aLm -aLm -aLm -aLm -aLm -aLm -aLm -alx -alx -alx -alx +afH +alc +alc +alc +alc +aWs +aWs +aWs aaa +aWs +aWs +aWs +aWs aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -baW -baW -baW -baW -bbo -bbo -bbo -bbq -bgs -bhd -bip -ddH -bjW -bkH -blI -bmI -cMp -bph -bjW -brE -bsX -brN -bwj -bxZ -bzk -bAr -bzk -bCy -bDV -bET -buH -buH -bGh -bKp -bLR -bNa -bOh -bGk -bgq -bgq -bTe -bUg -bgr -bbo -bbq -bbq -bbq -bbo -bbo -baW +aWs +aWs +aWs +aWs +aWs +aZv +aZv +aZv +aZv +aZN +aZN +aZN +aZP +beJ +bfu +bgG +cOC +bik +biU +bjT +bkQ +cHf +bnk +bik +bpB +bqU +bpK +btY +bvK +bwS +bxY +bwS +bAd +bBv +bCs +bsA +bsA +bDB +bHF +bJf +bKl +bLp +bDE +beH +beH +bQi +bRj +beI +aZN +aZP +aZP +aZP +aZN +aZN +aZv aaa aaa aaa @@ -149769,70 +145062,70 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cfJ -chX -cix -ciX -ciX -ckc -chX -ciX -ciX -ciX -ciX -ciX -coN -ciX -cql -ciX -ciX -csX -chX -cfJ -cfJ -cfJ -cfI -aaa -cqD -czc -cqD -cfI -cfI -aaa -cqD -czc -cqD -aaa -cfJ -cfJ -cFY -cGr -cFY -cFY -cfJ -cfJ -cfI -cfJ -cfJ -aaa -aaa +ccH +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +ccH +ceF +cfc +cfC +cfC +cgD +ceF +cfC +cfC +cfC +cfC +cfC +cli +cfC +cmB +cfC +cfC +cpf +ceF +ccH +ccH +ccH +ccG aaa +cmR +cvc +cmR +ccG +ccG aaa +cmR +cvc +cmR aaa +ccH +ccH +cBR +cCk +cBR +cBR +ccH +ccH +ccG +ccH +ccH aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -149902,51 +145195,51 @@ aaa aaa aaa abC -arw -aoZ -apR -apR -apR -apR -apR -apR -apR -apR -axS -aoZ -aAQ -aoY -aCW -aEs -anV -aHm -aCW -aJr -aKw -anV -anV -anV -anV -aPA -anV -aSb -avk -anV -anV -alx -and -and -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx +aqV +aoA +apr +apr +apr +apr +apr +apr +apr +apr +apr +ayO +aAh +aoz +aCs +aDJ +any +aGz +aCn +aov +aJC +aoz +aLB +aMr +aNw +aOm +aPP +aQH +aRN +aSp +any +alc +afH +afH +afH +akn +afH +afH +afH +alc +alc +alc +alc +alc +alc aaa aaa aaa @@ -149961,54 +145254,54 @@ aaa aaa aaa aaa -baW -baW -baW -bbo -bbo -bbo -bgq -bhd -bip -ddq -bjW -bkI -blK -blI -bnI -bpi -bjW -brO -bte -brE -bwk -cWx -bya -bya -bya -bCz -bDW -bEU -bGh -bGh -bGh -bKq -bLS -bLS -bOi -bGk -bgq -bRW -bTe -diM -bgs -bbo -bbq -bbq -bbq -bbo -bbo -baW +aZv +aZv +aZv +aZN +aZN +aZN +beH +bfu +bgG +cOq +bik +biV +bjV +bjT +blP +bnl +bik +bpL +brb +bpB +btZ +cKV +bvL +bvL +bvL +bAe +bBw +bCt +bDB +bDB +bDB +bHG +bJg +bJg +bLq +bDE +beH +bPb +bQi +cRF +beJ +aZN +aZP +aZP +aZP +aZN +aZN +aZv aaa aaa aaa @@ -150026,70 +145319,70 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cfJ -cgi -cgi -cfJ -chX -ciy -ciX -cjy -ckd -ciA -ciX -ciX -ciX -ciX -ciX -ciX -ciX -ciX -ciX -ciX -ciX -chX -cfJ -cfJ -cfI -cfI +ccH +ccH +ccH +ccH +ccH +ccH +ccH +cde +cde +ccH +ceF +cfd +cfC +cga +cgE +cff +cfC +cfC +cfC +cfC +cfC +cfC +cfC +cfC +cfC +cfC +cfC +ceF +ccH +ccH +ccG +ccG aaa aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa -cCx -cEd -cCx -aaa -aaa -cfJ -cFY -cGs -cGC -cFY -cFY -cHm -cHm -cqD -aaa -aaa -aaa -aaa -aaa +ccH +cBR +cCl +cCu +cBR +cBR +cDd +cDd +cmR aaa aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -150159,51 +145452,51 @@ aaa aaa aaa abC -arw -aoZ -aoZ -aoZ -arK -arK -aoZ -auM -arK -aoZ -aoZ -aoZ -aaa -anV -aCZ -aEs -anV -aHn -aCW -aoU -daF -anV -aez -aez -adZ -afV -akp -aSc -cOD -cZB -afS -alx -alx -alx -and -alx -and -and -and -and -and -alx -alx -alx -alF +aqV +aoA +apr +apr +apr +apr +apr +apr +apr +apr +axl +aoA +aAi +aoz +aCn +aDI +any +aGA +aCn +aIA +aJD +any +any +any +any +aOn +any +aQI +auE +any +any +alc +amI +afH +ajW +cZc +afE +alc +alc +alc +alc +alc +alc +alc +alk abC abC abC @@ -150220,52 +145513,52 @@ abC abC abC abC -bbp -bbo -bbo -bbo -bgr -dcY -bip -bhb -bjW -bkJ -bkJ -bkJ -bkJ -bkJ -bjW -brE -btb -brE -bwl -bya -bzl -bAs -bBv -bCA -bDX -bEV -bGi -bHr -bIG -bKr -bLT -bNb -bOj -bGk -bQQ -dhy -diz -dik -bgs -bbo -bbo -bbo -bbo -bbo -bbo -bbo +aZO +aZN +aZN +aZN +beI +cOc +bgG +bfs +bik +biW +biW +biW +biW +biW +bik +bpB +bqY +bpB +bua +bvL +bwT +bxZ +bzb +bAf +bBx +bCu +bDC +bEI +bFX +bHH +bJh +bKm +bLr +bDE +bNV +cQY +cRD +cRx +beJ +aZN +aZN +aZN +aZN +aZN +aZN +aZN aaa aaa aaa @@ -150283,37 +145576,37 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cfI -cfI -cfJ -cfJ -cfJ -cfJ -cfJ -chY -ciz -ciY -ciY -cke -ciA -ciX -clY -ciX -ciX -ciX -coO -ciX -ciX -ciX -clY -cLv -chX -cfJ -cfJ -cfI +ccH +ccH +ccH +ccG +ccG +ccH +ccH +ccH +ccH +ccH +ceG +cfe +cfD +cfD +cgF +cff +cfC +ciw +cfC +cfC +cfC +clj +cfC +cfC +cfC +ciw +cGE +ceF +ccH +ccH +ccG aaa aaa aaa @@ -150321,32 +145614,32 @@ aaa aaa aaa aaa -cCx +cGc +cGc +cGc +cGc +cGc +aaa +ccH +cBR +cCm +cCv +cCH +cCH +cDe cDp -cDq -cDp -cCx -aaa -cfJ -cFY -cGt -cGD -cGP -cGP -cHn -cHy -cHm -aaa -aaa -aaa -aaa -aaa +cDd aaa aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -150411,56 +145704,56 @@ aaa aaa aaa aaa -dnA aaa -akR -akR -akR -anV -aoY -aoY -aoY -arL -asF -aoY -asF -arL -aoY -aoY -aoY -aoY -anV -aCY -aEs -anV -aHo -aCW -aoU -aKx -anV -aez -aez -adZ -afS -cYt -cYK -aiS -afS -afV -and -and -and -and -and -and -and -and -alx -and -and -and -alx -alx +aaa +aaa +aaa +abC +aqV +aoA +aoA +aoA +arg +arg +aoA +aug +arg +aoA +aoA +aoA +aaa +any +aCq +aDI +any +aGB +aCn +aov +cMN +any +aep +aep +adP +afH +ajW +aQJ +cIJ +cMa +afE +alc +alc +afE +ajW +aVI +afH +amI +amI +amI +amI +alc +alc +alc +alc aaa aaa aaa @@ -150478,51 +145771,51 @@ aaa aaa aaa aaa -bbo -bbo -bbo -bgq -bhd -biq -bjh -bjW -bkK -bkK -bkK -bkK -bpj -bqk -brP -btb -buN -bwm +aZN +aZN +aZN +beH +bfu +bgH +bhw +bik +biX +biX +biX +biX +bnm +bol +bpM +bqY +bsG +bub +bvL +bwU +cQk bya -bzm -dgg -bAt -bCB -bDY -bEW -bGj -bHs -bIH -bKs -bLU -bNc -bOk -bPP -bQR -bRX -bTj -dhy -bgr -bbo -bbo -bbo -bbo -bbo -bbo -bbo +bAg +bBy +bCv +bDD +bEJ +bFY +bHI +bJi +bKn +bLs +bMW +bNW +bPc +bQn +cQY +beI +aZN +aZN +aZN +aZN +aZN +aZN +aZN aaa aaa aaa @@ -150540,37 +145833,37 @@ aaa aaa aaa aaa -cfJ -cfJ -cfJ -cfI -cfI -cfI -cfJ -cfJ -cfJ -cfJ -chX -ciA -ciA -chX -ckf -chX -clw -cLo -ciA -ciA -ciA -chX -clw -cLo -clw -chX -chX -chX -cfJ -cfJ -cfI +ccH +ccH +ccH +ccG +ccG +ccG +ccH +ccH +ccH +ccH +ceF +cff +cff +ceF +cgG +ceF +chV +cGz +cff +cff +cff +ceF +chV +cGz +chV +ceF +ceF +ceF +ccH +ccH +ccG aaa aaa aaa @@ -150578,32 +145871,32 @@ aaa aaa aaa aaa -cCy +cGc +cGc +cGc +cGc +cGc +aaa +ccG +ccH +cBR +cCw +cCI +cBR +cDd cDq -cDq -cEM -cCy -aaa -cfI -cfJ -cFY -cGE -cGQ -cFY -cHm -cHz -cHm -aaa -aaa -aaa -aaa -aaa +cDd aaa aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aad aaa aaa @@ -150668,56 +145961,64 @@ aaa aaa aaa aaa -dnB -dnD -dnD -dnD -dnD -anT -aoX -aoU -aoY -arM -arM -aoY -arM -arM -aoY -axT -azx -aAR -anV -aCX -aEs -anV -aHp -aIj -aJs -aKy -aHp -aez -aez -afS -cYm -cYu -akp -akp -cYg -afS -and -and -and -and -and -and -and -and -alx -and -and -and -alx -alx +cUc +aaa +akx +akx +akx +any +aoz +aoz +aoz +arh +asb +aoz +asb +arh +aoz +aoz +aoz +aoz +any +aCp +aDI +any +aGC +aCn +aov +aJE +any +aep +aep +adP +afE +cLC +cLJ +aiA +afE +afH +amI +aep +afH +ajW +afH +aep +amI +amI +alc +amI +amI +amI +alc +alc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGc aaa aaa aaa @@ -150727,59 +146028,51 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bbo -bbo -bbq -bgq -dcZ -bip -ddJ -bjX -bkL -blL -blL -bnJ -blL -bqm -brQ -btf -buO -bwn -bya -bzn -dgh -bBw -bAu -dgF -bEX -bGk -bHt -bII -bKt -bLV -bII -bOl -cKZ -dhX -bIO -diz -bMb -bgs -bbo -bbo -bbo -bbo -bbo -bbo -bbo +aZN +aZN +aZP +beH +cOd +bgG +cOD +bil +biY +bjW +bjW +blQ +bjW +bon +bpN +brc +bsH +buc +bvL +bwV +cQl +bzc +byb +cQx +bCw +bDE +bEK +bFZ +bHJ +bJj +bFZ +bLt +cGn +cRo +bGf +cRD +bJo +beJ +aZN +aZN +aZN +aZN +aZN +aZN +aZN aaa aaa aaa @@ -150802,32 +146095,32 @@ aaa aaa aaa aaa -cfI -cfJ -cfJ -cfJ -cfJ -cfI -cfI -cfI -cjz -ckg -cjz -ckg -cjz -cfI -cfI -cfI -cjz -ckg -cjz -ckg -cjz -cfI -cfI -cfJ -cfJ -cfI +ccG +ccH +ccH +ccH +ccH +ccG +ccG +ccG +cgb +cgH +cgb +cgH +cgb +ccG +ccG +ccG +cgb +cgH +cgb +cgH +cgb +ccG +ccG +ccH +ccH +ccG aaa aaa aaa @@ -150835,20 +146128,20 @@ aaa aaa aaa aaa -cCy -cDr -cDq -cEN -cCy +cGc +cGc +cGc +cGc +cGc aaa aaa -cfI -cFY -cFY -cFY -cFY +ccG +cBR +cBR +cBR +cBR abC -cHA +cDr abC aaa aaa @@ -150925,56 +146218,56 @@ aaa aaa aaa aaa -dnC -akR -akR -akR -alx -anU -apa -aoU -aoY -arL -arL -aoY -arL -arL -aoY -aoU -aoU -aAM -anV -aDc -aEs -aFL -aHq -aIk -aJt -aKz -aHp -aez -aez -aez -cYj -cYu -aXh -afS -adZ -afS -aez -aez -afV -aez -and -and -alx -alx -alx -and -and -and -alx -alx +cUd +cUf +cUf +cUf +cUf +anw +aoy +aov +aoz +ari +ari +aoz +ari +ari +aoz +axm +ayP +aAj +any +aCo +aDI +any +aGD +aHu +aIB +aJF +aGD +aep +aep +afE +cLy +cLD +ajW +ajW +cLt +afE +amI +afH +alv +ajW +afE +amI +amI +amI +alc +amI +amI +amI +alc +alc aaa aaa aaa @@ -150992,51 +146285,51 @@ aaa aaa aaa aaa -bbo -bbo -bbq -bgp -bhg +aZN +aZN +aZP +beG +bfx +bka +bhx +bik +biZ +bjX +bkR blR -bji -bjW -bkM -blM -bmJ -bnK -bkM -bjW -brR -btg -buP -bwo -bya -bzo -bAv -bBx -bCC -bDZ -bEY -cKU -bHu -bIJ -bHu -bLW -bIJ -cWD -bGk -bgq -diq -bTd -dhy -bgq -bbo -bbq -bbq -bbq -bbq -bbo -bbp +biZ +bik +bpO +brd +bsI +bud +bvL +bwW +byc +bzd +bAh +bBz +bCx +cGi +bEL +bGa +bEL +bJk +bGa +cLa +bDE +beH +cRz +bQh +cQY +beH +aZN +aZP +aZP +aZP +aZP +aZN +aZO abC abC abC @@ -151059,31 +146352,31 @@ abC abC abC abC -cfK -cfJ -cfJ -cfJ -cfI -cfI -cfI -cfI -cjz -ckg -cjz -ckg -cjz -cfI -cfI -cfI -cjz -ckg -cjz -ckg -cjz -cfI -cfI -cfJ -cfJ +ccI +ccH +ccH +ccH +ccG +ccG +ccG +ccG +cgb +cgH +cgb +cgH +cgb +ccG +ccG +ccG +cgb +cgH +cgb +cgH +cgb +ccG +ccG +ccH +ccH aaa aaa aaa @@ -151092,20 +146385,20 @@ aaa aaa aaa aaa -cCz -cDs -cDq -cEO -cCz +cGc +cGc +cGc +cGc +cGc aaa aaa -cfJ -cfJ -cfK -cfJ +ccH +ccH +ccI +ccH aaa abC -cHA +cDr abC abC aaa @@ -151182,55 +146475,55 @@ aaa aaa aaa aaa -aaa -akR -akR -alx -alx -anV -apb -aoU -aoU -aoU -asG -atH -aoW -aoW -aoW -aoW -azy -aoW -aBY -aDd -aEs -aFM -aHq -aIl -aJu -aKA -aHp -adZ -aez -aez -apx -cOz -afV -adZ -afS -afV -afS -aWo -afK -afV -afS -afS -afV -alx -alx -alx -alx -alx -alx +cUe +akx +akx +akx +alc +anx +aoB +aov +aoz +arh +arh +aoz +arh +arh +aoz +aov +aov +aAe +any +aCt +aDI +aFa +aGE +aHv +aIC +aJG +aGD +aep +aep +aep +cLv +cLD +aVI +afE +adP +afE +aep +aep +alv +alv +aep +amI +alc +alc +alc +amI +amI +amI +alc aaa aaa aaa @@ -151249,52 +146542,52 @@ aaa aaa aaa aaa -bbo -bbo -bbq -bgp -bhh -bir -bgr -bjW -bjW -bjW -dfc -bnL -dfc -dfc -brS -bjY -buQ -bwp -byb -dfW -bkC -bkB -bkB -dgG -bkB -bGk -bHv -bIK -bHv -bHv -bHv -bHv -bGk -bgq -bIO -diz -bUg -bgr -bbo -bbq -bbq -bbq -bbq -bbo -bbo -bbo +aZN +aZN +aZP +beG +bfy +bgI +beI +bik +bik +bik +cPy +blS +cPy +cPy +bpP +bim +bsJ +bue +bvM +cQf +biP +biO +biO +cQy +biO +bDE +bEM +bGb +bEM +bEM +bEM +bEM +bDE +beH +bGf +cRD +bRj +beI +aZN +aZP +aZP +aZP +aZP +aZN +aZN +aZN aaa aaa aaa @@ -151318,30 +146611,30 @@ aaa aaa aaa aaa -cfJ -cfI -cfI -cfI +ccH +ccG +ccG +ccG aaa aaa -cjz -ckg -cjz -ckg -cjz -cfI -cfI -cfI -cjz -ckg -cjz -ckg -cjz +cgb +cgH +cgb +cgH +cgb +ccG +ccG +ccG +cgb +cgH +cgb +cgH +cgb aaa aaa -cfI -cfI -cfI +ccG +ccG +cGc aaa aaa aaa @@ -151349,21 +146642,21 @@ aaa aaa aaa aaa -cCy +cGc +cGc +cGc +cGc +cGc +aaa +aaa +aaa +ccG +abC +aaa +aaa +abC cDs -cDq -cEO -cCy -aaa -aaa -aaa -cfI -abC -aaa -aaa -abC -cHB -caQ +bXP abC aaa aaa @@ -151440,54 +146733,54 @@ aaa aaa aaa aaa -akR -akR -alx -alx -anV -apc -apS -apS -arN -arN -cLU -arN -arN -apS -apS -azz -apS -aBZ -aDe -aEu -aFN -aHq -aIm -aJu -aKB -aHp -adZ -afV -afV -alR -amK -alS -afV -akp -akp -akp -akq -avh -awu -alr -aOF -afS -afV -afS -afV -akR -akR -akR +akx +akx +alc +alc +any +aoC +aov +aov +aov +asc +atb +aox +aox +aox +aox +ayQ +aox +aBq +aCu +aDI +aFb +aGE +aHw +aID +aJH +aGD +adP +aep +aep +aoX +cIF +afH +adP +afE +afH +afE +aUS +afw +afH +afE +afE +afH +alc +alc +alc +alc +alc +akx aaa aaa aaa @@ -151507,51 +146800,51 @@ aaa aaa aaa aaa -bbo -bbq -bgs -bhd -bip -bgr -bgq -bgq -bgq +aZN +aZP +beJ +bfu +bgG +beI +beH +beH +beH +bim +blW bjY -bnQ -blN -bnQ -bjY -bth -buR -bwq -bjY -boU -dgi -bmz -bCD -dgH -dgR -bGk -cWy -bHv -bHv -cWy -bIK -cWy -bGk -bgq -bIO -bTb -bhb -diT -bbo -bbq -bbq -bbq -bbq -bbq -bbq -bbo +blW +bim +bre +bsK +buf +bim +bmX +cQm +bkI +bAi +cQz +cQD +bDE +cKW +bEM +bEM +cKW +bGb +cKW +bDE +beH +bGf +bQf +bfs +cRI +aZN +aZP +aZP +aZP +aZP +aZP +aZP +aZN aaa aaa aaa @@ -151577,40 +146870,40 @@ aaa aaa aaa aaa -cfI +ccG aaa aaa aaa -cjz -ckg -cjz -ckg -cjz -cfI +cgb +cgH +cgb +cgH +cgb +ccG aaa aaa -cjz -ckg -cjz -ckg -cjz +cgb +cgH +cgb +cgH +cgb aaa aaa -cfI -cfI -cfI +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa aaa -aaa -cCy -cDs -cDq -cEO -cCy +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -151620,7 +146913,7 @@ aaa aaa abC abC -cHA +cDr abC aaa aaa @@ -151697,53 +146990,53 @@ aaa aaa aaa aaa -akR +akx +akx +alc +alc +any +aoD +aps +aps +arj +arj +cGV +arj +arj +aps +aps +ayR +aps +aBr +aCv +aDK +aFc +aGE +aHx +aID +aJI +aGD +adP +afH +afH +alw +amp alx -alx -alx -anV -apd -aoU -aoU -arO -arO -aoU -arO -arO -aoU -axU -azA -aoU -aBX -aoU -aEn -aFO -aHq -aIm -aJu -aKC -aHp -aHp -aNw -afS -alS -amK -akp -aOH -akp -akp -cYl -akp -afp -afV -akq -akp -afS -akp -akp -ajo -akR -akR +afH +ajW +ajW +ajW +ajX +auB +avO +akW +aNy +afE +afH +afE +afH +akx +akx aaa aaa aaa @@ -151763,51 +147056,51 @@ aaa aaa aaa aaa -bbo -bbo -bbq -bgr -bhb -bip -bgs -bgp -bgp -bgp -bjY -dfl -blP -blP -bjY -bti -bqp -bpr -bjY -boU -bmz -bmz -bmz -dgH -dgS -bGk -cWz -bHv -bHv -bHv -bHv -bHv -bGk -bgp -bOn -bTb -diQ -bgr -bbo -bbo -bbq -bbq -bbq -bbq -bbq +aZN +aZN +aZP +beI +bfs +bgG +beJ +beG +beG +beG +bim +cPF +bjZ +bjZ +bim +brf +bop +bns +bim +bmX +bkI +bkI +bkI +cQz +cQE +bDE +cKX +bEM +bEM +bEM +bEM +bEM +bDE +beG +bLv +bQf +cRG +beI +aZN +aZN +aZP +aZP +aZP +aZP +aZP aaa aaa aaa @@ -151838,36 +147131,36 @@ aaa aaa aaa aaa -chX -ckf -chX -clx -chX +ceF +cgG +ceF +chW +ceF aaa aaa aaa -chX -clx -chX -clx -chX +ceF +chW +ceF +chW +ceF aaa aaa aaa -cfI +cGc +cGc +cGc aaa aaa aaa aaa aaa aaa -aaa -aaa -cCy -cDs -cDq -cEO -cCy +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -151877,7 +147170,7 @@ aaa aaa aaa abC -cHA +cDr abC aaa aaa @@ -151954,51 +147247,53 @@ aaa aaa aaa aaa -akR -akR +akx +alc +alc +alc +any +aoE +aov +aov +ark +ark +aov +ark +ark +aov +axn +ayS +aov +aBp +aov +aDD +aFd +aGE +aHx +aID +aJJ +aGD +aGD +aMs +afE alx -alx -anV -ape -ape -aqQ -arP -asH -atI -auN -cZe -apQ -axV -azB -aAS -aBW -aDf -aEv -aFP -aHq -aIn -aJv -aKD -cNU -cOb -cOf -aOE -cOs -cYK -afS -afV -afV -afV -aez -afS -afV -afS -akp -aXg -akp -akp -akp -ajo +amp +ajW +aNA +ajW +ajW +cLx +ajW +afb +afH +ajX +ajW +afE +ajW +ajW +aiW +akx +akx aaa aaa aaa @@ -152017,54 +147312,52 @@ aaa aaa aaa aaa -aaa -aaa -bbo -bbo -bbo -bbo -bgr -bQS -ddo -bgs -bgs -bgp -bgp -bjY -dfm -dfz -dfE -bjY -btj -bqp -bpr -bjY -boU -dgi -dgo -dgi -dgJ -dgi -bGk -bGk -bHv -cWB -bHv -bHv -bGk -bGk -bjg -bPS -diz -bhd -bgr -bgq -bbo -bbo -bbo -bbo -bbq -bbq +aZN +aZN +aZN +aZN +beI +bNX +cOp +beJ +beJ +beG +beG +bim +cPG +cPR +cPV +bim +brg +bop +bns +bim +bmX +cQm +cQp +cQm +cQA +cQm +bDE +bDE +bEM +cKZ +bEM +bEM +bDE +bDE +bhv +bMZ +cRD +bfu +beI +beH +aZN +aZN +aZN +aZN +aZP +aZP aaa aaa aaa @@ -152083,48 +147376,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chm -chm -ckh -chm -cly -chm -chn -chn -chn -chm -cpu -chm -cpu -chm -chm -chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCA -cDs -cDq -cEO -cCA +cGc +cGc +cGc +cGc +cGc +cGc +cGc +ced +ced +ced +ced +ced +ced +cgI +ced +chX +ced +cGc +cGc +cGc +ced +clM +ced +clM +ced +cGc +cGc +ced +ced +cee +cee +cee +cee +cee +ced +ced +ced +ced +cGc +cGc +cGc +cGc aaa aaa aaa @@ -152134,7 +147427,7 @@ aaa aaa aaa abC -cHA +cDr abC aaa aaa @@ -152211,51 +147504,51 @@ aaa aaa aaa aaa -aaa -akR -akR -ank -ank -apf -apf -aqR -ank -ank -ank -ank -ank -ank -ank -azC -ank -ank -anV -anV -anV -aHp -aHp -aHp -aHp -aHp -aHp -cYn -aCr -apu -dbk -afS -alx -and -and -and -alx -alx -afS -akp -aXh -afV -aXQ -akp -ajo +akx +akx +alc +alc +any +aoF +aoF +aqq +arl +asd +atc +auh +cLR +apq +axo +ayT +aAk +aBo +aCw +aDL +aFe +aGE +aHy +aIE +aJK +cId +cIj +cIn +aNx +cIz +cLJ +afE +afH +afH +afH +aep +afE +afH +afE +ajW +aVH +ajW +ajW +ajW +aiW aaa aaa aaa @@ -152277,51 +147570,51 @@ aaa aaa aaa aaa -bbo -bbo -bbo -bgs -bhb -bis -bjj -bgr -bgp -bgp -bjY -dfn -blP -dfF -bjY -btk -buS -bwr -bjY -dfX -bmz -bmz -bmz -bmz -bmz -bkB -bGk -bGk -bGk -bGk -bGk -bGk -dhJ -bhd -bOn -bTb -bhd -bhd -bgs -bgs -bgr -bgs -bbq -bbo -bbo +aZN +aZN +aZN +beJ +bfs +bgJ +bhy +beI +beG +beG +bim +cPH +bjZ +cPW +bim +brh +bsL +bug +bim +cQg +bkI +bkI +bkI +bkI +bkI +biO +bDE +bDE +bDE +bDE +bDE +bDE +cRg +bfu +bLv +bQf +bfu +bfu +beJ +beJ +beI +beJ +aZP +aZN +aZN aaa aaa aaa @@ -152340,48 +147633,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chm -chm -chm -ciZ -cjA -cjB -chm -chJ -ckk -ckk -ckk -ckk -coP -chJ -chm -cra -cra -csY -chm -chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCy -cDt -cDq -cEP -cCy +cGc +cGc +cGc +cGc +cGc +ced +ced +ced +ced +cfE +dbf +dbf +cgc +cgd +ced +dbb +chk +cee +cee +cee +chk +dbb +dbN +dbb +chk +ced +ced +chk +dca +dca +dcm +dcm +dca +dca +ced +dcG +dcM +chk +ced +ced +cGc +cGc aaa aaa aaa @@ -152391,12 +147684,12 @@ aaa aaa aaa abC -cHA +cDr abC abC -cHf -cIX -cHf +cCW +cEO +cCW aaa aaa aaa @@ -152469,50 +147762,50 @@ aaa aaa aaa aaa -aaa -aaa -ank -anW -apg -apT -aqS -aph -ank -atJ -atJ -avV -axd -axW -azD -aAT -ank -adZ -afS -afV -adZ -adZ -aJw -aCr -day -aCr -aNx -aus -afq -afV -aez -alx -and -and -and -and -alx -afS -aRj -aXi -afS -ala -ajr -ajo +akx +akx +amP +amP +aoG +aoG +aqr +amP +amP +amP +amP +amP +amP +amP +ayU +amP +amP +any +any +any +aGD +aGD +aGD +aGD +aGD +aGD +cLz +aBJ +aoU +cMW +afE +alc +amI +amI +amI +alc +alc +afE +ajW +aVI +afH +aWr +ajW +aiW aaa aaa aaa @@ -152534,50 +147827,50 @@ aaa aaa aaa aaa -baW -bbo -bbq -bgp -bhd -bhb -ddK -bgr -bgp -bgp -bjY -dfo -bnN -dfG -bjY -bjY -buQ -bws -bjY -dfY -bmz -bmz -bmz -bmz -dgi -bkB -bhg -bhd -bKu -bhc -dem -bhd -bPQ -bQT -bRY -bTk -bhd -bhf -bhg -bhd -bXk -bgr -bbq -bbo +aZv +aZN +aZP +beG +bfu +bfs +cOE +beI +beG +beG +bim +cPI +blU +cPX +bim +bim +bsJ +buh +bim +cQh +bkI +bkI +bkI +bkI +cQm +biO +bfx +bfu +bHK +bft +cOW +bfu +bMX +bNY +bPd +bQo +bfu +bfw +bfx +bfu +bUl +beI +aZP +aZN aaa aaa aaa @@ -152597,48 +147890,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chx -chH -chZ -chm -cja -cjB -cki -chm -clz -chJ -chJ -chJ -chJ -chJ -cpv -chm -cra -cra -csY -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCy -cDs -cDq -cEO -cCy +cGc +cGc +ced +ced +ced +ced +ced +ced +ced +ceH +cgd +cgd +cgd +cgd +ced +dbb +dbG +dbb +dbb +dbb +dbG +dbb +dbb +dbb +dbG +cpg +cpg +dbS +daY +daY +daY +daY +daY +daY +cee +dcH +dcN +dcU +chk +ced +ced +ced aaa aaa aaa @@ -152647,13 +147940,13 @@ abC aaa aaa aaa -cHf -cHO -cHf -cHf -cHC -cIY -cHf +cCW +cDF +cCW +cCW +cDt +cEP +cCW aaa aaa aaa @@ -152728,112 +148021,112 @@ aaa aaa aaa aaa -ank -anX -aph -apU -aqT -arQ -asI -atK -auO -auO -auO -avW -azE -avW -ank -cZB -cYl -aoR -ahr -aqj -apu -akq -alS -akp -aNy -afS -adZ -aez -and -alx -and -and -and -and -alx -afV -afV -afV -afV -afV -afV -afV -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -bbp -bbo -bbq -bgp -bgq -bhb -ddo -bgr -bgs -bgr -bjY -bpr -dfl -dfH -brT -bnM -buT -bwt -bjY -dfZ -dgk -dgp -dgt -dgt -dgt -dha -bHw -bjZ -bjZ -bjZ -bjZ -bOm -bPR -dhY -bQU -bTl -bjZ -bkR -bhd -bhd -bgr -bgr -bgs +amP +anz +aoH +apt +aqs +aoI +amP +atd +atd +avp +aww +axp +ayV +aAl +amP +adP +afE +afH +adP +adP +aIF +aBJ +cMH +aBJ +aMt +atM +afc +afH +aep +alc +amI +amI +amI +amI +alc +afE +aPQ +aVJ +afE +akG +aiZ +aiW +aaa +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aZN +aZN +aZP +beG +beH +bfs +cOp +beI +beJ +beI +bim +bns +cPF +cPY +bpQ +blT +bsM +bui +bim +cQi +cQn +cQq +cQr +cQr +cQr +cQG +bEN +bin +bin +bin +bin +bLu +bMY +cRp +bNZ +bQp +bin +bjd +bfu +bfu +beI +beI +beJ abC abC abC @@ -152854,48 +148147,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn -chy -chI -cia -chm -cja -cjB -cki -chm -chJ -clZ -clZ -clZ -clZ -clZ -chJ -cqm -cra -cra -csZ -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cCy -cCz -cEe -cCz -cCy +cGc +ced +ced +ced +ced +ced +ced +ced +ced +cfE +dbg +dbk +cgd +dbk +ced +daZ +dbb +dbb +daZ +daZ +daZ +daZ +daZ +daZ +daZ +dbb +dbb +daZ +daZ +daZ +daZ +daZ +daZ +dbb +cee +dcH +dbb +dcN +dcW +ced +cqa +cqT aaa aaa aaa @@ -152904,13 +148197,13 @@ abC aaa aaa aaa -cHf -cHP -cHC -cIw -cIH -cIZ -cHf +cCW +cDG +cDt +cEn +cEy +cEQ +cCW aaa aaa aaa @@ -152983,118 +148276,118 @@ aaa aaa aaa aaa -akR -akR -ank -anY -api -apV -apV -apV -asJ -atL -atL -avX -atL -atL -azF -aAU -ank -aDg -auE +aaa +aaa +amP +anA +aoI apu -aqH -afq -afq -aKE -adZ -adZ -afV -adZ +aqt +arm +ase +ate +aui +aui +aui +avq +ayW +avq +amP +cMa +cLx +aos +ahd +apJ +aoU +ajX alx -alx -alx -alx -and -and -and -and -alx -alx -akR -akR -alx -alx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -baW -bbo -bbq -bbq -bgq -ddq -ddo -bgs -bkO -bkO -bjY -bpr -bpr -bqp -brU -btl -bqp -bpr -bjY -bjY -bjY -bjY -bkB -bkB -bkB -bkB -blR -dcZ -bgr -bgs -bhd -bOn -bOn -bhd -blS -bhd -bgq -bVf -bjZ -bjZ -bXl -bYc -bYO +ajW +aMu +afE +adP +aep +amI +alc +amI +amI +amI +amI +alc +afH +afH +afH +afH +afH +afH +afH +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZO +aZN +aZP +aZP +beH +cOq +cOp +beJ +bja +bja +bim +bns +bns +bop +bpR +bri +bop +bns +bim +bim +bim +bim +biO +biO +biO +biO +bka +cOd +beI +beJ +bfu +bLv +bLv +bfu +bkb +bfu +beH +bSi +bin +bin +bUm +bVd +bVP acI acI acI -caQ +bXP abC aaa aaa @@ -153111,48 +148404,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn -chz -chJ -cib -chm -chn -cjC -chn -ckK -chJ -cma -cma -cma -cma -cma -chJ -chm -crb -cso -csZ -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +ced +ced +ced +chk +dae +dat +daD +dae +ced +ced +ced +cee +cge +cee +ced +dbw +cix +dbI +dbL +dbL +dbL +dbL +dbL +dbL +dbL +cix +dbI +dbL +dbL +dbL +dbL +dbL +dbL +dbP +ced +dcI +dbb +dbb +dcX +ced +cqa +cqT aaa aaa aaa @@ -153161,13 +148454,13 @@ abC aaa aaa aaa -cHf -cHO -cHC -cIx -cII -cJa -cHf +cCW +cDF +cDt +cEo +cEz +cER +cCW aaa aaa aaa @@ -153240,48 +148533,48 @@ aaa aaa aaa aaa -akR -alx -ank -anZ -apj -apW -aqU -arR -ank -atM -auP -avW -avW -axX -azG -aAV -ank -afK -aUW -aoy -apx -anN -afV -afS -adZ -alx -alx -alx -alx -and -and -and -and -and -and -and -alx -akR -akR -akR -akR -akR +akx +akx +amP +anB +aoJ +apv +apv +apv +asf +atf +atf +avr +atf +atf +ayX +aAm +amP +aCx +atY +aoU +aqh +afc +afc +aJL +adP +adP +afH +adP +alc +alc +alc +alc +amI +amI +amI +amI +alc +alc +akx +akx +alc +alc aaa aaa aaa @@ -153305,54 +148598,54 @@ aaa aaa aaa aaa -baW -baW -bbq -bbo -bgq -btq -ddo -bgr -bkP -bkP -bjY -dfp -bpm -bqp -bkQ -bkQ -buU -bpr -bnM -blP -bzr -bjY -bgp -bgp -bgp -bjg -bip -bgs -bgr -bgr -bgs -dhz -bOn -bgq -bgs -bgq -bgq -bgr -bhd -diZ -bgr -bgs -bgs +aZv +aZv +aZP +aZN +beH +brn +cOp +beI +bjb +bjb +bim +cPJ +bnn +bop +bjc +bjc +bsN +bns +blT +bjZ +bwZ +bim +beG +beG +beG +bhv +bgG +beJ +beI +beI +beJ +cQZ +bLv +beH +beJ +beH +beH +beI +bfu +cRN +beI +beJ +beJ abC abC -bZT -caR -bZT +bWT +bXQ +bWT aaa aaa abC @@ -153368,48 +148661,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn -chA -chJ -cic -chm -cjb -chJ -ckj -ckL -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chm -chm -chm -chm -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +ced +cZT +daf +daf +daE +cen +ced +ceI +dbh +cfF +cfF +cgJ +ced +dbx +cix +dbI +dbM +dbM +dbM +dbM +dbM +dbM +dbM +cix +dbI +dbM +dbM +dbM +dbM +dbM +dbM +cix +cee +dcH +dbb +dbb +dcY +ced +cqa +cqT aaa aaa aaa @@ -153417,14 +148710,14 @@ aaa abC aaa aaa -cHf -cHC -cHQ -cIe -cHS -cIg -cIz -cHf +cCW +cDt +cDH +cDV +cDJ +cDX +cEq +cCW aaa aaa aaa @@ -153496,49 +148789,49 @@ aaa aaa aaa aaa -akR -akR -alx -ank -ank -ank -ank -ank -ank -ank -ank -auQ -avY -auQ -ank -ank -ank -ank -afV -afS -afS -adZ -adZ -adZ -adZ -adZ -alx -alx -alx -alx -and -and -and -and -and -and -and -alx -alx -akR -akR -akR -akR +aaa +akx +alc +amP +anC +aoK +apw +aqu +arn +amP +atg +auj +avq +avq +axq +ayY +aAn +amP +afw +aTA +anZ +aoX +ans +afH +afE +adP +alc +alc +alc +alc +amI +amI +amI +amI +amI +amI +amI +alc +akx +akx +akx +akx +akx aaa aaa aaa @@ -153562,54 +148855,54 @@ aaa aaa aaa aaa -baW -baW -bbq -bbo -bgs -btq -ddO -del -dex -bvb -bjY -dfq -bpn -bqq -brV -btm -buV -bwu -bnO -bzp -blP -bjY -bgp -bgs -bgr -bhd -bir -bgq -bgq -bgq -bgs -bOo -bPS -bgp -bbq -bbq -bgq -bgq -bgs -bgs -bgr -bgq +aZv +aZv +aZP +aZN +beJ +brn +cOF +cOV +cPa +bsT +bim +cPK +bno +boq +bpS +brj +bsO +buj +blV +bwX +bjZ +bim +beG +beJ +beI +bfu +bgI +beH +beH +beH +beJ +bLw +bMZ +beG +aZP +aZP +beH +beH +beJ +beJ +beI +beH aaa aaa aaa -bZT -caS -bZT +bWT +bXR +bWT aaa aaa abC @@ -153625,48 +148918,48 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn -chz -chJ -chJ -ciB -chJ -chJ -ckk -ckl -chJ -clZ -clZ -clZ -clZ -clZ -chJ -chn -cjd -csp -cjd -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cee +cZU +dag +daf +daF +daO +ced +cet +cfg +cfF +dbn +cgK +cee +dby +cix +dbI +dbI +dbI +dbI +dbI +dbI +dbI +dbI +cix +dbI +dbI +dbI +dbI +dbI +dbI +dbI +cix +dcC +dcH +dbb +dbb +dcZ +ced +cqa +cqT aaa aaa aaa @@ -153674,14 +148967,14 @@ aaa abC aaa aaa -cHf -cHD -cHR -cIf -cIy -cIh -cIA -cHf +cCW +cDu +cDI +cDW +cEp +cDY +cEr +cCW aaa aaa aad @@ -153753,49 +149046,49 @@ aaa aaa aaa aaa -akR -alx -alx -alx -alx -alx -alx -alx -akR -akR -atN -auR -avW -avW -atN -akR -akR -alx -alx -and -and -and -alx -alx -alx -alx -and -and -and -and -and -and -and -and -alx -alx -alx -alx -alx -alx -alx -akR -akR +akx +akx +alc +amP +amP +amP +amP +amP +amP +amP +amP +auk +avs +auk +amP +amP +amP +amP +afH +afE +afE +adP +adP +adP +adP +adP +alc +alc +alc +alc +amI +amI +amI +amI +amI +amI +amI +alc +alc +akx +akx +akx +akx aaa aaa aaa @@ -153820,98 +149113,56 @@ aaa aaa aaa aaa -baW -bbq -bbo -bgr -ddr -ddo -bgs -bkP -bkP -bjY -blP -bpr -bqr -brW -bmK -buW -bmK -byc -bzq -bAx -bjY -bgq -bgs -bhe -bhd -bip -bgs -bgq -bgq -bgs -dhz -dhz -bgp -bbq -bbq -bbo -bbo -bbo -bbo -bbo -bbo +aZv +aZP +aZN +beI +cOr +cOp +beJ +bjb +bjb +bim +bjZ +bns +bor +bpT +bkS +bsP +bkS +bvN +bwY +bye +bim +beH +beJ +bfv +bfu +bgG +beJ +beH +beH +beJ +cQZ +cQZ +beG +aZP +aZP +aZN +aZN +aZN +aZN +aZN +aZN aaa aaa aaa -bZT -caR -cam -bZT -bZT -bZT -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chn -chB -chK -cid -chm -cjc -chJ -ckl -ckl -chJ -cma -cma -cma -cma -cma -chJ -cqn -cjc -cjc -cjc -ctV -cuO -aaa -aaa +bWT +bXQ +bXl +bWT +bWT +bWT aaa aaa aaa @@ -153924,21 +149175,63 @@ aaa aaa aaa aaa +cGc +cGc +cee +cZV +dah +dau +daw +daw +ced +ceJ +cfg +cfG +dbn +cgL +cee +dbz +cix +dbI +dbL +dbL +dbL +dbL +dbL +dbL +dbL +cix +dbI +dbL +dbL +dbL +dbL +dbL +dbL +cix +cee +dcJ +dcO +dbb +dda +ced +cqa +cqT aaa aaa aaa aaa aaP abC -cHf -cHf -cHE -cHS -cIg -cIz -cHC -cHf -cHf +cCW +cCW +cDv +cDJ +cDX +cEq +cDt +cCW +cCW aaa aaa aaa @@ -154010,49 +149303,52 @@ aaa aaa aaa aaa +akx +alc +alc +alc +alc +alc +alc +alc +akx +akx +ath +aul +avq +avq +ath +akx +akx +alc +alc +amI +amI +amI +alc +alc +alc +alc +amI +amI +amI +amI +amI +amI +amI +amI +alc +alc +alc +alc +alc +alc +alc +akx +akx aaa -alF -akR -alF -alx -alx -alx -alx aaa -akR -atN -auS -avW -axe -atN aaa -akR -akR -alx -and -and -and -and -and -and -and -and -and -and -and -and -and -and -and -alx -alx -alx -alx -alx -alx -alx -alx -alx aaa aaa aaa @@ -154074,126 +149370,123 @@ aaa aaa aaa aaa +aZv +aZP +aZN +beH +brn +cOp +beJ +cPb +cPb +bim +bjZ +bns +bop +bjZ +brk +bsQ +bjZ +blT +bwZ +bjZ +bim +beH +beH +bfu +bBA +bBB +beI +beH +beH +beH +bLx +bLx +beG +aZP +aZP +aZN +aZN +aZN +aZN +aZN +aZN +aaa +aaa +aaa +bWT +bXS +bYs +bYV +bZp +bZH +aaa +aaa +aaa +aaa +aaa aaa aaa aaa -baW -bbq -bbo -bgq -btq -ddo -bgs -dey -dey -bjY -blP -bpr -bqp -blP -btn -buX -blP -bnM -bzr -blP -bjY -bgq -bgq -bhd -bEa -bEb -bgr -bgq -bgq -bgq -bOp -bOp -bgp -bbq -bbq -bbo -bbo -bbo -bbo -bbo -bbo aaa aaa aaa -bZT -caT -cbt -cbW -ccq -ccI aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chx -chL -cie -chm -cjd -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chJ -chn -cjc -cjc -cjc -ctV -cuO -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cHg -cHo -cHF -cHT -cIh -cIA -cHf +cGc +cGc +cee +cZW +dai +dav +daw +daw +ced +ceK +cfg +dbi +dbn +cgK +cee +dbA +cix +dbI +dbM +dbM +dbM +dbM +dbM +dbM +dbM +cix +dbI +dbM +dbM +dbM +dbM +dbM +dbM +dcB +chk +chk +dcP +dbb +dda +ced +cqa +cqT +aaa +aaa +aaa +aaa +aaa +aaa +cCX +cDf +cDw +cDK +cDY +cEr +cCW aaa aaa aaa @@ -154268,47 +149561,55 @@ aaa aaa aaa aaa -abC +alk +akx +alk +alc +alc +alc +alc aaa -abC +akx +ath +aum +avq +awx +ath aaa +akx +akx +alc +amI +amI +amI +amI +amI +amI +amI +amI +amI +amI +amI +amI +amI +amI +amI +alc +alc +alc +alc +alc +alc +alc +alc +alc aaa aaa aaa aaa aaa -atN -atN -avZ -atN -atN aaa aaa -akR -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx aaa aaa aaa @@ -154326,6 +149627,43 @@ aaa aaa aaa aaa +aZv +aZN +aZP +beG +cOq +cOp +beJ +beI +beI +bim +cPL +bnp +bos +bpU +brl +bsR +buk +blT +bjZ +bwZ +bim +beH +beH +bft +bgG +beJ +beJ +beI +beI +beI +bGf +bGf +beI +beJ +aZN +aZN +aZN aaa aaa aaa @@ -154333,44 +149671,13 @@ aaa aaa aaa aaa +bWT +bXT +bYt +bYW +bWT +bWT aaa -baW -bbo -bbq -bgp -ddq -ddo -bgs -bgr -bgr -bjY -dfr -bpo -bqt -brX -bto -buY -bwv -bnM -blP -bzr -bjY -bgq -bgq -bhc -bip -bgs -bgs -bgr -bgr -bgr -bOq -bOq -bgr -bgs -bbo -bbo -bbo aaa aaa aaa @@ -154378,79 +149685,65 @@ aaa aaa aaa aaa -bZT -caU -cbu -cbX -bZT -bZT aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chm -chm -chm -cje -cjD -cjc -cjc -clA -cmb -cmb -cmb -cmb -coQ -clA -chn -crc -csq -crc -chm -chm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cHf -cHf -cHf -cHf -cHf -cHf -cHf +cGc +cGc +cee +cZX +daj +daw +daw +daw +ced +daX +dbi +dbi +dbi +dbr +ced +chY +cix +dbb +daY +daY +daY +daY +daY +daY +daY +dbb +dbb +daY +daY +daY +daY +daY +daY +dbb +cpg +ced +dcQ +dbb +ddb +ced +chk +chk +aaa +aaa +aaa +aaa +aaa +aaa +cCW +cCW +cCW +cCW +cCW +cCW +cCW aaa aaa aaa @@ -154533,39 +149826,42 @@ aaa aaa aaa aaa -asK -asK -asL -awa -asL -asK -asK aaa +ath +ath +avt +ath +ath aaa aaa +akx +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc aaa aaa aaa -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx aaa aaa aaa @@ -154588,43 +149884,43 @@ aaa aaa aaa aaa +aZv +aZN +aZP +beJ +bfs +cOp +beI +beJ +beH +bim +bim +bnq +bot +bjc +bim +bim +bim +bim +bim +bim +bim +beH +beJ +bfu +bgG +beJ +bGc +cQO +bJl +bKo +bLz +bNa +bOa +beJ aaa aaa aaa -baW -bbo -bbq -bgs -bhb -ddo -bgr -bgs -bgq -bjY -bjY -bpp -bqu -bkQ -bjY -bjY -bjY -bjY -bjY -bjY -bjY -bgq -bgs -bhd -bip -bgs -bIL -dhk -bLY -bNd -bOr -bPT -bQV -bgs aaa aaa aaa @@ -154632,56 +149928,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -bZT -caV -caW -cbY -bZT -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -chm -chn -chm -chn -chm -chm -chm -chn -chn -chn -chm -chm -chm -chn -chm -chn -chm -aaa -aaa +bWT +bXU +bXV +bYX +bWT aaa aaa aaa @@ -154695,6 +149946,48 @@ aaa aaa aaa aaa +cGc +cGc +cee +cZY +daj +daw +daw +daP +ced +ced +cee +dbl +dbl +cee +chk +daY +dbb +dbb +daZ +daZ +daZ +daZ +daZ +daZ +daZ +dbO +dbb +dbT +dbb +dbb +dbb +dbb +dbb +dbT +dbb +ced +dcR +dcV +ddc +ced +chk +chk aaa aaa aaa @@ -154790,147 +150083,99 @@ aaa aaa aaa aaa -asK -atO -auT -auT -auU -axY -asK +asg +asg +ash +avu +ash +asg +asg aaa aaa aaa aaa aaa aaa +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc aaa aaa aaa aaa -alx -alx -alx -alx -alx -and -alx -alx -alx -and -alx -alF -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -abC -bbp -bbo -bbq -bgs -bhb -bis -bjZ -bkR -bgq -bjY -bnQ -bpq -bqv -bqn -bjY -cWu -bjY +aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aZN +aZN +aZP +beJ +bfs +bgJ +bin +bjd +beH +bim +blW +bnr +bou +boo +bim +cKS +bim +bvO +bfu byd -bhd -bAw -bgr -bgp -bgr -bhg -bip -bgr -bIM -bKv -bLZ -bNe -bOs -bPU -bQW -bgs -bgs -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bZT -cam -caW -cbv -cam -bZT -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +beI +beG +beI +bfx +bgG +beI +bGd +bHL +bJm +bKp +bLA +bNb +bOb +beJ +beJ aaa aaa aaa @@ -154939,6 +150184,12 @@ aaa aaa aaa aaa +bWT +bXl +bXV +bYu +bXl +bWT aaa aaa aaa @@ -154952,6 +150203,48 @@ aaa aaa aaa aaa +cGc +cGc +cee +cZZ +dak +dax +daw +daw +daT +daY +daY +daY +daY +daY +daY +dbB +dbb +dbI +dbL +dbL +dbL +dbL +dbL +dbL +dbL +cix +chk +ced +dbR +ced +ced +ced +ced +ced +dcD +ced +ced +ced +ddd +chk +cqa +cqT aaa aaa aaa @@ -155047,168 +150340,168 @@ aaa aaa aaa aaa -asL -atP -auU -auT -auU -axZ -azH -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -alx -alx -alx -alx -alx -alx -alx -alx -alx -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bbo -bbq -bgp -bit -bhd -bhd -bkS -bkR -bjY -blP -bpr -bqw -blP -cWt -cWv -bjY -bip -buZ -bgs -bgp -bgp -bgr -bhd -bip -bgr -bIN -bKw -bMa -bNf -bOt -bPV -bQX -bRZ -bTm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bZU -can -caX -bZT -bZT -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +asg +ati +aun +aun +auo +axr +asg +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa +alc +alc +alc +alc +alc +amI +alc +alc +alc +amI +alc +alk +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +abC +aZO +aZP +beG +bgK +bfu +bfu +bje +bjd +bim +bjZ +bns +bov +bjZ +cKR +cKT +bim +bgG +bsS +beJ +beG +beG +beI +bfu +bgG +beI +bGe +bHM +bJn +bKq +bLB +bNc +bOc +bPe +bQq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +bWU +bXm +bXW +bWT +bWT +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cGc +cGc +cee +daa +dal +day +daw +daw +daT +daZ +daZ +daZ +daZ +daZ +daZ +daZ +dbH +dbI +dbM +dbM +dbM +dbM +dbM +dbM +dbM +dbP +ced +dbU +dcb +dci +dcn +dcr +dcu +ced +dcE +dcK +dcK +ced +dde +ddi +cqa +cqT aaa aaa aaa @@ -155304,13 +150597,13 @@ aaa aaa aaa aaa -asK -atQ -auT -auT -auU -aya -asK +ash +atj +auo +aun +auo +axs +ayZ aaa aaa aaa @@ -155324,11 +150617,15 @@ aaa aaa aaa aaa -aaa -alx -alx -alx -alx +alc +alc +alc +alc +alc +alc +alc +alc +alc aaa aaa aaa @@ -155338,10 +150635,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aac aab aaa aaa @@ -155364,39 +150657,39 @@ aaa aaa aaa aaa -bbo -bgq -bgr -ddT -bhd -bhd -blR -bjY -blP -bps -bqx -blP -bjY -bjY -bjY -bir -bhc -bgp -bgp -bgs -bgr -bhd -bip -bgr -dhg -bKx -bMb -bgr -bOu -bOu -bOu -bgs -bgs +aZN +beH +beI +cOG +bfu +bfu +bka +bim +bjZ +bnt +bow +bjZ +bim +bim +bim +bgI +bft +beG +beG +beJ +beI +bfu +bgG +beI +cQL +bHN +bJo +beI +bLC +bLC +bLC +beJ +beJ abC abC abC @@ -155405,52 +150698,10 @@ abC abC abC abC -bZT -bZT -bZT -bZT -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bWT +bWT +bWT +bWT aaa aaa aaa @@ -155466,6 +150717,48 @@ aaa aaa aaa aaa +cGc +cGc +cee +dab +dam +dan +daG +daO +ced +ced +ced +ced +ced +dbs +dbs +ced +chk +dbI +dbI +dbI +dbI +dbI +dbI +dbI +dbI +cix +dbR +dbV +dcc +dcj +dco +dco +dcv +ced +dcE +dcE +dcS +ced +dde +ddj +cqa +cqT aaa aaa aaa @@ -155561,13 +150854,13 @@ aaa aaa aaa aaa -asK -asK -asL -awb -asL -asK -asK +asg +atk +aun +aun +auo +axt +asg aaa aaa aaa @@ -155577,9 +150870,15 @@ aaa aaa aaa aad -aab -aab -aab +aaa +aaa +aaa +aaa +aaa +alc +alc +alc +alc aaa aaa aaa @@ -155592,13 +150891,7 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aab -aaa -aaa +aac aaa aac aad @@ -155621,34 +150914,34 @@ aaa aaa aaa aaa -bbo -bbo -bgq -bgq -bhg -bhd -bip -bjY -bnR -bpt -bqy -brY -bjY -bgq -bjg -bye -dem -bgs -bgr -bgs -bEa -bjZ -bGl -bgs -bIP -bKy -bMc -bgs +aZN +aZN +beH +beH +bfx +bfu +bgG +bim +blX +bnu +box +bpV +bim +beH +bhv +bvP +cOW +beJ +beI +beJ +bBA +bin +bDF +beJ +bGg +bHO +bJp +beJ aaa aaa aaa @@ -155681,50 +150974,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa +cGc +cGc +ced +dac +dan +dan +daH +daQ +ced +dba +dbj +dbm +dbo +dbt +dbt +dbC +ced +dbI +dbL +dbL +dbL +dbL +dbL +dbL +dbL +cix +cee +dbW +dcd +dcj +dcp +dcs +dcw +ced +dcE +dcE +dcS +ced +ddf +ddk +cqa +cqT +cGc +cGc aaa aaa aaa @@ -155818,13 +151111,13 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +asg +asg +ash +avv +ash +asg +asg aaa aaa aaa @@ -155853,7 +151146,7 @@ aaa aaa aaa aaa -aaa +aab aaa aaa aab @@ -155878,78 +151171,34 @@ aaa aaa aaa aaa -bbo -bbq -bbq -bgs -dem -bhd -bip -bjY -bjY -bjY -bqz -bjY -bjY -bgq -bhd -bip -bhd -bhd -bhc -bhd -bip -bhd -bgr -bgs -bIQ -bgs -bgs -bgs -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aZN +aZP +aZP +beJ +cOW +bfu +bgG +bim +bim +bim +boy +bim +bim +beH +bfu +bgG +bfu +bfu +bft +bfu +bgG +bfu +beI +beJ +bGh +beJ +beJ +beJ aaa aaa aaa @@ -155982,6 +151231,50 @@ aaa aaa aaa aaa +ced +ced +ced +chk +dao +daz +daI +daR +ced +dbb +dbb +dbb +dbp +dbb +dbb +dbD +ced +dbI +dbM +dbM +dbM +dbM +dbM +dbM +dbM +cix +ced +dbX +dce +dck +dcb +dcb +dcx +ced +dcE +dcE +dcS +ced +ddg +ddg +cqa +cqT +cGc +cGc aaa aaa aaa @@ -156050,7 +151343,7 @@ aab aac aac aac -cYd +cLq aac aac aac @@ -156136,75 +151429,31 @@ aaa aaa aaa aaa -bbq -bbq -bgp -bgq -bhd -bVf -bjZ -bjZ -bjZ -bqA -dnJ -bjZ -dnK -bjZ -byf -bjZ -bjZ -bjZ -bjZ -bEb -dfA -bgs -bgs -bIR -bgs -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aZP +aZP +beG +beH +bfu +bSi +bin +bin +bin +boz +cUi +bin +cUj +bin +bvQ +bin +bin +bin +bin +bBB +cPS +beJ +beJ +bGi +beJ aaa aaa aaa @@ -156239,6 +151488,50 @@ aaa aaa aaa aaa +cGc +ced +ced +ced +ced +ced +ced +ced +ced +dba +dbj +dbm +dbp +dbu +dbu +dbE +ced +dbJ +daY +daY +daY +daY +daY +daY +daY +dbb +cee +dbY +dcf +dcc +dcc +dcc +dcy +ced +dcE +dcL +dcE +ced +ddh +ddh +cqa +cqT +cGc +cGc aaa aaa aaa @@ -156394,27 +151687,27 @@ aaa aaa aaa aaa -bbq -bbq -bgr -bgs -deO -bhd -bhd -dfA -dfI -bgs -btp -bgs -bgs -bhd -bhd -blS -bhc -bhd -bhd -bgs -bgs +aZP +aZP +beI +beJ +cPn +bfu +bfu +cPS +cPZ +beJ +brm +beJ +beJ +bfu +bfu +bkb +bft +bfu +bfu +beJ +beJ aaa aaa abC @@ -156452,50 +151745,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +ced +ced +ced +ced +ced +ced +ced +dbb +dbb +dbb +dbp +dbb +dbb +dbD +ced +dbK +dbb +dbb +dbb +dbb +dbb +dbb +dbb +dbQ +ced +dbZ +dcg +dcc +dcc +dcc +dcz +ced +dcD +ced +dcD +ced +ced +ced +ced +ced +cGc +cGc aaa aaa aaa @@ -156651,27 +151944,27 @@ aaa aaa aaa aaa -bbq -bbq -bbq -bgq -bgr -bgq -bgq -bpu -bqD -brZ -btq -bvb -bgr -bgq -bgq -bgs -bgq -bgr -bgs -bgs -bbo +aZP +aZP +aZP +beH +beI +beH +beH +bnv +boA +bpW +brn +bsT +beI +beH +beH +beJ +beH +beI +beJ +beJ +aZN aaa aaa abC @@ -156709,50 +152002,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aad -aaa +cGc +cGc +cGc +cGc +cGc +ced +ced +ced +ced +dba +dbj +dbm +dbq +dbv +dbv +dbF +ced +ced +cee +cee +cee +cee +cee +cee +cee +ced +ced +chk +dch +dcl +dcq +dct +dcA +ced +dcF +ced +dcT +ced +ced +ced +cGc +cGc +cGc +cGc aaa aaa aaa @@ -156910,25 +152203,25 @@ aaa aaa aaa aaa -bbo -bbo -bbq -bbq -bgp -dfB -bgr -bgs -btr -bgs -bgr -bgp -bbq -bbo -bbq -bbq -bbq -bbq -bbo +aZN +aZN +aZP +aZP +beG +cPT +beI +beJ +bro +beJ +beI +beG +aZP +aZN +aZP +aZP +aZP +aZP +aZN aaa aaa abC @@ -156966,50 +152259,50 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +ced +ced +ced +ced +ced +ced +ced +ced +ced +ced +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +ced +ced +cee +cee +cee +ced +ced +ced +ced +ced +ced +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -157168,23 +152461,23 @@ aaa aaa aaa aaa -bbo -bbq -bbq -bbq -bpv -bgs -bsa -bts -bsa -bww -bbq -bbq -bbo -bbo -bbo -bbp -bbo +aZN +aZP +aZP +aZP +bnw +beJ +bpX +brp +bpX +bul +aZP +aZP +aZN +aZN +aZN +aZO +aZN aaa aaa aaa @@ -157229,44 +152522,44 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aab -aab -aab -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -157350,7 +152643,7 @@ aaa aaa aaa aaP -akk +ajR aaP abC aaa @@ -157426,25 +152719,25 @@ aaa aaa aaa aaa -bbo -bbo -bbo -bpw -bgs -bsb -btt -bsb -bgs -bbq -bbo -bbo -bbo -bbo +aZN +aZN +aZN +bnx +beJ +bpY +brq +bpY +beJ +aZP +aZN +aZN +aZN +aZN abC aaa aaa aaP -bIS +bGj aaP aaa aaa @@ -157486,44 +152779,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aac -aac -aad -aad -aad -aad -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -157685,14 +152978,14 @@ aaa aaa aaa aaa -bbo +aZN aaa -bgs -bsb -btu -bsb -bgs -bbq +beJ +bpY +brr +bpY +beJ +aZP aaa aaa aaa @@ -157700,8 +152993,8 @@ aaa abC aaa aaP -bEZ -bIT +bCy +bGk aaP aaa aaa @@ -157743,44 +153036,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aag -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aac -aab -aac -aac -aad -aad -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -157864,8 +153157,8 @@ aaa aaa aaa aaP -akl -akX +ajS +akD aaP aaP abC @@ -157936,19 +153229,19 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -bgs -bsb -btv -bsb -bgs +beJ +bpY +brs +bpY +beJ aaa aaa aaa @@ -157956,8 +153249,8 @@ aaa aaa abC aaP -bEZ -bHx +bCy +bEO abb aaP aaa @@ -158000,44 +153293,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aab -aac -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -158121,9 +153414,9 @@ aaa aaa aaa aaP -akm -akY -alG +ajT +akE +all aaP aaP aaa @@ -158192,18 +153485,18 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa -aaa -btw +brt aaa aaa aaa @@ -158212,8 +153505,8 @@ aaa aaa aaa aaP -bEZ -bGm +bCy +bDG abs abb aaP @@ -158257,44 +153550,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aab -aab -aad -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +ddl +cGc +cGc +cGc +cGc aaa aaa aaa @@ -158378,11 +153671,11 @@ aaa aaa aaa aaP -akn -akZ +ajU +akF abr abV -anl +amQ aaa aaa aaa @@ -158449,30 +153742,30 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF aaa +cGc +cGc +cGc +cGc +cGc aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -btw aaa aaa aaa -aaa -aaa -aaa -aaa -bEc +bBC abV abr abr -bIU +bGl aaP aaa aaa @@ -158514,44 +153807,44 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aad -aac -aac -aac -aac -aac -aac -aac -aab -aab -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -158706,20 +153999,20 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa -aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -158771,39 +154064,39 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac -aac -aab -aab -aab -aad -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -158963,12 +154256,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -158996,11 +154289,46 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aag aaa aaa aaa @@ -159014,53 +154342,18 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159220,78 +154513,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159319,11 +154546,45 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159338,6 +154599,38 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159477,68 +154770,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159566,11 +154803,45 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159595,6 +154866,28 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159734,68 +155027,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159823,11 +155060,45 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159852,6 +155123,28 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -159991,61 +155284,12 @@ aad aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160073,6 +155317,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160109,6 +155380,28 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160281,6 +155574,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160317,55 +155637,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160538,6 +155831,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160574,55 +155894,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160795,6 +156088,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -160831,55 +156151,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161052,6 +156345,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161088,55 +156408,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161309,6 +156602,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161345,55 +156665,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161566,6 +156859,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161602,55 +156922,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161823,6 +157116,33 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -161859,55 +157179,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -162080,33 +157373,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa diff --git a/_maps/map_files/CitadelStation/CitadelStation-1.2.1.dmm b/_maps/map_files/CitadelStation/CitadelStation-1.2.1.dmm index 7553242b36..65c31e0f7e 100644 --- a/_maps/map_files/CitadelStation/CitadelStation-1.2.1.dmm +++ b/_maps/map_files/CitadelStation/CitadelStation-1.2.1.dmm @@ -114,7 +114,7 @@ "acj" = (/obj/machinery/light/small,/obj/structure/table,/turf/open/floor/plasteel,/area/security/processing{name = "Permabrig"}) "ack" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4;name = "regular air scrubber";on = 1;scrub_N2O = 0;scrub_Toxins = 0},/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas.";dir = 4;name = "Prison Monitor";network = list("Prison");pixel_x = -30;pixel_y = 0},/turf/open/floor/plasteel/red/side{dir = 8},/area/security/processing{name = "Permabrig"}) "acl" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4;initialize_directions = 11},/obj/structure/cable{tag = "icon-1-2";icon_state = "1-2"},/turf/open/floor/plasteel/red/side{dir = 4},/area/security/processing{name = "Permabrig"}) -"acm" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2;pixel_y = -5},/obj/item/weapon/c4{pixel_x = -3;pixel_y = 3},/obj/item/weapon/c4{pixel_x = 2;pixel_y = -3},/obj/item/weapon/c4{pixel_x = -2;pixel_y = -1},/obj/item/weapon/c4{pixel_x = 3;pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shuttle/syndicate) +"acm" = (/obj/structure/table,/obj/item/weapon/grenade/plastic/c4{pixel_x = 2;pixel_y = -5},/obj/item/weapon/grenade/plastic/c4{pixel_x = -3;pixel_y = 3},/obj/item/weapon/grenade/plastic/c4{pixel_x = 2;pixel_y = -3},/obj/item/weapon/grenade/plastic/c4{pixel_x = -2;pixel_y = -1},/obj/item/weapon/grenade/plastic/c4{pixel_x = 3;pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shuttle/syndicate) "acn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/shuttle/syndicate) "aco" = (/obj/machinery/door/window{name = "Ready Room";req_access_txt = "150"},/turf/open/floor/mineral/plastitanium,/area/shuttle/syndicate) "acp" = (/obj/machinery/light{dir = 8},/obj/structure/sign/electricshock{pixel_x = -32},/turf/open/floor/plasteel/green,/area/security/processing{name = "Permabrig"}) @@ -241,7 +241,7 @@ "aeG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/open/floor/plating,/area/medical/virology) "aeH" = (/obj/item/weapon/storage/box/beakers{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/machinery/power/apc{cell_type = 5000;dir = 1;name = "Virology APC";pixel_x = 0;pixel_y = 24},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 9},/area/medical/virology) "aeI" = (/obj/item/weapon/book/manual/wiki/infections{pixel_y = 7},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 5},/area/medical/virology) -"aeJ" = (/obj/machinery/smartfridge/chemistry/virology,/obj/machinery/airalarm{frequency = 1439;pixel_y = 23},/turf/open/floor/plasteel/whitegreen,/area/medical/virology) +"aeJ" = (/obj/machinery/smartfridge/chemistry/virology/preloaded,/obj/machinery/airalarm{frequency = 1439;pixel_y = 23},/turf/open/floor/plasteel/whitegreen,/area/medical/virology) "aeK" = (/obj/machinery/reagentgrinder{pixel_y = 8},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 9},/area/medical/virology) "aeL" = (/obj/item/clothing/gloves/color/latex,/obj/item/device/healthanalyzer,/obj/item/clothing/glasses/hud/health,/obj/structure/reagent_dispensers/virusfood{density = 0;pixel_x = 0;pixel_y = 30},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 5},/area/medical/virology) "aeM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/open/floor/plasteel/red/side{dir = 8},/area/security/processing{name = "Prisoner Processing"}) @@ -620,7 +620,7 @@ "alV" = (/obj/machinery/camera{c_tag = "Custodial Closet"},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "alW" = (/obj/machinery/monkey_recycler,/obj/machinery/firealarm{dir = 2;pixel_y = 24},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "alX" = (/obj/machinery/processor{desc = "A machine used to process slimes and retrieve their extract.";name = "Slime Processor"},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) -"alY" = (/obj/machinery/smartfridge/extract,/turf/open/floor/plasteel/white,/area/toxins/xenobiology) +"alY" = (/obj/machinery/smartfridge/extract/preloaded,/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "alZ" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/airalarm{frequency = 1439;pixel_y = 23},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "ama" = (/obj/structure/closet/l3closet/scientist,/turf/open/floor/plasteel/white,/area/toxins/xenobiology) "amb" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light_switch{pixel_x = 0;pixel_y = 28},/turf/open/floor/plasteel/white,/area/toxins/xenobiology) @@ -1361,7 +1361,7 @@ "aAi" = (/obj/structure/table/wood,/obj/item/weapon/folder,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library) "aAj" = (/obj/machinery/power/apc{dir = 8;name = "Library APC";pixel_x = -25},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/open/floor/wood,/area/library) "aAk" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/open/floor/wood,/area/library) -"aAl" = (/obj/effect/landmark/start{name = "Librarian"},/turf/open/floor/wood,/area/library) +"aAl" = (/obj/effect/landmark/start{name = "Curator"},/turf/open/floor/wood,/area/library) "aAm" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/wood,/area/library) "aAn" = (/obj/machinery/light/small/built{tag = "icon-bulb1 (WEST)";icon_state = "bulb1";dir = 8},/obj/machinery/airalarm{frequency = 1439;locked = 0;pixel_y = 23},/turf/open/floor/wood,/area/crew_quarters/cafeteria{name = "Cafe"}) "aAo" = (/turf/open/floor/wood,/area/crew_quarters/cafeteria{name = "Cafe"}) @@ -1393,7 +1393,7 @@ "aAO" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/maintenance/fore) "aAP" = (/obj/structure/chair/stool,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/maintenance/fore) "aAQ" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/noslip,/area/construction/hallway{name = "Secure Workstations Hallway"}) -"aAR" = (/obj/structure/closet/cabinet,/obj/item/toy/figure/assistant,/obj/item/toy/figure/atmos,/obj/item/toy/figure/bartender,/obj/item/toy/figure/borg,/obj/item/toy/figure/botanist,/obj/item/toy/figure/captain,/obj/item/toy/figure/cargotech,/obj/item/toy/figure/ce,/obj/item/toy/figure/chaplain,/obj/item/toy/figure/chef,/obj/item/toy/figure/chemist,/obj/item/toy/figure/clown,/obj/item/toy/figure/cmo,/obj/item/toy/figure/detective,/obj/item/toy/figure/dsquad,/obj/item/toy/figure/engineer,/obj/item/toy/figure/geneticist,/obj/item/toy/figure/hop,/obj/item/toy/figure/hos,/obj/item/toy/figure/ian,/obj/item/toy/figure/janitor,/obj/item/toy/figure/lawyer,/obj/item/toy/figure/librarian,/obj/item/toy/figure/md,/obj/item/toy/figure/mime,/obj/item/toy/figure/miner,/obj/item/toy/figure/ninja,/obj/item/toy/figure/qm,/obj/item/toy/figure/rd,/obj/item/toy/figure/roboticist,/obj/item/toy/figure/scientist,/obj/item/toy/figure/secofficer,/obj/item/toy/figure/syndie,/obj/item/toy/figure/virologist,/obj/item/toy/figure/warden,/obj/item/toy/figure/wizard,/obj/item/toy/minimeteor,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library) +"aAR" = (/obj/structure/closet/cabinet,/obj/item/toy/figure/assistant,/obj/item/toy/figure/atmos,/obj/item/toy/figure/bartender,/obj/item/toy/figure/borg,/obj/item/toy/figure/botanist,/obj/item/toy/figure/captain,/obj/item/toy/figure/cargotech,/obj/item/toy/figure/ce,/obj/item/toy/figure/chaplain,/obj/item/toy/figure/chef,/obj/item/toy/figure/chemist,/obj/item/toy/figure/clown,/obj/item/toy/figure/cmo,/obj/item/toy/figure/detective,/obj/item/toy/figure/dsquad,/obj/item/toy/figure/engineer,/obj/item/toy/figure/geneticist,/obj/item/toy/figure/hop,/obj/item/toy/figure/hos,/obj/item/toy/figure/ian,/obj/item/toy/figure/janitor,/obj/item/toy/figure/lawyer,/obj/item/toy/figure/curator,/obj/item/toy/figure/md,/obj/item/toy/figure/mime,/obj/item/toy/figure/miner,/obj/item/toy/figure/ninja,/obj/item/toy/figure/qm,/obj/item/toy/figure/rd,/obj/item/toy/figure/roboticist,/obj/item/toy/figure/scientist,/obj/item/toy/figure/secofficer,/obj/item/toy/figure/syndie,/obj/item/toy/figure/virologist,/obj/item/toy/figure/warden,/obj/item/toy/figure/wizard,/obj/item/toy/minimeteor,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library) "aAS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library) "aAT" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 0;pixel_y = -27},/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library) "aAU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8;initialize_directions = 11},/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library) @@ -2985,7 +2985,7 @@ "bfu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{tag = "icon-1-2";icon_state = "1-2"},/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)";icon_state = "whitebluecorner";dir = 4},/area/medical/medbay{name = "Medbay Central"}) "bfv" = (/obj/machinery/chem_dispenser,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTHWEST)";icon_state = "whiteyellow";dir = 9},/area/medical/chemistry) "bfw" = (/obj/machinery/chem_master,/obj/item/weapon/book/manual/wiki/chemistry,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry) -"bfx" = (/obj/machinery/smartfridge/chemistry{name = "chemical component fridge";spawn_meds = null},/obj/machinery/camera/autoname,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry) +"bfx" = (/obj/machinery/smartfridge/chemistry/preloaded{name = "chemical component fridge"},/obj/machinery/camera/autoname,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry) "bfy" = (/obj/structure/table,/obj/machinery/vending/wallmed{pixel_y = 28},/obj/item/weapon/hand_labeler,/obj/item/clothing/glasses/science,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry) "bfz" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/item/stack/sheet/mineral/plasma{layer = 2.9;pixel_y = 4},/obj/item/stack/sheet/mineral/plasma,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry) "bfA" = (/obj/structure/sink{pixel_y = 24},/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry) @@ -3094,7 +3094,7 @@ "bhz" = (/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)";icon_state = "whiteyellow";dir = 8},/area/medical/chemistry) "bhA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plasteel/white,/area/medical/chemistry) "bhB" = (/obj/structure/closet/secure_closet/chemical,/turf/open/floor/plasteel/white,/area/medical/chemistry) -"bhC" = (/obj/machinery/smartfridge/chemistry{name = "chemical component fridge";spawn_meds = null},/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)";icon_state = "whiteyellow";dir = 4},/area/medical/chemistry) +"bhC" = (/obj/machinery/smartfridge/chemistry/preloaded{name = "chemical component fridge"},/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)";icon_state = "whiteyellow";dir = 4},/area/medical/chemistry) "bhD" = (/turf/closed/wall/r_wall,/area/security/checkpoint) "bhE" = (/obj/machinery/atmospherics/components/unary/vent_pump{name = "regular air vent";on = 1},/obj/machinery/computer/secure_data,/turf/open/floor/plasteel{icon_state = "redfull"},/area/security/checkpoint) "bhF" = (/obj/structure/chair/office/dark{dir = 8},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -26},/turf/open/floor/plasteel{icon_state = "redfull"},/area/security/checkpoint) @@ -3205,7 +3205,7 @@ "bjG" = (/obj/machinery/light{icon_state = "tube1";dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)";icon_state = "whiteblue";dir = 8},/area/medical/medbay{name = "Medbay Central"}) "bjH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/whiteblue/corner,/area/medical/medbay{name = "Medbay Central"}) "bjI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/open/floor/plating,/area/medical/chemistry) -"bjJ" = (/obj/machinery/smartfridge/chemistry,/turf/closed/wall,/area/medical/chemistry) +"bjJ" = (/obj/machinery/smartfridge/chemistry/preloaded,/turf/closed/wall,/area/medical/chemistry) "bjK" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southleft{dir = 1;name = "Chemistry Desk";req_access_txt = "33"},/obj/machinery/door/firedoor/border_only,/turf/open/floor/plasteel/orange,/area/medical/chemistry) "bjL" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/medical/chemistry) "bjM" = (/obj/machinery/door/airlock/glass_command{name = "Bridge Access";req_access_txt = "0";req_one_access_txt = "19; 1"},/turf/open/floor/plasteel/darkblue,/area/bridge) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index c46f6ea830..c157cdc780 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -142,15 +142,15 @@ /area/solar/auxstarboard) "aap" = ( /obj/docking_port/stationary/random{ - id = "pod_asteroid1"; - name = "asteroid" + id = "pod_lavaland1"; + name = "lavaland" }, /turf/open/space, /area/space) "aaq" = ( /obj/docking_port/stationary/random{ - id = "pod_asteroid2"; - name = "asteroid" + id = "pod_lavaland2"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -203,7 +203,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_x = -32; - possible_destinations = "pod_asteroid1"; + possible_destinations = "pod_lavaland1"; shuttleId = "pod1" }, /obj/effect/turf_decal/stripes/line{ @@ -226,7 +226,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_x = -32; - possible_destinations = "pod_asteroid2"; + possible_destinations = "pod_lavaland2"; shuttleId = "pod2" }, /obj/effect/turf_decal/stripes/line{ @@ -10134,14 +10134,11 @@ /turf/open/space, /area/space) "aux" = ( -/obj/item/weapon/twohanded/required/kirbyplants{ - icon_state = "plant-21"; - layer = 4.1; - pixel_x = -3; - pixel_y = 3 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, /turf/open/floor/plasteel, /area/engine/gravity_generator{ name = "Atmospherics Engine" @@ -10753,7 +10750,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/loadingarea{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/space; dir = 8 }, /area/quartermaster/storage) @@ -10777,25 +10774,28 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/supply) "avM" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 4; - on = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, +/obj/item/weapon/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1; + pixel_x = -3; + pixel_y = 3 + }, /turf/open/floor/plasteel, /area/engine/gravity_generator{ name = "Atmospherics Engine" }) "avN" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - icon_state = "manifold"; - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + icon_state = "pump_map"; + name = "Thermo to Gas" + }, /turf/open/floor/plasteel, /area/engine/gravity_generator{ name = "Atmospherics Engine" @@ -11240,7 +11240,7 @@ /area/quartermaster/storage) "awJ" = ( /turf/open/floor/plasteel/loadingarea{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/space; dir = 8 }, /area/quartermaster/storage) @@ -11296,10 +11296,6 @@ /turf/open/space, /area/space) "awR" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - icon_state = "freezer"; - dir = 4 - }, /obj/structure/sign/securearea{ pixel_x = -32 }, @@ -11311,6 +11307,10 @@ network = list("SS13","Engine") }, /obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 4; + on = 1 + }, /turf/open/floor/plasteel, /area/engine/gravity_generator{ name = "Atmospherics Engine" @@ -11765,12 +11765,13 @@ name = "Atmospherics Engine" }) "axM" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + icon_state = "manifold"; + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/gravity_generator{ name = "Atmospherics Engine" @@ -11778,11 +11779,6 @@ "axN" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - icon_state = "intact"; - dir = 4 - }, -/obj/machinery/meter, /turf/open/floor/plasteel/neutral, /area/engine/gravity_generator{ name = "Atmospherics Engine" @@ -11794,9 +11790,6 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 - }, /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -12429,11 +12422,9 @@ /turf/open/floor/plasteel, /area/shuttle/supply) "aza" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 1; +/obj/machinery/atmospherics/components/trinary/filter/flipped{ filter_type = "n2"; - name = "nitogren filter"; - on = 1 + name = "nitrogen filter" }, /turf/open/floor/plasteel/yellow, /area/engine/gravity_generator{ @@ -25977,7 +25968,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_y = -32; - possible_destinations = "pod_asteroid3"; + possible_destinations = "pod_lavaland3"; shuttleId = "pod3" }, /obj/effect/turf_decal/stripes/line{ @@ -25996,8 +25987,8 @@ "aXK" = ( /obj/docking_port/stationary/random{ dir = 4; - id = "pod_asteroid4"; - name = "asteroid" + id = "pod_lavaland4"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -31236,7 +31227,7 @@ icon_state = "1-4" }, /turf/open/floor/plasteel/loadingarea{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/space; dir = 8 }, /area/quartermaster/miningdock{ @@ -34793,7 +34784,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L14" }, /area/hallway/primary/central) @@ -52476,7 +52466,7 @@ name = "Queue Shutters" }, /turf/open/floor/plasteel/loadingarea{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/space; dir = 8 }, /area/hallway/primary/central) @@ -62918,7 +62908,7 @@ "cpl" = ( /obj/structure/table/wood, /obj/item/weapon/clipboard, -/obj/item/toy/figure/librarian, +/obj/item/toy/figure/curator, /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -63736,7 +63726,7 @@ /area/library) "cqF" = ( /obj/machinery/door/morgue{ - name = "Librarian's Study"; + name = "Curator's Study"; req_access_txt = "37" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -64356,10 +64346,12 @@ /turf/open/floor/plasteel/black, /area/library) "crP" = ( -/obj/structure/dresser, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -32 - }, +/obj/structure/closet/crate, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/under/rank/curator/treasure_hunter, +/obj/item/clothing/suit/curator, +/obj/item/clothing/head/curator, +/obj/item/weapon/storage/backpack/satchel/explorer, /turf/open/floor/plasteel/black, /area/library) "crQ" = ( @@ -67498,7 +67490,7 @@ desc = "This looks awfully familiar..."; icon_state = "curator" }, -/obj/item/clothing/under/rank/librarian/curator, +/obj/item/clothing/under/rank/curator/treasure_hunter, /turf/open/floor/carpet, /area/crew_quarters/sleep) "cxC" = ( @@ -70986,7 +70978,6 @@ "cDW" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L13"; name = "floor" }, @@ -79512,8 +79503,13 @@ name = "Medbay Central" }) "cUf" = ( -/obj/machinery/smartfridge/chemistry, -/turf/closed/wall, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemisttop"; + name = "Chemisty Lobby Shutters" + }, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, /area/medical/medbay{ name = "Medbay Central" }) @@ -79536,14 +79532,9 @@ name = "Medbay Central" }) "cUh" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemisttop"; - name = "Chemisty Lobby Shutters" - }, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating, +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/closed/wall, /area/medical/medbay{ name = "Medbay Central" }) @@ -81189,7 +81180,7 @@ /turf/open/floor/plating, /area/toxins/xenobiology) "cXc" = ( -/obj/machinery/smartfridge/extract, +/obj/machinery/smartfridge/extract/preloaded, /obj/machinery/light_switch{ pixel_x = -26 }, @@ -82189,6 +82180,7 @@ /obj/item/weapon/grenade/chem_grenade, /obj/item/weapon/grenade/chem_grenade, /obj/item/weapon/grenade/chem_grenade, +/obj/item/weapon/screwdriver, /turf/open/floor/plasteel/whiteyellow/corner{ icon_state = "whiteyellowcorner"; dir = 8 @@ -84273,7 +84265,7 @@ /turf/open/floor/plasteel/whiteyellow/corner, /area/medical/chemistry) "ddg" = ( -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/closed/wall, /area/medical/chemistry) "ddh" = ( @@ -96353,7 +96345,6 @@ }, /area/medical/morgue) "dAn" = ( -/turf/open/floor/plating, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ icon_state = "manifold"; @@ -104160,7 +104151,7 @@ name = "emergency shower" }, /turf/open/floor/plasteel/whiteblue/side{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/space; dir = 4 }, /area/shuttle/escape) @@ -104905,7 +104896,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/smartfridge/chemistry/virology, +/obj/machinery/smartfridge/chemistry/virology/preloaded, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -105516,7 +105507,7 @@ /area/library/abandoned_library) "dSu" = ( /obj/structure/table/wood, -/obj/item/clothing/under/rank/librarian, +/obj/item/clothing/under/rank/curator, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" @@ -108176,7 +108167,7 @@ /area/maintenance/fpmaint2/aft_port_maintenance) "dXu" = ( /obj/structure/table/wood/fancy, -/obj/item/weapon/spellbook/oneuse/smoke, +/obj/item/weapon/spellbook/oneuse/smoke/lesser, /obj/item/weapon/nullrod, /obj/item/organ/heart, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, @@ -112311,6 +112302,45 @@ }, /turf/open/floor/plasteel/neutral, /area/atmos) +"ehO" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/library) +"ehP" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/library) +"ehQ" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/library) +"ehR" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/library) +"ehS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + icon_state = "freezer"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/gravity_generator{ + name = "Atmospherics Engine" + }) +"ehT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel, +/area/engine/gravity_generator{ + name = "Atmospherics Engine" + }) (1,1,1) = {" aaa @@ -136033,11 +136063,11 @@ aiW apF aqY asd -ati +axL aux avM awR -axL +ehS axL axL asd @@ -136295,7 +136325,7 @@ auy avN awS axM -aqZ +ehT azZ aAV aCc @@ -136553,7 +136583,7 @@ ato awT axN aza -aAa +ato aAW aCd aDD @@ -136809,7 +136839,7 @@ ebT avO auA axO -azb +atk atk aAX aCe @@ -143544,7 +143574,7 @@ cbA cdn ceS cgp -chQ +ehO cjl ckP cjl @@ -143801,7 +143831,7 @@ cbB cdo ceS cgq -chQ +ehO cjl ckP cjl @@ -144315,7 +144345,7 @@ bWi cdq ceS cgp -chQ +ehO cjm ckP cmk @@ -144572,7 +144602,7 @@ cbC cdr ceT cgp -chQ +ehO cjn ckP cmk diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 320823a490..303005c32f 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1910,8 +1910,8 @@ /area/shuttle/pod_3) "adG" = ( /obj/docking_port/stationary/random{ - id = "pod_asteroid2"; - name = "asteroid" + id = "pod_lavaland2"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -1927,7 +1927,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_x = -32; - possible_destinations = "pod_asteroid2"; + possible_destinations = "pod_lavaland2"; shuttleId = "pod2" }, /turf/open/floor/mineral/titanium/blue, @@ -23696,7 +23696,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_y = -32; - possible_destinations = "pod_asteroid3"; + possible_destinations = "pod_lavaland3"; shuttleId = "pod3" }, /turf/open/floor/mineral/titanium/blue, @@ -27963,7 +27963,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L13"; name = "floor" }, @@ -28813,7 +28812,6 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L14" }, /area/hallway/primary/central) @@ -34140,8 +34138,8 @@ "bii" = ( /obj/docking_port/stationary/random{ dir = 4; - id = "pod_asteroid3"; - name = "asteroid" + id = "pod_lavaland3"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -45372,12 +45370,12 @@ name = "Port Maintenance" }) "bBr" = ( -/obj/structure/table/wood, /obj/machinery/airalarm{ dir = 4; pixel_x = -23; pixel_y = 0 }, +/obj/structure/displaycase/trophy, /turf/open/floor/wood, /area/library) "bBs" = ( @@ -47035,7 +47033,6 @@ name = "\improper Auxiliary Restrooms" }) "bEw" = ( -/obj/structure/table/wood, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32; pixel_y = 0 @@ -47044,6 +47041,7 @@ dir = 4; network = list("SS13") }, +/obj/structure/displaycase/trophy, /turf/open/floor/wood, /area/library) "bEx" = ( @@ -53664,6 +53662,12 @@ pixel_x = 30; pixel_y = 0 }, +/obj/structure/closet/crate, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/under/rank/curator/treasure_hunter, +/obj/item/clothing/suit/curator, +/obj/item/clothing/head/curator, +/obj/item/weapon/storage/backpack/satchel/explorer, /turf/open/floor/engine/cult, /area/library) "bPY" = ( @@ -56821,7 +56825,6 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L13"; name = "floor" }, @@ -57513,7 +57516,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L14" }, /area/hallway/primary/central) @@ -63158,7 +63160,7 @@ /turf/open/floor/plating, /area/medical/chemistry) "cfY" = ( -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/closed/wall, /area/medical/chemistry) "cfZ" = ( @@ -77226,7 +77228,7 @@ }, /area/medical/virology) "cDH" = ( -/obj/machinery/smartfridge/chemistry/virology, +/obj/machinery/smartfridge/chemistry/virology/preloaded, /obj/machinery/airalarm{ frequency = 1439; pixel_y = 23 @@ -82483,7 +82485,7 @@ /area/chapel/office) "cMa" = ( /obj/structure/table/wood, -/obj/item/weapon/spellbook/oneuse/smoke{ +/obj/item/weapon/spellbook/oneuse/smoke/lesser{ name = "mysterious old book of " }, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{ @@ -86084,8 +86086,8 @@ /area/toxins/xenobiology) "cSP" = ( /obj/docking_port/stationary/random{ - id = "pod_asteroid1"; - name = "asteroid" + id = "pod_lavaland1"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -86175,7 +86177,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_x = -32; - possible_destinations = "pod_asteroid1"; + possible_destinations = "pod_lavaland1"; shuttleId = "pod1" }, /turf/open/floor/mineral/titanium/blue, @@ -86368,7 +86370,7 @@ }, /obj/machinery/computer/shuttle/pod{ pixel_y = -32; - possible_destinations = "pod_asteroid4"; + possible_destinations = "pod_lavaland4"; shuttleId = "pod4" }, /turf/open/floor/mineral/titanium/blue, @@ -87162,8 +87164,8 @@ "cUL" = ( /obj/docking_port/stationary/random{ dir = 4; - id = "pod_asteroid4"; - name = "asteroid" + id = "pod_lavaland4"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -91075,7 +91077,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/smartfridge/extract, +/obj/machinery/smartfridge/extract/preloaded, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -95333,6 +95335,14 @@ icon_state = "xenomaint"; name = "Xeno Maintenance" }) +"dmD" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/library) +"dmE" = ( +/obj/structure/displaycase/trophy, +/turf/open/floor/wood, +/area/library) (1,1,1) = {" aaa @@ -114481,7 +114491,7 @@ bwa bxU bzD bBr -bCT +bSx bEw bzE bHR @@ -114737,9 +114747,9 @@ bue bwb bxV bzE -bBs -bCU -bBs +dmD +bzE +dmD bzE bHR bJz @@ -128192,7 +128202,7 @@ cRi cRi daP cLE -cRi +dlV aaa aaa aaf @@ -128448,7 +128458,7 @@ daF daJ cRi bvT -dlV +cRi cRi cRi cRi @@ -128705,7 +128715,7 @@ cSn cSn cRi dmq -dlV +cRi cZv cZv cRi @@ -129733,7 +129743,7 @@ cSn daN cRi dmr -dlV +cRi cZv dbw cRi @@ -129990,7 +130000,7 @@ daI daM cRi cTA -dlV +cRi cRi cRi cRi diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 778fb50c88..c37c4ca3a3 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -513,7 +513,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /obj/structure/cable{ d1 = 1; @@ -1040,7 +1040,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1; + dir = 1 }, /area/mine/living_quarters) "cg" = ( @@ -1074,7 +1074,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface @@ -1497,10 +1497,21 @@ /area/mine/living_quarters) "dd" = ( /obj/structure/table, -/obj/item/weapon/reagent_containers/food/drinks/beer, +/obj/item/weapon/reagent_containers/food/drinks/beer{ + pixel_x = 7; + pixel_y = 5 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, +/obj/item/weapon/reagent_containers/food/drinks/beer{ + pixel_x = -1; + pixel_y = 9 + }, +/obj/item/weapon/reagent_containers/food/drinks/beer{ + pixel_x = -8; + pixel_y = 0 + }, /turf/open/floor/plasteel/bar{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface }, @@ -1772,6 +1783,9 @@ pixel_x = -5; pixel_y = 30 }, +/obj/machinery/shower{ + dir = 8 + }, /turf/open/floor/plasteel/purple/corner{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface }, @@ -2192,7 +2206,7 @@ }, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 8; + dir = 8 }, /area/mine/maintenance) "ez" = ( @@ -2214,13 +2228,13 @@ /obj/machinery/iv_drip, /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1; + dir = 1 }, /area/mine/living_quarters) "eB" = ( /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1; + dir = 1 }, /area/mine/living_quarters) "eC" = ( @@ -2231,7 +2245,7 @@ }, /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 5; + dir = 5 }, /area/mine/living_quarters) "eD" = ( @@ -2398,7 +2412,7 @@ /obj/item/weapon/storage/firstaid/regular, /turf/open/floor/plasteel/whiteblue/side{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 4; + dir = 4 }, /area/mine/living_quarters) "eU" = ( @@ -2512,6 +2526,7 @@ dir = 2; network = list("MINE") }, +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 5 @@ -2520,7 +2535,7 @@ "fe" = ( /turf/open/floor/plasteel/brown/corner{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1; + dir = 1 }, /area/mine/production) "ff" = ( @@ -2578,7 +2593,7 @@ }, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1; + dir = 1 }, /area/mine/living_quarters) "fm" = ( @@ -2600,7 +2615,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; - dir = 1; + dir = 1 }, /area/mine/living_quarters) "fp" = ( @@ -2674,7 +2689,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; + icon_state = "1-4" }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface @@ -2712,6 +2727,10 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, /turf/open/floor/plasteel/purple/corner{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 4 @@ -2794,6 +2813,41 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /turf/closed/indestructible/riveted, /area/space) +"fQ" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/white, +/area/mine/laborcamp) +"fR" = ( +/obj/structure/sink/kitchen{ + dir = 4; + icon_state = "sink_alt"; + pixel_x = -13; + tag = "icon-sink_alt (EAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/mine/laborcamp) +"fS" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/purple/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/mine/production) +"fT" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + tag = "icon-sink (EAST)" + }, +/turf/open/floor/plasteel/bar{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/mine/living_quarters) (1,1,1) = {" aa @@ -8919,7 +8973,7 @@ aA at at at -at +fR at au fH @@ -9175,7 +9229,7 @@ an an at at -at +fQ at dr an @@ -14594,8 +14648,8 @@ fj ee cT cZ -dg dk +fT ee al al @@ -18433,7 +18487,7 @@ af ab ab dx -dC +fS dK bI bS diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 0e3fea852f..da311e72d7 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -7303,7 +7303,6 @@ icon_state = "1-2" }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L14" }, /area/hallway/primary/central{ @@ -9155,7 +9154,7 @@ }, /obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel/loadingarea{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + baseturf = /turf/open/space; dir = 8 }, /area/quartermaster/miningdock) @@ -14512,14 +14511,6 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/cable/white{ - tag = "icon-2-4"; - icon_state = "2-4" - }, -/obj/structure/cable/white{ - tag = "icon-2-8"; - icon_state = "2-8" - }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -14894,11 +14885,6 @@ /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, /obj/machinery/light, -/obj/machinery/power/apc{ - dir = 2; - name = "Bar APC"; - pixel_y = -26 - }, /obj/structure/cable/white, /turf/open/floor/plasteel/black, /area/crew_quarters/bar) @@ -16523,6 +16509,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, +/obj/machinery/light{ + dir = 8 + }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aAb" = ( @@ -16558,6 +16547,9 @@ "aAf" = ( /obj/structure/table/reinforced, /obj/item/weapon/storage/fancy/donut_box, +/obj/machinery/light{ + dir = 4 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -24133,6 +24125,9 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, +/obj/machinery/light{ + dir = 8 + }, /turf/open/floor/plasteel, /area/shuttle/escape) "aME" = ( @@ -24187,6 +24182,9 @@ /obj/machinery/status_display{ pixel_x = 32 }, +/obj/machinery/light{ + dir = 4 + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 5 }, @@ -25964,7 +25962,6 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L13"; name = "floor" }, @@ -27024,7 +27021,7 @@ /turf/open/floor/plating, /area/medical/chemistry) "aRh" = ( -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/closed/wall, /area/medical/chemistry) "aRi" = ( @@ -30548,7 +30545,7 @@ /area/maintenance/starboard) "aXL" = ( /obj/machinery/door/morgue{ - name = "Librarian's Study"; + name = "Curator's Study"; req_access_txt = "37" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -37361,7 +37358,7 @@ /turf/open/floor/plasteel, /area/toxins/xenobiology) "bjb" = ( -/obj/machinery/smartfridge/extract, +/obj/machinery/smartfridge/extract/preloaded, /obj/machinery/light{ dir = 1 }, @@ -41920,6 +41917,294 @@ /area/ruin/unpowered{ name = "Asteroid" }) +"bvO" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/neutral/side{ + dir = 1 + }, +/area/shuttle/escape) +"bvP" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"bvQ" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/shuttle/escape) +"bvR" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/neutral/side, +/area/shuttle/escape) +"bvS" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bvT" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"bvU" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bvV" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bvW" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bvX" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bvY" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bvZ" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"bwa" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwb" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l" + }, +/turf/open/floor/plating/airless, +/area/shuttle/transport) +"bwc" = ( +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/airless, +/area/shuttle/transport) +"bwd" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwe" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwf" = ( +/obj/structure/chair, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwg" = ( +/obj/structure/chair, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwh" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwi" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwj" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwk" = ( +/obj/structure/chair, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwl" = ( +/obj/structure/chair, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwm" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"bwn" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l" + }, +/turf/open/floor/plating/airless, +/area/shuttle/transport) +"bwo" = ( +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = 0 + }, +/turf/open/floor/plating/airless, +/area/shuttle/transport) +"bwp" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwq" = ( +/obj/machinery/light/small, +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwr" = ( +/obj/machinery/door/airlock/titanium, +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bws" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwt" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwu" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwv" = ( +/obj/machinery/computer/shuttle/ferry/request, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bww" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwx" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwy" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwz" = ( +/obj/machinery/door/airlock/titanium, +/obj/docking_port/mobile{ + dir = 8; + dwidth = 2; + height = 13; + id = "ferry"; + name = "ferry shuttle"; + port_angle = 0; + preferred_direction = 4; + roundstart_move = "ferry_away"; + width = 5 + }, +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 13; + id = "ferry_home"; + name = "port bay 2"; + turf_type = /turf/open/space; + width = 5 + }, +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwA" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion_l" + }, +/turf/open/floor/plating/airless, +/area/shuttle/transport) +"bwB" = ( +/obj/structure/shuttle/engine/heater{ + icon_state = "heater"; + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/transport) +"bwC" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwD" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwE" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwF" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwG" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwH" = ( +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwI" = ( +/obj/machinery/light, +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwJ" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwK" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/shuttle/transport) +"bwL" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"bwM" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwN" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"bwO" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwP" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwQ" = ( +/obj/machinery/door/airlock/external, +/turf/open/floor/pod/light, +/area/shuttle/transport) +"bwR" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwS" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) +"bwT" = ( +/obj/structure/grille, +/obj/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/transport) +"bwU" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) (1,1,1) = {" aaa @@ -77290,7 +77575,7 @@ aaa aaa aaa aaa -aaa +bwb aaa aaa aaa @@ -77546,9 +77831,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bwb +bwo +bwb aaa aaa aaa @@ -77803,9 +78088,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bwc +bwi +bwB aaa aaa aaa @@ -78060,9 +78345,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +bvS +bwq +bvS aaa aaa aaa @@ -78316,11 +78601,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvS +bvS +bwr +bvS +bvS aaa aaa aaa @@ -78573,11 +78858,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvT +bwf +bwi +bwE +bvT aaa aaa aaa @@ -78830,11 +79115,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvS +bwf +bwi +bwE +bvS aaa aaa aaa @@ -79087,11 +79372,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvS +bwh +bwi +bwi +bvS aaa aaa aaa @@ -79344,11 +79629,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvW +bwi +bwv +bwi +bwQ aaa aaa aaa @@ -79601,11 +79886,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvS +bwi +bwi +bwI +bvS aaa aaa aaa @@ -79858,11 +80143,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvS +bwf +bwi +bwE +bvS aaa aaa aaa @@ -80115,11 +80400,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvT +bwf +bwi +bwE +bvT aaa aaa aaa @@ -80372,11 +80657,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +bvS +bvT +bwz +bvT +bvS aaa aaa aaa @@ -94203,7 +94488,7 @@ aAb axY aDl aEi -aEi +bvP aEi aEi aEi @@ -94715,13 +95000,13 @@ axY aAc axY aCp -aDl +bvO aEk aEj aGd aEl aEk -aJf +bvR aKn aLz axY @@ -95231,7 +95516,7 @@ aAd aCq aDl aEm -aEm +bvQ aEm aEm aEm diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index e0e721840d..99cef30ebd 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -15105,7 +15105,7 @@ /area/maintenance/apmaint) "aEl" = ( /obj/structure/closet/coffin, -/obj/item/toy/figure/librarian, +/obj/item/toy/figure/curator, /turf/open/floor/plating, /area/maintenance/apmaint) "aEm" = ( @@ -30296,7 +30296,7 @@ }, /area/medical/chemistry) "bjk" = ( -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/closed/wall, /area/medical/chemistry) "bjl" = ( @@ -30534,7 +30534,7 @@ /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "bjH" = ( -/obj/machinery/smartfridge/extract, +/obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/plasteel/whitepurple/side{ dir = 4 }, @@ -32850,10 +32850,6 @@ /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "bnU" = ( -/obj/machinery/door/airlock/research{ - name = "Kill Room Access"; - req_access_txt = "55" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40061,9 +40057,8 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bBf" = ( -/obj/machinery/smartfridge/chemistry/virology, +/obj/machinery/smartfridge/chemistry/virology/preloaded, /turf/open/floor/plasteel/whitegreen/side{ - tag = "icon-whitegreen (EAST)"; icon_state = "whitegreen"; dir = 4 }, @@ -47067,6 +47062,11 @@ icon_state = "1-2" }, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/open/floor/plasteel, /area/engine/engineering) "bPR" = ( @@ -50534,7 +50534,7 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "bXR" = ( -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/open/floor/plasteel/black, /area/medical/chemistry) "bXS" = ( @@ -55919,6 +55919,20 @@ /obj/machinery/light, /turf/open/floor/pod/light, /area/shuttle/transport) +"cjQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/apc{ + cell_type = 15000; + dir = 2; + name = "Engineering APC"; + pixel_y = -24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) (1,1,1) = {" aaa @@ -89500,7 +89514,7 @@ bNt bOE bNt bNt -bPE +cjQ bMb bQy bMb diff --git a/_maps/map_files/PubbyStation/job_changes.dm b/_maps/map_files/PubbyStation/job_changes.dm index 8b26cd5b68..d366a15ae3 100644 --- a/_maps/map_files/PubbyStation/job_changes.dm +++ b/_maps/map_files/PubbyStation/job_changes.dm @@ -18,5 +18,5 @@ access += GLOB.access_crematorium minimal_access += GLOB.access_crematorium -MAP_REMOVE_JOB(librarian) +MAP_REMOVE_JOB(curator) MAP_REMOVE_JOB(lawyer) \ No newline at end of file diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index f2bf5eb504..b00c11274b 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -2501,7 +2501,7 @@ "afq" = ( /obj/machinery/computer/shuttle/pod{ pixel_y = -32; - possible_destinations = "pod_asteroid3"; + possible_destinations = "pod_lavaland3"; shuttleId = "pod3" }, /obj/structure/chair{ @@ -7787,8 +7787,8 @@ "aqG" = ( /obj/docking_port/stationary/random{ dir = 4; - id = "pod_asteroid3"; - name = "asteroid" + id = "pod_lavaland3"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -12384,7 +12384,7 @@ dir = 5 }, /turf/open/floor/plating, -/area/maintenance/fpmaint) +/area/gateway) "aBj" = ( /obj/structure/rack{ dir = 8; @@ -17330,7 +17330,6 @@ /area/hallway/primary/central) "aMf" = ( /turf/open/floor/plasteel{ - desc = ""; icon_state = "L13"; name = "floor" }, @@ -17836,7 +17835,6 @@ /area/hallway/primary/central) "aNB" = ( /turf/open/floor/plasteel{ - desc = ""; icon_state = "L14" }, /area/hallway/primary/central) @@ -19015,6 +19013,12 @@ /turf/open/floor/wood, /area/library) "aQr" = ( +/obj/structure/closet/crate, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/under/rank/curator/treasure_hunter, +/obj/item/clothing/suit/curator, +/obj/item/clothing/head/curator, +/obj/item/weapon/storage/backpack/satchel/explorer, /obj/machinery/light/small, /turf/open/floor/engine/cult, /area/library) @@ -19510,7 +19514,7 @@ /turf/open/floor/wood, /area/library) "aRO" = ( -/obj/structure/bookcase/random/nonfiction, +/obj/structure/displaycase/trophy, /turf/open/floor/wood, /area/library) "aRP" = ( @@ -22141,7 +22145,7 @@ "aYa" = ( /obj/machinery/power/apc{ dir = 8; - name = "Locker Room Maintenance APC"; + name = "Aft Port Maintenance APC"; pixel_x = -27; pixel_y = 2 }, @@ -25154,7 +25158,7 @@ icon_state = "1-8" }, /turf/open/floor/plating, -/area/maintenance/port) +/area/quartermaster/storage) "bfl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -27085,7 +27089,7 @@ /turf/open/floor/plasteel, /area/assembly/chargebay) "bjQ" = ( -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/open/floor/plating, /area/medical/chemistry) "bjR" = ( @@ -27640,11 +27644,6 @@ /area/bridge/meeting_room) "bkY" = ( /obj/effect/landmark/blobstart, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -40908,7 +40907,7 @@ /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "bMo" = ( -/obj/machinery/smartfridge/extract, +/obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/plasteel/white, /area/toxins/xenobiology) "bMp" = ( @@ -44807,7 +44806,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bVa" = ( -/obj/machinery/smartfridge/chemistry/virology, +/obj/machinery/smartfridge/chemistry/virology/preloaded, /turf/open/floor/plasteel/whitegreen/side{ dir = 8 }, @@ -53823,8 +53822,8 @@ "cpe" = ( /obj/docking_port/stationary/random{ dir = 8; - id = "pod_asteroid2"; - name = "asteroid" + id = "pod_lavaland2"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -54079,7 +54078,7 @@ /obj/machinery/computer/shuttle/pod{ pixel_x = 0; pixel_y = -32; - possible_destinations = "pod_asteroid2"; + possible_destinations = "pod_lavaland2"; shuttleId = "pod2" }, /obj/structure/chair{ @@ -57394,8 +57393,8 @@ "cwV" = ( /obj/docking_port/stationary/random{ dir = 8; - id = "pod_asteroid1"; - name = "asteroid" + id = "pod_lavaland1"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -57508,7 +57507,7 @@ /obj/machinery/computer/shuttle/pod{ pixel_x = 0; pixel_y = -32; - possible_destinations = "pod_asteroid1"; + possible_destinations = "pod_lavaland1"; shuttleId = "pod1" }, /obj/structure/chair{ @@ -58424,7 +58423,7 @@ "czL" = ( /obj/machinery/computer/shuttle/pod{ pixel_y = -32; - possible_destinations = "pod_asteroid4"; + possible_destinations = "pod_lavaland4"; shuttleId = "pod4" }, /obj/structure/chair{ @@ -58455,8 +58454,8 @@ "czN" = ( /obj/docking_port/stationary/random{ dir = 4; - id = "pod_asteroid4"; - name = "asteroid" + id = "pod_lavaland4"; + name = "lavaland" }, /turf/open/space, /area/space) @@ -59563,7 +59562,7 @@ }, /obj/structure/cable, /turf/open/floor/plating, -/area/maintenance/port) +/area/security/detectives_office) "cCo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -62008,11 +62007,26 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/weapon/grenade/plastic/c4, -/obj/item/weapon/grenade/plastic/c4, -/obj/item/weapon/grenade/plastic/c4, -/obj/item/weapon/grenade/plastic/c4, -/obj/item/weapon/grenade/plastic/c4, +/obj/item/weapon/grenade/plastic/c4{ + pixel_x = 2; + pixel_y = -5 + }, +/obj/item/weapon/grenade/plastic/c4{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/weapon/grenade/plastic/c4{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/weapon/grenade/plastic/c4{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/weapon/grenade/plastic/c4{ + pixel_x = 3; + pixel_y = 3 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -88787,7 +88801,7 @@ bda bca bgJ aZP -bjD +bjB bkY bmo bnP @@ -99635,7 +99649,7 @@ bVu bVu bVu bVu -apQ +bVu bVu csw csw @@ -106507,7 +106521,7 @@ aIt aPd aIt aRO -aIt +aRO aUC aVP aXu @@ -106764,7 +106778,7 @@ aNV aPd aIt aRO -aIt +aRO aIt aVQ aXu diff --git a/_maps/map_files/generic/Centcomm.dmm b/_maps/map_files/generic/Centcomm.dmm index 9f7787b585..ba62ea2357 100644 --- a/_maps/map_files/generic/Centcomm.dmm +++ b/_maps/map_files/generic/Centcomm.dmm @@ -5586,7 +5586,7 @@ /area/centcom/ferry) "ot" = ( /obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/clothing/under/rank/librarian/curator, +/obj/item/clothing/under/rank/curator/treasure_hunter, /obj/item/clothing/under/skirt/black, /obj/item/clothing/under/shorts/black, /obj/item/clothing/under/pants/track, @@ -8913,10 +8913,10 @@ /area/centcom/ferry) "vZ" = ( /obj/structure/table/reinforced, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = 6 }, -/obj/item/weapon/c4{ +/obj/item/weapon/grenade/plastic/c4{ pixel_x = -4 }, /obj/machinery/firealarm{ diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm new file mode 100644 index 0000000000..f793e29372 --- /dev/null +++ b/_maps/shuttles/emergency_cere.dmm @@ -0,0 +1,227 @@ +"aa" = (/turf/open/space/basic,/area/space) +"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/escape) +"ac" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape) +"ad" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/escape) +"ae" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/crowbar,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"af" = (/obj/machinery/computer/aifixer,/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"ag" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"ah" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"ai" = (/obj/machinery/computer/card,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aj" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"ak" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"al" = (/obj/structure/table,/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"am" = (/obj/machinery/computer/cargo/request,/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"an" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"ao" = (/obj/structure/table,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"ap" = (/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aq" = (/obj/structure/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"ar" = (/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape) +"as" = (/obj/machinery/computer/station_alert,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"at" = (/obj/structure/chair/office/light{tag = "icon-officechair_white (NORTH)"; icon_state = "officechair_white"; dir = 1},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"au" = (/obj/machinery/computer/communications,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"av" = (/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"aw" = (/obj/structure/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"ax" = (/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"ay" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"az" = (/obj/machinery/computer/med_data,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aA" = (/turf/open/floor/plasteel/darkpurple/side{dir = 1},/area/shuttle/escape) +"aB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aC" = (/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aD" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aE" = (/turf/open/floor/plasteel/darkyellow/side{tag = "icon-darkyellow (NORTH)"; icon_state = "darkyellow"; dir = 1},/area/shuttle/escape) +"aF" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aG" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aH" = (/obj/structure/chair/comfy/beige{dir = 8},/turf/open/floor/plasteel/darkblue,/area/shuttle/escape) +"aI" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; dir = 1},/area/shuttle/escape) +"aJ" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/shuttle/escape) +"aK" = (/obj/structure/chair/comfy/beige{dir = 4},/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aL" = (/obj/machinery/computer/secure_data,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aM" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; dir = 1},/area/shuttle/escape) +"aN" = (/obj/machinery/light,/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aP" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/shuttle/escape) +"aQ" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel/darkred,/area/shuttle/escape) +"aR" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/black,/area/shuttle/escape) +"aS" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"aT" = (/obj/structure/chair,/obj/machinery/light{dir = 1},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"aU" = (/obj/structure/table,/obj/machinery/recharger,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/open/floor/mineral/plastitanium/brig{dir = 9; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"aV" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aW" = (/obj/structure/chair,/obj/machinery/light{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aX" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aY" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"aZ" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/shuttle/escape) +"ba" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/shuttle/escape) +"bb" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port"; icon_state = "recharge_port"; dir = 2},/turf/open/floor/plasteel,/area/shuttle/escape) +"bc" = (/turf/open/floor/plasteel,/area/shuttle/escape) +"bd" = (/obj/structure/chair{dir = 4},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"be" = (/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bf" = (/obj/structure/chair{dir = 8},/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = 24; pixel_y = 6},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bg" = (/obj/machinery/button/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = -6},/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/mineral/plastitanium/brig{dir = 8; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bh" = (/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bi" = (/turf/open/floor/mineral/plastitanium/brig{dir = 4; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bj" = (/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/escape) +"bk" = (/obj/structure/chair{dir = 8},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bl" = (/turf/open/floor/mineral/plastitanium/brig{dir = 8; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bm" = (/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape) +"bn" = (/obj/machinery/door/airlock/glass_security{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape) +"bo" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel,/area/shuttle/escape) +"bp" = (/obj/structure/chair{dir = 4},/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = 6},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape) +"bq" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape) +"br" = (/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bs" = (/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -28},/turf/open/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/shuttle/escape) +"bt" = (/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/open/floor/plasteel,/area/shuttle/escape) +"bu" = (/obj/effect/turf_decal/delivery,/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/obj/structure/closet,/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/shuttle/escape) +"bv" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/open/floor/plating,/area/shuttle/escape) +"bw" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bx" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"by" = (/obj/structure/table,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/storage/box/zipties,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape) +"bz" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{dir = 6; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape) +"bA" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo"},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape) +"bB" = (/turf/open/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/shuttle/escape) +"bC" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel,/area/shuttle/escape) +"bD" = (/obj/effect/turf_decal/delivery,/obj/structure/closet/crate,/turf/open/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/shuttle/escape) +"bE" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dwidth = 15; height = 20; name = "Cere emergency shuttle"; port_angle = 90; preferred_direction = 2; width = 42},/turf/open/floor/plating,/area/shuttle/escape) +"bF" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bG" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bH" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bI" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bJ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bK" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bL" = (/obj/structure/sign/nanotrasen{pixel_x = -32; pixel_y = 32},/turf/open/floor/plasteel,/area/shuttle/escape) +"bM" = (/turf/open/floor/plasteel/brown{tag = "icon-brown (SOUTHWEST)"; icon_state = "brown"; dir = 10},/area/shuttle/escape) +"bN" = (/turf/open/floor/plasteel/brown,/area/shuttle/escape) +"bO" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel/brown,/area/shuttle/escape) +"bP" = (/obj/effect/turf_decal/delivery,/obj/structure/closet,/turf/open/floor/plasteel/brown{tag = "icon-brown (SOUTHEAST)"; icon_state = "brown"; dir = 6},/area/shuttle/escape) +"bQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/shuttle/escape) +"bR" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape) +"bS" = (/turf/open/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; dir = 4},/area/shuttle/escape) +"bT" = (/turf/open/floor/plasteel/neutral/side,/area/shuttle/escape) +"bU" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plasteel,/area/shuttle/escape) +"bV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel,/area/shuttle/escape) +"bW" = (/obj/structure/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bX" = (/obj/structure/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"bY" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plating,/area/shuttle/escape) +"bZ" = (/obj/structure/extinguisher_cabinet{pixel_x = -28},/turf/open/floor/plasteel,/area/shuttle/escape) +"ca" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel,/area/shuttle/escape) +"cb" = (/obj/structure/sign/bluecross_2{pixel_x = 32; pixel_y = -32},/turf/open/floor/plasteel,/area/shuttle/escape) +"cc" = (/obj/machinery/light,/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape) +"cd" = (/obj/machinery/light{dir = 4},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel,/area/shuttle/escape) +"ce" = (/obj/machinery/door/airlock/glass_medical{name = "Emergency Shuttle Medbay"},/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cf" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (WEST)"; icon_state = "neutralcorner"; dir = 8},/area/shuttle/escape) +"cg" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel,/area/shuttle/escape) +"ch" = (/mob/living/simple_animal/bot/medbot{name = "Speedy* Recovery"},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/shuttle/escape) +"ci" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"cj" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"ck" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"cl" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape) +"cm" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/wrench,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/shuttle/escape) +"cn" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"co" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/shuttle/escape) +"cp" = (/turf/open/floor/plasteel/white,/area/shuttle/escape) +"cq" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/open/floor/plasteel/white,/area/shuttle/escape) +"cr" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/turf/open/floor/plasteel/white,/area/shuttle/escape) +"cs" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/open/floor/plasteel/white,/area/shuttle/escape) +"ct" = (/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/shuttle/escape) +"cu" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/shuttle/escape) +"cv" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/shuttle/escape) +"cw" = (/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape) +"cx" = (/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/shuttle/escape) +"cy" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape) +"cz" = (/obj/machinery/computer/arcade,/turf/open/floor/plasteel/neutral,/area/shuttle/escape) +"cA" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cB" = (/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cC" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/obj/machinery/iv_drip,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cD" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape) +"cE" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cF" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/surgicaldrill,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/retractor,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/crowbar,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape) +"cH" = (/obj/machinery/computer/operating,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cI" = (/obj/structure/table/optable,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cJ" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape) +"cK" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/toxin,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/shuttle/escape) +"cL" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape) +"cM" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape) +"cN" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/shuttle/escape) +"cO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape) +"cP" = (/obj/machinery/door/airlock/glass_engineering{name = "Engine Room"; req_one_access_txt = "10;24"},/turf/open/floor/plasteel/yellow,/area/shuttle/escape) +"cQ" = (/obj/machinery/door/airlock{name = "Bathroom"},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cR" = (/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cS" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cT" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHWEST)"; icon_state = "yellow"; dir = 9},/area/shuttle/escape) +"cU" = (/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"cV" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/monitor,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"cW" = (/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/shuttle/escape) +"cX" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cY" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"cZ" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape) +"da" = (/turf/open/floor/plasteel/yellow/corner{tag = "icon-yellowcorner (WEST)"; icon_state = "yellowcorner"; dir = 8},/area/shuttle/escape) +"db" = (/turf/open/floor/plasteel/yellow/corner{tag = "icon-yellowcorner (EAST)"; icon_state = "yellowcorner"; dir = 4},/area/shuttle/escape) +"dc" = (/obj/structure/table,/obj/item/weapon/storage/box/metalfoam,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"dd" = (/obj/structure/table,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape) +"de" = (/obj/structure/table,/obj/item/stack/sheet/glass/fifty,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/shuttle/escape) +"df" = (/obj/structure/urinal{pixel_y = -32},/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"dg" = (/obj/machinery/light/small{dir = 4},/obj/machinery/recharge_station,/turf/open/floor/plasteel/freezer,/area/shuttle/escape) +"dh" = (/obj/structure/reagent_dispensers/watertank/high,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape) +"di" = (/obj/structure/sign/electricshock{pixel_x = 32},/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (EAST)"; icon_state = "yellow"; dir = 4},/area/shuttle/escape) +"dj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape) +"dk" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dl" = (/obj/structure/table,/obj/structure/sign/enginesafety{pixel_y = -32},/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dm" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dn" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"do" = (/obj/machinery/light,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape) +"dp" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHEAST)"; icon_state = "yellow"; dir = 6},/area/shuttle/escape) +"dq" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/plating,/area/shuttle/escape) +"dr" = (/turf/open/floor/plating,/area/shuttle/escape) +"ds" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/open/floor/plating,/area/shuttle/escape) +"dt" = (/obj/machinery/power/terminal{tag = "icon-term (EAST)"; icon_state = "term"; dir = 4},/turf/open/floor/plating,/area/shuttle/escape) +"du" = (/obj/machinery/power/smes/engineering,/turf/open/floor/plating,/area/shuttle/escape) +"dv" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/shuttle/escape) +"dw" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating,/area/shuttle/escape) +"dx" = (/obj/machinery/power/port_gen/pacman,/turf/open/floor/plating,/area/shuttle/escape) +"dy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/open/floor/plating/airless,/area/shuttle/escape) +"dz" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating/airless,/area/shuttle/escape) + +(1,1,1) = {" +aaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaa +aaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaa +aaaaababababacacacacacacacacababababaaaa +aaaaababadaeafagahaiajakalamanadababaaaa +aaaaababaoapaqarasatatauavawaxayababaaaa +aaabababazapapaAaBaCaCaDaEaxaxaFabababaa +aaabababaGaHaIaCaCaCaCaCaCaJaKaLabababaa +ababababaoaMaNaCaCaCaOaCaCaNaPaQabababab +abababababababababababaRaRababababababab +abaSaTaSabaUaVaWaXaYabaZbaabbbbcbbbcbbab +abbdbebfabbgbhbhbhbiacaZbaabbjbcbjbcbjab +abbdbebkacblblbmbibibnaZbaabbobcbobcboab +abbpbebebqblbrbrbrbibnaZbaabbsbtbtbtbuab +bvbebebkacbwbxbybxbzacaZbabAbBbcbCbcbDab +ababababababacacacabadaZbabAbBbcbCbcbDab +bEbcbcbabFbGbHbIbJbKaZbLbaabbMbNbObNbPab +abadbQbcbRbRbRbRbRbRbcbcbSadabababababab +aaacbcbcbTbTbTbTbTbcbcbTbTbTbTbTbUbVabaa +aaacbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +aaacbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +abadbQbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +bYbcbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +abbZbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +bYbcbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +abadbQbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa +aaabcabcbRbRbRbRbRbccbbRccbRbRbRbccdabaa +aaabcabcbTbTbTbTbTbcbcadabceacabacababaa +abadcfbabWbXbTbWbXaZcgabchcicjckclcmadab +abcnaZbabWbXbTbWbXaZbccecocpcqcrcsctcuab +accnaZbabWbXbTbWbXaZbcabcvcwcwcxcpcpcyac +acczaZbabWbXbTbWbXaZbcabcAcBcCcocpcpcDac +acczaZbabWbXbTbWbXaZbcabcEcBcFcocpcpcGac +accnaZbabWbXbTbWbXaZbcabcHcIcJcKcLcMcNab +accnaZbcccbRbRbRcObccgababababababababab +ababacacabaccPacadcabccQcRcRcRcRcRcQcSab +abcTcUcUcVcUcUcWadabababcXcRcRcRcYababab +abcZdabcbcbcbcdbdcdddeabcXdfdfdfcRcQdgab +abaddhdabcbcbcbcbcbcdiababababababababab +aaabaddjdkdldmdndndodpdqdrdrdsdtduababaa +aaababababababababababaddvdwdxdtduababaa +aaaaabdydydydydydyadaddydydydydydyabaaaa +aaaaabdzdzdzdzdzdzadaddzdzdzdzdzdzabaaaa +"} diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm new file mode 100644 index 0000000000..065d4d4bfc --- /dev/null +++ b/_maps/shuttles/whiteship_cere.dmm @@ -0,0 +1,73 @@ +"aa" = (/turf/open/space/basic,/area/space) +"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned) +"ac" = (/obj/machinery/door/airlock/titanium{name = "mech bay external airlock"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/docking_port/mobile{dheight = 0; dir = 2; dwidth = 8; height = 16; id = "whiteship"; launch_status = 0; name = "NT Recovery White-Ship"; port_angle = -90; preferred_direction = 1; roundstart_move = "whiteship_away"; width = 16},/turf/open/floor/plating,/area/shuttle/abandoned) +"ad" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (NORTH)"; icon_state = "propulsion"; dir = 1},/turf/open/floor/plating/airless,/area/shuttle/abandoned) +"ae" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port"; icon_state = "recharge_port"; dir = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"af" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ag" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ah" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"ai" = (/obj/effect/decal/cleanable/cobweb/cobweb2,/obj/structure/frame/machine,/obj/item/stack/cable_coil,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aj" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/shuttle/abandoned) +"ak" = (/obj/structure/mecha_wreckage/ripley,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/abandoned) +"al" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"am" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"an" = (/obj/effect/spawner/lootdrop{loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5); lootdoubles = 0; name = "25% mech 75% wreckage ripley spawner"},/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/abandoned) +"ao" = (/obj/machinery/computer/mech_bay_power_console,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ap" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aq" = (/obj/machinery/door/airlock/titanium{name = "mech bay"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ar" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/abandoned) +"as" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/stack/sheet/metal/fifty,/obj/item/stack/sheet/metal/fifty,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"at" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"au" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"av" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aw" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ax" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/toolbox/emergency/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"ay" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned) +"az" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/machinery/button/door{id = "cerewhiteleft"; name = "Cargo Blast Door Toggle"; pixel_x = -24},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aA" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aB" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aC" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aD" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/stack/sheet/glass/fifty,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aE" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/machinery/button/door{id = "cerewhiteright"; name = "Cargo Blast Door Toggle"; pixel_x = 24},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aF" = (/obj/machinery/door/poddoor{id = "cerewhiteleft"},/turf/open/floor/plating,/area/shuttle/abandoned) +"aG" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"aH" = (/obj/machinery/door/poddoor{id = "cerewhiteright"},/turf/open/floor/plating,/area/shuttle/abandoned) +"aI" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/weapon/storage/toolbox/mechanical/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/item/clothing/glasses/welding,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aJ" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/machinery/light,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aK" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned) +"aL" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aM" = (/obj/structure/ore_box,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aN" = (/obj/machinery/door/airlock/titanium{name = "cockpit"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aO" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned) +"aP" = (/obj/structure/table,/obj/item/device/gps{gpstag = "NTCONST1"; pixel_x = -1; pixel_y = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aQ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aR" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aS" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aT" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb/cobweb2,/obj/item/weapon/storage/firstaid/regular,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aU" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aV" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aW" = (/obj/structure/chair/comfy/black,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aX" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"aY" = (/turf/open/space,/area/space) +"aZ" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"ba" = (/obj/machinery/computer/shuttle/white_ship,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) +"bb" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 6},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned) + +(1,1,1) = {" +aaaaababababacababababaaaa +aaadabaeafagahagafaiabadaa +aaajabakagalamagaganabajaa +aaababaoagalamagagapababaa +adababababaqaraqababababad +ajababasatauahavawaxababaj +ayayazaAaAaBahauaCaDaEayay +aFahaGamamamamaGamamamaGaH +aFahaGahaGaGaGaGamamaGahaH +ayayaIaAaJaKaGaGaLavauayay +aaabaMababaNaraNababaOabaa +aaabababaPaQaRaSaTabababaa +aaabababaUaRaQaSaUabababaa +aaaaabaVaSaQaWaRaRaXabaaaa +aYaaabababaZbabbabababaaaa +aYaYaaaaabarararabaaaaaaaa +"} diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index f732287cf8..4a3618e941 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -81,9 +81,6 @@ #define DNA_MUTANTTAIL_BLOCK 17 #define DNA_MUTANTWING_BLOCK 18 #define DNA_WINGCOLOR_BLOCK 19 -//#define DNA_SUBSPECIES_BLOCK 20 -//#define DNA_TAUR_BLOCK 21 //Taurs will be tails for now, easier - Pooj - #define DNA_STRUC_ENZYMES_BLOCKS 19 #define DNA_UNIQUE_ENZYMES_LEN 32 @@ -128,9 +125,9 @@ #define EASYLIMBATTACHMENT 23 #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) -#define MUTCOLORS2 26 -#define MUTCOLORS3 27 +#define NO_UNDERWEAR 26 +#define MUTCOLORS2 27 +#define MUTCOLORS3 28 //citadel code -#define NOAROUSAL 28//Stops all arousal effects -#define NOGENITALS 29//Cannot create, use, or otherwise have genitals -//#define SUBSPECIES 28 \ No newline at end of file +#define NOAROUSAL 29//Stops all arousal effects +#define NOGENITALS 30//Cannot create, use, or otherwise have genitals \ No newline at end of file diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm index eb148e7b59..c33543ac4e 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -13,6 +13,10 @@ #define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current)) #define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current)) #define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current)) + +#define MC_AVG_FAST_UP_SLOW_DOWN(average, current) (average > current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current)) +#define MC_AVG_SLOW_UP_FAST_DOWN(average, current) (average < current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current)) + #define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;} #define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = 1;Processor.processing += Datum} @@ -20,39 +24,36 @@ //SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) -//subsystem should fire during pre-game lobby. -#define SS_FIRE_IN_LOBBY 1 - //subsystem does not initialize. -#define SS_NO_INIT 2 +#define SS_NO_INIT 1 //subsystem does not fire. // (like can_fire = 0, but keeps it from getting added to the processing subsystems list) // (Requires a MC restart to change) -#define SS_NO_FIRE 4 +#define SS_NO_FIRE 2 //subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) // SS_BACKGROUND has its own priority bracket -#define SS_BACKGROUND 8 +#define SS_BACKGROUND 4 //subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) -#define SS_NO_TICK_CHECK 16 +#define SS_NO_TICK_CHECK 8 //Treat wait as a tick count, not DS, run every wait ticks. // (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) -// (implies SS_FIRE_IN_LOBBY because of how it works) +// (implies all runlevels because of how it works) // (overrides SS_BACKGROUND) // This is designed for basically anything that works as a mini-mc (like SStimer) -#define SS_TICKER 32 +#define SS_TICKER 16 //keep the subsystem's timing on point by firing early if it fired late last fire because of lag // ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. -#define SS_KEEP_TIMING 64 +#define SS_KEEP_TIMING 32 //Calculate its next fire after its fired. // (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) // This flag overrides SS_KEEP_TIMING -#define SS_POST_FIRE_TIMING 128 +#define SS_POST_FIRE_TIMING 64 //SUBSYSTEM STATES #define SS_IDLE 0 //aint doing shit. diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index d30a2d098f..d8d5484ff5 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -1,3 +1,5 @@ -#define ANTAG_DATUM_CULT /datum/antagonist/cult -#define ANTAG_DATUM_CLOCKCULT /datum/antagonist/clockcult -#define ANTAG_DATUM_CLOCKCULT_SILENT /datum/antagonist/clockcult/silent \ No newline at end of file +#define ANTAG_DATUM_CULT /datum/antagonist/cult +#define ANTAG_DATUM_CULT_MASTER /datum/antagonist/cult/master +#define ANTAG_DATUM_CLOCKCULT /datum/antagonist/clockcult +#define ANTAG_DATUM_CLOCKCULT_SILENT /datum/antagonist/clockcult/silent +#define ANTAG_DATUM_DEVIL /datum/antagonist/devil \ No newline at end of file diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 733e21e503..0fa6a0f8d2 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -14,8 +14,9 @@ #define GAS_META 3 #define META_GAS_SPECIFIC_HEAT 1 #define META_GAS_NAME 2 -#define META_GAS_OVERLAY 4 #define META_GAS_MOLES_VISIBLE 3 +#define META_GAS_OVERLAY 4 +#define META_GAS_DANGER 5 //stuff you should probably leave well alone! //ATMOS @@ -169,4 +170,4 @@ #define ATMOS_PASS_NO 0 #define ATMOS_PASS_PROC -1 //ask CanAtmosPass() #define ATMOS_PASS_DENSITY -2 //just check density -#define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) ) \ No newline at end of file +#define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) ) diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm index 9c86e031ab..acc0cdc9ab 100644 --- a/code/__DEFINES/clockcult.dm +++ b/code/__DEFINES/clockcult.dm @@ -37,15 +37,15 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us #define JUDGEMENT_CV_REQ 300 //general component/cooldown things -#define SLAB_PRODUCTION_TIME 900 //how long(deciseconds) slabs require to produce a single component; defaults to 1 minute 30 seconds +#define SLAB_PRODUCTION_TIME 450 //how long(deciseconds) slabs require to produce a single component; defaults to 45 seconds -#define SLAB_SERVANT_SLOWDOWN 300 //how much each servant above 5 slows down slab-based generation; defaults to 30 seconds per sevant +#define SLAB_SERVANT_SLOWDOWN 150 //how much each servant above 5 slows down slab-based generation; defaults to 15 seconds per sevant -#define SLAB_SLOWDOWN_MAXIMUM 2700 //maximum slowdown from additional servants; defaults to 4 minutes 30 seconds +#define SLAB_SLOWDOWN_MAXIMUM 1350 //maximum slowdown from additional servants; defaults to 2 minutes 15 seconds -#define CACHE_PRODUCTION_TIME 600 //how long(deciseconds) caches require to produce a component; defaults to 1 minute +#define CACHE_PRODUCTION_TIME 300 //how long(deciseconds) caches require to produce a component; defaults to 30 seconds -#define ACTIVE_CACHE_SLOWDOWN 100 //how many additional deciseconds caches take to produce a component for each linked cache; defaults to 10 seconds +#define ACTIVE_CACHE_SLOWDOWN 50 //how many additional deciseconds caches take to produce a component for each linked cache; defaults to 5 seconds #define LOWER_PROB_PER_COMPONENT 10 //how much each component in the cache reduces the weight of getting another of that component type @@ -87,9 +87,9 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us #define GATEWAY_RATVAR_ARRIVAL 300 //when progress is at or above this, game over ratvar's here everybody go home -#define ARK_SUMMON_COST 3 //how many of each component an Ark costs to summon +#define ARK_SUMMON_COST 5 //how many of each component an Ark costs to summon -#define ARK_CONSUME_COST 7 //how many of each component an Ark needs to consume to activate +#define ARK_CONSUME_COST 15 //how many of each component an Ark needs to consume to activate //Objective text define #define CLOCKCULT_OBJECTIVE "Construct the Ark of the Clockwork Justicar and free Ratvar." diff --git a/code/__DEFINES/contracts.dm b/code/__DEFINES/contracts.dm index e2f4aff409..e740be79dd 100644 --- a/code/__DEFINES/contracts.dm +++ b/code/__DEFINES/contracts.dm @@ -3,6 +3,7 @@ #define CONTRACT_PRESTIGE "prestige" #define CONTRACT_MAGIC "magic" #define CONTRACT_REVIVE "revive" +#define CONTRACT_FRIEND "friend" #define CONTRACT_KNOWLEDGE "knowledge" #define CONTRACT_UNWILLING "unwilling" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 6745645115..b0742ae3ab 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -4,6 +4,8 @@ #define ALL ~0 //For convenience. #define NONE 0 +GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768)) + //FLAGS BITMASK #define STOPSPRESSUREDMAGE 1 //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere //To successfully stop you taking all pressure damage you must have both a suit and head item with this flag. diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 6d5310364f..82acf13dcf 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -1,43 +1,43 @@ - -#define ENGSEC (1<<0) - -#define CAPTAIN (1<<0) -#define HOS (1<<1) -#define WARDEN (1<<2) -#define DETECTIVE (1<<3) -#define OFFICER (1<<4) -#define CHIEF (1<<5) -#define ENGINEER (1<<6) -#define ATMOSTECH (1<<7) -#define ROBOTICIST (1<<8) -#define AI_JF (1<<9) -#define CYBORG (1<<10) - - -#define MEDSCI (1<<1) - -#define RD_JF (1<<0) -#define SCIENTIST (1<<1) -#define CHEMIST (1<<2) -#define CMO_JF (1<<3) -#define DOCTOR (1<<4) -#define GENETICIST (1<<5) -#define VIROLOGIST (1<<6) - - -#define CIVILIAN (1<<2) - -#define HOP (1<<0) -#define BARTENDER (1<<1) -#define BOTANIST (1<<2) -#define COOK (1<<3) -#define JANITOR (1<<4) -#define LIBRARIAN (1<<5) -#define QUARTERMASTER (1<<6) -#define CARGOTECH (1<<7) -#define MINER (1<<8) -#define LAWYER (1<<9) -#define CHAPLAIN (1<<10) -#define CLOWN (1<<11) -#define MIME (1<<12) + +#define ENGSEC (1<<0) + +#define CAPTAIN (1<<0) +#define HOS (1<<1) +#define WARDEN (1<<2) +#define DETECTIVE (1<<3) +#define OFFICER (1<<4) +#define CHIEF (1<<5) +#define ENGINEER (1<<6) +#define ATMOSTECH (1<<7) +#define ROBOTICIST (1<<8) +#define AI_JF (1<<9) +#define CYBORG (1<<10) + + +#define MEDSCI (1<<1) + +#define RD_JF (1<<0) +#define SCIENTIST (1<<1) +#define CHEMIST (1<<2) +#define CMO_JF (1<<3) +#define DOCTOR (1<<4) +#define GENETICIST (1<<5) +#define VIROLOGIST (1<<6) + + +#define CIVILIAN (1<<2) + +#define HOP (1<<0) +#define BARTENDER (1<<1) +#define BOTANIST (1<<2) +#define COOK (1<<3) +#define JANITOR (1<<4) +#define CURATOR (1<<5) +#define QUARTERMASTER (1<<6) +#define CARGOTECH (1<<7) +#define MINER (1<<8) +#define LAWYER (1<<9) +#define CHAPLAIN (1<<10) +#define CLOWN (1<<11) +#define MIME (1<<12) #define ASSISTANT (1<<13) \ No newline at end of file diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index e7818d7bf3..dc2ac19e65 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -2,3 +2,6 @@ #define TONGUELESS_SPEECH 2 #define LANGUAGE_HIDE_ICON_IF_UNDERSTOOD 4 #define LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD 8 + +#define LANGUAGE_KNOWN "language_known" +#define LANGUAGE_SHADOWED "language_shadowed" diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index fd98a68e07..7cfed2b483 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -16,10 +16,10 @@ #define LIGHTING_BASE_MATRIX \ list \ ( \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ - LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ + 1, 1, 1, 0, \ 0, 0, 0, 1 \ ) \ @@ -78,4 +78,11 @@ #define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled #define DYNAMIC_LIGHTING_FORCED 2 //dynamic lighting enabled even if the area doesn't require power #define DYNAMIC_LIGHTING_IFSTARLIGHT 3 //dynamic lighting enabled only if starlight is. -#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting \ No newline at end of file +#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting + + +//code assumes higher numbers override lower numbers. +#define LIGHTING_NO_UPDATE 0 +#define LIGHTING_VIS_UPDATE 1 +#define LIGHTING_CHECK_UPDATE 2 +#define LIGHTING_FORCE_UPDATE 3 \ No newline at end of file diff --git a/code/__DEFINES/menu.dm b/code/__DEFINES/menu.dm new file mode 100644 index 0000000000..2730adf87c --- /dev/null +++ b/code/__DEFINES/menu.dm @@ -0,0 +1,3 @@ +#define CHECKBOX_NONE 0 +#define CHECKBOX_GROUP 1 +#define CHECKBOX_TOGGLE 2 \ No newline at end of file diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index bc5816dbb9..69bc163234 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -31,5 +31,12 @@ ///////////// #define STATUS_EFFECT_SIGILMARK /datum/status_effect/sigil_mark +#define STATUS_EFFECT_BELLIGERENT /datum/status_effect/belligerent //forces the affected to walk, doing damage if they try to run + +#define STATUS_EFFECT_MANIAMOTOR /datum/status_effect/maniamotor //disrupts, damages, and confuses the affected as long as they're in range of the motor +#define MAX_MANIA_SEVERITY 100 //how high the mania severity can go +#define MANIA_DAMAGE_TO_CONVERT 90 //how much damage is required before it'll convert affected targets #define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. + +#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes \ No newline at end of file diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index c0b9a20d3b..66f5960d98 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -46,6 +46,7 @@ #define INIT_ORDER_TICKER 13 #define INIT_ORDER_MAPPING 12 #define INIT_ORDER_ATOMS 11 +#define INIT_ORDER_LANGUAGE 10 #define INIT_ORDER_MACHINES 9 #define INIT_ORDER_SHUTTLE 3 #define INIT_ORDER_TIMER 1 @@ -60,3 +61,13 @@ #define INIT_ORDER_LIGHTING -20 #define INIT_ORDER_SQUEAK -40 #define INIT_ORDER_PERSISTENCE -100 + +// SS runlevels + +#define RUNLEVEL_INIT 0 +#define RUNLEVEL_LOBBY 1 +#define RUNLEVEL_SETUP 2 +#define RUNLEVEL_GAME 4 +#define RUNLEVEL_POSTGAME 8 + +#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) \ No newline at end of file diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index c0797819bc..4215151058 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -1,490 +1,491 @@ -/* - * Holds procs to help with list operations - * Contains groups: - * Misc - * Sorting - */ - -/* - * Misc - */ - -//Returns a list in plain english as a string -/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) - var/total = input.len - if (!total) - return "[nothing_text]" - else if (total == 1) - return "[input[1]]" - else if (total == 2) - return "[input[1]][and_text][input[2]]" - else - var/output = "" - var/index = 1 - while (index < total) - if (index == total - 1) - comma_text = final_comma_text - - output += "[input[index]][comma_text]" - index++ - - return "[output][and_text][input[index]]" - -//Returns list element or null. Should prevent "index out of bounds" error. -/proc/listgetindex(list/L, index) - if(istype(L)) - if(isnum(index) && IsInteger(index)) - if(IsInRange(index,1,L.len)) - return L[index] - else if(index in L) - return L[index] - return - -//Return either pick(list) or null if list is not of type /list or is empty -/proc/safepick(list/L) - if(istype(L) && L.len) - return pick(L) - -//Checks if the list is empty -/proc/isemptylist(list/L) - if(!L.len) - return 1 - return 0 - -//Checks for specific types in a list -/proc/is_type_in_list(atom/A, list/L) - if(!L || !L.len || !A) - return 0 - for(var/type in L) - if(istype(A, type)) - return 1 - return 0 - -//Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches') -/proc/is_type_in_typecache(atom/A, list/L) - if(!L || !L.len || !A) - - return 0 - if(ispath(A)) - . = L[A] - else - . = L[A.type] - -//Checks for a string in a list -/proc/is_string_in_list(string, list/L) - if(!L || !L.len || !string) - return - for(var/V in L) - if(string == V) - return 1 - return - -//Removes a string from a list -/proc/remove_strings_from_list(string, list/L) - if(!L || !L.len || !string) - return - for(var/V in L) - if(V == string) - L -= V //No return here so that it removes all strings of that type - return - -//returns a new list with only atoms that are in typecache L -/proc/typecache_filter_list(list/atoms, list/typecache) - . = list() - for (var/thing in atoms) - var/atom/A = thing - if (typecache[A.type]) - . += A - -//Like typesof() or subtypesof(), but returns a typecache instead of a list -/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE) - if(ispath(path)) - var/list/types = list() - if(only_root_path) - types = list(path) - else - types = ignore_root_path ? subtypesof(path) : typesof(path) - var/list/L = list() - for(var/T in types) - L[T] = TRUE - return L - else if(islist(path)) - var/list/pathlist = path - var/list/L = list() - if(ignore_root_path) - for(var/P in pathlist) - for(var/T in subtypesof(P)) - L[T] = TRUE - else - for(var/P in pathlist) - if(only_root_path) - L[P] = TRUE - else - for(var/T in typesof(P)) - L[T] = TRUE - return L - -//Empties the list by setting the length to 0. Hopefully the elements get garbage collected -/proc/clearlist(list/list) - if(istype(list)) - list.len = 0 - return - -//Removes any null entries from the list -/proc/listclearnulls(list/L) - var/list/N = new(L.len) - L -= N - -/* - * Returns list containing all the entries from first list that are not present in second. - * If skiprep = 1, repeated elements are treated as one. - * If either of arguments is not a list, returns null - */ -/proc/difflist(list/first, list/second, skiprep=0) - if(!islist(first) || !islist(second)) - return - var/list/result = new - if(skiprep) - for(var/e in first) - if(!(e in result) && !(e in second)) - result += e - else - result = first - second - return result - -/* - * Returns list containing entries that are in either list but not both. - * If skipref = 1, repeated elements are treated as one. - * If either of arguments is not a list, returns null - */ -/proc/uniquemergelist(list/first, list/second, skiprep=0) - if(!islist(first) || !islist(second)) - return - var/list/result = new - if(skiprep) - result = difflist(first, second, skiprep)+difflist(second, first, skiprep) - else - result = first ^ second - return result - -//Pretends to pick an element based on its weight but really just seems to pick a random element. -/proc/pickweight(list/L) - var/total = 0 - var/item - for (item in L) - if (!L[item]) - L[item] = 1 - total += L[item] - - total = rand(1, total) - for (item in L) - total -=L [item] - if (total <= 0) - return item - - return null - -//Pick a random element from the list and remove it from the list. -/proc/pick_n_take(list/L) - if(L.len) - var/picked = rand(1,L.len) - . = L[picked] - L.Cut(picked,picked+1) //Cut is far more efficient that Remove() - -//Returns the top(last) element from the list and removes it from the list (typical stack function) -/proc/pop(list/L) - if(L.len) - . = L[L.len] - L.len-- - -/proc/popleft(list/L) - if(L.len) - . = L[1] - L.Cut(1,2) - -/proc/sorted_insert(list/L, thing, comparator) - var/pos = L.len - while(pos > 0 && call(comparator)(thing, L[pos]) > 0) - pos-- - L.Insert(pos+1, thing) - -// Returns the next item in a list -/proc/next_list_item(item, list/L) - var/i - i = L.Find(item) - if(i == L.len) - i = 1 - else - i++ - return L[i] - -// Returns the previous item in a list -/proc/previous_list_item(item, list/L) - var/i - i = L.Find(item) - if(i == 1) - i = L.len - else - i-- - return L[i] - -//Randomize: Return the list in a random order -/proc/shuffle(list/L) - if(!L) - return - L = L.Copy() - - for(var/i=1, i= 0 ? /proc/cmp_ckey_asc : /proc/cmp_ckey_dsc) - -//Specifically for record datums in a list. -/proc/sortRecord(list/L, field = "name", order = 1) - GLOB.cmp_field = field - return sortTim(L, order >= 0 ? /proc/cmp_records_asc : /proc/cmp_records_dsc) - -//any value in a list -/proc/sortList(list/L, cmp=/proc/cmp_text_asc) - return sortTim(L.Copy(), cmp) - -//uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead -/proc/sortNames(list/L, order=1) - return sortTim(L, order >= 0 ? /proc/cmp_name_asc : /proc/cmp_name_dsc) - - -//Converts a bitfield to a list of numbers (or words if a wordlist is provided) -/proc/bitfield2list(bitfield = 0, list/wordlist) - var/list/r = list() - if(istype(wordlist,/list)) - var/max = min(wordlist.len,16) - var/bit = 1 - for(var/i=1, i<=max, i++) - if(bitfield & bit) - r += wordlist[i] - bit = bit << 1 - else - for(var/bit=1, bit<=65535, bit = bit << 1) - if(bitfield & bit) - r += bit - - return r - -// Returns the key based on the index -#define KEYBYINDEX(L, index) (((index <= L:len) && (index > 0)) ? L[index] : null) - -/proc/count_by_type(list/L, type) - var/i = 0 - for(var/T in L) - if(istype(T, type)) - i++ - return i - -/proc/find_record(field, value, list/L) - for(var/datum/data/record/R in L) - if(R.fields[field] == value) - return R - - -//Move a single element from position fromIndex within a list, to position toIndex -//All elements in the range [1,toIndex) before the move will be before the pivot afterwards -//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards -//In other words, it's as if the range [fromIndex,toIndex) have been rotated using a <<< operation common to other languages. -//fromIndex and toIndex must be in the range [1,L.len+1] -//This will preserve associations ~Carnie -/proc/moveElement(list/L, fromIndex, toIndex) - if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move - return - if(fromIndex > toIndex) - ++fromIndex //since a null will be inserted before fromIndex, the index needs to be nudged right by one - - L.Insert(toIndex, null) - L.Swap(fromIndex, toIndex) - L.Cut(fromIndex, fromIndex+1) - - -//Move elements [fromIndex,fromIndex+len) to [toIndex-len, toIndex) -//Same as moveElement but for ranges of elements -//This will preserve associations ~Carnie -/proc/moveRange(list/L, fromIndex, toIndex, len=1) - var/distance = abs(toIndex - fromIndex) - if(len >= distance) //there are more elements to be moved than the distance to be moved. Therefore the same result can be achieved (with fewer operations) by moving elements between where we are and where we are going. The result being, our range we are moving is shifted left or right by dist elements - if(fromIndex <= toIndex) - return //no need to move - fromIndex += len //we want to shift left instead of right - - for(var/i=0, i toIndex) - fromIndex += len - - for(var/i=0, i distance) //there is an overlap, therefore swapping each element will require more swaps than inserting new elements - if(fromIndex < toIndex) - toIndex += len - else - fromIndex += len - - for(var/i=0, i fromIndex) - var/a = toIndex - toIndex = fromIndex - fromIndex = a - - for(var/i=0, i 512 -#error Remie said that lummox was adding a way to get a lists -#error contents via list.values, if that is true remove this -#error otherwise, update the version and bug lummox -#elseif -//Flattens a keyed list into a list of it's contents -/proc/flatten_list(list/key_list) - if(!islist(key_list)) - return null - . = list() - for(var/key in key_list) - . |= key_list[key] - -//Picks from the list, with some safeties, and returns the "default" arg if it fails -#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default) - -#define LAZYINITLIST(L) if (!L) L = list() - -#define UNSETEMPTY(L) if (L && !L.len) L = null -#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } -#define LAZYADD(L, I) if(!L) { L = list(); } L += I; -#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) -#define LAZYLEN(L) length(L) -#define LAZYCLEARLIST(L) if(L) L.Cut() - -/* Definining a counter as a series of key -> numeric value entries - - * All these procs modify in place. -*/ - -/proc/counterlist_scale(list/L, scalar) - var/list/out = list() - for(var/key in L) - out[key] = L[key] * scalar - . = out - -/proc/counterlist_sum(list/L) - . = 0 - for(var/key in L) - . += L[key] - -/proc/counterlist_normalise(list/L) - var/avg = counterlist_sum(L) - if(avg != 0) - . = counterlist_scale(L, 1 / avg) - else - . = L - -/proc/counterlist_combine(list/L1, list/L2) - for(var/key in L2) - var/other_value = L2[key] - if(key in L1) - L1[key] += other_value - else - L1[key] = other_value +/* + * Holds procs to help with list operations + * Contains groups: + * Misc + * Sorting + */ + +/* + * Misc + */ + +//Returns a list in plain english as a string +/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) + var/total = input.len + if (!total) + return "[nothing_text]" + else if (total == 1) + return "[input[1]]" + else if (total == 2) + return "[input[1]][and_text][input[2]]" + else + var/output = "" + var/index = 1 + while (index < total) + if (index == total - 1) + comma_text = final_comma_text + + output += "[input[index]][comma_text]" + index++ + + return "[output][and_text][input[index]]" + +//Returns list element or null. Should prevent "index out of bounds" error. +/proc/listgetindex(list/L, index) + if(istype(L)) + if(isnum(index) && IsInteger(index)) + if(IsInRange(index,1,L.len)) + return L[index] + else if(index in L) + return L[index] + return + +//Return either pick(list) or null if list is not of type /list or is empty +/proc/safepick(list/L) + if(istype(L) && L.len) + return pick(L) + +//Checks if the list is empty +/proc/isemptylist(list/L) + if(!L.len) + return 1 + return 0 + +//Checks for specific types in a list +/proc/is_type_in_list(atom/A, list/L) + if(!L || !L.len || !A) + return 0 + for(var/type in L) + if(istype(A, type)) + return 1 + return 0 + +//Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches') +/proc/is_type_in_typecache(atom/A, list/L) + if(!L || !L.len || !A) + + return 0 + if(ispath(A)) + . = L[A] + else + . = L[A.type] + +//Checks for a string in a list +/proc/is_string_in_list(string, list/L) + if(!L || !L.len || !string) + return + for(var/V in L) + if(string == V) + return 1 + return + +//Removes a string from a list +/proc/remove_strings_from_list(string, list/L) + if(!L || !L.len || !string) + return + for(var/V in L) + if(V == string) + L -= V //No return here so that it removes all strings of that type + return + +//returns a new list with only atoms that are in typecache L +/proc/typecache_filter_list(list/atoms, list/typecache) + . = list() + for (var/thing in atoms) + var/atom/A = thing + if (typecache[A.type]) + . += A + +//Like typesof() or subtypesof(), but returns a typecache instead of a list +/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE) + if(ispath(path)) + var/list/types = list() + if(only_root_path) + types = list(path) + else + types = ignore_root_path ? subtypesof(path) : typesof(path) + var/list/L = list() + for(var/T in types) + L[T] = TRUE + return L + else if(islist(path)) + var/list/pathlist = path + var/list/L = list() + if(ignore_root_path) + for(var/P in pathlist) + for(var/T in subtypesof(P)) + L[T] = TRUE + else + for(var/P in pathlist) + if(only_root_path) + L[P] = TRUE + else + for(var/T in typesof(P)) + L[T] = TRUE + return L + +//Empties the list by setting the length to 0. Hopefully the elements get garbage collected +/proc/clearlist(list/list) + if(istype(list)) + list.len = 0 + return + +//Removes any null entries from the list +/proc/listclearnulls(list/L) + var/list/N = new(L.len) + L -= N + +/* + * Returns list containing all the entries from first list that are not present in second. + * If skiprep = 1, repeated elements are treated as one. + * If either of arguments is not a list, returns null + */ +/proc/difflist(list/first, list/second, skiprep=0) + if(!islist(first) || !islist(second)) + return + var/list/result = new + if(skiprep) + for(var/e in first) + if(!(e in result) && !(e in second)) + result += e + else + result = first - second + return result + +/* + * Returns list containing entries that are in either list but not both. + * If skipref = 1, repeated elements are treated as one. + * If either of arguments is not a list, returns null + */ +/proc/uniquemergelist(list/first, list/second, skiprep=0) + if(!islist(first) || !islist(second)) + return + var/list/result = new + if(skiprep) + result = difflist(first, second, skiprep)+difflist(second, first, skiprep) + else + result = first ^ second + return result + +//Pretends to pick an element based on its weight but really just seems to pick a random element. +/proc/pickweight(list/L) + var/total = 0 + var/item + for (item in L) + if (!L[item]) + L[item] = 1 + total += L[item] + + total = rand(1, total) + for (item in L) + total -=L [item] + if (total <= 0) + return item + + return null + +//Pick a random element from the list and remove it from the list. +/proc/pick_n_take(list/L) + if(L.len) + var/picked = rand(1,L.len) + . = L[picked] + L.Cut(picked,picked+1) //Cut is far more efficient that Remove() + +//Returns the top(last) element from the list and removes it from the list (typical stack function) +/proc/pop(list/L) + if(L.len) + . = L[L.len] + L.len-- + +/proc/popleft(list/L) + if(L.len) + . = L[1] + L.Cut(1,2) + +/proc/sorted_insert(list/L, thing, comparator) + var/pos = L.len + while(pos > 0 && call(comparator)(thing, L[pos]) > 0) + pos-- + L.Insert(pos+1, thing) + +// Returns the next item in a list +/proc/next_list_item(item, list/L) + var/i + i = L.Find(item) + if(i == L.len) + i = 1 + else + i++ + return L[i] + +// Returns the previous item in a list +/proc/previous_list_item(item, list/L) + var/i + i = L.Find(item) + if(i == 1) + i = L.len + else + i-- + return L[i] + +//Randomize: Return the list in a random order +/proc/shuffle(list/L) + if(!L) + return + L = L.Copy() + + for(var/i=1, i= 0 ? /proc/cmp_ckey_asc : /proc/cmp_ckey_dsc) + +//Specifically for record datums in a list. +/proc/sortRecord(list/L, field = "name", order = 1) + GLOB.cmp_field = field + return sortTim(L, order >= 0 ? /proc/cmp_records_asc : /proc/cmp_records_dsc) + +//any value in a list +/proc/sortList(list/L, cmp=/proc/cmp_text_asc) + return sortTim(L.Copy(), cmp) + +//uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead +/proc/sortNames(list/L, order=1) + return sortTim(L, order >= 0 ? /proc/cmp_name_asc : /proc/cmp_name_dsc) + + +//Converts a bitfield to a list of numbers (or words if a wordlist is provided) +/proc/bitfield2list(bitfield = 0, list/wordlist) + var/list/r = list() + if(istype(wordlist,/list)) + var/max = min(wordlist.len,16) + var/bit = 1 + for(var/i=1, i<=max, i++) + if(bitfield & bit) + r += wordlist[i] + bit = bit << 1 + else + for(var/bit=1, bit<=65535, bit = bit << 1) + if(bitfield & bit) + r += bit + + return r + +// Returns the key based on the index +#define KEYBYINDEX(L, index) (((index <= L:len) && (index > 0)) ? L[index] : null) + +/proc/count_by_type(list/L, type) + var/i = 0 + for(var/T in L) + if(istype(T, type)) + i++ + return i + +/proc/find_record(field, value, list/L) + for(var/datum/data/record/R in L) + if(R.fields[field] == value) + return R + + +//Move a single element from position fromIndex within a list, to position toIndex +//All elements in the range [1,toIndex) before the move will be before the pivot afterwards +//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards +//In other words, it's as if the range [fromIndex,toIndex) have been rotated using a <<< operation common to other languages. +//fromIndex and toIndex must be in the range [1,L.len+1] +//This will preserve associations ~Carnie +/proc/moveElement(list/L, fromIndex, toIndex) + if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move + return + if(fromIndex > toIndex) + ++fromIndex //since a null will be inserted before fromIndex, the index needs to be nudged right by one + + L.Insert(toIndex, null) + L.Swap(fromIndex, toIndex) + L.Cut(fromIndex, fromIndex+1) + + +//Move elements [fromIndex,fromIndex+len) to [toIndex-len, toIndex) +//Same as moveElement but for ranges of elements +//This will preserve associations ~Carnie +/proc/moveRange(list/L, fromIndex, toIndex, len=1) + var/distance = abs(toIndex - fromIndex) + if(len >= distance) //there are more elements to be moved than the distance to be moved. Therefore the same result can be achieved (with fewer operations) by moving elements between where we are and where we are going. The result being, our range we are moving is shifted left or right by dist elements + if(fromIndex <= toIndex) + return //no need to move + fromIndex += len //we want to shift left instead of right + + for(var/i=0, i toIndex) + fromIndex += len + + for(var/i=0, i distance) //there is an overlap, therefore swapping each element will require more swaps than inserting new elements + if(fromIndex < toIndex) + toIndex += len + else + fromIndex += len + + for(var/i=0, i fromIndex) + var/a = toIndex + toIndex = fromIndex + fromIndex = a + + for(var/i=0, i 512 +#error Remie said that lummox was adding a way to get a lists +#error contents via list.values, if that is true remove this +#error otherwise, update the version and bug lummox +#elseif +//Flattens a keyed list into a list of it's contents +/proc/flatten_list(list/key_list) + if(!islist(key_list)) + return null + . = list() + for(var/key in key_list) + . |= key_list[key] + +//Picks from the list, with some safeties, and returns the "default" arg if it fails +#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default) + +#define LAZYINITLIST(L) if (!L) L = list() + +#define UNSETEMPTY(L) if (L && !L.len) L = null +#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } +#define LAZYADD(L, I) if(!L) { L = list(); } L += I; +#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) +#define LAZYLEN(L) length(L) +#define LAZYCLEARLIST(L) if(L) L.Cut() +#define SANITIZE_LIST(L) ( islist(L) ? L : list() ) + +/* Definining a counter as a series of key -> numeric value entries + + * All these procs modify in place. +*/ + +/proc/counterlist_scale(list/L, scalar) + var/list/out = list() + for(var/key in L) + out[key] = L[key] * scalar + . = out + +/proc/counterlist_sum(list/L) + . = 0 + for(var/key in L) + . += L[key] + +/proc/counterlist_normalise(list/L) + var/avg = counterlist_sum(L) + if(avg != 0) + . = counterlist_scale(L, 1 / avg) + else + . = L + +/proc/counterlist_combine(list/L1, list/L2) + for(var/key in L2) + var/other_value = L2[key] + if(key in L1) + L1[key] += other_value + else + L1[key] = other_value diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 2785ba896f..a2a878211a 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -20,13 +20,13 @@ /proc/log_admin(text) GLOB.admin_log.Add(text) if (config.log_admin) - GLOB.diary << "\[[time_stamp()]]ADMIN: [text]" + GLOB.world_game_log << "\[[time_stamp()]]ADMIN: [text]" //Items using this proc are stripped from public logs - use with caution /proc/log_admin_private(text) GLOB.admin_log.Add(text) if (config.log_admin) - GLOB.diary << "\[[time_stamp()]]ADMINPRIVATE: [text]" + GLOB.world_game_log << "\[[time_stamp()]]ADMINPRIVATE: [text]" /proc/log_adminsay(text) if (config.log_adminchat) @@ -38,67 +38,64 @@ /proc/log_game(text) if (config.log_game) - GLOB.diary << "\[[time_stamp()]]GAME: [text]" + GLOB.world_game_log << "\[[time_stamp()]]GAME: [text]" /proc/log_vote(text) if (config.log_vote) - GLOB.diary << "\[[time_stamp()]]VOTE: [text]" + GLOB.world_game_log << "\[[time_stamp()]]VOTE: [text]" /proc/log_access(text) if (config.log_access) - GLOB.diary << "\[[time_stamp()]]ACCESS: [text]" + GLOB.world_game_log << "\[[time_stamp()]]ACCESS: [text]" /proc/log_say(text) if (config.log_say) - GLOB.diary << "\[[time_stamp()]]SAY: [text]" + GLOB.world_game_log << "\[[time_stamp()]]SAY: [text]" /proc/log_prayer(text) if (config.log_prayer) - GLOB.diary << "\[[time_stamp()]]PRAY: [text]" + GLOB.world_game_log << "\[[time_stamp()]]PRAY: [text]" /proc/log_law(text) if (config.log_law) - GLOB.diary << "\[[time_stamp()]]LAW: [text]" + GLOB.world_game_log << "\[[time_stamp()]]LAW: [text]" /proc/log_ooc(text) if (config.log_ooc) - GLOB.diary << "\[[time_stamp()]]OOC: [text]" + GLOB.world_game_log << "\[[time_stamp()]]OOC: [text]" /proc/log_whisper(text) if (config.log_whisper) - GLOB.diary << "\[[time_stamp()]]WHISPER: [text]" + GLOB.world_game_log << "\[[time_stamp()]]WHISPER: [text]" /proc/log_emote(text) if (config.log_emote) - GLOB.diary << "\[[time_stamp()]]EMOTE: [text]" + GLOB.world_game_log << "\[[time_stamp()]]EMOTE: [text]" /proc/log_attack(text) if (config.log_attack) - GLOB.diaryofmeanpeople << "\[[time_stamp()]]ATTACK: [text]" + GLOB.world_attack_log << "\[[time_stamp()]]ATTACK: [text]" /proc/log_pda(text) if (config.log_pda) - GLOB.diary << "\[[time_stamp()]]PDA: [text]" + GLOB.world_game_log << "\[[time_stamp()]]PDA: [text]" /proc/log_comment(text) if (config.log_pda) //reusing the PDA option because I really don't think news comments are worth a config option - GLOB.diary << "\[[time_stamp()]]COMMENT: [text]" + GLOB.world_game_log << "\[[time_stamp()]]COMMENT: [text]" /proc/log_chat(text) if (config.log_pda) - GLOB.diary << "\[[time_stamp()]]CHAT: [text]" + GLOB.world_game_log << "\[[time_stamp()]]CHAT: [text]" /proc/log_sql(text) if(config.sql_enabled) - GLOB.diary << "\[[time_stamp()]]SQL: [text]" + GLOB.world_game_log << "\[[time_stamp()]]SQL: [text]" //This replaces world.log so it displays both in DD and the file /proc/log_world(text) - if(config && config.log_runtimes) - world.log = GLOB.runtime_diary - world.log << text - world.log = null + GLOB.world_runtime_log << text world.log << text // Helper procs for building detailed log lines diff --git a/code/__HELPERS/bandetect.dm b/code/__HELPERS/bandetect.dm deleted file mode 100644 index 19c0d37838..0000000000 --- a/code/__HELPERS/bandetect.dm +++ /dev/null @@ -1,37 +0,0 @@ -#define YOUNG 4 - - -/client/proc/join_date_check(y,m,d) - var/datum/DBQuery/query_datediff = SSdbcore.NewQuery("SELECT DATEDIFF(Now(),'[y]-[m]-[d]')") - - if(!query_datediff.Execute()) - return FALSE - - if(query_datediff.NextRow()) - var/diff = text2num(query_datediff.item[1]) - if(config.use_account_age_for_jobs) - player_age = max(0,diff) //So job code soesn't freak out if they are time traveling. - if(diff < YOUNG) - var/msg = "(IP: [address], ID: [computer_id]) is a new BYOND account made on [y]-[m]-[d]." - if(diff < 0) - msg += " They are also apparently from the future." - message_admins("[key_name_admin(src)] [msg]") - return TRUE -#undef YOUNG - - -/client/proc/findJoinDate() - var/http[] = world.Export("http://byond.com/members/[src.ckey]?format=text") - if(!http) - log_world("Failed to connect to byond age check for [src.ckey]") - return FALSE - - var/F = file2text(http["CONTENT"]) - if(F) - var/regex/R = regex("joined = \"(\\d{4})-(\\d{2})-(\\d{2})\"") - if(!R.Find(F)) - CRASH("Age check regex failed") - var/y = R.group[1] - var/m = R.group[2] - var/d = R.group[3] - return join_date_check(y,m,d) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 6bc79fb7d5..c7ee4e93f8 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -1,538 +1,555 @@ -//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a -#define RANGE_TURFS(RADIUS, CENTER) \ - block( \ - locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \ - locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \ - ) - -#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL)) - -/proc/get_area(atom/A) - if (!istype(A)) - return - for(A, A && !isarea(A), A=A.loc); //semicolon is for the empty statement - return A - -/proc/get_area_name(atom/X) - var/area/Y = get_area(X) - return Y.name - -/proc/get_area_by_name(N) //get area by its name - for(var/area/A in world) - if(A.name == N) - return A - return 0 - -/proc/get_areas_in_range(dist=0, atom/center=usr) - if(!dist) - var/turf/T = get_turf(center) - return T ? list(T.loc) : list() - if(!center) - return list() - - var/list/turfs = RANGE_TURFS(dist, center) - var/list/areas = list() - for(var/V in turfs) - var/turf/T = V - areas |= T.loc - return areas - -/proc/get_adjacent_areas(atom/center) - . = list(get_area(get_ranged_target_turf(center, NORTH, 1)), - get_area(get_ranged_target_turf(center, SOUTH, 1)), - get_area(get_ranged_target_turf(center, EAST, 1)), - get_area(get_ranged_target_turf(center, WEST, 1))) - listclearnulls(.) - -/proc/get_open_turf_in_dir(atom/center, dir) - var/turf/open/T = get_ranged_target_turf(center, dir, 1) - if(istype(T)) - return T - -/proc/get_adjacent_open_turfs(atom/center) - . = list(get_open_turf_in_dir(center, NORTH), - get_open_turf_in_dir(center, SOUTH), - get_open_turf_in_dir(center, EAST), - get_open_turf_in_dir(center, WEST)) - listclearnulls(.) - -/proc/get_adjacent_open_areas(atom/center) - . = list() - var/list/adjacent_turfs = get_adjacent_open_turfs(center) - for(var/I in adjacent_turfs) - . |= get_area(I) - -// Like view but bypasses luminosity check - -/proc/get_hear(range, atom/source) - - var/lum = source.luminosity - source.luminosity = 6 - - var/list/heard = view(range, source) - source.luminosity = lum - - return heard - -/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon) - var/area/our_area = get_area(the_area) - for(var/C in GLOB.living_mob_list) - if(!istype(C, check_type)) - continue - if(C == must_be_alone) - continue - if(our_area == get_area(C)) - return 0 - return 1 - -//We used to use linear regression to approximate the answer, but Mloc realized this was actually faster. -//And lo and behold, it is, and it's more accurate to boot. -/proc/cheap_hypotenuse(Ax,Ay,Bx,By) - return sqrt(abs(Ax - Bx)**2 + abs(Ay - By)**2) //A squared + B squared = C squared - -/proc/circlerange(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/atom/T in range(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - - //turfs += centerturf - return turfs - -/proc/circleview(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/atoms = new/list() - var/rsq = radius * (radius+0.5) - - for(var/atom/A in view(radius, centerturf)) - var/dx = A.x - centerturf.x - var/dy = A.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - atoms += A - - //turfs += centerturf - return atoms - -/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) - var/dx = Loc1.x - Loc2.x - var/dy = Loc1.y - Loc2.y - - var/dist = sqrt(dx**2 + dy**2) - - return dist - -/proc/circlerangeturfs(center=usr,radius=3) - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/turf/T in range(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - return turfs - -/proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()? - - var/turf/centerturf = get_turf(center) - var/list/turfs = new/list() - var/rsq = radius * (radius+0.5) - - for(var/turf/T in view(radius, centerturf)) - var/dx = T.x - centerturf.x - var/dy = T.y - centerturf.y - if(dx*dx + dy*dy <= rsq) - turfs += T - return turfs - - -//This is the new version of recursive_mob_check, used for say(). -//The other proc was left intact because morgue trays use it. -//Sped this up again for real this time -/proc/recursive_hear_check(O) - var/list/processing_list = list(O) - . = list() - while(processing_list.len) - var/atom/A = processing_list[1] - if(A.flags & HEAR) - . += A - processing_list.Cut(1, 2) - processing_list += A.contents - -// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy. -//No need for a recursive limit either -/proc/recursive_mob_check(atom/O,client_check=1,sight_check=1,include_radio=1) - - var/list/processing_list = list(O) - var/list/processed_list = list() - var/list/found_mobs = list() - - while(processing_list.len) - - var/atom/A = processing_list[1] - var/passed = 0 - - if(ismob(A)) - var/mob/A_tmp = A - passed=1 - - if(client_check && !A_tmp.client) - passed=0 - - if(sight_check && !isInSight(A_tmp, O)) - passed=0 - - else if(include_radio && istype(A, /obj/item/device/radio)) - passed=1 - - if(sight_check && !isInSight(A, O)) - passed=0 - - if(passed) - found_mobs |= A - - for(var/atom/B in A) - if(!processed_list[B]) - processing_list |= B - - processing_list.Cut(1, 2) - processed_list[A] = A - - return found_mobs - - -/proc/get_hearers_in_view(R, atom/source) - // Returns a list of hearers in view(R) from source (ignoring luminosity). Used in saycode. - var/turf/T = get_turf(source) - var/list/hear = list() - - if(!T) - return hear - - var/list/range = get_hear(R, T) - for(var/atom/movable/A in range) - hear |= recursive_hear_check(A) - - return hear - - -/proc/get_mobs_in_radio_ranges(list/obj/item/device/radio/radios) - - set background = BACKGROUND_ENABLED - - . = list() - // Returns a list of mobs who can hear any of the radios given in @radios - for(var/obj/item/device/radio/R in radios) - if(R) - . |= get_hearers_in_view(R.canhear_range, R) - - -#define SIGN(X) ((X<0)?-1:1) - -/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) - var/turf/T - if(X1==X2) - if(Y1==Y2) - return 1 //Light cannot be blocked on same tile - else - var/s = SIGN(Y2-Y1) - Y1+=s - while(Y1!=Y2) - T=locate(X1,Y1,Z) - if(T.opacity) - return 0 - Y1+=s - else - var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) - var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles - var/signX = SIGN(X2-X1) - var/signY = SIGN(Y2-Y1) - if(X1 abs (dx)) //slope is above 1:1 (move horizontally in a tie) - if(dy > 0) - return get_step(start, SOUTH) - else - return get_step(start, NORTH) - else - if(dx > 0) - return get_step(start, WEST) - else - return get_step(start, EAST) - -/proc/try_move_adjacent(atom/movable/AM) - var/turf/T = get_turf(AM) - for(var/direction in GLOB.cardinal) - if(AM.Move(get_step(T, direction))) - break - -/proc/get_mob_by_key(key) - for(var/mob/M in GLOB.mob_list) - if(M.ckey == lowertext(key)) - return M - return null - -// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. - +//supposedly the fastest way to do this according to https://gist.github.com/Giacom/be635398926bb463b42a +#define RANGE_TURFS(RADIUS, CENTER) \ + block( \ + locate(max(CENTER.x-(RADIUS),1), max(CENTER.y-(RADIUS),1), CENTER.z), \ + locate(min(CENTER.x+(RADIUS),world.maxx), min(CENTER.y+(RADIUS),world.maxy), CENTER.z) \ + ) + +#define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL)) +#define CULT_POLL_WAIT 2400 + +/proc/get_area(atom/A) + if (!istype(A)) + return + for(A, A && !isarea(A), A=A.loc); //semicolon is for the empty statement + return A + +/proc/get_area_name(atom/X) + var/area/Y = get_area(X) + return Y.name + +/proc/get_area_by_name(N) //get area by its name + for(var/area/A in world) + if(A.name == N) + return A + return 0 + +/proc/get_areas_in_range(dist=0, atom/center=usr) + if(!dist) + var/turf/T = get_turf(center) + return T ? list(T.loc) : list() + if(!center) + return list() + + var/list/turfs = RANGE_TURFS(dist, center) + var/list/areas = list() + for(var/V in turfs) + var/turf/T = V + areas |= T.loc + return areas + +/proc/get_adjacent_areas(atom/center) + . = list(get_area(get_ranged_target_turf(center, NORTH, 1)), + get_area(get_ranged_target_turf(center, SOUTH, 1)), + get_area(get_ranged_target_turf(center, EAST, 1)), + get_area(get_ranged_target_turf(center, WEST, 1))) + listclearnulls(.) + +/proc/get_open_turf_in_dir(atom/center, dir) + var/turf/open/T = get_ranged_target_turf(center, dir, 1) + if(istype(T)) + return T + +/proc/get_adjacent_open_turfs(atom/center) + . = list(get_open_turf_in_dir(center, NORTH), + get_open_turf_in_dir(center, SOUTH), + get_open_turf_in_dir(center, EAST), + get_open_turf_in_dir(center, WEST)) + listclearnulls(.) + +/proc/get_adjacent_open_areas(atom/center) + . = list() + var/list/adjacent_turfs = get_adjacent_open_turfs(center) + for(var/I in adjacent_turfs) + . |= get_area(I) + +// Like view but bypasses luminosity check + +/proc/get_hear(range, atom/source) + + var/lum = source.luminosity + source.luminosity = 6 + + var/list/heard = view(range, source) + source.luminosity = lum + + return heard + +/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon) + var/area/our_area = get_area(the_area) + for(var/C in GLOB.living_mob_list) + if(!istype(C, check_type)) + continue + if(C == must_be_alone) + continue + if(our_area == get_area(C)) + return 0 + return 1 + +//We used to use linear regression to approximate the answer, but Mloc realized this was actually faster. +//And lo and behold, it is, and it's more accurate to boot. +/proc/cheap_hypotenuse(Ax,Ay,Bx,By) + return sqrt(abs(Ax - Bx)**2 + abs(Ay - By)**2) //A squared + B squared = C squared + +/proc/circlerange(center=usr,radius=3) + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius+0.5) + + for(var/atom/T in range(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + turfs += T + + //turfs += centerturf + return turfs + +/proc/circleview(center=usr,radius=3) + + var/turf/centerturf = get_turf(center) + var/list/atoms = new/list() + var/rsq = radius * (radius+0.5) + + for(var/atom/A in view(radius, centerturf)) + var/dx = A.x - centerturf.x + var/dy = A.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + atoms += A + + //turfs += centerturf + return atoms + +/proc/get_dist_euclidian(atom/Loc1 as turf|mob|obj,atom/Loc2 as turf|mob|obj) + var/dx = Loc1.x - Loc2.x + var/dy = Loc1.y - Loc2.y + + var/dist = sqrt(dx**2 + dy**2) + + return dist + +/proc/circlerangeturfs(center=usr,radius=3) + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius+0.5) + + for(var/turf/T in range(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + turfs += T + return turfs + +/proc/circleviewturfs(center=usr,radius=3) //Is there even a diffrence between this proc and circlerangeturfs()? + + var/turf/centerturf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius+0.5) + + for(var/turf/T in view(radius, centerturf)) + var/dx = T.x - centerturf.x + var/dy = T.y - centerturf.y + if(dx*dx + dy*dy <= rsq) + turfs += T + return turfs + + +//This is the new version of recursive_mob_check, used for say(). +//The other proc was left intact because morgue trays use it. +//Sped this up again for real this time +/proc/recursive_hear_check(O) + var/list/processing_list = list(O) + . = list() + while(processing_list.len) + var/atom/A = processing_list[1] + if(A.flags & HEAR) + . += A + processing_list.Cut(1, 2) + processing_list += A.contents + +// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy. +//No need for a recursive limit either +/proc/recursive_mob_check(atom/O,client_check=1,sight_check=1,include_radio=1) + + var/list/processing_list = list(O) + var/list/processed_list = list() + var/list/found_mobs = list() + + while(processing_list.len) + + var/atom/A = processing_list[1] + var/passed = 0 + + if(ismob(A)) + var/mob/A_tmp = A + passed=1 + + if(client_check && !A_tmp.client) + passed=0 + + if(sight_check && !isInSight(A_tmp, O)) + passed=0 + + else if(include_radio && istype(A, /obj/item/device/radio)) + passed=1 + + if(sight_check && !isInSight(A, O)) + passed=0 + + if(passed) + found_mobs |= A + + for(var/atom/B in A) + if(!processed_list[B]) + processing_list |= B + + processing_list.Cut(1, 2) + processed_list[A] = A + + return found_mobs + + +/proc/get_hearers_in_view(R, atom/source) + // Returns a list of hearers in view(R) from source (ignoring luminosity). Used in saycode. + var/turf/T = get_turf(source) + var/list/hear = list() + + if(!T) + return hear + + var/list/range = get_hear(R, T) + for(var/atom/movable/A in range) + hear |= recursive_hear_check(A) + + return hear + + +/proc/get_mobs_in_radio_ranges(list/obj/item/device/radio/radios) + + set background = BACKGROUND_ENABLED + + . = list() + // Returns a list of mobs who can hear any of the radios given in @radios + for(var/obj/item/device/radio/R in radios) + if(R) + . |= get_hearers_in_view(R.canhear_range, R) + + +#define SIGN(X) ((X<0)?-1:1) + +/proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) + var/turf/T + if(X1==X2) + if(Y1==Y2) + return 1 //Light cannot be blocked on same tile + else + var/s = SIGN(Y2-Y1) + Y1+=s + while(Y1!=Y2) + T=locate(X1,Y1,Z) + if(T.opacity) + return 0 + Y1+=s + else + var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) + var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles + var/signX = SIGN(X2-X1) + var/signY = SIGN(Y2-Y1) + if(X1 abs (dx)) //slope is above 1:1 (move horizontally in a tie) + if(dy > 0) + return get_step(start, SOUTH) + else + return get_step(start, NORTH) + else + if(dx > 0) + return get_step(start, WEST) + else + return get_step(start, EAST) + +/proc/try_move_adjacent(atom/movable/AM) + var/turf/T = get_turf(AM) + for(var/direction in GLOB.cardinal) + if(AM.Move(get_step(T, direction))) + break + +/proc/get_mob_by_key(key) + for(var/mob/M in GLOB.mob_list) + if(M.ckey == lowertext(key)) + return M + return null + +// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer. + /proc/get_candidates(be_special_type, afk_bracket = config.inactivity_period, jobbanType) - var/list/candidates = list() - // Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000)) + var/list/candidates = list() + // Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000)) while(!candidates.len && afk_bracket < config.afk_period) - for(var/mob/dead/observer/G in GLOB.player_list) - if(G.client != null) - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - if(!G.client.is_afk(afk_bracket) && (be_special_type in G.client.prefs.be_special)) - if (jobbanType) - if(!(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate"))) - candidates += G.client - else - candidates += G.client - afk_bracket += 600 // Add a minute to the bracket, for every attempt - return candidates - -/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) - if(!isobj(O)) - O = new /obj/screen/text() - O.maptext = maptext - O.maptext_height = maptext_height - O.maptext_width = maptext_width - O.screen_loc = screen_loc - return O - -/proc/remove_images_from_clients(image/I, list/show_to) - for(var/client/C in show_to) - C.images -= I - -/proc/flick_overlay(image/I, list/show_to, duration) - for(var/client/C in show_to) - C.images += I - addtimer(CALLBACK(GLOBAL_PROC, /.proc/remove_images_from_clients, I, show_to), duration) - -/proc/flick_overlay_view(image/I, atom/target, duration) //wrapper for the above, flicks to everyone who can see the target atom - var/list/viewing = list() - for(var/m in viewers(target)) - var/mob/M = m - if(M.client) - viewing += M.client - flick_overlay(I, viewing, duration) - -/proc/get_active_player_count(var/alive_check = 0, var/afk_check = 0, var/human_check = 0) - // Get active players who are playing in the round - var/active_players = 0 - for(var/i = 1; i <= GLOB.player_list.len; i++) - var/mob/M = GLOB.player_list[i] - if(M && M.client) - if(alive_check && M.stat) - continue - else if(afk_check && M.client.is_afk()) - continue - else if(human_check && !ishuman(M)) - continue - else if(isnewplayer(M)) // exclude people in the lobby - continue - else if(isobserver(M)) // Ghosts are fine if they were playing once (didn't start as observers) - var/mob/dead/observer/O = M - if(O.started_as_observer) // Exclude people who started as observers - continue - active_players++ - return active_players - -/datum/projectile_data - var/src_x - var/src_y - var/time - var/distance - var/power_x - var/power_y - var/dest_x - var/dest_y - -/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \ - var/power_x, var/power_y, var/dest_x, var/dest_y) - src.src_x = src_x - src.src_y = src_y - src.time = time - src.distance = distance - src.power_x = power_x - src.power_y = power_y - src.dest_x = dest_x - src.dest_y = dest_y - -/proc/projectile_trajectory(src_x, src_y, rotation, angle, power) - - // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], - // rotated at [rotation] and with the power of [power] - // Thanks to VistaPOWA for this function - - var/power_x = power * cos(angle) - var/power_y = power * sin(angle) - var/time = 2* power_y / 10 //10 = g - - var/distance = time * power_x - - var/dest_x = src_x + distance*sin(rotation); - var/dest_y = src_y + distance*cos(rotation); - - return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) - -/proc/showCandidatePollWindow(mob/dead/observer/G, poll_time, Question, list/candidates, ignore_category, time_passed, flashwindow = TRUE) - set waitfor = 0 - - G << 'sound/misc/notice2.ogg' //Alerting them to their consideration - if(flashwindow) - window_flash(G.client) - switch(ignore_category ? askuser(G,Question,"Please answer in [poll_time/10] seconds!","Yes","No","Never for this round", StealFocus=0, Timeout=poll_time) : askuser(G,Question,"Please answer in [poll_time/10] seconds!","Yes","No", StealFocus=0, Timeout=poll_time)) - if(1) - to_chat(G, "Choice registered: Yes.") - if((world.time-time_passed)>poll_time) - to_chat(G, "Sorry, you were too late for the consideration!") - G << 'sound/machines/buzz-sigh.ogg' - else - candidates += G - if(2) - to_chat(G, "Choice registered: No.") - if(3) - var/list/L = GLOB.poll_ignore[ignore_category] - if(!L) - GLOB.poll_ignore[ignore_category] = list() - GLOB.poll_ignore[ignore_category] += G.ckey - to_chat(G, "Choice registered: Never for this round.") - -/proc/pollCandidates(var/Question, var/jobbanType, var/datum/game_mode/gametypeCheck, var/be_special_flag = 0, var/poll_time = 300, var/ignore_category = null, flashwindow = TRUE) - var/list/mob/dead/observer/candidates = list() - var/time_passed = world.time - if (!Question) - Question = "Would you like to be a special role?" - - for(var/mob/dead/observer/G in GLOB.player_list) - if(!G.key || !G.client || (ignore_category && GLOB.poll_ignore[ignore_category] && G.ckey in GLOB.poll_ignore[ignore_category])) - continue - if(be_special_flag) - if(!(G.client.prefs) || !(be_special_flag in G.client.prefs.be_special)) - continue - if (gametypeCheck) - if(!gametypeCheck.age_check(G.client)) - continue - if (jobbanType) - if(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate")) - continue - - showCandidatePollWindow(G, poll_time, Question, candidates, ignore_category, time_passed, flashwindow) - sleep(poll_time) - - //Check all our candidates, to make sure they didn't log off during the wait period. - for(var/mob/dead/observer/G in candidates) - if(!G.key || !G.client) - candidates.Remove(G) - - listclearnulls(candidates) - - return candidates - -/proc/pollCandidatesForMob(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, mob/M, ignore_category = null) - var/list/L = pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category) - if(!M || QDELETED(M) || !M.loc) - return list() - return L - -/proc/pollCandidatesForMobs(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, list/mobs, ignore_category = null) - var/list/L = pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category) - var/i=1 - for(var/v in mobs) - var/atom/A = v - if(!A || QDELETED(A) || !A.loc) - mobs.Cut(i,i+1) - else - ++i - return L - -/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character - if(!G_found || !G_found.key) - return - - //First we spawn a dude. - var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned. - - G_found.client.prefs.copy_to(new_character) - new_character.dna.update_dna_identity() - new_character.key = G_found.key - - return new_character - -/proc/send_to_playing_players(thing) //sends a whatever to all playing players; use instead of to_chat(world, where needed) - for(var/M in GLOB.player_list) - if(M && !isnewplayer(M)) - to_chat(M, thing) - -/proc/window_flash(client/C, ignorepref = FALSE) - if(ismob(C)) - var/mob/M = C - if(M.client) - C = M.client - if(!C || (!C.prefs.windowflashing && !ignorepref)) - return - winset(C, "mainwindow", "flash=5") - -/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) + for(var/mob/dead/observer/G in GLOB.player_list) + if(G.client != null) + if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) + if(!G.client.is_afk(afk_bracket) && (be_special_type in G.client.prefs.be_special)) + if (jobbanType) + if(!(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate"))) + candidates += G.client + else + candidates += G.client + afk_bracket += 600 // Add a minute to the bracket, for every attempt + return candidates + +/proc/ScreenText(obj/O, maptext="", screen_loc="CENTER-7,CENTER-7", maptext_height=480, maptext_width=480) + if(!isobj(O)) + O = new /obj/screen/text() + O.maptext = maptext + O.maptext_height = maptext_height + O.maptext_width = maptext_width + O.screen_loc = screen_loc + return O + +/proc/remove_images_from_clients(image/I, list/show_to) + for(var/client/C in show_to) + C.images -= I + +/proc/flick_overlay(image/I, list/show_to, duration) + for(var/client/C in show_to) + C.images += I + addtimer(CALLBACK(GLOBAL_PROC, /.proc/remove_images_from_clients, I, show_to), duration) + +/proc/flick_overlay_view(image/I, atom/target, duration) //wrapper for the above, flicks to everyone who can see the target atom + var/list/viewing = list() + for(var/m in viewers(target)) + var/mob/M = m + if(M.client) + viewing += M.client + flick_overlay(I, viewing, duration) + +/proc/get_active_player_count(var/alive_check = 0, var/afk_check = 0, var/human_check = 0) + // Get active players who are playing in the round + var/active_players = 0 + for(var/i = 1; i <= GLOB.player_list.len; i++) + var/mob/M = GLOB.player_list[i] + if(M && M.client) + if(alive_check && M.stat) + continue + else if(afk_check && M.client.is_afk()) + continue + else if(human_check && !ishuman(M)) + continue + else if(isnewplayer(M)) // exclude people in the lobby + continue + else if(isobserver(M)) // Ghosts are fine if they were playing once (didn't start as observers) + var/mob/dead/observer/O = M + if(O.started_as_observer) // Exclude people who started as observers + continue + active_players++ + return active_players + +/datum/projectile_data + var/src_x + var/src_y + var/time + var/distance + var/power_x + var/power_y + var/dest_x + var/dest_y + +/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \ + var/power_x, var/power_y, var/dest_x, var/dest_y) + src.src_x = src_x + src.src_y = src_y + src.time = time + src.distance = distance + src.power_x = power_x + src.power_y = power_y + src.dest_x = dest_x + src.dest_y = dest_y + +/proc/projectile_trajectory(src_x, src_y, rotation, angle, power) + + // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], + // rotated at [rotation] and with the power of [power] + // Thanks to VistaPOWA for this function + + var/power_x = power * cos(angle) + var/power_y = power * sin(angle) + var/time = 2* power_y / 10 //10 = g + + var/distance = time * power_x + + var/dest_x = src_x + distance*sin(rotation); + var/dest_y = src_y + distance*cos(rotation); + + return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) + +/proc/showCandidatePollWindow(mob/M, poll_time, Question, list/candidates, ignore_category, time_passed, flashwindow = TRUE) + set waitfor = 0 + + M << 'sound/misc/notice2.ogg' //Alerting them to their consideration + if(flashwindow) + window_flash(M.client) + switch(ignore_category ? askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No","Never for this round", StealFocus=0, Timeout=poll_time) : askuser(M,Question,"Please answer in [poll_time/10] seconds!","Yes","No", StealFocus=0, Timeout=poll_time)) + if(1) + to_chat(M, "Choice registered: Yes.") + if(time_passed + poll_time <= world.time) + to_chat(M, "Sorry, you answered too late to be considered!") + M << 'sound/machines/buzz-sigh.ogg' + candidates -= M + else + candidates += M + if(2) + to_chat(M, "Choice registered: No.") + candidates -= M + if(3) + var/list/L = GLOB.poll_ignore[ignore_category] + if(!L) + GLOB.poll_ignore[ignore_category] = list() + GLOB.poll_ignore[ignore_category] += M.ckey + to_chat(M, "Choice registered: Never for this round.") + candidates -= M + else + candidates -= M + +/proc/pollGhostCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE) + var/list/candidates = list() + + for(var/mob/dead/observer/G in GLOB.player_list) + candidates += G + + return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates) + +/proc/pollCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE, list/group = null) + var/time_passed = world.time + if (!Question) + Question = "Would you like to be a special role?" + + var/list/result = list() + for(var/m in group) + var/mob/M = m + if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && M.ckey in GLOB.poll_ignore[ignore_category])) + continue + if(be_special_flag) + if(!(M.client.prefs) || !(be_special_flag in M.client.prefs.be_special)) + continue + if(gametypeCheck) + if(!gametypeCheck.age_check(M.client)) + continue + if(jobbanType) + if(jobban_isbanned(M, jobbanType) || jobban_isbanned(M, "Syndicate")) + continue + + showCandidatePollWindow(M, poll_time, Question, result, ignore_category, time_passed, flashwindow) + sleep(poll_time) + + //Check all our candidates, to make sure they didn't log off or get deleted during the wait period. + for(var/mob/M in result) + if(!M.key || !M.client) + result -= M + + listclearnulls(result) + + return result + +/proc/pollCandidatesForMob(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, mob/M, ignore_category = null) + var/list/L = pollGhostCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category) + if(!M || QDELETED(M) || !M.loc) + return list() + return L + +/proc/pollCandidatesForMobs(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, list/mobs, ignore_category = null) + var/list/L = pollGhostCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category) + var/i=1 + for(var/v in mobs) + var/atom/A = v + if(!A || QDELETED(A) || !A.loc) + mobs.Cut(i,i+1) + else + ++i + return L + +/proc/poll_helper(var/mob/living/M) + +/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character + if(!G_found || !G_found.key) + return + + //First we spawn a dude. + var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned. + + G_found.client.prefs.copy_to(new_character) + new_character.dna.update_dna_identity() + new_character.key = G_found.key + + return new_character + +/proc/send_to_playing_players(thing) //sends a whatever to all playing players; use instead of to_chat(world, where needed) + for(var/M in GLOB.player_list) + if(M && !isnewplayer(M)) + to_chat(M, thing) + +/proc/window_flash(client/C, ignorepref = FALSE) + if(ismob(C)) + var/mob/M = C + if(M.client) + C = M.client + if(!C || (!C.prefs.windowflashing && !ignorepref)) + return + winset(C, "mainwindow", "flash=5") + +/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) if(!SSticker.IsRoundInProgress() || !character) - return - var/area/A = get_area(character) - var/message = "\ - [character.real_name] ([rank]) has arrived at the station at \ - [A.name]." - deadchat_broadcast(message, follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE) - if((!GLOB.announcement_systems.len) || (!character.mind)) - return - if((character.mind.assigned_role == "Cyborg") || (character.mind.assigned_role == character.mind.special_role)) - return - - var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) - announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common - -/proc/GetRedPart(const/hexa) - return hex2num(copytext(hexa, 2, 4)) - -/proc/GetGreenPart(const/hexa) - return hex2num(copytext(hexa, 4, 6)) - -/proc/GetBluePart(const/hexa) - return hex2num(copytext(hexa, 6, 8)) + return + var/area/A = get_area(character) + var/message = "\ + [character.real_name] ([rank]) has arrived at the station at \ + [A.name]." + deadchat_broadcast(message, follow_target = character, message_type=DEADCHAT_ARRIVALRATTLE) + if((!GLOB.announcement_systems.len) || (!character.mind)) + return + if((character.mind.assigned_role == "Cyborg") || (character.mind.assigned_role == character.mind.special_role)) + return + + var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) + announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common + +/proc/GetRedPart(const/hexa) + return hex2num(copytext(hexa, 2, 4)) + +/proc/GetGreenPart(const/hexa) + return hex2num(copytext(hexa, 4, 6)) + +/proc/GetBluePart(const/hexa) + return hex2num(copytext(hexa, 6, 8)) \ No newline at end of file diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 2e34624df5..8b77b170e0 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -24,7 +24,6 @@ //doesn't have an object argument because this is "Stacking" with the animate call above //3 billion% intentional - //Dumps the matrix data in format a-f /matrix/proc/tolist() . = list() diff --git a/code/__HELPERS/text_vr.dm b/code/__HELPERS/text_vr.dm index 06aadb6708..7cd683f456 100644 --- a/code/__HELPERS/text_vr.dm +++ b/code/__HELPERS/text_vr.dm @@ -24,4 +24,4 @@ GLOBAL_LIST_EMPTY(whitelisted_species_list) /proc/log_mentor(text) GLOB.mentor_log.Add(text) - GLOB.diary << "\[[time_stamp()]]MENTOR: [text]" \ No newline at end of file + GLOB.world_game_log << "\[[time_stamp()]]MENTOR: [text]" \ No newline at end of file diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 1da1b50aa3..f35a6eaa15 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1342,6 +1342,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) //This prevents RCEs from badmins //kevinz000 if you touch this I will hunt you down GLOBAL_VAR_INIT(valid_HTTPSGet, FALSE) +GLOBAL_PROTECT(valid_HTTPSGet) /proc/HTTPSGet(url) if(findtext(url, "\"")) GLOB.valid_HTTPSGet = FALSE @@ -1398,3 +1399,20 @@ GLOBAL_VAR_INIT(valid_HTTPSGet, FALSE) /proc/pass() return + +/proc/get_mob_or_brainmob(occupant) + var/mob/living/mob_occupant + + if(isliving(occupant)) + mob_occupant = occupant + + else if(isbodypart(occupant)) + var/obj/item/bodypart/head/head = occupant + + mob_occupant = head.brainmob + + else if(isorgan(occupant)) + var/obj/item/organ/brain/brain = occupant + mob_occupant = brain.brainmob + + return mob_occupant diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 178b6b3c9e..85a353371e 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -35,6 +35,7 @@ //MINOR TWEAKS/MISC #define AGE_MIN 17 //youngest a character can be #define AGE_MAX 85 //oldest a character can be +#define WIZARD_AGE_MIN 30 //youngest a wizard can be #define SHOES_SLOWDOWN 0 //How much shoes slow you down by default. Negative values speed you up #define POCKET_STRIP_DELAY 40 //time taken (in deciseconds) to search somebody's pockets #define DOOR_CRUSH_DAMAGE 15 //the amount of damage that airlocks deal when they crush you diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index 153ebbf089..12fb1bae48 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -3,3 +3,14 @@ GLOBAL_VAR_INIT(secret_force_mode, "secret") // if this is anything but "secret" GLOBAL_VAR_INIT(wavesecret, 0) // meteor mode, delays wave progression, terrible name GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report + +// Cult, needs to be global so admin cultists are functional +GLOBAL_VAR_INIT(blood_target, null) // Cult Master's target or Construct's Master +GLOBAL_DATUM(blood_target_image, /image) +GLOBAL_VAR_INIT(blood_target_reset_timer, null) +GLOBAL_DATUM(sac_mind, /datum/mind) +GLOBAL_VAR_INIT(sac_image, null) +GLOBAL_VAR_INIT(cult_vote_called, FALSE) +GLOBAL_VAR_INIT(cult_mastered, FALSE) +GLOBAL_VAR_INIT(reckoning_complete, FALSE) +GLOBAL_VAR_INIT(sac_complete, FALSE) \ No newline at end of file diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 849c5248a0..59885b3432 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -104,5 +104,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/weapon/storage/secure/briefcase = 3, /obj/item/weapon/storage/toolbox/artistic = 2, /obj/item/toy/eightball = 1, + /obj/item/weapon/storage/daki = 3, "" = 3 )) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 090000fded..eece2b4ca8 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -54,3 +54,4 @@ GLOBAL_LIST_EMPTY(awaydestinations) //a list of landmarks that the warpgate can GLOBAL_LIST_EMPTY(sortedAreas) GLOBAL_LIST_EMPTY(transit_markers) +GLOBAL_LIST_EMPTY(all_abstract_markers) \ No newline at end of file diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index e378970225..acb60ee68e 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -19,5 +19,7 @@ GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs GLOBAL_LIST_EMPTY(ai_list) GLOBAL_LIST_EMPTY(pai_list) GLOBAL_LIST_EMPTY(available_ai_shells) -GLOBAL_LIST_EMPTY(language_datums) -GLOBAL_LIST_EMPTY(simple_animals) \ No newline at end of file +GLOBAL_LIST_EMPTY(simple_animals) + +GLOBAL_LIST_EMPTY(language_datum_instances) +GLOBAL_LIST_EMPTY(all_languages) diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index ff6a4edd40..fadd68526d 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -5,5 +5,6 @@ #define POLL_IGNORE_POSSESSED_BLADE "possessed_blade" #define POLL_IGNORE_ALIEN_LARVA "alien_larva" #define POLL_IGNORE_CLOCKWORK_MARAUDER "clockwork_marauder" +#define POLL_IGNORE_SYNDICATE "syndicate" GLOBAL_LIST_EMPTY(poll_ignore) diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 35adcef36c..00665bdfe2 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -1,28 +1,34 @@ -GLOBAL_VAR(diary) -GLOBAL_PROTECT(diary) -GLOBAL_VAR(runtime_diary) -GLOBAL_PROTECT(runtime_diary) -GLOBAL_VAR(diaryofmeanpeople) -GLOBAL_PROTECT(diaryofmeanpeople) -GLOBAL_VAR(href_logfile) -GLOBAL_PROTECT(href_logfile) - -GLOBAL_LIST_EMPTY(bombers) -GLOBAL_PROTECT(bombers) -GLOBAL_LIST_EMPTY(admin_log) -GLOBAL_PROTECT(admin_log) -GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" -GLOBAL_PROTECT(lastsignalers) -GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was -GLOBAL_PROTECT(lawchanges) - -GLOBAL_LIST_EMPTY(combatlog) -GLOBAL_PROTECT(combatlog) -GLOBAL_LIST_EMPTY(IClog) -GLOBAL_PROTECT(IClog) -GLOBAL_LIST_EMPTY(OOClog) -GLOBAL_PROTECT(OOClog) -GLOBAL_LIST_EMPTY(adminlog) -GLOBAL_PROTECT(adminlog) - +GLOBAL_VAR(log_directory) +GLOBAL_PROTECT(log_directory) +GLOBAL_VAR(world_game_log) +GLOBAL_PROTECT(world_game_log) +GLOBAL_VAR(world_runtime_log) +GLOBAL_PROTECT(world_runtime_log) +GLOBAL_VAR(world_attack_log) +GLOBAL_PROTECT(world_attack_log) +GLOBAL_VAR(world_href_log) +GLOBAL_PROTECT(world_href_log) +GLOBAL_VAR(round_id) +GLOBAL_PROTECT(round_id) +GLOBAL_VAR(config_error_log) +GLOBAL_PROTECT(config_error_log) + +GLOBAL_LIST_EMPTY(bombers) +GLOBAL_PROTECT(bombers) +GLOBAL_LIST_EMPTY(admin_log) +GLOBAL_PROTECT(admin_log) +GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]" +GLOBAL_PROTECT(lastsignalers) +GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was +GLOBAL_PROTECT(lawchanges) + +GLOBAL_LIST_EMPTY(combatlog) +GLOBAL_PROTECT(combatlog) +GLOBAL_LIST_EMPTY(IClog) +GLOBAL_PROTECT(IClog) +GLOBAL_LIST_EMPTY(OOClog) +GLOBAL_PROTECT(OOClog) +GLOBAL_LIST_EMPTY(adminlog) +GLOBAL_PROTECT(adminlog) + GLOBAL_LIST_EMPTY(active_turfs_startlist) \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 0fe37a9286..07dcfaee28 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -107,64 +107,112 @@ var/obj/item/W = get_active_held_item() - if(W == A) W.attack_self(src) update_inv_hands() return - - // operate three levels deep here (item in backpack in src; item in box in backpack in src, not any deeper) - if(A.ClickAccessible(src, depth=INVENTORY_DEPTH)) - // No adjacency needed + + //These are always reachable. + //User itself, current loc, and user inventory + if(DirectAccess(A)) if(W) - melee_item_attack_chain(src, W, A, params) + melee_item_attack_chain(src,W,A,params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) UnarmedAttack(A) return - - if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that + + //Can't reach anything else in lockers or other weirdness + if(!loc.AllowClick()) return - // Allows you to click on a box's contents, if that box is on the ground, but no deeper than that - if(isturf(A) || isturf(A.loc) || (A.loc && isturf(A.loc.loc))) - if(Adjacent(A) || (W && CheckReach(src, A, W.reach))) //Adjacent or reaching attacks - if(W) - melee_item_attack_chain(src, W, A, params) - else - if(ismob(A)) - changeNext_move(CLICK_CD_MELEE) - UnarmedAttack(A, 1) - return - else // non-adjacent click - if(W) - W.afterattack(A,src,0,params) // 0: not Adjacent - else - RangedAttack(A, params) + //Standard reach turf to turf or reaching inside storage + if(CanReach(A,W)) + if(W) + melee_item_attack_chain(src,W,A,params) + else + if(ismob(A)) + changeNext_move(CLICK_CD_MELEE) + UnarmedAttack(A,1) + else + if(W) + W.afterattack(A,src,0,params) + else + RangedAttack(A,params) -/proc/CheckReach(atom/movable/here, atom/movable/there, reach) +/atom/movable/proc/CanReach(atom/target,obj/item/tool,view_only = FALSE) + if(isturf(target) || isturf(target.loc) || DirectAccess(target)) //Directly accessible atoms + if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks + return TRUE + else + //Things inside storage insde another storage + //Eg Contents of a box in a backpack + var/atom/outer_storage = get_atom_on_turf(target) + if(outer_storage == target) //whatever that is we don't want infinite loop. + return FALSE + if(outer_storage && CanReach(outer_storage,tool) && outer_storage.CanReachStorage(target,src,view_only ? STORAGE_VIEW_DEPTH : INVENTORY_DEPTH)) + return TRUE + return FALSE + +//Can [target] in this container be reached by [user], can't be more than [depth] levels deep +/atom/proc/CanReachStorage(atom/target,user,depth) + return FALSE + +/obj/item/weapon/storage/CanReachStorage(atom/target,user,depth) + while(target && depth > 0) + target = target.loc + depth-- + if(target == src) + return TRUE + return FALSE + +/atom/movable/proc/DirectAccess(atom/target) + if(target == src) + return TRUE + if(target == loc) + return TRUE + +/mob/DirectAccess(atom/target) + if(..()) + return TRUE + if(target in contents) //This could probably use moving down and restricting to inventory only + return TRUE + return FALSE + +/mob/living/DirectAccess(atom/target) + if(..()) //Lightweight checks first + return TRUE + if(target in GetAllContents()) + return TRUE + +/atom/proc/AllowClick() + return FALSE + +/turf/AllowClick() + return TRUE + +/proc/CheckToolReach(atom/movable/here, atom/movable/there, reach) if(!here || !there) return switch(reach) if(0) - return here.loc == there.loc + return FALSE if(1) - return here.Adjacent(there) + return FALSE //here.Adjacent(there) if(2 to INFINITY) - var/obj/dummy = new(get_turf(here)) //We'll try to move this every tick, failing if we can't + var/obj/dummy = new(get_turf(here)) dummy.pass_flags |= PASSTABLE + dummy.invisibility = INVISIBILITY_ABSTRACT for(var/i in 1 to reach) //Limit it to that many tries var/turf/T = get_step(dummy, get_dir(dummy, there)) - if(dummy.loc == there.loc) + if(dummy.CanReach(there)) qdel(dummy) - return 1 - if(there.density && dummy in range(1, there)) //For windows and suchlike - qdel(dummy) - return 1 + return TRUE if(!dummy.Move(T)) //we're blocked! qdel(dummy) return + qdel(dummy) // Default behavior: ignore double clicks (the second click that makes the doubleclick call already calls for a normal click) /mob/proc/DblClickOn(atom/A, params) @@ -304,21 +352,6 @@ /atom/proc/CtrlShiftClick(mob/user) return -/* - Helper to check can the mob click/access an item. - Used by mob inventory and storage items. -*/ -/atom/proc/ClickAccessible(mob/user, depth=1) - if(src == user.loc || (src in user.contents)) - return TRUE - - if(loc && depth > 1) - return loc.ClickAccessible(user, depth-1) - -/turf/ClickAccessible(mob/user, depth=1) - return - - /* Misc helpers diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 8c62d68963..ce7014d765 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -21,7 +21,7 @@ #define ui_inventory "WEST:6,SOUTH:5" //Middle left indicators -#define ui_lingchemdisplay "WEST:6,CENTER-1:15" +#define ui_lingchemdisplay "WEST,CENTER-1:15" #define ui_lingstingdisplay "WEST:6,CENTER-3:11" #define ui_crafting "12:-10,1:5" #define ui_building "12:-10,1:21" @@ -104,17 +104,18 @@ #define ui_health "EAST-1:28,CENTER-1:15" #define ui_internal "EAST-1:28,CENTER:17" -//borgs and aliens -#define ui_alien_nightvision "EAST-1:28,CENTER:17" +//borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. -#define ui_alien_health "EAST-1:28,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. -#define ui_alienplasmadisplay "EAST-1:28,CENTER-2:15" -#define ui_alien_queen_finder "EAST-1:28,CENTER-3:15" -//constructs -#define ui_construct_pull "EAST,CENTER-2:15" -#define ui_construct_health "EAST,CENTER:15" //same as borgs and humans - +//aliens +#define ui_alien_health "EAST,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. +#define ui_alienplasmadisplay "EAST,CENTER-2:15" +#define ui_alien_queen_finder "EAST,CENTER-3:15" + +//constructs +#define ui_construct_pull "EAST,CENTER-2:15" +#define ui_construct_health "EAST,CENTER:15" //same as borgs and humans + // AI #define ui_ai_core "SOUTH:6,WEST" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 9c8fe9750a..00e6729a6f 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -42,6 +42,7 @@ thealert.override_alerts = override if(override) thealert.timeout = null + thealert.mob_viewer = src if(new_master) var/old_layer = new_master.layer @@ -96,6 +97,7 @@ var/severity = 0 var/alerttooltipstyle = "" var/override_alerts = FALSE //If it is overriding other alerts of the same type + var/mob/mob_viewer //the mob viewing this alert /obj/screen/alert/MouseEntered(location,control,params) @@ -256,6 +258,103 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state = "blobbernaut_nofactory" alerttooltipstyle = "blob" +// BLOODCULT + +/obj/screen/alert/bloodsense + name = "Blood Sense" + desc = "Allows you to sense blood that is manipulated by dark magicks." + icon_state = "cult_sense" + alerttooltipstyle = "cult" + var/static/image/narnar + var/angle = 0 + var/mob/living/simple_animal/hostile/construct/Cviewer = null + +/obj/screen/alert/bloodsense/Initialize() + . = ..() + if(!narnar) + narnar = new('icons/mob/screen_alert.dmi', "mini_nar") + START_PROCESSING(SSprocessing, src) + +/obj/screen/alert/bloodsense/Destroy() + Cviewer = null + STOP_PROCESSING(SSprocessing, src) + return ..() + +/obj/screen/alert/bloodsense/process() + var/atom/blood_target + if(GLOB.blood_target) + if(!get_turf(GLOB.blood_target)) + GLOB.blood_target = null + else + blood_target = GLOB.blood_target + if(Cviewer) + if(Cviewer.seeking && Cviewer.master) + blood_target = Cviewer.master + if(!blood_target) + if(!GLOB.sac_complete) + if(icon_state == "runed_sense0") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense0" + desc = "Nar-Sie demands that [GLOB.sac_mind] be sacrificed before the summoning ritual can begin." + add_overlay(GLOB.sac_image) + else + if(SSticker.mode.eldergod) + desc = "The sacrifice is complete, prepare to summon Nar-Sie!" + else + desc = "The summoning is complete, glory to Nar-Sie!" + if(icon_state == "runed_sense1") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense1" + add_overlay(narnar) + return + var/turf/P = get_turf(blood_target) + var/turf/Q = get_turf(mob_viewer) + var/area/A = get_area(P) + if(P.z != Q.z) //The target is on a different Z level, we cannot sense that far. + return + desc = "You are currently tracking [blood_target] in [A.name]." + var/target_angle = Get_Angle(Q, P) + var/target_dist = get_dist(P, Q) + cut_overlays() + switch(target_dist) + if(0 to 1) + icon_state = "runed_sense2" + if(2 to 8) + icon_state = "arrow8" + if(9 to 15) + icon_state = "arrow7" + if(16 to 22) + icon_state = "arrow6" + if(23 to 29) + icon_state = "arrow5" + if(30 to 36) + icon_state = "arrow4" + if(37 to 43) + icon_state = "arrow3" + if(44 to 50) + icon_state = "arrow2" + if(51 to 57) + icon_state = "arrow1" + if(58 to 64) + icon_state = "arrow0" + if(65 to 400) + icon_state = "arrow" + var/difference = target_angle - angle + angle = target_angle + if(!difference) + return + var/matrix/final = matrix(transform) + final.Turn(difference) + animate(src, transform = final, time = 5, loop = 0) + + + // CLOCKCULT /obj/screen/alert/clockwork alerttooltipstyle = "clockcult" @@ -393,6 +492,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." textlist += "
" else textlist += "Seconds until Ratvar's arrival: [G.get_arrival_text(TRUE)]
" + break if(unconverted_ais_exist) if(unconverted_ais_exist > 1) textlist += "[unconverted_ais_exist] unconverted AIs exist!
" @@ -604,4 +704,3 @@ so as to remain in compliance with the most up-to-date laws." severity = 0 master = null screen_loc = "" - diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 04655315b7..acda7f36e5 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -68,6 +68,10 @@ using.screen_loc = ui_ghost_pai static_inventory += using + using = new /obj/screen/language_menu + using.icon = ui_style + static_inventory += using + /datum/hud/ghost/show_hud(version = 0, mob/viewmob) ..() if(!mymob.client.prefs.ghost_hud) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index b1b4a1cbb3..1bb3ba5223 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -1,268 +1,270 @@ -/* - The hud datum - Used to show and hide huds for all the different mob types, - including inventories and item quick actions. -*/ - -/datum/hud - var/mob/mymob - - var/hud_shown = 1 //Used for the HUD toggle (F12) - var/hud_version = 1 //Current displayed version of the HUD - var/inventory_shown = 0 //Equipped item inventory - var/show_intent_icons = 0 - var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) - - var/obj/screen/ling/chems/lingchemdisplay - var/obj/screen/ling/sting/lingstingdisplay - - var/obj/screen/blobpwrdisplay - - var/obj/screen/alien_plasma_display - var/obj/screen/alien_queen_finder - - var/obj/screen/devil/soul_counter/devilsouldisplay - - var/obj/screen/deity_power_display - var/obj/screen/deity_follower_display - - var/obj/screen/nightvisionicon - var/obj/screen/action_intent - var/obj/screen/zone_select - var/obj/screen/pull_icon - var/obj/screen/throw_icon - var/obj/screen/module_store_icon - - var/list/static_inventory = list() //the screen objects which are static - var/list/toggleable_inventory = list() //the screen objects which can be hidden - var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys - var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...) - var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...) - var/list/inv_slots[slots_amt] // /obj/screen/inventory objects, ordered by their slot ID. - var/list/hand_slots // /obj/screen/inventory/hand objects, assoc list of "[held_index]" = object - var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object - - var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle - var/action_buttons_hidden = 0 - - var/obj/screen/healths - var/obj/screen/healthdoll - var/obj/screen/internals - - var/ui_style_icon = 'icons/mob/screen_midnight.dmi' - -/datum/hud/New(mob/owner , ui_style = 'icons/mob/screen_midnight.dmi') - mymob = owner - - ui_style_icon = ui_style - - hide_actions_toggle = new - hide_actions_toggle.InitialiseIcon(src) - - hand_slots = list() - - for(var/mytype in subtypesof(/obj/screen/plane_master)) - var/obj/screen/plane_master/instance = new mytype() - plane_masters["[instance.plane]"] = instance - instance.backdrop(mymob) - -/datum/hud/Destroy() - if(mymob.hud_used == src) - mymob.hud_used = null - - qdel(hide_actions_toggle) - hide_actions_toggle = null - - qdel(module_store_icon) - module_store_icon = null - - if(static_inventory.len) - for(var/thing in static_inventory) - qdel(thing) - static_inventory.Cut() - - inv_slots.Cut() - action_intent = null - zone_select = null - pull_icon = null - - if(toggleable_inventory.len) - for(var/thing in toggleable_inventory) - qdel(thing) - toggleable_inventory.Cut() - - if(hotkeybuttons.len) - for(var/thing in hotkeybuttons) - qdel(thing) - hotkeybuttons.Cut() - - throw_icon = null - - if(infodisplay.len) - for(var/thing in infodisplay) - qdel(thing) - infodisplay.Cut() - - healths = null - healthdoll = null - internals = null - lingchemdisplay = null - devilsouldisplay = null - lingstingdisplay = null - blobpwrdisplay = null - alien_plasma_display = null - alien_queen_finder = null - deity_power_display = null - deity_follower_display = null - nightvisionicon = null - - if(plane_masters.len) - for(var/thing in plane_masters) - qdel(plane_masters[thing]) - plane_masters.Cut() - - if(screenoverlays.len) - for(var/thing in screenoverlays) - qdel(thing) - screenoverlays.Cut() - mymob = null - - return ..() - -/mob/proc/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud(src) - update_sight() - -//Version denotes which style should be displayed. blank or 0 means "next version" -/datum/hud/proc/show_hud(version = 0,mob/viewmob) - if(!ismob(mymob)) - return 0 - var/mob/screenmob = viewmob || mymob - if(!screenmob.client) - return 0 - - screenmob.client.screen = list() - - var/display_hud_version = version - if(!display_hud_version) //If 0 or blank, display the next hud version - display_hud_version = hud_version + 1 - if(display_hud_version > HUD_VERSIONS) //If the requested version number is greater than the available versions, reset back to the first version - display_hud_version = 1 - - switch(display_hud_version) - if(HUD_STYLE_STANDARD) //Default HUD - hud_shown = 1 //Governs behavior of other procs - if(static_inventory.len) - screenmob.client.screen += static_inventory - if(toggleable_inventory.len && screenmob.hud_used && screenmob.hud_used.inventory_shown) - screenmob.client.screen += toggleable_inventory - if(hotkeybuttons.len && !hotkey_ui_hidden) - screenmob.client.screen += hotkeybuttons - if(infodisplay.len) - screenmob.client.screen += infodisplay - - screenmob.client.screen += hide_actions_toggle - - if(action_intent) - action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position - - if(HUD_STYLE_REDUCED) //Reduced HUD - hud_shown = 0 //Governs behavior of other procs - if(static_inventory.len) - screenmob.client.screen -= static_inventory - if(toggleable_inventory.len) - screenmob.client.screen -= toggleable_inventory - if(hotkeybuttons.len) - screenmob.client.screen -= hotkeybuttons - if(infodisplay.len) - screenmob.client.screen += infodisplay - - //These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay - for(var/h in hand_slots) - var/obj/screen/hand = hand_slots[h] - if(hand) - screenmob.client.screen += hand - if(action_intent) - screenmob.client.screen += action_intent //we want the intent switcher visible - action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. - - if(HUD_STYLE_NOHUD) //No HUD - hud_shown = 0 //Governs behavior of other procs - if(static_inventory.len) - screenmob.client.screen -= static_inventory - if(toggleable_inventory.len) - screenmob.client.screen -= toggleable_inventory - if(hotkeybuttons.len) - screenmob.client.screen -= hotkeybuttons - if(infodisplay.len) - screenmob.client.screen -= infodisplay - - for(var/thing in plane_masters) - screenmob.client.screen += plane_masters[thing] - - hud_version = display_hud_version - persistent_inventory_update(screenmob) - mymob.update_action_buttons(1) - reorganize_alerts() - mymob.reload_fullscreen() - update_parallax_pref(screenmob) - - -/datum/hud/human/show_hud(version = 0,mob/viewmob) - ..() - hidden_inventory_update(viewmob) - -/datum/hud/robot/show_hud(version = 0, mob/viewmob) - ..() - update_robot_modules_display() - -/datum/hud/proc/hidden_inventory_update() - return - -/datum/hud/proc/persistent_inventory_update(mob/viewer) - if(!mymob) - return - -//Triggered when F12 is pressed (Unless someone changed something in the DMF) -/mob/verb/button_pressed_F12() - set name = "F12" - set hidden = 1 - - if(hud_used && client) - hud_used.show_hud() //Shows the next hud preset - to_chat(usr, "Switched HUD mode. Press F12 to toggle.") - else - to_chat(usr, "This mob type does not use a HUD.") - - -//(re)builds the hand ui slots, throwing away old ones -//not really worth jugglying existing ones so we just scrap+rebuild -//9/10 this is only called once per mob and only for 2 hands -/datum/hud/proc/build_hand_slots(ui_style = 'icons/mob/screen_midnight.dmi') - for(var/h in hand_slots) - var/obj/screen/inventory/hand/H = hand_slots[h] - if(H) - static_inventory -= H - hand_slots = list() - var/obj/screen/inventory/hand/hand_box - for(var/i in 1 to mymob.held_items.len) - hand_box = new /obj/screen/inventory/hand() - hand_box.name = mymob.get_held_index_name(i) - hand_box.icon = ui_style - hand_box.icon_state = "hand_[mymob.held_index_to_dir(i)]" - hand_box.screen_loc = ui_hand_position(i) - hand_box.held_index = i - hand_slots["[i]"] = hand_box - hand_box.hud = src - static_inventory += hand_box - hand_box.update_icon() - - var/i = 1 - for(var/obj/screen/swap_hand/SH in static_inventory) - SH.screen_loc = ui_swaphand_position(mymob,!(i % 2) ? 2: 1) - i++ - for(var/obj/screen/human/equip/E in static_inventory) - E.screen_loc = ui_equip_position(mymob) - if(mymob.hud_used) - show_hud(HUD_STYLE_STANDARD,mymob) +/* + The hud datum + Used to show and hide huds for all the different mob types, + including inventories and item quick actions. +*/ + +/datum/hud + var/mob/mymob + + var/hud_shown = 1 //Used for the HUD toggle (F12) + var/hud_version = 1 //Current displayed version of the HUD + var/inventory_shown = 0 //Equipped item inventory + var/show_intent_icons = 0 + var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) + + var/obj/screen/ling/chems/lingchemdisplay + var/obj/screen/ling/sting/lingstingdisplay + + var/obj/screen/blobpwrdisplay + + var/obj/screen/alien_plasma_display + var/obj/screen/alien_queen_finder + + var/obj/screen/devil/soul_counter/devilsouldisplay + + var/obj/screen/deity_power_display + var/obj/screen/deity_follower_display + + var/obj/screen/nightvisionicon + var/obj/screen/action_intent + var/obj/screen/zone_select + var/obj/screen/pull_icon + var/obj/screen/throw_icon + var/obj/screen/module_store_icon + + var/list/static_inventory = list() //the screen objects which are static + var/list/toggleable_inventory = list() //the screen objects which can be hidden + var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys + var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...) + var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...) + var/list/inv_slots[slots_amt] // /obj/screen/inventory objects, ordered by their slot ID. + var/list/hand_slots // /obj/screen/inventory/hand objects, assoc list of "[held_index]" = object + var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object + + var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle + var/action_buttons_hidden = 0 + + var/obj/screen/healths + var/obj/screen/healthdoll + var/obj/screen/internals + + var/ui_style_icon = 'icons/mob/screen_midnight.dmi' + +/datum/hud/New(mob/owner , ui_style = 'icons/mob/screen_midnight.dmi') + mymob = owner + + ui_style_icon = ui_style + + hide_actions_toggle = new + hide_actions_toggle.InitialiseIcon(src) + + hand_slots = list() + + for(var/mytype in subtypesof(/obj/screen/plane_master)) + var/obj/screen/plane_master/instance = new mytype() + plane_masters["[instance.plane]"] = instance + instance.backdrop(mymob) + +/datum/hud/Destroy() + if(mymob.hud_used == src) + mymob.hud_used = null + + qdel(hide_actions_toggle) + hide_actions_toggle = null + + qdel(module_store_icon) + module_store_icon = null + + if(static_inventory.len) + for(var/thing in static_inventory) + qdel(thing) + static_inventory.Cut() + + inv_slots.Cut() + action_intent = null + zone_select = null + pull_icon = null + + if(toggleable_inventory.len) + for(var/thing in toggleable_inventory) + qdel(thing) + toggleable_inventory.Cut() + + if(hotkeybuttons.len) + for(var/thing in hotkeybuttons) + qdel(thing) + hotkeybuttons.Cut() + + throw_icon = null + + if(infodisplay.len) + for(var/thing in infodisplay) + qdel(thing) + infodisplay.Cut() + + healths = null + healthdoll = null + internals = null + lingchemdisplay = null + devilsouldisplay = null + lingstingdisplay = null + blobpwrdisplay = null + alien_plasma_display = null + alien_queen_finder = null + deity_power_display = null + deity_follower_display = null + nightvisionicon = null + + if(plane_masters.len) + for(var/thing in plane_masters) + qdel(plane_masters[thing]) + plane_masters.Cut() + + if(screenoverlays.len) + for(var/thing in screenoverlays) + qdel(thing) + screenoverlays.Cut() + mymob = null + + return ..() + +/mob/proc/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud(src) + update_sight() + +//Version denotes which style should be displayed. blank or 0 means "next version" +/datum/hud/proc/show_hud(version = 0,mob/viewmob) + if(!ismob(mymob)) + return 0 + var/mob/screenmob = viewmob || mymob + if(!screenmob.client) + return 0 + + screenmob.client.screen = list() + + var/display_hud_version = version + if(!display_hud_version) //If 0 or blank, display the next hud version + display_hud_version = hud_version + 1 + if(display_hud_version > HUD_VERSIONS) //If the requested version number is greater than the available versions, reset back to the first version + display_hud_version = 1 + + switch(display_hud_version) + if(HUD_STYLE_STANDARD) //Default HUD + hud_shown = 1 //Governs behavior of other procs + if(static_inventory.len) + screenmob.client.screen += static_inventory + if(toggleable_inventory.len && screenmob.hud_used && screenmob.hud_used.inventory_shown) + screenmob.client.screen += toggleable_inventory + if(hotkeybuttons.len && !hotkey_ui_hidden) + screenmob.client.screen += hotkeybuttons + if(infodisplay.len) + screenmob.client.screen += infodisplay + + screenmob.client.screen += hide_actions_toggle + + if(action_intent) + action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position + + if(HUD_STYLE_REDUCED) //Reduced HUD + hud_shown = 0 //Governs behavior of other procs + if(static_inventory.len) + screenmob.client.screen -= static_inventory + if(toggleable_inventory.len) + screenmob.client.screen -= toggleable_inventory + if(hotkeybuttons.len) + screenmob.client.screen -= hotkeybuttons + if(infodisplay.len) + screenmob.client.screen += infodisplay + + //These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay + for(var/h in hand_slots) + var/obj/screen/hand = hand_slots[h] + if(hand) + screenmob.client.screen += hand + if(action_intent) + screenmob.client.screen += action_intent //we want the intent switcher visible + action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is. + + if(HUD_STYLE_NOHUD) //No HUD + hud_shown = 0 //Governs behavior of other procs + if(static_inventory.len) + screenmob.client.screen -= static_inventory + if(toggleable_inventory.len) + screenmob.client.screen -= toggleable_inventory + if(hotkeybuttons.len) + screenmob.client.screen -= hotkeybuttons + if(infodisplay.len) + screenmob.client.screen -= infodisplay + + for(var/thing in plane_masters) + screenmob.client.screen += plane_masters[thing] + + hud_version = display_hud_version + persistent_inventory_update(screenmob) + mymob.update_action_buttons(1) + reorganize_alerts() + mymob.reload_fullscreen() + update_parallax_pref(screenmob) + +/datum/hud/human/show_hud(version = 0,mob/viewmob) + ..() + hidden_inventory_update(viewmob) + +/datum/hud/robot/show_hud(version = 0, mob/viewmob) + ..() + update_robot_modules_display() + +/datum/hud/proc/hidden_inventory_update() + return + +/datum/hud/proc/persistent_inventory_update(mob/viewer) + if(!mymob) + return + +//Triggered when F12 is pressed (Unless someone changed something in the DMF) +/mob/verb/button_pressed_F12() + set name = "F12" + set hidden = 1 + + if(hud_used && client) + hud_used.show_hud() //Shows the next hud preset + to_chat(usr, "Switched HUD mode. Press F12 to toggle.") + else + to_chat(usr, "This mob type does not use a HUD.") + + +//(re)builds the hand ui slots, throwing away old ones +//not really worth jugglying existing ones so we just scrap+rebuild +//9/10 this is only called once per mob and only for 2 hands +/datum/hud/proc/build_hand_slots(ui_style = 'icons/mob/screen_midnight.dmi') + for(var/h in hand_slots) + var/obj/screen/inventory/hand/H = hand_slots[h] + if(H) + static_inventory -= H + hand_slots = list() + var/obj/screen/inventory/hand/hand_box + for(var/i in 1 to mymob.held_items.len) + hand_box = new /obj/screen/inventory/hand() + hand_box.name = mymob.get_held_index_name(i) + hand_box.icon = ui_style + hand_box.icon_state = "hand_[mymob.held_index_to_dir(i)]" + hand_box.screen_loc = ui_hand_position(i) + hand_box.held_index = i + hand_slots["[i]"] = hand_box + hand_box.hud = src + static_inventory += hand_box + hand_box.update_icon() + + var/i = 1 + for(var/obj/screen/swap_hand/SH in static_inventory) + SH.screen_loc = ui_swaphand_position(mymob,!(i % 2) ? 2: 1) + i++ + for(var/obj/screen/human/equip/E in static_inventory) + E.screen_loc = ui_equip_position(mymob) + if(mymob.hud_used) + show_hud(HUD_STYLE_STANDARD,mymob) + +/datum/hud/proc/update_locked_slots() + return \ No newline at end of file diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index f35579c16b..ecb13d8a9b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -1,440 +1,438 @@ -/obj/screen/human - icon = 'icons/mob/screen_midnight.dmi' - -/obj/screen/human/toggle - name = "toggle" - icon_state = "toggle" - -/obj/screen/human/toggle/Click() - - var/mob/targetmob = usr - - if(isobserver(usr)) - if(ishuman(usr.client.eye) && (usr.client.eye != usr)) - var/mob/M = usr.client.eye - targetmob = M - - if(usr.hud_used.inventory_shown && targetmob.hud_used) - usr.hud_used.inventory_shown = 0 - usr.client.screen -= targetmob.hud_used.toggleable_inventory - else - usr.hud_used.inventory_shown = 1 - usr.client.screen += targetmob.hud_used.toggleable_inventory - - targetmob.hud_used.hidden_inventory_update(usr) - -/obj/screen/human/equip - name = "equip" - icon_state = "act_equip" - -/obj/screen/human/equip/Click() - if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech - return 1 - var/mob/living/carbon/human/H = usr - H.quick_equip() - -/obj/screen/devil - invisibility = INVISIBILITY_ABSTRACT - -/obj/screen/devil/soul_counter - icon = 'icons/mob/screen_gen.dmi' - name = "souls owned" - icon_state = "Devil-6" - screen_loc = ui_devilsouldisplay - -/obj/screen/devil/soul_counter/proc/update_counter(souls = 0) - invisibility = 0 - maptext = "
[souls]
" - switch(souls) - if(0,null) - icon_state = "Devil-1" - if(1,2) - icon_state = "Devil-2" - if(3 to 5) - icon_state = "Devil-3" - if(6 to 8) - icon_state = "Devil-4" - if(9 to INFINITY) - icon_state = "Devil-5" - else - icon_state = "Devil-6" - -/obj/screen/devil/soul_counter/proc/clear() - invisibility = INVISIBILITY_ABSTRACT - -/obj/screen/ling - invisibility = INVISIBILITY_ABSTRACT - -/obj/screen/ling/sting - name = "current sting" - screen_loc = ui_lingstingdisplay - -/obj/screen/ling/sting/Click() - if(isobserver(usr)) - return - var/mob/living/carbon/U = usr - U.unset_sting() - -/obj/screen/ling/chems - name = "chemical storage" - icon_state = "power_display" - screen_loc = ui_lingchemdisplay - -/mob/living/carbon/human/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style)) - - -/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi') - ..() - owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) - - var/obj/screen/using - var/obj/screen/inventory/inv_box - - using = new /obj/screen/craft - using.icon = ui_style - static_inventory += using - - using = new/obj/screen/language_menu - using.icon = ui_style - static_inventory += using - - using = new /obj/screen/area_creator - using.icon = ui_style - static_inventory += using - - action_intent = new /obj/screen/act_intent/segmented - action_intent.icon_state = mymob.a_intent - static_inventory += action_intent - - using = new /obj/screen/mov_intent - using.icon = ui_style - using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") - using.screen_loc = ui_movi - static_inventory += using - - using = new /obj/screen/drop() - using.icon = ui_style - using.screen_loc = ui_drop_throw - static_inventory += using - - inv_box = new /obj/screen/inventory() - inv_box.name = "i_clothing" - inv_box.icon = ui_style - inv_box.slot_id = slot_w_uniform - inv_box.icon_state = "uniform" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_iclothing - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "o_clothing" - inv_box.icon = ui_style - inv_box.slot_id = slot_wear_suit - inv_box.icon_state = "suit" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_oclothing - toggleable_inventory += inv_box - - build_hand_slots(ui_style) - - using = new /obj/screen/swap_hand() - using.icon = ui_style - using.icon_state = "swap_1" - using.screen_loc = ui_swaphand_position(owner,1) - static_inventory += using - - using = new /obj/screen/swap_hand() - using.icon = ui_style - using.icon_state = "swap_2" - using.screen_loc = ui_swaphand_position(owner,2) - static_inventory += using - - inv_box = new /obj/screen/inventory() - inv_box.name = "id" - inv_box.icon = ui_style - inv_box.icon_state = "id" -// inv_box.icon_full = "template_small" - inv_box.screen_loc = ui_id - inv_box.slot_id = slot_wear_id - static_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "mask" - inv_box.icon = ui_style - inv_box.icon_state = "mask" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_mask - inv_box.slot_id = slot_wear_mask - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "neck" - inv_box.icon = ui_style - inv_box.icon_state = "neck" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_neck - inv_box.slot_id = slot_neck - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "back" - inv_box.icon = ui_style - inv_box.icon_state = "back" -// inv_box.icon_full = "template_small" - inv_box.screen_loc = ui_back - inv_box.slot_id = slot_back - static_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "storage1" - inv_box.icon = ui_style - inv_box.icon_state = "pocket" -// inv_box.icon_full = "template_small" - inv_box.screen_loc = ui_storage1 - inv_box.slot_id = slot_l_store - static_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "storage2" - inv_box.icon = ui_style - inv_box.icon_state = "pocket" -// inv_box.icon_full = "template_small" - inv_box.screen_loc = ui_storage2 - inv_box.slot_id = slot_r_store - static_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "suit storage" - inv_box.icon = ui_style - inv_box.icon_state = "suit_storage" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_sstore1 - inv_box.slot_id = slot_s_store - static_inventory += inv_box - - using = new /obj/screen/resist() - using.icon = ui_style - using.screen_loc = ui_pull_resist - hotkeybuttons += using - - using = new /obj/screen/human/toggle() - using.icon = ui_style - using.screen_loc = ui_inventory - static_inventory += using - - using = new /obj/screen/human/equip() - using.icon = ui_style - using.screen_loc = ui_equip_position(mymob) - static_inventory += using - - inv_box = new /obj/screen/inventory() - inv_box.name = "gloves" - inv_box.icon = ui_style - inv_box.icon_state = "gloves" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_gloves - inv_box.slot_id = slot_gloves - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "eyes" - inv_box.icon = ui_style - inv_box.icon_state = "glasses" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_glasses - inv_box.slot_id = slot_glasses - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "ears" - inv_box.icon = ui_style - inv_box.icon_state = "ears" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_ears - inv_box.slot_id = slot_ears - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "head" - inv_box.icon = ui_style - inv_box.icon_state = "head" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_head - inv_box.slot_id = slot_head - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "shoes" - inv_box.icon = ui_style - inv_box.icon_state = "shoes" -// inv_box.icon_full = "template" - inv_box.screen_loc = ui_shoes - inv_box.slot_id = slot_shoes - toggleable_inventory += inv_box - - inv_box = new /obj/screen/inventory() - inv_box.name = "belt" - inv_box.icon = ui_style - inv_box.icon_state = "belt" -// inv_box.icon_full = "template_small" - inv_box.screen_loc = ui_belt - inv_box.slot_id = slot_belt - static_inventory += inv_box - - throw_icon = new /obj/screen/throw_catch() - throw_icon.icon = ui_style - throw_icon.screen_loc = ui_drop_throw - hotkeybuttons += throw_icon - - internals = new /obj/screen/internals() - infodisplay += internals - - healths = new /obj/screen/healths() - infodisplay += healths - - //citadel code - arousal = new /obj/screen/arousal() - infodisplay += arousal - - healthdoll = new /obj/screen/healthdoll() - infodisplay += healthdoll - - pull_icon = new /obj/screen/pull() - pull_icon.icon = ui_style - pull_icon.update_icon(mymob) - pull_icon.screen_loc = ui_pull_resist - static_inventory += pull_icon - - lingchemdisplay = new /obj/screen/ling/chems() - infodisplay += lingchemdisplay - - lingstingdisplay = new /obj/screen/ling/sting() - infodisplay += lingstingdisplay - - devilsouldisplay = new /obj/screen/devil/soul_counter - infodisplay += devilsouldisplay - - zone_select = new /obj/screen/zone_sel() - zone_select.icon = ui_style - zone_select.update_icon(mymob) - static_inventory += zone_select - - for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) - if(inv.slot_id) - inv.hud = src - inv_slots[inv.slot_id] = inv - inv.update_icon() - -/datum/hud/human/hidden_inventory_update(mob/viewer) - if(!mymob) - return - var/mob/living/carbon/human/H = mymob - - var/mob/screenmob = viewer || H - - if(screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown) - if(H.shoes) - H.shoes.screen_loc = ui_shoes - screenmob.client.screen += H.shoes - if(H.gloves) - H.gloves.screen_loc = ui_gloves - screenmob.client.screen += H.gloves - if(H.ears) - H.ears.screen_loc = ui_ears - screenmob.client.screen += H.ears - if(H.glasses) - H.glasses.screen_loc = ui_glasses - screenmob.client.screen += H.glasses - if(H.w_uniform) - H.w_uniform.screen_loc = ui_iclothing - screenmob.client.screen += H.w_uniform - if(H.wear_suit) - H.wear_suit.screen_loc = ui_oclothing - screenmob.client.screen += H.wear_suit - if(H.wear_mask) - H.wear_mask.screen_loc = ui_mask - screenmob.client.screen += H.wear_mask - if(H.wear_neck) - H.wear_neck.screen_loc = ui_neck - screenmob.client.screen += H.wear_neck - if(H.head) - H.head.screen_loc = ui_head - screenmob.client.screen += H.head - else - if(H.shoes) screenmob.client.screen -= H.shoes - if(H.gloves) screenmob.client.screen -= H.gloves - if(H.ears) screenmob.client.screen -= H.ears - if(H.glasses) screenmob.client.screen -= H.glasses - if(H.w_uniform) screenmob.client.screen -= H.w_uniform - if(H.wear_suit) screenmob.client.screen -= H.wear_suit - if(H.wear_mask) screenmob.client.screen -= H.wear_mask - if(H.wear_neck) screenmob.client.screen -= H.wear_neck - if(H.head) screenmob.client.screen -= H.head - - - -/datum/hud/human/persistent_inventory_update(mob/viewer) - if(!mymob) - return - ..() - var/mob/living/carbon/human/H = mymob - - var/mob/screenmob = viewer || H - - if(screenmob.hud_used) - if(screenmob.hud_used.hud_shown) - if(H.s_store) - H.s_store.screen_loc = ui_sstore1 - screenmob.client.screen += H.s_store - if(H.wear_id) - H.wear_id.screen_loc = ui_id - screenmob.client.screen += H.wear_id - if(H.belt) - H.belt.screen_loc = ui_belt - screenmob.client.screen += H.belt - if(H.back) - H.back.screen_loc = ui_back - screenmob.client.screen += H.back - if(H.l_store) - H.l_store.screen_loc = ui_storage1 - screenmob.client.screen += H.l_store - if(H.r_store) - H.r_store.screen_loc = ui_storage2 - screenmob.client.screen += H.r_store - else - if(H.s_store) - screenmob.client.screen -= H.s_store - if(H.wear_id) - screenmob.client.screen -= H.wear_id - if(H.belt) - screenmob.client.screen -= H.belt - if(H.back) - screenmob.client.screen -= H.back - if(H.l_store) - screenmob.client.screen -= H.l_store - if(H.r_store) - screenmob.client.screen -= H.r_store - - if(hud_version != HUD_STYLE_NOHUD) - for(var/obj/item/I in H.held_items) - I.screen_loc = ui_hand_position(H.get_held_index_of_item(I)) - screenmob.client.screen += I - else - for(var/obj/item/I in H.held_items) - I.screen_loc = null - screenmob.client.screen -= I - - -/mob/living/carbon/human/verb/toggle_hotkey_verbs() - set category = "OOC" - set name = "Toggle hotkey buttons" - set desc = "This disables or enables the user interface buttons which can be used with hotkeys." - - if(hud_used.hotkey_ui_hidden) - client.screen += hud_used.hotkeybuttons - hud_used.hotkey_ui_hidden = 0 - else - client.screen -= hud_used.hotkeybuttons - hud_used.hotkey_ui_hidden = 1 +/obj/screen/human + icon = 'icons/mob/screen_midnight.dmi' + +/obj/screen/human/toggle + name = "toggle" + icon_state = "toggle" + +/obj/screen/human/toggle/Click() + + var/mob/targetmob = usr + + if(isobserver(usr)) + if(ishuman(usr.client.eye) && (usr.client.eye != usr)) + var/mob/M = usr.client.eye + targetmob = M + + if(usr.hud_used.inventory_shown && targetmob.hud_used) + usr.hud_used.inventory_shown = 0 + usr.client.screen -= targetmob.hud_used.toggleable_inventory + else + usr.hud_used.inventory_shown = 1 + usr.client.screen += targetmob.hud_used.toggleable_inventory + + targetmob.hud_used.hidden_inventory_update(usr) + +/obj/screen/human/equip + name = "equip" + icon_state = "act_equip" + +/obj/screen/human/equip/Click() + if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech + return 1 + var/mob/living/carbon/human/H = usr + H.quick_equip() + +/obj/screen/devil + invisibility = INVISIBILITY_ABSTRACT + +/obj/screen/devil/soul_counter + icon = 'icons/mob/screen_gen.dmi' + name = "souls owned" + icon_state = "Devil-6" + screen_loc = ui_devilsouldisplay + +/obj/screen/devil/soul_counter/proc/update_counter(souls = 0) + invisibility = 0 + maptext = "
[souls]
" + switch(souls) + if(0,null) + icon_state = "Devil-1" + if(1,2) + icon_state = "Devil-2" + if(3 to 5) + icon_state = "Devil-3" + if(6 to 8) + icon_state = "Devil-4" + if(9 to INFINITY) + icon_state = "Devil-5" + else + icon_state = "Devil-6" + +/obj/screen/devil/soul_counter/proc/clear() + invisibility = INVISIBILITY_ABSTRACT + +/obj/screen/ling + invisibility = INVISIBILITY_ABSTRACT + +/obj/screen/ling/sting + name = "current sting" + screen_loc = ui_lingstingdisplay + +/obj/screen/ling/sting/Click() + if(isobserver(usr)) + return + var/mob/living/carbon/U = usr + U.unset_sting() + +/obj/screen/ling/chems + name = "chemical storage" + icon_state = "power_display" + screen_loc = ui_lingchemdisplay + +/mob/living/carbon/human/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style)) + + +/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi') + ..() + owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) + + var/obj/screen/using + var/obj/screen/inventory/inv_box + + using = new /obj/screen/craft + using.icon = ui_style + static_inventory += using + + using = new/obj/screen/language_menu + using.icon = ui_style + static_inventory += using + + using = new /obj/screen/area_creator + using.icon = ui_style + static_inventory += using + + action_intent = new /obj/screen/act_intent/segmented + action_intent.icon_state = mymob.a_intent + static_inventory += action_intent + + using = new /obj/screen/mov_intent + using.icon = ui_style + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") + using.screen_loc = ui_movi + static_inventory += using + + using = new /obj/screen/drop() + using.icon = ui_style + using.screen_loc = ui_drop_throw + static_inventory += using + + inv_box = new /obj/screen/inventory() + inv_box.name = "i_clothing" + inv_box.icon = ui_style + inv_box.slot_id = slot_w_uniform + inv_box.icon_state = "uniform" + inv_box.screen_loc = ui_iclothing + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "o_clothing" + inv_box.icon = ui_style + inv_box.slot_id = slot_wear_suit + inv_box.icon_state = "suit" + inv_box.screen_loc = ui_oclothing + toggleable_inventory += inv_box + + build_hand_slots(ui_style) + + using = new /obj/screen/swap_hand() + using.icon = ui_style + using.icon_state = "swap_1" + using.screen_loc = ui_swaphand_position(owner,1) + static_inventory += using + + using = new /obj/screen/swap_hand() + using.icon = ui_style + using.icon_state = "swap_2" + using.screen_loc = ui_swaphand_position(owner,2) + static_inventory += using + + inv_box = new /obj/screen/inventory() + inv_box.name = "id" + inv_box.icon = ui_style + inv_box.icon_state = "id" + inv_box.screen_loc = ui_id + inv_box.slot_id = slot_wear_id + static_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "mask" + inv_box.icon = ui_style + inv_box.icon_state = "mask" + inv_box.screen_loc = ui_mask + inv_box.slot_id = slot_wear_mask + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "neck" + inv_box.icon = ui_style + inv_box.icon_state = "neck" + inv_box.screen_loc = ui_neck + inv_box.slot_id = slot_neck + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "back" + inv_box.icon = ui_style + inv_box.icon_state = "back" + inv_box.screen_loc = ui_back + inv_box.slot_id = slot_back + static_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "storage1" + inv_box.icon = ui_style + inv_box.icon_state = "pocket" + inv_box.screen_loc = ui_storage1 + inv_box.slot_id = slot_l_store + static_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "storage2" + inv_box.icon = ui_style + inv_box.icon_state = "pocket" + inv_box.screen_loc = ui_storage2 + inv_box.slot_id = slot_r_store + static_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "suit storage" + inv_box.icon = ui_style + inv_box.icon_state = "suit_storage" + inv_box.screen_loc = ui_sstore1 + inv_box.slot_id = slot_s_store + static_inventory += inv_box + + using = new /obj/screen/resist() + using.icon = ui_style + using.screen_loc = ui_pull_resist + hotkeybuttons += using + + using = new /obj/screen/human/toggle() + using.icon = ui_style + using.screen_loc = ui_inventory + static_inventory += using + + using = new /obj/screen/human/equip() + using.icon = ui_style + using.screen_loc = ui_equip_position(mymob) + static_inventory += using + + inv_box = new /obj/screen/inventory() + inv_box.name = "gloves" + inv_box.icon = ui_style + inv_box.icon_state = "gloves" + inv_box.screen_loc = ui_gloves + inv_box.slot_id = slot_gloves + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "eyes" + inv_box.icon = ui_style + inv_box.icon_state = "glasses" + inv_box.screen_loc = ui_glasses + inv_box.slot_id = slot_glasses + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "ears" + inv_box.icon = ui_style + inv_box.icon_state = "ears" + inv_box.screen_loc = ui_ears + inv_box.slot_id = slot_ears + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "head" + inv_box.icon = ui_style + inv_box.icon_state = "head" + inv_box.screen_loc = ui_head + inv_box.slot_id = slot_head + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "shoes" + inv_box.icon = ui_style + inv_box.icon_state = "shoes" + inv_box.screen_loc = ui_shoes + inv_box.slot_id = slot_shoes + toggleable_inventory += inv_box + + inv_box = new /obj/screen/inventory() + inv_box.name = "belt" + inv_box.icon = ui_style + inv_box.icon_state = "belt" +// inv_box.icon_full = "template_small" + inv_box.screen_loc = ui_belt + inv_box.slot_id = slot_belt + static_inventory += inv_box + + throw_icon = new /obj/screen/throw_catch() + throw_icon.icon = ui_style + throw_icon.screen_loc = ui_drop_throw + hotkeybuttons += throw_icon + + internals = new /obj/screen/internals() + infodisplay += internals + + healths = new /obj/screen/healths() + infodisplay += healths + + //citadel code + arousal = new /obj/screen/arousal() + infodisplay += arousal + + healthdoll = new /obj/screen/healthdoll() + infodisplay += healthdoll + + pull_icon = new /obj/screen/pull() + pull_icon.icon = ui_style + pull_icon.update_icon(mymob) + pull_icon.screen_loc = ui_pull_resist + static_inventory += pull_icon + + lingchemdisplay = new /obj/screen/ling/chems() + infodisplay += lingchemdisplay + + lingstingdisplay = new /obj/screen/ling/sting() + infodisplay += lingstingdisplay + + devilsouldisplay = new /obj/screen/devil/soul_counter + infodisplay += devilsouldisplay + + zone_select = new /obj/screen/zone_sel() + zone_select.icon = ui_style + zone_select.update_icon(mymob) + static_inventory += zone_select + + for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + if(inv.slot_id) + inv.hud = src + inv_slots[inv.slot_id] = inv + inv.update_icon() + +/datum/hud/human/update_locked_slots() + if(!mymob) + return + var/mob/living/carbon/human/H = mymob + var/datum/species/S = H.dna.species + for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory)) + if(inv.slot_id) + if(inv.slot_id in S.no_equip) + inv.alpha = 128 + else + inv.alpha = initial(inv.alpha) + +/datum/hud/human/hidden_inventory_update(mob/viewer) + if(!mymob) + return + var/mob/living/carbon/human/H = mymob + + var/mob/screenmob = viewer || H + + if(screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown) + if(H.shoes) + H.shoes.screen_loc = ui_shoes + screenmob.client.screen += H.shoes + if(H.gloves) + H.gloves.screen_loc = ui_gloves + screenmob.client.screen += H.gloves + if(H.ears) + H.ears.screen_loc = ui_ears + screenmob.client.screen += H.ears + if(H.glasses) + H.glasses.screen_loc = ui_glasses + screenmob.client.screen += H.glasses + if(H.w_uniform) + H.w_uniform.screen_loc = ui_iclothing + screenmob.client.screen += H.w_uniform + if(H.wear_suit) + H.wear_suit.screen_loc = ui_oclothing + screenmob.client.screen += H.wear_suit + if(H.wear_mask) + H.wear_mask.screen_loc = ui_mask + screenmob.client.screen += H.wear_mask + if(H.wear_neck) + H.wear_neck.screen_loc = ui_neck + screenmob.client.screen += H.wear_neck + if(H.head) + H.head.screen_loc = ui_head + screenmob.client.screen += H.head + else + if(H.shoes) screenmob.client.screen -= H.shoes + if(H.gloves) screenmob.client.screen -= H.gloves + if(H.ears) screenmob.client.screen -= H.ears + if(H.glasses) screenmob.client.screen -= H.glasses + if(H.w_uniform) screenmob.client.screen -= H.w_uniform + if(H.wear_suit) screenmob.client.screen -= H.wear_suit + if(H.wear_mask) screenmob.client.screen -= H.wear_mask + if(H.wear_neck) screenmob.client.screen -= H.wear_neck + if(H.head) screenmob.client.screen -= H.head + + + +/datum/hud/human/persistent_inventory_update(mob/viewer) + if(!mymob) + return + ..() + var/mob/living/carbon/human/H = mymob + + var/mob/screenmob = viewer || H + + if(screenmob.hud_used) + if(screenmob.hud_used.hud_shown) + if(H.s_store) + H.s_store.screen_loc = ui_sstore1 + screenmob.client.screen += H.s_store + if(H.wear_id) + H.wear_id.screen_loc = ui_id + screenmob.client.screen += H.wear_id + if(H.belt) + H.belt.screen_loc = ui_belt + screenmob.client.screen += H.belt + if(H.back) + H.back.screen_loc = ui_back + screenmob.client.screen += H.back + if(H.l_store) + H.l_store.screen_loc = ui_storage1 + screenmob.client.screen += H.l_store + if(H.r_store) + H.r_store.screen_loc = ui_storage2 + screenmob.client.screen += H.r_store + else + if(H.s_store) + screenmob.client.screen -= H.s_store + if(H.wear_id) + screenmob.client.screen -= H.wear_id + if(H.belt) + screenmob.client.screen -= H.belt + if(H.back) + screenmob.client.screen -= H.back + if(H.l_store) + screenmob.client.screen -= H.l_store + if(H.r_store) + screenmob.client.screen -= H.r_store + + if(hud_version != HUD_STYLE_NOHUD) + for(var/obj/item/I in H.held_items) + I.screen_loc = ui_hand_position(H.get_held_index_of_item(I)) + screenmob.client.screen += I + else + for(var/obj/item/I in H.held_items) + I.screen_loc = null + screenmob.client.screen -= I + + +/mob/living/carbon/human/verb/toggle_hotkey_verbs() + set category = "OOC" + set name = "Toggle hotkey buttons" + set desc = "This disables or enables the user interface buttons which can be used with hotkeys." + + if(hud_used.hotkey_ui_hidden) + client.screen += hud_used.hotkeybuttons + hud_used.hotkey_ui_hidden = 0 + else + client.screen -= hud_used.hotkeybuttons + hud_used.hotkey_ui_hidden = 1 diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index bfab19ba5f..3cd0d5bdbd 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -91,10 +91,9 @@ screen_loc = ui_language_menu /obj/screen/language_menu/Click() - var/mob/living/L = usr - if(!istype(L)) - return - L.open_language_menu(usr) + var/mob/M = usr + var/datum/language_holder/H = M.get_language_holder() + H.open_language_menu(usr) /obj/screen/inventory var/slot_id // The indentifier for the slot. It has nothing to do with ID cards. diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 9754901d96..24f6559dd6 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -28,7 +28,7 @@ if(sharpness) to_chat(user, "You begin to butcher [src]...") playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1) - if(do_mob(user, src, 80/sharpness)) + if(do_mob(user, src, 80/sharpness) && Adjacent(I)) harvest(user) return 1 return I.attack(src, user) diff --git a/code/citadel/cit_arousal.dm b/code/citadel/cit_arousal.dm index f2801d1ede..d0268d0bec 100644 --- a/code/citadel/cit_arousal.dm +++ b/code/citadel/cit_arousal.dm @@ -25,7 +25,7 @@ var/arousal_gain_rate = 1 //Rate at which this species becomes aroused var/arousal_lose_rate = 1 //Multiplier for how easily arousal can be relieved var/list/cum_fluids = list("semen") - var/list/milk_fludis = list("milk") + var/list/milk_fluids = list("milk") var/list/femcum_fluids = list("femcum") //Mob procs @@ -285,4 +285,4 @@ /mob/living/carbon/proc/force_orgasm(intensity) if(canbearoused && has_dna() && (has_penis() || has_vagina())) return 1 - return 0 \ No newline at end of file + return 0 diff --git a/code/controllers/admin.dm b/code/controllers/admin.dm index 3565620c88..fa10d398dd 100644 --- a/code/controllers/admin.dm +++ b/code/controllers/admin.dm @@ -6,7 +6,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) /obj/effect/statclick/Initialize(mapload, text, target) //Don't port this to Initialize it's too critical - ..() + . = ..() name = text src.target = target diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index fd3fe6d685..e9bdeca880 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -1,934 +1,931 @@ -//Configuraton defines //TODO: Move all yes/no switches into bitflags - -//Used by jobs_have_maint_access -#define ASSISTANTS_HAVE_MAINT_ACCESS 1 -#define SECURITY_HAS_MAINT_ACCESS 2 -#define EVERYONE_HAS_MAINT_ACCESS 4 - -/datum/configuration/can_vv_get(var_name) - var/static/list/banned_gets = list("autoadmin", "autoadmin_rank") - if (var_name in banned_gets) - return FALSE - return ..() - -/datum/configuration/vv_edit_var(var_name, var_value) - var/static/list/banned_edits = list("cross_address", "cross_allowed", "autoadmin", "autoadmin_rank") - if(var_name in banned_edits) - return FALSE - return ..() - -/datum/configuration - var/name = "Configuration" // datum name - - var/autoadmin = 0 - var/autoadmin_rank = "Game Admin" - - var/server_name = null // server name (the name of the game window) - var/server_sql_name = null // short form server name used for the DB - var/station_name = null // station name (the name of the station in-game) - var/lobby_countdown = 120 // In between round countdown. - var/round_end_countdown = 25 // Post round murder death kill countdown - var/hub = 0 - - var/log_ooc = 0 // log OOC channel - var/log_access = 0 // log login/logout - var/log_say = 0 // log client say - var/log_admin = 0 // log admin actions - var/log_game = 0 // log game events - var/log_vote = 0 // log voting - var/log_whisper = 0 // log client whisper - var/log_prayer = 0 // log prayers - var/log_law = 0 // log lawchanges - var/log_emote = 0 // log emotes - var/log_attack = 0 // log attack messages - var/log_adminchat = 0 // log admin chat messages - var/log_pda = 0 // log pda messages - var/log_hrefs = 0 // log all links clicked in-game. Could be used for debugging and tracking down exploits - var/log_twitter = 0 // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases. - var/log_world_topic = 0 // log all world.Topic() calls - var/log_runtimes = FALSE // log runtimes into a file - var/sql_enabled = 0 // for sql switching - var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour - var/allow_vote_restart = 0 // allow votes to restart - var/allow_vote_mode = 0 // allow votes to change mode - var/vote_delay = 6000 // minimum time between voting sessions (deciseconds, 10 minute default) - var/vote_period = 600 // length of voting period (deciseconds, default 1 minute) - var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi) - var/vote_no_dead = 0 // dead people can't vote (tbi) - var/del_new_on_log = 1 // del's new players if they log before they spawn in - var/allow_Metadata = 0 // Metadata is supported. - var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. - var/fps = 20 - var/allow_holidays = 0 //toggles whether holiday-specific content should be used - var/tick_limit_mc_init = TICK_LIMIT_MC_INIT_DEFAULT //SSinitialization throttling - - var/hostedby = null - var/respawn = 1 - var/guest_jobban = 1 - var/usewhitelist = 0 +//Configuraton defines //TODO: Move all yes/no switches into bitflags + +//Used by jobs_have_maint_access +#define ASSISTANTS_HAVE_MAINT_ACCESS 1 +#define SECURITY_HAS_MAINT_ACCESS 2 +#define EVERYONE_HAS_MAINT_ACCESS 4 + +/datum/configuration/can_vv_get(var_name) + var/static/list/banned_gets = list("autoadmin", "autoadmin_rank") + if (var_name in banned_gets) + return FALSE + return ..() + +/datum/configuration/vv_edit_var(var_name, var_value) + var/static/list/banned_edits = list("cross_address", "cross_allowed", "autoadmin", "autoadmin_rank") + if(var_name in banned_edits) + return FALSE + return ..() + +/datum/configuration + var/name = "Configuration" // datum name + + var/autoadmin = 0 + var/autoadmin_rank = "Game Admin" + + var/server_name = null // server name (the name of the game window) + var/server_sql_name = null // short form server name used for the DB + var/station_name = null // station name (the name of the station in-game) + var/lobby_countdown = 120 // In between round countdown. + var/round_end_countdown = 25 // Post round murder death kill countdown + var/hub = 0 + + var/log_ooc = 0 // log OOC channel + var/log_access = 0 // log login/logout + var/log_say = 0 // log client say + var/log_admin = 0 // log admin actions + var/log_game = 0 // log game events + var/log_vote = 0 // log voting + var/log_whisper = 0 // log client whisper + var/log_prayer = 0 // log prayers + var/log_law = 0 // log lawchanges + var/log_emote = 0 // log emotes + var/log_attack = 0 // log attack messages + var/log_adminchat = 0 // log admin chat messages + var/log_pda = 0 // log pda messages + var/log_twitter = 0 // log certain expliotable parrots and other such fun things in a JSON file of twitter valid phrases. + var/log_world_topic = 0 // log all world.Topic() calls + var/sql_enabled = 0 // for sql switching + var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour + var/allow_vote_restart = 0 // allow votes to restart + var/allow_vote_mode = 0 // allow votes to change mode + var/vote_delay = 6000 // minimum time between voting sessions (deciseconds, 10 minute default) + var/vote_period = 600 // length of voting period (deciseconds, default 1 minute) + var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi) + var/vote_no_dead = 0 // dead people can't vote (tbi) + var/del_new_on_log = 1 // del's new players if they log before they spawn in + var/allow_Metadata = 0 // Metadata is supported. + var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. + var/fps = 20 + var/allow_holidays = 0 //toggles whether holiday-specific content should be used + var/tick_limit_mc_init = TICK_LIMIT_MC_INIT_DEFAULT //SSinitialization throttling + + var/hostedby = null + var/respawn = 1 + var/guest_jobban = 1 + var/usewhitelist = 0 var/inactivity_period = 3000 //time in ds until a player is considered inactive var/afk_period = 6000 //time in ds until a player is considered afk and kickable var/kick_inactive = FALSE //force disconnect for inactive players - var/load_jobs_from_txt = 0 - var/automute_on = 0 //enables automuting/spam prevention - var/minimal_access_threshold = 0 //If the number of players is larger than this threshold, minimal access will be turned on. - var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access. - var/jobs_have_maint_access = 0 //Who gets maint access? See defines above. - var/sec_start_brig = 0 //makes sec start in brig or dept sec posts - - var/server - var/banappeals - var/wikiurl = "http://www.tgstation13.org/wiki" // Default wiki link. - var/forumurl = "http://tgstation13.org/phpBB/index.php" //default forums - var/rulesurl = "http://www.tgstation13.org/wiki/Rules" // default rules - var/githuburl = "https://www.github.com/tgstation/-tg-station" //default github - var/githubrepoid - - var/forbid_singulo_possession = 0 - var/useircbot = 0 - - var/check_randomizer = 0 - - var/allow_panic_bunker_bounce = 0 //Send new players somewhere else - var/panic_server_name = "somewhere else" - var/panic_address = "byond://" //Reconnect a player this linked server if this server isn't accepting new players - - //IP Intel vars - var/ipintel_email - var/ipintel_rating_bad = 1 - var/ipintel_save_good = 12 - var/ipintel_save_bad = 1 - var/ipintel_domain = "check.getipintel.net" - - var/admin_legacy_system = 0 //Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt - var/ban_legacy_system = 0 //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. Config option in config.txt - var/use_age_restriction_for_jobs = 0 //Do jobs use account age restrictions? --requires database - var/use_account_age_for_jobs = 0 //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected. - var/see_own_notes = 0 //Can players see their own admin notes (read-only)? Config option in config.txt - - //Population cap vars - var/soft_popcap = 0 - var/hard_popcap = 0 - var/extreme_popcap = 0 - var/soft_popcap_message = "Be warned that the server is currently serving a high number of users, consider using alternative game servers." - var/hard_popcap_message = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers." - var/extreme_popcap_message = "The server is currently serving a high number of users, find alternative servers." - - //game_options.txt configs - var/force_random_names = 0 - var/list/mode_names = list() - var/list/modes = list() // allowed modes - var/list/votable_modes = list() // votable modes - var/list/probabilities = list() // relative probability of each mode - var/list/min_pop = list() // overrides for acceptible player counts in a mode - var/list/max_pop = list() - - var/humans_need_surnames = 0 - var/allow_ai = 0 // allow ai job - var/forbid_secborg = 0 // disallow secborg module to be chosen. - var/forbid_peaceborg = 0 - var/panic_bunker = 0 // prevents new people it hasn't seen before from connecting - var/notify_new_player_age = 0 // how long do we notify admins of a new player - var/irc_first_connection_alert = 0 // do we notify the irc channel when somebody is connecting for the first time? - - var/traitor_scaling_coeff = 6 //how much does the amount of players get divided by to determine traitors - var/changeling_scaling_coeff = 6 //how much does the amount of players get divided by to determine changelings - var/security_scaling_coeff = 8 //how much does the amount of players get divided by to determine open security officer positions - var/abductor_scaling_coeff = 15 //how many players per abductor team - - var/traitor_objectives_amount = 2 - var/protect_roles_from_antagonist = 0 //If security and such can be traitor/cult/other - var/protect_assistant_from_antagonist = 0 //If assistants can be traitor/cult/other - var/enforce_human_authority = 0 //If non-human species are barred from joining as a head of staff - var/allow_latejoin_antagonists = 0 // If late-joining players can be traitor/changeling - var/list/continuous = list() // which roundtypes continue if all antagonists die - var/list/midround_antag = list() // which roundtypes use the midround antagonist system - var/midround_antag_time_check = 60 // How late (in minutes) you want the midround antag system to stay on, setting this to 0 will disable the system - var/midround_antag_life_check = 0.7 // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist - var/shuttle_refuel_delay = 12000 - var/show_game_type_odds = 0 //if set this allows players to see the odds of each roundtype on the get revision screen - var/mutant_races = 0 //players can choose their mutant race before joining the game - var/list/roundstart_races = list() //races you can play as from the get go. If left undefined the game's roundstart var for species is used - var/mutant_humans = 0 //players can pick mutant bodyparts for humans before joining the game - - var/no_summon_guns //No - var/no_summon_magic //Fun - var/no_summon_events //Allowed - - var/intercept = 1 //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes. - var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." - var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." - var/alert_desc_blue_downto = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." - var/alert_desc_red_upto = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised." - var/alert_desc_red_downto = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." - var/alert_desc_delta = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill." - - var/revival_pod_plants = 1 - var/revival_cloning = 1 - var/revival_brain_life = -1 - - var/rename_cyborg = 0 - var/ooc_during_round = 0 - var/emojis = 0 - - //Used for modifying movement speed for mobs. - //Unversal modifiers - var/run_speed = 0 - var/walk_speed = 0 - - //Mob specific modifiers. NOTE: These will affect different mob types in different ways - var/human_delay = 0 - var/robot_delay = 0 - var/monkey_delay = 0 - var/alien_delay = 0 - var/slime_delay = 0 - var/animal_delay = 0 - - var/gateway_delay = 18000 //How long the gateway takes before it activates. Default is half an hour. - var/ghost_interaction = 0 - - var/silent_ai = 0 - var/silent_borg = 0 - - var/damage_multiplier = 1 //Modifier for damage to all mobs. Impacts healing as well. - - var/allowwebclient = 0 - var/webclientmembersonly = 0 - - var/sandbox_autoclose = 0 // close the sandbox panel after spawning an item, potentially reducing griff - - var/default_laws = 0 //Controls what laws the AI spawns with. - var/silicon_max_law_amount = 12 - var/list/lawids = list() - - var/list/law_weights = list() - - var/assistant_cap = -1 - - var/starlight = 0 - var/generate_minimaps = 0 - var/grey_assistants = 0 - - var/lavaland_budget = 60 - var/space_budget = 16 - - var/aggressive_changelog = 0 - - var/reactionary_explosions = 0 //If we use reactionary explosions, explosions that react to walls and doors - - var/autoconvert_notes = 0 //if all connecting player's notes should attempt to be converted to the database - - var/announce_admin_logout = 0 - var/announce_admin_login = 0 - - var/list/datum/map_config/maplist = list() - var/datum/map_config/defaultmap = null - var/maprotation = 1 - var/maprotatechancedelta = 0.75 - var/allow_map_voting = TRUE - - // Enables random events mid-round when set to 1 - var/allow_random_events = 0 - - // Multipliers for random events minimal starting time and minimal players amounts - var/events_min_time_mul = 1 - var/events_min_players_mul = 1 - - // The object used for the clickable stat() button. - var/obj/effect/statclick/statclick - - var/client_warn_version = 0 - var/client_warn_message = "Your version of byond may have issues or be blocked from accessing this server in the future." - var/client_error_version = 0 - var/client_error_message = "Your version of byond is too old, may have issues, and is blocked from accessing this server." - - var/cross_name = "Other server" - var/cross_address = "byond://" - var/cross_allowed = FALSE - var/showircname = 0 - - var/list/gamemode_cache = null - - var/minutetopiclimit - var/secondtopiclimit - - var/error_cooldown = 600 // The "cooldown" time for each occurrence of a unique error - var/error_limit = 50 // How many occurrences before the next will silence them - var/error_silence_time = 6000 // How long a unique error will be silenced for - var/error_msg_delay = 50 // How long to wait between messaging admins about occurrences of a unique error - - var/arrivals_shuttle_dock_window = 55 //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station - var/arrivals_shuttle_require_safe_latejoin = FALSE //Require the arrivals shuttle to be operational in order for latejoiners to join - -/datum/configuration/New() - gamemode_cache = typecacheof(/datum/game_mode,TRUE) - for(var/T in gamemode_cache) - // I wish I didn't have to instance the game modes in order to look up - // their information, but it is the only way (at least that I know of). - var/datum/game_mode/M = new T() - - if(M.config_tag) - if(!(M.config_tag in modes)) // ensure each mode is added only once - GLOB.diary << "Adding game mode [M.name] ([M.config_tag]) to configuration." - modes += M.config_tag - mode_names[M.config_tag] = M.name - probabilities[M.config_tag] = M.probability - if(M.votable) - votable_modes += M.config_tag - qdel(M) - votable_modes += "secret" - - Reload() - -/datum/configuration/proc/Reload() - load("config/config.txt") - load("config/game_options.txt","game_options") - loadsql("config/dbconfig.txt") - if (maprotation) - loadmaplist("config/maps.txt") - - // apply some settings from config.. - GLOB.abandon_allowed = respawn - -/datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist + var/load_jobs_from_txt = 0 + var/automute_on = 0 //enables automuting/spam prevention + var/minimal_access_threshold = 0 //If the number of players is larger than this threshold, minimal access will be turned on. + var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access. + var/jobs_have_maint_access = 0 //Who gets maint access? See defines above. + var/sec_start_brig = 0 //makes sec start in brig or dept sec posts + + var/server + var/banappeals + var/wikiurl = "http://www.tgstation13.org/wiki" // Default wiki link. + var/forumurl = "http://tgstation13.org/phpBB/index.php" //default forums + var/rulesurl = "http://www.tgstation13.org/wiki/Rules" // default rules + var/githuburl = "https://www.github.com/tgstation/-tg-station" //default github + var/githubrepoid + + var/forbid_singulo_possession = 0 + var/useircbot = 0 + + var/check_randomizer = 0 + + var/allow_panic_bunker_bounce = 0 //Send new players somewhere else + var/panic_server_name = "somewhere else" + var/panic_address = "byond://" //Reconnect a player this linked server if this server isn't accepting new players + + //IP Intel vars + var/ipintel_email + var/ipintel_rating_bad = 1 + var/ipintel_save_good = 12 + var/ipintel_save_bad = 1 + var/ipintel_domain = "check.getipintel.net" + + var/admin_legacy_system = 0 //Defines whether the server uses the legacy admin system with admins.txt or the SQL system. Config option in config.txt + var/ban_legacy_system = 0 //Defines whether the server uses the legacy banning system with the files in /data or the SQL system. Config option in config.txt + var/use_age_restriction_for_jobs = 0 //Do jobs use account age restrictions? --requires database + var/use_account_age_for_jobs = 0 //Uses the time they made the account for the job restriction stuff. New player joining alerts should be unaffected. + var/see_own_notes = 0 //Can players see their own admin notes (read-only)? Config option in config.txt + + //Population cap vars + var/soft_popcap = 0 + var/hard_popcap = 0 + var/extreme_popcap = 0 + var/soft_popcap_message = "Be warned that the server is currently serving a high number of users, consider using alternative game servers." + var/hard_popcap_message = "The server is currently serving a high number of users, You cannot currently join. You may wait for the number of living crew to decline, observe, or find alternative servers." + var/extreme_popcap_message = "The server is currently serving a high number of users, find alternative servers." + + //game_options.txt configs + var/force_random_names = 0 + var/list/mode_names = list() + var/list/modes = list() // allowed modes + var/list/votable_modes = list() // votable modes + var/list/probabilities = list() // relative probability of each mode + var/list/min_pop = list() // overrides for acceptible player counts in a mode + var/list/max_pop = list() + + var/humans_need_surnames = 0 + var/allow_ai = 0 // allow ai job + var/forbid_secborg = 0 // disallow secborg module to be chosen. + var/forbid_peaceborg = 0 + var/panic_bunker = 0 // prevents new people it hasn't seen before from connecting + var/notify_new_player_age = 0 // how long do we notify admins of a new player + var/notify_new_player_account_age = 0 // how long do we notify admins of a new byond account + var/irc_first_connection_alert = 0 // do we notify the irc channel when somebody is connecting for the first time? + + var/traitor_scaling_coeff = 6 //how much does the amount of players get divided by to determine traitors + var/changeling_scaling_coeff = 6 //how much does the amount of players get divided by to determine changelings + var/security_scaling_coeff = 8 //how much does the amount of players get divided by to determine open security officer positions + var/abductor_scaling_coeff = 15 //how many players per abductor team + + var/traitor_objectives_amount = 2 + var/protect_roles_from_antagonist = 0 //If security and such can be traitor/cult/other + var/protect_assistant_from_antagonist = 0 //If assistants can be traitor/cult/other + var/enforce_human_authority = 0 //If non-human species are barred from joining as a head of staff + var/allow_latejoin_antagonists = 0 // If late-joining players can be traitor/changeling + var/list/continuous = list() // which roundtypes continue if all antagonists die + var/list/midround_antag = list() // which roundtypes use the midround antagonist system + var/midround_antag_time_check = 60 // How late (in minutes) you want the midround antag system to stay on, setting this to 0 will disable the system + var/midround_antag_life_check = 0.7 // A ratio of how many people need to be alive in order for the round not to immediately end in midround antagonist + var/shuttle_refuel_delay = 12000 + var/show_game_type_odds = 0 //if set this allows players to see the odds of each roundtype on the get revision screen + var/mutant_races = 0 //players can choose their mutant race before joining the game + var/list/roundstart_races = list() //races you can play as from the get go. If left undefined the game's roundstart var for species is used + var/mutant_humans = 0 //players can pick mutant bodyparts for humans before joining the game + + var/no_summon_guns //No + var/no_summon_magic //Fun + var/no_summon_events //Allowed + + var/intercept = 1 //Whether or not to send a communications intercept report roundstart. This may be overriden by gamemodes. + var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." + var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." + var/alert_desc_blue_downto = "The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed." + var/alert_desc_red_upto = "There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised." + var/alert_desc_red_downto = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." + var/alert_desc_delta = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill." + + var/revival_pod_plants = FALSE + var/revival_cloning = FALSE + var/revival_brain_life = -1 + + var/rename_cyborg = 0 + var/ooc_during_round = 0 + var/emojis = 0 + + //Used for modifying movement speed for mobs. + //Unversal modifiers + var/run_speed = 0 + var/walk_speed = 0 + + //Mob specific modifiers. NOTE: These will affect different mob types in different ways + var/human_delay = 0 + var/robot_delay = 0 + var/monkey_delay = 0 + var/alien_delay = 0 + var/slime_delay = 0 + var/animal_delay = 0 + + var/gateway_delay = 18000 //How long the gateway takes before it activates. Default is half an hour. + var/ghost_interaction = 0 + + var/silent_ai = 0 + var/silent_borg = 0 + + var/damage_multiplier = 1 //Modifier for damage to all mobs. Impacts healing as well. + + var/allowwebclient = 0 + var/webclientmembersonly = 0 + + var/sandbox_autoclose = 0 // close the sandbox panel after spawning an item, potentially reducing griff + + var/default_laws = 0 //Controls what laws the AI spawns with. + var/silicon_max_law_amount = 12 + var/list/lawids = list() + + var/list/law_weights = list() + + var/assistant_cap = -1 + + var/starlight = 0 + var/generate_minimaps = 0 + var/grey_assistants = 0 + + var/lavaland_budget = 60 + var/space_budget = 16 + + var/aggressive_changelog = 0 + + var/reactionary_explosions = 0 //If we use reactionary explosions, explosions that react to walls and doors + + var/autoconvert_notes = 0 //if all connecting player's notes should attempt to be converted to the database + + var/announce_admin_logout = 0 + var/announce_admin_login = 0 + + var/list/datum/map_config/maplist = list() + var/datum/map_config/defaultmap = null + var/maprotation = 1 + var/maprotatechancedelta = 0.75 + var/allow_map_voting = TRUE + + // Enables random events mid-round when set to 1 + var/allow_random_events = 0 + + // Multipliers for random events minimal starting time and minimal players amounts + var/events_min_time_mul = 1 + var/events_min_players_mul = 1 + + // The object used for the clickable stat() button. + var/obj/effect/statclick/statclick + + var/client_warn_version = 0 + var/client_warn_message = "Your version of byond may have issues or be blocked from accessing this server in the future." + var/client_error_version = 0 + var/client_error_message = "Your version of byond is too old, may have issues, and is blocked from accessing this server." + + var/cross_name = "Other server" + var/cross_address = "byond://" + var/cross_allowed = FALSE + var/showircname = 0 + + var/list/gamemode_cache = null + + var/minutetopiclimit + var/secondtopiclimit + + var/error_cooldown = 600 // The "cooldown" time for each occurrence of a unique error + var/error_limit = 50 // How many occurrences before the next will silence them + var/error_silence_time = 6000 // How long a unique error will be silenced for + var/error_msg_delay = 50 // How long to wait between messaging admins about occurrences of a unique error + + var/arrivals_shuttle_dock_window = 55 //Time from when a player late joins on the arrivals shuttle to when the shuttle docks on the station + var/arrivals_shuttle_require_safe_latejoin = FALSE //Require the arrivals shuttle to be operational in order for latejoiners to join + + var/mice_roundstart = 10 // how many wire chewing rodents spawn at roundstart. + +/datum/configuration/New() + gamemode_cache = typecacheof(/datum/game_mode,TRUE) + for(var/T in gamemode_cache) + // I wish I didn't have to instance the game modes in order to look up + // their information, but it is the only way (at least that I know of). + var/datum/game_mode/M = new T() + + if(M.config_tag) + if(!(M.config_tag in modes)) // ensure each mode is added only once + GLOB.config_error_log << "Adding game mode [M.name] ([M.config_tag]) to configuration." + modes += M.config_tag + mode_names[M.config_tag] = M.name + probabilities[M.config_tag] = M.probability + if(M.votable) + votable_modes += M.config_tag + qdel(M) + votable_modes += "secret" + + Reload() + +/datum/configuration/proc/Reload() + load("config/config.txt") + load("config/game_options.txt","game_options") + loadsql("config/dbconfig.txt") + if (maprotation) + loadmaplist("config/maps.txt") + + // apply some settings from config.. + GLOB.abandon_allowed = respawn + +/datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist var/list/Lines = world.file2list(filename) - - for(var/t in Lines) - if(!t) - continue - - t = trim(t) - if(length(t) == 0) - continue - else if(copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - var/value = null - - if(pos) - name = lowertext(copytext(t, 1, pos)) - value = copytext(t, pos + 1) - else - name = lowertext(t) - - if(!name) - continue - - if(type == "config") - switch(name) - if("hub") - hub = 1 - if("admin_legacy_system") - admin_legacy_system = 1 - if("ban_legacy_system") - ban_legacy_system = 1 - if("use_age_restriction_for_jobs") - use_age_restriction_for_jobs = 1 - if("use_account_age_for_jobs") - use_account_age_for_jobs = 1 - if("lobby_countdown") - lobby_countdown = text2num(value) - if("round_end_countdown") - round_end_countdown = text2num(value) - if("log_ooc") - log_ooc = 1 - if("log_access") - log_access = 1 - if("log_say") - log_say = 1 - if("log_admin") - log_admin = 1 - if("log_prayer") - log_prayer = 1 - if("log_law") - log_law = 1 - if("log_game") - log_game = 1 - if("log_vote") - log_vote = 1 - if("log_whisper") - log_whisper = 1 - if("log_attack") - log_attack = 1 - if("log_emote") - log_emote = 1 - if("log_adminchat") - log_adminchat = 1 - if("log_pda") - log_pda = 1 - if("log_hrefs") - log_hrefs = 1 - if("log_twitter") - log_twitter = 1 - if("log_world_topic") - log_world_topic = 1 - if("allow_admin_ooccolor") - allow_admin_ooccolor = 1 - if("allow_vote_restart") - allow_vote_restart = 1 - if("allow_vote_mode") - allow_vote_mode = 1 - if("no_dead_vote") - vote_no_dead = 1 - if("default_no_vote") - vote_no_default = 1 - if("vote_delay") - vote_delay = text2num(value) - if("vote_period") - vote_period = text2num(value) - if("norespawn") - respawn = 0 - if("servername") - server_name = value - if("serversqlname") - server_sql_name = value - if("stationname") - station_name = value - if("hostedby") - hostedby = value - if("server") - server = value - if("banappeals") - banappeals = value - if("wikiurl") - wikiurl = value - if("forumurl") - forumurl = value - if("rulesurl") - rulesurl = value - if("githuburl") - githuburl = value - if("githubrepoid") - githubrepoid = value - if("guest_jobban") - guest_jobban = 1 - if("guest_ban") - GLOB.guests_allowed = 0 - if("usewhitelist") - usewhitelist = TRUE - if("allow_metadata") - allow_Metadata = 1 + + for(var/t in Lines) + if(!t) + continue + + t = trim(t) + if(length(t) == 0) + continue + else if(copytext(t, 1, 2) == "#") + continue + + var/pos = findtext(t, " ") + var/name = null + var/value = null + + if(pos) + name = lowertext(copytext(t, 1, pos)) + value = copytext(t, pos + 1) + else + name = lowertext(t) + + if(!name) + continue + + if(type == "config") + switch(name) + if("hub") + hub = 1 + if("admin_legacy_system") + admin_legacy_system = 1 + if("ban_legacy_system") + ban_legacy_system = 1 + if("use_age_restriction_for_jobs") + use_age_restriction_for_jobs = 1 + if("use_account_age_for_jobs") + use_account_age_for_jobs = 1 + if("lobby_countdown") + lobby_countdown = text2num(value) + if("round_end_countdown") + round_end_countdown = text2num(value) + if("log_ooc") + log_ooc = 1 + if("log_access") + log_access = 1 + if("log_say") + log_say = 1 + if("log_admin") + log_admin = 1 + if("log_prayer") + log_prayer = 1 + if("log_law") + log_law = 1 + if("log_game") + log_game = 1 + if("log_vote") + log_vote = 1 + if("log_whisper") + log_whisper = 1 + if("log_attack") + log_attack = 1 + if("log_emote") + log_emote = 1 + if("log_adminchat") + log_adminchat = 1 + if("log_pda") + log_pda = 1 + if("log_twitter") + log_twitter = 1 + if("log_world_topic") + log_world_topic = 1 + if("allow_admin_ooccolor") + allow_admin_ooccolor = 1 + if("allow_vote_restart") + allow_vote_restart = 1 + if("allow_vote_mode") + allow_vote_mode = 1 + if("no_dead_vote") + vote_no_dead = 1 + if("default_no_vote") + vote_no_default = 1 + if("vote_delay") + vote_delay = text2num(value) + if("vote_period") + vote_period = text2num(value) + if("norespawn") + respawn = 0 + if("servername") + server_name = value + if("serversqlname") + server_sql_name = value + if("stationname") + station_name = value + if("hostedby") + hostedby = value + if("server") + server = value + if("banappeals") + banappeals = value + if("wikiurl") + wikiurl = value + if("forumurl") + forumurl = value + if("rulesurl") + rulesurl = value + if("githuburl") + githuburl = value + if("githubrepoid") + githubrepoid = value + if("guest_jobban") + guest_jobban = 1 + if("guest_ban") + GLOB.guests_allowed = 0 + if("usewhitelist") + usewhitelist = TRUE + if("allow_metadata") + allow_Metadata = 1 if("inactivity_period") inactivity_period = text2num(value) * 10 //documented as seconds in config.txt if("afk_period") afk_period = text2num(value) * 10 // ^^^ - if("kick_inactive") + if("kick_inactive") kick_inactive = TRUE - if("load_jobs_from_txt") - load_jobs_from_txt = 1 - if("forbid_singulo_possession") - forbid_singulo_possession = 1 - if("popup_admin_pm") - popup_admin_pm = 1 - if("allow_holidays") - allow_holidays = 1 - if("useircbot") - useircbot = 1 - if("ticklag") - var/ticklag = text2num(value) - if(ticklag > 0) - fps = 10 / ticklag - if("tick_limit_mc_init") - tick_limit_mc_init = text2num(value) - if("fps") - fps = text2num(value) - if("automute_on") - automute_on = 1 - if("comms_key") - global.comms_key = value - if(value != "default_pwd" && length(value) > 6) //It's the default value or less than 6 characters long, warn badmins - global.comms_allowed = 1 - if("cross_server_address") - cross_address = value - if(value != "byond:\\address:port") - cross_allowed = 1 - if("cross_comms_name") - cross_name = value - if("panic_server_name") - panic_server_name = value - if("panic_server_address") - panic_address = value - if(value != "byond:\\address:port") - allow_panic_bunker_bounce = 1 - if("medal_hub_address") - global.medal_hub = value - if("medal_hub_password") - global.medal_pass = value - if("show_irc_name") - showircname = 1 - if("see_own_notes") - see_own_notes = 1 - if("soft_popcap") - soft_popcap = text2num(value) - if("hard_popcap") - hard_popcap = text2num(value) - if("extreme_popcap") - extreme_popcap = text2num(value) - if("soft_popcap_message") - soft_popcap_message = value - if("hard_popcap_message") - hard_popcap_message = value - if("extreme_popcap_message") - extreme_popcap_message = value - if("panic_bunker") - panic_bunker = 1 - if("notify_new_player_age") - notify_new_player_age = text2num(value) - if("irc_first_connection_alert") - irc_first_connection_alert = 1 - if("check_randomizer") - check_randomizer = 1 - if("ipintel_email") - if (value != "ch@nge.me") - ipintel_email = value - if("ipintel_rating_bad") - ipintel_rating_bad = text2num(value) - if("ipintel_domain") - ipintel_domain = value - if("ipintel_save_good") - ipintel_save_good = text2num(value) - if("ipintel_save_bad") - ipintel_save_bad = text2num(value) - if("aggressive_changelog") - aggressive_changelog = 1 - if("log_runtimes") - log_runtimes = TRUE - var/newlog = file("data/logs/runtimes/runtime-[time2text(world.realtime, "YYYY-MM-DD")].log") - if(GLOB.runtime_diary != newlog) - world.log << "Now logging runtimes to data/logs/runtimes/runtime-[time2text(world.realtime, "YYYY-MM-DD")].log" - GLOB.runtime_diary = newlog - if("autoconvert_notes") - autoconvert_notes = 1 - if("allow_webclient") - allowwebclient = 1 - if("webclient_only_byond_members") - webclientmembersonly = 1 - if("announce_admin_logout") - announce_admin_logout = 1 - if("announce_admin_login") - announce_admin_login = 1 - if("maprotation") - maprotation = 1 - if("allow_map_voting") - allow_map_voting = text2num(value) - if("maprotationchancedelta") - maprotatechancedelta = text2num(value) - if("autoadmin") - autoadmin = 1 - if(value) - autoadmin_rank = ckeyEx(value) - if("generate_minimaps") - generate_minimaps = 1 - if("client_warn_version") - client_warn_version = text2num(value) - if("client_warn_message") - client_warn_message = value - if("client_error_version") - client_error_version = text2num(value) - if("client_error_message") - client_error_message = value - if("minute_topic_limit") - minutetopiclimit = text2num(value) - if("second_topic_limit") - secondtopiclimit = text2num(value) - if("error_cooldown") - error_cooldown = text2num(value) - if("error_limit") - error_limit = text2num(value) - if("error_silence_time") - error_silence_time = text2num(value) - if("error_msg_delay") - error_msg_delay = text2num(value) - else - GLOB.diary << "Unknown setting in configuration: '[name]'" - - else if(type == "game_options") - switch(name) - if("damage_multiplier") - damage_multiplier = text2num(value) - if("revival_pod_plants") - revival_pod_plants = text2num(value) - if("revival_cloning") - revival_cloning = text2num(value) - if("revival_brain_life") - revival_brain_life = text2num(value) - if("rename_cyborg") - rename_cyborg = 1 - if("ooc_during_round") - ooc_during_round = 1 - if("emojis") - emojis = 1 - if("run_delay") - run_speed = text2num(value) - if("walk_delay") - walk_speed = text2num(value) - if("human_delay") - human_delay = text2num(value) - if("robot_delay") - robot_delay = text2num(value) - if("monkey_delay") - monkey_delay = text2num(value) - if("alien_delay") - alien_delay = text2num(value) - if("slime_delay") - slime_delay = text2num(value) - if("animal_delay") - animal_delay = text2num(value) - if("alert_red_upto") - alert_desc_red_upto = value - if("alert_red_downto") - alert_desc_red_downto = value - if("alert_blue_downto") - alert_desc_blue_downto = value - if("alert_blue_upto") - alert_desc_blue_upto = value - if("alert_green") - alert_desc_green = value - if("alert_delta") - alert_desc_delta = value - if("no_intercept_report") - intercept = 0 - if("assistants_have_maint_access") - jobs_have_maint_access |= ASSISTANTS_HAVE_MAINT_ACCESS - if("security_has_maint_access") - jobs_have_maint_access |= SECURITY_HAS_MAINT_ACCESS - if("everyone_has_maint_access") - jobs_have_maint_access |= EVERYONE_HAS_MAINT_ACCESS - if("sec_start_brig") - sec_start_brig = 1 - if("gateway_delay") - gateway_delay = text2num(value) - if("continuous") - var/mode_name = lowertext(value) - if(mode_name in modes) - continuous[mode_name] = 1 - else - GLOB.diary << "Unknown continuous configuration definition: [mode_name]." - if("midround_antag") - var/mode_name = lowertext(value) - if(mode_name in modes) - midround_antag[mode_name] = 1 - else - GLOB.diary << "Unknown midround antagonist configuration definition: [mode_name]." - if("midround_antag_time_check") - midround_antag_time_check = text2num(value) - if("midround_antag_life_check") - midround_antag_life_check = text2num(value) - if("min_pop") - var/pop_pos = findtext(value, " ") - var/mode_name = null - var/mode_value = null - - if(pop_pos) - mode_name = lowertext(copytext(value, 1, pop_pos)) - mode_value = copytext(value, pop_pos + 1) - if(mode_name in modes) - min_pop[mode_name] = text2num(mode_value) - else - GLOB.diary << "Unknown minimum population configuration definition: [mode_name]." - else - GLOB.diary << "Incorrect minimum population configuration definition: [mode_name] [mode_value]." - if("max_pop") - var/pop_pos = findtext(value, " ") - var/mode_name = null - var/mode_value = null - - if(pop_pos) - mode_name = lowertext(copytext(value, 1, pop_pos)) - mode_value = copytext(value, pop_pos + 1) - if(mode_name in modes) - max_pop[mode_name] = text2num(mode_value) - else - GLOB.diary << "Unknown maximum population configuration definition: [mode_name]." - else - GLOB.diary << "Incorrect maximum population configuration definition: [mode_name] [mode_value]." - if("shuttle_refuel_delay") - shuttle_refuel_delay = text2num(value) - if("show_game_type_odds") - show_game_type_odds = 1 - if("ghost_interaction") - ghost_interaction = 1 - if("traitor_scaling_coeff") - traitor_scaling_coeff = text2num(value) - if("changeling_scaling_coeff") - changeling_scaling_coeff = text2num(value) - if("security_scaling_coeff") - security_scaling_coeff = text2num(value) - if("abductor_scaling_coeff") - abductor_scaling_coeff = text2num(value) - if("traitor_objectives_amount") - traitor_objectives_amount = text2num(value) - if("probability") - var/prob_pos = findtext(value, " ") - var/prob_name = null - var/prob_value = null - - if(prob_pos) - prob_name = lowertext(copytext(value, 1, prob_pos)) - prob_value = copytext(value, prob_pos + 1) - if(prob_name in modes) - probabilities[prob_name] = text2num(prob_value) - else - GLOB.diary << "Unknown game mode probability configuration definition: [prob_name]." - else - GLOB.diary << "Incorrect probability configuration definition: [prob_name] [prob_value]." - - if("protect_roles_from_antagonist") - protect_roles_from_antagonist = 1 - if("protect_assistant_from_antagonist") - protect_assistant_from_antagonist = 1 - if("enforce_human_authority") - enforce_human_authority = 1 - if("allow_latejoin_antagonists") - allow_latejoin_antagonists = 1 - if("allow_random_events") - allow_random_events = 1 - - if("events_min_time_mul") - events_min_time_mul = text2num(value) - if("events_min_players_mul") - events_min_players_mul = text2num(value) - - if("minimal_access_threshold") - minimal_access_threshold = text2num(value) - if("jobs_have_minimal_access") - jobs_have_minimal_access = 1 - if("humans_need_surnames") - humans_need_surnames = 1 - if("force_random_names") - force_random_names = 1 - if("allow_ai") - allow_ai = 1 - if("disable_secborg") - forbid_secborg = 1 - if("disable_peaceborg") - forbid_peaceborg = 1 - if("silent_ai") - silent_ai = 1 - if("silent_borg") - silent_borg = 1 - if("sandbox_autoclose") - sandbox_autoclose = 1 - if("default_laws") - default_laws = text2num(value) - if("random_laws") - var/law_id = lowertext(value) - lawids += law_id - if("law_weight") - // Value is in the form "LAWID,NUMBER" - var/list/L = splittext(value, ",") - if(L.len != 2) - GLOB.diary << "Invalid LAW_WEIGHT: " + t - continue - var/lawid = L[1] - var/weight = text2num(L[2]) - law_weights[lawid] = weight - - if("silicon_max_law_amount") - silicon_max_law_amount = text2num(value) - if("join_with_mutant_race") - mutant_races = 1 - if("roundstart_races") - var/race_id = lowertext(value) - for(var/species_id in GLOB.species_list) - if(species_id == race_id) - roundstart_races += GLOB.species_list[species_id] - GLOB.roundstart_species[species_id] = GLOB.species_list[species_id] - if("join_with_mutant_humans") - mutant_humans = 1 - if("assistant_cap") - assistant_cap = text2num(value) - if("starlight") - starlight = 1 - if("grey_assistants") - grey_assistants = 1 - if("lavaland_budget") - lavaland_budget = text2num(value) - if("space_budget") - space_budget = text2num(value) - if("no_summon_guns") - no_summon_guns = 1 - if("no_summon_magic") - no_summon_magic = 1 - if("no_summon_events") - no_summon_events = 1 - if("reactionary_explosions") - reactionary_explosions = 1 - if("bombcap") - var/BombCap = text2num(value) - if (!BombCap) - continue - if (BombCap < 4) - BombCap = 4 - - GLOB.MAX_EX_DEVESTATION_RANGE = round(BombCap/4) - GLOB.MAX_EX_HEAVY_RANGE = round(BombCap/2) - GLOB.MAX_EX_LIGHT_RANGE = BombCap - GLOB.MAX_EX_FLASH_RANGE = BombCap - GLOB.MAX_EX_FLAME_RANGE = BombCap - if("arrivals_shuttle_dock_window") - arrivals_shuttle_dock_window = max(PARALLAX_LOOP_TIME, text2num(value)) - if("arrivals_shuttle_require_safe_latejoin") - arrivals_shuttle_require_safe_latejoin = text2num(value) - if ("mentor_mobname_only") - mentors_mobname_only = 1 - if ("mentor_legacy_system") - mentor_legacy_system = 1 - else - GLOB.diary << "Unknown setting in configuration: '[name]'" - - fps = round(fps) - if(fps <= 0) - fps = initial(fps) - - -/datum/configuration/proc/loadmaplist(filename) + if("load_jobs_from_txt") + load_jobs_from_txt = 1 + if("forbid_singulo_possession") + forbid_singulo_possession = 1 + if("popup_admin_pm") + popup_admin_pm = 1 + if("allow_holidays") + allow_holidays = 1 + if("useircbot") + useircbot = 1 + if("ticklag") + var/ticklag = text2num(value) + if(ticklag > 0) + fps = 10 / ticklag + if("tick_limit_mc_init") + tick_limit_mc_init = text2num(value) + if("fps") + fps = text2num(value) + if("automute_on") + automute_on = 1 + if("comms_key") + global.comms_key = value + if(value != "default_pwd" && length(value) > 6) //It's the default value or less than 6 characters long, warn badmins + global.comms_allowed = 1 + if("cross_server_address") + cross_address = value + if(value != "byond:\\address:port") + cross_allowed = 1 + if("cross_comms_name") + cross_name = value + if("panic_server_name") + panic_server_name = value + if("panic_server_address") + panic_address = value + if(value != "byond:\\address:port") + allow_panic_bunker_bounce = 1 + if("medal_hub_address") + global.medal_hub = value + if("medal_hub_password") + global.medal_pass = value + if("show_irc_name") + showircname = 1 + if("see_own_notes") + see_own_notes = 1 + if("soft_popcap") + soft_popcap = text2num(value) + if("hard_popcap") + hard_popcap = text2num(value) + if("extreme_popcap") + extreme_popcap = text2num(value) + if("soft_popcap_message") + soft_popcap_message = value + if("hard_popcap_message") + hard_popcap_message = value + if("extreme_popcap_message") + extreme_popcap_message = value + if("panic_bunker") + panic_bunker = 1 + if("notify_new_player_age") + notify_new_player_age = text2num(value) + if("notify_new_player_account_age") + notify_new_player_account_age = text2num(value) + if("irc_first_connection_alert") + irc_first_connection_alert = 1 + if("check_randomizer") + check_randomizer = 1 + if("ipintel_email") + if (value != "ch@nge.me") + ipintel_email = value + if("ipintel_rating_bad") + ipintel_rating_bad = text2num(value) + if("ipintel_domain") + ipintel_domain = value + if("ipintel_save_good") + ipintel_save_good = text2num(value) + if("ipintel_save_bad") + ipintel_save_bad = text2num(value) + if("aggressive_changelog") + aggressive_changelog = 1 + if("autoconvert_notes") + autoconvert_notes = 1 + if("allow_webclient") + allowwebclient = 1 + if("webclient_only_byond_members") + webclientmembersonly = 1 + if("announce_admin_logout") + announce_admin_logout = 1 + if("announce_admin_login") + announce_admin_login = 1 + if("maprotation") + maprotation = 1 + if("allow_map_voting") + allow_map_voting = text2num(value) + if("maprotationchancedelta") + maprotatechancedelta = text2num(value) + if("autoadmin") + autoadmin = 1 + if(value) + autoadmin_rank = ckeyEx(value) + if("generate_minimaps") + generate_minimaps = 1 + if("client_warn_version") + client_warn_version = text2num(value) + if("client_warn_message") + client_warn_message = value + if("client_error_version") + client_error_version = text2num(value) + if("client_error_message") + client_error_message = value + if("minute_topic_limit") + minutetopiclimit = text2num(value) + if("second_topic_limit") + secondtopiclimit = text2num(value) + if("error_cooldown") + error_cooldown = text2num(value) + if("error_limit") + error_limit = text2num(value) + if("error_silence_time") + error_silence_time = text2num(value) + if("error_msg_delay") + error_msg_delay = text2num(value) + else + GLOB.config_error_log << "Unknown setting in configuration: '[name]'" + + else if(type == "game_options") + switch(name) + if("damage_multiplier") + damage_multiplier = text2num(value) + if("revival_pod_plants") + revival_pod_plants = TRUE + if("revival_cloning") + revival_cloning = TRUE + if("revival_brain_life") + revival_brain_life = text2num(value) + if("rename_cyborg") + rename_cyborg = 1 + if("ooc_during_round") + ooc_during_round = 1 + if("emojis") + emojis = 1 + if("run_delay") + run_speed = text2num(value) + if("walk_delay") + walk_speed = text2num(value) + if("human_delay") + human_delay = text2num(value) + if("robot_delay") + robot_delay = text2num(value) + if("monkey_delay") + monkey_delay = text2num(value) + if("alien_delay") + alien_delay = text2num(value) + if("slime_delay") + slime_delay = text2num(value) + if("animal_delay") + animal_delay = text2num(value) + if("alert_red_upto") + alert_desc_red_upto = value + if("alert_red_downto") + alert_desc_red_downto = value + if("alert_blue_downto") + alert_desc_blue_downto = value + if("alert_blue_upto") + alert_desc_blue_upto = value + if("alert_green") + alert_desc_green = value + if("alert_delta") + alert_desc_delta = value + if("no_intercept_report") + intercept = 0 + if("assistants_have_maint_access") + jobs_have_maint_access |= ASSISTANTS_HAVE_MAINT_ACCESS + if("security_has_maint_access") + jobs_have_maint_access |= SECURITY_HAS_MAINT_ACCESS + if("everyone_has_maint_access") + jobs_have_maint_access |= EVERYONE_HAS_MAINT_ACCESS + if("sec_start_brig") + sec_start_brig = 1 + if("gateway_delay") + gateway_delay = text2num(value) + if("continuous") + var/mode_name = lowertext(value) + if(mode_name in modes) + continuous[mode_name] = 1 + else + GLOB.config_error_log << "Unknown continuous configuration definition: [mode_name]." + if("midround_antag") + var/mode_name = lowertext(value) + if(mode_name in modes) + midround_antag[mode_name] = 1 + else + GLOB.config_error_log << "Unknown midround antagonist configuration definition: [mode_name]." + if("midround_antag_time_check") + midround_antag_time_check = text2num(value) + if("midround_antag_life_check") + midround_antag_life_check = text2num(value) + if("min_pop") + var/pop_pos = findtext(value, " ") + var/mode_name = null + var/mode_value = null + + if(pop_pos) + mode_name = lowertext(copytext(value, 1, pop_pos)) + mode_value = copytext(value, pop_pos + 1) + if(mode_name in modes) + min_pop[mode_name] = text2num(mode_value) + else + GLOB.config_error_log << "Unknown minimum population configuration definition: [mode_name]." + else + GLOB.config_error_log << "Incorrect minimum population configuration definition: [mode_name] [mode_value]." + if("max_pop") + var/pop_pos = findtext(value, " ") + var/mode_name = null + var/mode_value = null + + if(pop_pos) + mode_name = lowertext(copytext(value, 1, pop_pos)) + mode_value = copytext(value, pop_pos + 1) + if(mode_name in modes) + max_pop[mode_name] = text2num(mode_value) + else + GLOB.config_error_log << "Unknown maximum population configuration definition: [mode_name]." + else + GLOB.config_error_log << "Incorrect maximum population configuration definition: [mode_name] [mode_value]." + if("shuttle_refuel_delay") + shuttle_refuel_delay = text2num(value) + if("show_game_type_odds") + show_game_type_odds = 1 + if("ghost_interaction") + ghost_interaction = 1 + if("traitor_scaling_coeff") + traitor_scaling_coeff = text2num(value) + if("changeling_scaling_coeff") + changeling_scaling_coeff = text2num(value) + if("security_scaling_coeff") + security_scaling_coeff = text2num(value) + if("abductor_scaling_coeff") + abductor_scaling_coeff = text2num(value) + if("traitor_objectives_amount") + traitor_objectives_amount = text2num(value) + if("probability") + var/prob_pos = findtext(value, " ") + var/prob_name = null + var/prob_value = null + + if(prob_pos) + prob_name = lowertext(copytext(value, 1, prob_pos)) + prob_value = copytext(value, prob_pos + 1) + if(prob_name in modes) + probabilities[prob_name] = text2num(prob_value) + else + GLOB.config_error_log << "Unknown game mode probability configuration definition: [prob_name]." + else + GLOB.config_error_log << "Incorrect probability configuration definition: [prob_name] [prob_value]." + + if("protect_roles_from_antagonist") + protect_roles_from_antagonist = 1 + if("protect_assistant_from_antagonist") + protect_assistant_from_antagonist = 1 + if("enforce_human_authority") + enforce_human_authority = 1 + if("allow_latejoin_antagonists") + allow_latejoin_antagonists = 1 + if("allow_random_events") + allow_random_events = 1 + + if("events_min_time_mul") + events_min_time_mul = text2num(value) + if("events_min_players_mul") + events_min_players_mul = text2num(value) + + if("minimal_access_threshold") + minimal_access_threshold = text2num(value) + if("jobs_have_minimal_access") + jobs_have_minimal_access = 1 + if("humans_need_surnames") + humans_need_surnames = 1 + if("force_random_names") + force_random_names = 1 + if("allow_ai") + allow_ai = 1 + if("disable_secborg") + forbid_secborg = 1 + if("disable_peaceborg") + forbid_peaceborg = 1 + if("silent_ai") + silent_ai = 1 + if("silent_borg") + silent_borg = 1 + if("sandbox_autoclose") + sandbox_autoclose = 1 + if("default_laws") + default_laws = text2num(value) + if("random_laws") + var/law_id = lowertext(value) + lawids += law_id + if("law_weight") + // Value is in the form "LAWID,NUMBER" + var/list/L = splittext(value, ",") + if(L.len != 2) + GLOB.config_error_log << "Invalid LAW_WEIGHT: " + t + continue + var/lawid = L[1] + var/weight = text2num(L[2]) + law_weights[lawid] = weight + + if("silicon_max_law_amount") + silicon_max_law_amount = text2num(value) + if("join_with_mutant_race") + mutant_races = 1 + if("roundstart_races") + var/race_id = lowertext(value) + for(var/species_id in GLOB.species_list) + if(species_id == race_id) + roundstart_races += GLOB.species_list[species_id] + GLOB.roundstart_species[species_id] = GLOB.species_list[species_id] + if("join_with_mutant_humans") + mutant_humans = 1 + if("assistant_cap") + assistant_cap = text2num(value) + if("starlight") + starlight = 1 + if("grey_assistants") + grey_assistants = 1 + if("lavaland_budget") + lavaland_budget = text2num(value) + if("space_budget") + space_budget = text2num(value) + if("no_summon_guns") + no_summon_guns = 1 + if("no_summon_magic") + no_summon_magic = 1 + if("no_summon_events") + no_summon_events = 1 + if("reactionary_explosions") + reactionary_explosions = 1 + if("bombcap") + var/BombCap = text2num(value) + if (!BombCap) + continue + if (BombCap < 4) + BombCap = 4 + + GLOB.MAX_EX_DEVESTATION_RANGE = round(BombCap/4) + GLOB.MAX_EX_HEAVY_RANGE = round(BombCap/2) + GLOB.MAX_EX_LIGHT_RANGE = BombCap + GLOB.MAX_EX_FLASH_RANGE = BombCap + GLOB.MAX_EX_FLAME_RANGE = BombCap + if("arrivals_shuttle_dock_window") + arrivals_shuttle_dock_window = max(PARALLAX_LOOP_TIME, text2num(value)) + if("arrivals_shuttle_require_safe_latejoin") + arrivals_shuttle_require_safe_latejoin = TRUE + if("mice_roundstart") + mice_roundstart = text2num(value) + if ("mentor_mobname_only") + mentors_mobname_only = 1 + if ("mentor_legacy_system") + mentor_legacy_system = 1 + else + GLOB.config_error_log << "Unknown setting in configuration: '[name]'" + + fps = round(fps) + if(fps <= 0) + fps = initial(fps) + + +/datum/configuration/proc/loadmaplist(filename) var/list/Lines = world.file2list(filename) - - var/datum/map_config/currentmap = null - for(var/t in Lines) - if(!t) - continue - - t = trim(t) - if(length(t) == 0) - continue - else if(copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/command = null - var/data = null - - if(pos) - command = lowertext(copytext(t, 1, pos)) - data = copytext(t, pos + 1) - else - command = lowertext(t) - - if(!command) - continue - - if (!currentmap && command != "map") - continue - - switch (command) - if ("map") - currentmap = new ("_maps/[data].json") - if(currentmap.defaulted) - log_world("Failed to load map config for [data]!") - if ("minplayers","minplayer") - currentmap.config_min_users = text2num(data) - if ("maxplayers","maxplayer") - currentmap.config_max_users = text2num(data) - if ("weight","voteweight") - currentmap.voteweight = text2num(data) - if ("default","defaultmap") - defaultmap = currentmap - if ("endmap") - maplist[currentmap.map_name] = currentmap - currentmap = null - else - GLOB.diary << "Unknown command in map vote config: '[command]'" - - -/datum/configuration/proc/loadsql(filename) + + var/datum/map_config/currentmap = null + for(var/t in Lines) + if(!t) + continue + + t = trim(t) + if(length(t) == 0) + continue + else if(copytext(t, 1, 2) == "#") + continue + + var/pos = findtext(t, " ") + var/command = null + var/data = null + + if(pos) + command = lowertext(copytext(t, 1, pos)) + data = copytext(t, pos + 1) + else + command = lowertext(t) + + if(!command) + continue + + if (!currentmap && command != "map") + continue + + switch (command) + if ("map") + currentmap = new ("_maps/[data].json") + if(currentmap.defaulted) + log_world("Failed to load map config for [data]!") + if ("minplayers","minplayer") + currentmap.config_min_users = text2num(data) + if ("maxplayers","maxplayer") + currentmap.config_max_users = text2num(data) + if ("weight","voteweight") + currentmap.voteweight = text2num(data) + if ("default","defaultmap") + defaultmap = currentmap + if ("endmap") + maplist[currentmap.map_name] = currentmap + currentmap = null + else + GLOB.config_error_log << "Unknown command in map vote config: '[command]'" + + +/datum/configuration/proc/loadsql(filename) var/list/Lines = world.file2list(filename) - for(var/t in Lines) - if(!t) - continue - - t = trim(t) - if(length(t) == 0) - continue - else if(copytext(t, 1, 2) == "#") - continue - - var/pos = findtext(t, " ") - var/name = null - var/value = null - - if(pos) - name = lowertext(copytext(t, 1, pos)) - value = copytext(t, pos + 1) - else - name = lowertext(t) - - if(!name) - continue - - switch(name) - if("sql_enabled") - sql_enabled = 1 - if("address") - global.sqladdress = value - if("port") - global.sqlport = value - if("feedback_database") - global.sqlfdbkdb = value - if("feedback_login") - global.sqlfdbklogin = value - if("feedback_password") - global.sqlfdbkpass = value - if("feedback_tableprefix") - global.sqlfdbktableprefix = value - else - GLOB.diary << "Unknown setting in configuration: '[name]'" - -/datum/configuration/proc/pick_mode(mode_name) - // I wish I didn't have to instance the game modes in order to look up - // their information, but it is the only way (at least that I know of). - for(var/T in gamemode_cache) - var/datum/game_mode/M = new T() - if(M.config_tag && M.config_tag == mode_name) - return M - qdel(M) - return new /datum/game_mode/extended() - -/datum/configuration/proc/get_runnable_modes() - var/list/datum/game_mode/runnable_modes = new - for(var/T in gamemode_cache) - var/datum/game_mode/M = new T() - //to_chat(world, "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]") - if(!(M.config_tag in modes)) - qdel(M) - continue - if(probabilities[M.config_tag]<=0) - qdel(M) - continue - if(min_pop[M.config_tag]) - M.required_players = min_pop[M.config_tag] - if(max_pop[M.config_tag]) - M.maximum_players = max_pop[M.config_tag] - if(M.can_start()) - runnable_modes[M] = probabilities[M.config_tag] - //to_chat(world, "DEBUG: runnable_mode\[[runnable_modes.len]\] = [M.config_tag]") - return runnable_modes - -/datum/configuration/proc/get_runnable_midround_modes(crew) - var/list/datum/game_mode/runnable_modes = new - for(var/T in (gamemode_cache - SSticker.mode.type)) - var/datum/game_mode/M = new T() - if(!(M.config_tag in modes)) - qdel(M) - continue - if(probabilities[M.config_tag]<=0) - qdel(M) - continue - if(min_pop[M.config_tag]) - M.required_players = min_pop[M.config_tag] - if(max_pop[M.config_tag]) - M.maximum_players = max_pop[M.config_tag] - if(M.required_players <= crew) - if(M.maximum_players >= 0 && M.maximum_players < crew) - continue - runnable_modes[M] = probabilities[M.config_tag] - return runnable_modes - -/datum/configuration/proc/stat_entry() - if(!statclick) - statclick = new/obj/effect/statclick/debug(null, "Edit", src) - - stat("[name]:", statclick) + for(var/t in Lines) + if(!t) + continue + + t = trim(t) + if(length(t) == 0) + continue + else if(copytext(t, 1, 2) == "#") + continue + + var/pos = findtext(t, " ") + var/name = null + var/value = null + + if(pos) + name = lowertext(copytext(t, 1, pos)) + value = copytext(t, pos + 1) + else + name = lowertext(t) + + if(!name) + continue + + switch(name) + if("sql_enabled") + sql_enabled = 1 + if("address") + global.sqladdress = value + if("port") + global.sqlport = value + if("feedback_database") + global.sqlfdbkdb = value + if("feedback_login") + global.sqlfdbklogin = value + if("feedback_password") + global.sqlfdbkpass = value + if("feedback_tableprefix") + global.sqlfdbktableprefix = value + else + GLOB.config_error_log << "Unknown setting in configuration: '[name]'" + +/datum/configuration/proc/pick_mode(mode_name) + // I wish I didn't have to instance the game modes in order to look up + // their information, but it is the only way (at least that I know of). + for(var/T in gamemode_cache) + var/datum/game_mode/M = new T() + if(M.config_tag && M.config_tag == mode_name) + return M + qdel(M) + return new /datum/game_mode/extended() + +/datum/configuration/proc/get_runnable_modes() + var/list/datum/game_mode/runnable_modes = new + for(var/T in gamemode_cache) + var/datum/game_mode/M = new T() + //to_chat(world, "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]") + if(!(M.config_tag in modes)) + qdel(M) + continue + if(probabilities[M.config_tag]<=0) + qdel(M) + continue + if(min_pop[M.config_tag]) + M.required_players = min_pop[M.config_tag] + if(max_pop[M.config_tag]) + M.maximum_players = max_pop[M.config_tag] + if(M.can_start()) + runnable_modes[M] = probabilities[M.config_tag] + //to_chat(world, "DEBUG: runnable_mode\[[runnable_modes.len]\] = [M.config_tag]") + return runnable_modes + +/datum/configuration/proc/get_runnable_midround_modes(crew) + var/list/datum/game_mode/runnable_modes = new + for(var/T in (gamemode_cache - SSticker.mode.type)) + var/datum/game_mode/M = new T() + if(!(M.config_tag in modes)) + qdel(M) + continue + if(probabilities[M.config_tag]<=0) + qdel(M) + continue + if(min_pop[M.config_tag]) + M.required_players = min_pop[M.config_tag] + if(max_pop[M.config_tag]) + M.maximum_players = max_pop[M.config_tag] + if(M.required_players <= crew) + if(M.maximum_players >= 0 && M.maximum_players < crew) + continue + runnable_modes[M] = probabilities[M.config_tag] + return runnable_modes + +/datum/configuration/proc/stat_entry() + if(!statclick) + statclick = new/obj/effect/statclick/debug(null, "Edit", src) + + stat("[name]:", statclick) diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index cd86e0d97c..89f8a81f20 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -52,6 +52,12 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) /datum/controller/global_vars/Initialize() gvars_datum_init_order = list() gvars_datum_protected_varlist = list("gvars_datum_protected_varlist") + + //See https://github.com/tgstation/tgstation/issues/26954 + for(var/I in typesof(/datum/controller/global_vars/proc)) + var/CLEANBOT_RETURNS = "[I]" + pass(CLEANBOT_RETURNS) + for(var/I in vars - gvars_datum_in_built_vars) var/start_tick = world.time call(src, "InitGlobal[I]")() diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 01d0ac3447..a220c2530c 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -47,8 +47,6 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) var/make_runtime = 0 var/initializations_finished_with_no_players_logged_in //I wonder what this could be? - // Has round started? (So we know what subsystems to run) - var/local_round_started = FALSE //Don't read this var, use SSticker.HasRoundStarted() instead // The type of the last subsystem to be process()'d. var/last_type_processed @@ -59,6 +57,8 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) var/queue_priority_count_bg = 0 //Same, but for background subsystems var/map_loading = FALSE //Are we loading in a new map? + var/current_runlevel //for scheduling different subsystems for different stages of the round + /datum/controller/master/New() // Highlander-style: there can only be one! Kill off the old and replace it with the new. subsystems = list() @@ -132,7 +132,7 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) msg = "The [BadBoy.name] subsystem seems to be destabilizing the MC and will be offlined." BadBoy.flags |= SS_NO_FIRE if(msg) - to_chat(GLOB.admins, "[msg]") + to_chat(GLOB.admins, "[msg]") log_world(msg) if (istype(Master.subsystems)) @@ -176,6 +176,8 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) to_chat(world, "[msg]") log_world(msg) + SetRunLevel(1) + // Sort subsystems by display setting for easy access. sortTim(subsystems, /proc/cmp_subsystem_display) // Set world options. @@ -187,16 +189,15 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) // Loop. Master.StartProcessing(0) -// Notify the MC that the round has started. -/datum/controller/master/proc/RoundStart() - local_round_started = TRUE - var/timer = world.time - for (var/datum/controller/subsystem/SS in subsystems) - if (SS.flags & SS_FIRE_IN_LOBBY || SS.flags & SS_TICKER) - continue //already firing - // Stagger subsystems. - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer +/datum/controller/master/proc/SetRunLevel(new_runlevel) + var/old_runlevel = current_runlevel + if(isnull(old_runlevel)) + old_runlevel = "NULL" + + testing("MC: Runlevel changed from [old_runlevel] to [new_runlevel]") + current_runlevel = log(2, new_runlevel) + 1 + if(current_runlevel < 1) + CRASH("Attempted to set invalid runlevel: [new_runlevel]") // Starts the mc, and sticks around to restart it if the loop ever ends. /datum/controller/master/proc/StartProcessing(delay) @@ -221,12 +222,9 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) //Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because // local vars rock - // Schedule the first run of the Subsystems. - local_round_started = world.has_round_started() //all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed) var/list/tickersubsystems = list() - var/list/normalsubsystems = list() - var/list/lobbysubsystems = list() + var/list/runlevel_sorted_subsystems = list(list()) //ensure we always have at least one runlevel var/timer = world.time for (var/thing in subsystems) var/datum/controller/subsystem/SS = thing @@ -241,25 +239,29 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) timer += world.tick_lag * rand(1, 5) SS.next_fire = timer continue - if (SS.flags & SS_FIRE_IN_LOBBY) - lobbysubsystems += SS - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer - else if (local_round_started) - timer += world.tick_lag * rand(1, 5) - SS.next_fire = timer - normalsubsystems += SS + + var/ss_runlevels = SS.runlevels + var/added_to_any = FALSE + for(var/I in 1 to GLOB.bitflags.len) + if(ss_runlevels & GLOB.bitflags[I]) + while(runlevel_sorted_subsystems.len < I) + runlevel_sorted_subsystems += list(list()) + runlevel_sorted_subsystems[I] += SS + added_to_any = TRUE + if(!added_to_any) + WARNING("[SS.name] subsystem is not SS_NO_FIRE but also does not have any runlevels set!") queue_head = null queue_tail = null //these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue //(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add) sortTim(tickersubsystems, /proc/cmp_subsystem_priority) - sortTim(normalsubsystems, /proc/cmp_subsystem_priority) - sortTim(lobbysubsystems, /proc/cmp_subsystem_priority) + for(var/I in runlevel_sorted_subsystems) + sortTim(runlevel_sorted_subsystems, /proc/cmp_subsystem_priority) + I += tickersubsystems - normalsubsystems += tickersubsystems - lobbysubsystems += tickersubsystems + var/cached_runlevel = current_runlevel + var/list/current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] init_timeofday = REALTIMEOFDAY init_time = world.time @@ -280,7 +282,7 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) // because sleeps are processed in the order received, so longer sleeps are more likely to run first if (world.tick_usage > TICK_LIMIT_MC) sleep_delta += 2 - GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5) + GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING * 0.5 sleep(world.tick_lag * (processing + sleep_delta)) continue @@ -296,14 +298,23 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time)) new/datum/controller/failsafe() // (re)Start the failsafe. if (!queue_head || !(iteration % 3)) - if (local_round_started) - subsystems_to_check = normalsubsystems - else - subsystems_to_check = lobbysubsystems + var/checking_runlevel = current_runlevel + if(cached_runlevel != checking_runlevel) + //resechedule subsystems + cached_runlevel = checking_runlevel + current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] + var/stagger = world.time + for(var/I in current_runlevel_subsystems) + var/datum/controller/subsystem/SS = I + if(SS.next_fire <= world.time) + stagger += world.tick_lag * rand(1, 5) + SS.next_fire = stagger + + subsystems_to_check = current_runlevel_subsystems else subsystems_to_check = tickersubsystems if (CheckQueue(subsystems_to_check) <= 0) - if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) log_world("MC: SoftReset() failed, crashing") return if (!error_level) @@ -315,7 +326,7 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) if (queue_head) if (RunQueue() <= 0) - if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems)) + if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems)) log_world("MC: SoftReset() failed, crashing") return if (!error_level) @@ -421,26 +432,31 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) else tick_precentage = tick_remaining - GLOB.CURRENT_TICKLIMIT = world.tick_usage + tick_precentage + tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun) + + GLOB.CURRENT_TICKLIMIT = round(world.tick_usage + tick_precentage) if (!(queue_node_flags & SS_TICKER)) ran_non_ticker = TRUE ran = TRUE - tick_usage = world.tick_usage + queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING) last_type_processed = queue_node queue_node.state = SS_RUNNING + tick_usage = world.tick_usage var/state = queue_node.ignite(queue_node_paused) + tick_usage = world.tick_usage - tick_usage + if (state == SS_RUNNING) state = SS_IDLE current_tick_budget -= queue_node_priority - tick_usage = world.tick_usage - tick_usage + if (tick_usage < 0) tick_usage = 0 - + queue_node.tick_overrun = max(0, MC_AVG_FAST_UP_SLOW_DOWN(queue_node.tick_overrun, tick_usage-tick_precentage)) queue_node.state = state if (state == SS_PAUSED) @@ -467,13 +483,13 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) queue_node.times_fired++ if (queue_node_flags & SS_TICKER) - queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait) + queue_node.next_fire = world.time + (world.tick_lag * (queue_node.wait + (queue_node.tick_overrun/100))) else if (queue_node_flags & SS_POST_FIRE_TIMING) - queue_node.next_fire = world.time + queue_node.wait + queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) else if (queue_node_flags & SS_KEEP_TIMING) queue_node.next_fire += queue_node.wait else - queue_node.next_fire = queue_node.queued_time + queue_node.wait + queue_node.next_fire = queue_node.queued_time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100)) queue_node.queued_time = 0 @@ -486,13 +502,15 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) //resets the queue, and all subsystems, while filtering out the subsystem lists // called if any mc's queue procs runtime or exit improperly. -/datum/controller/master/proc/SoftReset(list/ticker_SS, list/normal_SS, list/lobby_SS) +/datum/controller/master/proc/SoftReset(list/ticker_SS, list/runlevel_SS) . = 0 log_world("MC: SoftReset called, resetting MC queue state.") - if (!istype(subsystems) || !istype(ticker_SS) || !istype(normal_SS) || !istype(lobby_SS)) - log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[normal_SS]' '[lobby_SS]' Crashing!") + if (!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS)) + log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[runlevel_SS]'") return - var/subsystemstocheck = subsystems + ticker_SS + normal_SS + lobby_SS + var/subsystemstocheck = subsystems + ticker_SS + for(var/I in runlevel_SS) + subsystemstocheck |= I for (var/thing in subsystemstocheck) var/datum/controller/subsystem/SS = thing @@ -500,8 +518,8 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING) //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents subsystems -= list(SS) ticker_SS -= list(SS) - normal_SS -= list(SS) - lobby_SS -= list(SS) + for(var/I in runlevel_SS) + I -= list(SS) log_world("MC: SoftReset: Found bad entry in subsystem list, '[SS]'") continue if (SS.queue_next && !istype(SS.queue_next)) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index f37a9159ef..3024c24c15 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -17,6 +17,7 @@ var/next_fire = 0 //scheduled world.time for next fire() var/cost = 0 //average time to execute var/tick_usage = 0 //average tick usage + var/tick_overrun = 0 //average tick overrun var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc. var/paused_ticks = 0 //ticks this ss is taking to run right now. var/paused_tick_usage //total tick_usage of all of our runs while pausing this run @@ -28,6 +29,8 @@ var/datum/controller/subsystem/queue_next var/datum/controller/subsystem/queue_prev + var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire + var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out! //Do not override @@ -168,7 +171,7 @@ if(can_fire && !(SS_NO_FIRE in flags)) - msg = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]\t[msg]" + msg = "[round(cost,1)]ms|[round(tick_usage,1)]%([round(tick_overrun,1)]%)|[round(ticks,0.1)]\t[msg]" else msg = "OFFLINE\t[msg]" diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index a0a506499f..a83afb3923 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -2,6 +2,7 @@ SUBSYSTEM_DEF(acid) name = "Acid" priority = 40 flags = SS_NO_INIT|SS_BACKGROUND + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 919b4cfce9..e9dc532975 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -12,6 +12,7 @@ SUBSYSTEM_DEF(air) priority = 20 wait = 5 flags = SS_BACKGROUND + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/cost_turfs = 0 var/cost_groups = 0 @@ -299,7 +300,7 @@ SUBSYSTEM_DEF(air) var/timer = world.timeofday warning("There are [starting_ats] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)") for(var/turf/T in active_turfs) - GLOB.active_turfs_startlist += text("[T.x], [T.y], [T.z]\n") + GLOB.active_turfs_startlist += T //now lets clear out these active turfs var/list/turfs_to_check = active_turfs.Copy() diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 711da25889..0391f6ba70 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -150,7 +150,7 @@ SUBSYSTEM_DEF(atoms) /datum/controller/subsystem/atoms/Shutdown() var/initlog = InitLog() if(initlog) - log_world(initlog) + text2file("[GLOB.log_directory]/initialize.log", initlog) #undef BAD_INIT_QDEL_BEFORE #undef BAD_INIT_DIDNT_INIT diff --git a/code/controllers/subsystem/augury.dm b/code/controllers/subsystem/augury.dm index 851234fde5..32086f52ed 100644 --- a/code/controllers/subsystem/augury.dm +++ b/code/controllers/subsystem/augury.dm @@ -1,6 +1,7 @@ SUBSYSTEM_DEF(augury) name = "Augury" flags = SS_NO_INIT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/watchers = list() var/list/doombringers = list() diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index 1b14b352df..a807202c9e 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -42,6 +42,7 @@ SUBSYSTEM_DEF(blackbox) msg_cargo = SSblackbox.msg_cargo msg_other = SSblackbox.msg_other + feedback = SSblackbox.feedback //no touchie @@ -84,25 +85,13 @@ SUBSYSTEM_DEF(blackbox) if (!SSdbcore.Connect()) return - var/round_id - - var/datum/DBQuery/query_feedback_max_id = SSdbcore.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]") - if(!query_feedback_max_id.Execute()) - return - while (query_feedback_max_id.NextRow()) - round_id = query_feedback_max_id.item[1] - - if (!isnum(round_id)) - round_id = text2num(round_id) - round_id++ - var/sqlrowlist = "" for (var/datum/feedback_variable/FV in feedback) if (sqlrowlist != "") sqlrowlist += ", " //a comma (,) at the start of the first row to insert will trigger a SQL error - sqlrowlist += "(null, Now(), [round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")" + sqlrowlist += "(null, Now(), [GLOB.round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")" if (sqlrowlist == "") return diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm index 8b867146a6..5499680a2f 100644 --- a/code/controllers/subsystem/disease.dm +++ b/code/controllers/subsystem/disease.dm @@ -1,6 +1,7 @@ SUBSYSTEM_DEF(disease) name = "Disease" flags = SS_KEEP_TIMING|SS_NO_INIT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index b99b71ed33..5e557b32d5 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -1,6 +1,7 @@ SUBSYSTEM_DEF(events) name = "Events" init_order = INIT_ORDER_EVENTS + runlevels = RUNLEVEL_GAME var/list/control = list() //list of all datum/round_event_control. Used for selecting events based on weight and occurrences. var/list/running = list() //list of all existing /datum/round_event diff --git a/code/controllers/subsystem/fire_burning.dm b/code/controllers/subsystem/fire_burning.dm index af3cb3f6a1..73358000f1 100644 --- a/code/controllers/subsystem/fire_burning.dm +++ b/code/controllers/subsystem/fire_burning.dm @@ -2,6 +2,7 @@ SUBSYSTEM_DEF(fire_burning) name = "Fire Burning" priority = 40 flags = SS_NO_INIT|SS_BACKGROUND + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 7d3682cf5f..84d79009c0 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -2,7 +2,8 @@ SUBSYSTEM_DEF(garbage) name = "Garbage" priority = 15 wait = 5 - flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object var/delslasttick = 0 // number of del()'s we've done this tick @@ -60,7 +61,7 @@ SUBSYSTEM_DEF(garbage) for(var/path in sleptDestroy) dellog += "Path : [path] \n" dellog += "Sleeps : [sleptDestroy[path]] \n" - log_world(dellog.Join()) + text2file("[GLOB.log_directory]/qdel.log", dellog.Join()) /datum/controller/subsystem/garbage/fire() HandleToBeQueued() diff --git a/code/controllers/subsystem/inbounds.dm b/code/controllers/subsystem/inbounds.dm index 1ac9115982..16e0f53028 100644 --- a/code/controllers/subsystem/inbounds.dm +++ b/code/controllers/subsystem/inbounds.dm @@ -2,6 +2,7 @@ SUBSYSTEM_DEF(inbounds) name = "Inbounds" priority = 40 flags = SS_NO_INIT + runlevels = RUNLEVEL_GAME var/list/processing = list() var/list/currentrun = list() diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index a3255b73e4..c37e10b28c 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -308,7 +308,6 @@ SUBSYSTEM_DEF(job) Debug("DO non-human failed, Player: [player], Job:[job.title]") continue - // If the player wants that job on this level, then try give it to him. if(player.client.prefs.GetJobDepartment(job, level) & job.flag) @@ -319,6 +318,7 @@ SUBSYSTEM_DEF(job) unassigned -= player break + // Hand out random jobs to the people who didn't get any in the last check // Also makes sure that they got their preference correct for(var/mob/dead/new_player/player in unassigned) diff --git a/code/controllers/subsystem/language.dm b/code/controllers/subsystem/language.dm new file mode 100644 index 0000000000..e80a7096d8 --- /dev/null +++ b/code/controllers/subsystem/language.dm @@ -0,0 +1,18 @@ +SUBSYSTEM_DEF(language) + name = "Language" + init_order = INIT_ORDER_LANGUAGE + flags = SS_NO_FIRE + +/datum/controller/subsystem/language/Initialize(timeofday) + for(var/L in subtypesof(/datum/language)) + var/datum/language/language = L + if(!initial(language.key)) + continue + + GLOB.all_languages += language + + var/datum/language/instance = new language + + GLOB.language_datum_instances[language] = instance + + return ..() diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index eb61e5ef39..35d8a3d08f 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -36,18 +36,10 @@ SUBSYSTEM_DEF(lighting) for (i in 1 to GLOB.lighting_update_lights.len) var/datum/light_source/L = GLOB.lighting_update_lights[i] - if (L.check() || QDELETED(L) || L.force_update) - L.remove_lum() - if (!QDELETED(L)) - L.apply_lum() + L.update_corners() - else if (L.vis_update) //We smartly update only tiles that became (in) visible to use. - L.smart_vis_update() + L.needs_update = LIGHTING_NO_UPDATE - L.vis_update = FALSE - L.force_update = FALSE - L.needs_update = FALSE - if(init_tick_checks) CHECK_TICK else if (MC_TICK_CHECK) diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index f87b94bac4..cbe9d5c245 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -2,6 +2,7 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" priority = 100 flags = SS_KEEP_TIMING|SS_NO_INIT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 26e6f90b9d..fa75d3048f 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -7,6 +7,7 @@ SUBSYSTEM_DEF(npcpool) name = "NPC Pool" flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND priority = 20 + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/canBeUsed = list() var/list/needsDelegate = list() diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index dfb41c8905..ea6d57088f 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -150,7 +150,7 @@ SUBSYSTEM_DEF(pai) if(!(ROLE_PAI in G.client.prefs.be_special)) continue //G << 'sound/misc/server-ready.ogg' //Alerting them to their consideration - to_chat(G, "Someone is requesting a pAI personality! Use the pAI button to submit yourself as one.") + to_chat(G, "[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.") addtimer(CALLBACK(src, .proc/spam_again), spam_delay) var/list/available = list() for(var/datum/paiCandidate/c in SSpai.candidates) diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 6ce2928f89..39d07ee676 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -1,8 +1,9 @@ SUBSYSTEM_DEF(parallax) name = "Parallax" wait = 2 - flags = SS_POST_FIRE_TIMING | SS_FIRE_IN_LOBBY | SS_BACKGROUND | SS_NO_INIT + flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT priority = 65 + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun /datum/controller/subsystem/parallax/fire(resumed = 0) diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 6b3e47054c..ec76d623b1 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -9,7 +9,6 @@ SUBSYSTEM_DEF(persistence) var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() - var/savefile/chisel_messages_sav var/savefile/trophy_sav var/list/saved_trophies = list() @@ -75,14 +74,14 @@ SUBSYSTEM_DEF(persistence) break //Who's been duping the bird?! /datum/controller/subsystem/persistence/proc/LoadChiselMessages() - chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") + var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") var/saved_json chisel_messages_sav[SSmapping.config.map_name] >> saved_json if(!saved_json) return - var/saved_messages = json_decode(saved_json) + var/list/saved_messages = json_decode(saved_json) for(var/item in saved_messages) if(!islist(item)) @@ -104,16 +103,19 @@ SUBSYSTEM_DEF(persistence) var/obj/structure/chisel_message/M = new(T) - M.unpack(item) - if(!M.loc) - M.persists = FALSE - qdel(M) + if(!QDELETED(M)) + M.unpack(item) + + log_world("Loaded [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") /datum/controller/subsystem/persistence/proc/LoadTrophies() trophy_sav = new /savefile("data/npc_saves/TrophyItems.sav") var/saved_json trophy_sav >> saved_json + if(!saved_json) + return + var/decoded_json = json_decode(saved_json) if(!islist(decoded_json)) @@ -172,9 +174,13 @@ SUBSYSTEM_DEF(persistence) secret_satchels[SSmapping.config.map_name] << old_secret_satchels /datum/controller/subsystem/persistence/proc/CollectChiselMessages() + var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") + for(var/obj/structure/chisel_message/M in chisel_messages) saved_messages += list(M.pack()) + log_world("Saved [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") + chisel_messages_sav[SSmapping.config.map_name] << json_encode(saved_messages) /datum/controller/subsystem/persistence/proc/SaveChiselMessage(obj/structure/chisel_message/M) @@ -190,4 +196,4 @@ SUBSYSTEM_DEF(persistence) data["path"] = T.showpiece.type data["message"] = T.trophy_message data["placer_key"] = T.placer_key - saved_trophies += list(data) \ No newline at end of file + saved_trophies += list(data) diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm index 1d85811878..0639f64810 100644 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ b/code/controllers/subsystem/processing/flightpacks.dm @@ -5,7 +5,7 @@ PROCESSING_SUBSYSTEM_DEF(flightpacks) stat_tag = "FM" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING - var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL + var/flightsuit_processing = FLIGHTSUIT_PROCESSING_NONE /datum/controller/subsystem/processing/flightpacks/Initialize() sync_flightsuit_processing() diff --git a/code/controllers/subsystem/processing/overlays.dm b/code/controllers/subsystem/processing/overlays.dm index 1aa76e6b3d..4e1d2d64d5 100644 --- a/code/controllers/subsystem/processing/overlays.dm +++ b/code/controllers/subsystem/processing/overlays.dm @@ -1,9 +1,10 @@ PROCESSING_SUBSYSTEM_DEF(overlays) name = "Overlay" - flags = SS_TICKER|SS_FIRE_IN_LOBBY + flags = SS_TICKER wait = 1 priority = 500 init_order = INIT_ORDER_OVERLAY + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_SETUP stat_tag = "Ov" currentrun = null diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index 08f60d23e6..a0ca6a7b67 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -3,8 +3,9 @@ SUBSYSTEM_DEF(server_maint) name = "Server Tasks" wait = 6 - flags = SS_POST_FIRE_TIMING|SS_FIRE_IN_LOBBY + flags = SS_POST_FIRE_TIMING priority = 10 + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun /datum/controller/subsystem/server_maint/Initialize(timeofday) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index e2546f65c4..a3d47b465e 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -5,6 +5,7 @@ SUBSYSTEM_DEF(shuttle) wait = 10 init_order = INIT_ORDER_SHUTTLE flags = SS_KEEP_TIMING|SS_NO_TICK_CHECK + runlevels = RUNLEVEL_SETUP | RUNLEVEL_GAME var/list/mobile = list() var/list/stationary = list() @@ -48,7 +49,7 @@ SUBSYSTEM_DEF(shuttle) var/auto_call = 72000 //time before in deciseconds in which the shuttle is auto called. Default is 2 hours. /datum/controller/subsystem/shuttle/Initialize(timeofday) - if(!emergency) + if(!arrivals) WARNING("No /obj/docking_port/mobile/arrivals placed on the map!") if(!emergency) WARNING("No /obj/docking_port/mobile/emergency placed on the map!") @@ -513,3 +514,13 @@ SUBSYSTEM_DEF(shuttle) centcom_message = SSshuttle.centcom_message ordernum = SSshuttle.ordernum points = SSshuttle.points + + +/datum/controller/subsystem/shuttle/proc/is_in_shuttle_bounds(atom/A) + var/area/current = get_area(A) + if(istype(current, /area/shuttle) && !istype(current,/area/shuttle/transit)) + return TRUE + for(var/obj/docking_port/mobile/M in mobile) + if(M.is_in_shuttle_bounds(A)) + return TRUE + \ No newline at end of file diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index 9b178a4e75..53e6c0cee1 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(spacedrift) priority = 30 wait = 5 flags = SS_NO_INIT|SS_KEEP_TIMING + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() var/list/processing = list() diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index 862dfb0f98..52fd286eed 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -1,8 +1,9 @@ SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 - flags = SS_NO_INIT|SS_FIRE_IN_LOBBY + flags = SS_NO_INIT priority = 110 + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun = list() var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key. diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 8d95d3fa29..4ae31e98d6 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -6,6 +6,7 @@ SUBSYSTEM_DEF(throwing) priority = 25 wait = 1 flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun var/list/processing = list() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index f3ac66e001..7694eb8daf 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -5,7 +5,8 @@ SUBSYSTEM_DEF(ticker) init_order = INIT_ORDER_TICKER priority = 200 - flags = SS_FIRE_IN_LOBBY|SS_KEEP_TIMING + flags = SS_KEEP_TIMING + runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME var/current_state = GAME_STATE_STARTUP //state of current round (used by process()) Use the defines GAME_STATE_* ! var/force_ending = 0 //Round was ended by admin intervention @@ -109,6 +110,7 @@ SUBSYSTEM_DEF(ticker) if(timeLeft <= 0) current_state = GAME_STATE_SETTING_UP + Master.SetRunLevel(RUNLEVEL_SETUP) if(start_immediately) fire() @@ -116,6 +118,7 @@ SUBSYSTEM_DEF(ticker) if(!setup()) //setup failed current_state = GAME_STATE_STARTUP + Master.SetRunLevel(RUNLEVEL_LOBBY) if(GAME_STATE_PLAYING) mode.process(wait * 0.1) @@ -128,6 +131,7 @@ SUBSYSTEM_DEF(ticker) current_state = GAME_STATE_FINISHED toggle_ooc(1) // Turn it on declare_completion(force_ending) + Master.SetRunLevel(RUNLEVEL_POSTGAME) /datum/controller/subsystem/ticker/proc/setup() to_chat(world, "Starting game...") @@ -204,8 +208,6 @@ SUBSYSTEM_DEF(ticker) transfer_characters() //transfer keys to the new mobs - Master.RoundStart() //let the party begin... - for(var/I in round_start_events) var/datum/callback/cb = I cb.InvokeAsync() @@ -218,6 +220,7 @@ SUBSYSTEM_DEF(ticker) world << sound('sound/AI/welcome.ogg') current_state = GAME_STATE_PLAYING + Master.SetRunLevel(RUNLEVEL_GAME) if(SSevents.holidays) to_chat(world, "and...") @@ -625,8 +628,8 @@ SUBSYSTEM_DEF(ticker) if(selected_tip) m = selected_tip else - var/list/randomtips = world.file2list("config/tips.txt") - var/list/memetips = world.file2list("config/sillytips.txt") + var/list/randomtips = world.file2list("strings/tips.txt") + var/list/memetips = world.file2list("strings/sillytips.txt") if(randomtips.len && prob(95)) m = pick(randomtips) else if(memetips.len) diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index 20230037c2..cb190206b7 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -1,7 +1,8 @@ SUBSYSTEM_DEF(time_track) name = "Time Tracking" wait = 600 - flags = SS_NO_INIT|SS_FIRE_IN_LOBBY|SS_NO_TICK_CHECK + flags = SS_NO_INIT|SS_NO_TICK_CHECK + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/time_dilation_current = 0 diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 55ebbfa352..2203e0f1f5 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(timer) wait = 1 //SS_TICKER subsystem, so wait is in ticks init_order = INIT_ORDER_TIMER - flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_NO_INIT + flags = SS_TICKER|SS_NO_INIT var/list/datum/timedevent/processing = list() var/list/hashes = list() diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 5deb0adf85..99234b05ed 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -2,7 +2,9 @@ SUBSYSTEM_DEF(vote) name = "Vote" wait = 10 - flags = SS_FIRE_IN_LOBBY|SS_KEEP_TIMING|SS_NO_INIT + flags = SS_KEEP_TIMING|SS_NO_INIT + + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/initiator = null var/started_time = null diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm index 569eb4032c..88102e260c 100644 --- a/code/controllers/subsystem/weather.dm +++ b/code/controllers/subsystem/weather.dm @@ -3,6 +3,7 @@ SUBSYSTEM_DEF(weather) name = "Weather" flags = SS_BACKGROUND wait = 10 + runlevels = RUNLEVEL_GAME var/list/processing = list() var/list/existing_weather = list() var/list/eligible_zlevels = list(ZLEVEL_LAVALAND) diff --git a/code/datums/action.dm b/code/datums/action.dm index 08239492f3..5a397fe3bd 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -482,6 +482,7 @@ /datum/action/language_menu/Trigger() if(!..()) return FALSE - if(isliving(owner)) - var/mob/living/L = owner - L.open_language_menu(usr) + if(ismob(owner)) + var/mob/M = owner + var/datum/language_holder/H = M.get_language_holder() + H.open_language_menu(usr) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 8d817265e6..7875b7921c 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -420,7 +420,7 @@ return /datum/ai_laws/proc/clear_law_sixsixsix(force) - if(force || !(owner && owner.mind.devilinfo)) + if(force || !is_devil(owner)) devillaws = null /datum/ai_laws/proc/associate(mob/living/silicon/M) diff --git a/code/datums/antagonists/antag_datum.dm b/code/datums/antagonists/antag_datum.dm index 396c185961..33adab5c3d 100644 --- a/code/datums/antagonists/antag_datum.dm +++ b/code/datums/antagonists/antag_datum.dm @@ -7,6 +7,7 @@ var/can_coexist_with_others = TRUE //Whether or not the person will be able to have more than one datum var/list/typecache_datum_blacklist = list() //List of datums this type can't coexist with + var/delete_on_death = TRUE /datum/antagonist/New(datum/mind/new_owner) typecache_datum_blacklist = typecacheof(typecache_datum_blacklist) @@ -59,4 +60,4 @@ return /datum/antagonist/proc/farewell() - return + return \ No newline at end of file diff --git a/code/datums/antagonists/datum_cult.dm b/code/datums/antagonists/datum_cult.dm index 30c0aa8450..ef11dd8b16 100644 --- a/code/datums/antagonists/datum_cult.dm +++ b/code/datums/antagonists/datum_cult.dm @@ -1,10 +1,58 @@ /datum/antagonist/cult - var/datum/action/innate/cultcomm/communion = new + var/datum/action/innate/cult/comm/communion = new + var/datum/action/innate/cult/mastervote/vote = new /datum/antagonist/cult/Destroy() - qdel(communion) + QDEL_NULL(communion) + QDEL_NULL(vote) return ..() +/datum/antagonist/cult/proc/add_objectives() + var/list/target_candidates = list() + for(var/mob/living/carbon/human/player in GLOB.player_list) + if(player.mind && !player.mind.has_antag_datum(ANTAG_DATUM_CULT) && !is_convertable_to_cult(player) && (player != owner) && player.stat != DEAD) + target_candidates += player.mind + if(target_candidates.len == 0) + message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.") + for(var/mob/living/carbon/human/player in GLOB.player_list) + if(player.mind && !player.mind.has_antag_datum(ANTAG_DATUM_CULT) && (player != owner) && player.stat != DEAD) + target_candidates += player.mind + listclearnulls(target_candidates) + if(LAZYLEN(target_candidates)) + GLOB.sac_mind = pick(target_candidates) + if(!GLOB.sac_mind) + message_admins("Cult Sacrifice: ERROR - Null target chosen!") + else + var/datum/job/sacjob = SSjob.GetJob(GLOB.sac_mind.assigned_role) + var/datum/preferences/sacface = GLOB.sac_mind.current.client.prefs + var/icon/reshape = get_flat_human_icon(null, sacjob, sacface) + reshape.Shift(SOUTH, 4) + reshape.Shift(EAST, 1) + reshape.Crop(7,4,26,31) + reshape.Crop(-5,-3,26,30) + GLOB.sac_image = reshape + else + message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!") + GLOB.sac_complete = TRUE + SSticker.mode.cult_objectives += "sacrifice" + SSticker.mode.cult_objectives += "eldergod" + +/datum/antagonist/cult/proc/cult_memorization(datum/mind/cult_mind) + var/mob/living/current = cult_mind.current + for(var/obj_count = 1,obj_count <= SSticker.mode.cult_objectives.len,obj_count++) + var/explanation + switch(SSticker.mode.cult_objectives[obj_count]) + if("sacrifice") + if(GLOB.sac_mind) + explanation = "Sacrifice [GLOB.sac_mind], the [GLOB.sac_mind.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it." + else + explanation = "The veil has already been weakened here, proceed to the final objective." + if("eldergod") + explanation = "Summon Nar-Sie by invoking the rune 'Summon Nar-Sie' with nine acolytes on it. You must do this after sacrificing your target." + if(!silent) + to_chat(current, "Objective #[obj_count]: [explanation]") + cult_mind.memory += "Objective #[obj_count]: [explanation]
" + /datum/antagonist/cult/can_be_owned(datum/mind/new_owner) . = ..() if(.) @@ -12,14 +60,17 @@ /datum/antagonist/cult/on_gain() . = ..() - SSticker.mode.cult += owner + var/mob/living/current = owner.current + if(!LAZYLEN(SSticker.mode.cult_objectives)) + add_objectives() + SSticker.mode.cult += owner // Only add after they've been given objectives + cult_memorization(owner) + if(jobban_isbanned(current, ROLE_CULTIST)) + addtimer(CALLBACK(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, current, ROLE_CULTIST, ROLE_CULTIST), 0) SSticker.mode.update_cult_icons_added(owner) - if(istype(SSticker.mode, /datum/game_mode/cult)) - var/datum/game_mode/cult/C = SSticker.mode - C.memorize_cult_objectives(owner) - if(jobban_isbanned(owner.current, ROLE_CULTIST)) - addtimer(CALLBACK(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner.current, ROLE_CULTIST, ROLE_CULTIST), 0) - owner.current.log_message("Has been converted to the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) + current.log_message("Has been converted to the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) + if(GLOB.blood_target && GLOB.blood_target_image && current.client) + current.client.images += GLOB.blood_target_image /datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) . = ..() @@ -27,8 +78,12 @@ if(mob_override) current = mob_override current.faction |= "cult" + current.grant_language(/datum/language/narsie) current.verbs += /mob/living/proc/cult_help + if(!GLOB.cult_mastered) + vote.Grant(current) communion.Grant(current) + current.throw_alert("bloodsense", /obj/screen/alert/bloodsense) /datum/antagonist/cult/remove_innate_effects(mob/living/mob_override) . = ..() @@ -36,15 +91,60 @@ if(mob_override) current = mob_override current.faction -= "cult" + current.remove_language(/datum/language/narsie) current.verbs -= /mob/living/proc/cult_help + vote.Remove(current) communion.Remove(current) + current.clear_alert("bloodsense") /datum/antagonist/cult/on_removal() owner.wipe_memory() SSticker.mode.cult -= owner SSticker.mode.update_cult_icons_removed(owner) - to_chat(owner, "An unfamiliar white light flashes through your mind, cleansing the taint of the Dark One and all your memories as its servant.") - owner.current.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) if(!silent) - owner.current.visible_message("[owner] looks like [owner.current.p_they()] just reverted to their old faith!") + to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.") + owner.current.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) + owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!") + if(GLOB.blood_target && GLOB.blood_target_image && owner.current.client) + owner.current.client.images -= GLOB.blood_target_image . = ..() + +/datum/antagonist/cult/master + var/datum/action/innate/cult/master/finalreck/reckoning = new + var/datum/action/innate/cult/master/cultmark/bloodmark = new + +/datum/antagonist/cult/master/Destroy() + QDEL_NULL(reckoning) + QDEL_NULL(bloodmark) + return ..() + +/datum/antagonist/cult/master/on_gain() + . = ..() + var/mob/living/current = owner.current + SSticker.mode.set_antag_hud(current, "cultmaster") + +/datum/antagonist/cult/master/greet() + to_chat(owner.current, "You are the cult's Master. As the cult's Master, you have a unique title and loud voice when communicating, are capable of marking \ + targets, such as a location or a noncultist, to direct the cult to them, and, finally, you are capable of summoning the entire living cult to your location once.") + to_chat(owner.current, "Use these abilities to direct the cult to victory at any cost.") + +/datum/antagonist/cult/master/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(mob_override) + current = mob_override + if(!GLOB.reckoning_complete) + reckoning.Grant(current) + bloodmark.Grant(current) + current.update_action_buttons_icon() + current.apply_status_effect(/datum/status_effect/cult_master) + +/datum/antagonist/cult/master/remove_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/current = owner.current + if(mob_override) + current = mob_override + reckoning.Remove(current) + bloodmark.Remove(current) + current.update_action_buttons_icon() + current.remove_status_effect(/datum/status_effect/cult_master) \ No newline at end of file diff --git a/code/datums/antagonists/datum_cult.dm.rej b/code/datums/antagonists/datum_cult.dm.rej deleted file mode 100644 index 0fc846a73c..0000000000 --- a/code/datums/antagonists/datum_cult.dm.rej +++ /dev/null @@ -1,25 +0,0 @@ -diff a/code/datums/antagonists/datum_cult.dm b/code/datums/antagonists/datum_cult.dm (rejected hunks) -@@ -5,13 +5,20 @@ - qdel(communion) - return ..() - -+/datum/antagonist/cult/can_be_owned(datum/mind/new_owner) -+ . = ..() -+ if(.) -+ . = is_convertable_to_cult(new_owner.current) -+ - /datum/antagonist/cult/on_gain() - . = ..() -- if(!owner) -- return -+ SSticker.mode.cult += owner -+ SSticker.mode.update_cult_icons_added(owner) -+ if(istype(SSticker.mode, /datum/game_mode/cult)) -+ var/datum/game_mode/cult/C = SSticker.mode -+ C.memorize_cult_objectives(owner) - if(jobban_isbanned(owner.current, ROLE_CULTIST)) - addtimer(CALLBACK(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner.current, ROLE_CULTIST, ROLE_CULTIST), 0) -- SSticker.mode.update_cult_icons_added(owner) - owner.current.log_message("Has been converted to the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) - - /datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 6b44109c9c..282759b961 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -169,7 +169,7 @@ opentime = 0 /datum/browser/alert/proc/wait() - while (opentime && selectedbutton <= 0 && (!timeout || opentime+timeout >= world.time)) + while (opentime && selectedbutton <= 0 && (!timeout || opentime+timeout > world.time)) stoplag() /datum/browser/alert/Topic(href,href_list) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index b9358817e3..b90e2ec652 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -75,10 +75,12 @@ if(GLOB.revdata.parentcommit) to_chat(src, "Server revision compiled on: [GLOB.revdata.date]") + var/prefix = "" if(GLOB.revdata.testmerge.len) to_chat(src, GLOB.revdata.GetTestMergeInfo()) - to_chat(src, "Based off master commit:") - to_chat(src, "[GLOB.revdata.parentcommit]") + prefix = "Based off master commit: " + var/pc = GLOB.revdata.parentcommit + to_chat(src, "[prefix][copytext(pc, 1, min(length(pc), 7))]") else to_chat(src, "Revision unknown") to_chat(src, "Current Infomational Settings:") diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm new file mode 100644 index 0000000000..10599ca25b --- /dev/null +++ b/code/datums/holocall.dm @@ -0,0 +1,160 @@ + +#define HOLOPAD_MAX_DIAL_TIME 200 + +/mob/camera/aiEye/remote/holo/setLoc() + . = ..() + var/obj/machinery/holopad/H = origin + H.move_hologram(eye_user, loc) + +//this datum manages it's own references + +/datum/holocall + var/mob/living/user //the one that called + var/obj/machinery/holopad/calling_holopad //the one that sent the call + var/obj/machinery/holopad/connected_holopad //the one that answered the call (may be null) + var/list/dialed_holopads //all things called, will be cleared out to just connected_holopad once answered + + var/mob/camera/aiEye/remote/holo/eye //user's eye, once connected + var/obj/effect/overlay/holo_pad_hologram/hologram //user's hologram, once connected + + var/call_start_time + +//creates a holocall made by `caller` from `calling_pad` to `callees` +/datum/holocall/New(mob/living/caller, obj/machinery/holopad/calling_pad, list/callees) + call_start_time = world.time + user = caller + calling_pad.outgoing_call = src + calling_holopad = calling_pad + dialed_holopads = list() + + for(var/I in callees) + var/obj/machinery/holopad/H = I + if(!QDELETED(H) && H.is_operational()) + dialed_holopads += H + LAZYADD(H.holo_calls, src) + + if(!dialed_holopads.len) + calling_pad.say("Connection failure.") + qdel(src) + return + + testing("Holocall started") + +//cleans up ALL references :) +/datum/holocall/Destroy() + QDEL_NULL(eye) + + user.reset_perspective() + + user = null + hologram.HC = null + hologram = null + calling_holopad.outgoing_call = null + + for(var/I in dialed_holopads) + var/obj/machinery/holopad/H = I + LAZYREMOVE(H.holo_calls, src) + dialed_holopads.Cut() + + if(calling_holopad) + calling_holopad.SetLightsAndPower() + calling_holopad = null + if(connected_holopad) + connected_holopad.SetLightsAndPower() + connected_holopad = null + + testing("Holocall destroyed") + + return ..() + +//Gracefully disconnects a holopad `H` from a call. Pads not in the call are ignored. Notifies participants of the disconnection +/datum/holocall/proc/Disconnect(obj/machinery/holopad/H) + testing("Holocall disconnect") + if(H == connected_holopad) + calling_holopad.say("[usr] disconnected.") + else if(H == calling_holopad && connected_holopad) + connected_holopad.say("[usr] disconnected.") + + ConnectionFailure(H, TRUE) + +//Forcefully disconnects a holopad `H` from a call. Pads not in the call are ignored. +/datum/holocall/proc/ConnectionFailure(obj/machinery/holopad/H, graceful = FALSE) + testing("Holocall connection failure: graceful [graceful]") + if(H == connected_holopad || H == calling_holopad) + if(!graceful) + calling_holopad.say("Connection failure.") + qdel(src) + return + + LAZYREMOVE(H.holo_calls, src) + dialed_holopads -= H + if(!dialed_holopads.len) + if(graceful) + calling_holopad.say("Call rejected.") + testing("No recipients, terminating") + qdel(src) + +//Answers a call made to a holopad `H` which cannot be the calling holopad. Pads not in the call are ignored +/datum/holocall/proc/Answer(obj/machinery/holopad/H) + testing("Holocall answer") + if(H == calling_holopad) + CRASH("How cute, a holopad tried to answer itself.") + + if(!(H in dialed_holopads)) + return + + if(connected_holopad) + CRASH("Multi-connection holocall") + + for(var/I in dialed_holopads) + if(I == H) + continue + Disconnect(I) + + for(var/I in H.holo_calls) + var/datum/holocall/HC = I + if(HC != src) + HC.Disconnect(H) + + connected_holopad = H + + if(!Check()) + return + + hologram = H.activate_holo(user) + hologram.HC = src + + //eyeobj code is horrid, this is the best copypasta I could make + eye = new + eye.origin = H + eye.eye_initialized = TRUE + eye.eye_user = user + eye.name = "Camera Eye ([user.name])" + user.remote_control = eye + user.reset_perspective(eye) + eye.setLoc(H.loc) + +//Checks the validity of a holocall and qdels itself if it's not. Returns TRUE if valid, FALSE otherwise +/datum/holocall/proc/Check() + for(var/I in dialed_holopads) + var/obj/machinery/holopad/H = I + if(!H.is_operational()) + ConnectionFailure(H) + + if(QDELETED(src)) + return FALSE + + . = !QDELETED(user) && !user.incapacitated() && !QDELETED(calling_holopad) && calling_holopad.is_operational() && user.loc == calling_holopad.loc + + if(.) + if(connected_holopad) + . = !QDELETED(connected_holopad) && connected_holopad.is_operational() + else + . = world.time < (call_start_time + HOLOPAD_MAX_DIAL_TIME) + if(!.) + calling_holopad.say("No answer recieved.") + calling_holopad.temp = "" + + if(!.) + testing("Holocall Check fail") + qdel(src) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 421cecc95b..c223d3b315 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1,118 +1,130 @@ -/* Note from Carnie: - The way datum/mind stuff works has been changed a lot. - Minds now represent IC characters rather than following a client around constantly. - - Guidelines for using minds properly: - - - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living! - ghost.mind is however used as a reference to the ghost's corpse - - - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human) - the existing mind of the old mob should be transfered to the new mob like so: - - mind.transfer_to(new_mob) - - - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you. - By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing - the player. - - - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you. - - - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting - a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done. - - new_mob.key = key - - The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple! - However if you want that mind to have any special properties like being a traitor etc you will have to do that - yourself. - -*/ - -/datum/mind - var/key - var/name //replaces mob/var/original_name - var/mob/living/current - var/active = 0 - - var/memory - - var/assigned_role - var/special_role - var/list/restricted_roles = list() - - var/datum/job/assigned_job - - var/list/datum/objective/objectives = list() - var/list/datum/objective/special_verbs = list() - - var/list/cult_words = list() - var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. - - var/datum/faction/faction //associated faction - var/datum/changeling/changeling //changeling holder - var/linglink - - var/miming = 0 // Mime's vow of silence +/* Note from Carnie: + The way datum/mind stuff works has been changed a lot. + Minds now represent IC characters rather than following a client around constantly. + + Guidelines for using minds properly: + + - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living! + ghost.mind is however used as a reference to the ghost's corpse + + - When creating a new mob for an existing IC character (e.g. cloning a dead guy or borging a brain of a human) + the existing mind of the old mob should be transfered to the new mob like so: + + mind.transfer_to(new_mob) + + - You must not assign key= or ckey= after transfer_to() since the transfer_to transfers the client for you. + By setting key or ckey explicitly after transfering the mind with transfer_to you will cause bugs like DCing + the player. + + - IMPORTANT NOTE 2, if you want a player to become a ghost, use mob.ghostize() It does all the hard work for you. + + - When creating a new mob which will be a new IC character (e.g. putting a shade in a construct or randomly selecting + a ghost to become a xeno during an event). Simply assign the key or ckey like you've always done. + + new_mob.key = key + + The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple! + However if you want that mind to have any special properties like being a traitor etc you will have to do that + yourself. + +*/ + +/datum/mind + var/key + var/name //replaces mob/var/original_name + var/mob/living/current + var/active = 0 + + var/memory + + var/assigned_role + var/special_role + var/list/restricted_roles = list() + + var/datum/job/assigned_job + + var/list/datum/objective/objectives = list() + + var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. + + var/datum/faction/faction //associated faction + var/datum/changeling/changeling //changeling holder + var/linglink + + var/miming = 0 // Mime's vow of silence var/list/antag_datums - var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state - var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD - var/datum/gang/gang_datum //Which gang this mind belongs to, if any - var/datum/devilinfo/devilinfo //Information about the devil, if any. - var/damnation_type = 0 - var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src - var/isholy = FALSE //is this person a chaplain or admin role allowed to use bibles - - var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems) - -/datum/mind/New(var/key) - src.key = key - soulOwner = src - -/datum/mind/Destroy() - SSticker.minds -= src + var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state + var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD + var/datum/gang/gang_datum //Which gang this mind belongs to, if any + var/damnation_type = 0 + var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src + var/hasSoul = TRUE // If false, renders the character unable to sell their soul. + var/isholy = FALSE //is this person a chaplain or admin role allowed to use bibles + + var/mob/living/enslaved_to //If this mind's master is another mob (i.e. adamantine golems) + var/datum/language_holder/language_holder + +/datum/mind/New(var/key) + src.key = key + soulOwner = src + +/datum/mind/Destroy() + SSticker.minds -= src if(islist(antag_datums)) for(var/i in antag_datums) - qdel(i) + var/datum/antagonist/antag_datum = i + if(antag_datum.delete_on_death) + qdel(i) antag_datums = null - return ..() - -/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) - if(current) // remove ourself from our old body's mind variable - current.mind = null - SStgui.on_transfer(current, new_character) - - if(key) - if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours - new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless. - else - key = new_character.key - - if(new_character.mind) //disassociate any mind currently in our new body's mind variable - new_character.mind.current = null - - var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list + return ..() + +/datum/mind/proc/get_language_holder() + if(!language_holder) + var/datum/language_holder/L = current.get_language_holder(shadow=FALSE) + language_holder = L.copy(src) + + return language_holder + +/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0) + if(current) // remove ourself from our old body's mind variable + current.mind = null + SStgui.on_transfer(current, new_character) + + if(!language_holder) + var/datum/language_holder/mob_holder = new_character.get_language_holder(shadow = FALSE) + language_holder = mob_holder.copy(src) + + if(key) + if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours + new_character.ghostize(1) //we'll need to ghostize so that key isn't mobless. + else + key = new_character.key + + if(new_character.mind) //disassociate any mind currently in our new body's mind variable + new_character.mind.current = null + + var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list var/mob/living/old_current = current - current = new_character //associate ourself with our new body - new_character.mind = src //and associate our new body with ourself + current = new_character //associate ourself with our new body + new_character.mind = src //and associate our new body with ourself for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body var/datum/antagonist/A = a A.on_body_transfer(old_current, current) - if(iscarbon(new_character)) - var/mob/living/carbon/C = new_character - C.last_mind = src - transfer_antag_huds(hud_to_transfer) //inherit the antag HUD - transfer_actions(new_character) - - if(active || force_key_move) - new_character.key = key //now transfer the key to link the client to our new body - -/datum/mind/proc/store_memory(new_text) - memory += "[new_text]
" - -/datum/mind/proc/wipe_memory() - memory = null - + if(iscarbon(new_character)) + var/mob/living/carbon/C = new_character + C.last_mind = src + transfer_antag_huds(hud_to_transfer) //inherit the antag HUD + transfer_actions(new_character) + + if(active || force_key_move) + new_character.key = key //now transfer the key to link the client to our new body + +/datum/mind/proc/store_memory(new_text) + memory += "[new_text]
" + +/datum/mind/proc/wipe_memory() + memory = null + // Datum antag mind procs /datum/mind/proc/add_antag_datum(datum_type) if(!datum_type) @@ -149,1490 +161,1458 @@ else if(A.type == datum_type) return A -/* - Removes antag type's references from a mind. - objectives, uplinks, powers etc are all handled. -*/ - -/datum/mind/proc/remove_objectives() - if(objectives.len) - for(var/datum/objective/O in objectives) - objectives -= O - qdel(O) - -/datum/mind/proc/remove_changeling() - if(src in SSticker.mode.changelings) - SSticker.mode.changelings -= src - current.remove_changeling_powers() - if(changeling) - qdel(changeling) - changeling = null - special_role = null - remove_antag_equip() - SSticker.mode.update_changeling_icons_removed(src) - -/datum/mind/proc/remove_traitor() - if(src in SSticker.mode.traitors) - SSticker.mode.traitors -= src - if(isAI(current)) - var/mob/living/silicon/ai/A = current - A.set_zeroth_law("") - A.verbs -= /mob/living/silicon/ai/proc/choose_modules - A.malf_picker.remove_verbs(A) - qdel(A.malf_picker) - special_role = null - remove_antag_equip() - SSticker.mode.update_traitor_icons_removed(src) - -/datum/mind/proc/remove_nukeop() - if(src in SSticker.mode.syndicates) - SSticker.mode.syndicates -= src - SSticker.mode.update_synd_icons_removed(src) - special_role = null - remove_objectives() - remove_antag_equip() - -/datum/mind/proc/remove_wizard() - if(src in SSticker.mode.wizards) - SSticker.mode.wizards -= src - current.spellremove(current) - special_role = null - remove_antag_equip() - -/datum/mind/proc/remove_cultist() - if(src in SSticker.mode.cult) - SSticker.mode.remove_cultist(src, 0, 0) - special_role = null - remove_objectives() - remove_antag_equip() - -/datum/mind/proc/remove_rev() - if(src in SSticker.mode.revolutionaries) - SSticker.mode.revolutionaries -= src - SSticker.mode.update_rev_icons_removed(src) - if(src in SSticker.mode.head_revolutionaries) - SSticker.mode.head_revolutionaries -= src - SSticker.mode.update_rev_icons_removed(src) - special_role = null - remove_objectives() - remove_antag_equip() - - -/datum/mind/proc/remove_gang() - SSticker.mode.remove_gangster(src,0,1,1) - remove_objectives() - -/datum/mind/proc/remove_antag_equip() - var/list/Mob_Contents = current.get_contents() - for(var/obj/item/I in Mob_Contents) - if(istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/P = I - P.lock_code = "" - - else if(istype(I, /obj/item/device/radio)) - var/obj/item/device/radio/R = I - R.traitor_frequency = 0 - -/datum/mind/proc/remove_all_antag() //For the Lazy amongst us. - remove_changeling() - remove_traitor() - remove_nukeop() - remove_wizard() - remove_cultist() - remove_rev() - remove_gang() - SSticker.mode.update_changeling_icons_removed(src) - SSticker.mode.update_traitor_icons_removed(src) - SSticker.mode.update_wiz_icons_removed(src) - SSticker.mode.update_cult_icons_removed(src) - SSticker.mode.update_rev_icons_removed(src) - if(gang_datum) - gang_datum.remove_gang_hud(src) - - -//Link a new mobs mind to the creator of said mob. They will join any team they are currently on, and will only switch teams when their creator does. - -/datum/mind/proc/enslave_mind_to_creator(mob/living/creator) - if(iscultist(creator)) - SSticker.mode.add_cultist(src) - - else if(is_gangster(creator)) - SSticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE) - - else if(is_revolutionary_in_general(creator)) - SSticker.mode.add_revolutionary(src) - - else if(is_servant_of_ratvar(creator)) - add_servant_of_ratvar(current) - - else if(is_nuclear_operative(creator)) - make_Nuke(null, null, 0, FALSE) - - enslaved_to = creator - - current.faction |= creator.faction - creator.faction |= current.faction - - if(creator.mind.special_role) - message_admins("[key_name_admin(current)](?) has been created by [key_name_admin(creator)](?), an antagonist.") - to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalities change, so do yours. This will never change unless your creator's body is destroyed.") - -/datum/mind/proc/show_memory(mob/recipient, window=1) - if(!recipient) - recipient = current - var/output = "[current.real_name]'s Memories:
" - output += memory - - if(objectives.len) - output += "Objectives:" - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - output += "
Objective #[obj_count++]: [objective.explanation_text]" - - if(window) - recipient << browse(output,"window=memory") - else if(objectives.len || memory) - to_chat(recipient, "[output]") - -/datum/mind/proc/edit_memory() +/* + Removes antag type's references from a mind. + objectives, uplinks, powers etc are all handled. +*/ + +/datum/mind/proc/remove_objectives() + if(objectives.len) + for(var/datum/objective/O in objectives) + objectives -= O + qdel(O) + +/datum/mind/proc/remove_changeling() + if(src in SSticker.mode.changelings) + SSticker.mode.changelings -= src + current.remove_changeling_powers() + if(changeling) + qdel(changeling) + changeling = null + special_role = null + remove_antag_equip() + SSticker.mode.update_changeling_icons_removed(src) + +/datum/mind/proc/remove_traitor() + if(src in SSticker.mode.traitors) + SSticker.mode.traitors -= src + if(isAI(current)) + var/mob/living/silicon/ai/A = current + A.set_zeroth_law("") + A.verbs -= /mob/living/silicon/ai/proc/choose_modules + A.malf_picker.remove_verbs(A) + qdel(A.malf_picker) + special_role = null + remove_antag_equip() + SSticker.mode.update_traitor_icons_removed(src) + +/datum/mind/proc/remove_nukeop() + if(src in SSticker.mode.syndicates) + SSticker.mode.syndicates -= src + SSticker.mode.update_synd_icons_removed(src) + special_role = null + remove_objectives() + remove_antag_equip() + +/datum/mind/proc/remove_wizard() + if(src in SSticker.mode.wizards) + SSticker.mode.wizards -= src + current.spellremove(current) + special_role = null + remove_antag_equip() + +/datum/mind/proc/remove_cultist() + if(src in SSticker.mode.cult) + SSticker.mode.remove_cultist(src, 0, 0) + special_role = null + remove_objectives() + remove_antag_equip() + +/datum/mind/proc/remove_rev() + if(src in SSticker.mode.revolutionaries) + SSticker.mode.revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) + if(src in SSticker.mode.head_revolutionaries) + SSticker.mode.head_revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) + special_role = null + remove_objectives() + remove_antag_equip() + + +/datum/mind/proc/remove_gang() + SSticker.mode.remove_gangster(src,0,1,1) + remove_objectives() + +/datum/mind/proc/remove_antag_equip() + var/list/Mob_Contents = current.get_contents() + for(var/obj/item/I in Mob_Contents) + if(istype(I, /obj/item/device/pda)) + var/obj/item/device/pda/P = I + P.lock_code = "" + + else if(istype(I, /obj/item/device/radio)) + var/obj/item/device/radio/R = I + R.traitor_frequency = 0 + +/datum/mind/proc/remove_all_antag() //For the Lazy amongst us. + remove_changeling() + remove_traitor() + remove_nukeop() + remove_wizard() + remove_cultist() + remove_rev() + remove_gang() + SSticker.mode.update_changeling_icons_removed(src) + SSticker.mode.update_traitor_icons_removed(src) + SSticker.mode.update_wiz_icons_removed(src) + SSticker.mode.update_cult_icons_removed(src) + SSticker.mode.update_rev_icons_removed(src) + if(gang_datum) + gang_datum.remove_gang_hud(src) + + +//Link a new mobs mind to the creator of said mob. They will join any team they are currently on, and will only switch teams when their creator does. + +/datum/mind/proc/enslave_mind_to_creator(mob/living/creator) + if(iscultist(creator)) + SSticker.mode.add_cultist(src) + + else if(is_gangster(creator)) + SSticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE) + + else if(is_revolutionary_in_general(creator)) + SSticker.mode.add_revolutionary(src) + + else if(is_servant_of_ratvar(creator)) + add_servant_of_ratvar(current) + + else if(is_nuclear_operative(creator)) + make_Nuke(null, null, 0, FALSE) + + enslaved_to = creator + + current.faction |= creator.faction + creator.faction |= current.faction + + if(creator.mind.special_role) + message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.") + to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalities change, so do yours. This will never change unless your creator's body is destroyed.") + +/datum/mind/proc/show_memory(mob/recipient, window=1) + if(!recipient) + recipient = current + var/output = "[current.real_name]'s Memories:
" + output += memory + + if(objectives.len) + output += "Objectives:" + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + output += "
Objective #[obj_count++]: [objective.explanation_text]" + + if(window) + recipient << browse(output,"window=memory") + else if(objectives.len || memory) + to_chat(recipient, "[output]") + +/datum/mind/proc/edit_memory() if(!SSticker.HasRoundStarted()) - alert("Not before round-start!", "Alert") - return - - var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" - out += "Assigned role: [assigned_role]. Edit
" - out += "Faction and special role: [special_role]
" - - var/list/sections = list( - "revolution", - "gang", - "cult", - "wizard", - "changeling", - "nuclear", - "traitor", // "traitorchan", - "monkey", - "clockcult" - ) - var/text = "" - - if(ishuman(current)) - /** REVOLUTION ***/ - text = "revolution" - if (SSticker.mode.config_tag=="revolution") - text = uppertext(text) - text = "[text]: " - if (assigned_role in GLOB.command_positions) - text += "HEAD|loyal|employee|headrev|rev" - else if (src in SSticker.mode.head_revolutionaries) - text += "head|loyal|employee|HEADREV|rev" - text += "
Flash: give" - - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - if (flash) - if(!flash.crit_fail) - text += "|take." - else - text += "|take|repair." - else - text += "." - - text += " Reequip (gives traitor uplink)." - if (objectives.len==0) - text += "
Objectives are empty! Set to kill all heads." - else if(current.isloyal()) - text += "head|LOYAL|employee|headrev|rev" - else if (src in SSticker.mode.revolutionaries) - text += "head|loyal|employee|headrev|REV" - else - text += "head|loyal|EMPLOYEE|headrev|rev" - - if(current && current.client && (ROLE_REV in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["revolution"] = text - - /** GANG ***/ - text = "gang" - if (SSticker.mode.config_tag=="gang") - text = uppertext(text) - text = "[text]: " - text += "[current.isloyal() ? "LOYAL" : "loyal"]|" - if(src in SSticker.mode.get_all_gangsters()) - text += "none" - else - text += "NONE" - - if(current && current.client && (ROLE_GANG in current.client.prefs.be_special)) - text += "|Enabled in Prefs
" - else - text += "|Disabled in Prefs
" - - for(var/datum/gang/G in SSticker.mode.gangs) - text += "[G.name]: " - if(src in (G.gangsters)) - text += "GANGSTER" - else - text += "gangster" - text += "|" - if(src in (G.bosses)) - text += "GANG LEADER" - text += "|Equipment: give" - var/list/L = current.get_contents() - var/obj/item/device/gangtool/gangtool = locate() in L - if (gangtool) - text += "|take" - - else - text += "gang leader" - text += "
" - - if(GLOB.gang_colors_pool.len) - text += "Create New Gang" - - sections["gang"] = text - - /** Abductors **/ - text = "Abductor" - if(SSticker.mode.config_tag == "abductor") - text = uppertext(text) - text = "[text]: " - if(src in SSticker.mode.abductors) - text += "Abductor|human" - text += "|undress|equip" - else - text += "Abductor|human" - - if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["abductor"] = text - - /** NUCLEAR ***/ - text = "nuclear" - if (SSticker.mode.config_tag=="nuclear") - text = uppertext(text) - text = "[text]: " - if (src in SSticker.mode.syndicates) - text += "OPERATIVE|nanotrasen" - text += "
To shuttle, undress, dress up." - var/code - for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) - if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") - code = bombue.r_code - break - if (code) - text += " Code is [code]. tell the code." - else - text += "operative|NANOTRASEN" - - if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["nuclear"] = text - - /** WIZARD ***/ - text = "wizard" - if (SSticker.mode.config_tag=="wizard") - text = uppertext(text) - text = "[text]: " - if ((src in SSticker.mode.wizards) || (src in SSticker.mode.apprentices)) - text += "YES|no" - text += "
To lair, undress, dress up, let choose name." - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - else - text += "yes|NO" - - if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["wizard"] = text - - /** CULT ***/ - text = "cult" - if (SSticker.mode.config_tag=="cult") - text = uppertext(text) - text = "[text]: " - if(iscultist(current)) - text += "loyal|employee|CULTIST" - text += "
Give tome|amulet." - - else if(current.isloyal()) - text += "LOYAL|employee|cultist" - else if(is_convertable_to_cult(current)) - text += "loyal|EMPLOYEE|cultist" - else - text += "loyal|EMPLOYEE|cannot serve Nar-Sie" - - if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["cult"] = text - - /** CLOCKWORK CULT **/ - text = "clockwork cult" - if(SSticker.mode.config_tag == "clockwork cult") - text = uppertext(text) - text = "[text]: " - if(is_servant_of_ratvar(current)) - text += "loyal|employee|SERVANT" - text += "
Give slab" - else if(current.isloyal()) - text += "LOYAL|employee|servant" - else if(is_eligible_servant(current)) - text += "loyal|EMPLOYEE|servant" - else - text += "loyal|EMPLOYEE|cannot serve Ratvar" - - if(current && current.client && (ROLE_SERVANT_OF_RATVAR in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["clockcult"] = text - - /** TRAITOR ***/ - text = "traitor" - if (SSticker.mode.config_tag=="traitor" || SSticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if (src in SSticker.mode.traitors) - text += "TRAITOR|loyal" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - else - text += "traitor|LOYAL" - - if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["traitor"] = text - - if(ishuman(current) || ismonkey(current)) - - /** CHANGELING ***/ - text = "changeling" - if (SSticker.mode.config_tag=="changeling" || SSticker.mode.config_tag=="traitorchan") - text = uppertext(text) - text = "[text]: " - if ((src in SSticker.mode.changelings) && special_role) - text += "YES|no" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) - text += "
Transform to initial appearance." - else if(src in SSticker.mode.changelings) //Station Aligned Changeling - text += "YES (but not an antag)|no" - if (objectives.len==0) - text += "
Objectives are empty! Randomize!" - if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) - text += "
Transform to initial appearance." - else - text += "yes|NO" - - if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["changeling"] = text - - /** MONKEY ***/ - text = "monkey" - if (SSticker.mode.config_tag=="monkey") - text = uppertext(text) - text = "[text]: " - if (ishuman(current)) - text += "healthy|infected|HUMAN|other" - else if (ismonkey(current)) - var/found = 0 - for(var/datum/disease/D in current.viruses) - if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 - - if(found) - text += "healthy|INFECTED|human|other" - else - text += "HEALTHY|infected|human|other" - - else - text += "healthy|infected|human|OTHER" - - if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - - sections["monkey"] = text - - /** devil ***/ - text = "devil" - if(SSticker.mode.config_tag == "devil") - text = uppertext(text) - text = "[text]: " - if(src in SSticker.mode.devils) - if(devilinfo && !devilinfo.ascendable) - text += "DEVIL|Ascendable Devil|sintouched|human" - else - text += "DEVIL|ASCENDABLE DEVIL|sintouched|human" - else if(src in SSticker.mode.sintouched) - text += "devil|Ascendable Devil|SINTOUCHED|human" - else - text += "devil|Ascendable Devil|sintouched|HUMAN" - - if(current && current.client && (ROLE_DEVIL in current.client.prefs.be_special)) - text += "|Enabled in Prefs" - else - text += "|Disabled in Prefs" - sections["devil"] = text - - - /** SILICON ***/ - - if(issilicon(current)) - text = "silicon" - var/mob/living/silicon/robot/robot = current - if (istype(robot) && robot.emagged) - text += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth]" - var/mob/living/silicon/ai/ai = current - if (istype(ai) && ai.connected_robots.len) - var/n_e_robots = 0 - for (var/mob/living/silicon/robot/R in ai.connected_robots) - if (R.emagged) - n_e_robots++ - text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" - if (SSticker.mode.config_tag == "traitorchan") - if (sections["traitor"]) - out += sections["traitor"]+"
" - if (sections["changeling"]) - out += sections["changeling"]+"

" - sections -= "traitor" - sections -= "changeling" - else - if (sections[SSticker.mode.config_tag]) - out += sections[SSticker.mode.config_tag]+"

" - sections -= SSticker.mode.config_tag - for (var/i in sections) - if (sections[i]) - out += sections[i]+"
" - - - if(((src in SSticker.mode.head_revolutionaries) || (src in SSticker.mode.traitors) || (src in SSticker.mode.syndicates)) && ishuman(current)) - - text = "Uplink: give" - var/obj/item/device/uplink/U = find_syndicate_uplink() - if(U) - text += "|take" - if (check_rights(R_FUN, 0)) - text += ", [U.telecrystals] TC" - else - text += ", [U.telecrystals] TC" - text += "." //hiel grammar - out += text - - out += "

" - - out += "Memory:
" - out += memory - out += "
Edit memory
" - out += "Objectives:
" - if (objectives.len == 0) - out += "EMPTY
" - else - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
" - obj_count++ - out += "Add objective

" - - out += "Announce objectives

" - - usr << browse(out, "window=edit_memory[src];size=500x600") - - -/datum/mind/Topic(href, href_list) - if(!check_rights(R_ADMIN)) - return - - if (href_list["role_edit"]) - var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() - if (!new_role) - return - assigned_role = new_role - - else if (href_list["memory_edit"]) - var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) - if (isnull(new_memo)) - return - memory = new_memo - - else if (href_list["obj_edit"] || href_list["obj_add"]) - var/datum/objective/objective - var/objective_pos - var/def_value - - if (href_list["obj_edit"]) - objective = locate(href_list["obj_edit"]) - if (!objective) - return - objective_pos = objectives.Find(objective) - - //Text strings are easy to manipulate. Revised for simplicity. - var/temp_obj_type = "[objective.type]"//Convert path into a text string. - def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. - if(!def_value)//If it's a custom objective, it will be an empty string. - def_value = "custom" - - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom") - if (!new_obj_type) - return - - var/datum/objective/new_objective = null - - switch (new_obj_type) - if ("assassinate","protect","debrain","maroon") - var/list/possible_targets = list("Free objective") - for(var/datum/mind/possible_target in SSticker.minds) - if ((possible_target != src) && ishuman(possible_target.current)) - possible_targets += possible_target.current - - var/mob/def_target = null - var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon) - if (objective&&(objective.type in objective_list) && objective:target) - def_target = objective:target.current - - var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets - if (!new_target) - return - - var/objective_path = text2path("/datum/objective/[new_obj_type]") - if (new_target == "Free objective") - new_objective = new objective_path - new_objective.owner = src - new_objective:target = null - new_objective.explanation_text = "Free objective" - else - new_objective = new objective_path - new_objective.owner = src - new_objective:target = new_target:mind - //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. - new_objective.update_explanation_text() - - if ("destroy") - var/list/possible_targets = active_ais(1) - if(possible_targets.len) - var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets - new_objective = new /datum/objective/destroy - new_objective.target = new_target.mind - new_objective.owner = src - new_objective.update_explanation_text() - else - to_chat(usr, "No active AIs with minds") - - if ("prevent") - new_objective = new /datum/objective/block - new_objective.owner = src - - if ("hijack") - new_objective = new /datum/objective/hijack - new_objective.owner = src - - if ("escape") - new_objective = new /datum/objective/escape - new_objective.owner = src - - if ("survive") - new_objective = new /datum/objective/survive - new_objective.owner = src - - if("martyr") - new_objective = new /datum/objective/martyr - new_objective.owner = src - - if ("nuclear") - new_objective = new /datum/objective/nuclear - new_objective.owner = src - - if ("steal") - if (!istype(objective, /datum/objective/steal)) - new_objective = new /datum/objective/steal - new_objective.owner = src - else - new_objective = objective - var/datum/objective/steal/steal = new_objective - if (!steal.select_target()) - return - - if("download","capture","absorb") - var/def_num - if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) - def_num = objective.target_amount - - var/target_number = input("Input target number:", "Objective", def_num) as num|null - if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. - return - - switch(new_obj_type) - if("download") - new_objective = new /datum/objective/download - new_objective.explanation_text = "Download [target_number] research levels." - if("capture") - new_objective = new /datum/objective/capture - new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more." - if("absorb") - new_objective = new /datum/objective/absorb - new_objective.explanation_text = "Absorb [target_number] compatible genomes." - new_objective.owner = src - new_objective.target_amount = target_number - - if ("custom") - var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "") - if (!expl) - return - new_objective = new /datum/objective - new_objective.owner = src - new_objective.explanation_text = expl - - if (!new_objective) - return - - if (objective) - objectives -= objective - objectives.Insert(objective_pos, new_objective) - message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") - log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") - else - objectives += new_objective - message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") - log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") - - else if (href_list["obj_delete"]) - var/datum/objective/objective = locate(href_list["obj_delete"]) - if(!istype(objective)) - return - objectives -= objective - message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]") - log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]") - - else if(href_list["obj_completed"]) - var/datum/objective/objective = locate(href_list["obj_completed"]) - if(!istype(objective)) - return - objective.completed = !objective.completed - log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") - - else if (href_list["revolution"]) - switch(href_list["revolution"]) - if("clear") - remove_rev() - to_chat(current, "You have been brainwashed! You are no longer a revolutionary!") - message_admins("[key_name_admin(usr)] has de-rev'ed [current].") - log_admin("[key_name(usr)] has de-rev'ed [current].") - if("rev") - if(src in SSticker.mode.head_revolutionaries) - SSticker.mode.head_revolutionaries -= src - SSticker.mode.update_rev_icons_removed(src) - to_chat(current, "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!") - else if(!(src in SSticker.mode.revolutionaries)) - to_chat(current, " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") - else - return - SSticker.mode.revolutionaries += src - SSticker.mode.update_rev_icons_added(src) - special_role = "Revolutionary" - message_admins("[key_name_admin(usr)] has rev'ed [current].") - log_admin("[key_name(usr)] has rev'ed [current].") - - if("headrev") - if(src in SSticker.mode.revolutionaries) - SSticker.mode.revolutionaries -= src - SSticker.mode.update_rev_icons_removed(src) - to_chat(current, "You have proved your devotion to revoltion! Yea are a head revolutionary now!") - else if(!(src in SSticker.mode.head_revolutionaries)) - to_chat(current, "You are a member of the revolutionaries' leadership now!") - else - return - if (SSticker.mode.head_revolutionaries.len>0) - // copy targets - var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries - if (valid_head) - for (var/datum/objective/mutiny/O in valid_head.objectives) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = src - rev_obj.target = O.target - rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." - objectives += rev_obj - SSticker.mode.greet_revolutionary(src,0) - SSticker.mode.head_revolutionaries += src - SSticker.mode.update_rev_icons_added(src) - special_role = "Head Revolutionary" - message_admins("[key_name_admin(usr)] has head-rev'ed [current].") - log_admin("[key_name(usr)] has head-rev'ed [current].") - - if("autoobjectives") - SSticker.mode.forge_revolutionary_objectives(src) - SSticker.mode.greet_revolutionary(src,0) - to_chat(usr, "The objectives for revolution have been generated and shown to [key]") - - if("flash") - if (!SSticker.mode.equip_revolutionary(current)) - to_chat(usr, "Spawning flash failed!") - - if("takeflash") - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - if (!flash) - to_chat(usr, "Deleting flash failed!") - qdel(flash) - - if("repairflash") - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - if (!flash) - to_chat(usr, "Repairing flash failed!") - else - flash.crit_fail = 0 - flash.update_icon() - - - -//////////////////// GANG MODE - - else if (href_list["gang"]) - switch(href_list["gang"]) - if("clear") - remove_gang() - message_admins("[key_name_admin(usr)] has de-gang'ed [current].") - log_admin("[key_name(usr)] has de-gang'ed [current].") - - if("equip") - switch(SSticker.mode.equip_gang(current,gang_datum)) - if(1) - to_chat(usr, "Unable to equip territory spraycan!") - if(2) - to_chat(usr, "Unable to equip recruitment pen and spraycan!") - if(3) - to_chat(usr, "Unable to equip gangtool, pen, and spraycan!") - - if("takeequip") - var/list/L = current.get_contents() - for(var/obj/item/weapon/pen/gang/pen in L) - qdel(pen) - for(var/obj/item/device/gangtool/gangtool in L) - qdel(gangtool) - for(var/obj/item/toy/crayon/spraycan/gang/SC in L) - qdel(SC) - - if("new") - if(GLOB.gang_colors_pool.len) - var/list/names = list("Random") + GLOB.gang_name_pool - var/gangname = input("Pick a gang name.","Select Name") as null|anything in names - if(gangname && GLOB.gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time - if(!(gangname in GLOB.gang_name_pool)) - gangname = null - var/datum/gang/newgang = new(null,gangname) - SSticker.mode.gangs += newgang - message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.") - log_admin("[key_name(usr)] has created the [newgang.name] Gang.") - - else if (href_list["gangboss"]) - var/datum/gang/G = locate(href_list["gangboss"]) in SSticker.mode.gangs - if(!G || (src in G.bosses)) - return - SSticker.mode.remove_gangster(src,0,2,1) - G.bosses += src - gang_datum = G - special_role = "[G.name] Gang Boss" - G.add_gang_hud(src) - to_chat(current, "You are a [G.name] Gang Boss!") - message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.") - log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.") - SSticker.mode.forge_gang_objectives(src) - SSticker.mode.greet_gang(src,0) - - else if (href_list["gangster"]) - var/datum/gang/G = locate(href_list["gangster"]) in SSticker.mode.gangs - if(!G || (src in G.gangsters)) - return - SSticker.mode.remove_gangster(src,0,2,1) - SSticker.mode.add_gangster(src,G,0) - message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).") - log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).") - -///////////////////////////////// - - - - else if (href_list["cult"]) - switch(href_list["cult"]) - if("clear") - remove_cultist() - message_admins("[key_name_admin(usr)] has de-cult'ed [current].") - log_admin("[key_name(usr)] has de-cult'ed [current].") - if("cultist") - if(!(src in SSticker.mode.cult)) - SSticker.mode.add_cultist(src, 0) - message_admins("[key_name_admin(usr)] has cult'ed [current].") - log_admin("[key_name(usr)] has cult'ed [current].") - if("tome") - if (!SSticker.mode.equip_cultist(current,1)) - to_chat(usr, "Spawning tome failed!") - - if("amulet") - if (!SSticker.mode.equip_cultist(current)) - to_chat(usr, "Spawning amulet failed!") - - else if(href_list["clockcult"]) - switch(href_list["clockcult"]) - if("clear") - remove_servant_of_ratvar(current, TRUE) - message_admins("[key_name_admin(usr)] has removed clockwork servant status from [current].") - log_admin("[key_name(usr)] has removed clockwork servant status from [current].") - if("servant") - if(!is_servant_of_ratvar(current)) - add_servant_of_ratvar(current, TRUE) - message_admins("[key_name_admin(usr)] has made [current] into a servant of Ratvar.") - log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.") - if("slab") - if(!SSticker.mode.equip_servant(current)) - to_chat(usr, "Failed to outfit [current] with a slab!") - else - to_chat(usr, "Successfully gave [current] a clockwork slab!") - - else if (href_list["wizard"]) - switch(href_list["wizard"]) - if("clear") - remove_wizard() - to_chat(current, "You have been brainwashed! You are no longer a wizard!") - log_admin("[key_name(usr)] has de-wizard'ed [current].") - SSticker.mode.update_wiz_icons_removed(src) - if("wizard") - if(!(src in SSticker.mode.wizards)) - SSticker.mode.wizards += src - special_role = "Wizard" - //SSticker.mode.learn_basic_spells(current) - to_chat(current, "You are the Space Wizard!") - message_admins("[key_name_admin(usr)] has wizard'ed [current].") - log_admin("[key_name(usr)] has wizard'ed [current].") - SSticker.mode.update_wiz_icons_added(src) - if("lair") - current.loc = pick(GLOB.wizardstart) - if("dressup") - SSticker.mode.equip_wizard(current) - if("name") - SSticker.mode.name_wizard(current) - if("autoobjectives") - SSticker.mode.forge_wizard_objectives(src) - to_chat(usr, "The objectives for wizard [key] have been generated. You can edit them and anounce manually.") - - else if (href_list["changeling"]) - switch(href_list["changeling"]) - if("clear") - remove_changeling() - to_chat(current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!") - message_admins("[key_name_admin(usr)] has de-changeling'ed [current].") - log_admin("[key_name(usr)] has de-changeling'ed [current].") - if("changeling") - if(!(src in SSticker.mode.changelings)) - SSticker.mode.changelings += src - current.make_changeling() - special_role = "Changeling" - to_chat(current, "Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!") - message_admins("[key_name_admin(usr)] has changeling'ed [current].") - log_admin("[key_name(usr)] has changeling'ed [current].") - SSticker.mode.update_changeling_icons_added(src) - if("autoobjectives") - SSticker.mode.forge_changeling_objectives(src) - to_chat(usr, "The objectives for changeling [key] have been generated. You can edit them and anounce manually.") - - if("initialdna") - if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon)) - to_chat(usr, "Resetting DNA failed!") - else - var/mob/living/carbon/C = current - changeling.first_prof.dna.transfer_identity(C, transfer_SE=1) - C.real_name = changeling.first_prof.name - C.updateappearance(mutcolor_update=1) - C.domutcheck() - - else if (href_list["nuclear"]) - switch(href_list["nuclear"]) - if("clear") - remove_nukeop() - to_chat(current, "You have been brainwashed! You are no longer a syndicate operative!") - message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].") - log_admin("[key_name(usr)] has de-nuke op'ed [current].") - if("nuclear") - if(!(src in SSticker.mode.syndicates)) - SSticker.mode.syndicates += src - SSticker.mode.update_synd_icons_added(src) - if (SSticker.mode.syndicates.len==1) - SSticker.mode.prepare_syndicate_leader(src) - else - current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" - special_role = "Syndicate" - assigned_role = "Syndicate" - to_chat(current, "You are a [syndicate_name()] agent!") - SSticker.mode.forge_syndicate_objectives(src) - SSticker.mode.greet_syndicate(src) - message_admins("[key_name_admin(usr)] has nuke op'ed [current].") - log_admin("[key_name(usr)] has nuke op'ed [current].") - if("lair") - current.loc = get_turf(locate("landmark*Syndicate-Spawn")) - if("dressup") - var/mob/living/carbon/human/H = current - qdel(H.belt) - qdel(H.back) - qdel(H.ears) - qdel(H.gloves) - qdel(H.head) - qdel(H.shoes) - qdel(H.wear_id) - qdel(H.wear_suit) - qdel(H.w_uniform) - - if (!SSticker.mode.equip_syndicate(current)) - to_chat(usr, "Equipping a syndicate failed!") - if("tellcode") - var/code - for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) - if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") - code = bombue.r_code - break - if (code) - store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0) - to_chat(current, "The nuclear authorization code is: [code]") - else - to_chat(usr, "No valid nuke found!") - - else if (href_list["traitor"]) - switch(href_list["traitor"]) - if("clear") - remove_traitor() - to_chat(current, "You have been brainwashed! You are no longer a traitor!") - message_admins("[key_name_admin(usr)] has de-traitor'ed [current].") - log_admin("[key_name(usr)] has de-traitor'ed [current].") - SSticker.mode.update_traitor_icons_removed(src) - - if("traitor") - if(!(src in SSticker.mode.traitors)) - SSticker.mode.traitors += src - special_role = "traitor" - to_chat(current, "You are a traitor!") - message_admins("[key_name_admin(usr)] has traitor'ed [current].") - log_admin("[key_name(usr)] has traitor'ed [current].") - if(isAI(current)) - var/mob/living/silicon/ai/A = current - SSticker.mode.add_law_zero(A) - SSticker.mode.update_traitor_icons_added(src) - - if("autoobjectives") - SSticker.mode.forge_traitor_objectives(src) - to_chat(usr, "The objectives for traitor [key] have been generated. You can edit them and anounce manually.") - - else if(href_list["devil"]) - switch(href_list["devil"]) - if("clear") - if(src in SSticker.mode.devils) - if(istype(current,/mob/living/carbon/true_devil/)) - if(devilinfo) - devilinfo.regress_blood_lizard() - else - to_chat(usr, "Something went wrong with removing the devil, we were unable to find an attached devilinfo..") - SSticker.mode.devils -= src - special_role = null - to_chat(current, "Your infernal link has been severed! You are no longer a devil!") - RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt) - RemoveSpell(/obj/effect/proc_holder/spell/aimed/fireball/hellish) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_contract) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/violin) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_dancefloor) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch/ascended) - message_admins("[key_name_admin(usr)] has de-devil'ed [current].") - devilinfo = null - if(issilicon(current)) - var/mob/living/silicon/S = current - S.clear_law_sixsixsix(current) - log_admin("[key_name(usr)] has de-devil'ed [current].") - else if(src in SSticker.mode.sintouched) - SSticker.mode.sintouched -= src - message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") - log_admin("[key_name(usr)] has de-sintouch'ed [current].") - if("devil") - if(devilinfo) - devilinfo.ascendable = FALSE - message_admins("[key_name_admin(usr)] has made [current] unable to ascend as a devil.") - log_admin("[key_name_admin(usr)] has made [current] unable to ascend as a devil.") - return - if(!ishuman(current) && !iscyborg(current)) + alert("Not before round-start!", "Alert") + return + + var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" + out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" + out += "Assigned role: [assigned_role]. Edit
" + out += "Faction and special role: [special_role]
" + + var/list/sections = list( + "revolution", + "gang", + "cult", + "wizard", + "changeling", + "nuclear", + "traitor", // "traitorchan", + "monkey", + "clockcult", + "devil" + ) + var/text = "" + + if(ishuman(current)) + /** REVOLUTION ***/ + text = "revolution" + if (SSticker.mode.config_tag=="revolution") + text = uppertext(text) + text = "[text]: " + if (assigned_role in GLOB.command_positions) + text += "HEAD|loyal|employee|headrev|rev" + else if (src in SSticker.mode.head_revolutionaries) + text += "head|loyal|employee|HEADREV|rev" + text += "
Flash: give" + + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (flash) + if(!flash.crit_fail) + text += "|take." + else + text += "|take|repair." + else + text += "." + + text += " Reequip (gives traitor uplink)." + if (objectives.len==0) + text += "
Objectives are empty! Set to kill all heads." + else if(current.isloyal()) + text += "head|LOYAL|employee|headrev|rev" + else if (src in SSticker.mode.revolutionaries) + text += "head|loyal|employee|headrev|REV" + else + text += "head|loyal|EMPLOYEE|headrev|rev" + + if(current && current.client && (ROLE_REV in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["revolution"] = text + + /** GANG ***/ + text = "gang" + if (SSticker.mode.config_tag=="gang") + text = uppertext(text) + text = "[text]: " + text += "[current.isloyal() ? "LOYAL" : "loyal"]|" + if(src in SSticker.mode.get_all_gangsters()) + text += "none" + else + text += "NONE" + + if(current && current.client && (ROLE_GANG in current.client.prefs.be_special)) + text += "|Enabled in Prefs
" + else + text += "|Disabled in Prefs
" + + for(var/datum/gang/G in SSticker.mode.gangs) + text += "[G.name]: " + if(src in (G.gangsters)) + text += "GANGSTER" + else + text += "gangster" + text += "|" + if(src in (G.bosses)) + text += "GANG LEADER" + text += "|Equipment: give" + var/list/L = current.get_contents() + var/obj/item/device/gangtool/gangtool = locate() in L + if (gangtool) + text += "|take" + + else + text += "gang leader" + text += "
" + + if(GLOB.gang_colors_pool.len) + text += "Create New Gang" + + sections["gang"] = text + + /** Abductors **/ + text = "Abductor" + if(SSticker.mode.config_tag == "abductor") + text = uppertext(text) + text = "[text]: " + if(src in SSticker.mode.abductors) + text += "Abductor|human" + text += "|undress|equip" + else + text += "Abductor|human" + + if(current && current.client && (ROLE_ABDUCTOR in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["abductor"] = text + + /** NUCLEAR ***/ + text = "nuclear" + if (SSticker.mode.config_tag=="nuclear") + text = uppertext(text) + text = "[text]: " + if (src in SSticker.mode.syndicates) + text += "OPERATIVE|nanotrasen" + text += "
To shuttle, undress, dress up." + var/code + for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) + if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") + code = bombue.r_code + break + if (code) + text += " Code is [code]. tell the code." + else + text += "operative|NANOTRASEN" + + if(current && current.client && (ROLE_OPERATIVE in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["nuclear"] = text + + /** WIZARD ***/ + text = "wizard" + if (SSticker.mode.config_tag=="wizard") + text = uppertext(text) + text = "[text]: " + if ((src in SSticker.mode.wizards) || (src in SSticker.mode.apprentices)) + text += "YES|no" + text += "
To lair, undress, dress up, let choose name." + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + else + text += "yes|NO" + + if(current && current.client && (ROLE_WIZARD in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["wizard"] = text + + /** CULT ***/ + text = "cult" + if (SSticker.mode.config_tag=="cult") + text = uppertext(text) + text = "[text]: " + if(iscultist(current)) + text += "loyal|employee|CULTIST" + text += "
Give tome|amulet." + + else if(current.isloyal()) + text += "LOYAL|employee|cultist" + else if(is_convertable_to_cult(current)) + text += "loyal|EMPLOYEE|cultist" + else + text += "loyal|EMPLOYEE|cannot serve Nar-Sie" + + if(current && current.client && (ROLE_CULTIST in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["cult"] = text + + /** CLOCKWORK CULT **/ + text = "clockwork cult" + if(SSticker.mode.config_tag == "clockwork cult") + text = uppertext(text) + text = "[text]: " + if(is_servant_of_ratvar(current)) + text += "loyal|employee|SERVANT" + text += "
Give slab" + else if(current.isloyal()) + text += "LOYAL|employee|servant" + else if(is_eligible_servant(current)) + text += "loyal|EMPLOYEE|servant" + else + text += "loyal|EMPLOYEE|cannot serve Ratvar" + + if(current && current.client && (ROLE_SERVANT_OF_RATVAR in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["clockcult"] = text + + /** TRAITOR ***/ + text = "traitor" + if (SSticker.mode.config_tag=="traitor" || SSticker.mode.config_tag=="traitorchan") + text = uppertext(text) + text = "[text]: " + if (src in SSticker.mode.traitors) + text += "TRAITOR|loyal" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + else + text += "traitor|LOYAL" + + if(current && current.client && (ROLE_TRAITOR in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["traitor"] = text + + if(ishuman(current) || ismonkey(current)) + + /** CHANGELING ***/ + text = "changeling" + if (SSticker.mode.config_tag=="changeling" || SSticker.mode.config_tag=="traitorchan") + text = uppertext(text) + text = "[text]: " + if ((src in SSticker.mode.changelings) && special_role) + text += "YES|no" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) + text += "
Transform to initial appearance." + else if(src in SSticker.mode.changelings) //Station Aligned Changeling + text += "YES (but not an antag)|no" + if (objectives.len==0) + text += "
Objectives are empty! Randomize!" + if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) ) + text += "
Transform to initial appearance." + else + text += "yes|NO" + + if(current && current.client && (ROLE_CHANGELING in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["changeling"] = text + + /** MONKEY ***/ + text = "monkey" + if (SSticker.mode.config_tag=="monkey") + text = uppertext(text) + text = "[text]: " + if (ishuman(current)) + text += "healthy|infected|HUMAN|other" + else if (ismonkey(current)) + var/found = 0 + for(var/datum/disease/D in current.viruses) + if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 + + if(found) + text += "healthy|INFECTED|human|other" + else + text += "HEALTHY|infected|human|other" + + else + text += "healthy|infected|human|OTHER" + + if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["monkey"] = text + + /** devil ***/ + text = "devil" + if(SSticker.mode.config_tag == "devil") + text = uppertext(text) + text = "[text]: " + var/datum/antagonist/devil/devilinfo = has_antag_datum(ANTAG_DATUM_DEVIL) + if(devilinfo) + if(!devilinfo.ascendable) + text += "DEVIL|Ascendable Devil|sintouched|human" + else + text += "DEVIL|ASCENDABLE DEVIL|sintouched|human" + else if(src in SSticker.mode.sintouched) + text += "devil|Ascendable Devil|SINTOUCHED|human" + else + text += "devil|Ascendable Devil|sintouched|HUMAN" + + if(current && current.client && (ROLE_DEVIL in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + sections["devil"] = text + + + /** SILICON ***/ + + if(issilicon(current)) + text = "silicon" + var/mob/living/silicon/robot/robot = current + if (istype(robot) && robot.emagged) + text += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth]" + var/mob/living/silicon/ai/ai = current + if (istype(ai) && ai.connected_robots.len) + var/n_e_robots = 0 + for (var/mob/living/silicon/robot/R in ai.connected_robots) + if (R.emagged) + n_e_robots++ + text += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" + if (SSticker.mode.config_tag == "traitorchan") + if (sections["traitor"]) + out += sections["traitor"]+"
" + if (sections["changeling"]) + out += sections["changeling"]+"

" + sections -= "traitor" + sections -= "changeling" + else + if (sections[SSticker.mode.config_tag]) + out += sections[SSticker.mode.config_tag]+"

" + sections -= SSticker.mode.config_tag + for (var/i in sections) + if (sections[i]) + out += sections[i]+"
" + + + if(((src in SSticker.mode.head_revolutionaries) || (src in SSticker.mode.traitors) || (src in SSticker.mode.syndicates)) && ishuman(current)) + + text = "Uplink: give" + var/obj/item/device/uplink/U = find_syndicate_uplink() + if(U) + text += "|take" + if (check_rights(R_FUN, 0)) + text += ", [U.telecrystals] TC" + else + text += ", [U.telecrystals] TC" + text += "." //hiel grammar + out += text + + out += "

" + + out += "Memory:
" + out += memory + out += "
Edit memory
" + out += "Objectives:
" + if (objectives.len == 0) + out += "EMPTY
" + else + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + out += "[obj_count]: [objective.explanation_text] Edit Delete Toggle Completion
" + obj_count++ + out += "Add objective

" + + out += "Announce objectives

" + + usr << browse(out, "window=edit_memory[src];size=500x600") + + +/datum/mind/Topic(href, href_list) + if(!check_rights(R_ADMIN)) + return + + if (href_list["role_edit"]) + var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() + if (!new_role) + return + assigned_role = new_role + + else if (href_list["memory_edit"]) + var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) + if (isnull(new_memo)) + return + memory = new_memo + + else if (href_list["obj_edit"] || href_list["obj_add"]) + var/datum/objective/objective + var/objective_pos + var/def_value + + if (href_list["obj_edit"]) + objective = locate(href_list["obj_edit"]) + if (!objective) + return + objective_pos = objectives.Find(objective) + + //Text strings are easy to manipulate. Revised for simplicity. + var/temp_obj_type = "[objective.type]"//Convert path into a text string. + def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. + if(!def_value)//If it's a custom objective, it will be an empty string. + def_value = "custom" + + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom") + if (!new_obj_type) + return + + var/datum/objective/new_objective = null + + switch (new_obj_type) + if ("assassinate","protect","debrain","maroon") + var/list/possible_targets = list("Free objective") + for(var/datum/mind/possible_target in SSticker.minds) + if ((possible_target != src) && ishuman(possible_target.current)) + possible_targets += possible_target.current + + var/mob/def_target = null + var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon) + if (objective&&(objective.type in objective_list) && objective:target) + def_target = objective:target.current + + var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets + if (!new_target) + return + + var/objective_path = text2path("/datum/objective/[new_obj_type]") + if (new_target == "Free objective") + new_objective = new objective_path + new_objective.owner = src + new_objective:target = null + new_objective.explanation_text = "Free objective" + else + new_objective = new objective_path + new_objective.owner = src + new_objective:target = new_target:mind + //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. + new_objective.update_explanation_text() + + if ("destroy") + var/list/possible_targets = active_ais(1) + if(possible_targets.len) + var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets + new_objective = new /datum/objective/destroy + new_objective.target = new_target.mind + new_objective.owner = src + new_objective.update_explanation_text() + else + to_chat(usr, "No active AIs with minds") + + if ("prevent") + new_objective = new /datum/objective/block + new_objective.owner = src + + if ("hijack") + new_objective = new /datum/objective/hijack + new_objective.owner = src + + if ("escape") + new_objective = new /datum/objective/escape + new_objective.owner = src + + if ("survive") + new_objective = new /datum/objective/survive + new_objective.owner = src + + if("martyr") + new_objective = new /datum/objective/martyr + new_objective.owner = src + + if ("nuclear") + new_objective = new /datum/objective/nuclear + new_objective.owner = src + + if ("steal") + if (!istype(objective, /datum/objective/steal)) + new_objective = new /datum/objective/steal + new_objective.owner = src + else + new_objective = objective + var/datum/objective/steal/steal = new_objective + if (!steal.select_target()) + return + + if("download","capture","absorb") + var/def_num + if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) + def_num = objective.target_amount + + var/target_number = input("Input target number:", "Objective", def_num) as num|null + if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. + return + + switch(new_obj_type) + if("download") + new_objective = new /datum/objective/download + new_objective.explanation_text = "Download [target_number] research levels." + if("capture") + new_objective = new /datum/objective/capture + new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more." + if("absorb") + new_objective = new /datum/objective/absorb + new_objective.explanation_text = "Absorb [target_number] compatible genomes." + new_objective.owner = src + new_objective.target_amount = target_number + + if ("custom") + var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "") + if (!expl) + return + new_objective = new /datum/objective + new_objective.owner = src + new_objective.explanation_text = expl + + if (!new_objective) + return + + if (objective) + objectives -= objective + objectives.Insert(objective_pos, new_objective) + message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") + log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") + else + objectives += new_objective + message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") + log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") + + else if (href_list["obj_delete"]) + var/datum/objective/objective = locate(href_list["obj_delete"]) + if(!istype(objective)) + return + objectives -= objective + message_admins("[key_name_admin(usr)] removed an objective for [current]: [objective.explanation_text]") + log_admin("[key_name(usr)] removed an objective for [current]: [objective.explanation_text]") + + else if(href_list["obj_completed"]) + var/datum/objective/objective = locate(href_list["obj_completed"]) + if(!istype(objective)) + return + objective.completed = !objective.completed + log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") + + else if (href_list["revolution"]) + switch(href_list["revolution"]) + if("clear") + remove_rev() + to_chat(current, "You have been brainwashed! You are no longer a revolutionary!") + message_admins("[key_name_admin(usr)] has de-rev'ed [current].") + log_admin("[key_name(usr)] has de-rev'ed [current].") + if("rev") + if(src in SSticker.mode.head_revolutionaries) + SSticker.mode.head_revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) + to_chat(current, "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!") + else if(!(src in SSticker.mode.revolutionaries)) + to_chat(current, " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") + else + return + SSticker.mode.revolutionaries += src + SSticker.mode.update_rev_icons_added(src) + special_role = "Revolutionary" + message_admins("[key_name_admin(usr)] has rev'ed [current].") + log_admin("[key_name(usr)] has rev'ed [current].") + + if("headrev") + if(src in SSticker.mode.revolutionaries) + SSticker.mode.revolutionaries -= src + SSticker.mode.update_rev_icons_removed(src) + to_chat(current, "You have proved your devotion to revoltion! Yea are a head revolutionary now!") + else if(!(src in SSticker.mode.head_revolutionaries)) + to_chat(current, "You are a member of the revolutionaries' leadership now!") + else + return + if (SSticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/mutiny/O in valid_head.objectives) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." + objectives += rev_obj + SSticker.mode.greet_revolutionary(src,0) + SSticker.mode.head_revolutionaries += src + SSticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + message_admins("[key_name_admin(usr)] has head-rev'ed [current].") + log_admin("[key_name(usr)] has head-rev'ed [current].") + + if("autoobjectives") + SSticker.mode.forge_revolutionary_objectives(src) + SSticker.mode.greet_revolutionary(src,0) + to_chat(usr, "The objectives for revolution have been generated and shown to [key]") + + if("flash") + if (!SSticker.mode.equip_revolutionary(current)) + to_chat(usr, "Spawning flash failed!") + + if("takeflash") + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (!flash) + to_chat(usr, "Deleting flash failed!") + qdel(flash) + + if("repairflash") + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + if (!flash) + to_chat(usr, "Repairing flash failed!") + else + flash.crit_fail = 0 + flash.update_icon() + + + +//////////////////// GANG MODE + + else if (href_list["gang"]) + switch(href_list["gang"]) + if("clear") + remove_gang() + message_admins("[key_name_admin(usr)] has de-gang'ed [current].") + log_admin("[key_name(usr)] has de-gang'ed [current].") + + if("equip") + switch(SSticker.mode.equip_gang(current,gang_datum)) + if(1) + to_chat(usr, "Unable to equip territory spraycan!") + if(2) + to_chat(usr, "Unable to equip recruitment pen and spraycan!") + if(3) + to_chat(usr, "Unable to equip gangtool, pen, and spraycan!") + + if("takeequip") + var/list/L = current.get_contents() + for(var/obj/item/weapon/pen/gang/pen in L) + qdel(pen) + for(var/obj/item/device/gangtool/gangtool in L) + qdel(gangtool) + for(var/obj/item/toy/crayon/spraycan/gang/SC in L) + qdel(SC) + + if("new") + if(GLOB.gang_colors_pool.len) + var/list/names = list("Random") + GLOB.gang_name_pool + var/gangname = input("Pick a gang name.","Select Name") as null|anything in names + if(gangname && GLOB.gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time + if(!(gangname in GLOB.gang_name_pool)) + gangname = null + var/datum/gang/newgang = new(null,gangname) + SSticker.mode.gangs += newgang + message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.") + log_admin("[key_name(usr)] has created the [newgang.name] Gang.") + + else if (href_list["gangboss"]) + var/datum/gang/G = locate(href_list["gangboss"]) in SSticker.mode.gangs + if(!G || (src in G.bosses)) + return + SSticker.mode.remove_gangster(src,0,2,1) + G.bosses += src + gang_datum = G + special_role = "[G.name] Gang Boss" + G.add_gang_hud(src) + to_chat(current, "You are a [G.name] Gang Boss!") + message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.") + log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.") + SSticker.mode.forge_gang_objectives(src) + SSticker.mode.greet_gang(src,0) + + else if (href_list["gangster"]) + var/datum/gang/G = locate(href_list["gangster"]) in SSticker.mode.gangs + if(!G || (src in G.gangsters)) + return + SSticker.mode.remove_gangster(src,0,2,1) + SSticker.mode.add_gangster(src,G,0) + message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).") + log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).") + +///////////////////////////////// + + + + else if (href_list["cult"]) + switch(href_list["cult"]) + if("clear") + remove_cultist() + message_admins("[key_name_admin(usr)] has de-cult'ed [current].") + log_admin("[key_name(usr)] has de-cult'ed [current].") + if("cultist") + if(!(src in SSticker.mode.cult)) + SSticker.mode.add_cultist(src, 0) + message_admins("[key_name_admin(usr)] has cult'ed [current].") + log_admin("[key_name(usr)] has cult'ed [current].") + if("tome") + if (!SSticker.mode.equip_cultist(current,1)) + to_chat(usr, "Spawning tome failed!") + + if("amulet") + if (!SSticker.mode.equip_cultist(current)) + to_chat(usr, "Spawning amulet failed!") + + else if(href_list["clockcult"]) + switch(href_list["clockcult"]) + if("clear") + remove_servant_of_ratvar(current, TRUE) + message_admins("[key_name_admin(usr)] has removed clockwork servant status from [current].") + log_admin("[key_name(usr)] has removed clockwork servant status from [current].") + if("servant") + if(!is_servant_of_ratvar(current)) + add_servant_of_ratvar(current, TRUE) + message_admins("[key_name_admin(usr)] has made [current] into a servant of Ratvar.") + log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.") + if("slab") + if(!SSticker.mode.equip_servant(current)) + to_chat(usr, "Failed to outfit [current] with a slab!") + else + to_chat(usr, "Successfully gave [current] a clockwork slab!") + + else if (href_list["wizard"]) + switch(href_list["wizard"]) + if("clear") + remove_wizard() + to_chat(current, "You have been brainwashed! You are no longer a wizard!") + log_admin("[key_name(usr)] has de-wizard'ed [current].") + SSticker.mode.update_wiz_icons_removed(src) + if("wizard") + if(!(src in SSticker.mode.wizards)) + SSticker.mode.wizards += src + special_role = "Wizard" + //SSticker.mode.learn_basic_spells(current) + to_chat(current, "You are the Space Wizard!") + message_admins("[key_name_admin(usr)] has wizard'ed [current].") + log_admin("[key_name(usr)] has wizard'ed [current].") + SSticker.mode.update_wiz_icons_added(src) + if("lair") + current.loc = pick(GLOB.wizardstart) + if("dressup") + SSticker.mode.equip_wizard(current) + if("name") + SSticker.mode.name_wizard(current) + if("autoobjectives") + SSticker.mode.forge_wizard_objectives(src) + to_chat(usr, "The objectives for wizard [key] have been generated. You can edit them and anounce manually.") + + else if (href_list["changeling"]) + switch(href_list["changeling"]) + if("clear") + remove_changeling() + to_chat(current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!") + message_admins("[key_name_admin(usr)] has de-changeling'ed [current].") + log_admin("[key_name(usr)] has de-changeling'ed [current].") + if("changeling") + if(!(src in SSticker.mode.changelings)) + SSticker.mode.changelings += src + current.make_changeling() + special_role = "Changeling" + to_chat(current, "Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!") + message_admins("[key_name_admin(usr)] has changeling'ed [current].") + log_admin("[key_name(usr)] has changeling'ed [current].") + SSticker.mode.update_changeling_icons_added(src) + if("autoobjectives") + SSticker.mode.forge_changeling_objectives(src) + to_chat(usr, "The objectives for changeling [key] have been generated. You can edit them and anounce manually.") + + if("initialdna") + if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon)) + to_chat(usr, "Resetting DNA failed!") + else + var/mob/living/carbon/C = current + changeling.first_prof.dna.transfer_identity(C, transfer_SE=1) + C.real_name = changeling.first_prof.name + C.updateappearance(mutcolor_update=1) + C.domutcheck() + + else if (href_list["nuclear"]) + switch(href_list["nuclear"]) + if("clear") + remove_nukeop() + to_chat(current, "You have been brainwashed! You are no longer a syndicate operative!") + message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].") + log_admin("[key_name(usr)] has de-nuke op'ed [current].") + if("nuclear") + if(!(src in SSticker.mode.syndicates)) + SSticker.mode.syndicates += src + SSticker.mode.update_synd_icons_added(src) + if (SSticker.mode.syndicates.len==1) + SSticker.mode.prepare_syndicate_leader(src) + else + current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" + special_role = "Syndicate" + assigned_role = "Syndicate" + to_chat(current, "You are a [syndicate_name()] agent!") + SSticker.mode.forge_syndicate_objectives(src) + SSticker.mode.greet_syndicate(src) + message_admins("[key_name_admin(usr)] has nuke op'ed [current].") + log_admin("[key_name(usr)] has nuke op'ed [current].") + if("lair") + current.loc = get_turf(locate("landmark*Syndicate-Spawn")) + if("dressup") + var/mob/living/carbon/human/H = current + qdel(H.belt) + qdel(H.back) + qdel(H.ears) + qdel(H.gloves) + qdel(H.head) + qdel(H.shoes) + qdel(H.wear_id) + qdel(H.wear_suit) + qdel(H.w_uniform) + + if (!SSticker.mode.equip_syndicate(current)) + to_chat(usr, "Equipping a syndicate failed!") + if("tellcode") + var/code + for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines) + if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN") + code = bombue.r_code + break + if (code) + store_memory("Syndicate Nuclear Bomb Code: [code]", 0, 0) + to_chat(current, "The nuclear authorization code is: [code]") + else + to_chat(usr, "No valid nuke found!") + + else if (href_list["traitor"]) + switch(href_list["traitor"]) + if("clear") + remove_traitor() + to_chat(current, "You have been brainwashed! You are no longer a traitor!") + message_admins("[key_name_admin(usr)] has de-traitor'ed [current].") + log_admin("[key_name(usr)] has de-traitor'ed [current].") + SSticker.mode.update_traitor_icons_removed(src) + + if("traitor") + if(!(src in SSticker.mode.traitors)) + SSticker.mode.traitors += src + special_role = "traitor" + to_chat(current, "You are a traitor!") + message_admins("[key_name_admin(usr)] has traitor'ed [current].") + log_admin("[key_name(usr)] has traitor'ed [current].") + if(isAI(current)) + var/mob/living/silicon/ai/A = current + SSticker.mode.add_law_zero(A) + SSticker.mode.update_traitor_icons_added(src) + + if("autoobjectives") + SSticker.mode.forge_traitor_objectives(src) + to_chat(usr, "The objectives for traitor [key] have been generated. You can edit them and anounce manually.") + + else if(href_list["devil"]) + var/datum/antagonist/devil/devilinfo = has_antag_datum(ANTAG_DATUM_DEVIL) + switch(href_list["devil"]) + if("clear") + if(src in SSticker.mode.devils) + remove_devil(current) + message_admins("[key_name_admin(usr)] has de-devil'ed [current].") + log_admin("[key_name(usr)] has de-devil'ed [current].") + if(src in SSticker.mode.sintouched) + SSticker.mode.sintouched -= src + message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") + log_admin("[key_name(usr)] has de-sintouch'ed [current].") + if("devil") + if(devilinfo) + devilinfo.ascendable = FALSE + message_admins("[key_name_admin(usr)] has made [current] unable to ascend as a devil.") + log_admin("[key_name_admin(usr)] has made [current] unable to ascend as a devil.") + return + if(!ishuman(current) && !iscyborg(current)) to_chat(usr, "This only works on humans and cyborgs!") - return - SSticker.mode.devils += src - special_role = "devil" - SSticker.mode.finalize_devil(src, FALSE) - SSticker.mode.add_devil_objectives(src, 2) - announceDevilLaws() - announce_objectives() - message_admins("[key_name_admin(usr)] has devil'ed [current].") - log_admin("[key_name(usr)] has devil'ed [current].") - if("ascendable_devil") - if(devilinfo) - devilinfo.ascendable = TRUE - message_admins("[key_name_admin(usr)] has made [current] able to ascend as a devil.") - log_admin("[key_name_admin(usr)] has made [current] able to ascend as a devil.") - return - if(!ishuman(current) && !iscyborg(current)) - to_chat(usr, "This only works on humans and cyborgs!") - return - SSticker.mode.devils += src - special_role = "devil" - SSticker.mode.finalize_devil(src, TRUE) - SSticker.mode.add_devil_objectives(src, 2) - announceDevilLaws() - announce_objectives() - message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.") - log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.") - if("sintouched") - if(ishuman(current)) - var/mob/living/carbon/human/H = current - H.influenceSin() - message_admins("[key_name_admin(usr)] has sintouch'ed [current].") - else - to_chat(usr, "This only works on humans!") - return - - else if(href_list["abductor"]) - switch(href_list["abductor"]) - if("clear") - to_chat(usr, "Not implemented yet. Sorry!") - //SSticker.mode.update_abductor_icons_removed(src) - if("abductor") - if(!ishuman(current)) - to_chat(usr, "This only works on humans!") - return - make_Abductor() - log_admin("[key_name(usr)] turned [current] into abductor.") - SSticker.mode.update_abductor_icons_added(src) - if("equip") + return + add_devil(current, FALSE) + message_admins("[key_name_admin(usr)] has devil'ed [current].") + log_admin("[key_name(usr)] has devil'ed [current].") + if("ascendable_devil") + if(devilinfo) + devilinfo.ascendable = TRUE + message_admins("[key_name_admin(usr)] has made [current] able to ascend as a devil.") + log_admin("[key_name_admin(usr)] has made [current] able to ascend as a devil.") + return + if(!ishuman(current) && !iscyborg(current)) + to_chat(usr, "This only works on humans and cyborgs!") + return + add_devil(current, TRUE) + message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.") + log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.") + if("sintouched") + if(ishuman(current)) + var/mob/living/carbon/human/H = current + H.influenceSin() + message_admins("[key_name_admin(usr)] has sintouch'ed [current].") + else + to_chat(usr, "This only works on humans!") + return + + else if(href_list["abductor"]) + switch(href_list["abductor"]) + if("clear") + to_chat(usr, "Not implemented yet. Sorry!") + //SSticker.mode.update_abductor_icons_removed(src) + if("abductor") + if(!ishuman(current)) + to_chat(usr, "This only works on humans!") + return + make_Abductor() + log_admin("[key_name(usr)] turned [current] into abductor.") + SSticker.mode.update_abductor_icons_added(src) + if("equip") if(!ishuman(current)) to_chat(usr, "This only works on humans!") return var/mob/living/carbon/human/H = current - var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") - if(gear) - if(gear=="Agent") + var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist") + if(gear) + if(gear=="Agent") H.equipOutfit(/datum/outfit/abductor/agent) - else + else H.equipOutfit(/datum/outfit/abductor/scientist) - - else if (href_list["monkey"]) - var/mob/living/L = current - if (L.notransform) - return - switch(href_list["monkey"]) - if("healthy") - if (check_rights(R_ADMIN)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") - message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - //to_chat(world, "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!") - else if (istype(M) && length(M.viruses)) - for(var/datum/disease/D in M.viruses) - D.cure(0) - sleep(0) //because deleting of virus is done through spawn(0) - if("infected") - if (check_rights(R_ADMIN, 0)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") - message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) - else if (istype(M)) - current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) - if("human") - if (check_rights(R_ADMIN, 0)) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(M)) - for(var/datum/disease/D in M.viruses) - if (istype(D,/datum/disease/transformation/jungle_fever)) - D.cure(0) - sleep(0) //because deleting of virus is doing throught spawn(0) - log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") - message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") - H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) - if(H) - src = H.mind - - else if (href_list["silicon"]) - switch(href_list["silicon"]) - if("unemag") - var/mob/living/silicon/robot/R = current - if (istype(R)) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [R].") - log_admin("[key_name(usr)] has unemag'ed [R].") - - if("unemagcyborgs") - if(isAI(current)) - var/mob/living/silicon/ai/ai = current - for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.SetEmagged(0) - message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") - - else if (href_list["common"]) - switch(href_list["common"]) - if("undress") - for(var/obj/item/W in current) - current.dropItemToGround(W, TRUE) //The 1 forces all items to drop, since this is an admin undress. - if("takeuplink") - take_uplink() - memory = null//Remove any memory they may have had. - log_admin("[key_name(usr)] removed [current]'s uplink.") - if("crystals") - if(check_rights(R_FUN, 0)) - var/obj/item/device/uplink/U = find_syndicate_uplink() - if(U) - var/crystals = input("Amount of telecrystals for [key]","Syndicate uplink", U.telecrystals) as null|num - if(!isnull(crystals)) - U.telecrystals = crystals - message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") - log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") - if("uplink") - if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors))) - to_chat(usr, "Equipping a syndicate failed!") - log_admin("[key_name(usr)] attempted to give [current] an uplink.") - - else if (href_list["obj_announce"]) - announce_objectives() - - edit_memory() - -/datum/mind/proc/announce_objectives() - var/obj_count = 1 - to_chat(current, "Your current objectives:") - for(var/objective in objectives) - var/datum/objective/O = objective - to_chat(current, "Objective #[obj_count]: [O.explanation_text]") - obj_count++ - -/datum/mind/proc/find_syndicate_uplink() - var/list/L = current.get_contents() - for (var/obj/item/I in L) - if (I.hidden_uplink) - return I.hidden_uplink - return null - -/datum/mind/proc/take_uplink() - var/obj/item/device/uplink/H = find_syndicate_uplink() - if(H) - qdel(H) - -/datum/mind/proc/make_Traitor() - if(!(src in SSticker.mode.traitors)) - SSticker.mode.traitors += src - special_role = "traitor" - SSticker.mode.forge_traitor_objectives(src) - SSticker.mode.finalize_traitor(src) - SSticker.mode.greet_traitor(src) - -/datum/mind/proc/make_Nuke(turf/spawnloc, nuke_code, leader=0, telecrystals = TRUE) - if(!(src in SSticker.mode.syndicates)) - SSticker.mode.syndicates += src - SSticker.mode.update_synd_icons_added(src) - special_role = "Syndicate" - SSticker.mode.forge_syndicate_objectives(src) - SSticker.mode.greet_syndicate(src) - current.faction |= "syndicate" - - if(spawnloc) - current.loc = spawnloc - - if(ishuman(current)) - var/mob/living/carbon/human/H = current - qdel(H.belt) - qdel(H.back) - qdel(H.ears) - qdel(H.gloves) - qdel(H.head) - qdel(H.shoes) - qdel(H.wear_id) - qdel(H.wear_suit) - qdel(H.w_uniform) - - SSticker.mode.equip_syndicate(current, telecrystals) - - if (nuke_code) - store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0) - to_chat(current, "The nuclear authorization code is: [nuke_code]") - else - var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list - if(nuke) - store_memory("Syndicate Nuclear Bomb Code: [nuke.r_code]", 0, 0) - to_chat(current, "The nuclear authorization code is: nuke.r_code") - else - to_chat(current, "You were not provided with a nuclear code. Trying asking your team leader or contacting syndicate command.") - - if (leader) - SSticker.mode.prepare_syndicate_leader(src,nuke_code) - else - current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" - -/datum/mind/proc/make_Changling() - if(!(src in SSticker.mode.changelings)) - SSticker.mode.changelings += src - current.make_changeling() - special_role = "Changeling" - SSticker.mode.forge_changeling_objectives(src) - SSticker.mode.greet_changeling(src) - SSticker.mode.update_changeling_icons_added(src) - -/datum/mind/proc/make_Wizard() - if(!(src in SSticker.mode.wizards)) - SSticker.mode.wizards += src - special_role = "Wizard" - assigned_role = "Wizard" - if(!GLOB.wizardstart.len) - current.loc = pick(GLOB.latejoin) - to_chat(current, "HOT INSERTION, GO GO GO") - else - current.loc = pick(GLOB.wizardstart) - - SSticker.mode.equip_wizard(current) - SSticker.mode.name_wizard(current) - SSticker.mode.forge_wizard_objectives(src) - SSticker.mode.greet_wizard(src) - - -/datum/mind/proc/make_Cultist() - if(!(src in SSticker.mode.cult)) - SSticker.mode.add_cultist(src,FALSE) - special_role = "Cultist" - to_chat(current, "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.") - to_chat(current, "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.") - var/datum/game_mode/cult/cult = SSticker.mode - - if (istype(cult)) - cult.memorize_cult_objectives(src) - else - var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it." - to_chat(current, "Objective #1: [explanation]") - memory += "Objective #1: [explanation]
" - - var/mob/living/carbon/human/H = current - if (!SSticker.mode.equip_cultist(current)) - to_chat(H, "Spawning an amulet from your Master failed.") - -/datum/mind/proc/make_Rev() - if (SSticker.mode.head_revolutionaries.len>0) - // copy targets - var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries - if (valid_head) - for (var/datum/objective/mutiny/O in valid_head.objectives) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = src - rev_obj.target = O.target - rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." - objectives += rev_obj - SSticker.mode.greet_revolutionary(src,0) - SSticker.mode.head_revolutionaries += src - SSticker.mode.update_rev_icons_added(src) - special_role = "Head Revolutionary" - - SSticker.mode.forge_revolutionary_objectives(src) - SSticker.mode.greet_revolutionary(src,0) - - var/list/L = current.get_contents() - var/obj/item/device/assembly/flash/flash = locate() in L - qdel(flash) - take_uplink() - var/fail = 0 -// fail |= !SSticker.mode.equip_traitor(current, 1) - fail |= !SSticker.mode.equip_revolutionary(current) - - -/datum/mind/proc/make_Gang(datum/gang/G) - special_role = "[G.name] Gang Boss" - G.bosses += src - gang_datum = G - G.add_gang_hud(src) - SSticker.mode.forge_gang_objectives(src) - SSticker.mode.greet_gang(src) - SSticker.mode.equip_gang(current,G) - -/datum/mind/proc/make_Abductor() - var/role = alert("Abductor Role ?","Role","Agent","Scientist") - var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4) - var/teleport = alert("Teleport to ship ?","Teleport","Yes","No") - - if(!role || !team || !teleport) - return - - if(!ishuman(current)) - return - - SSticker.mode.abductors |= src - - var/datum/objective/experiment/O = new - O.owner = src - objectives += O - - var/mob/living/carbon/human/H = current - - H.set_species(/datum/species/abductor) - var/datum/species/abductor/S = H.dna.species - + + else if (href_list["monkey"]) + var/mob/living/L = current + if (L.notransform) + return + switch(href_list["monkey"]) + if("healthy") + if (check_rights(R_ADMIN)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") + message_admins("[key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") + src = null + M = H.monkeyize() + src = M.mind + //to_chat(world, "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!") + else if (istype(M) && length(M.viruses)) + for(var/datum/disease/D in M.viruses) + D.cure(0) + sleep(0) //because deleting of virus is done through spawn(0) + if("infected") + if (check_rights(R_ADMIN, 0)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(H)) + log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") + message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]") + src = null + M = H.monkeyize() + src = M.mind + current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) + else if (istype(M)) + current.ForceContractDisease(new /datum/disease/transformation/jungle_fever) + if("human") + if (check_rights(R_ADMIN, 0)) + var/mob/living/carbon/human/H = current + var/mob/living/carbon/monkey/M = current + if (istype(M)) + for(var/datum/disease/D in M.viruses) + if (istype(D,/datum/disease/transformation/jungle_fever)) + D.cure(0) + sleep(0) //because deleting of virus is doing throught spawn(0) + log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") + message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") + H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + if(H) + src = H.mind + + else if (href_list["silicon"]) + switch(href_list["silicon"]) + if("unemag") + var/mob/living/silicon/robot/R = current + if (istype(R)) + R.SetEmagged(0) + message_admins("[key_name_admin(usr)] has unemag'ed [R].") + log_admin("[key_name(usr)] has unemag'ed [R].") + + if("unemagcyborgs") + if(isAI(current)) + var/mob/living/silicon/ai/ai = current + for (var/mob/living/silicon/robot/R in ai.connected_robots) + R.SetEmagged(0) + message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") + log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") + + else if (href_list["common"]) + switch(href_list["common"]) + if("undress") + for(var/obj/item/W in current) + current.dropItemToGround(W, TRUE) //The 1 forces all items to drop, since this is an admin undress. + if("takeuplink") + take_uplink() + memory = null//Remove any memory they may have had. + log_admin("[key_name(usr)] removed [current]'s uplink.") + if("crystals") + if(check_rights(R_FUN, 0)) + var/obj/item/device/uplink/U = find_syndicate_uplink() + if(U) + var/crystals = input("Amount of telecrystals for [key]","Syndicate uplink", U.telecrystals) as null|num + if(!isnull(crystals)) + U.telecrystals = crystals + message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") + log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") + if("uplink") + if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors))) + to_chat(usr, "Equipping a syndicate failed!") + log_admin("[key_name(usr)] attempted to give [current] an uplink.") + + else if (href_list["obj_announce"]) + announce_objectives() + + edit_memory() + +/datum/mind/proc/announce_objectives() + var/obj_count = 1 + to_chat(current, "Your current objectives:") + for(var/objective in objectives) + var/datum/objective/O = objective + to_chat(current, "Objective #[obj_count]: [O.explanation_text]") + obj_count++ + +/datum/mind/proc/find_syndicate_uplink() + var/list/L = current.get_contents() + for (var/obj/item/I in L) + if (I.hidden_uplink) + return I.hidden_uplink + return null + +/datum/mind/proc/take_uplink() + var/obj/item/device/uplink/H = find_syndicate_uplink() + if(H) + qdel(H) + +/datum/mind/proc/make_Traitor() + if(!(src in SSticker.mode.traitors)) + SSticker.mode.traitors += src + special_role = "traitor" + SSticker.mode.forge_traitor_objectives(src) + SSticker.mode.finalize_traitor(src) + SSticker.mode.greet_traitor(src) + +/datum/mind/proc/make_Nuke(turf/spawnloc, nuke_code, leader=0, telecrystals = TRUE) + if(!(src in SSticker.mode.syndicates)) + SSticker.mode.syndicates += src + SSticker.mode.update_synd_icons_added(src) + special_role = "Syndicate" + SSticker.mode.forge_syndicate_objectives(src) + SSticker.mode.greet_syndicate(src) + current.faction |= "syndicate" + + if(spawnloc) + current.loc = spawnloc + + if(ishuman(current)) + var/mob/living/carbon/human/H = current + qdel(H.belt) + qdel(H.back) + qdel(H.ears) + qdel(H.gloves) + qdel(H.head) + qdel(H.shoes) + qdel(H.wear_id) + qdel(H.wear_suit) + qdel(H.w_uniform) + + SSticker.mode.equip_syndicate(current, telecrystals) + + if (nuke_code) + store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0) + to_chat(current, "The nuclear authorization code is: [nuke_code]") + else + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list + if(nuke) + store_memory("Syndicate Nuclear Bomb Code: [nuke.r_code]", 0, 0) + to_chat(current, "The nuclear authorization code is: nuke.r_code") + else + to_chat(current, "You were not provided with a nuclear code. Trying asking your team leader or contacting syndicate command.") + + if (leader) + SSticker.mode.prepare_syndicate_leader(src,nuke_code) + else + current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" + +/datum/mind/proc/make_Changling() + if(!(src in SSticker.mode.changelings)) + SSticker.mode.changelings += src + current.make_changeling() + special_role = "Changeling" + SSticker.mode.forge_changeling_objectives(src) + SSticker.mode.greet_changeling(src) + SSticker.mode.update_changeling_icons_added(src) + +/datum/mind/proc/make_Wizard() + if(!(src in SSticker.mode.wizards)) + SSticker.mode.wizards += src + special_role = "Wizard" + assigned_role = "Wizard" + if(!GLOB.wizardstart.len) + current.loc = pick(GLOB.latejoin) + to_chat(current, "HOT INSERTION, GO GO GO") + else + current.loc = pick(GLOB.wizardstart) + + SSticker.mode.equip_wizard(current) + SSticker.mode.name_wizard(current) + SSticker.mode.forge_wizard_objectives(src) + SSticker.mode.greet_wizard(src) + + +/datum/mind/proc/make_Cultist() + if(!(src in SSticker.mode.cult)) + SSticker.mode.add_cultist(src,FALSE) + special_role = "Cultist" + to_chat(current, "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy your world is, you see that it should be open to the knowledge of Nar-Sie.") + to_chat(current, "Assist your new bretheren in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.") + var/datum/antagonist/cult/C + C.cult_memorization(src) + var/mob/living/carbon/human/H = current + if (!SSticker.mode.equip_cultist(current)) + to_chat(H, "Spawning an amulet from your Master failed.") + +/datum/mind/proc/make_Rev() + if (SSticker.mode.head_revolutionaries.len>0) + // copy targets + var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries + if (valid_head) + for (var/datum/objective/mutiny/O in valid_head.objectives) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = src + rev_obj.target = O.target + rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]." + objectives += rev_obj + SSticker.mode.greet_revolutionary(src,0) + SSticker.mode.head_revolutionaries += src + SSticker.mode.update_rev_icons_added(src) + special_role = "Head Revolutionary" + + SSticker.mode.forge_revolutionary_objectives(src) + SSticker.mode.greet_revolutionary(src,0) + + var/list/L = current.get_contents() + var/obj/item/device/assembly/flash/flash = locate() in L + qdel(flash) + take_uplink() + var/fail = 0 +// fail |= !SSticker.mode.equip_traitor(current, 1) + fail |= !SSticker.mode.equip_revolutionary(current) + + +/datum/mind/proc/make_Gang(datum/gang/G) + special_role = "[G.name] Gang Boss" + G.bosses += src + gang_datum = G + G.add_gang_hud(src) + SSticker.mode.forge_gang_objectives(src) + SSticker.mode.greet_gang(src) + SSticker.mode.equip_gang(current,G) + +/datum/mind/proc/make_Abductor() + var/role = alert("Abductor Role ?","Role","Agent","Scientist") + var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4) + var/teleport = alert("Teleport to ship ?","Teleport","Yes","No") + + if(!role || !team || !teleport) + return + + if(!ishuman(current)) + return + + SSticker.mode.abductors |= src + + var/datum/objective/experiment/O = new + O.owner = src + objectives += O + + var/mob/living/carbon/human/H = current + + H.set_species(/datum/species/abductor) + var/datum/species/abductor/S = H.dna.species + if(role == "Scientist") S.scientist = TRUE - S.team = team - - var/list/obj/effect/landmark/abductor/agent_landmarks = new - var/list/obj/effect/landmark/abductor/scientist_landmarks = new - agent_landmarks.len = 4 - scientist_landmarks.len = 4 - for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list) - if(istype(A,/obj/effect/landmark/abductor/agent)) - agent_landmarks[text2num(A.team)] = A - else if(istype(A,/obj/effect/landmark/abductor/scientist)) - scientist_landmarks[text2num(A.team)] = A - - var/obj/effect/landmark/L - if(teleport=="Yes") - switch(role) - if("Agent") - L = agent_landmarks[team] - if("Scientist") + S.team = team + + var/list/obj/effect/landmark/abductor/agent_landmarks = new + var/list/obj/effect/landmark/abductor/scientist_landmarks = new + agent_landmarks.len = 4 + scientist_landmarks.len = 4 + for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list) + if(istype(A,/obj/effect/landmark/abductor/agent)) + agent_landmarks[text2num(A.team)] = A + else if(istype(A,/obj/effect/landmark/abductor/scientist)) + scientist_landmarks[text2num(A.team)] = A + + var/obj/effect/landmark/L + if(teleport=="Yes") + switch(role) + if("Agent") + L = agent_landmarks[team] + if("Scientist") L = scientist_landmarks[team] H.forceMove(L.loc) - -/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) - spell_list += S - S.action.Grant(current) - -//To remove a specific spell from a mind -/datum/mind/proc/RemoveSpell(obj/effect/proc_holder/spell/spell) - if(!spell) - return - for(var/X in spell_list) - var/obj/effect/proc_holder/spell/S = X - if(istype(S, spell)) - spell_list -= S - qdel(S) - -/datum/mind/proc/transfer_actions(mob/living/new_character) - if(current && current.actions) - for(var/datum/action/A in current.actions) - A.Grant(new_character) - transfer_mindbound_actions(new_character) - -/datum/mind/proc/transfer_mindbound_actions(mob/living/new_character) - for(var/X in spell_list) - var/obj/effect/proc_holder/spell/S = X - S.action.Grant(new_character) - -/datum/mind/proc/disrupt_spells(delay, list/exceptions = New()) - for(var/X in spell_list) - var/obj/effect/proc_holder/spell/S = X - for(var/type in exceptions) - if(istype(S, type)) - continue - S.charge_counter = delay - INVOKE_ASYNC(S, /obj/effect/proc_holder/spell.proc/start_recharge) - -/datum/mind/proc/get_ghost(even_if_they_cant_reenter) - for(var/mob/dead/observer/G in GLOB.dead_mob_list) - if(G.mind == src) - if(G.can_reenter_corpse || even_if_they_cant_reenter) - return G - break - -/datum/mind/proc/grab_ghost(force) - var/mob/dead/observer/G = get_ghost(even_if_they_cant_reenter = force) - . = G - if(G) - G.reenter_corpse() - -/mob/proc/sync_mind() - mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) - mind.active = 1 //indicates that the mind is currently synced with a client - -/mob/dead/new_player/sync_mind() - return - -/mob/dead/observer/sync_mind() - return - -//Initialisation procs -/mob/proc/mind_initialize() - if(mind) - mind.key = key - - else - mind = new /datum/mind(key) - if(SSticker) - SSticker.minds += mind - else - stack_trace("mind_initialize(): No SSticker ready") - if(!mind.name) - mind.name = real_name - mind.current = src - -/mob/living/carbon/mind_initialize() - ..() - last_mind = mind - -//HUMAN -/mob/living/carbon/human/mind_initialize() - ..() - if(!mind.assigned_role) - mind.assigned_role = "Assistant" //defualt - -//XENO -/mob/living/carbon/alien/mind_initialize() - ..() - mind.special_role = "Alien" - -//AI -/mob/living/silicon/ai/mind_initialize() - ..() - mind.assigned_role = "AI" - -//BORG -/mob/living/silicon/robot/mind_initialize() - ..() - mind.assigned_role = "Cyborg" - -//PAI -/mob/living/silicon/pai/mind_initialize() - ..() - mind.assigned_role = "pAI" - mind.special_role = "" + +/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) + spell_list += S + S.action.Grant(current) + +/datum/mind/proc/owns_soul() + return soulOwner == src + +//To remove a specific spell from a mind +/datum/mind/proc/RemoveSpell(obj/effect/proc_holder/spell/spell) + if(!spell) + return + for(var/X in spell_list) + var/obj/effect/proc_holder/spell/S = X + if(istype(S, spell)) + spell_list -= S + qdel(S) + +/datum/mind/proc/transfer_actions(mob/living/new_character) + if(current && current.actions) + for(var/datum/action/A in current.actions) + A.Grant(new_character) + transfer_mindbound_actions(new_character) + +/datum/mind/proc/transfer_mindbound_actions(mob/living/new_character) + for(var/X in spell_list) + var/obj/effect/proc_holder/spell/S = X + S.action.Grant(new_character) + +/datum/mind/proc/disrupt_spells(delay, list/exceptions = New()) + for(var/X in spell_list) + var/obj/effect/proc_holder/spell/S = X + for(var/type in exceptions) + if(istype(S, type)) + continue + S.charge_counter = delay + INVOKE_ASYNC(S, /obj/effect/proc_holder/spell.proc/start_recharge) + +/datum/mind/proc/get_ghost(even_if_they_cant_reenter) + for(var/mob/dead/observer/G in GLOB.dead_mob_list) + if(G.mind == src) + if(G.can_reenter_corpse || even_if_they_cant_reenter) + return G + break + +/datum/mind/proc/grab_ghost(force) + var/mob/dead/observer/G = get_ghost(even_if_they_cant_reenter = force) + . = G + if(G) + G.reenter_corpse() + +/mob/proc/sync_mind() + mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) + mind.active = 1 //indicates that the mind is currently synced with a client + +/mob/dead/new_player/sync_mind() + return + +/mob/dead/observer/sync_mind() + return + +//Initialisation procs +/mob/proc/mind_initialize() + if(mind) + mind.key = key + + else + mind = new /datum/mind(key) + if(SSticker) + SSticker.minds += mind + else + stack_trace("mind_initialize(): No SSticker ready") + if(!mind.name) + mind.name = real_name + mind.current = src + +/mob/living/carbon/mind_initialize() + ..() + last_mind = mind + +//HUMAN +/mob/living/carbon/human/mind_initialize() + ..() + if(!mind.assigned_role) + mind.assigned_role = "Assistant" //defualt + +//XENO +/mob/living/carbon/alien/mind_initialize() + ..() + mind.special_role = "Alien" + +//AI +/mob/living/silicon/ai/mind_initialize() + ..() + mind.assigned_role = "AI" + +//BORG +/mob/living/silicon/robot/mind_initialize() + ..() + mind.assigned_role = "Cyborg" + +//PAI +/mob/living/silicon/pai/mind_initialize() + ..() + mind.assigned_role = "pAI" + mind.special_role = "" \ No newline at end of file diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 3a54db4e0a..011363f001 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -42,6 +42,7 @@ However, all the inhabitants seem to do is grow drugs and guns." suffix = "lavaland_surface_seed_vault.dmm" cost = 10 + allow_duplicates = FALSE /datum/map_template/ruin/lavaland/ash_walker name = "Ash Walker Nest" diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index 774e0794ff..94226dc8ec 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -72,7 +72,7 @@ /datum/map_template/shuttle/emergency/meteor suffix = "meteor" - name = "An Asteroid With Engines Strapped To It" + name = "Asteroid With Engines Strapped To It" description = "A hollowed out asteroid with engines strapped to it. Due to its size and difficulty in steering it, this shuttle may damage the docking area." admin_notes = "This shuttle will likely crush escape, killing anyone there." credit_cost = -5000 @@ -161,6 +161,12 @@ description = "A small, but feature complete shuttle. It boasts a card table to keep crew members occupied on the long flight home." credit_cost = 1000 +/datum/map_template/shuttle/emergency/cere + suffix = "cere" + name = "Cere Station Emergency Shuttle" + description = "The large, beefed-up version of the box-standard shuttle. Includes an expanded brig, fully stocked medbay, enhanced cargo storage with mech chargers, \ + an engine room stocked with various supplies, and a crew capacity of 80+ to top it all off. Live large, live Cere." + /datum/map_template/shuttle/emergency/supermatter suffix = "supermatter" name = "Hyperfractal Gigashuttle" @@ -230,6 +236,10 @@ suffix = "pubby" name = "NT White UFO" +/datum/map_template/shuttle/whiteship/cere + suffix = "cere" + name = "NT Construction Vessel" + /datum/map_template/shuttle/cargo/box suffix = "box" name = "supply shuttle (Box)" diff --git a/code/datums/soullink.dm b/code/datums/soullink.dm index ee99103c3d..de73a8e74c 100644 --- a/code/datums/soullink.dm +++ b/code/datums/soullink.dm @@ -108,6 +108,15 @@ if(soulowner) soulowner.death(gibbed) +///////////////// +// Demon Bind // +///////////////// +//When the soulowner dies, the soulsharer dies, but NOT vice versa +//This is intended for two players(or AI) and two mobs + +/datum/soullink/oneway/ownerDies(gibbed, mob/living/owner) + if(soulsharer) + soulsharer.dust(FALSE) ///////////////// diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 3f261c7991..a0338f72b0 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -13,6 +13,7 @@ /datum/status_effect/shadow_mend/on_apply() owner.visible_message("Violet light wraps around [owner]'s body!", "Violet light wraps around your body!") playsound(owner, 'sound/magic/Teleport_app.ogg', 50, 1) + return ..() /datum/status_effect/shadow_mend/tick() owner.adjustBruteLoss(-15) @@ -77,6 +78,7 @@ progbar = new(owner, duration, owner) progbar.bar.color = list("#FAE48C", "#FAE48C", "#FAE48C", rgb(0,0,0)) progbar.update(duration - world.time) + return ..() /datum/status_effect/vanguard_shield/tick() progbar.update(duration - world.time) @@ -129,6 +131,7 @@ animate(owner, color = oldcolor, time = 150, easing = EASE_IN) addtimer(CALLBACK(owner, /atom/proc/update_atom_colour), 150) playsound(owner, 'sound/magic/Ethereal_Enter.ogg', 50, 1) + return ..() /datum/status_effect/inathneqs_endowment/on_remove() add_logs(owner, null, "lost Inath-neq's invulnerability") @@ -180,6 +183,7 @@ /datum/status_effect/his_grace/on_apply() add_logs(owner, null, "gained His Grace's stun immunity") owner.add_stun_absorption("hisgrace", INFINITY, 3, null, "His Grace protects you from the stun!") + return ..() /datum/status_effect/his_grace/tick() bloodlust = 0 @@ -213,6 +217,7 @@ /datum/status_effect/wish_granters_gift/on_apply() to_chat(owner, "Death is not your end! The Wish Granter's energy suffuses you, and you begin to rise...") + return ..() /datum/status_effect/wish_granters_gift/on_remove() owner.revive(full_heal = 1, admin_revive = 1) @@ -223,3 +228,32 @@ name = "Wish Granter's Immortality" desc = "You are being resurrected!" icon_state = "wish_granter" + +/datum/status_effect/cult_master + id = "The Cult Master" + duration = -1 + tick_interval = 100 + alert_type = null + var/alive = TRUE + +/datum/status_effect/cult_master/proc/deathrattle() + var/area/A = get_area(owner) + for(var/datum/mind/B in SSticker.mode.cult) + if(isliving(B.current)) + var/mob/living/M = B.current + M << 'sound/hallucinations/veryfar_noise.ogg' + to_chat(M, "The Cult's Master, [owner], has fallen in the [A]!") + + +/datum/status_effect/cult_master/tick() + if(owner.stat != DEAD && !alive) + alive = TRUE + return + if(owner.stat == DEAD && alive) + alive = FALSE + deathrattle() + +/datum/status_effect/cult_master/on_remove() + deathrattle() + . = ..() + diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index f78a3ae522..5b7d015e19 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -29,3 +29,141 @@ owner.adjustBruteLoss(0.1) owner.adjustFireLoss(0.1) owner.adjustToxLoss(0.2, TRUE, TRUE) + +/datum/status_effect/belligerent + id = "belligerent" + duration = 70 + tick_interval = 0 //tick as fast as possible + status_type = STATUS_EFFECT_REPLACE + alert_type = /obj/screen/alert/status_effect/belligerent + var/leg_damage_on_toggle = 2 //damage on initial application and when the owner tries to toggle to run + var/cultist_damage_on_toggle = 10 //damage on initial application and when the owner tries to toggle to run, but to cultists + +/obj/screen/alert/status_effect/belligerent + name = "Belligerent" + desc = "Kneel, her-eti'c." + icon_state = "belligerent" + alerttooltipstyle = "clockcult" + +/datum/status_effect/belligerent/on_apply() + return do_movement_toggle(TRUE) + +/datum/status_effect/belligerent/tick() + if(!do_movement_toggle()) + qdel(src) + +/datum/status_effect/belligerent/proc/do_movement_toggle(force_damage) + var/number_legs = owner.get_num_legs() + if(iscarbon(owner) && !is_servant_of_ratvar(owner) && !owner.null_rod_check() && number_legs) + if(force_damage || owner.m_intent != MOVE_INTENT_WALK) + if(GLOB.ratvar_awakens) + owner.Weaken(1) + if(iscultist(owner)) + owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "l_leg") + owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "r_leg") + else + owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "l_leg") + owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "r_leg") + if(owner.m_intent != MOVE_INTENT_WALK) + if(!iscultist(owner)) + to_chat(owner, "Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!") + else //Cultists take extra burn damage + to_chat(owner, "Your leg[number_legs > 1 ? "s burn":" burns"] with pain!") + owner.toggle_move_intent() + return TRUE + return FALSE + +/datum/status_effect/belligerent/on_remove() + if(owner.m_intent == MOVE_INTENT_WALK) + owner.toggle_move_intent() + + +/datum/status_effect/maniamotor + id = "maniamotor" + duration = -1 + tick_interval = 10 + status_type = STATUS_EFFECT_MULTIPLE + alert_type = null + var/obj/structure/destructible/clockwork/powered/mania_motor/motor + var/severity = 0 //goes up to a maximum of MAX_MANIA_SEVERITY + var/warned_turnoff = FALSE //if we've warned that the motor is off + var/warned_outofsight = FALSE //if we've warned that the target is out of sight of the motor + var/static/list/mania_messages = list("Go nuts.", "Take a crack at crazy.", "Make a bid for insanity.", "Get kooky.", "Move towards mania.", "Become bewildered.", "Wax wild.", \ + "Go round the bend.", "Land in lunacy.", "Try dementia.", "Strive to get a screw loose.", "Advance forward.", "Approach the transmitter.", "Touch the antennae.", \ + "Move towards the mania motor.", "Come closer.", "Get over here already!", "Keep your eyes on the motor.") + var/static/list/flee_messages = list("Oh, NOW you flee.", "Get back here!", "If you were smarter, you'd come back.", "Only fools run.", "You'll be back.") + var/static/list/turnoff_messages = list("Why would they turn it-", "What are these idi-", "Fools, fools, all of-", "Are they trying to c-", "All this effort just f-") + var/static/list/powerloss_messages = list("\"Oh, the id**ts di***t s***e en**** pow**...\"", "\"D*dn't **ey mak* an **te***c*i*n le**?\"", "\"The** f**ls for**t t* make a ***** *f-\"", \ + "\"No, *O, you **re so cl***-\"", "You hear a yell of frustration, cut off by static.") + +/datum/status_effect/maniamotor/Destroy() + motor = null + return ..() + +/datum/status_effect/maniamotor/tick() + var/is_servant = is_servant_of_ratvar(owner) + var/span_part = severity > 50 ? "" : "_small" //let's save like one check + if(QDELETED(motor)) + if(!is_servant) + to_chat(owner, "You feel a frustrated voice quietly fade from your mind...") + qdel(src) + return + if(!motor.active) //it being off makes it fall off much faster + if(!is_servant && !warned_turnoff) + if(motor.total_accessable_power() > motor.mania_cost) + to_chat(owner, "\"[text2ratvar(pick(turnoff_messages))]\"") + else + to_chat(owner, "[text2ratvar(pick(powerloss_messages))]") + warned_turnoff = TRUE + severity = max(severity - 2, 0) + if(!severity) + qdel(src) + return + else + if(prob(severity * 2)) + warned_turnoff = FALSE + if(!(owner in viewers(7, motor))) //not being in range makes it fall off slightly faster + if(!is_servant && !warned_outofsight) + to_chat(owner, "\"[text2ratvar(pick(flee_messages))]\"") + warned_outofsight = TRUE + severity = max(severity - 1, 0) + if(!severity) + qdel(src) + return + else if(prob(severity * 2)) + warned_outofsight = FALSE + if(is_servant) //heals servants of braindamage, hallucination, druggy, dizziness, and confusion + if(owner.hallucination) + owner.hallucination = 0 + if(owner.druggy) + owner.adjust_drugginess(-owner.druggy) + if(owner.dizziness) + owner.dizziness = 0 + if(owner.confused) + owner.confused = 0 + severity = 0 + else if(!owner.null_rod_check() && owner.stat != DEAD && severity) + var/static/hum = get_sfx('sound/effects/screech.ogg') //same sound for every proc call + if(owner.getToxLoss() > MANIA_DAMAGE_TO_CONVERT) + if(is_eligible_servant(owner)) + to_chat(owner, "\"[text2ratvar("You are mine and his, now.")]\"") + add_servant_of_ratvar(owner) + owner.Paralyse(5) + else + if(prob(severity * 0.15)) + to_chat(owner, "\"[text2ratvar(pick(mania_messages))]\"") + owner.playsound_local(get_turf(motor), hum, severity, 1) + owner.adjust_drugginess(Clamp(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1 + if(owner.hallucination < 50) + owner.hallucination = min(owner.hallucination + max(severity * 0.075, 1), 50) //7.5% of severity per second, minimum 1 + if(owner.dizziness < 50) + owner.dizziness = min(owner.dizziness + round(severity * 0.05, 1), 50) //5% of severity per second above 10 severity + if(owner.confused < 25) + owner.confused = min(owner.confused + round(severity * 0.025, 1), 25) //2.5% of severity per second above 20 severity + owner.adjustToxLoss(severity * 0.02, TRUE, TRUE) //2% of severity per second + severity-- + +/datum/status_effect/cultghost //is a cult ghost and can't use manifest runes + id = "cult_ghost" + duration = -1 + alert_type = null \ No newline at end of file diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index c2c070dbec..ff92b67978 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -16,6 +16,7 @@ cube = icon('icons/effects/freeze.dmi', "ice_cube") owner.add_overlay(cube) owner.update_canmove() + return ..() /datum/status_effect/freon/tick() owner.update_canmove() diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 51b4f8fc5f..61c8607975 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -10,6 +10,7 @@ var/status_type = STATUS_EFFECT_UNIQUE //How many of the effect can be on one mob, and what happens when you try to add another var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description + var/obj/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists /datum/status_effect/New(mob/living/new_owner) if(new_owner) @@ -30,16 +31,16 @@ /datum/status_effect/proc/start_ticking() if(!src) return - if(!owner) + if(!owner || !on_apply()) qdel(src) return - on_apply() if(duration != -1) duration = world.time + initial(duration) tick_interval = world.time + initial(tick_interval) if(alert_type) var/obj/screen/alert/status_effect/A = owner.throw_alert(id, alert_type) A.attached_effect = src //so the alert can reference us, if it needs to + linked_alert = A //so we can reference the alert, if we need to START_PROCESSING(SSfastprocess, src) /datum/status_effect/process() @@ -53,6 +54,8 @@ qdel(src) /datum/status_effect/proc/on_apply() //Called whenever the buff is applied. + return TRUE + /datum/status_effect/proc/tick() //Called every tick. /datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed; do note that at the point this is called, it is out of the owner's status_effects but owner is not yet null /datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself or when a status effect with on_remove_on_mob_delete = FALSE has its mob deleted @@ -103,3 +106,11 @@ for(var/datum/status_effect/S in status_effects) if(initial(S1.id) == S.id) return S + +/mob/living/proc/has_status_effect_list(effect) //returns a list of effects with matching IDs that the mod owns; use for effects there can be multiple of + . = list() + if(status_effects) + var/datum/status_effect/S1 = effect + for(var/datum/status_effect/S in status_effects) + if(initial(S1.id) == S.id) + . += S diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index eefc270cc9..0715867fe6 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -13,16 +13,16 @@ /datum/wires/explosive/c4 - holder_type = /obj/item/weapon/c4 + holder_type = /obj/item/weapon/grenade/plastic/c4 randomize = TRUE //Same behaviour since no wire actually disarms it /datum/wires/explosive/c4/interactable(mob/user) - var/obj/item/weapon/c4/P = holder + var/obj/item/weapon/grenade/plastic/c4/P = holder if(P.open_panel) return TRUE /datum/wires/explosive/c4/explode() - var/obj/item/weapon/c4/P = holder + var/obj/item/weapon/grenade/plastic/c4/P = holder P.explode() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index ab0038f7be..4a0f05602b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -43,7 +43,7 @@ if(SSatoms.InitAtom(src, args)) //we were deleted return - + var/list/created = SSatoms.created_atoms if(created) created += src @@ -274,6 +274,7 @@ return /atom/proc/ex_act(severity, target) + set waitfor = FALSE contents_explosion(severity, target) /atom/proc/blob_act(obj/structure/blob/B) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index dc418cbf89..edbb46d7fe 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1,3 +1,4 @@ + #ifndef PIXEL_SCALE #define PIXEL_SCALE 0 #if DM_VERSION >= 512 @@ -13,9 +14,8 @@ var/throw_speed = 2 //How many tiles to move per ds when being thrown. Float values are fully supported var/throw_range = 7 var/mob/pulledby = null - var/list/languages - var/list/initial_languages = list(/datum/language/common) - var/only_speaks_language = null + var/initial_language_holder = /datum/language_holder + var/datum/language_holder/language_holder var/verb_say = "says" var/verb_ask = "asks" var/verb_exclaim = "exclaims" @@ -42,13 +42,32 @@ return FALSE //PLEASE no. if((var_name in careful_edits) && (var_value % world.icon_size) != 0) return FALSE + switch(var_name) + if("x") + var/turf/T = locate(var_value, y, z) + if(T) + forceMove(T) + return TRUE + return FALSE + if("y") + var/turf/T = locate(x, var_value, z) + if(T) + forceMove(T) + return TRUE + return FALSE + if("z") + var/turf/T = locate(x, y, var_value) + if(T) + forceMove(T) + return TRUE + return FALSE + if("loc") + if(var_value == null || istype(var_value, /atom)) + forceMove(var_value) + return TRUE + return FALSE return ..() -/atom/movable/Initialize(mapload) - . = ..() - for(var/L in initial_languages) - grant_language(L) - /atom/movable/Move(atom/newloc, direct = 0) if(!loc || !newloc) return 0 var/atom/oldloc = loc @@ -177,6 +196,7 @@ STOP_PROCESSING(SSinbounds, src) QDEL_NULL(proximity_monitor) + QDEL_NULL(language_holder) . = ..() if(loc) @@ -435,8 +455,7 @@ pixel_x_diff = -8 animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - //animate(pixel_x = initial(pixel_x), pixel_y = final_pixel_y, time = 2) - animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = final_pixel_y, time = 2) //Putting back my non offset breaking method + animate(pixel_x = initial(pixel_x), pixel_y = final_pixel_y, time = 2) /atom/movable/proc/do_item_attack_animation(atom/A, visual_effect_icon, obj/item/used_item) var/image/I @@ -576,44 +595,73 @@ /* Language procs */ +/atom/movable/proc/get_language_holder(shadow=TRUE) + if(language_holder) + return language_holder + else + language_holder = new initial_language_holder(src) + return language_holder + /atom/movable/proc/grant_language(datum/language/dt) - LAZYINITLIST(languages) - languages[dt] = TRUE + var/datum/language_holder/H = get_language_holder() + H.grant_language(dt) /atom/movable/proc/grant_all_languages(omnitongue=FALSE) - for(var/la in subtypesof(/datum/language)) - grant_language(la) - - if(omnitongue) - SET_SECONDARY_FLAG(src, OMNITONGUE) + var/datum/language_holder/H = get_language_holder() + H.grant_all_languages(omnitongue) /atom/movable/proc/get_random_understood_language() - var/list/possible = list() - for(var/dt in languages) - possible += dt - . = safepick(possible) + var/datum/language_holder/H = get_language_holder() + . = H.get_random_understood_language() /atom/movable/proc/remove_language(datum/language/dt) - LAZYREMOVE(languages, dt) + var/datum/language_holder/H = get_language_holder() + H.remove_language(dt) /atom/movable/proc/remove_all_languages() - LAZYCLEARLIST(languages) + var/datum/language_holder/H = get_language_holder() + H.remove_all_languages() /atom/movable/proc/has_language(datum/language/dt) - . = is_type_in_typecache(dt, languages) + var/datum/language_holder/H = get_language_holder() + . = H.has_language(dt) + +/atom/movable/proc/copy_known_languages_from(thing, replace=FALSE) + var/datum/language_holder/H = get_language_holder() + . = H.copy_known_languages_from(thing, replace) + +// Whether an AM can speak in a language or not, independent of whether +// it KNOWS the language +/atom/movable/proc/could_speak_in_language(datum/language/dt) + . = TRUE /atom/movable/proc/can_speak_in_language(datum/language/dt) - . = has_language(dt) - if(only_speaks_language && !HAS_SECONDARY_FLAG(src, OMNITONGUE)) - . = . && ispath(only_speaks_language, dt) + var/datum/language_holder/H = get_language_holder() + + if(!H.has_language(dt)) + return FALSE + else if(H.omnitongue) + return TRUE + else if(could_speak_in_language(dt) && (!H.only_speaks_language || H.only_speaks_language == dt)) + return TRUE + else + return FALSE /atom/movable/proc/get_default_language() // if no language is specified, and we want to say() something, which // language do we use? + var/datum/language_holder/H = get_language_holder() + + if(H.selected_default_language) + if(can_speak_in_language(H.selected_default_language)) + return H.selected_default_language + else + H.selected_default_language = null + var/datum/language/chosen_langtype var/highest_priority - for(var/lt in languages) + for(var/lt in H.languages) var/datum/language/langtype = lt if(!can_speak_in_language(langtype)) continue @@ -623,7 +671,10 @@ chosen_langtype = langtype highest_priority = pri + H.selected_default_language = . . = chosen_langtype + +/* End language procs */ /atom/movable/proc/ConveyorMove(movedir) set waitfor = FALSE if(!anchored && has_gravity()) diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 74c16cf132..da749b603a 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -1,294 +1,295 @@ -/obj/item/weapon/antag_spawner - throw_speed = 1 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - var/used = 0 - -/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "") - return - -/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target) - return - - -///////////WIZARD - -/obj/item/weapon/antag_spawner/contract - name = "contract" - desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." - icon = 'icons/obj/wizard.dmi' - icon_state ="scroll2" - -/obj/item/weapon/antag_spawner/contract/attack_self(mob/user) - user.set_machine(src) - var/dat - if(used) - dat = "You have already summoned your apprentice.
" - else - dat = "Contract of Apprenticeship:
" - dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" - dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" - dat += "Which school of magic is your apprentice studying?:
" - dat += "Destruction
" - dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" - dat += "Bluespace Manipulation
" - dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" - dat += "Healing
" - dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" - dat += "Robeless
" - dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" - user << browse(dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/weapon/antag_spawner/contract/Topic(href, href_list) - ..() - var/mob/living/carbon/human/H = usr - - if(H.stat || H.restrained()) - return - if(!ishuman(H)) - return 1 - - if(loc == H || (in_range(src, H) && isturf(loc))) - H.set_machine(src) - if(href_list["school"]) - if(used) - to_chat(H, "You already used this contract!") - return - var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) - if(candidates.len) - if(used) - to_chat(H, "You already used this contract!") - return - used = 1 - var/mob/dead/observer/theghost = pick(candidates) - spawn_antag(theghost.client, get_turf(src), href_list["school"]) - if(H && H.mind) - SSticker.mode.update_wiz_icons_added(H.mind) - else - to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") - -/obj/item/weapon/antag_spawner/contract/spawn_antag(client/C, turf/T, type = "") - new /obj/effect/particle_effect/smoke(T) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - var/wizard_name = "the wizard" - if(usr) - wizard_name = usr.real_name - to_chat(M, "You are [wizard_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.") - switch(type) - if("destruction") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.") - if("bluespace") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.") - if("healing") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) - M.put_in_hands_or_del(new /obj/item/weapon/gun/magic/staff/healing(M)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") - if("robeless") - M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null)) - to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") - - equip_antag(M) - var/wizard_name_first = pick(GLOB.wizard_first) - var/wizard_name_second = pick(GLOB.wizard_second) - var/randomname = "[wizard_name_first] [wizard_name_second]" - if(usr) - var/datum/objective/protect/new_objective = new /datum/objective/protect - new_objective.owner = M.mind - new_objective.target = usr.mind - new_objective.explanation_text = "Protect [usr.real_name], the wizard." - M.mind.objectives += new_objective - SSticker.mode.apprentices += M.mind - M.mind.special_role = "apprentice" - SSticker.mode.update_wiz_icons_added(M.mind) - M << sound('sound/effects/magic.ogg') - var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) - if (!newname) - newname = randomname - M.mind.name = newname - M.real_name = newname - M.name = newname - M.dna.update_dna_identity() - -/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target) - target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears) - target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform) - target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(target), slot_shoes) - target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit) - target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head) - target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back) - target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack) - target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store) -///////////BORGS AND OPERATIVES - - -/obj/item/weapon/antag_spawner/nuke_ops - name = "syndicate operative teleporter" - desc = "A single-use teleporter designed to quickly reinforce operatives in the field." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/borg_to_spawn - -/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user) - if(used) - to_chat(user, "[src] is out of power!") - return 0 - if(!(user.mind in SSticker.mode.syndicates)) - to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") - return 0 - if(user.z != ZLEVEL_CENTCOM) - to_chat(user, "[src] is out of range! It can only be used at your base!") - return 0 - return 1 - - -/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user) - if(!(check_usability(user))) - return - - var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, src) - if(nuke_candidates.len) - if(!(check_usability(user))) - return - used = 1 - var/mob/dead/observer/theghost = pick(nuke_candidates) - spawn_antag(theghost.client, get_turf(src), "syndieborg") - do_sparks(4, TRUE, src) - qdel(src) - else - to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") - -/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) - C.prefs.copy_to(M) - M.key = C.key - var/code = "BOMB-NOT-FOUND" - var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list - if(nuke) - code = nuke.r_code - M.mind.make_Nuke(null, code, 0, FALSE) - var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname) - M.mind.name = newname - M.real_name = newname - M.name = newname - -//////SYNDICATE BORG -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele - name = "syndicate cyborg teleporter" - desc = "A single-use teleporter designed to quickly reinforce operatives in the field.." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault - name = "syndicate assault cyborg teleporter" - borg_to_spawn = "Assault" - -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical - name = "syndicate medical teleporter" - borg_to_spawn = "Medical" - -/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T) - var/mob/living/silicon/robot/R - switch(borg_to_spawn) - if("Medical") - R = new /mob/living/silicon/robot/syndicate/medical(T) - else - R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default - - var/brainfirstname = pick(GLOB.first_names_male) - if(prob(50)) - brainfirstname = pick(GLOB.first_names_female) - var/brainopslastname = pick(GLOB.last_names) - if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops. - brainopslastname = SSticker.mode.nukeops_lastname - var/brainopsname = "[brainfirstname] [brainopslastname]" - - R.mmi.name = "Man-Machine Interface: [brainopsname]" - R.mmi.brain.name = "[brainopsname]'s brain" - R.mmi.brainmob.real_name = brainopsname - R.mmi.brainmob.name = brainopsname - - R.key = C.key - R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE) - -///////////SLAUGHTER DEMON - -/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game - name = "vial of blood" - desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - - var/shatter_msg = "You shatter the bottle, no turning back now!" - var/veil_msg = "You sense a dark presence lurking just beyond the veil..." - var/objective_verb = "Kill" - var/mob/living/demon_type = /mob/living/simple_animal/slaughter - - -/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user) - if(user.z != 1) - to_chat(user, "You should probably wait until you reach the station.") - return - if(used) - return - var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) - if(demon_candidates.len) - if(used) - return - used = 1 - var/mob/dead/observer/theghost = pick(demon_candidates) - spawn_antag(theghost.client, get_turf(src), initial(demon_type.name)) - to_chat(user, shatter_msg) - to_chat(user, veil_msg) - playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) - qdel(src) - else - to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.") - - -/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "") - - var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) - var/mob/living/simple_animal/slaughter/S = new demon_type(holder) - S.holder = holder - S.key = C.key - S.mind.assigned_role = S.name - S.mind.special_role = S.name - SSticker.mode.traitors += S.mind - var/datum/objective/assassinate/new_objective - if(usr) - new_objective = new /datum/objective/assassinate - new_objective.owner = S.mind - new_objective.target = usr.mind - new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you." - S.mind.objectives += new_objective - var/datum/objective/new_objective2 = new /datum/objective - new_objective2.owner = S.mind - new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]." - S.mind.objectives += new_objective2 - to_chat(S, S.playstyle_string) - to_chat(S, "You are currently not currently in the same plane of existence as the station. \ - Ctrl+Click a blood pool to manifest.") - if(new_objective) - to_chat(S, "Objective #[1]: [new_objective.explanation_text]") - to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]") - -/obj/item/weapon/antag_spawner/slaughter_demon/laughter - name = "vial of tickles" - desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures." - icon = 'icons/obj/wizard.dmi' - icon_state = "vial" - color = "#FF69B4" // HOT PINK - - veil_msg = "You sense an adorable presence lurking just beyond the veil..." - objective_verb = "Hug and Tickle" - demon_type = /mob/living/simple_animal/slaughter/laughter +/obj/item/weapon/antag_spawner + throw_speed = 1 + throw_range = 5 + w_class = WEIGHT_CLASS_TINY + var/used = 0 + +/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "") + return + +/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target) + return + + +///////////WIZARD + +/obj/item/weapon/antag_spawner/contract + name = "contract" + desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." + icon = 'icons/obj/wizard.dmi' + icon_state ="scroll2" + +/obj/item/weapon/antag_spawner/contract/attack_self(mob/user) + user.set_machine(src) + var/dat + if(used) + dat = "You have already summoned your apprentice.
" + else + dat = "Contract of Apprenticeship:
" + dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" + dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" + dat += "Which school of magic is your apprentice studying?:
" + dat += "Destruction
" + dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" + dat += "Bluespace Manipulation
" + dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" + dat += "Healing
" + dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" + dat += "Robeless
" + dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" + user << browse(dat, "window=radio") + onclose(user, "radio") + return + +/obj/item/weapon/antag_spawner/contract/Topic(href, href_list) + ..() + var/mob/living/carbon/human/H = usr + + if(H.stat || H.restrained()) + return + if(!ishuman(H)) + return 1 + + if(loc == H || (in_range(src, H) && isturf(loc))) + H.set_machine(src) + if(href_list["school"]) + if(used) + to_chat(H, "You already used this contract!") + return + var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) + if(candidates.len) + if(used) + to_chat(H, "You already used this contract!") + return + used = 1 + var/mob/dead/observer/theghost = pick(candidates) + spawn_antag(theghost.client, get_turf(src), href_list["school"]) + if(H && H.mind) + SSticker.mode.update_wiz_icons_added(H.mind) + else + to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.") + +/obj/item/weapon/antag_spawner/contract/spawn_antag(client/C, turf/T, type = "") + new /obj/effect/particle_effect/smoke(T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + var/wizard_name = "the wizard" + if(usr) + wizard_name = usr.real_name + to_chat(M, "You are [wizard_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.") + switch(type) + if("destruction") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.") + if("bluespace") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.") + if("healing") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) + M.put_in_hands_or_del(new /obj/item/weapon/gun/magic/staff/healing(M)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") + if("robeless") + M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null)) + to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.") + + equip_antag(M) + var/wizard_name_first = pick(GLOB.wizard_first) + var/wizard_name_second = pick(GLOB.wizard_second) + var/randomname = "[wizard_name_first] [wizard_name_second]" + if(usr) + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = M.mind + new_objective.target = usr.mind + new_objective.explanation_text = "Protect [usr.real_name], the wizard." + M.mind.objectives += new_objective + SSticker.mode.apprentices += M.mind + M.mind.special_role = "apprentice" + SSticker.mode.update_wiz_icons_added(M.mind) + M << sound('sound/effects/magic.ogg') + var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) + if (!newname) + newname = randomname + M.mind.name = newname + M.real_name = newname + M.name = newname + M.age = rand(AGE_MIN, WIZARD_AGE_MIN - 1) + M.dna.update_dna_identity() + +/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target) + target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears) + target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform) + target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(target), slot_shoes) + target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit) + target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head) + target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back) + target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack) + target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store) +///////////BORGS AND OPERATIVES + + +/obj/item/weapon/antag_spawner/nuke_ops + name = "syndicate operative teleporter" + desc = "A single-use teleporter designed to quickly reinforce operatives in the field." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + var/borg_to_spawn + +/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user) + if(used) + to_chat(user, "[src] is out of power!") + return 0 + if(!(user.mind in SSticker.mode.syndicates)) + to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") + return 0 + if(user.z != ZLEVEL_CENTCOM) + to_chat(user, "[src] is out of range! It can only be used at your base!") + return 0 + return 1 + + +/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user) + if(!(check_usability(user))) + return + to_chat(user, "You activate [src] and wait for confirmation.") + var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE, src) + if(nuke_candidates.len) + if(!(check_usability(user))) + return + used = 1 + var/mob/dead/observer/theghost = pick(nuke_candidates) + spawn_antag(theghost.client, get_turf(src), "syndieborg") + do_sparks(4, TRUE, src) + qdel(src) + else + to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") + +/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + var/code = "BOMB-NOT-FOUND" + var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list + if(nuke) + code = nuke.r_code + M.mind.make_Nuke(null, code, 0, FALSE) + var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname) + M.mind.name = newname + M.real_name = newname + M.name = newname + +//////SYNDICATE BORG +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele + name = "syndicate cyborg teleporter" + desc = "A single-use teleporter designed to quickly reinforce operatives in the field.." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault + name = "syndicate assault cyborg teleporter" + borg_to_spawn = "Assault" + +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical + name = "syndicate medical teleporter" + borg_to_spawn = "Medical" + +/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T) + var/mob/living/silicon/robot/R + switch(borg_to_spawn) + if("Medical") + R = new /mob/living/silicon/robot/syndicate/medical(T) + else + R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default + + var/brainfirstname = pick(GLOB.first_names_male) + if(prob(50)) + brainfirstname = pick(GLOB.first_names_female) + var/brainopslastname = pick(GLOB.last_names) + if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops. + brainopslastname = SSticker.mode.nukeops_lastname + var/brainopsname = "[brainfirstname] [brainopslastname]" + + R.mmi.name = "Man-Machine Interface: [brainopsname]" + R.mmi.brain.name = "[brainopsname]'s brain" + R.mmi.brainmob.real_name = brainopsname + R.mmi.brainmob.name = brainopsname + + R.key = C.key + R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE) + +///////////SLAUGHTER DEMON + +/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game + name = "vial of blood" + desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + + var/shatter_msg = "You shatter the bottle, no turning back now!" + var/veil_msg = "You sense a dark presence lurking just beyond the veil..." + var/objective_verb = "Kill" + var/mob/living/demon_type = /mob/living/simple_animal/slaughter + + +/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user) + if(user.z != 1) + to_chat(user, "You should probably wait until you reach the station.") + return + if(used) + return + var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src) + if(demon_candidates.len) + if(used) + return + used = 1 + var/mob/dead/observer/theghost = pick(demon_candidates) + spawn_antag(theghost.client, get_turf(src), initial(demon_type.name)) + to_chat(user, shatter_msg) + to_chat(user, veil_msg) + playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) + qdel(src) + else + to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.") + + +/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "") + + var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T) + var/mob/living/simple_animal/slaughter/S = new demon_type(holder) + S.holder = holder + S.key = C.key + S.mind.assigned_role = S.name + S.mind.special_role = S.name + SSticker.mode.traitors += S.mind + var/datum/objective/assassinate/new_objective + if(usr) + new_objective = new /datum/objective/assassinate + new_objective.owner = S.mind + new_objective.target = usr.mind + new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you." + S.mind.objectives += new_objective + var/datum/objective/new_objective2 = new /datum/objective + new_objective2.owner = S.mind + new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]." + S.mind.objectives += new_objective2 + to_chat(S, S.playstyle_string) + to_chat(S, "You are currently not currently in the same plane of existence as the station. \ + Ctrl+Click a blood pool to manifest.") + if(new_objective) + to_chat(S, "Objective #[1]: [new_objective.explanation_text]") + to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]") + +/obj/item/weapon/antag_spawner/slaughter_demon/laughter + name = "vial of tickles" + desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures." + icon = 'icons/obj/wizard.dmi' + icon_state = "vial" + color = "#FF69B4" // HOT PINK + + veil_msg = "You sense an adorable presence lurking just beyond the veil..." + objective_verb = "Hug and Tickle" + demon_type = /mob/living/simple_animal/slaughter/laughter diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 9d281b5f2f..1f9b25361c 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -200,6 +200,7 @@ GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "w to_chat(changeling.current, "You are [changeling.changeling.changelingID], a changeling! You have absorbed and taken the form of a human.") to_chat(changeling.current, "Use say \":g message\" to communicate with your fellow changelings.") to_chat(changeling.current, "You must complete the following tasks:") + changeling.current.playsound_local('sound/ambience/antag/ling_aler.ogg',100,0) if (changeling.current.mind) var/mob/living/carbon/human/H = changeling.current diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm index 67eb216d58..489228a30c 100644 --- a/code/game/gamemodes/changeling/changeling_power.dm +++ b/code/game/gamemodes/changeling/changeling_power.dm @@ -13,8 +13,6 @@ var/req_dna = 0 //amount of dna needed to use this ability. Changelings always have atleast 1 var/req_human = 0 //if you need to be human to use this ability var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD - var/genetic_damage = 0 // genetic damage caused by using the sting. Nothing to do with cloneloss. - var/max_genetic_damage = 100 // hard counter for spamming abilities. Not used/balanced much yet. var/always_keep = 0 // important for abilities like revive that screw you if you lose them. var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag @@ -39,7 +37,7 @@ if(sting_action(user, target)) SSblackbox.add_details("changeling_powers",name) sting_feedback(user, target) - take_chemical_cost(c) + c.chem_charges -= chemical_cost /obj/effect/proc_holder/changeling/proc/sting_action(mob/user, mob/target) return 0 @@ -47,10 +45,6 @@ /obj/effect/proc_holder/changeling/proc/sting_feedback(mob/user, mob/target) return 0 -/obj/effect/proc_holder/changeling/proc/take_chemical_cost(datum/changeling/changeling) - changeling.chem_charges -= chemical_cost - changeling.geneticdamage += genetic_damage - //Fairly important to remember to return 1 on success >.< /obj/effect/proc_holder/changeling/proc/can_sting(mob/user, mob/target) if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards @@ -71,9 +65,6 @@ if((user.status_flags & FAKEDEATH) && (!ignores_fakedeath)) to_chat(user, "We are incapacitated.") return 0 - if(c.geneticdamage > max_genetic_damage) - to_chat(user, "Our genomes are still reassembling. We need time to recover first.") - return 0 return 1 //used in /mob/Stat() diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 6a52ab9312..b6b3372ae3 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -4,7 +4,6 @@ chemical_cost = 0 dna_cost = 0 req_human = 1 - max_genetic_damage = 100 /obj/effect/proc_holder/changeling/absorbDNA/can_sting(mob/living/carbon/user) if(!..()) diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/game/gamemodes/changeling/powers/biodegrade.dm index 453dec9375..6e2d6b0ddd 100644 --- a/code/game/gamemodes/changeling/powers/biodegrade.dm +++ b/code/game/gamemodes/changeling/powers/biodegrade.dm @@ -5,9 +5,6 @@ chemical_cost = 30 //High cost to prevent spam dna_cost = 2 req_human = 1 - genetic_damage = 10 - max_genetic_damage = 0 - /obj/effect/proc_holder/changeling/biodegrade/sting_action(mob/living/carbon/human/user) var/used = FALSE // only one form of shackles removed per use diff --git a/code/game/gamemodes/changeling/powers/chameleon_skin.dm b/code/game/gamemodes/changeling/powers/chameleon_skin.dm index 1f18f628a8..3be5103105 100644 --- a/code/game/gamemodes/changeling/powers/chameleon_skin.dm +++ b/code/game/gamemodes/changeling/powers/chameleon_skin.dm @@ -5,9 +5,6 @@ dna_cost = 2 chemical_cost = 25 req_human = 1 - genetic_damage = 10 - max_genetic_damage = 50 - /obj/effect/proc_holder/changeling/chameleon_skin/sting_action(mob/user) var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = 1 diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index 798f8030e0..e35f04d9e7 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -5,8 +5,6 @@ dna_cost = 0 req_dna = 1 req_stat = DEAD - max_genetic_damage = 100 - //Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. /obj/effect/proc_holder/changeling/fakedeath/sting_action(mob/living/user) diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index 743dbc91e9..d92e622c2d 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -2,10 +2,7 @@ name = "Human Form" desc = "We change into a human." chemical_cost = 5 - genetic_damage = 3 req_dna = 1 - max_genetic_damage = 3 - //Transform into a human. /obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user) diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 538803de00..06824f9bed 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -3,7 +3,6 @@ desc = "We debase ourselves and become lesser. We become a monkey." chemical_cost = 5 dna_cost = 1 - genetic_damage = 3 req_human = 1 //Transform into a monkey. diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm index fc4b91b650..232774c937 100644 --- a/code/game/gamemodes/changeling/powers/linglink.dm +++ b/code/game/gamemodes/changeling/powers/linglink.dm @@ -4,7 +4,6 @@ chemical_cost = 0 dna_cost = 0 req_human = 1 - max_genetic_damage = 100 /obj/effect/proc_holder/changeling/linglink/can_sting(mob/living/carbon/user) if(!..()) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 54e8ea1e38..aef9b6f1d2 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -16,7 +16,6 @@ helptext = "Yell at Miauw and/or Perakp" chemical_cost = 1000 dna_cost = -1 - genetic_damage = 1000 var/silent = FALSE var/weapon_type @@ -67,7 +66,6 @@ helptext = "Yell at Miauw and/or Perakp" chemical_cost = 1000 dna_cost = -1 - genetic_damage = 1000 var/helmet_type = /obj/item var/suit_type = /obj/item @@ -89,7 +87,7 @@ return 1 var/mob/living/carbon/human/H = user if(istype(H.wear_suit, suit_type) || istype(H.head, helmet_type)) - H.visible_message("[H] casts off their [suit_name_simple]!", "We cast off our [suit_name_simple][genetic_damage > 0 ? ", temporarily weakening our genomes." : "."]", "You hear the organic matter ripping and tearing!") + H.visible_message("[H] casts off their [suit_name_simple]!", "We cast off our [suit_name_simple].", "You hear the organic matter ripping and tearing!") H.temporarilyRemoveItemFromInventory(H.head, TRUE) //The qdel on dropped() takes care of it H.temporarilyRemoveItemFromInventory(H.wear_suit, TRUE) H.update_inv_wear_suit() @@ -100,7 +98,6 @@ H.add_splatter_floor() playsound(H.loc, 'sound/effects/splat.ogg', 50, 1) //So real sounds - changeling.geneticdamage += genetic_damage //Casting off a space suit leaves you weak for a few seconds. changeling.chem_recharge_slowdown -= recharge_slowdown return 1 @@ -139,9 +136,7 @@ helptext = "We may retract our armblade in the same manner as we form it. Cannot be used while in lesser form." chemical_cost = 20 dna_cost = 2 - genetic_damage = 10 req_human = 1 - max_genetic_damage = 20 weapon_type = /obj/item/weapon/melee/arm_blade weapon_name_simple = "blade" @@ -217,9 +212,7 @@ and Harm will stun it, and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form." chemical_cost = 10 dna_cost = 2 - genetic_damage = 5 req_human = 1 - max_genetic_damage = 10 weapon_type = /obj/item/weapon/gun/magic/tentacle weapon_name_simple = "tentacle" silent = TRUE @@ -381,9 +374,7 @@ helptext = "Organic tissue cannot resist damage forever; the shield will break after it is hit too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form." chemical_cost = 20 dna_cost = 1 - genetic_damage = 12 req_human = 1 - max_genetic_damage = 20 weapon_type = /obj/item/weapon/shield/changeling weapon_name_simple = "shield" @@ -430,12 +421,10 @@ /obj/effect/proc_holder/changeling/suit/organic_space_suit name = "Organic Space Suit" desc = "We grow an organic suit to protect ourselves from space exposure." - helptext = "We must constantly repair our form to make it space-proof, reducing chemical production while we are protected. Retreating the suit damages our genomes. Cannot be used in lesser form." + helptext = "We must constantly repair our form to make it space-proof, reducing chemical production while we are protected. Cannot be used in lesser form." chemical_cost = 20 dna_cost = 2 - genetic_damage = 8 req_human = 1 - max_genetic_damage = 20 suit_type = /obj/item/clothing/suit/space/changeling helmet_type = /obj/item/clothing/head/helmet/space/changeling @@ -477,12 +466,10 @@ /obj/effect/proc_holder/changeling/suit/armor name = "Chitinous Armor" desc = "We turn our skin into tough chitin to protect us from damage." - helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Retreating the armor damages our genomes. Cannot be used in lesser form." + helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Cannot be used in lesser form." chemical_cost = 20 dna_cost = 1 - genetic_damage = 11 req_human = 1 - max_genetic_damage = 20 recharge_slowdown = 0.25 suit_type = /obj/item/clothing/suit/armor/changeling diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index c44a32c24d..ad6bf81e7c 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -40,10 +40,9 @@ return if(!AStar(user, target.loc, /turf/proc/Distance, user.mind.changeling.sting_range, simulated_only = 0)) return - if(target.mind && target.mind.changeling) - sting_feedback(user,target) - take_chemical_cost(user.mind.changeling) - return + if(target.mind && target.mind.changeling) + sting_feedback(user, target) + user.mind.changeling.chem_charges -= chemical_cost return 1 /obj/effect/proc_holder/changeling/sting/sting_feedback(mob/user, mob/target) @@ -62,7 +61,6 @@ sting_icon = "sting_transform" chemical_cost = 40 dna_cost = 3 - genetic_damage = 100 var/datum/changelingprofile/selected_dna = null /obj/effect/proc_holder/changeling/sting/transformation/Click() @@ -117,8 +115,6 @@ sting_icon = "sting_armblade" chemical_cost = 20 dna_cost = 1 - genetic_damage = 20 - max_genetic_damage = 10 /obj/item/weapon/melee/arm_blade/false desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless." diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index f9aca83d04..9d0b095cc2 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -5,7 +5,6 @@ dna_cost = 0 req_dna = 1 req_human = 1 - max_genetic_damage = 3 /obj/item/clothing/glasses/changeling name = "flesh" diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 7fccb37d3c..531cc873f0 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -75,7 +75,7 @@ Credit where due: /proc/remove_servant_of_ratvar(mob/living/L, silent = FALSE) if(!L || !L.mind) return - var/datum/antagonist/clockcult/clock_datum = L.mind.has_antag_datum(/datum/antagonist/clockcult) + var/datum/antagonist/clockcult/clock_datum = L.mind.has_antag_datum(ANTAG_DATUM_CLOCKCULT) if(!clock_datum) return FALSE clock_datum.silent = silent @@ -146,6 +146,7 @@ Credit where due: Rusting eternally in the Celestial Derelict, Ratvar has formed a covenant of mortals, with you as one of its members. As one of the Justiciar's servants, you are to work to the best of your \ ability to assist in completion of His agenda. You may not know the specifics of how to do so, but luckily you have a vessel to help you learn." to_chat(M, greeting_text) + M.playsound_local('sound/ambience/antag/ClockCultAlr.ogg',100,0) return 1 /datum/game_mode/proc/equip_servant(mob/living/L) //Grants a clockwork slab to the mob, with one of each component diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 6c56295c05..cf709f09b0 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -54,8 +54,11 @@ clockwork_desc = "A sigil that will stun the next non-Servant to cross it." icon_state = "sigildull" layer = HIGH_SIGIL_LAYER - alpha = 60 + alpha = 75 color = "#FAE48C" + light_range = 1.4 + light_power = 1 + light_color = "#FAE48C" sigil_name = "Sigil of Transgression" /obj/effect/clockwork/sigil/transgression/sigil_effects(mob/living/L) @@ -93,10 +96,6 @@ sigil_name = "Sigil of Submission" var/glow_type -/obj/effect/clockwork/sigil/submission/New() - ..() - update_light() - /obj/effect/clockwork/sigil/submission/proc/post_channel(mob/living/L) /obj/effect/clockwork/sigil/submission/sigil_effects(mob/living/L) @@ -202,6 +201,21 @@ and [structure_number] Clockwork Structure[structure_number == 1 ? "":"s"] [structure_number == 1 ? "is":"are"] in range.
") if(iscyborg(user)) to_chat(user, "You can recharge from the [sigil_name] by crossing it.") + else if(!GLOB.ratvar_awakens) + to_chat(user, "Hitting the [sigil_name] with brass sheets will convert them to power at a rate of 1 brass sheet to [POWER_FLOOR]W power.") + if(!GLOB.ratvar_awakens) + to_chat(user, "You can recharge Clockwork Proselytizers from the [sigil_name].") + +/obj/effect/clockwork/sigil/transmission/attackby(obj/item/I, mob/living/user, params) + if(is_servant_of_ratvar(user) && istype(I, /obj/item/stack/tile/brass) && !GLOB.ratvar_awakens) + var/obj/item/stack/tile/brass/B = I + user.visible_message("[user] places [B] on [src], causing it to disintegrate into glowing orange energy!", \ + "You charge the [sigil_name] with [B], providing it with [B.amount * POWER_FLOOR]W of power.") + modify_charge(-(B.amount * POWER_FLOOR)) + playsound(src, 'sound/effects/light_flicker.ogg', (B.amount * POWER_FLOOR) * 0.01, 1) + qdel(B) + return TRUE + return ..() /obj/effect/clockwork/sigil/transmission/sigil_effects(mob/living/L) if(is_servant_of_ratvar(L)) @@ -214,9 +228,7 @@ if(!cyborg_checks(cyborg)) return to_chat(cyborg, "You start to charge from the [sigil_name]...") - if(!do_after(cyborg, 50, target = src)) - return - if(!cyborg_checks(cyborg)) + if(!do_after(cyborg, 50, target = src, extra_checks = CALLBACK(src, .proc/cyborg_checks, cyborg, TRUE))) return var/giving_power = min(Floor(cyborg.cell.maxcharge - cyborg.cell.charge, MIN_CLOCKCULT_POWER), power_charge) //give the borg either all our power or their missing power floored to MIN_CLOCKCULT_POWER if(modify_charge(giving_power)) @@ -228,23 +240,27 @@ animate(cyborg, color = previous_color, time = 100) addtimer(CALLBACK(cyborg, /atom/proc/update_atom_colour), 100) -/obj/effect/clockwork/sigil/transmission/proc/cyborg_checks(mob/living/silicon/robot/cyborg) +/obj/effect/clockwork/sigil/transmission/proc/cyborg_checks(mob/living/silicon/robot/cyborg, silent) if(!cyborg.cell) - to_chat(cyborg, "You have no cell!") + if(!silent) + to_chat(cyborg, "You have no cell!") return FALSE if(!power_charge) - to_chat(cyborg, "The [sigil_name] has no stored power!") + if(!silent) + to_chat(cyborg, "The [sigil_name] has no stored power!") return FALSE if(cyborg.cell.charge > cyborg.cell.maxcharge - MIN_CLOCKCULT_POWER) - to_chat(cyborg, "You are already at maximum charge!") + if(!silent) + to_chat(cyborg, "You are already at maximum charge!") return FALSE if(cyborg.has_status_effect(STATUS_EFFECT_POWERREGEN)) - to_chat(cyborg, "You are already regenerating power!") + if(!silent) + to_chat(cyborg, "You are already regenerating power!") return FALSE return TRUE -/obj/effect/clockwork/sigil/transmission/New() - ..() +/obj/effect/clockwork/sigil/transmission/Initialize() + . = ..() update_glow() /obj/effect/clockwork/sigil/transmission/proc/modify_charge(amount) @@ -265,7 +281,7 @@ if(!power_charge) set_light(0) else - set_light(round(alpha*0.02, 1), round(alpha*0.005, 1)) + set_light(max(alpha*0.02, 1.4), max(alpha*0.01, 0.1)) //Vitality Matrix: Drains health from non-servants to heal or even revive servants. /obj/effect/clockwork/sigil/vitality @@ -299,8 +315,7 @@ if((is_servant_of_ratvar(L) && L.suiciding) || sigil_active) return visible_message("[src] begins to glow bright blue!") - animate(src, alpha = 255, time = 10) - addtimer(CALLBACK(src, .proc/update_alpha), 10) + animate(src, alpha = 255, time = 10, flags = ANIMATION_END_NOW) //we may have a previous animation going. finish it first, then do this one without delay. sleep(10) //as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || vitality))) && get_turf(L) == get_turf(src)) @@ -369,12 +384,4 @@ animation_number = initial(animation_number) sigil_active = FALSE visible_message("[src] slowly stops glowing!") - if(sigil_active || alpha == 255) - animate(src, alpha = initial(alpha), time = 10) - addtimer(CALLBACK(src, .proc/update_alpha), 10) - -/obj/effect/clockwork/sigil/vitality/proc/update_alpha() - if(sigil_active) - alpha = 255 - else - alpha = initial(alpha) + animate(src, alpha = initial(alpha), time = 10, flags = ANIMATION_END_NOW) diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm index 1c49d36693..5c1d3fb5fb 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm @@ -180,17 +180,26 @@ return procure_gateway(invoker, time_duration, gateway_uses, two_way) var/istargetobelisk = istype(target, /obj/structure/destructible/clockwork/powered/clockwork_obelisk) var/issrcobelisk = istype(src, /obj/structure/destructible/clockwork/powered/clockwork_obelisk) - if(issrcobelisk && !anchored) - to_chat(invoker, "[src] is no longer secured!") - return FALSE + if(issrcobelisk) + if(!anchored) + to_chat(invoker, "[src] is no longer secured!") + return FALSE + var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/CO = src //foolish as I am, how I set this proc up makes substypes unfeasible + if(CO.active) + to_chat(invoker, "[src] is now sustaining a gateway!") + return FALSE if(istargetobelisk) if(!target.anchored) to_chat(invoker, "That [target.name] is no longer secured!") return procure_gateway(invoker, time_duration, gateway_uses, two_way) var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/CO = target + if(CO.active) + to_chat(invoker, "That [target.name] is sustaining a gateway, and cannot recieve another!") + return procure_gateway(invoker, time_duration, gateway_uses, two_way) var/efficiency = CO.get_efficiency_mod() gateway_uses = round(gateway_uses * (2 * efficiency), 1) time_duration = round(time_duration * (2 * efficiency), 1) + CO.active = TRUE //you'd be active in a second but you should update immediately invoker.visible_message("The air in front of [invoker] ripples before suddenly tearing open!", \ "With a word, you rip open a [two_way ? "two-way":"one-way"] rift to [input_target_key]. It will last for [time_duration / 10] seconds and has [gateway_uses] use[gateway_uses > 1 ? "s" : ""].") var/obj/effect/clockwork/spatial_gateway/S1 = new(issrcobelisk ? get_turf(src) : get_step(get_turf(invoker), invoker.dir)) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm index e3c456460c..120ed0ff60 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/component_helpers.dm @@ -22,6 +22,12 @@ else for(var/i in GLOB.clockwork_component_cache) .[i] = max(MAX_COMPONENTS_BEFORE_RAND - LOWER_PROB_PER_COMPONENT*GLOB.clockwork_component_cache[i], 1) + for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in GLOB.all_clockwork_objects) + if(G.still_needs_components()) + for(var/i in G.required_components) + if(!G.required_components[i]) + . -= i + break . = pickweight(.) //returns a component name from a component id @@ -37,6 +43,8 @@ return "Replicant Alloy" if(HIEROPHANT_ANSIBLE) return "Hierophant Ansible" + else + return null //returns a component acronym from a component id /proc/get_component_acronym(id) @@ -51,6 +59,8 @@ return "RA" if(HIEROPHANT_ANSIBLE) return "HA" + else + return null //returns a component id from a component name /proc/get_component_id(name) @@ -65,6 +75,8 @@ return REPLICANT_ALLOY if("Hierophant Ansible") return HIEROPHANT_ANSIBLE + else + return null //returns a component spanclass from a component id /proc/get_component_span(id) @@ -121,6 +133,8 @@ return /obj/effect/overlay/temp/ratvar/component/alloy if(HIEROPHANT_ANSIBLE) return /obj/effect/overlay/temp/ratvar/component/ansible + else + return null //returns a type for a component from a component id /proc/get_component_type(id) @@ -134,4 +148,6 @@ if(REPLICANT_ALLOY) return /obj/item/clockwork/component/replicant_alloy if(HIEROPHANT_ANSIBLE) - return /obj/item/clockwork/component/hierophant_ansible \ No newline at end of file + return /obj/item/clockwork/component/hierophant_ansible + else + return null \ No newline at end of file diff --git a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm index c6954bb67e..529f38d832 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm @@ -286,6 +286,28 @@ user.visible_message("[user]'s [proselytizer.name] stops covering [src] with glowing orange energy.", \ "You finish repairing [src]. It is now at [obj_integrity]/[max_integrity] integrity.") +//Hitting a sigil of transmission will try to charge from it. +/obj/effect/clockwork/sigil/transmission/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) + . = TRUE + var/list/charge_values = list() + if(!proselytizer.sigil_charge_checks(charge_values, src, user)) + return + user.visible_message("[user]'s [proselytizer.name] starts draining glowing orange energy from [src]...", \ + "You start recharging your [proselytizer.name]...") + proselytizer.recharging = src + while(proselytizer && user && src) + if(!do_after(user, 10, target = src, extra_checks = CALLBACK(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/sigil_charge_checks, charge_values, src, user, TRUE))) + break + modify_charge(charge_values["power_gain"]) + proselytizer.modify_stored_power(charge_values["power_gain"]) + playsound(src, 'sound/effects/light_flicker.ogg', charge_values["power_gain"] * 0.1, 1) + + if(proselytizer) + proselytizer.recharging = null + if(user) + user.visible_message("[user]'s [proselytizer.name] stops draining glowing orange energy from [src].", \ + "You finish recharging your [proselytizer.name]. It now contains [proselytizer.get_power()]W/[proselytizer.get_max_power()]W power.") + //Proselytizer mob heal proc, to avoid as much copypaste as possible. /mob/living/proc/proselytizer_heal(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) var/list/repair_values = list() diff --git a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm b/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm index fd18393898..57a68078df 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/slab_abilities.dm @@ -26,7 +26,7 @@ ranged_mousepointer = 'icons/effects/geis_target.dmi' /obj/effect/proc_holder/slab/geis/InterceptClickOn(mob/living/caller, params, atom/target) - if(target == slab || ..()) + if(..()) return TRUE var/turf/T = ranged_ability_user.loc @@ -148,7 +148,7 @@ ranged_mousepointer = 'icons/effects/volt_target.dmi' /obj/effect/proc_holder/slab/volt/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) + if(target == slab || ..()) //we can't cancel return TRUE var/turf/T = ranged_ability_user.loc diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm index 25e2138b81..60df56b6ef 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm @@ -12,6 +12,7 @@ var/uses_power = TRUE var/metal_to_power = FALSE var/repairing = null //what we're currently repairing, if anything + var/obj/effect/clockwork/sigil/transmission/recharging = null //the sigil we're charging from, if any var/speed_multiplier = 1 //how fast this proselytizer works var/charge_rate = MIN_CLOCKCULT_POWER //how much power we gain every two seconds var/charge_delay = 2 //how many proccess ticks remain before we can start to charge @@ -140,10 +141,11 @@ /obj/item/clockwork/clockwork_proselytizer/attack_self(mob/living/user) if(is_servant_of_ratvar(user)) - if(!can_use_power(POWER_WALL_TOTAL)) - to_chat(user, "[src] requires [POWER_WALL_TOTAL]W of power to produce brass sheets!") - return - modify_stored_power(-POWER_WALL_TOTAL) + if(uses_power) + if(!can_use_power(POWER_WALL_TOTAL)) + to_chat(user, "[src] requires [POWER_WALL_TOTAL]W of power to produce brass sheets!") + return + modify_stored_power(-POWER_WALL_TOTAL) playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) new/obj/item/stack/tile/brass(user.loc, 5) to_chat(user, "You user [stored_power ? "some":"all"] of [src]'s power to produce some brass sheets. It now stores [get_power()]W/[get_max_power()]W of power.") @@ -182,6 +184,9 @@ if(repairing) to_chat(user, "You are currently repairing [repairing] with [src]!") return FALSE + if(recharging) + to_chat(user, "You are currently recharging [src] from the [recharging.sigil_name]!") + return FALSE var/list/proselytize_values = target.proselytize_vals(user, src) //relevant values for proselytizing stuff, given as an associated list if(!islist(proselytize_values)) if(proselytize_values != TRUE) //if we get true, fail, but don't send a message for whatever reason @@ -237,7 +242,7 @@ /obj/item/clockwork/clockwork_proselytizer/proc/proselytize_checks(list/proselytize_values, atom/target, expected_type, mob/user, silent) //checked constantly while proselytizing if(!islist(proselytize_values) || !target || QDELETED(target) || !user) return FALSE - if(repairing) + if(repairing || recharging) return FALSE if(target.type != expected_type) return FALSE @@ -296,3 +301,20 @@ [round(repair_values["amount_to_heal"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER)]W to fully repair [target == user ? "yourself" : "[target.p_them()]"]!") return FALSE return TRUE + +//checked constantly while charging from a sigil +/obj/item/clockwork/clockwork_proselytizer/proc/sigil_charge_checks(list/charge_values, obj/effect/clockwork/sigil/transmission/sigil, mob/user, silent) + if(!islist(charge_values) || !sigil || QDELETED(sigil) || !user) + return FALSE + if(can_use_power(RATVAR_POWER_CHECK)) + return FALSE + charge_values["power_gain"] = Clamp(sigil.power_charge, 0, POWER_WALL_MINUS_FLOOR) + if(!charge_values["power_gain"]) + if(!silent) + to_chat(user, "The [sigil.sigil_name] contains no power!") + return FALSE + if(stored_power + charge_values["power_gain"] > max_power) + if(!silent) + to_chat(user, "Your [name] contains too much power to charge from the [sigil.sigil_name]!") + return FALSE + return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index 35caabab5a..8b3aa01533 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -326,13 +326,19 @@ if(production_time != SLAB_PRODUCTION_TIME+SLAB_SLOWDOWN_MAXIMUM) production_text_addon = ", which increases for each human or silicon servant above [SCRIPT_SERVANT_REQ]" production_time = production_time/600 - var/production_text = "[round(production_time)] minute\s" + var/list/production_text + if(round(production_time)) + production_text = list("[round(production_time)] minute\s") if(production_time != round(production_time)) production_time -= round(production_time) production_time *= 60 - production_text += " and [round(production_time, 1)] second\s" + if(!LAZYLEN(production_text)) + production_text = list("[round(production_time, 1)] second\s") + else + production_text += " and [round(production_time, 1)] second\s" production_text += "" production_text += production_text_addon + production_text = production_text.Join() textlist = list("
Chetr nyy hagehguf-naq-ubabe Ratvar.

\ \ diff --git a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm index 1b6c80af73..6d17fe4e74 100644 --- a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm +++ b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm @@ -129,6 +129,7 @@ if(ishuman(owner)) var/mob/living/carbon/human/H = owner apply_eye_damage(H) + return ..() /datum/status_effect/wraith_spectacles/tick() if(!ishuman(owner)) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm index a5e7dee4cb..d3a33c0c40 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -14,8 +14,7 @@ verb_ask = "requests" verb_exclaim = "proclaims" verb_yell = "harangues" - initial_languages = list(/datum/language/common, /datum/language/ratvar) - only_speaks_language = /datum/language/ratvar + initial_language_holder = /datum/language_holder/clockmob bubble_icon = "clock" light_color = "#E42742" death_sound = 'sound/magic/clockwork/anima_fragment_death.ogg' diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm index 25576f5710..21da8fab00 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -10,7 +10,7 @@ It will penetrate mindshield implants once before disappearing." invocations = list("Divinity, enslave...", "...all who trespass here!") channel_time = 70 - consumed_components = list(BELLIGERENT_EYE = 2, GEIS_CAPACITOR = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(BELLIGERENT_EYE = 4, GEIS_CAPACITOR = 2, HIEROPHANT_ANSIBLE = 2) whispered = TRUE object_path = /obj/effect/clockwork/sigil/submission/accession prevent_path = /obj/effect/clockwork/sigil/submission @@ -32,7 +32,7 @@ It grows faster to invoke with more adjacent Servants." invocations = list("Shield us...", "...with the...", "... fragments of Engine!") channel_time = 100 - consumed_components = list(VANGUARD_COGWHEEL = 2, REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(VANGUARD_COGWHEEL = 4, REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 2) usage_tip = "This scripture will replace all weaker armor worn by affected Servants." tier = SCRIPTURE_APPLICATION multiple_invokers_used = TRUE @@ -99,7 +99,7 @@ If it remains close to you, you will gradually regain health up to a low amount, but it will die if it goes too far from you." invocations = list("Fright's will...", "...call forth...") channel_time = 100 - consumed_components = list(BELLIGERENT_EYE = 1, VANGUARD_COGWHEEL = 1, GEIS_CAPACITOR = 2) + consumed_components = list(BELLIGERENT_EYE = 2, VANGUARD_COGWHEEL = 2, GEIS_CAPACITOR = 4) usage_tip = "Marauders are useful as personal bodyguards and frontline warriors." tier = SCRIPTURE_APPLICATION primary_component = GEIS_CAPACITOR @@ -135,7 +135,7 @@ if(!check_special_requirements()) return FALSE to_chat(invoker, "The tendril shivers slightly as it selects a marauder...") - var/list/marauder_candidates = pollCandidates("Do you want to play as the clockwork marauder of [invoker.real_name]?", ROLE_SERVANT_OF_RATVAR, null, FALSE, 50, POLL_IGNORE_CLOCKWORK_MARAUDER) + var/list/marauder_candidates = pollGhostCandidates("Do you want to play as the clockwork marauder of [invoker.real_name]?", ROLE_SERVANT_OF_RATVAR, null, FALSE, 50, POLL_IGNORE_CLOCKWORK_MARAUDER) if(!check_special_requirements()) return FALSE if(!marauder_candidates.len) @@ -160,7 +160,7 @@ and exceptional speed, though taking damage will temporarily slow it down." invocations = list("Call forth...", "...the soldiers of Armorer.") channel_time = 80 - consumed_components = list(BELLIGERENT_EYE = 1, VANGUARD_COGWHEEL = 1, REPLICANT_ALLOY = 2) + consumed_components = list(BELLIGERENT_EYE = 2, VANGUARD_COGWHEEL = 2, REPLICANT_ALLOY = 4) object_path = /obj/structure/destructible/clockwork/shell/fragment creator_message = "You form an anima fragment, a powerful soul vessel receptacle." observer_message = "The slab disgorges a puddle of black metal that expands and forms into a strange shell!" @@ -179,7 +179,7 @@ desc = "Places a sigil that stores energy to power clockwork structures." invocations = list("Divinity...", "...power our creations!") channel_time = 70 - consumed_components = list(VANGUARD_COGWHEEL = 1, GEIS_CAPACITOR = 1, HIEROPHANT_ANSIBLE = 2) + consumed_components = list(VANGUARD_COGWHEEL = 2, GEIS_CAPACITOR = 2, HIEROPHANT_ANSIBLE = 4) whispered = TRUE object_path = /obj/effect/clockwork/sigil/transmission creator_message = "A sigil silently appears below you. It will automatically power clockwork structures near it." @@ -199,7 +199,7 @@ desc = "Creates a clockwork totem that sabotages nearby machinery and funnels drained power into nearby Sigils of Transmission or the area's APC." invocations = list("May this totem...", "...shroud the false suns!") channel_time = 80 - consumed_components = list(BELLIGERENT_EYE = 3, REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(BELLIGERENT_EYE = 5, REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 2) object_path = /obj/structure/destructible/clockwork/powered/interdiction_lens creator_message = "You form an interdiction lens, which disrupts cameras and radios and drains power." observer_message = "A brass totem rises from the ground, a purple gem appearing in its center!" @@ -218,22 +218,22 @@ /datum/clockwork_scripture/create_object/mania_motor descname = "Powered Structure, Area Denial" name = "Mania Motor" - desc = "Creates a mania motor which will cause brain damage and hallucinations in nearby non-Servant humans. It will also try to convert humans directly adjecent to the motor." + desc = "Creates a mania motor which causes minor damage and a variety of negative mental effects in nearby non-Servant humans, potentially up to and including conversion." invocations = list("May this transmitter...", "...break the will of all who oppose us!") channel_time = 80 - consumed_components = list(GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(GEIS_CAPACITOR = 5, REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 2) object_path = /obj/structure/destructible/clockwork/powered/mania_motor - creator_message = "You form a mania motor which will cause brain damage and hallucinations in nearby humans while active." + creator_message = "You form a mania motor, which causes minor damage and negative mental effects in non-Servants." observer_message = "A two-pronged machine rises from the ground!" invokers_required = 2 multiple_invokers_used = TRUE - usage_tip = "Eligible non-Servant humans next to the motor will be converted at an additional power cost. It will also cure hallucinations and brain damage in nearby Servants." + usage_tip = "It will also cure hallucinations and brain damage in nearby Servants." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE primary_component = GEIS_CAPACITOR sort_priority = 8 quickbind = TRUE - quickbind_desc = "Creates a Mania Motor, which can convert adjacent non-Servants with power." + quickbind_desc = "Creates a Mania Motor, which causes minor damage and negative mental effects in non-Servants." //Tinkerer's Daemon: Creates an efficient machine that rapidly produces components at a power cost. @@ -244,7 +244,7 @@ and there is at least one existing cache." invocations = list("May this generator...", "...collect Engine parts that yet hold greatness!") channel_time = 80 - consumed_components = list(BELLIGERENT_EYE = 1, GEIS_CAPACITOR = 1, REPLICANT_ALLOY = 3) + consumed_components = list(BELLIGERENT_EYE = 2, GEIS_CAPACITOR = 2, REPLICANT_ALLOY = 5) object_path = /obj/structure/destructible/clockwork/powered/tinkerers_daemon creator_message = "You form a tinkerer's daemon which can rapidly collect components at a power cost." invokers_required = 2 @@ -278,7 +278,7 @@ desc = "Creates a clockwork obelisk that can broadcast messages over the Hierophant Network or open a Spatial Gateway to any living Servant or clockwork obelisk." invocations = list("May this obelisk...", "...take us to all places!") channel_time = 80 - consumed_components = list(BELLIGERENT_EYE = 1, VANGUARD_COGWHEEL = 1, HIEROPHANT_ANSIBLE = 3) + consumed_components = list(BELLIGERENT_EYE = 2, VANGUARD_COGWHEEL = 2, HIEROPHANT_ANSIBLE = 5) object_path = /obj/structure/destructible/clockwork/powered/clockwork_obelisk creator_message = "You form a clockwork obelisk which can broadcast messages or produce Spatial Gateways." observer_message = "A brass obelisk appears hanging in midair!" diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index 023cd50dd1..b49b0c5819 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -17,23 +17,10 @@ sort_priority = 1 quickbind = TRUE quickbind_desc = "Forces nearby non-Servants to walk, doing minor damage with each chant.
Maximum 15 chants." - var/noncultist_damage = 2 //damage per chant to noncultists - var/cultist_damage = 8 //damage per chant to non-walking cultists /datum/clockwork_scripture/channeled/belligerent/chant_effects(chant_number) for(var/mob/living/carbon/C in hearers(7, invoker)) - var/number_legs = C.get_num_legs() - if(!is_servant_of_ratvar(C) && !C.null_rod_check() && number_legs) //you have legs right - C.apply_damage(noncultist_damage * 0.5, BURN, "l_leg") - C.apply_damage(noncultist_damage * 0.5, BURN, "r_leg") - if(C.m_intent != MOVE_INTENT_WALK) - if(!iscultist(C)) - to_chat(C, "Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!") - else //Cultists take extra burn damage - to_chat(C, "Your leg[number_legs > 1 ? "s burn":" burns"] with pain!") - C.apply_damage(cultist_damage * 0.5, BURN, "l_leg") - C.apply_damage(cultist_damage * 0.5, BURN, "r_leg") - C.toggle_move_intent() + C.apply_status_effect(STATUS_EFFECT_BELLIGERENT) return TRUE @@ -272,7 +259,7 @@ var/static/prev_cost = 0 /datum/clockwork_scripture/create_object/tinkerers_cache/creation_update() - var/cache_cost_increase = min(round(GLOB.clockwork_caches*0.25), 5) + var/cache_cost_increase = min(round(GLOB.clockwork_caches*0.4), 10) if(cache_cost_increase != prev_cost) prev_cost = cache_cost_increase consumed_components = list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 0) diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm index 0dbd2d46e8..25bedd79d3 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm @@ -9,7 +9,7 @@ desc = "Taps the limitless power of Inath-neq, one of Ratvar's four generals. The benevolence of Inath-Neq will grant complete invulnerability to all Servants in range for fifteen seconds." invocations = list("I call upon you, Vanguard!!", "Let the Resonant Cogs turn once more!!", "Grant me and my allies the strength to vanquish our foes!!") channel_time = 100 - consumed_components = list(VANGUARD_COGWHEEL = 4, GEIS_CAPACITOR = 2, REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 2) + consumed_components = list(VANGUARD_COGWHEEL = 10, GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 3, HIEROPHANT_ANSIBLE = 3) usage_tip = "Servants affected by this scripture are only weak to things that outright destroy bodies, such as bombs or the singularity." tier = SCRIPTURE_REVENANT primary_component = VANGUARD_COGWHEEL @@ -44,7 +44,7 @@ for all non-servant humans on the same z-level as them. The power of this scripture falls off somewhat with distance, and certain things may reduce its effects." invocations = list("I call upon you, Fright!!", "Let your power shatter the sanity of the weak-minded!!", "Let your tendrils hold sway over all!!") channel_time = 150 - consumed_components = list(BELLIGERENT_EYE = 3, VANGUARD_COGWHEEL = 3, GEIS_CAPACITOR = 6, HIEROPHANT_ANSIBLE = 3) + consumed_components = list(BELLIGERENT_EYE = 6, VANGUARD_COGWHEEL = 6, GEIS_CAPACITOR = 10, HIEROPHANT_ANSIBLE = 6) usage_tip = "Causes brain damage, hallucinations, confusion, and dizziness in massive amounts." tier = SCRIPTURE_REVENANT sort_priority = 3 @@ -108,7 +108,7 @@ clockwork proselytizers will charge very rapidly." invocations = list("I call upon you, Armorer!!", "Let your machinations reign on this miserable station!!", "Let your power flow through the tools of your master!!") channel_time = 150 - consumed_components = list(BELLIGERENT_EYE = 3, VANGUARD_COGWHEEL = 3, GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 6) + consumed_components = list(BELLIGERENT_EYE = 6, VANGUARD_COGWHEEL = 6, GEIS_CAPACITOR = 6, REPLICANT_ALLOY = 10) usage_tip = "Ocular wardens will become empowered, clockwork proselytizers will require no alloy, tinkerer's daemons will produce twice as quickly, \ and interdiction lenses, mania motors, tinkerer's daemons, and clockwork obelisks will all require no power." tier = SCRIPTURE_REVENANT @@ -153,7 +153,7 @@ will be struck by devastating lightning bolts." invocations = list("I call upon you, Amperage!!", "Let your energy flow through me!!", "Let your boundless power shatter stars!!") channel_time = 100 - consumed_components = list(BELLIGERENT_EYE = 2, GEIS_CAPACITOR = 2, REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 4) + consumed_components = list(BELLIGERENT_EYE = 3, GEIS_CAPACITOR = 3, REPLICANT_ALLOY = 3, HIEROPHANT_ANSIBLE = 10) usage_tip = "Struck targets will also be knocked down for about sixteen seconds." tier = SCRIPTURE_REVENANT primary_component = HIEROPHANT_ANSIBLE diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm index f7fcc8c299..bc5ec1b9d8 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm @@ -9,7 +9,7 @@ desc = "Forms an automatic short-range turret which will automatically attack nearby unrestrained non-Servants that can see it." invocations = list("Guardians...", "...of the Engine...", "...defend us!") channel_time = 120 - consumed_components = list(BELLIGERENT_EYE = 1, REPLICANT_ALLOY = 1) + consumed_components = list(BELLIGERENT_EYE = 2, REPLICANT_ALLOY = 1) object_path = /obj/structure/destructible/clockwork/ocular_warden creator_message = "You form an ocular warden, which will automatically attack nearby unrestrained non-Servants that can see it." observer_message = "A brass eye takes shape and slowly rises into the air, its red iris glaring!" @@ -36,7 +36,7 @@ desc = "Creates a small shell fitted for soul vessels. Adding an active soul vessel to it results in a small construct with tools and an inbuilt proselytizer." invocations = list("Call forth...", "...the workers of Armorer.") channel_time = 60 - consumed_components = list(BELLIGERENT_EYE = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(BELLIGERENT_EYE = 2, HIEROPHANT_ANSIBLE = 1) object_path = /obj/structure/destructible/clockwork/shell/cogscarab creator_message = "You form a cogscarab, a constructor soul vessel receptacle." observer_message = "The slab disgorges a puddle of black metal that contracts and forms into a strange shell!" @@ -56,7 +56,7 @@ Matrices have drained from non-Servants. Dead Servants can be revived by this sigil if there is vitality equal to the target Servant's non-oxygen damage." invocations = list("Divinity...", "...steal their life...", "...for these shells!") channel_time = 60 - consumed_components = list(BELLIGERENT_EYE = 1, VANGUARD_COGWHEEL = 1) + consumed_components = list(BELLIGERENT_EYE = 1, VANGUARD_COGWHEEL = 2) whispered = TRUE object_path = /obj/effect/clockwork/sigil/vitality creator_message = "A vitality matrix appears below you. It will drain life from non-Servants and heal Servants that cross it." @@ -77,7 +77,7 @@ chant_invocations = list("Mend our dents!", "Heal our scratches!", "Repair our gears!") chant_amount = 10 chant_interval = 20 - consumed_components = list(VANGUARD_COGWHEEL = 1, REPLICANT_ALLOY = 1) + consumed_components = list(VANGUARD_COGWHEEL = 2, REPLICANT_ALLOY = 1) usage_tip = "This is a very effective way to rapidly reinforce a base after an attack." tier = SCRIPTURE_SCRIPT primary_component = VANGUARD_COGWHEEL @@ -177,6 +177,7 @@ new /obj/effect/overlay/temp/heal(T, "#1E8CE1") else break + new /obj/effect/overlay/temp/ratvar/mending_mantra(get_turf(invoker)) return TRUE @@ -187,7 +188,7 @@ desc = "Places a luminous sigil that will enslave any valid beings standing on it after a time." invocations = list("Divinity, enlighten...", "...those who trespass here!") channel_time = 60 - consumed_components = list(BELLIGERENT_EYE = 1, GEIS_CAPACITOR = 1) + consumed_components = list(BELLIGERENT_EYE = 1, GEIS_CAPACITOR = 2) whispered = TRUE object_path = /obj/effect/clockwork/sigil/submission creator_message = "A luminous sigil appears below you. The next non-servant to cross it will be enslaved after a brief time if they do not move." @@ -207,7 +208,7 @@ desc = "Forms an ancient positronic brain with an overriding directive to serve Ratvar." invocations = list("Herd the souls of...", "...the blasphemous damned!") channel_time = 30 - consumed_components = list(VANGUARD_COGWHEEL = 1, GEIS_CAPACITOR = 1) + consumed_components = list(VANGUARD_COGWHEEL = 1, GEIS_CAPACITOR = 2) whispered = TRUE object_path = /obj/item/device/mmi/posibrain/soul_vessel creator_message = "You form a soul vessel, which can be used in-hand to attract spirits, or used on an unconscious or dead human to extract their consciousness." @@ -227,7 +228,7 @@ desc = "Forms a device that, when used on certain objects, converts them into their Ratvarian equivalents. It requires power to function." invocations = list("With this device...", "...his presence shall be made known.") channel_time = 20 - consumed_components = list(GEIS_CAPACITOR = 1, REPLICANT_ALLOY = 1) + consumed_components = list(GEIS_CAPACITOR = 1, REPLICANT_ALLOY = 2) whispered = TRUE object_path = /obj/item/clockwork/clockwork_proselytizer/preloaded creator_message = "You form a clockwork proselytizer." @@ -248,7 +249,7 @@ vanish three minutes after being summoned." invocations = list("Grant me...", "...the might of brass!") channel_time = 20 - consumed_components = list(REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 1) whispered = TRUE usage_tip = "You can impale human targets with the spear by pulling them, then attacking. Throwing the spear at a mob will do massive damage and stun them, but break the spear." tier = SCRIPTURE_SCRIPT @@ -307,7 +308,7 @@ Each servant assisting in the invocation adds one additional use and four additional seconds to the gateway's uses and duration." invocations = list("Spatial Gateway...", "...activate!") channel_time = 80 - consumed_components = list(VANGUARD_COGWHEEL = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(VANGUARD_COGWHEEL = 1, HIEROPHANT_ANSIBLE = 2) multiple_invokers_used = TRUE multiple_invokers_optional = TRUE usage_tip = "This gateway is strictly one-way and will only allow things through the invoker's portal." @@ -356,7 +357,7 @@ chant_invocations = list("Use charge to kill!", "Slay with power!", "Hunt with energy!") chant_amount = 4 chant_interval = 5 - consumed_components = list(GEIS_CAPACITOR = 1, HIEROPHANT_ANSIBLE = 1) + consumed_components = list(GEIS_CAPACITOR = 1, HIEROPHANT_ANSIBLE = 2) usage_tip = "Though it requires you to stand still, this scripture can do massive damage." tier = SCRIPTURE_SCRIPT primary_component = HIEROPHANT_ANSIBLE diff --git a/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm b/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm index 2bebb4c9a5..fe96f57885 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm @@ -58,7 +58,7 @@ var/input = stripped_input(usr, "Please choose a message to send over the Hierophant Network.", "Hierophant Broadcast", "") if(!is_servant_of_ratvar(user) || !input || !user.canUseTopic(src, !issilicon(user))) return - if(anchored) + if(!anchored) to_chat(user, "[src] is no longer secured!") return FALSE if(active) @@ -84,7 +84,8 @@ return if(procure_gateway(user, round(100 * get_efficiency_mod(), 1), round(5 * get_efficiency_mod(), 1), 1)) process() - if(!active) + if(!active) //we won't be active if nobody has sent a gateway to us + active = TRUE clockwork_say(user, text2ratvar("Spatial Gateway, activate!")) return return_power(gateway_cost) //if we didn't return above, ie, successfully create a gateway, we give the power back @@ -92,7 +93,8 @@ /obj/structure/destructible/clockwork/powered/clockwork_obelisk/process() if(!anchored) return - if(locate(/obj/effect/clockwork/spatial_gateway) in loc) + var/obj/effect/clockwork/spatial_gateway/SG = locate(/obj/effect/clockwork/spatial_gateway) in loc + if(SG && SG.timerid) //it's a valid gateway, we're active icon_state = active_icon density = 0 active = TRUE diff --git a/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm b/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm index 09372044a9..dd26b5d404 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm @@ -1,8 +1,8 @@ -//Mania Motor: A pair of antenna that, while active, cause braindamage and hallucinations in nearby human mobs. +//Mania Motor: A pair of antenna that, while active, cause a variety of negative mental effects in nearby human mobs. /obj/structure/destructible/clockwork/powered/mania_motor name = "mania motor" desc = "A pair of antenna with what appear to be sockets around the base. It reminds you of an antlion." - clockwork_desc = "A transmitter that allows Sevtug to whisper into the minds of nearby non-servants, causing hallucinations and brain damage as long as it remains powered." + clockwork_desc = "A transmitter that allows Sevtug to whisper into the minds of nearby non-servants, causing a variety of negative mental effects, up to and including conversion." icon_state = "mania_motor_inactive" active_icon = "mania_motor" inactive_icon = "mania_motor_inactive" @@ -16,22 +16,11 @@ /obj/item/clockwork/alloy_shards/small = 2, \ /obj/item/clockwork/component/geis_capacitor/antennae = 1) var/mania_cost = 150 - var/convert_cost = 150 - var/static/list/mania_messages = list("Go nuts.", "Take a crack at crazy.", "Make a bid for insanity.", "Get kooky.", "Move towards mania.", "Become bewildered.", "Wax wild.", \ - "Go round the bend.", "Land in lunacy.", "Try dementia.", "Strive to get a screw loose.") - var/static/list/compel_messages = list("Come closer.", "Approach the transmitter.", "Touch the antennae.", "I always have to deal with idiots. Move towards the mania motor.", \ - "Advance forward and place your head between the antennae - that's all it's good for.", "If you were smarter, you'd be over here already.", "Move FORWARD, you fool.") - var/static/list/convert_messages = list("You won't do. Go to sleep while I tell these nitwits how to convert you.", "You are insufficient. I must instruct these idiots in the art of conversion.", \ - "Oh of course, someone we can't convert. These servants are fools.", "How hard is it to use a Sigil, anyway? All it takes is dragging someone onto it.", \ - "How do they fail to use a Sigil of Accession, anyway?", "Why is it that all servants are this inept?", "It's quite likely you'll be stuck here for a while.") - var/static/list/close_messages = list("Well, you can't reach the motor from THERE, you moron.", "Interesting location. I'd prefer if you went somewhere you could ACTUALLY TOUCH THE ANTENNAE!", \ - "Amazing. You somehow managed to wedge yourself somewhere you can't actually reach the motor from.", "Such a show of idiocy is unparalleled. Perhaps I should put you on display?", \ - "Did you do this on purpose? I can't imagine you doing so accidentally. Oh, wait, I can.", "How is it that such smart creatures can still do something AS STUPID AS THIS!") /obj/structure/destructible/clockwork/powered/mania_motor/examine(mob/user) ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It requires [mania_cost]W to run, and at least [convert_cost]W to attempt to convert humans adjacent to it.") + to_chat(user, "It requires [mania_cost]W to run.") /obj/structure/destructible/clockwork/powered/mania_motor/forced_disable(bad_effects) if(active) @@ -60,82 +49,17 @@ if(!try_use_power(mania_cost)) forced_disable(FALSE) return - var/turf/T = get_turf(src) - var/hum = get_sfx('sound/effects/screech.ogg') //like playsound, same sound for everyone affected var/efficiency = get_efficiency_mod() for(var/mob/living/carbon/human/H in viewers(7, src)) - if(is_servant_of_ratvar(H)) //heals servants of braindamage, hallucination, druggy, dizziness, and confusion - var/brainloss = H.getBrainLoss() - if(brainloss) - H.adjustBrainLoss(-brainloss) - if(H.hallucination) - H.hallucination = 0 - if(H.druggy) - H.adjust_drugginess(-H.druggy) - if(H.dizziness) - H.dizziness = 0 - if(H.confused) - H.confused = 0 - else if(!H.null_rod_check() && H.stat != DEAD) - var/distance = 0 + get_dist(T, get_turf(H)) - var/falloff_distance = min((110) - distance * 10, 80) - var/sound_distance = falloff_distance * 0.5 - var/targetbrainloss = H.getBrainLoss() - if(distance > 3 && prob(falloff_distance * 0.5)) - to_chat(H, "\"[text2ratvar(pick(mania_messages))]\"") - if(distance <= 1) - if(!H.Adjacent(src)) - to_chat(H, "\"[text2ratvar(pick(close_messages))]\"") - H.playsound_local(T, hum, sound_distance, 1) - else if(!try_use_power(convert_cost)) - visible_message("[src]'s antennae fizzle quietly.") - playsound(src, 'sound/effects/light_flicker.ogg', 50, 1) - else - H.playsound_local(T, hum, 80, 1) - if(!H.stat) - if(H.getBrainLoss() < 100) - H.adjustBrainLoss(20 * efficiency) - H.visible_message("[H] reaches out and touches [src].", "You touch [src] involuntarily.") - else - H.Paralyse(3) - else if(is_eligible_servant(H)) - to_chat(H, "\"[text2ratvar("You are mine and his, now.")]\"") - add_servant_of_ratvar(H) - H.Paralyse(5) - else - H.playsound_local(T, hum, sound_distance, 1) - switch(distance) - if(0 to 3) - if(prob(falloff_distance * 0.5)) - if(prob(falloff_distance)) - to_chat(H, "\"[text2ratvar(pick(mania_messages))]\"") - else - to_chat(H, "\"[text2ratvar(pick(compel_messages))]\"") - if(targetbrainloss <= 40) - H.adjustBrainLoss(3 * efficiency) - H.adjust_drugginess(Clamp(7 * efficiency, 0, 50 - H.druggy)) - H.hallucination = min(H.hallucination + (7 * efficiency), 50) - H.dizziness = min(H.dizziness + (3 * efficiency), 20) - H.confused = min(H.confused + (3 * efficiency), 20) - if(3 to 5) - if(targetbrainloss <= 20) - H.adjustBrainLoss(2 * efficiency) - H.adjust_drugginess(Clamp(5 * efficiency, 0, 25 - H.druggy)) - H.hallucination = min(H.hallucination + (5 * efficiency), 25) - H.dizziness = min(H.dizziness + (2 * efficiency), 10) - H.confused = min(H.confused + (2 * efficiency), 10) - if(5 to 6) - if(targetbrainloss <= 10) - H.adjustBrainLoss(1 * efficiency) - H.adjust_drugginess(Clamp(2 * efficiency, 0, 20 - H.druggy)) - H.hallucination = min(H.hallucination + (2 * efficiency), 20) - H.dizziness = min(H.dizziness + (2 * efficiency), 5) - H.confused = min(H.confused + (2 * efficiency), 5) - if(6 to 7) - if(targetbrainloss <= 5) - H.adjustBrainLoss(1 * efficiency) - H.adjust_drugginess(Clamp(2 * efficiency, 0, 10 - H.druggy)) - H.hallucination = min(H.hallucination + (2 * efficiency), 10) - if(7 to INFINITY) - H.adjust_drugginess(Clamp(2 * efficiency, 0, 5 - H.druggy)) - H.hallucination = min(H.hallucination + (2 * efficiency), 5) + if(is_servant_of_ratvar(H)) + continue + var/list/effects = H.has_status_effect_list(STATUS_EFFECT_MANIAMOTOR) + var/datum/status_effect/maniamotor/M + for(var/datum/status_effect/maniamotor/MM in effects) + if(MM.motor == src) + M = MM + break + if(!M) + M = H.apply_status_effect(STATUS_EFFECT_MANIAMOTOR) + M.motor = src + M.severity = Clamp(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY) diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index 614a22a6f5..b82e9a9c85 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -28,7 +28,7 @@ var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert") var/area/A = get_area(src) notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay) - INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0) + INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency..proc/request, null, 0, 0) /obj/structure/destructible/clockwork/massive/ratvar/Destroy() GLOB.ratvar_awakens-- @@ -77,7 +77,7 @@ if(!prey && LAZYLEN(meals)) prey = pick(meals) to_chat(prey, "\"You will do, heretic.\"\n\ - ") + You feel something massive turn its crushing focus to you...") prey << 'sound/effects/ratvar_reveal.ogg' else if((!istype(prey, /obj/singularity/narsie) && prob(10) && LAZYLEN(meals) > 1) || prey.z != z || !(prey in meals)) @@ -117,12 +117,10 @@ if(!isnewplayer(M)) flash_color(M, flash_color="#966400", flash_time=1) shake_camera(M, 4, 3) - var/ratvar_chance = min(SSticker.mode.servants_of_ratvar.len, 50) - var/narsie_chance = SSticker.mode.cult.len - for(var/mob/living/simple_animal/hostile/construct/harvester/C in GLOB.player_list) - narsie_chance++ + var/ratvar_chance = min(LAZYLEN(SSticker.mode.servants_of_ratvar), 50) + var/narsie_chance = min(LAZYLEN(SSticker.mode.cult), 50) ratvar_chance = rand(base_victory_chance, ratvar_chance) - narsie_chance = rand(base_victory_chance, min(narsie_chance, 50)) + narsie_chance = rand(base_victory_chance, narsie_chance) if(ratvar_chance > narsie_chance) winner = "Ratvar" break diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm index 22ea9e2ce5..b0a17338ff 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm @@ -18,7 +18,7 @@ var/static/mutable_appearance/component_glow = mutable_appearance('icons/obj/clockwork_objects.dmi', "t_random_component") var/component_id_to_produce var/production_time = 0 //last time we produced a component - var/production_cooldown = 120 + var/production_cooldown = 60 /obj/structure/destructible/clockwork/powered/tinkerers_daemon/Initialize() . = ..() diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 7780ae5db9..5de8a39216 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -1,34 +1,31 @@ - - /datum/game_mode var/list/datum/mind/cult = list() var/list/cult_objectives = list() + var/eldergod = 1 //for the summon god objective /proc/iscultist(mob/living/M) return istype(M) && M.mind && M.mind.has_antag_datum(ANTAG_DATUM_CULT) /proc/is_sacrifice_target(datum/mind/mind) - if(SSticker.mode.name == "cult") - var/datum/game_mode/cult/cult_mode = SSticker.mode - if(mind == cult_mode.sacrifice_target) - return 1 - return 0 + if(mind == GLOB.sac_mind) + return TRUE + return FALSE /proc/is_convertable_to_cult(mob/living/M) if(!istype(M)) - return 0 + return FALSE if(M.mind) if(ishuman(M) && (M.mind.assigned_role in list("Captain", "Chaplain"))) - return 0 + return FALSE if(is_sacrifice_target(M.mind)) - return 0 + return FALSE if(M.mind.enslaved_to && !iscultist(M.mind.enslaved_to)) - return 0 + return FALSE else - return 0 + return FALSE if(M.isloyal() || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M)) - return 0 //can't convert machines, shielded, or ratvar's dogs - return 1 + return FALSE //can't convert machines, shielded, or ratvar's dogs + return TRUE /datum/game_mode/cult name = "cult" @@ -47,14 +44,13 @@ Crew: Prevent the cult from expanding and drive it out." var/finished = 0 - var/eldergod = 1 //for the summon god objective var/acolytes_needed = 10 //for the survive objective var/acolytes_survived = 0 - var/datum/mind/sacrifice_target = null//The target to be sacrificed var/list/cultists_to_cult = list() //the cultists we'll convert + /datum/game_mode/cult/pre_setup() cult_objectives += "sacrifice" cult_objectives += "eldergod" @@ -82,22 +78,6 @@ return (cultists_to_cult.len>=required_enemies) -/datum/game_mode/cult/proc/memorize_cult_objectives(datum/mind/cult_mind) - for(var/obj_count = 1,obj_count <= cult_objectives.len,obj_count++) - var/explanation - switch(cult_objectives[obj_count]) - if("survive") - explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station." - if("sacrifice") - if(sacrifice_target) - explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it." - else - explanation = "Free objective." - if("eldergod") - explanation = "Summon Nar-Sie by invoking the rune 'Summon Nar-Sie' with nine acolytes on it. You must do this after sacrificing your target." - to_chat(cult_mind.current, "Objective #[obj_count]: [explanation]") - cult_mind.memory += "Objective #[obj_count]: [explanation]
" - /datum/game_mode/cult/post_setup() modePlayer += cultists_to_cult if("sacrifice" in cult_objectives) @@ -108,15 +88,25 @@ if(player.mind && !(player.mind in cultists_to_cult)) possible_targets += player.mind if(possible_targets.len > 0) - sacrifice_target = pick(possible_targets) - if(!sacrifice_target) + GLOB.sac_mind = pick(possible_targets) + if(!GLOB.sac_mind) message_admins("Cult Sacrifice: ERROR - Null target chosen!") + else + var/datum/job/sacjob = SSjob.GetJob(GLOB.sac_mind.assigned_role) + var/datum/preferences/sacface = GLOB.sac_mind.current.client.prefs + var/icon/reshape = get_flat_human_icon(null, sacjob, sacface) + reshape.Shift(SOUTH, 4) + reshape.Shift(EAST, 1) + reshape.Crop(7,4,26,31) + reshape.Crop(-5,-3,26,30) + GLOB.sac_image = reshape else message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!") for(var/datum/mind/cult_mind in cultists_to_cult) equip_cultist(cult_mind.current) update_cult_icons_added(cult_mind) to_chat(cult_mind.current, "You are a member of the cult!") + cult_mind.current.playsound_local('sound/ambience/antag/bloodcult.ogg',100,0)//subject to change add_cultist(cult_mind, 0) ..() @@ -163,12 +153,12 @@ cult_mind.current.Paralyse(5) return 1 -/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1, stun) +/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, silent, stun) if(cult_mind.current) var/datum/antagonist/cult/cult_datum = cult_mind.has_antag_datum(ANTAG_DATUM_CULT) if(!cult_datum) return FALSE - cult_datum.silent = show_message + cult_datum.silent = silent cult_datum.on_removal() if(stun) cult_mind.current.Paralyse(5) @@ -198,7 +188,7 @@ if(cult_objectives.Find("eldergod")) cult_fail += eldergod //1 by default, 0 if the elder god has been summoned at least once if(cult_objectives.Find("sacrifice")) - if(sacrifice_target && !GLOB.sacrificed.Find(sacrifice_target)) //if the target has been GLOB.sacrificed, ignore this step. otherwise, add 1 to cult_fail + if(GLOB.sac_mind && !GLOB.sac_complete) //if the target has been GLOB.sacrificed, ignore this step. otherwise, add 1 to cult_fail cult_fail++ return cult_fail //if any objectives aren't met, failure @@ -243,16 +233,12 @@ SSblackbox.add_details("cult_objective","cult_survive|FAIL|[acolytes_needed]") SSticker.news_report = CULT_FAILURE if("sacrifice") - if(sacrifice_target) - if(sacrifice_target in GLOB.sacrificed) - explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. Success!" - SSblackbox.add_details("cult_objective","cult_sacrifice|SUCCESS") - else if(sacrifice_target && sacrifice_target.current) - explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. Fail." - SSblackbox.add_details("cult_objective","cult_sacrifice|FAIL") - else - explanation = "Sacrifice [sacrifice_target.name], the [sacrifice_target.assigned_role]. Fail (Gibbed)." - SSblackbox.add_details("cult_objective","cult_sacrifice|FAIL|GIBBED") + if(GLOB.sac_complete) + explanation = "Sacrifice [GLOB.sac_mind], the [GLOB.sac_mind.assigned_role]. Success!" + SSblackbox.add_details("cult_objective","cult_sacrifice|SUCCESS") + else + explanation = "Sacrifice [GLOB.sac_mind], the [GLOB.sac_mind.assigned_role]. Fail." + SSblackbox.add_details("cult_objective","cult_sacrifice|FAIL") if("eldergod") if(!eldergod) explanation = "Summon Nar-Sie. Success!" @@ -269,12 +255,46 @@ return 1 -/datum/game_mode/proc/auto_declare_completion_cult() - if( cult.len || (SSticker && istype(SSticker.mode,/datum/game_mode/cult)) ) - var/text = "
The cultists were:" - for(var/datum/mind/cultist in cult) - text += printplayer(cultist) - - text += "
" - - to_chat(world, text) +/datum/game_mode/proc/datum_cult_completion() + var/text = "" + var/acolytes_survived = 0 + for(var/datum/mind/cult_mind in cult) + if (cult_mind.current && cult_mind.current.stat != DEAD) + if(cult_mind.current.onCentcom() || cult_mind.current.onSyndieBase()) + acolytes_survived++ + var/cult_fail = 0 + cult_fail += eldergod + if(!GLOB.sac_complete) + cult_fail++ + if(!cult_fail) + SSblackbox.set_details("round_end_result","win - cult win") + SSblackbox.set_val("round_end_result",acolytes_survived) + to_chat(world, "The cult has succeeded! Nar-sie has snuffed out another torch in the void!") + else + SSblackbox.set_details("round_end_result","loss - staff stopped the cult") + SSblackbox.set_val("round_end_result",acolytes_survived) + to_chat(world, "The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!") + if(cult_objectives.len) + text += "
The cultists' objectives were:" + for(var/obj_count in 1 to 2) + var/explanation + switch(cult_objectives[obj_count]) + if("sacrifice") + if(GLOB.sac_mind) + if(GLOB.sac_complete) + explanation = "Sacrifice [GLOB.sac_mind], the [GLOB.sac_mind.assigned_role]. Success!" + SSblackbox.add_details("cult_objective","cult_sacrifice|SUCCESS") + else + explanation = "Sacrifice [GLOB.sac_mind], the [GLOB.sac_mind.assigned_role]. Fail." + SSblackbox.add_details("cult_objective","cult_sacrifice|FAIL") + if("eldergod") + if(!eldergod) + explanation = "Summon Nar-Sie. Success!" + SSblackbox.add_details("cult_objective","cult_narsie|SUCCESS") + SSticker.news_report = CULT_SUMMON + else + explanation = "Summon Nar-Sie. Fail." + SSblackbox.add_details("cult_objective","cult_narsie|FAIL") + SSticker.news_report = CULT_FAILURE + text += "
Objective #[obj_count]: [explanation]" + to_chat(world, text) \ No newline at end of file diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index 40c7bbece8..6258ea284d 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -1,17 +1,21 @@ +// Contains cult communion, guide, and cult master abilities +#define MARK_COOLDOWN -/datum/action/innate/cultcomm - name = "Communion" - button_icon_state = "cult_comms" +/datum/action/innate/cult background_icon_state = "bg_demon" buttontooltipstyle = "cult" check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_CONSCIOUS -/datum/action/innate/cultcomm/IsAvailable() +/datum/action/innate/cult/IsAvailable() if(!iscultist(owner)) - return 0 + return FALSE return ..() -/datum/action/innate/cultcomm/Activate() +/datum/action/innate/cult/comm + name = "Communion" + button_icon_state = "cult_comms" + +/datum/action/innate/cult/comm/Activate() var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") if(!input || !IsAvailable()) return @@ -19,11 +23,22 @@ cultist_commune(usr, input) /proc/cultist_commune(mob/living/user, message) + var/my_message if(!message) return - user.whisper("O bidai nabora se[pick("'","`")]sma!") + user.whisper("O bidai nabora se[pick("'","`")]sma!", language = /datum/language/common) user.whisper(html_decode(message)) - var/my_message = "[(ishuman(user) ? "Acolyte" : "Construct")] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: [message]" + var/title = "Acolyte" + var/span = "cultitalic" + if(user.mind && user.mind.has_antag_datum(ANTAG_DATUM_CULT_MASTER)) + span = "cultlarge" + if(ishuman(user)) + title = "Master" + else + title = "Lord" + else if(!ishuman(user)) + title = "Construct" + my_message = "[title] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: [message]" for(var/mob/M in GLOB.mob_list) if(iscultist(M)) to_chat(M, my_message) @@ -65,3 +80,222 @@ popup.set_content(text) popup.open() return 1 + +/mob/living/proc/cult_master() + set category = "Cultist" + set name = "Assert Leadership" + pollCultists(src) // This proc handles the distribution of cult master actions + +/datum/action/innate/cult/mastervote + name = "Assert Leadership" + button_icon_state = "cultvote" + +/datum/action/innate/cult/mastervote/IsAvailable() + if(GLOB.cult_vote_called) + return FALSE + return ..() + +/datum/action/innate/cult/mastervote/Activate() + pollCultists(owner) + +/proc/pollCultists(var/mob/living/Nominee) //Cult Master Poll + if(world.time < CULT_POLL_WAIT) + to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [round((CULT_POLL_WAIT-world.time)/10)] seconds.") + return + GLOB.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + B.current << 'sound/hallucinations/im_here1.ogg' + to_chat(B.current, "Acolyte [Nominee] has asserted that they are worthy of leading the cult. A vote will be called shortly.") + sleep(100) + var/list/asked_cultists = list() + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current && B.current != Nominee && !B.current.incapacitated()) + B.current << 'sound/magic/exit_blood.ogg' + asked_cultists += B.current + var/list/yes_voters = pollCandidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists) + if(QDELETED(Nominee) || Nominee.incapacitated()) + GLOB.cult_vote_called = FALSE + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + to_chat(B.current,"[Nominee] has died in the process of attempting to win the cult's support!") + return FALSE + if(!Nominee.mind) + GLOB.cult_vote_called = FALSE + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + to_chat(B.current,"[Nominee] has gone catatonic in the process of attempting to win the cult's support!") + return FALSE + if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) + GLOB.cult_vote_called = FALSE + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + B.current.update_action_buttons_icon() + if(!B.current.incapacitated()) + to_chat(B.current, "[Nominee] could not win the cult's support and shall continue to serve as an acolyte.") + return FALSE + GLOB.cult_mastered = TRUE + SSticker.mode.remove_cultist(Nominee.mind, TRUE) + Nominee.mind.add_antag_datum(ANTAG_DATUM_CULT_MASTER) + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current) + for(var/datum/action/innate/cult/mastervote/vote in B.current.actions) + vote.Remove(B.current) + if(!B.current.incapacitated()) + to_chat(B.current,"[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of your ability!") + return TRUE + +/datum/action/innate/cult/master/IsAvailable() + if(!owner.mind || !owner.mind.has_antag_datum(ANTAG_DATUM_CULT_MASTER)) + return 0 + return ..() + +/datum/action/innate/cult/master/finalreck + name = "Final Reckoning" + desc = "A single-use spell that brings the entire cult to the master's location." + button_icon_state = "sintouch" + +/datum/action/innate/cult/master/finalreck/Activate() + for(var/i in 1 to 4) + chant(i) + var/list/destinations = list() + for(var/turf/T in orange(1, owner)) + if(!is_blocked_turf(T, TRUE)) + destinations += T + if(!LAZYLEN(destinations)) + to_chat(owner, "You need more space to summon the cult!") + return + if(do_after(owner, 30, target = owner)) + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current && B.current.stat != DEAD) + var/turf/mobloc = get_turf(B.current) + switch(i) + if(1) + new /obj/effect/overlay/temp/cult/sparks(mobloc, B.current.dir) + playsound(mobloc, "sparks", 50, 1) + if(2) + new /obj/effect/overlay/temp/dir_setting/cult/phase/out(mobloc, B.current.dir) + playsound(mobloc, "sparks", 75, 1) + if(3) + new /obj/effect/overlay/temp/dir_setting/cult/phase(mobloc, B.current.dir) + playsound(mobloc, "sparks", 100, 1) + if(4) + playsound(mobloc, 'sound/magic/exit_blood.ogg', 100, 1) + if(B.current != owner) + var/turf/final = pick(destinations) + if(istype(B.current.loc, /obj/item/device/soulstone)) + var/obj/item/device/soulstone/S = B.current.loc + S.release_shades(owner) + B.current.setDir(SOUTH) + new /obj/effect/overlay/temp/cult/blood(final) + addtimer(CALLBACK(B.current, /mob/.proc/reckon, final), 10) + else + return + GLOB.reckoning_complete = TRUE + Remove(owner) + +/mob/proc/reckon(turf/final) + new /obj/effect/overlay/temp/cult/blood/out(get_turf(src)) + forceMove(final) + +/datum/action/innate/cult/master/finalreck/proc/chant(chant_number) + switch(chant_number) + if(1) + owner.say("C'arta forbici!", language = /datum/language/common) + if(2) + owner.say("Pleggh e'ntrath!", language = /datum/language/common) + playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 50, 1) + if(3) + owner.say("Barhah hra zar'garis!", language = /datum/language/common) + playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 75, 1) + if(4) + owner.say("N'ath reth sh'yro eth d'rekkathnor!!!", language = /datum/language/common) + playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 100, 1) + +/datum/action/innate/cult/master/cultmark + name = "Mark Target" + desc = "Marks a target for the cult." + button_icon_state = "cult_mark" + var/obj/effect/proc_holder/cultmark/CM + var/cooldown = 0 + var/base_cooldown = 1200 + +/datum/action/innate/cult/master/cultmark/New() + CM = new() + CM.attached_action = src + ..() + +/datum/action/innate/cult/master/cultmark/IsAvailable() + if(!owner.mind || !owner.mind.has_antag_datum(ANTAG_DATUM_CULT_MASTER)) + return FALSE + if(cooldown > world.time) + if(!CM.active) + owner << "You need to wait [round((cooldown - world.time) * 0.1)] seconds before you can mark another target!" + return FALSE + return ..() + +/datum/action/innate/cult/master/cultmark/Destroy() + QDEL_NULL(CM) + return ..() + +/datum/action/innate/cult/master/cultmark/Activate() + CM.toggle(owner) //the important bit + return TRUE + +/obj/effect/proc_holder/cultmark + active = FALSE + ranged_mousepointer = 'icons/effects/cult_target.dmi' + var/datum/action/innate/cult/master/cultmark/attached_action + +/obj/effect/proc_holder/cultmark/Destroy() + attached_action = null + return ..() + +/obj/effect/proc_holder/cultmark/proc/toggle(mob/user) + if(active) + remove_ranged_ability("You cease the marking ritual.") + else + add_ranged_ability(user, "You prepare to mark a target for your cult...") + +/obj/effect/proc_holder/cultmark/InterceptClickOn(mob/living/caller, params, atom/target) + if(..()) + return + if(ranged_ability_user.incapacitated()) + remove_ranged_ability() + return + var/turf/T = get_turf(ranged_ability_user) + if(!isturf(T)) + return FALSE + if(target in view(7, get_turf(ranged_ability_user))) + GLOB.blood_target = target + var/area/A = get_area(target) + attached_action.cooldown = world.time + attached_action.base_cooldown + addtimer(CALLBACK(attached_action.owner, /mob.proc/update_action_buttons_icon), attached_action.base_cooldown) + GLOB.blood_target_image = image('icons/effects/cult_target.dmi', target, "glow", ABOVE_MOB_LAYER) + GLOB.blood_target_image.appearance_flags = RESET_COLOR + GLOB.blood_target_image.pixel_x = -target.pixel_x + GLOB.blood_target_image.pixel_y = -target.pixel_y + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current && B.current.stat != DEAD && B.current.client) + to_chat(B.current, "Master [ranged_ability_user] has marked [GLOB.blood_target] in the [A.name] as the cult's top priority, get there immediately!") + B.current << pick(sound('sound/hallucinations/over_here2.ogg',0,1,75), sound('sound/hallucinations/over_here3.ogg',0,1,75)) + B.current.client.images += GLOB.blood_target_image + attached_action.owner.update_action_buttons_icon() + remove_ranged_ability("The marking rite is complete! It will last for 90 seconds.") + GLOB.blood_target_reset_timer = addtimer(CALLBACK(GLOBAL_PROC, .proc/reset_blood_target), 900, TIMER_STOPPABLE) + return TRUE + return FALSE + +/proc/reset_blood_target() + for(var/datum/mind/B in SSticker.mode.cult) + if(B.current && B.current.stat != DEAD && B.current.client) + if(GLOB.blood_target) + to_chat(B.current,"The blood mark has expired!") + B.current.client.images -= GLOB.blood_target_image + QDEL_NULL(GLOB.blood_target) \ No newline at end of file diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index a90aeb78bc..43d940d5e5 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -26,6 +26,11 @@ return ..() +/obj/item/weapon/melee/cultblade/ghost + name = "eldritch sword" + force = 19 + flags = NODROP|DROPDEL + /obj/item/weapon/melee/cultblade/pickup(mob/living/user) ..() if(!iscultist(user)) @@ -100,12 +105,18 @@ icon_state = "cult_hoodalt" item_state = "cult_hoodalt" +/obj/item/clothing/head/culthood/alt/ghost + flags = NODROP|DROPDEL + /obj/item/clothing/suit/cultrobes/alt name = "cultist robes" desc = "An armored set of robes worn by the followers of Nar-Sie." icon_state = "cultrobesalt" item_state = "cultrobesalt" +/obj/item/clothing/suit/cultrobes/alt/ghost + flags = NODROP|DROPDEL + /obj/item/clothing/head/magus name = "magus helm" @@ -213,7 +224,7 @@ flags_inv = HIDEJUMPSUIT allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) body_parts_covered = CHEST|GROIN|LEGS|ARMS - armor = list(melee = -50, bullet = -50, laser = -100,energy = -50, bomb = -50, bio = -50, rad = -50, fire = 0, acid = 0) + armor = list(melee = -50, bullet = -50, laser = -50,energy = -50, bomb = -50, bio = -50, rad = -50, fire = 0, acid = 0) slowdown = -1 hoodtype = /obj/item/clothing/head/hooded/berserkerhood diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 843d16592a..069a422480 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -133,7 +133,7 @@ This file contains the arcane tome files. text += "Talisman of Armaments
The Talisman of Arming will equip the user with armored robes, a backpack, an eldritch longsword, an empowered bola, and a pair of boots. Any items that cannot \ be equipped will not be summoned. Attacking a fellow cultist with it will instead equip them.

" - text += "Talisman of Horrors
The Talisman of Horror must be applied directly to the victim, it will shatter your victim's mind with visions of the endtimes that may incapitate them.

" + text += "Talisman of Horrors
The Talisman of Horror, unlike other talismans, can be applied at range, without the victim noticing. It will cause the victim to have severe hallucinations after a short while.

" text += "Talisman of Shackling
The Talisman of Shackling must be applied directly to the victim, it has 4 uses and cuffs victims with magic shackles that disappear when removed.

" @@ -197,35 +197,30 @@ This file contains the arcane tome files. if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) return if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - if(SSticker.mode.name == "cult") - var/datum/game_mode/cult/cult_mode = SSticker.mode - if(!("eldergod" in cult_mode.cult_objectives)) - to_chat(user, "Nar-Sie does not wish to be summoned!") - return - if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in GLOB.sacrificed)) - to_chat(user, "The sacrifice is not complete. The portal would lack the power to open if you tried!") - return - if(!cult_mode.eldergod) - to_chat(user, "\"I am already here. There is no need to try to summon me now.\"") - return - if((loc.z && loc.z != ZLEVEL_STATION) || !A.blob_allowed) - to_chat(user, "The Geometer is not interested in lesser locations; the station is the prize!") - return - var/confirm_final = alert(user, "This is the FINAL step to summon Nar-Sie, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No") - if(confirm_final == "No") - to_chat(user, "You decide to prepare further before scribing the rune.") - return - Turf = get_turf(user) - A = get_area(src) - if(!check_rune_turf(Turf, user) || (loc.z && loc.z != ZLEVEL_STATION)|| !A.blob_allowed) - return - priority_announce("Figments from an eldritch god are being summoned by [user] into [A.map_name] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg') - for(var/B in spiral_range_turfs(1, user, 1)) - var/obj/structure/emergency_shield/sanguine/N = new(B) - shields += N - else + if(!("eldergod" in SSticker.mode.cult_objectives)) to_chat(user, "Nar-Sie does not wish to be summoned!") return + if(!GLOB.sac_complete) + to_chat(user, "The sacrifice is not complete. The portal would lack the power to open if you tried!") + return + if(!SSticker.mode.eldergod) + to_chat(user, "\"I am already here. There is no need to try to summon me now.\"") + return + if((loc.z && loc.z != ZLEVEL_STATION) || !A.blob_allowed) + to_chat(user, "The Geometer is not interested in lesser locations; the station is the prize!") + return + var/confirm_final = alert(user, "This is the FINAL step to summon Nar-Sie; it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No") + if(confirm_final == "No") + to_chat(user, "You decide to prepare further before scribing the rune.") + return + Turf = get_turf(user) + A = get_area(src) + if(!check_rune_turf(Turf, user) || (loc.z && loc.z != ZLEVEL_STATION)|| !A.blob_allowed) + return + priority_announce("Figments from an eldritch god are being summoned by [user] into [A.map_name] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg') + for(var/B in spiral_range_turfs(1, user, 1)) + var/obj/structure/emergency_shield/sanguine/N = new(B) + shields += N user.visible_message("[user] [user.blood_volume ? "cuts open their arm and begins writing in their own blood":"begins sketching out a strange design"]!", \ "You [user.blood_volume ? "slice open your arm and ":""]begin drawing a sigil of the Geometer.") if(user.blood_volume) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 3a80ed54b3..550d263aa3 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -29,13 +29,13 @@ To draw a rune, use an arcane tome. var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked. var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it. var/req_cultists_text //if we have a description override for required cultists to invoke - var/rune_in_use = 0 // Used for some runes, this is for when you want a rune to not be usable when in use. + var/rune_in_use = FALSE // Used for some runes, this is for when you want a rune to not be usable when in use. var/scribe_delay = 50 //how long the rune takes to create var/scribe_damage = 0.1 //how much damage you take doing it - var/allow_excess_invokers = 0 //if we allow excess invokers when being invoked - var/construct_invoke = 1 //if constructs can invoke it + var/allow_excess_invokers = FALSE //if we allow excess invokers when being invoked + var/construct_invoke = TRUE //if constructs can invoke it var/req_keyword = 0 //If the rune requires a keyword - go figure amirite var/keyword //The actual keyword for the rune @@ -136,7 +136,7 @@ structure_check() searches for nearby cultist structures required for the invoca if(invocation) for(var/M in invokers) var/mob/living/L = M - L.say(invocation) + L.say(invocation, language = /datum/language/common) do_invoke_glow() /obj/effect/rune/proc/do_invoke_glow() @@ -229,14 +229,12 @@ structure_check() searches for nearby cultist structures required for the invoca var/obj/item/weapon/paper/paper_to_imbue = papers_on_rune[1] ..() visible_message("Dark power begins to channel into the paper!") - rune_in_use = 1 - if(!do_after(user, initial(talisman_type.creation_time), target = paper_to_imbue)) - rune_in_use = 0 - return - new talisman_type(get_turf(src)) - visible_message("[src] glows with power, and bloody images form themselves on [paper_to_imbue].") - qdel(paper_to_imbue) - rune_in_use = 0 + rune_in_use = TRUE + if(do_after(user, initial(talisman_type.creation_time), target = paper_to_imbue)) + new talisman_type(get_turf(src)) + visible_message("[src] glows with power, and bloody images form themselves on [paper_to_imbue].") + qdel(paper_to_imbue) + rune_in_use = FALSE /obj/effect/rune/imbue/proc/checkpapers() . = list() @@ -250,7 +248,7 @@ structure_check() searches for nearby cultist structures required for the invoca invocation = "Sas'so c'arta forbici!" icon_state = "2" color = "#551A8B" - req_keyword = 1 + req_keyword = TRUE var/listkey /obj/effect/rune/teleport/Initialize(mapload, set_keyword) @@ -297,15 +295,15 @@ structure_check() searches for nearby cultist structures required for the invoca to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") fail_invoke() return - var/movedsomething = 0 - var/moveuserlater = 0 + var/movedsomething = FALSE + var/moveuserlater = FALSE for(var/atom/movable/A in T) if(A == user) - moveuserlater = 1 - movedsomething = 1 + moveuserlater = TRUE + movedsomething = TRUE continue if(!A.anchored) - movedsomething = 1 + movedsomething = TRUE A.forceMove(target) if(movedsomething) ..() @@ -326,7 +324,7 @@ structure_check() searches for nearby cultist structures required for the invoca icon_state = "3" color = "#FFFFFF" req_cultists = 1 - allow_excess_invokers = 1 + allow_excess_invokers = TRUE rune_in_use = FALSE /obj/effect/rune/convert/do_invoke_glow() @@ -398,23 +396,23 @@ structure_check() searches for nearby cultist structures required for the invoca return 1 /obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) + var/big_sac = FALSE if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) for(var/M in invokers) to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") log_game("Offer rune failed - not enough acolytes and target is living or sac target") return FALSE - var/sacrifice_fulfilled = FALSE - if(sacrificial.mind) GLOB.sacrificed += sacrificial.mind if(is_sacrifice_target(sacrificial.mind)) - sacrifice_fulfilled = TRUE + GLOB.sac_complete = TRUE + big_sac = TRUE else GLOB.sacrificed += sacrificial new /obj/effect/overlay/temp/cult/sac(get_turf(src)) for(var/M in invokers) - if(sacrifice_fulfilled) + if(big_sac) to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") else if(ishuman(sacrificial) || iscyborg(sacrificial)) @@ -450,8 +448,7 @@ structure_check() searches for nearby cultist structures required for the invoca pixel_y = -32 scribe_delay = 450 //how long the rune takes to create scribe_damage = 40.1 //how much damage you take doing it - var/used - var/ignore_gamemode = FALSE + var/used = FALSE /obj/effect/rune/narsie/Initialize(mapload, set_keyword) . = ..() @@ -470,33 +467,20 @@ structure_check() searches for nearby cultist structures required for the invoca if(z != ZLEVEL_STATION) return - var/datum/game_mode/cult/cult_mode - - if(SSticker.mode.name == "cult") - cult_mode = SSticker.mode - - if(!cult_mode && !ignore_gamemode) - for(var/M in invokers) - to_chat(M, "Nar-Sie does not respond!") - fail_invoke() - log_game("Summon Nar-Sie rune failed - gametype is not cult") - return - if(locate(/obj/singularity/narsie) in GLOB.poi_list) for(var/M in invokers) to_chat(M, "Nar-Sie is already on this plane!") log_game("Summon Nar-Sie rune failed - already summoned") return //BEGIN THE SUMMONING - used = 1 + used = TRUE ..() - send_to_playing_players('sound/effects/dimensional_rend.ogg') //There used to be a message for this but every time it was changed it got edgier so I removed it + send_to_playing_players('sound/effects/dimensional_rend.ogg') var/turf/T = get_turf(src) sleep(40) if(src) color = "#FF0000" - if(cult_mode) - cult_mode.eldergod = 0 + SSticker.mode.eldergod = FALSE new /obj/singularity/narsie/large(T) //Causes Nar-Sie to spawn even if the rune has been removed /obj/effect/rune/narsie/attackby(obj/I, mob/user, params) //Since the narsie rune takes a long time to make, add logging to removal. @@ -514,9 +498,9 @@ structure_check() searches for nearby cultist structures required for the invoca //Rite of Resurrection: Requires the corpse of a cultist and that there have been less revives than the number of people GLOB.sacrificed /obj/effect/rune/raise_dead - cultist_name = "Raise Dead" + cultist_name = "Resurrect Cultist" cultist_desc = "requires the corpse of a cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be revived." - invocation = null //Depends on the name of the user - see below + invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below icon_state = "1" color = "#C80000" var/static/revives_used = 0 @@ -556,9 +540,9 @@ structure_check() searches for nearby cultist structures required for the invoca return rune_in_use = 1 if(user.name == "Herbert West") - user.say("To life, to life, I bring them!") + invocation = "To life, to life, I bring them!" else - user.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") + invocation = initial(invocation) ..() revives_used++ mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it! @@ -906,9 +890,11 @@ structure_check() searches for nearby cultist structures required for the invoca icon_state = "6" construct_invoke = 0 color = "#C80000" + var/ghost_limit = 5 + var/ghosts = 0 -/obj/effect/rune/manifest/New(loc) - ..() +/obj/effect/rune/manifest/Initialize() + . = ..() notify_ghosts("Manifest rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) /obj/effect/rune/manifest/can_invoke(mob/living/user) @@ -917,6 +903,16 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() log_game("Manifest rune failed - user not standing on rune") return list() + if(user.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) + to_chat(user, "Ghosts can't summon more ghosts!") + fail_invoke() + log_game("Manifest rune failed - user is a ghost") + return list() + if(ghosts >= ghost_limit) + to_chat(user, "You are sustaining too many ghosts to summon more!") + fail_invoke() + log_game("Manifest rune failed - too many summoned ghosts") + return list() var/list/ghosts_on_rune = list() for(var/mob/dead/observer/O in get_turf(src)) if(O.client && !jobban_isbanned(O, ROLE_CULTIST)) @@ -938,8 +934,13 @@ structure_check() searches for nearby cultist structures required for the invoca var/mob/living/carbon/human/new_human = new(get_turf(src)) new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent + new_human.equipOutfit(/datum/outfit/ghost_cultist) //give them armor + new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts ..() - visible_message("A cloud of red mist forms above [src], and from within steps... a man.") + ghosts++ + playsound(src, 'sound/magic/exit_blood.ogg', 50, 1) + user.apply_damage(10, BRUTE) + visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.") to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") var/turf/T = get_turf(src) var/obj/structure/emergency_shield/invoker/N = new(T) @@ -948,16 +949,17 @@ structure_check() searches for nearby cultist structures required for the invoca SSticker.mode.add_cultist(new_human.mind, 0) to_chat(new_human, "You are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar-Sie, and you are to serve them at all costs.") - while(user in T) - if(user.stat) + while(!QDELETED(src) && !QDELETED(user) && !QDELETED(new_human) && (user in T)) + if(user.stat || new_human.InCritical()) break user.apply_damage(0.1, BRUTE) - sleep(3) + sleep(1) qdel(N) + ghosts-- if(new_human) new_human.visible_message("[new_human] suddenly dissolves into bones and ashes.", \ "Your link to the world fades. Your form breaks apart.") for(var/obj/I in new_human) - new_human.dropItemToGround(I) + new_human.dropItemToGround(I, TRUE) new_human.dust() diff --git a/code/game/gamemodes/cult/supply.dm b/code/game/gamemodes/cult/supply.dm new file mode 100644 index 0000000000..71b8c941b1 --- /dev/null +++ b/code/game/gamemodes/cult/supply.dm @@ -0,0 +1,124 @@ +//Supply Talisman: Has a few unique effects. Granted only to starter cultists. +/obj/item/weapon/paper/talisman/supply + cultist_name = "Supply Talisman" + cultist_desc = "A multi-use talisman that can create various objects. Intended to increase the cult's strength early on." + invocation = null + uses = 3 + var/list/possible_summons = list( + /datum/cult_supply/tome, + /datum/cult_supply/metal, + /datum/cult_supply/talisman/teleport, + /datum/cult_supply/talisman/emp, + /datum/cult_supply/talisman/stun, + /datum/cult_supply/talisman/veil, + /datum/cult_supply/soulstone, + /datum/cult_supply/construct_shell + ) + +/obj/item/weapon/paper/talisman/supply/invoke(mob/living/user, successfuluse = 1) + var/list/dat = list() + dat += "There are [uses] bloody runes on the parchment.
" + dat += "Please choose the chant to be imbued into the fabric of reality.
" + dat += "
" + for(var/s in possible_summons) + var/datum/cult_supply/S = s + dat += "[initial(S.invocation)] - [initial(S.desc)]
" + var/datum/browser/popup = new(user, "talisman", "", 400, 400) + popup.set_content(dat.Join("")) + popup.open() + return 0 + +/obj/item/weapon/paper/talisman/supply/Topic(href, href_list) + world.log << "[usr], [href], [href_list]" + if(QDELETED(src) || usr.incapacitated() || !in_range(src, usr)) + return + + var/id = href_list["id"] + var/datum/cult_supply/match + + for(var/s in possible_summons) + var/datum/cult_supply/S = s + if(initial(S.id) == id) + match = S + break + + if(!match) + to_chat(usr, "The fabric of reality quivers in agony.") + return + + var/turf/T = get_turf(src) + var/summon_type = initial(match.summon_type) + + + var/atom/movable/AM = new summon_type(T) + if(istype(AM, /obj/item)) + usr.put_in_hands(AM) + + uses-- + if(uses <= 0) + to_chat(usr, "[src] crumbles to dust.") + burn() + +/obj/item/weapon/paper/talisman/supply/weak + cultist_name = "Lesser Supply Talisman" + uses = 2 + +/obj/item/weapon/paper/talisman/supply/weak/Initialize(mapload) + . = ..() + // no runed metal from lesser talismans. + possible_summons -= /datum/cult_supply/metal + +/datum/cult_supply + var/id = "used_popcorn" + var/invocation = "Pla'ceho'lder." + var/desc = "Summons a generic supply item, to aid the cult." + var/summon_type = /obj/item/trash/popcorn // wait this isn't useful + +/datum/cult_supply/tome + id = "arcane_tome" + invocation = "N'ath reth sh'yro eth d'raggathnor!" + desc = "Summons an arcane tome, used to scribe runes." + summon_type = /obj/item/weapon/tome + +/datum/cult_supply/metal + id = "runed_metal" + invocation = "Bar'tea eas!" + desc = "Provides 5 runed metal, which can build a variety of cult structures." + summon_type = /obj/item/stack/sheet/runed_metal/five + +/datum/cult_supply/talisman/teleport + id = "teleport_talisman" + invocation = "Sas'so c'arta forbici!" + desc = "Allows you to move to a selected teleportation rune." + summon_type = /obj/item/weapon/paper/talisman/teleport + +/datum/cult_supply/talisman/emp + id = "emp_talisman" + invocation = "Ta'gh fara'qha fel d'amar det!" + desc = "Allows you to destroy technology in a short range." + summon_type = /obj/item/weapon/paper/talisman/emp + +/datum/cult_supply/talisman/stun + id = "stun_talisman" + invocation = "Fuu ma'jin!" + desc = "Allows you to stun a person by attacking them with the talisman. Does not work on people holding a holy weapon!" + summon_type = /obj/item/weapon/paper/talisman/stun + +/datum/cult_supply/talisman/veil + id = "veil_talisman" + invocation = "Kla'atu barada nikt'o!" + desc = "Two use talisman, first use makes all nearby runes invisible, secnd use reveals nearby hidden runes." + summon_type = /obj/item/weapon/paper/talisman/true_sight + +/datum/cult_supply/soulstone + id = "soulstone" + invocation = "Kal'om neth!" + desc = "Summons a soul stone, used to capture the spirits of dead or dying humans." + summon_type = /obj/item/device/soulstone + +/datum/cult_supply/construct_shell + id = "construct_shell" + invocation = "Daa'ig osk!" + desc = "Summons a construct shell for use with soulstone-captured souls. It is too large to carry on your person." + summon_type = /obj/structure/constructshell + diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 2411f0c40d..027df31acd 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -28,7 +28,7 @@ . = successfuluse if(successfuluse) //if the calling whatever says we succeed, do the fancy stuff if(invocation) - user.whisper(invocation) + user.whisper(invocation, language = /datum/language/common) if(health_cost && iscarbon(user)) var/mob/living/carbon/C = user C.apply_damage(health_cost, BRUTE, pick("l_arm", "r_arm")) @@ -45,74 +45,6 @@ var/mob/living/carbon/C = user C.apply_damage(10, BRUTE, "head") -//Supply Talisman: Has a few unique effects. Granted only to starter cultists. -/obj/item/weapon/paper/talisman/supply - cultist_name = "Supply Talisman" - cultist_desc = "A multi-use talisman that can create various objects. Intended to increase the cult's strength early on." - invocation = null - uses = 3 - -/obj/item/weapon/paper/talisman/supply/invoke(mob/living/user, successfuluse = 1) - var/dat = "There are [uses] bloody runes on the parchment.
" - dat += "Please choose the chant to be imbued into the fabric of reality.
" - dat += "
" - dat += "N'ath reth sh'yro eth d'raggathnor! - Summons an arcane tome, used to scribe runes and communicate with other cultists.
" - dat += "Bar'tea eas! - Provides 5 runed metal.
" - dat += "Sas'so c'arta forbici! - Allows you to move to a selected teleportation rune.
" - dat += "Ta'gh fara'qha fel d'amar det! - Allows you to destroy technology in a short range.
" - dat += "Fuu ma'jin! - Allows you to stun a person by attacking them with the talisman.
" - dat += "Kla'atu barada nikt'o! - Two use talisman, first use makes all nearby runes invisible, second use reveals nearby hidden runes.
" - dat += "Kal'om neth! - Summons a soul stone, used to capure the spirits of dead or dying humans.
" - dat += "Daa'ig osk! - Summons a construct shell for use with soulstone-captured souls. It is too large to carry on your person.
" - var/datum/browser/popup = new(user, "talisman", "", 400, 400) - popup.set_content(dat) - popup.open() - return 0 - -/obj/item/weapon/paper/talisman/supply/Topic(href, href_list) - if(src) - if(usr.stat || usr.restrained() || !in_range(src, usr)) - return - if(href_list["rune"]) - switch(href_list["rune"]) - if("newtome") - var/obj/item/weapon/tome/T = new(usr) - usr.put_in_hands(T) - if("metal") - if(istype(src, /obj/item/weapon/paper/talisman/supply/weak)) - usr.visible_message("Lesser supply talismans lack the strength to materialize runed metal!") - return - var/obj/item/stack/sheet/runed_metal/R = new(usr,5) - usr.put_in_hands(R) - if("teleport") - var/obj/item/weapon/paper/talisman/teleport/T = new(usr) - usr.put_in_hands(T) - if("emp") - var/obj/item/weapon/paper/talisman/emp/T = new(usr) - usr.put_in_hands(T) - if("runestun") - var/obj/item/weapon/paper/talisman/stun/T = new(usr) - usr.put_in_hands(T) - if("soulstone") - var/obj/item/device/soulstone/T = new(usr) - usr.put_in_hands(T) - if("construct") - new /obj/structure/constructshell(get_turf(usr)) - if("veiling") - var/obj/item/weapon/paper/talisman/true_sight/T = new(usr) - usr.put_in_hands(T) - src.uses-- - if(src.uses <= 0) - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - C.drop_item() - visible_message("[src] crumbles to dust.") - qdel(src) - -/obj/item/weapon/paper/talisman/supply/weak - cultist_name = "Lesser Supply Talisman" - uses = 2 - //Rite of Translocation: Same as rune /obj/item/weapon/paper/talisman/teleport cultist_name = "Talisman of Teleportation" @@ -147,9 +79,10 @@ if(is_blocked_turf(target, TRUE)) to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") return ..(user, 0) - user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear in a flash of red light!", \ - "You speak the words of the talisman and find yourself somewhere else!") + user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear with a sharp crack!", \ + "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.") user.forceMove(target) + target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") return ..() @@ -293,12 +226,12 @@ invocation = "Lo'Nab Na'Dm!" creation_time = 80 -/obj/item/weapon/paper/talisman/horror/attack(mob/living/target, mob/living/user) - if(iscultist(user)) - to_chat(user, "You disturb [target] with visons of the end!") +/obj/item/weapon/paper/talisman/horror/afterattack(mob/living/target, mob/living/user) + if(iscultist(user) && (get_dist(user, target) < 7)) + to_chat(user, "You disturb [target] with visions of madness!") if(iscarbon(target)) var/mob/living/carbon/H = target - H.reagents.add_reagent("mindbreaker", 25) + H.reagents.add_reagent("mindbreaker", 12) if(is_servant_of_ratvar(target)) to_chat(target, "You see a brief but horrible vision of Ratvar, rusted and scrapped, being torn apart.") target.emote("scream") diff --git a/code/game/gamemodes/devil/devil.dm b/code/game/gamemodes/devil/devil.dm index b64ef55406..31291ca143 100644 --- a/code/game/gamemodes/devil/devil.dm +++ b/code/game/gamemodes/devil/devil.dm @@ -1,5 +1,6 @@ /mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker) - switch(mind.devilinfo.bane) + var/datum/antagonist/devil/devilInfo = mind.has_antag_datum(ANTAG_DATUM_DEVIL) + switch(devilInfo.bane) if(BANE_WHITECLOTHES) if(ishuman(attacker)) var/mob/living/carbon/human/H = attacker @@ -21,13 +22,13 @@ /obj/item/clothing/under/suit_jacket/white = 0.5, /obj/item/clothing/under/burial = 1 ) - if(whiteness[U.type]) + if(U && whiteness[U.type]) src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") return whiteness[U.type] + 1 if(BANE_TOOLBOX) if(istype(weapon,/obj/item/weapon/storage/toolbox)) src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!") - return 2.5 // Will take four hits with a normal toolbox. + return 2.5 // Will take four hits with a normal toolbox to crit. if(BANE_HARVEST) if(istype(weapon,/obj/item/weapon/reagent_containers/food/snacks/grown/)) src.visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.") diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm index 9a528a1240..41016fa770 100644 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ b/code/game/gamemodes/devil/devil_game_mode.dm @@ -2,7 +2,7 @@ name = "devil" config_tag = "devil" antag_flag = ROLE_DEVIL - protected_jobs = list("Lawyer", "Librarian", "Chaplain", "Head of Security", "Captain", "AI") + protected_jobs = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") required_players = 0 required_enemies = 1 recommended_enemies = 4 @@ -19,7 +19,6 @@ + Crew: Resist the lure of sin and remain pure!" /datum/game_mode/devil/pre_setup() - if(config.protect_roles_from_antagonist) restricted_jobs += protected_jobs if(config.protect_assistant_from_antagonist) @@ -56,10 +55,22 @@ return 1 /datum/game_mode/devil/proc/post_setup_finalize(datum/mind/devil) - set waitfor = FALSE - sleep(rand(10,100)) - finalize_devil(devil, TRUE) - sleep(100) - add_devil_objectives(devil, objective_count) //This has to be in a separate loop, as we need devil names to be generated before we give objectives in devil agent. - devil.announceDevilLaws() - devil.announce_objectives() \ No newline at end of file + add_devil(devil.current, ascendable = TRUE) //Devil gamemode devils are ascendable. + add_devil_objectives(devil,2) + +/proc/is_devil(mob/living/M) + return M && M.mind && M.mind.has_antag_datum(ANTAG_DATUM_DEVIL) + +/proc/add_devil(mob/living/L, ascendable = FALSE) + if(!L || !L.mind) + return FALSE + var/datum/antagonist/devil/devil_datum = L.mind.add_antag_datum(ANTAG_DATUM_DEVIL) + devil_datum.ascendable = ascendable + return devil_datum + +/proc/remove_devil(mob/living/L) + if(!L || !L.mind) + return FALSE + var/datum/antagonist/devil_datum = L.mind.has_antag_datum(ANTAG_DATUM_DEVIL) + devil_datum.on_removal() + return TRUE diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/game/gamemodes/devil/devilinfo.dm index 01437cdf2e..0ea5231cfd 100644 --- a/code/game/gamemodes/devil/devilinfo.dm +++ b/code/game/gamemodes/devil/devilinfo.dm @@ -78,8 +78,15 @@ GLOBAL_LIST_INIT(lawlorify, list ( BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect." ) )) -/datum/devilinfo - var/datum/mind/owner = null + +//These are also used in the codex gigas, so let's declare them globally. +GLOBAL_LIST_INIT(devil_pre_title, list("Dark ", "Hellish ", "Fallen ", "Fiery ", "Sinful ", "Blood ", "Fluffy ")) +GLOBAL_LIST_INIT(devil_title, list("Lord ", "Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ")) +GLOBAL_LIST_INIT(devil_syllable, list("hal", "ve", "odr", "neit", "ci", "quon", "mya", "folth", "wren", "geyr", "hil", "niet", "twou", "phi", "coa")) +GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.")) +/datum/antagonist/devil + //Don't delete upon mind destruction, otherwise soul re-selling will break. + delete_on_death = FALSE var/obligation var/ban var/bane @@ -89,55 +96,63 @@ GLOBAL_LIST_INIT(lawlorify, list ( var/reviveNumber = 0 var/form = BASIC_DEVIL var/exists = 0 - var/static/list/dont_remove_spells = list( - /obj/effect/proc_holder/spell/targeted/summon_contract, - /obj/effect/proc_holder/spell/targeted/conjure_item/violin, - /obj/effect/proc_holder/spell/targeted/summon_dancefloor) + var/static/list/removable_devil_spells = list( + /obj/effect/proc_holder/spell/aimed/fireball/hellish, + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork, + /obj/effect/proc_holder/spell/aimed/fireball/hellish, + /obj/effect/proc_holder/spell/targeted/infernal_jaunt, + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater, + /obj/effect/proc_holder/spell/targeted/sintouch, + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended, + /obj/effect/proc_holder/spell/targeted/sintouch/ascended) + var/static/list/devil_spells = list( + /obj/effect/proc_holder/spell/aimed/fireball/hellish, + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork, + /obj/effect/proc_holder/spell/aimed/fireball/hellish, + /obj/effect/proc_holder/spell/targeted/infernal_jaunt, + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater, + /obj/effect/proc_holder/spell/targeted/sintouch, + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended, + /obj/effect/proc_holder/spell/targeted/sintouch/ascended, + /obj/effect/proc_holder/spell/targeted/summon_contract, + /obj/effect/proc_holder/spell/targeted/conjure_item/violin, + /obj/effect/proc_holder/spell/targeted/summon_dancefloor) var/ascendable = FALSE -/datum/devilinfo/New() +/datum/antagonist/devil/New() ..() - dont_remove_spells = typecacheof(dont_remove_spells) + devil_spells = typecacheof(devil_spells) + truename = randomDevilName() + ban = randomdevilban() + bane = randomdevilbane() + obligation = randomdevilobligation() + banish = randomdevilbanish() + GLOB.allDevils[lowertext(truename)] = src -/proc/randomDevilInfo(name = randomDevilName()) - var/datum/devilinfo/devil = new - devil.truename = name - devil.bane = randomdevilbane() - devil.obligation = randomdevilobligation() - devil.ban = randomdevilban() - devil.banish = randomdevilbanish() - return devil - -/proc/devilInfo(name, saveDetails = 0) +/proc/devilInfo(name) if(GLOB.allDevils[lowertext(name)]) return GLOB.allDevils[lowertext(name)] else - var/datum/devilinfo/devil = randomDevilInfo(name) + var/datum/fakeDevil/devil = new /datum/fakeDevil(name) GLOB.allDevils[lowertext(name)] = devil - devil.exists = saveDetails return devil - - /proc/randomDevilName() - var/preTitle = "" - var/title = "" - var/mainName = "" - var/suffix = "" + var/name = "" if(prob(65)) if(prob(35)) - preTitle = pick("Dark ", "Hellish ", "Fiery ", "Sinful ", "Blood ") - title = pick("Lord ", "Fallen Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ") + name = pick(GLOB.devil_pre_title) + name += pick(GLOB.devil_title) var/probability = 100 - mainName = pick("Hal", "Ve", "Odr", "Neit", "Ci", "Quon", "Mya", "Folth", "Wren", "Gyer", "Geyr", "Hil", "Niet", "Twou", "Hu", "Don") + name += pick(GLOB.devil_syllable) while(prob(probability)) - mainName += pick("hal", "ve", "odr", "neit", "ca", "quon", "mya", "folth", "wren", "gyer", "geyr", "hil", "niet", "twoe", "phi", "coa") + name += pick(GLOB.devil_syllable) probability -= 20 if(prob(40)) - suffix = pick(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.") - return preTitle + title + mainName + suffix + name += pick(GLOB.devil_suffix) + return name /proc/randomdevilobligation() return pick(OBLIGATION_FOOD, OBLIGATION_FIDDLE, OBLIGATION_DANCEOFF, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME) @@ -151,7 +166,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( /proc/randomdevilbanish() return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB) -/datum/devilinfo/proc/add_soul(datum/mind/soul) +/datum/antagonist/devil/proc/add_soul(datum/mind/soul) if(soulsOwned.Find(soul)) return soulsOwned += soul @@ -169,13 +184,13 @@ GLOBAL_LIST_INIT(lawlorify, list ( if(ARCH_THRESHOLD) increase_arch_devil() -/datum/devilinfo/proc/remove_soul(datum/mind/soul) +/datum/antagonist/devil/proc/remove_soul(datum/mind/soul) if(soulsOwned.Remove(soul)) check_regression() to_chat(owner.current, "You feel as though a soul has slipped from your grasp.") update_hud() -/datum/devilinfo/proc/check_regression() +/datum/antagonist/devil/proc/check_regression() if(form == ARCH_DEVIL) return //arch devil can't regress //Yes, fallthrough behavior is intended, so I can't use a switch statement. @@ -187,7 +202,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( remove_spells() to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.") -/datum/devilinfo/proc/regress_humanoid() +/datum/antagonist/devil/proc/regress_humanoid() to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.") if(ishuman(owner.current)) var/mob/living/carbon/human/H = owner.current @@ -198,7 +213,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted. form = BASIC_DEVIL -/datum/devilinfo/proc/regress_blood_lizard() +/datum/antagonist/devil/proc/regress_blood_lizard() var/mob/living/carbon/true_devil/D = owner.current to_chat(D, "Your powers weaken, have more contracts be signed to regain power.") D.oldform.loc = D.loc @@ -209,7 +224,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( update_hud() -/datum/devilinfo/proc/increase_blood_lizard() +/datum/antagonist/devil/proc/increase_blood_lizard() to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.") sleep(50) if(ishuman(owner.current)) @@ -227,7 +242,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( -/datum/devilinfo/proc/increase_true_devil() +/datum/antagonist/devil/proc/increase_true_devil() to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.") sleep(50) var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc) @@ -241,7 +256,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( update_hud() -/datum/devilinfo/proc/increase_arch_devil() +/datum/antagonist/devil/proc/increase_arch_devil() if(!ascendable) return var/mob/living/carbon/true_devil/D = owner.current @@ -291,17 +306,17 @@ GLOBAL_LIST_INIT(lawlorify, list ( SSticker.mode.devil_ascended++ form = ARCH_DEVIL -/datum/devilinfo/proc/remove_spells() +/datum/antagonist/devil/proc/remove_spells() for(var/X in owner.spell_list) var/obj/effect/proc_holder/spell/S = X - if(!is_type_in_typecache(S, dont_remove_spells)) + if(is_type_in_typecache(S, removable_devil_spells)) owner.RemoveSpell(S) -/datum/devilinfo/proc/give_summon_contract() +/datum/antagonist/devil/proc/give_summon_contract() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_contract(null)) -/datum/devilinfo/proc/give_base_spells(give_summon_contract = 0) +/datum/antagonist/devil/proc/give_base_spells(give_summon_contract = 0) remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) @@ -312,25 +327,25 @@ GLOBAL_LIST_INIT(lawlorify, list ( if(obligation == OBLIGATION_DANCEOFF) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null)) -/datum/devilinfo/proc/give_lizard_spells() +/datum/antagonist/devil/proc/give_lizard_spells() remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) -/datum/devilinfo/proc/give_true_spells() +/datum/antagonist/devil/proc/give_true_spells() remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) -/datum/devilinfo/proc/give_arch_spells() +/datum/antagonist/devil/proc/give_arch_spells() remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) -/datum/devilinfo/proc/beginResurrectionCheck(mob/living/body) +/datum/antagonist/devil/proc/beginResurrectionCheck(mob/living/body) if(SOULVALUE>0) to_chat(owner.current, "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon. Remain in your body.") sleep(DEVILRESURRECTTIME) @@ -350,7 +365,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( else to_chat(owner.current, "Your hellish powers are too weak to resurrect yourself.") -/datum/devilinfo/proc/check_banishment(mob/living/body) +/datum/antagonist/devil/proc/check_banishment(mob/living/body) switch(banish) if(BANISH_WATER) if(istype(body, /mob/living/carbon)) @@ -394,7 +409,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( return 1 return 0 -/datum/devilinfo/proc/hellish_resurrection(mob/living/body) +/datum/antagonist/devil/proc/hellish_resurrection(mob/living/body) message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.") if(SOULVALUE < ARCH_THRESHOLD && ascendable) // once ascended, arch devils do not go down in power by any means. reviveNumber += LOSS_PER_DEATH @@ -413,7 +428,7 @@ GLOBAL_LIST_INIT(lawlorify, list ( create_new_body() check_regression() -/datum/devilinfo/proc/create_new_body() +/datum/antagonist/devil/proc/create_new_body() if(GLOB.blobstart.len > 0) var/turf/targetturf = get_turf(pick(GLOB.blobstart)) var/mob/currentMob = owner.current @@ -451,8 +466,65 @@ GLOBAL_LIST_INIT(lawlorify, list ( throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection") -/datum/devilinfo/proc/update_hud() +/datum/antagonist/devil/proc/update_hud() if(istype(owner.current, /mob/living/carbon)) var/mob/living/C = owner.current if(C.hud_used && C.hud_used.devilsouldisplay) C.hud_used.devilsouldisplay.update_counter(SOULVALUE) + +/datum/antagonist/devil/greet() + to_chat(owner.current, "You remember your link to the infernal. You are [truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp.") + to_chat(owner.current, "However, your infernal form is not without weaknesses.") + to_chat(owner.current, "You may not use violence to coerce someone into selling their soul.") + to_chat(owner.current, "You may not directly and knowingly physically harm a devil, other than yourself.") + to_chat(owner.current, GLOB.lawlorify[LAW][bane]) + to_chat(owner.current, GLOB.lawlorify[LAW][ban]) + to_chat(owner.current, GLOB.lawlorify[LAW][obligation]) + to_chat(owner.current, GLOB.lawlorify[LAW][banish]) + to_chat(owner.current, "Remember, the crew can research your weaknesses if they find out your devil name.
") + .=..() + +/datum/antagonist/devil/on_gain() + owner.store_memory("Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][bane]]
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
") + if(issilicon(owner.current)) + var/mob/living/silicon/robot_devil = owner.current + var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish your objectives at all costs.") + robot_devil.set_law_sixsixsix(laws) + sleep(10) + if(owner.assigned_role == "Clown" && ishuman(owner.current)) + var/mob/living/carbon/human/S = owner.current + to_chat(S, "Your infernal nature has allowed you to overcome your clownishness.") + S.dna.remove_mutation(CLOWNMUT) + .=..() + +/datum/antagonist/devil/on_removal() + to_chat(owner.current, "Your infernal link has been severed! You are no longer a devil!") + .=..() + +/datum/antagonist/devil/apply_innate_effects(mob/living/mob_override) + give_base_spells(1) + owner.current.grant_all_languages(TRUE) + update_hud() + .=..() + +/datum/antagonist/devil/remove_innate_effects(mob/living/mob_override) + for(var/X in owner.spell_list) + var/obj/effect/proc_holder/spell/S = X + if(is_type_in_typecache(S, devil_spells)) + owner.RemoveSpell(S) + .=..() + +//A simple super light weight datum for the codex gigas. +/datum/fakeDevil + var/truename + var/bane + var/obligation + var/ban + var/banish + +/datum/fakeDevil/New(name = randomDevilName()) + truename = name + bane = randomdevilbane() + obligation = randomdevilobligation() + ban = randomdevilban() + banish = randomdevilbanish() \ No newline at end of file diff --git a/code/game/gamemodes/devil/game_mode.dm b/code/game/gamemodes/devil/game_mode.dm index 515a6e4c97..722c1f525e 100644 --- a/code/game/gamemodes/devil/game_mode.dm +++ b/code/game/gamemodes/devil/game_mode.dm @@ -29,25 +29,6 @@ text += "
" to_chat(world, text) - -/datum/game_mode/proc/finalize_devil(datum/mind/devil_mind, ascendable = FALSE) - set waitfor = FALSE - var/trueName= randomDevilName() - - devil_mind.devilinfo = devilInfo(trueName, 1) - devil_mind.devilinfo.ascendable = ascendable - devil_mind.store_memory("Your devilic true name is [devil_mind.devilinfo.truename]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][devil_mind.devilinfo.bane]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.obligation]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.banish]]
") - devil_mind.devilinfo.owner = devil_mind - devil_mind.devilinfo.give_base_spells(1) - if(issilicon(devil_mind.current)) - add_law_sixsixsix(devil_mind.current) - sleep(10) - devil_mind.devilinfo.update_hud() - if(devil_mind.assigned_role == "Clown" && ishuman(devil_mind.current)) - var/mob/living/carbon/human/S = devil_mind.current - to_chat(S, "Your infernal nature has allowed you to overcome your clownishness.") - S.dna.remove_mutation(CLOWNMUT) - /datum/game_mode/proc/add_devil_objectives(datum/mind/devil_mind, quantity) var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) for(var/i = 1 to quantity) @@ -60,28 +41,16 @@ else objective.find_target() -/datum/mind/proc/announceDevilLaws() +/datum/game_mode/proc/printdevilinfo(mob/living/ply) + var/datum/antagonist/devil/devilinfo = is_devil(ply) if(!devilinfo) - return - to_chat(current, "You remember your link to the infernal. You are [src.devilinfo.truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp.") - to_chat(current, "However, your infernal form is not without weaknesses.") - to_chat(current, "You may not use violence to coerce someone into selling their soul.") - to_chat(current, "You may not directly and knowingly physically harm a devil, other than yourself.") - to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.bane]) - to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.ban]) - to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.obligation]) - to_chat(current, GLOB.lawlorify[LAW][src.devilinfo.banish]) - to_chat(current, "

Remember, the crew can research your weaknesses if they find out your devil name.
") - -/datum/game_mode/proc/printdevilinfo(datum/mind/ply) - if(!ply.devilinfo) return "Target is not a devil." - var/text = "
The devil's true name is: [ply.devilinfo.truename]
" + var/text = "
The devil's true name is: [devilinfo.truename]
" text += "The devil's bans were:
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.ban]]
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.bane]]
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.obligation]]
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.banish]]

" + text += " [GLOB.lawlorify[LORE][devilinfo.ban]]
" + text += " [GLOB.lawlorify[LORE][devilinfo.bane]]
" + text += " [GLOB.lawlorify[LORE][devilinfo.obligation]]
" + text += " [GLOB.lawlorify[LORE][devilinfo.banish]]

" return text /datum/game_mode/proc/update_devil_icons_added(datum/mind/devil_mind) diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm index 95af5ae747..164df56da0 100644 --- a/code/game/gamemodes/devil/objectives.dm +++ b/code/game/gamemodes/devil/objectives.dm @@ -14,7 +14,9 @@ /datum/objective/devil/soulquantity/check_completion() var/count = 0 - for(var/S in owner.devilinfo.soulsOwned) + var/datum/antagonist/devil/devilDatum = owner.has_antag_datum(ANTAG_DATUM_DEVIL) + var/list/souls = devilDatum.soulsOwned + for(var/S in souls) //Just a sanity check. var/datum/mind/L = S if(L.soulOwner == owner) count++ @@ -52,9 +54,11 @@ /datum/objective/devil/soulquality/check_completion() var/count = 0 - for(var/S in owner.devilinfo.soulsOwned) + var/datum/antagonist/devil/devilDatum = owner.has_antag_datum(ANTAG_DATUM_DEVIL) + var/list/souls = devilDatum.soulsOwned + for(var/S in souls) var/datum/mind/L = S - if(L.soulOwner != L && L.damnation_type == contractType) + if(!L.owns_soul() && L.damnation_type == contractType) count++ return count>=target_amount @@ -91,16 +95,21 @@ /datum/objective/devil/outsell/New() /datum/objective/devil/outsell/update_explanation_text() - explanation_text = "Purchase and retain control over more souls than [target.devilinfo.truename], known to mortals as [target.name], the [target.assigned_role]." + var/datum/antagonist/devil/opponent = target.has_antag_datum(ANTAG_DATUM_DEVIL) + explanation_text = "Purchase and retain control over more souls than [opponent.truename], known to mortals as [target.name], the [target.assigned_role]." /datum/objective/devil/outsell/check_completion() var/selfcount = 0 - for(var/S in owner.devilinfo.soulsOwned) + var/datum/antagonist/devil/devilDatum = owner.has_antag_datum(ANTAG_DATUM_DEVIL) + var/list/souls = devilDatum.soulsOwned + for(var/S in souls) var/datum/mind/L = S if(L.soulOwner == owner) selfcount++ var/targetcount = 0 - for(var/S in target.devilinfo.soulsOwned) + devilDatum = target.has_antag_datum(ANTAG_DATUM_DEVIL) + souls = devilDatum.soulsOwned + for(var/S in souls) var/datum/mind/L = S if(L.soulOwner == target) targetcount++ diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index eb2921c966..a77b2f95a6 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -41,18 +41,20 @@ /mob/living/carbon/true_devil/proc/convert_to_archdevil() - maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible. + maxHealth = 500 // not an IMPOSSIBLE amount, but still near impossible. ascended = TRUE health = maxHealth icon_state = "arch_devil" /mob/living/carbon/true_devil/proc/set_name() - name = mind.devilinfo.truename + var/datum/antagonist/devil/devilinfo = mind.has_antag_datum(ANTAG_DATUM_DEVIL) + name = devilinfo.truename real_name = name /mob/living/carbon/true_devil/Login() ..() - mind.announceDevilLaws() + var/datum/antagonist/devil/devilinfo = mind.has_antag_datum(ANTAG_DATUM_DEVIL) + devilinfo.greet() mind.announce_objectives() @@ -60,7 +62,7 @@ stat = DEAD ..(gibbed) drop_all_held_items() - INVOKE_ASYNC(mind.devilinfo, /datum/devilinfo/proc/beginResurrectionCheck, src) + INVOKE_ASYNC(mind.has_antag_datum(ANTAG_DATUM_DEVIL), /datum/antagonist/devil/proc/beginResurrectionCheck, src) /mob/living/carbon/true_devil/examine(mob/user) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index a496715af2..700bfe5f3a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -85,7 +85,6 @@ SSblackbox.set_details("game_mode","[SSticker.mode]") if(GLOB.revdata.commit) SSblackbox.set_details("revision","[GLOB.revdata.commit]") - SSblackbox.set_details("server_ip","[world.internet_address]:[world.port]") if(report) addtimer(CALLBACK(src, .proc/send_intercept, 0), rand(waittime_l, waittime_h)) generate_station_goals() @@ -258,6 +257,8 @@ if(escaped_total > 0) SSblackbox.set_val("escaped_total",escaped_total) send2irc("Server", "Round just ended.") + if(cult.len && !istype(SSticker.mode,/datum/game_mode/cult)) + datum_cult_completion() return 0 diff --git a/code/game/gamemodes/gang/dominator.dm b/code/game/gamemodes/gang/dominator.dm index 54099070cd..a961ec48b1 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -1,3 +1,6 @@ +#define DOM_BLOCKED_SPAM_CAP 6 +#define DOM_REQUIRED_TURFS 30 + /obj/machinery/dominator name = "dominator" desc = "A visibly sinister device. Looks like you can break it if you hit it enough." @@ -13,9 +16,20 @@ var/datum/gang/gang var/operating = 0 //0=standby or broken, 1=takeover var/warned = 0 //if this device has set off the warning at <3 minutes yet + var/spam_prevention = DOM_BLOCKED_SPAM_CAP //first message is immediate var/datum/effect_system/spark_spread/spark_system var/obj/effect/countdown/dominator/countdown +/proc/dominator_excessive_walls(atom/A) + var/open = 0 + for(var/turf/T in view(3, A)) + if(!isclosedturf(T)) + open++ + if(open < DOM_REQUIRED_TURFS) + return TRUE + else + return FALSE + /obj/machinery/dominator/tesla_act() qdel(src) @@ -48,6 +62,16 @@ if(gang && gang.is_dominating) var/time_remaining = gang.domination_time_remaining() if(time_remaining > 0) + if(dominator_excessive_walls(src)) + gang.domination_timer += 20 + playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) + if(spam_prevention < DOM_BLOCKED_SPAM_CAP) + spam_prevention++ + else + gang.message_gangtools("Warning: There are too many walls around your gang's dominator, its signal is being blocked!") + say("Error: Takeover signal is currently blocked! There are too many walls within 3 standard units of this device.") + spam_prevention = 0 + return . = TRUE playsound(loc, 'sound/items/timer.ogg', 10, 0) if(!warned && (time_remaining < 180)) @@ -185,4 +209,4 @@ gang.message_gangtools("Hostile takeover in progress: Estimated [time] minutes until victory.[gang.dom_attempts ? "" : " This is your final attempt."]") for(var/datum/gang/G in SSticker.mode.gangs) if(G != gang) - G.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1) + G.message_gangtools("Enemy takeover attempt detected in [locname]: Estimated [time] minutes until our defeat.",1,1) \ No newline at end of file diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm index 9c31edf55f..46f651d359 100644 --- a/code/game/gamemodes/gang/gang.dm +++ b/code/game/gamemodes/gang/gang.dm @@ -58,13 +58,19 @@ GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue"," gangs += G //Now assign a boss for the gang - var/datum/mind/boss = pick(antag_candidates) - antag_candidates -= boss - G.bosses += boss - boss.gang_datum = G - boss.special_role = "[G.name] Gang Boss" - boss.restricted_roles = restricted_jobs - log_game("[boss.key] has been selected as the Boss for the [G.name] Gang") + for(var/n in 1 to 3) + var/datum/mind/boss = pick(antag_candidates) + antag_candidates -= boss + G.bosses += boss + boss.gang_datum = G + var/title + if(n == 1) + title = "Boss" + else + title = "Lieutenant" + boss.special_role = "[G.name] Gang [title]" + boss.restricted_roles = restricted_jobs + log_game("[boss.key] has been selected as the [title] for the [G.name] Gang") if(gangs.len < 2) //Need at least two gangs return 0 @@ -249,7 +255,8 @@ GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue"," return gang_bosses /proc/determine_domination_time(var/datum/gang/G) - return max(180,900 - (round((G.territory.len/GLOB.start_state.num_territories)*100, 1) * 12)) + return max(180,480 - (round((G.territory.len/GLOB.start_state.num_territories)*100, 1) * 9)) + ////////////////////////////////////////////////////////////////////// //Announces the end of the game with all relavent information stated// @@ -312,7 +319,9 @@ GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue"," G.domination(0.5) priority_announce("Multiple station takeover attempts have made simultaneously. Conflicting takeover attempts appears to have restarted.","Network Alert") else + var/datum/gang/G = winners[1] + G.is_dominating = FALSE SSticker.mode.explosion_in_progress = 1 - SSticker.station_explosion_cinematic(1) + SSticker.station_explosion_cinematic(1,"gang war", null) SSticker.mode.explosion_in_progress = 0 - SSticker.force_ending = pick(winners) + SSticker.force_ending = TRUE diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 3c54d5436b..ba455e94e5 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -13,6 +13,7 @@ var/list/territory = list() var/list/territory_new = list() var/list/territory_lost = list() + var/recalls = 1 var/dom_attempts = 2 var/points = 15 var/datum/atom_hud/antag/gang/ganghud diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm index a8732c1046..d626aa3b9a 100644 --- a/code/game/gamemodes/gang/gang_items.dm +++ b/code/game/gamemodes/gang/gang_items.dm @@ -108,10 +108,16 @@ /datum/gang_item/weapon/ammo/get_cost_display(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) return " ↳" + ..() //this is pretty hacky but it looks nice on the popup +/datum/gang_item/weapon/shuriken + name = "Shuriken" + id = "shuriken" + cost = 3 + item_path = /obj/item/weapon/throwing_star + /datum/gang_item/weapon/switchblade name = "Switchblade" id = "switchblade" - cost = 10 + cost = 5 item_path = /obj/item/weapon/switchblade /datum/gang_item/weapon/pistol @@ -126,6 +132,18 @@ cost = 10 item_path = /obj/item/ammo_box/magazine/m10mm +/datum/gang_item/weapon/sniper + name = ".50cal Sniper Rifle" + id = "sniper" + cost = 40 + item_path = /obj/item/weapon/gun/ballistic/automatic/sniper_rifle + +/datum/gang_item/weapon/ammo/sniper_ammo + name = "Standard .50cal Sniper Rounds" + id = "sniper_ammo" + cost = 15 + item_path = /obj/item/ammo_box/magazine/sniper_rounds + /datum/gang_item/weapon/uzi name = "Uzi SMG" id = "uzi" @@ -139,28 +157,6 @@ cost = 40 item_path = /obj/item/ammo_box/magazine/uzim9mm -//SLEEPING CARP - -/datum/gang_item/weapon/bostaff - name = "Bo Staff" - id = "bostaff" - cost = 10 - item_path = /obj/item/weapon/twohanded/bostaff - -/datum/gang_item/weapon/sleeping_carp_scroll - name = "Sleeping Carp Scroll (one-use)" - id = "sleeping_carp_scroll" - cost = 30 - item_path = /obj/item/weapon/sleeping_carp_scroll - spawn_msg = "Anyone who reads the sleeping carp scroll will learn secrets of the sleeping carp martial arts style." - -/datum/gang_item/weapon/wrestlingbelt - name = "Wrestling Belt" - id = "wrastling_belt" - cost = 20 - item_path = /obj/item/weapon/storage/belt/champion/wrestling - spawn_msg = "Anyone wearing the wresting belt will know how to be effective with wrestling." - /////////////////// //EQUIPMENT @@ -176,18 +172,43 @@ cost = 5 item_path = /obj/item/toy/crayon/spraycan/gang +/datum/gang_item/equipment/sharpener + name = "Sharpener" + id = "whetstone" + cost = 3 + item_path = /obj/item/weapon/sharpener + /datum/gang_item/equipment/necklace name = "Gold Necklace" id = "necklace" cost = 1 item_path = /obj/item/clothing/neck/necklace/dope + +/datum/gang_item/equipment/emp + name = "EMP Grenade" + id = "EMP" + cost = 5 + item_path = /obj/item/weapon/grenade/empgrenade + /datum/gang_item/equipment/c4 name = "C4 Explosive" id = "c4" - cost = 10 + cost = 7 item_path = /obj/item/weapon/grenade/plastic/c4 +/datum/gang_item/equipment/frag + name = "Fragmentation Grenade" + id = "frag nade" + cost = 10 + item_path = /obj/item/weapon/grenade/syndieminibomb/concussion/frag + +/datum/gang_item/equipment/stimpack + name = "Black Market Stimulants" + id = "stimpack" + cost = 15 + item_path = /obj/item/weapon/reagent_containers/syringe/stimulants + /datum/gang_item/equipment/implant_breaker name = "Implant Breaker" id = "implant_breaker" @@ -285,10 +306,14 @@ to_chat(user, "There's not enough room here!") return FALSE + if(dominator_excessive_walls(user)) + to_chat(user, "span class='warning'>The dominator will not function here! The dominator requires a sizable open space within three standard units so that walls do not interfere with the signal.
") + return FALSE + if(!(usrarea.type in gang.territory|gang.territory_new)) to_chat(user, "The dominator can be spawned only on territory controlled by your gang!") return FALSE return ..() /datum/gang_item/equipment/dominator/spawn_item(mob/living/carbon/user, datum/gang/gang, obj/item/device/gangtool/gangtool) - new item_path(user.loc) + new item_path(user.loc) \ No newline at end of file diff --git a/code/game/gamemodes/gang/gang_pen.dm b/code/game/gamemodes/gang/gang_pen.dm index 621d40cc45..930c612d14 100644 --- a/code/game/gamemodes/gang/gang_pen.dm +++ b/code/game/gamemodes/gang/gang_pen.dm @@ -57,4 +57,4 @@ cooldown = 0 icon_state = "pen" var/mob/M = get(src, /mob) - to_chat(M, "\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again.") + to_chat(M, "\icon[src] [src][(src.loc == M)?(""):(" in your [src.loc]")] vibrates softly. It is ready to be used again.") \ No newline at end of file diff --git a/code/game/gamemodes/gang/recaller.dm b/code/game/gamemodes/gang/recaller.dm index 0885b32612..c8c98e5d47 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -168,6 +168,9 @@ if(recalling) to_chat(usr, "Error: Recall already in progress.") return 0 + + if(!gang.recalls) + to_chat(usr, "Error: Unable to access communication arrays. Firewall has logged our signature and is blocking all further attempts.") gang.message_gangtools("[usr] is attempting to recall the emergency shuttle.") recalling = 1 @@ -209,6 +212,7 @@ userturf = get_turf(user) if(userturf.z == 1) //Check one more time that they are on station. if(SSshuttle.cancelEvac(user)) + gang.recalls -= 1 return 1 to_chat(loc, "\icon[src]No response recieved. Emergency shuttle cannot be recalled at this time.") @@ -237,4 +241,4 @@ outfits = 1 /obj/item/device/gangtool/spare/lt - promotable = 1 + promotable = 1 \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm index aa633e1ef5..574e48fc68 100644 --- a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm +++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm @@ -20,7 +20,7 @@ explanation_text = "Your brain is broken... you can only communicate in" /datum/objective/abductee/speech/New() - var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) + var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon", "three word sentences")) explanation_text+= " [style]." /datum/objective/abductee/capture @@ -146,3 +146,25 @@ /datum/objective/abductee/sixthsense explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." + +/datum/objective/abductee/toupefallacy + explanation_text = "There are alien parasites masquerading as people's hair. Save people from this invasion." + +/datum/objective/abductee/everyoneisthesame + explanation_text = "There is only one other person in existence, he is just really good at pretending to be multiple people." + +/datum/objective/abductee/forbiddennumber + explanation_text = "Numbers, how do they work?" //Shouldn't ever see this. + +/datum/objective/abductee/forbiddennumber/New() + var/number = rand(2,10) + explanation_text = "Ignore anything in a set of [number], they don't exist." + +/datum/objective/abductee/foreignname + explanation_text = "No matter how they say it, other people keep mispronouncing your name. Be sure to correct them whenever possible." + +/datum/objective/abductee/pairoff + explanation_text = "Being alone and in large groups are both frightening. Try to be alone with only one other person whenever possible." + +/datum/objective/abductee/takeblame + explanation_text = "Try to get formally executed for a crime you didn't commit, without a false confession." diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 193aecd9ce..8f3dfb7ac3 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -116,12 +116,13 @@ else dat += "

Subject Status :

" dat += "[occupant.name] => " - switch(occupant.stat) - if(0) + var/mob/living/mob_occupant = occupant + switch(mob_occupant.stat) + if(CONSCIOUS) dat += "Conscious" - if(1) + if(UNCONSCIOUS) dat += "Unconscious" - else + else // DEAD dat += "Deceased" dat += "
" dat += "[flash]" @@ -146,9 +147,11 @@ if(href_list["close"]) close_machine() return - if(occupant && occupant.stat != DEAD) - if(href_list["experiment"]) - flash = Experiment(occupant,href_list["experiment"]) + if(occupant) + var/mob/living/mob_occupant = occupant + if(mob_occupant.stat != DEAD) + if(href_list["experiment"]) + flash = Experiment(occupant,href_list["experiment"]) updateUsrDialog() add_fingerprint(usr) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index c6248b03cc..3b315bb668 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -62,7 +62,7 @@ icon = 'icons/mob/swarmer.dmi' desc = "A robot of unknown design, they seek only to consume materials and replicate themselves indefinitely." speak_emote = list("tones") - initial_languages = list(/datum/language/swarmer) + initial_language_holder = /datum/language_holder/swarmer bubble_icon = "swarmer" health = 40 maxHealth = 40 diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 7260d8221f..293b114b36 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -14,6 +14,7 @@ var/icon_reveal = "revenant_revealed" var/icon_stun = "revenant_stun" var/icon_drain = "revenant_draining" + var/stasis = FALSE incorporeal_move = 3 invisibility = INVISIBILITY_REVENANT health = INFINITY //Revenants don't use health, they use essence instead @@ -94,6 +95,8 @@ //Life, Stat, Hud Updates, and Say /mob/living/simple_animal/revenant/Life() + if(stasis) + return if(revealed && essence <= 0) death() if(unreveal_time && world.time >= unreveal_time) @@ -200,9 +203,9 @@ death() /mob/living/simple_animal/revenant/death() - if(!revealed || stat == DEAD) //Revenants cannot die if they aren't revealed //or are already dead + if(!revealed || stasis) //Revenants cannot die if they aren't revealed //or are already dead return 0 - ..(1) + stasis = TRUE to_chat(src, "NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]...") notransform = TRUE revealed = TRUE @@ -217,9 +220,11 @@ var/reforming_essence = essence_regen_cap //retain the gained essence capacity var/obj/item/weapon/ectoplasm/revenant/R = new(get_turf(src)) R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls - R.client_to_revive = src.client //If the essence reforms, the old revenant is put back in the body - ghostize() - qdel(src) + R.client_to_revive = client //If the essence reforms, the old revenant is put back in the body + R.revenant = src + invisibility = INVISIBILITY_ABSTRACT + revealed = FALSE + ghostize(0)//Don't re-enter invisible corpse return @@ -302,6 +307,18 @@ to_chat(src, "Lost [essence_amt]E[source ? " from [source]":""].") return 1 +/mob/living/simple_animal/revenant/proc/death_reset() + revealed = FALSE + unreveal_time = 0 + notransform = 0 + unstun_time = 0 + inhibited = FALSE + draining = FALSE + incorporeal_move = 3 + invisibility = INVISIBILITY_REVENANT + alpha=255 + stasis = FALSE + //reforming /obj/item/weapon/ectoplasm/revenant @@ -314,11 +331,15 @@ var/reforming = TRUE var/inert = FALSE var/client/client_to_revive + var/mob/living/simple_animal/revenant/revenant /obj/item/weapon/ectoplasm/revenant/New() ..() addtimer(CALLBACK(src, .proc/try_reform), 600) +/obj/item/weapon/ectoplasm/revenant/proc/scatter() + qdel(src) + /obj/item/weapon/ectoplasm/revenant/proc/try_reform() if(reforming) reforming = FALSE @@ -333,14 +354,14 @@ user.visible_message("[user] scatters [src] in all directions.", \ "You scatter [src] across the area. The particles slowly fade away.") user.drop_item() - qdel(src) + scatter() /obj/item/weapon/ectoplasm/revenant/throw_impact(atom/hit_atom) ..() if(inert) return visible_message("[src] breaks into particles upon impact, which fade away to nothingness.") - qdel(src) + scatter() /obj/item/weapon/ectoplasm/revenant/examine(mob/user) ..() @@ -350,47 +371,51 @@ to_chat(user, "It is shifting and distorted. It would be wise to destroy this.") /obj/item/weapon/ectoplasm/revenant/proc/reform() - if(QDELETED(src) || inert) + if(QDELETED(src) || QDELETED(revenant) || inert) return var/key_of_revenant message_admins("Revenant ectoplasm was left undestroyed for 1 minute and is reforming into a new revenant.") loc = get_turf(src) //In case it's in a backpack or someone's hand - var/mob/living/simple_animal/revenant/R = new(get_turf(src)) + revenant.forceMove(loc) if(client_to_revive) for(var/mob/M in GLOB.dead_mob_list) if(M.client == client_to_revive) //Only recreates the mob if the mob the client is in is dead - R.client = client_to_revive + revenant.client = client_to_revive key_of_revenant = client_to_revive.key if(!key_of_revenant) message_admins("The new revenant's old client either could not be found or is in a new, living mob - grabbing a random candidate instead...") - var/list/candidates = get_candidates(ROLE_REVENANT) + var/list/candidates = pollCandidatesForMob("Do you want to be [revenant.name] (reforming)?", "revenant", null, ROLE_REVENANT, 50, revenant) if(!candidates.len) - qdel(R) + qdel(revenant) message_admins("No candidates were found for the new revenant. Oh well!") inert = TRUE visible_message("[src] settles down and seems lifeless.") return var/client/C = pick(candidates) + revenant.client = C key_of_revenant = C.key if(!key_of_revenant) - qdel(R) + qdel(revenant) message_admins("No ckey was found for the new revenant. Oh well!") inert = TRUE visible_message("[src] settles down and seems lifeless.") return - var/datum/mind/player_mind = new /datum/mind(key_of_revenant) - R.essence_regen_cap = essence - R.essence = R.essence_regen_cap - player_mind.active = 1 - player_mind.transfer_to(R) - player_mind.assigned_role = "revenant" - player_mind.special_role = "Revenant" - SSticker.mode.traitors |= player_mind + message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.") log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.") visible_message("[src] suddenly rises into the air before fading away.") + + revenant.essence = essence + revenant.essence_regen_cap = essence + revenant.death_reset() + revenant.key = key_of_revenant + revenant = null qdel(src) +/obj/item/weapon/ectoplasm/revenant/Destroy() + if(!QDELETED(revenant)) + qdel(revenant) + ..() //objectives /datum/objective/revenant diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index b12dcc3bcc..6af3e86b7e 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -93,7 +93,9 @@ agent_number++ spawnpos++ update_synd_icons_added(synd_mind) + synd_mind.current.playsound_local('sound/ambience/antag/ops.ogg',100,0) var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list + if(nuke) nuke.r_code = nuke_code return ..() diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index c66b48a6c8..45f7c5262a 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -1,173 +1,177 @@ -//Pinpointers are used to track atoms from a distance as long as they're on the same z-level. The captain and nuke ops have ones that track the nuclear authentication disk. -/obj/item/weapon/pinpointer - name = "pinpointer" - desc = "A handheld tracking device that locks onto certain signals." - icon = 'icons/obj/device.dmi' - icon_state = "pinoff" - flags = CONDUCT - slot_flags = SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_state = "electronic" - throw_speed = 3 - throw_range = 7 - materials = list(MAT_METAL = 500, MAT_GLASS = 250) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/active = FALSE - var/atom/movable/target = null //The thing we're searching for - var/atom/movable/constant_target = null //The thing we're always focused on, if we're in the right mode - var/target_x = 0 //The target coordinates if we're tracking those - var/target_y = 0 - var/nuke_warning = FALSE // If we've set off a miniature alarm about an armed nuke - var/mode = TRACK_NUKE_DISK //What are we looking for? - -/obj/item/weapon/pinpointer/New() - ..() - GLOB.pinpointer_list += src - -/obj/item/weapon/pinpointer/Destroy() - STOP_PROCESSING(SSfastprocess, src) - GLOB.pinpointer_list -= src - return ..() - -/obj/item/weapon/pinpointer/attack_self(mob/living/user) - active = !active - user.visible_message("[user] [active ? "" : "de"]activates their pinpointer.", "You [active ? "" : "de"]activate your pinpointer.") - playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1) - icon_state = "pin[active ? "onnull" : "off"]" - if(active) - START_PROCESSING(SSfastprocess, src) - else - target = null //Restarting the pinpointer forces a target reset - STOP_PROCESSING(SSfastprocess, src) - -/obj/item/weapon/pinpointer/attackby(obj/item/I, mob/living/user, params) - if(mode != TRACK_ATOM) - return ..() - user.visible_message("[user] tunes [src] to [I].", "You fine-tune [src]'s tracking to track [I].") - playsound(src, 'sound/machines/click.ogg', 50, 1) - constant_target = I - -/obj/item/weapon/pinpointer/examine(mob/user) - ..() - var/msg = "Its tracking indicator reads " - switch(mode) - if(TRACK_NUKE_DISK) - msg += "\"nuclear_disk\"." - if(TRACK_MALF_AI) - msg += "\"01000001 01001001\"." - if(TRACK_INFILTRATOR) - msg += "\"vasvygengbefuvc\"." - if(TRACK_OPERATIVES) - msg += "\"[target ? "Operative [target]" : "friends"]\"." - if(TRACK_ATOM) - msg += "\"[initial(constant_target.name)]\"." - if(TRACK_COORDINATES) - msg += "\"([target_x], [target_y])\"." - else - msg = "Its tracking indicator is blank." - to_chat(user, msg) - for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) - if(bomb.timing) - to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]") - -/obj/item/weapon/pinpointer/process() - if(!active) - STOP_PROCESSING(SSfastprocess, src) - return - scan_for_target() - point_to_target() - my_god_jc_a_bomb() - addtimer(CALLBACK(src, .proc/refresh_target), 50, TIMER_UNIQUE) - -/obj/item/weapon/pinpointer/proc/scan_for_target() //Looks for whatever it's tracking - if(target) - if(isliving(target)) - var/mob/living/L = target - if(L.stat == DEAD) - target = null - return - switch(mode) - if(TRACK_NUKE_DISK) - var/obj/item/weapon/disk/nuclear/N = locate() - target = N - if(TRACK_MALF_AI) - for(var/V in GLOB.ai_list) - var/mob/living/silicon/ai/A = V - if(A.nuking) - target = A - for(var/V in GLOB.apcs_list) - var/obj/machinery/power/apc/A = V - if(A.malfhack && A.occupier) - target = A - if(TRACK_INFILTRATOR) - target = SSshuttle.getShuttle("syndicate") - if(TRACK_OPERATIVES) - var/list/possible_targets = list() - var/turf/here = get_turf(src) - for(var/V in SSticker.mode.syndicates) - var/datum/mind/M = V - if(M.current && M.current.stat != DEAD) - possible_targets |= M.current - var/mob/living/closest_operative = get_closest_atom(/mob/living/carbon/human, possible_targets, here) - if(closest_operative) - target = closest_operative - if(TRACK_ATOM) - if(constant_target) - target = constant_target - if(TRACK_COORDINATES) - var/turf/T = get_turf(src) - target = locate(target_x, target_y, T.z) - -/obj/item/weapon/pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction - if(!active) - return - if(!target || (mode == TRACK_ATOM && !constant_target)) - icon_state = "pinon[nuke_warning ? "alert" : ""]null" - return - var/turf/here = get_turf(src) - var/turf/there = get_turf(target) - if(here.z != there.z) - icon_state = "pinon[nuke_warning ? "alert" : ""]null" - return - if(here == there) - icon_state = "pinon[nuke_warning ? "alert" : ""]direct" - else - setDir(get_dir(here, there)) - switch(get_dist(here, there)) - if(1 to 8) - icon_state = "pinon[nuke_warning ? "alert" : "close"]" - if(9 to 16) - icon_state = "pinon[nuke_warning ? "alert" : "medium"]" - if(16 to INFINITY) - icon_state = "pinon[nuke_warning ? "alert" : "far"]" - -/obj/item/weapon/pinpointer/proc/my_god_jc_a_bomb() //If we should get the hell back to the ship - for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) - if(bomb.timing) - if(!nuke_warning) - nuke_warning = TRUE - playsound(src, 'sound/items/Nuke_toy_lowpower.ogg', 50, 0) - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "Your [name] vibrates and lets out a tinny alarm. Uh oh.") - -/obj/item/weapon/pinpointer/proc/switch_mode_to(new_mode) //If we shouldn't be tracking what we are - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") - playsound(L, 'sound/machines/triple_beep.ogg', 50, 1) - mode = new_mode - target = null //Switch modes so we can find the new target - -/obj/item/weapon/pinpointer/proc/refresh_target() //Periodically removes the target to allow the pinpointer to update (i.e. malf AI shunts, an operative dies) - target = null - -/obj/item/weapon/pinpointer/syndicate //Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. - name = "syndicate pinpointer" - desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device." - -/obj/item/weapon/pinpointer/syndicate/cyborg //Cyborg pinpointers just look for a random operative. - name = "cyborg syndicate pinpointer" - desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." - mode = TRACK_OPERATIVES - flags = NODROP +//Pinpointers are used to track atoms from a distance as long as they're on the same z-level. The captain and nuke ops have ones that track the nuclear authentication disk. +/obj/item/weapon/pinpointer + name = "pinpointer" + desc = "A handheld tracking device that locks onto certain signals." + icon = 'icons/obj/device.dmi' + icon_state = "pinoff" + flags = CONDUCT + slot_flags = SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_state = "electronic" + throw_speed = 3 + throw_range = 7 + materials = list(MAT_METAL = 500, MAT_GLASS = 250) + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + var/active = FALSE + var/atom/movable/target = null //The thing we're searching for + var/atom/movable/constant_target = null //The thing we're always focused on, if we're in the right mode + var/target_x = 0 //The target coordinates if we're tracking those + var/target_y = 0 + var/minimum_range = 0 //at what range the pinpointer declares you to be at your destination + var/nuke_warning = FALSE // If we've set off a miniature alarm about an armed nuke + var/mode = TRACK_NUKE_DISK //What are we looking for? + +/obj/item/weapon/pinpointer/New() + ..() + GLOB.pinpointer_list += src + +/obj/item/weapon/pinpointer/Destroy() + STOP_PROCESSING(SSfastprocess, src) + GLOB.pinpointer_list -= src + return ..() + +/obj/item/weapon/pinpointer/attack_self(mob/living/user) + active = !active + user.visible_message("[user] [active ? "" : "de"]activates their pinpointer.", "You [active ? "" : "de"]activate your pinpointer.") + playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1) + icon_state = "pin[active ? "onnull" : "off"]" + if(active) + START_PROCESSING(SSfastprocess, src) + else + target = null //Restarting the pinpointer forces a target reset + STOP_PROCESSING(SSfastprocess, src) + +/obj/item/weapon/pinpointer/attackby(obj/item/I, mob/living/user, params) + if(mode != TRACK_ATOM) + return ..() + user.visible_message("[user] tunes [src] to [I].", "You fine-tune [src]'s tracking to track [I].") + playsound(src, 'sound/machines/click.ogg', 50, 1) + constant_target = I + +/obj/item/weapon/pinpointer/examine(mob/user) + ..() + var/msg = "Its tracking indicator reads " + switch(mode) + if(TRACK_NUKE_DISK) + msg += "\"nuclear_disk\"." + if(TRACK_MALF_AI) + msg += "\"01000001 01001001\"." + if(TRACK_INFILTRATOR) + msg += "\"vasvygengbefuvc\"." + if(TRACK_OPERATIVES) + msg += "\"[target ? "Operative [target]" : "friends"]\"." + if(TRACK_ATOM) + msg += "\"[initial(constant_target.name)]\"." + if(TRACK_COORDINATES) + msg += "\"([target_x], [target_y])\"." + else + msg = "Its tracking indicator is blank." + to_chat(user, msg) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) + if(bomb.timing) + to_chat(user, "Extreme danger. Arming signal detected. Time remaining: [bomb.get_time_left()]") + +/obj/item/weapon/pinpointer/process() + if(!active) + STOP_PROCESSING(SSfastprocess, src) + return + scan_for_target() + point_to_target() + my_god_jc_a_bomb() + addtimer(CALLBACK(src, .proc/refresh_target), 50, TIMER_UNIQUE) + +/obj/item/weapon/pinpointer/proc/scan_for_target() //Looks for whatever it's tracking + if(target) + if(isliving(target)) + var/mob/living/L = target + if(L.stat == DEAD) + target = null + return + switch(mode) + if(TRACK_NUKE_DISK) + var/obj/item/weapon/disk/nuclear/N = locate() + target = N + if(TRACK_MALF_AI) + for(var/V in GLOB.ai_list) + var/mob/living/silicon/ai/A = V + if(A.nuking) + target = A + for(var/V in GLOB.apcs_list) + var/obj/machinery/power/apc/A = V + if(A.malfhack && A.occupier) + target = A + if(TRACK_INFILTRATOR) + target = SSshuttle.getShuttle("syndicate") + if(TRACK_OPERATIVES) + var/list/possible_targets = list() + var/turf/here = get_turf(src) + for(var/V in SSticker.mode.syndicates) + var/datum/mind/M = V + if(M.current && M.current.stat != DEAD) + possible_targets |= M.current + var/mob/living/closest_operative = get_closest_atom(/mob/living/carbon/human, possible_targets, here) + if(closest_operative) + target = closest_operative + if(TRACK_ATOM) + if(constant_target) + target = constant_target + if(TRACK_COORDINATES) + var/turf/T = get_turf(src) + target = locate(target_x, target_y, T.z) + +/obj/item/weapon/pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction + if(!active) + return + if(!target || (mode == TRACK_ATOM && !constant_target)) + icon_state = "pinon[nuke_warning ? "alert" : ""]null" + return + var/turf/here = get_turf(src) + var/turf/there = get_turf(target) + if(here.z != there.z) + icon_state = "pinon[nuke_warning ? "alert" : ""]null" + return + if(get_dist_euclidian(here,there)<=minimum_range) + icon_state = "pinon[nuke_warning ? "alert" : ""]direct" + else + setDir(get_dir(here, there)) + switch(get_dist(here, there)) + if(1 to 8) + icon_state = "pinon[nuke_warning ? "alert" : "close"]" + if(9 to 16) + icon_state = "pinon[nuke_warning ? "alert" : "medium"]" + if(16 to INFINITY) + icon_state = "pinon[nuke_warning ? "alert" : "far"]" + +/obj/item/weapon/pinpointer/proc/my_god_jc_a_bomb() //If we should get the hell back to the ship + for(var/obj/machinery/nuclearbomb/bomb in GLOB.nuke_list) + if(bomb.timing) + if(!nuke_warning) + nuke_warning = TRUE + playsound(src, 'sound/items/Nuke_toy_lowpower.ogg', 50, 0) + if(isliving(loc)) + var/mob/living/L = loc + to_chat(L, "Your [name] vibrates and lets out a tinny alarm. Uh oh.") + +/obj/item/weapon/pinpointer/proc/switch_mode_to(new_mode) //If we shouldn't be tracking what we are + if(isliving(loc)) + var/mob/living/L = loc + to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") + playsound(L, 'sound/machines/triple_beep.ogg', 50, 1) + mode = new_mode + target = null //Switch modes so we can find the new target + +/obj/item/weapon/pinpointer/proc/refresh_target() //Periodically removes the target to allow the pinpointer to update (i.e. malf AI shunts, an operative dies) + target = null + +/obj/item/weapon/pinpointer/syndicate //Syndicate pinpointers automatically point towards the infiltrator once the nuke is active. + name = "syndicate pinpointer" + desc = "A handheld tracking device that locks onto certain signals. It's configured to switch tracking modes once it detects the activation signal of a nuclear device." + +/obj/item/weapon/pinpointer/syndicate/cyborg //Cyborg pinpointers just look for a random operative. + name = "cyborg syndicate pinpointer" + desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." + mode = TRACK_OPERATIVES + flags = NODROP + + + diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 6ac0ab8c7c..039b4cc3a4 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -67,7 +67,14 @@ /datum/objective/proc/update_explanation_text() //Default does nothing, override where needed -/datum/objective/proc/give_special_equipment() +/datum/objective/proc/give_special_equipment(special_equipment) + if(owner && owner.current) + if(ishuman(owner.current)) + var/mob/living/carbon/human/H = owner.current + var/list/slots = list ("backpack" = slot_in_backpack) + for(var/eq_path in special_equipment) + var/obj/O = new eq_path + H.equip_in_one_of_slots(O, slots) /datum/objective/assassinate var/target_role_type=0 @@ -94,6 +101,14 @@ else explanation_text = "Free Objective" +/datum/objective/assassinate/internal + var/stolen = 0 //Have we already eliminated this target? + +/datum/objective/assassinate/internal/update_explanation_text() + ..() + if(target && !target.current) + explanation_text = "Assassinate [target.name], who was obliterated" + /datum/objective/mutiny var/target_role_type=0 @@ -468,7 +483,7 @@ GLOBAL_LIST_EMPTY(possible_items) steal_target = targetinfo.targetitem explanation_text = "Steal [targetinfo.name]." dangerrating = targetinfo.difficulty - give_special_equipment() + give_special_equipment(targetinfo.special_equipment) return steal_target else explanation_text = "Free objective" @@ -511,15 +526,6 @@ GLOBAL_LIST_EMPTY(possible_items) return 1 return 0 -/datum/objective/steal/give_special_equipment() - if(owner && owner.current && targetinfo) - if(ishuman(owner.current)) - var/mob/living/carbon/human/H = owner.current - var/list/slots = list ("backpack" = slot_in_backpack) - for(var/eq_path in targetinfo.special_equipment) - var/obj/O = new eq_path - H.equip_in_one_of_slots(O, slots) - GLOBAL_LIST_EMPTY(possible_items_special) /datum/objective/steal/special //ninjas are so special they get their own subtype good for them @@ -695,6 +701,9 @@ GLOBAL_LIST_EMPTY(possible_items_special) explanation_text = "Destroy [target.name], the experimental AI." else explanation_text = "Free Objective" + +/datum/objective/destroy/internal + var/stolen = FALSE //Have we already eliminated this target? /datum/objective/steal_five_of_type explanation_text = "Steal at least five items!" diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm index cb6609ebe6..2ee546c7aa 100644 --- a/code/game/gamemodes/traitor/double_agents.dm +++ b/code/game/gamemodes/traitor/double_agents.dm @@ -1,9 +1,13 @@ +#define PINPOINTER_MINIMUM_RANGE 15 +#define PINPOINTER_EXTRA_RANDOM_RANGE 10 +#define PINPOINTER_PING_TIME 40 + /datum/game_mode/traitor/internal_affairs name = "Internal Affairs" config_tag = "internal_affairs" employer = "Internal Affairs" - required_players = 25 - required_enemies = 5 + required_players = 25 + required_enemies = 5 recommended_enemies = 8 reroll_friendly = 0 traitor_name = "Nanotrasen Internal Affairs Agent" @@ -18,15 +22,189 @@ var/list/target_list = list() var/list/late_joining_list = list() + /datum/game_mode/traitor/internal_affairs/post_setup() var/i = 0 for(var/datum/mind/traitor in traitors) i++ if(i + 1 > traitors.len) i = 0 - target_list[traitor] = traitors[i + 1] + target_list[traitor] = traitors[i+1] ..() + +/datum/status_effect/agent_pinpointer + id = "agent_pinpointer" + duration = -1 + tick_interval = PINPOINTER_PING_TIME + alert_type = /obj/screen/alert/status_effect/agent_pinpointer + var/minimum_range = PINPOINTER_MINIMUM_RANGE + var/mob/scan_target = null + +/obj/screen/alert/status_effect/agent_pinpointer + name = "Internal Affairs Integrated Pinpointer" + desc = "Even stealthier than a normal implant." + icon = 'icons/obj/device.dmi' + icon_state = "pinon" + +/datum/status_effect/agent_pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction + if(!scan_target) + linked_alert.icon_state = "pinonnull" + return + var/turf/here = get_turf(owner) + var/turf/there = get_turf(scan_target) + if(here.z != there.z) + linked_alert.icon_state = "pinonnull" + return + if(get_dist_euclidian(here,there)<=minimum_range + rand(0, PINPOINTER_EXTRA_RANDOM_RANGE)) + linked_alert.icon_state = "pinondirect" + else + linked_alert.setDir(get_dir(here, there)) + switch(get_dist(here, there)) + if(1 to 8) + linked_alert.icon_state = "pinonclose" + if(9 to 16) + linked_alert.icon_state = "pinonmedium" + if(16 to INFINITY) + linked_alert.icon_state = "pinonfar" + + +/datum/status_effect/agent_pinpointer/proc/scan_for_target() + scan_target = null + if(owner) + if(owner.mind) + if(owner.mind.objectives) + for(var/datum/objective/objective_ in owner.mind.objectives) + if(!is_internal_objective(objective_)) + continue + var/datum/objective/assassinate/internal/objective = objective_ + var/mob/current = objective.target.current + if(current&¤t.stat!=DEAD) + scan_target = current + break + + +/datum/status_effect/agent_pinpointer/tick() + if(!owner) + qdel(src) + return + scan_for_target() + point_to_target() + +/proc/give_pinpointer(datum/mind/owner) + if(owner && owner.current) + owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer) + + +/datum/internal_agent_state + var/traitored = FALSE + var/datum/mind/owner = null + var/list/datum/mind/targets_stolen = list() + +/proc/is_internal_objective(datum/objective/O) + return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal)) + +/proc/replace_escape_objective(datum/mind/owner) + if(!owner||!owner.objectives) + return + for (var/objective_ in owner.objectives) + if(!(istype(objective_, /datum/objective/escape)||istype(objective_,/datum/objective/survive))) + continue + owner.objectives -= objective_ + var/datum/objective/martyr/martyr_objective = new + martyr_objective.owner = owner + owner.objectives += martyr_objective + +/proc/reinstate_escape_objective(datum/mind/owner) + if(!owner||!owner.objectives) + return + for (var/objective_ in owner.objectives) + if(!istype(objective_, /datum/objective/martyr)) + continue + owner.objectives -= objective_ + if(issilicon(owner)) + var/datum/objective/survive/survive_objective = new + survive_objective.owner = owner + owner.objectives += survive_objective + else + var/datum/objective/escape/escape_objective = new + escape_objective.owner = owner + owner.objectives += escape_objective + +/datum/internal_agent_state/proc/steal_targets(datum/mind/victim) + if(!owner.current||owner.current.stat==DEAD) //Should already be guaranteed if this is only called from steal_targets_timer_func, but better to be safe code than sorry code + return + var/already_traitored = traitored + to_chat(owner.current, " Target eliminated: [victim.name]") + for(var/objective_ in victim.objectives) + if(istype(objective_, /datum/objective/assassinate/internal)) + var/datum/objective/assassinate/internal/objective = objective_ + if(objective.target==owner) + traitored = TRUE + else if(targets_stolen.Find(objective.target) == 0) + var/datum/objective/assassinate/internal/new_objective = new + new_objective.owner = owner + new_objective.target = objective.target + new_objective.update_explanation_text() + owner.objectives += new_objective + targets_stolen += objective.target + var/status_text = objective.check_completion() ? "neutralised" : "active" + to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ") + else if(istype(objective_, /datum/objective/destroy/internal)) + var/datum/objective/destroy/internal/objective = objective_ + var/datum/objective/destroy/internal/new_objective = new + if(objective.target==owner) + traitored = TRUE + else if(targets_stolen.Find(objective.target) == 0) + new_objective.owner = owner + new_objective.target = objective.target + new_objective.update_explanation_text() + owner.objectives += new_objective + targets_stolen += objective.target + var/status_text = objective.check_completion() ? "neutralised" : "active" + to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ") + if(traitored&&!already_traitored) + for(var/objective_ in owner.objectives) + if(!is_internal_objective(objective_)) + continue + var/datum/objective/assassinate/internal/objective = objective_ + if(!objective.check_completion()) + traitored = FALSE + return + to_chat(owner.current," All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.") + replace_escape_objective(owner) + + + +/datum/internal_agent_state/proc/steal_targets_timer_func() + if(owner&&owner.current&&owner.current.stat!=DEAD) + for(var/objective_ in owner.objectives) + if(!is_internal_objective(objective_)) + continue + var/datum/objective/assassinate/internal/objective = objective_ + if(!objective.target) + continue + if(objective.check_completion()) + if(objective.stolen) + continue + else + steal_targets(objective.target) + objective.stolen = TRUE + else + if(objective.stolen) + var/fail_msg = "Your sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, pulled one over on you, and is still alive - do the job properly this time! " + if(traitored) + fail_msg += " The truth could still slip out! Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to your contract being terminated." + reinstate_escape_objective(owner) + traitored = FALSE + to_chat(owner.current, fail_msg) + objective.stolen = FALSE + add_steal_targets_timer(owner) + +/datum/internal_agent_state/proc/add_steal_targets_timer() + var/datum/callback/C = new(src, .steal_targets_timer_func) + addtimer(C, 30) + /datum/game_mode/traitor/internal_affairs/forge_traitor_objectives(datum/mind/traitor) if(target_list.len && target_list[traitor]) // Is a double agent @@ -34,13 +212,13 @@ // Assassinate var/datum/mind/target_mind = target_list[traitor] if(issilicon(target_mind.current)) - var/datum/objective/destroy/destroy_objective = new + var/datum/objective/destroy/internal/destroy_objective = new destroy_objective.owner = traitor destroy_objective.target = target_mind destroy_objective.update_explanation_text() traitor.objectives += destroy_objective else - var/datum/objective/assassinate/kill_objective = new + var/datum/objective/assassinate/internal/kill_objective = new kill_objective.owner = traitor kill_objective.target = target_mind kill_objective.update_explanation_text() @@ -55,6 +233,11 @@ var/datum/objective/escape/escape_objective = new escape_objective.owner = traitor traitor.objectives += escape_objective + var/datum/internal_agent_state/state = new + state.owner=traitor + state.add_steal_targets_timer() + if(!issilicon(traitor.current)) + give_pinpointer(traitor) else ..() // Give them standard objectives. @@ -106,14 +289,18 @@ /datum/game_mode/traitor/internal_affairs/greet_traitor(datum/mind/traitor) var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") - to_chat(traitor.current, "You are the [traitor_name].") - to_chat(traitor.current, "Your target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.") + to_chat(traitor.current, "You are the [traitor_name].") + to_chat(traitor.current, "Your target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.") to_chat(traitor.current, "While you have a license to kill, unneeded property damage or loss of employee life will lead to your contract being terminated.") - to_chat(traitor.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.") - to_chat(traitor.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") + to_chat(traitor.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.") + to_chat(traitor.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") traitor.announce_objectives() /datum/game_mode/traitor/internal_affairs/give_codewords(mob/living/traitor_mob) - return \ No newline at end of file + return + +#undef PINPOINTER_EXTRA_RANDOM_RANGE +#undef PINPOINTER_MINIMUM_RANGE +#undef PINPOINTER_PING_TIME diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 90a953c446..4673b572a8 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -201,11 +201,14 @@ return + /datum/game_mode/proc/finalize_traitor(var/datum/mind/traitor) if(issilicon(traitor.current)) add_law_zero(traitor.current) + traitor.current.playsound_local('sound/ambience/antag/Malf.ogg',100,0) else equip_traitor(traitor.current) + traitor.current.playsound_local('sound/ambience/antag/TatorAlert.ogg',100,0) SSticker.mode.update_traitor_icons_added(traitor) return @@ -234,10 +237,6 @@ to_chat(killer, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!") killer.add_malf_picker() -/datum/game_mode/proc/add_law_sixsixsix(mob/living/silicon/devil) - var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][devil.mind.devilinfo.ban], GLOB.lawlorify[LAW][devil.mind.devilinfo.obligation], "Accomplish your objectives at all costs.") - devil.set_law_sixsixsix(laws) - /datum/game_mode/proc/auto_declare_completion_traitor() if(traitors.len) var/text = "
The [traitor_name]s were:" @@ -412,4 +411,3 @@ var/datum/atom_hud/antag/traitorhud = GLOB.huds[ANTAG_HUD_TRAITOR] traitorhud.leave_hud(traitor_mind.current) set_antag_hud(traitor_mind.current, null) - diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index 1eb51a95b4..dd69d77b14 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -33,6 +33,7 @@ /datum/game_mode/wizard/raginmages/greet_wizard(datum/mind/wizard, you_are=1) if (you_are) to_chat(wizard.current, "You are the Space Wizard!") + wizard.current.playsound_local('sound/ambience/antag/RagesMages.ogg',100,0) to_chat(wizard.current, "The Space Wizards Federation has given you the following tasks:") var/obj_count = 1 diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 7ccf7a6b7e..503fc0f396 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -54,7 +54,7 @@ if(!ishuman(M))//If target is not a human. return ..() if(iscultist(M)) - to_chat(user, "\"Come now, do not capture your fellow's soul.\"") + to_chat(user, "\"Come now, do not capture your bretheren's soul.\"") return add_logs(user, M, "captured [M.name]'s soul", src) @@ -69,6 +69,9 @@ user.Paralyse(5) to_chat(user, "Your body is wracked with debilitating pain!") return + release_shades(user) + +/obj/item/device/soulstone/proc/release_shades(mob/user) for(var/mob/living/simple_animal/shade/A in src) A.status_flags &= ~GODMODE A.canmove = 1 @@ -132,11 +135,11 @@ if("VICTIM") var/mob/living/carbon/human/T = target - if(SSticker.mode.name == "cult" && T.mind == SSticker.mode:sacrifice_target) + if(is_sacrifice_target(T.mind)) if(iscultist(user)) to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") else - to_chat(user, "The soulstone doesn't work for no apparent reason.") + to_chat(user, "The soulstone seems to reject this soul.") return 0 if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") @@ -188,7 +191,10 @@ else makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc) - + for(var/datum/mind/B in SSticker.mode.cult) + if(B == A.mind) + SSticker.mode.cult -= A.mind + SSticker.mode.update_cult_icons_removed(A.mind) qdel(T) user.drop_item() qdel(src) @@ -200,6 +206,9 @@ var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) if(stoner) newstruct.faction |= "\ref[stoner]" + newstruct.master = stoner + var/datum/action/innate/seek_master/SM = new() + SM.Grant(newstruct) newstruct.key = target.key if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode) SSticker.mode.add_cultist(newstruct.mind, 0) @@ -207,6 +216,8 @@ to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow their orders and help them complete their goals at all costs.") else if(stoner) to_chat(newstruct, "You are still bound to serve your creator, [stoner], follow their orders and help them complete their goals at all costs.") + var/obj/screen/alert/bloodsense/BS = newstruct.throw_alert("bloodsense", /obj/screen/alert/bloodsense) + BS.Cviewer = newstruct newstruct.cancel_camera() @@ -244,7 +255,7 @@ break if(!chosen_ghost) //Failing that, we grab a ghost - var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, poll_time = 50) + var/list/consenting_candidates = pollGhostCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, poll_time = 50) if(consenting_candidates.len) chosen_ghost = pick(consenting_candidates) if(!T) @@ -259,4 +270,4 @@ T.dropItemToGround(W) init_shade(T, U) qdel(T) - return 1 + return 1 \ No newline at end of file diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index b25187195d..143d60be91 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -1,908 +1,916 @@ -/datum/spellbook_entry - var/name = "Entry Name" - - var/spell_type = null - var/desc = "" - var/category = "Offensive" - var/cost = 2 - var/refundable = 1 - var/surplus = -1 // -1 for infinite, not used by anything atm - var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell - var/buy_word = "Learn" - var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook - var/list/no_coexistance_typecache //Used so you can't have specific spells together - -/datum/spellbook_entry/New() - ..() - no_coexistance_typecache = typecacheof(no_coexistance_typecache) - -/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied - return 1 - -/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) // Specific circumstances - if(book.uses= aspell.level_max) - to_chat(user, "This spell cannot be improved further.") - return 0 - else - aspell.name = initial(aspell.name) - aspell.spell_level++ - aspell.charge_max = round(initial(aspell.charge_max) - aspell.spell_level * (initial(aspell.charge_max) - aspell.cooldown_min)/ aspell.level_max) - if(aspell.charge_max < aspell.charge_counter) - aspell.charge_counter = aspell.charge_max - switch(aspell.spell_level) - if(1) - to_chat(user, "You have improved [aspell.name] into Efficient [aspell.name].") - aspell.name = "Efficient [aspell.name]" - if(2) - to_chat(user, "You have further improved [aspell.name] into Quickened [aspell.name].") - aspell.name = "Quickened [aspell.name]" - if(3) - to_chat(user, "You have further improved [aspell.name] into Free [aspell.name].") - aspell.name = "Free [aspell.name]" - if(4) - to_chat(user, "You have further improved [aspell.name] into Instant [aspell.name].") - aspell.name = "Instant [aspell.name]" - if(aspell.spell_level >= aspell.level_max) - to_chat(user, "This spell cannot be strengthened any further.") +/datum/spellbook_entry + var/name = "Entry Name" + + var/spell_type = null + var/desc = "" + var/category = "Offensive" + var/cost = 2 + var/refundable = 1 + var/surplus = -1 // -1 for infinite, not used by anything atm + var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell + var/buy_word = "Learn" + var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook + var/list/no_coexistance_typecache //Used so you can't have specific spells together + +/datum/spellbook_entry/New() + ..() + no_coexistance_typecache = typecacheof(no_coexistance_typecache) + +/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied + return 1 + +/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) // Specific circumstances + if(book.uses= aspell.level_max) + to_chat(user, "This spell cannot be improved further.") + return 0 + else + aspell.name = initial(aspell.name) + aspell.spell_level++ + aspell.charge_max = round(initial(aspell.charge_max) - aspell.spell_level * (initial(aspell.charge_max) - aspell.cooldown_min)/ aspell.level_max) + if(aspell.charge_max < aspell.charge_counter) + aspell.charge_counter = aspell.charge_max + switch(aspell.spell_level) + if(1) + to_chat(user, "You have improved [aspell.name] into Efficient [aspell.name].") + aspell.name = "Efficient [aspell.name]" + if(2) + to_chat(user, "You have further improved [aspell.name] into Quickened [aspell.name].") + aspell.name = "Quickened [aspell.name]" + if(3) + to_chat(user, "You have further improved [aspell.name] into Free [aspell.name].") + aspell.name = "Free [aspell.name]" + if(4) + to_chat(user, "You have further improved [aspell.name] into Instant [aspell.name].") + aspell.name = "Instant [aspell.name]" + if(aspell.spell_level >= aspell.level_max) + to_chat(user, "This spell cannot be strengthened any further.") SSblackbox.add_details("wizard_spell_improved", "[name]|[aspell.level]") - return 1 - //No same spell found - just learn it + return 1 + //No same spell found - just learn it SSblackbox.add_details("wizard_spell_learned", name) - user.mind.AddSpell(S) - to_chat(user, "You have learned [S.name].") - return 1 - -/datum/spellbook_entry/proc/CanRefund(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - if(!refundable) - return 0 - if(!S) - S = new spell_type() - for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) - if(initial(S.name) == initial(aspell.name)) - return 1 - return 0 - -/datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return point value or -1 for failure - var/area/wizard_station/A = locate() - if(!(user in A.contents)) - to_chat(user, "You can only refund spells at the wizard lair") - return -1 - if(!S) - S = new spell_type() - var/spell_levels = 0 - for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) - if(initial(S.name) == initial(aspell.name)) - spell_levels = aspell.spell_level - user.mind.spell_list.Remove(aspell) - qdel(S) - return cost * (spell_levels+1) - return -1 -/datum/spellbook_entry/proc/GetInfo() - if(!S) - S = new spell_type() - var/dat ="" - dat += "[initial(S.name)]" - if(S.charge_type == "recharge") - dat += " Cooldown:[S.charge_max/10]" - dat += " Cost:[cost]
" - dat += "[S.desc][desc]
" - dat += "[S.clothes_req?"Needs wizard garb":"Can be cast without wizard garb"]
" - return dat - -/datum/spellbook_entry/fireball - name = "Fireball" - spell_type = /obj/effect/proc_holder/spell/aimed/fireball - -/datum/spellbook_entry/rod_form - name = "Rod Form" - spell_type = /obj/effect/proc_holder/spell/targeted/rod_form - cost = 3 - -/datum/spellbook_entry/magicm - name = "Magic Missile" - spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile - category = "Defensive" - -/datum/spellbook_entry/disintegrate - name = "Disintegrate" - spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate - -/datum/spellbook_entry/disabletech - name = "Disable Tech" - spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/repulse - name = "Repulse" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse - category = "Defensive" - -/datum/spellbook_entry/lightningPacket - name = "Lightning bolt! Lightning bolt!" - spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket - category = "Defensive" - -/datum/spellbook_entry/timestop - name = "Time Stop" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop - category = "Defensive" - -/datum/spellbook_entry/smoke - name = "Smoke" - spell_type = /obj/effect/proc_holder/spell/targeted/smoke - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/blind - name = "Blind" - spell_type = /obj/effect/proc_holder/spell/targeted/trigger/blind - cost = 1 - -/datum/spellbook_entry/mindswap - name = "Mindswap" - spell_type = /obj/effect/proc_holder/spell/targeted/mind_transfer - category = "Mobility" - -/datum/spellbook_entry/forcewall - name = "Force Wall" - spell_type = /obj/effect/proc_holder/spell/targeted/forcewall - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/blink - name = "Blink" - spell_type = /obj/effect/proc_holder/spell/targeted/turf_teleport/blink - category = "Mobility" - -/datum/spellbook_entry/teleport - name = "Teleport" - spell_type = /obj/effect/proc_holder/spell/targeted/area_teleport/teleport - category = "Mobility" - -/datum/spellbook_entry/mutate - name = "Mutate" - spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate - -/datum/spellbook_entry/jaunt - name = "Ethereal Jaunt" - spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt - category = "Mobility" - -/datum/spellbook_entry/knock - name = "Knock" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock - category = "Mobility" - cost = 1 - -/datum/spellbook_entry/fleshtostone - name = "Flesh to Stone" - spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone - -/datum/spellbook_entry/summonitem - name = "Summon Item" - spell_type = /obj/effect/proc_holder/spell/targeted/summonitem - category = "Assistance" - cost = 1 - -/datum/spellbook_entry/lichdom - name = "Bind Soul" - spell_type = /obj/effect/proc_holder/spell/targeted/lichdom - category = "Defensive" - -/datum/spellbook_entry/teslablast - name = "Tesla Blast" - spell_type = /obj/effect/proc_holder/spell/targeted/tesla - -/datum/spellbook_entry/lightningbolt - name = "Lightning Bolt" - spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt - cost = 3 - -/datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return 1 on success - . = ..() - SET_SECONDARY_FLAG(user, TESLA_IGNORE) - -/datum/spellbook_entry/infinite_guns - name = "Lesser Summon Guns" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - -/datum/spellbook_entry/arcane_barrage - name = "Arcane Barrage" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - -/datum/spellbook_entry/barnyard - name = "Barnyard Curse" - spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse - -/datum/spellbook_entry/charge - name = "Charge" - spell_type = /obj/effect/proc_holder/spell/targeted/charge - category = "Assistance" - cost = 1 - -/datum/spellbook_entry/shapeshift - name = "Wild Shapeshift" - spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift - category = "Assistance" - cost = 1 - -/datum/spellbook_entry/spacetime_dist - name = "Spacetime Distortion" - spell_type = /obj/effect/proc_holder/spell/spacetime_dist - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/the_traps - name = "The Traps!" - spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps + user.mind.AddSpell(S) + to_chat(user, "You have learned [S.name].") + return 1 + +/datum/spellbook_entry/proc/CanRefund(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + if(!refundable) + return 0 + if(!S) + S = new spell_type() + for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) + if(initial(S.name) == initial(aspell.name)) + return 1 + return 0 + +/datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return point value or -1 for failure + var/area/wizard_station/A = locate() + if(!(user in A.contents)) + to_chat(user, "You can only refund spells at the wizard lair") + return -1 + if(!S) + S = new spell_type() + var/spell_levels = 0 + for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list) + if(initial(S.name) == initial(aspell.name)) + spell_levels = aspell.spell_level + user.mind.spell_list.Remove(aspell) + qdel(S) + return cost * (spell_levels+1) + return -1 +/datum/spellbook_entry/proc/GetInfo() + if(!S) + S = new spell_type() + var/dat ="" + dat += "[initial(S.name)]" + if(S.charge_type == "recharge") + dat += " Cooldown:[S.charge_max/10]" + dat += " Cost:[cost]
" + dat += "[S.desc][desc]
" + dat += "[S.clothes_req?"Needs wizard garb":"Can be cast without wizard garb"]
" + return dat + +/datum/spellbook_entry/fireball + name = "Fireball" + spell_type = /obj/effect/proc_holder/spell/aimed/fireball + +/* +/datum/spellbook_entry/rod_form + name = "Rod Form" + spell_type = /obj/effect/proc_holder/spell/targeted/rod_form */ + +/datum/spellbook_entry/magicm + name = "Magic Missile" + spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile category = "Defensive" - cost = 1 - - -/datum/spellbook_entry/item - name = "Buy Item" - refundable = 0 - buy_word = "Summon" - var/item_path= null - - -/datum/spellbook_entry/item/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - new item_path(get_turf(user)) + +/datum/spellbook_entry/disintegrate + name = "Disintegrate" + spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate + cost = 6 + +/datum/spellbook_entry/disabletech + name = "Disable Tech" + spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/repulse + name = "Repulse" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse + category = "Defensive" + +/datum/spellbook_entry/lightningPacket + name = "Lightning bolt! Lightning bolt!" + spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket + category = "Defensive" + +/datum/spellbook_entry/timestop + name = "Time Stop" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop + category = "Defensive" + cost = 4 + +/datum/spellbook_entry/smoke + name = "Smoke" + spell_type = /obj/effect/proc_holder/spell/targeted/smoke + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/blind + name = "Blind" + spell_type = /obj/effect/proc_holder/spell/targeted/trigger/blind + cost = 1 + +/datum/spellbook_entry/mindswap + name = "Mindswap" + spell_type = /obj/effect/proc_holder/spell/targeted/mind_transfer + category = "Mobility" + +/datum/spellbook_entry/forcewall + name = "Force Wall" + spell_type = /obj/effect/proc_holder/spell/targeted/forcewall + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/blink + name = "Blink" + spell_type = /obj/effect/proc_holder/spell/targeted/turf_teleport/blink + category = "Mobility" + +/datum/spellbook_entry/teleport + name = "Teleport" + spell_type = /obj/effect/proc_holder/spell/targeted/area_teleport/teleport + category = "Mobility" + +/datum/spellbook_entry/mutate + name = "Mutate" + spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate + +/datum/spellbook_entry/jaunt + name = "Ethereal Jaunt" + spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt + category = "Mobility" + +/datum/spellbook_entry/knock + name = "Knock" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock + category = "Mobility" + cost = 1 + +/datum/spellbook_entry/fleshtostone + name = "Flesh to Stone" + spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone + +/datum/spellbook_entry/summonitem + name = "Summon Item" + spell_type = /obj/effect/proc_holder/spell/targeted/summonitem + category = "Assistance" + cost = 1 + +/datum/spellbook_entry/lichdom + name = "Bind Soul" + spell_type = /obj/effect/proc_holder/spell/targeted/lichdom + category = "Defensive" + cost = 4 + +/datum/spellbook_entry/teslablast + name = "Tesla Blast" + spell_type = /obj/effect/proc_holder/spell/targeted/tesla + +/datum/spellbook_entry/lightningbolt + name = "Lightning Bolt" + spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt + cost = 3 + +/datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return 1 on success + . = ..() + SET_SECONDARY_FLAG(user, TESLA_IGNORE) + +/datum/spellbook_entry/infinite_guns + name = "Lesser Summon Guns" + spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun + cost = 3 + no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage + +/datum/spellbook_entry/arcane_barrage + name = "Arcane Barrage" + spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage + cost = 3 + no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun + +/datum/spellbook_entry/barnyard + name = "Barnyard Curse" + spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse + +/datum/spellbook_entry/charge + name = "Charge" + spell_type = /obj/effect/proc_holder/spell/targeted/charge + category = "Assistance" + cost = 1 + +/datum/spellbook_entry/shapeshift + name = "Wild Shapeshift" + spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift + category = "Assistance" + cost = 1 + +/datum/spellbook_entry/spacetime_dist + name = "Spacetime Distortion" + spell_type = /obj/effect/proc_holder/spell/spacetime_dist + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/the_traps + name = "The Traps!" + spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps + category = "Defensive" + cost = 1 + + +/datum/spellbook_entry/item + name = "Buy Item" + refundable = 0 + buy_word = "Summon" + var/item_path= null + + +/datum/spellbook_entry/item/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + new item_path(get_turf(user)) SSblackbox.add_details("wizard_spell_learned", name) - return 1 - -/datum/spellbook_entry/item/GetInfo() - var/dat ="" - dat += "[name]" - dat += " Cost:[cost]
" - dat += "[desc]
" - if(surplus>=0) - dat += "[surplus] left.
" - return dat - -/datum/spellbook_entry/item/staffchange - name = "Staff of Change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - item_path = /obj/item/weapon/gun/magic/staff/change - -/datum/spellbook_entry/item/staffanimation - name = "Staff of Animation" - desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." - item_path = /obj/item/weapon/gun/magic/staff/animate - category = "Assistance" - -/datum/spellbook_entry/item/staffchaos - name = "Staff of Chaos" - desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." - item_path = /obj/item/weapon/gun/magic/staff/chaos - -/datum/spellbook_entry/item/spellblade - name = "Spellblade" - desc = "A sword capable of firing blasts of energy which rip targets limb from limb." - item_path = /obj/item/weapon/gun/magic/staff/spellblade - -/datum/spellbook_entry/item/staffdoor - name = "Staff of Door Creation" - desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." - item_path = /obj/item/weapon/gun/magic/staff/door - cost = 1 - category = "Mobility" - -/datum/spellbook_entry/item/staffhealing - name = "Staff of Healing" - desc = "An altruistic staff that can heal the lame and raise the dead." - item_path = /obj/item/weapon/gun/magic/staff/healing - cost = 1 - category = "Defensive" - -/datum/spellbook_entry/item/scryingorb - name = "Scrying Orb" - desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." - item_path = /obj/item/weapon/scrying - category = "Defensive" - -/datum/spellbook_entry/item/scryingorb/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - if(..()) - if (!(user.dna.check_mutation(XRAY))) - user.dna.add_mutation(XRAY) - return 1 - -/datum/spellbook_entry/item/soulstones - name = "Six Soul Stone Shards and the spell Artificer" - desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." - item_path = /obj/item/weapon/storage/belt/soulstone/full - category = "Assistance" - -/datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - . =..() - if(.) - user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null)) - return . - -/datum/spellbook_entry/item/necrostone - name = "A Necromantic Stone" - desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." - item_path = /obj/item/device/necromantic_stone - category = "Assistance" - -/datum/spellbook_entry/item/wands - name = "Wand Assortment" - desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt." - item_path = /obj/item/weapon/storage/belt/wands/full - category = "Defensive" - -/datum/spellbook_entry/item/armor - name = "Mastercrafted Armor Set" - desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." - item_path = /obj/item/clothing/suit/space/hardsuit/wizard - category = "Defensive" - -/datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - . = ..() - if(.) - new /obj/item/clothing/shoes/sandal/magic(get_turf(user)) //In case they've lost them. - new /obj/item/clothing/gloves/color/purple(get_turf(user))//To complete the outfit - -/datum/spellbook_entry/item/contract - name = "Contract of Apprenticeship" - desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." - item_path = /obj/item/weapon/antag_spawner/contract - category = "Assistance" - -/datum/spellbook_entry/item/guardian - name = "Guardian Deck" - desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ - It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." - item_path = /obj/item/weapon/guardiancreator/choose/wizard - category = "Assistance" - -/datum/spellbook_entry/item/guardian/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - . = ..() - if(.) - new /obj/item/weapon/paper/guardian/wizard(get_turf(user)) - -/datum/spellbook_entry/item/bloodbottle - name = "Bottle of Blood" - desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim." - item_path = /obj/item/weapon/antag_spawner/slaughter_demon - limit = 3 - category = "Assistance" - -/datum/spellbook_entry/item/hugbottle - name = "Bottle of Tickles" - desc = "A bottle of magically infused fun, the smell of which will \ - attract adorable extradimensional beings when broken. These beings \ - are similar to slaughter demons, but they do not permamently kill \ - their victims, instead putting them in an extradimensional hugspace, \ - to be released on the demon's death. Chaotic, but not ultimately \ - damaging. The crew's reaction to the other hand could be very \ - destructive." - item_path = /obj/item/weapon/antag_spawner/slaughter_demon/laughter - cost = 1 //non-destructive; it's just a jape, sibling! - limit = 3 - category = "Assistance" - -/datum/spellbook_entry/item/mjolnir - name = "Mjolnir" - desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." - item_path = /obj/item/weapon/twohanded/mjollnir - -/datum/spellbook_entry/item/singularity_hammer - name = "Singularity Hammer" - desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." - item_path = /obj/item/weapon/twohanded/singularityhammer - -/datum/spellbook_entry/item/battlemage - name = "Battlemage Armour" - desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." - item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard - limit = 1 - category = "Defensive" - -/datum/spellbook_entry/item/battlemage_charge - name = "Battlemage Armour Charges" - desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour." - item_path = /obj/item/wizard_armour_charge - category = "Defensive" - cost = 1 - -/datum/spellbook_entry/item/warpwhistle - name = "Warp Whistle" - desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the begining of every use." - item_path = /obj/item/warpwhistle - category = "Mobility" - cost = 1 - -/datum/spellbook_entry/summon - name = "Summon Stuff" - category = "Rituals" - refundable = 0 - buy_word = "Cast" - var/active = 0 - -/datum/spellbook_entry/summon/CanBuy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) - return ..() && !active - -/datum/spellbook_entry/summon/GetInfo() - var/dat ="" - dat += "[name]" - if(cost>0) - dat += " Cost:[cost]
" - else - dat += " No Cost
" - dat += "[desc]
" - if(active) - dat += "Already cast!
" - return dat - -/datum/spellbook_entry/summon/ghosts - name = "Summon Ghosts" - desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." - cost = 0 - -/datum/spellbook_entry/summon/ghosts/IsAvailible() - if(!SSticker.mode) - return FALSE - else - return TRUE - -/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/weapon/spellbook/book) + return 1 + +/datum/spellbook_entry/item/GetInfo() + var/dat ="" + dat += "[name]" + dat += " Cost:[cost]
" + dat += "[desc]
" + if(surplus>=0) + dat += "[surplus] left.
" + return dat +/* // these have never been fun, like, ever. +/datum/spellbook_entry/item/staffchange + name = "Staff of Change" + desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." + item_path = /obj/item/weapon/gun/magic/staff/change + +/datum/spellbook_entry/item/staffanimation + name = "Staff of Animation" + desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." + item_path = /obj/item/weapon/gun/magic/staff/animate + category = "Assistance" */ + +/datum/spellbook_entry/item/staffchaos + name = "Staff of Chaos" + desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." + item_path = /obj/item/weapon/gun/magic/staff/chaos + cost = 4 + +/datum/spellbook_entry/item/spellblade + name = "Spellblade" + desc = "A sword capable of firing blasts of energy which rip targets limb from limb." + item_path = /obj/item/weapon/gun/magic/staff/spellblade + +/datum/spellbook_entry/item/staffdoor + name = "Staff of Door Creation" + desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." + item_path = /obj/item/weapon/gun/magic/staff/door + cost = 1 + category = "Mobility" + +/datum/spellbook_entry/item/staffhealing + name = "Staff of Healing" + desc = "An altruistic staff that can heal the lame and raise the dead." + item_path = /obj/item/weapon/gun/magic/staff/healing + cost = 1 + category = "Defensive" + +/datum/spellbook_entry/item/scryingorb + name = "Scrying Orb" + desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." + item_path = /obj/item/weapon/scrying + category = "Defensive" + +/datum/spellbook_entry/item/scryingorb/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + if(..()) + if (!(user.dna.check_mutation(XRAY))) + user.dna.add_mutation(XRAY) + return 1 + +/datum/spellbook_entry/item/soulstones + name = "Six Soul Stone Shards and the spell Artificer" + desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." + item_path = /obj/item/weapon/storage/belt/soulstone/full + category = "Assistance" + +/datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + . =..() + if(.) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null)) + return . + +/datum/spellbook_entry/item/necrostone + name = "A Necromantic Stone" + desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." + item_path = /obj/item/device/necromantic_stone + category = "Assistance" + +/datum/spellbook_entry/item/wands + name = "Wand Assortment" + desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt." + item_path = /obj/item/weapon/storage/belt/wands/full + category = "Defensive" + +/datum/spellbook_entry/item/armor + name = "Mastercrafted Armor Set" + desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." + item_path = /obj/item/clothing/suit/space/hardsuit/wizard + category = "Defensive" + +/datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + . = ..() + if(.) + new /obj/item/clothing/shoes/sandal/magic(get_turf(user)) //In case they've lost them. + new /obj/item/clothing/gloves/color/purple(get_turf(user))//To complete the outfit + +/datum/spellbook_entry/item/contract + name = "Contract of Apprenticeship" + desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side." + item_path = /obj/item/weapon/antag_spawner/contract + category = "Assistance" + +/datum/spellbook_entry/item/guardian + name = "Guardian Deck" + desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ + It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." + item_path = /obj/item/weapon/guardiancreator/choose/wizard + category = "Assistance" + +/datum/spellbook_entry/item/guardian/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + . = ..() + if(.) + new /obj/item/weapon/paper/guardian/wizard(get_turf(user)) + +/datum/spellbook_entry/item/bloodbottle + name = "Bottle of Blood" + desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim." + item_path = /obj/item/weapon/antag_spawner/slaughter_demon + limit = 3 + category = "Assistance" + +/datum/spellbook_entry/item/hugbottle + name = "Bottle of Tickles" + desc = "A bottle of magically infused fun, the smell of which will \ + attract adorable extradimensional beings when broken. These beings \ + are similar to slaughter demons, but they do not permamently kill \ + their victims, instead putting them in an extradimensional hugspace, \ + to be released on the demon's death. Chaotic, but not ultimately \ + damaging. The crew's reaction to the other hand could be very \ + destructive." + item_path = /obj/item/weapon/antag_spawner/slaughter_demon/laughter + cost = 1 //non-destructive; it's just a jape, sibling! + limit = 3 + category = "Assistance" + +/datum/spellbook_entry/item/mjolnir + name = "Mjolnir" + desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." + item_path = /obj/item/weapon/twohanded/mjollnir + +/datum/spellbook_entry/item/singularity_hammer + name = "Singularity Hammer" + desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." + item_path = /obj/item/weapon/twohanded/singularityhammer + +/datum/spellbook_entry/item/battlemage + name = "Battlemage Armour" + desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." + item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard + limit = 1 + category = "Defensive" + +/datum/spellbook_entry/item/battlemage_charge + name = "Battlemage Armour Charges" + desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour." + item_path = /obj/item/wizard_armour_charge + category = "Defensive" + cost = 1 + +/datum/spellbook_entry/item/warpwhistle + name = "Warp Whistle" + desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the begining of every use." + item_path = /obj/item/warpwhistle + category = "Mobility" + cost = 1 + +/datum/spellbook_entry/summon + name = "Summon Stuff" + category = "Rituals" + refundable = 0 + buy_word = "Cast" + var/active = 0 + +/datum/spellbook_entry/summon/CanBuy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + return ..() && !active + +/datum/spellbook_entry/summon/GetInfo() + var/dat ="" + dat += "[name]" + if(cost>0) + dat += " Cost:[cost]
" + else + dat += " No Cost
" + dat += "[desc]
" + if(active) + dat += "Already cast!
" + return dat + +/datum/spellbook_entry/summon/ghosts + name = "Summon Ghosts" + desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." + cost = 0 + +/datum/spellbook_entry/summon/ghosts/IsAvailible() + if(!SSticker.mode) + return FALSE + else + return TRUE + +/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/weapon/spellbook/book) SSblackbox.add_details("wizard_spell_learned", name) - new /datum/round_event/wizard/ghost() - active = TRUE - to_chat(user, "You have cast summon ghosts!") - playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) - return TRUE - -/datum/spellbook_entry/summon/guns - name = "Summon Guns" - desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!" - -/datum/spellbook_entry/summon/guns/IsAvailible() - if(!SSticker.mode) // In case spellbook is placed on map - return 0 - return (SSticker.mode.name != "ragin' mages" && !config.no_summon_guns) - -/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + new /datum/round_event/wizard/ghost() + active = TRUE + to_chat(user, "You have cast summon ghosts!") + playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) + return TRUE + +/datum/spellbook_entry/summon/guns + name = "Summon Guns" + desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!" + +/datum/spellbook_entry/summon/guns/IsAvailible() + if(!SSticker.mode) // In case spellbook is placed on map + return 0 + return (SSticker.mode.name != "ragin' mages" && !config.no_summon_guns) + +/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) SSblackbox.add_details("wizard_spell_learned", name) - rightandwrong(0, user, 25) - active = 1 - playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) - to_chat(user, "You have cast summon guns!") - return 1 - -/datum/spellbook_entry/summon/magic - name = "Summon Magic" - desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." - -/datum/spellbook_entry/summon/magic/IsAvailible() - if(!SSticker.mode) // In case spellbook is placed on map - return 0 - return (SSticker.mode.name != "ragin' mages" && !config.no_summon_magic) - -/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + rightandwrong(0, user, 25) + active = 1 + playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) + to_chat(user, "You have cast summon guns!") + return 1 + +/datum/spellbook_entry/summon/magic + name = "Summon Magic" + desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." + +/datum/spellbook_entry/summon/magic/IsAvailible() + if(!SSticker.mode) // In case spellbook is placed on map + return 0 + return (SSticker.mode.name != "ragin' mages" && !config.no_summon_magic) + +/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) SSblackbox.add_details("wizard_spell_learned", name) - rightandwrong(1, user, 25) - active = 1 - playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) - to_chat(user, "You have cast summon magic!") - return 1 - -/datum/spellbook_entry/summon/events - name = "Summon Events" - desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events." - var/times = 0 - -/datum/spellbook_entry/summon/events/IsAvailible() - if(!SSticker.mode) // In case spellbook is placed on map - return 0 - return (SSticker.mode.name != "ragin' mages" && !config.no_summon_events) - -/datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) + rightandwrong(1, user, 25) + active = 1 + playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) + to_chat(user, "You have cast summon magic!") + return 1 + +/datum/spellbook_entry/summon/events + name = "Summon Events" + desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events." + var/times = 0 + +/datum/spellbook_entry/summon/events/IsAvailible() + if(!SSticker.mode) // In case spellbook is placed on map + return 0 + return (SSticker.mode.name != "ragin' mages" && !config.no_summon_events) + +/datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) SSblackbox.add_details("wizard_spell_learned", name) - summonevents() - times++ - playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) - to_chat(user, "You have cast summon events.") - return 1 - -/datum/spellbook_entry/summon/events/GetInfo() - . = ..() - if(times>0) - . += "You cast it [times] times.
" - return . - -/obj/item/weapon/spellbook - name = "spell book" - desc = "An unearthly tome that glows with power." - icon = 'icons/obj/library.dmi' - icon_state ="book" - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_TINY - persistence_replacement = /obj/item/weapon/spellbook/oneuse/random - var/uses = 10 - var/temp = null - var/tab = null - var/mob/living/carbon/human/owner - var/list/datum/spellbook_entry/entries = list() - var/list/categories = list() - -/obj/item/weapon/spellbook/examine(mob/user) - ..() - if(owner) - to_chat(user, "There is a small signature on the front cover: \"[owner]\".") - else - to_chat(user, "It appears to have no author.") - -/obj/item/weapon/spellbook/Initialize() - ..() - prepare_spells() - -/obj/item/weapon/spellbook/proc/prepare_spells() - var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon - for(var/T in entry_types) - var/datum/spellbook_entry/E = new T - if(E.IsAvailible()) - entries |= E - categories |= E.category - else - qdel(E) - tab = categories[1] - -/obj/item/weapon/spellbook/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/weapon/antag_spawner/contract)) - var/obj/item/weapon/antag_spawner/contract/contract = O - if(contract.used) - to_chat(user, "The contract has been used, you can't get your points back now!") - else - to_chat(user, "You feed the contract back into the spellbook, refunding your points.") - uses++ - for(var/datum/spellbook_entry/item/contract/CT in entries) - if(!isnull(CT.limit)) - CT.limit++ - qdel(O) - else if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon)) - to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") - uses++ - for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) - if(!isnull(BB.limit)) - BB.limit++ - qdel(O) - -/obj/item/weapon/spellbook/proc/GetCategoryHeader(category) - var/dat = "" - switch(category) - if("Offensive") - dat += "Spells and items geared towards debilitating and destroying.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Defensive") - dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Mobility") - dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Assistance") - dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" - dat += "For spells: the number after the spell name is the cooldown time.
" - dat += "You can reduce this number by spending more points on the spell.
" - if("Challenges") - dat += "The Wizard Federation typically has hard limits on the potency and number of spells brought to the station based on risk.
" - dat += "Arming the station against you will increases the risk, but will grant you one more charge for your spellbook.
" - if("Rituals") - dat += "These powerful spells change the very fabric of reality. Not always in your favour.
" - return dat - -/obj/item/weapon/spellbook/proc/wrap(content) - var/dat = "" - dat +="Spellbook" - dat += {" - - - - "} - dat += {"[content]"} - return dat - -/obj/item/weapon/spellbook/attack_self(mob/user) - if(!owner) - to_chat(user, "You bind the spellbook to yourself.") - owner = user - return - if(user != owner) - to_chat(user, "The [name] does not recognize you as its owner and refuses to open!") - return - user.set_machine(src) - var/dat = "" - - dat += "" - - var/datum/spellbook_entry/E - for(var/i=1,i<=entries.len,i++) - var/spell_info = "" - E = entries[i] - spell_info += E.GetInfo() - if(E.CanBuy(user,src)) - spell_info+= "[E.buy_word]
" - else - spell_info+= "Can't [E.buy_word]
" - if(E.CanRefund(user,src)) - spell_info+= "Refund
" - spell_info += "
" - if(cat_dat[E.category]) - cat_dat[E.category] += spell_info - - for(var/category in categories) - dat += "
" - dat += GetCategoryHeader(category) - dat += cat_dat[category] - dat += "
" - - user << browse(wrap(dat), "window=spellbook;size=700x500") - onclose(user, "spellbook") - return - -/obj/item/weapon/spellbook/Topic(href, href_list) - ..() - var/mob/living/carbon/human/H = usr - - if(H.stat || H.restrained()) - return - if(!ishuman(H)) - return 1 - - if(H.mind.special_role == "apprentice") - temp = "If you got caught sneaking a peek from your teacher's spellbook, you'd likely be expelled from the Wizard Academy. Better not." - return - - var/datum/spellbook_entry/E = null - if(loc == H || (in_range(src, H) && isturf(loc))) - H.set_machine(src) - if(href_list["buy"]) - E = entries[text2num(href_list["buy"])] - if(E && E.CanBuy(H,src)) - if(E.Buy(H,src)) - if(E.limit) - E.limit-- - uses -= E.cost - else if(href_list["refund"]) - E = entries[text2num(href_list["refund"])] - if(E && E.refundable) - var/result = E.Refund(H,src) - if(result > 0) - if(!isnull(E.limit)) - E.limit += result - uses += result - else if(href_list["page"]) - tab = sanitize(href_list["page"]) - attack_self(H) - return - -//Single Use Spellbooks// - -/obj/item/weapon/spellbook/oneuse - var/spell = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile //just a placeholder to avoid runtimes if someone spawned the generic - var/spellname = "sandbox" - var/used = 0 - name = "spellbook of " - uses = 1 - desc = "This template spellbook was never meant for the eyes of man..." - persistence_replacement = null - -/obj/item/weapon/spellbook/oneuse/prepare_spells() - name += spellname - -/obj/item/weapon/spellbook/oneuse/attack_self(mob/user) - var/obj/effect/proc_holder/spell/S = new spell - for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) - if(knownspell.type == S.type) - if(user.mind) - if(user.mind.special_role == "apprentice" || user.mind.special_role == "Wizard") - to_chat(user,"You're already far more versed in this spell than this flimsy how-to book can provide.") - else - to_chat(user,"You've already read this one.") - return - if(used) - recoil(user) - else - user.mind.AddSpell(S) - to_chat(user,"You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!") - user.log_message("learned the spell [spellname] ([S]).", INDIVIDUAL_ATTACK_LOG) - onlearned(user) - -/obj/item/weapon/spellbook/oneuse/proc/recoil(mob/user) - user.visible_message("[src] glows in a black light!") - -/obj/item/weapon/spellbook/oneuse/proc/onlearned(mob/user) - used = 1 - user.visible_message("[src] glows dark for a second!") - -/obj/item/weapon/spellbook/oneuse/attackby() - return - -/obj/item/weapon/spellbook/oneuse/fireball - spell = /obj/effect/proc_holder/spell/aimed/fireball - spellname = "fireball" - icon_state ="bookfireball" - desc = "This book feels warm to the touch." - -/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user) - ..() - explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) - qdel(src) - -/obj/item/weapon/spellbook/oneuse/smoke - spell = /obj/effect/proc_holder/spell/targeted/smoke - spellname = "smoke" - icon_state ="booksmoke" - desc = "This book is overflowing with the dank arts." - -/obj/item/weapon/spellbook/oneuse/smoke/recoil(mob/user) - ..() - to_chat(user,"Your stomach rumbles...") - if(user.nutrition) - user.nutrition -= 200 - if(user.nutrition <= 0) - user.nutrition = 0 - -/obj/item/weapon/spellbook/oneuse/blind - spell = /obj/effect/proc_holder/spell/targeted/trigger/blind - spellname = "blind" - icon_state ="bookblind" - desc = "This book looks blurry, no matter how you look at it." - -/obj/item/weapon/spellbook/oneuse/blind/recoil(mob/user) - ..() - to_chat(user,"You go blind!") - user.blind_eyes(10) - -/obj/item/weapon/spellbook/oneuse/mindswap - spell = /obj/effect/proc_holder/spell/targeted/mind_transfer - spellname = "mindswap" - icon_state ="bookmindswap" - desc = "This book's cover is pristine, though its pages look ragged and torn." - var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps - -/obj/item/weapon/spellbook/oneuse/mindswap/onlearned() - spellname = pick("fireball","smoke","blind","forcewall","knock","barnyard","charge") - icon_state = "book[spellname]" - name = "spellbook of [spellname]" //Note, desc doesn't change by design - ..() - -/obj/item/weapon/spellbook/oneuse/mindswap/recoil(mob/user) - ..() - if(stored_swap in GLOB.dead_mob_list) - stored_swap = null - if(!stored_swap) - stored_swap = user - to_chat(user,"For a moment you feel like you don't even know who you are anymore.") - return - if(stored_swap == user) - to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn...") - return - - var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new - swapper.cast(user, stored_swap, 1) - - to_chat(stored_swap,"You're suddenly somewhere else... and someone else?!") - to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?!") - stored_swap = null - -/obj/item/weapon/spellbook/oneuse/forcewall - spell = /obj/effect/proc_holder/spell/targeted/forcewall - spellname = "forcewall" - icon_state ="bookforcewall" - desc = "This book has a dedication to mimes everywhere inside the front cover." - -/obj/item/weapon/spellbook/oneuse/forcewall/recoil(mob/user) - ..() - to_chat(user,"You suddenly feel very solid!") - user.Stun(2) - user.petrify(30) - -/obj/item/weapon/spellbook/oneuse/knock - spell = /obj/effect/proc_holder/spell/aoe_turf/knock - spellname = "knock" - icon_state ="bookknock" - desc = "This book is hard to hold closed properly." - -/obj/item/weapon/spellbook/oneuse/knock/recoil(mob/user) - ..() - to_chat(user,"You're knocked down!") - user.Weaken(20) - -/obj/item/weapon/spellbook/oneuse/barnyard - spell = /obj/effect/proc_holder/spell/targeted/barnyardcurse - spellname = "barnyard" - icon_state ="bookhorses" - desc = "This book is more horse than your mind has room for." - -/obj/item/weapon/spellbook/oneuse/barnyard/recoil(mob/living/carbon/user) - if(ishuman(user)) - to_chat(user,"HOR-SIE HAS RISEN") - var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead - magichead.flags |= NODROP //curses! - magichead.flags_inv &= ~HIDEFACE //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH - if(!user.dropItemToGround(user.wear_mask)) - qdel(user.wear_mask) - user.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) - qdel(src) - else - to_chat(user,"I say thee neigh") //It still lives here - -/obj/item/weapon/spellbook/oneuse/charge - spell = /obj/effect/proc_holder/spell/targeted/charge - spellname = "charging" - icon_state ="bookcharge" - desc = "This book is made of 100% post-consumer wizard." - -/obj/item/weapon/spellbook/oneuse/charge/recoil(mob/user) - ..() - to_chat(user,"[src] suddenly feels very warm!") - empulse(src, 1, 1) - -/obj/item/weapon/spellbook/oneuse/summonitem - spell = /obj/effect/proc_holder/spell/targeted/summonitem - spellname = "instant summons" - icon_state ="booksummons" - desc = "This book is bright and garish, very hard to miss." - -/obj/item/weapon/spellbook/oneuse/summonitem/recoil(mob/user) - ..() - to_chat(user,"[src] suddenly vanishes!") - qdel(src) - -/obj/item/weapon/spellbook/oneuse/random/Initialize() - ..() - var/static/banned_spells = list(/obj/item/weapon/spellbook/oneuse/mimery_blockade,/obj/item/weapon/spellbook/oneuse/mimery_guns) - var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse) - banned_spells) - new real_type(loc) - qdel(src) - -/obj/item/weapon/spellbook/oneuse/sacredflame - spell = /obj/effect/proc_holder/spell/targeted/sacred_flame - spellname = "sacred flame" - icon_state ="booksacredflame" - desc = "Become one with the flames that burn within... and invite others to do so as well." + summonevents() + times++ + playsound(get_turf(user), 'sound/magic/CastSummon.ogg', 50, 1) + to_chat(user, "You have cast summon events.") + return 1 + +/datum/spellbook_entry/summon/events/GetInfo() + . = ..() + if(times>0) + . += "You cast it [times] times.
" + return . + +/obj/item/weapon/spellbook + name = "spell book" + desc = "An unearthly tome that glows with power." + icon = 'icons/obj/library.dmi' + icon_state ="book" + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_TINY + persistence_replacement = /obj/item/weapon/spellbook/oneuse/random + var/uses = 10 + var/temp = null + var/tab = null + var/mob/living/carbon/human/owner + var/list/datum/spellbook_entry/entries = list() + var/list/categories = list() + +/obj/item/weapon/spellbook/examine(mob/user) + ..() + if(owner) + to_chat(user, "There is a small signature on the front cover: \"[owner]\".") + else + to_chat(user, "It appears to have no author.") + +/obj/item/weapon/spellbook/Initialize() + ..() + prepare_spells() + +/obj/item/weapon/spellbook/proc/prepare_spells() + var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon + for(var/T in entry_types) + var/datum/spellbook_entry/E = new T + if(E.IsAvailible()) + entries |= E + categories |= E.category + else + qdel(E) + tab = categories[1] + +/obj/item/weapon/spellbook/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/weapon/antag_spawner/contract)) + var/obj/item/weapon/antag_spawner/contract/contract = O + if(contract.used) + to_chat(user, "The contract has been used, you can't get your points back now!") + else + to_chat(user, "You feed the contract back into the spellbook, refunding your points.") + uses++ + for(var/datum/spellbook_entry/item/contract/CT in entries) + if(!isnull(CT.limit)) + CT.limit++ + qdel(O) + else if(istype(O, /obj/item/weapon/antag_spawner/slaughter_demon)) + to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points.") + uses++ + for(var/datum/spellbook_entry/item/bloodbottle/BB in entries) + if(!isnull(BB.limit)) + BB.limit++ + qdel(O) + +/obj/item/weapon/spellbook/proc/GetCategoryHeader(category) + var/dat = "" + switch(category) + if("Offensive") + dat += "Spells and items geared towards debilitating and destroying.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Defensive") + dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Mobility") + dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Assistance") + dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.

" + dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "For spells: the number after the spell name is the cooldown time.
" + dat += "You can reduce this number by spending more points on the spell.
" + if("Challenges") + dat += "The Wizard Federation typically has hard limits on the potency and number of spells brought to the station based on risk.
" + dat += "Arming the station against you will increases the risk, but will grant you one more charge for your spellbook.
" + if("Rituals") + dat += "These powerful spells change the very fabric of reality. Not always in your favour.
" + return dat + +/obj/item/weapon/spellbook/proc/wrap(content) + var/dat = "" + dat +="Spellbook" + dat += {" + + + + "} + dat += {"[content]"} + return dat + +/obj/item/weapon/spellbook/attack_self(mob/user) + if(!owner) + to_chat(user, "You bind the spellbook to yourself.") + owner = user + return + if(user != owner) + to_chat(user, "The [name] does not recognize you as its owner and refuses to open!") + return + user.set_machine(src) + var/dat = "" + + dat += "" + + var/datum/spellbook_entry/E + for(var/i=1,i<=entries.len,i++) + var/spell_info = "" + E = entries[i] + spell_info += E.GetInfo() + if(E.CanBuy(user,src)) + spell_info+= "[E.buy_word]
" + else + spell_info+= "Can't [E.buy_word]
" + if(E.CanRefund(user,src)) + spell_info+= "Refund
" + spell_info += "
" + if(cat_dat[E.category]) + cat_dat[E.category] += spell_info + + for(var/category in categories) + dat += "
" + dat += GetCategoryHeader(category) + dat += cat_dat[category] + dat += "
" + + user << browse(wrap(dat), "window=spellbook;size=700x500") + onclose(user, "spellbook") + return + +/obj/item/weapon/spellbook/Topic(href, href_list) + ..() + var/mob/living/carbon/human/H = usr + + if(H.stat || H.restrained()) + return + if(!ishuman(H)) + return 1 + + if(H.mind.special_role == "apprentice") + temp = "If you got caught sneaking a peek from your teacher's spellbook, you'd likely be expelled from the Wizard Academy. Better not." + return + + var/datum/spellbook_entry/E = null + if(loc == H || (in_range(src, H) && isturf(loc))) + H.set_machine(src) + if(href_list["buy"]) + E = entries[text2num(href_list["buy"])] + if(E && E.CanBuy(H,src)) + if(E.Buy(H,src)) + if(E.limit) + E.limit-- + uses -= E.cost + else if(href_list["refund"]) + E = entries[text2num(href_list["refund"])] + if(E && E.refundable) + var/result = E.Refund(H,src) + if(result > 0) + if(!isnull(E.limit)) + E.limit += result + uses += result + else if(href_list["page"]) + tab = sanitize(href_list["page"]) + attack_self(H) + return + +//Single Use Spellbooks// + +/obj/item/weapon/spellbook/oneuse + var/spell = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile //just a placeholder to avoid runtimes if someone spawned the generic + var/spellname = "sandbox" + var/used = 0 + name = "spellbook of " + uses = 1 + desc = "This template spellbook was never meant for the eyes of man..." + persistence_replacement = null + +/obj/item/weapon/spellbook/oneuse/prepare_spells() + name += spellname + +/obj/item/weapon/spellbook/oneuse/attack_self(mob/user) + var/obj/effect/proc_holder/spell/S = new spell + for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list) + if(knownspell.type == S.type) + if(user.mind) + if(user.mind.special_role == "apprentice" || user.mind.special_role == "Wizard") + to_chat(user,"You're already far more versed in this spell than this flimsy how-to book can provide.") + else + to_chat(user,"You've already read this one.") + return + if(used) + recoil(user) + else + user.mind.AddSpell(S) + to_chat(user,"You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!") + user.log_message("learned the spell [spellname] ([S]).", INDIVIDUAL_ATTACK_LOG) + onlearned(user) + +/obj/item/weapon/spellbook/oneuse/proc/recoil(mob/user) + user.visible_message("[src] glows in a black light!") + +/obj/item/weapon/spellbook/oneuse/proc/onlearned(mob/user) + used = 1 + user.visible_message("[src] glows dark for a second!") + +/obj/item/weapon/spellbook/oneuse/attackby() + return + +/obj/item/weapon/spellbook/oneuse/fireball + spell = /obj/effect/proc_holder/spell/aimed/fireball + spellname = "fireball" + icon_state ="bookfireball" + desc = "This book feels warm to the touch." + +/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user) + ..() + explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) + qdel(src) + +/obj/item/weapon/spellbook/oneuse/smoke + spell = /obj/effect/proc_holder/spell/targeted/smoke + spellname = "smoke" + icon_state ="booksmoke" + desc = "This book is overflowing with the dank arts." + +/obj/item/weapon/spellbook/oneuse/smoke/lesser //Chaplain smoke book + spell = /obj/effect/proc_holder/spell/targeted/smoke/lesser + +/obj/item/weapon/spellbook/oneuse/smoke/recoil(mob/user) + ..() + to_chat(user,"Your stomach rumbles...") + if(user.nutrition) + user.nutrition -= 200 + if(user.nutrition <= 0) + user.nutrition = 0 + + +/obj/item/weapon/spellbook/oneuse/blind + spell = /obj/effect/proc_holder/spell/targeted/trigger/blind + spellname = "blind" + icon_state ="bookblind" + desc = "This book looks blurry, no matter how you look at it." + +/obj/item/weapon/spellbook/oneuse/blind/recoil(mob/user) + ..() + to_chat(user,"You go blind!") + user.blind_eyes(10) + +/obj/item/weapon/spellbook/oneuse/mindswap + spell = /obj/effect/proc_holder/spell/targeted/mind_transfer + spellname = "mindswap" + icon_state ="bookmindswap" + desc = "This book's cover is pristine, though its pages look ragged and torn." + var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps + +/obj/item/weapon/spellbook/oneuse/mindswap/onlearned() + spellname = pick("fireball","smoke","blind","forcewall","knock","barnyard","charge") + icon_state = "book[spellname]" + name = "spellbook of [spellname]" //Note, desc doesn't change by design + ..() + +/obj/item/weapon/spellbook/oneuse/mindswap/recoil(mob/user) + ..() + if(stored_swap in GLOB.dead_mob_list) + stored_swap = null + if(!stored_swap) + stored_swap = user + to_chat(user,"For a moment you feel like you don't even know who you are anymore.") + return + if(stored_swap == user) + to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn...") + return + + var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new + swapper.cast(user, stored_swap, 1) + + to_chat(stored_swap,"You're suddenly somewhere else... and someone else?!") + to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?!") + stored_swap = null + +/obj/item/weapon/spellbook/oneuse/forcewall + spell = /obj/effect/proc_holder/spell/targeted/forcewall + spellname = "forcewall" + icon_state ="bookforcewall" + desc = "This book has a dedication to mimes everywhere inside the front cover." + +/obj/item/weapon/spellbook/oneuse/forcewall/recoil(mob/user) + ..() + to_chat(user,"You suddenly feel very solid!") + user.Stun(2) + user.petrify(30) + +/obj/item/weapon/spellbook/oneuse/knock + spell = /obj/effect/proc_holder/spell/aoe_turf/knock + spellname = "knock" + icon_state ="bookknock" + desc = "This book is hard to hold closed properly." + +/obj/item/weapon/spellbook/oneuse/knock/recoil(mob/user) + ..() + to_chat(user,"You're knocked down!") + user.Weaken(20) + +/obj/item/weapon/spellbook/oneuse/barnyard + spell = /obj/effect/proc_holder/spell/targeted/barnyardcurse + spellname = "barnyard" + icon_state ="bookhorses" + desc = "This book is more horse than your mind has room for." + +/obj/item/weapon/spellbook/oneuse/barnyard/recoil(mob/living/carbon/user) + if(ishuman(user)) + to_chat(user,"HOR-SIE HAS RISEN") + var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead + magichead.flags |= NODROP //curses! + magichead.flags_inv &= ~HIDEFACE //so you can still see their face + magichead.voicechange = 1 //NEEEEIIGHH + if(!user.dropItemToGround(user.wear_mask)) + qdel(user.wear_mask) + user.equip_to_slot_if_possible(magichead, slot_wear_mask, 1, 1) + qdel(src) + else + to_chat(user,"I say thee neigh") //It still lives here + +/obj/item/weapon/spellbook/oneuse/charge + spell = /obj/effect/proc_holder/spell/targeted/charge + spellname = "charging" + icon_state ="bookcharge" + desc = "This book is made of 100% post-consumer wizard." + +/obj/item/weapon/spellbook/oneuse/charge/recoil(mob/user) + ..() + to_chat(user,"[src] suddenly feels very warm!") + empulse(src, 1, 1) + +/obj/item/weapon/spellbook/oneuse/summonitem + spell = /obj/effect/proc_holder/spell/targeted/summonitem + spellname = "instant summons" + icon_state ="booksummons" + desc = "This book is bright and garish, very hard to miss." + +/obj/item/weapon/spellbook/oneuse/summonitem/recoil(mob/user) + ..() + to_chat(user,"[src] suddenly vanishes!") + qdel(src) + +/obj/item/weapon/spellbook/oneuse/random/Initialize() + ..() + var/static/banned_spells = list(/obj/item/weapon/spellbook/oneuse/mimery_blockade,/obj/item/weapon/spellbook/oneuse/mimery_guns) + var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse) - banned_spells) + new real_type(loc) + qdel(src) + +/obj/item/weapon/spellbook/oneuse/sacredflame + spell = /obj/effect/proc_holder/spell/targeted/sacred_flame + spellname = "sacred flame" + icon_state ="booksacredflame" + desc = "Become one with the flames that burn within... and invite others to do so as well." diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 35bccb692a..0d169e9024 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -110,6 +110,10 @@ wizard_mob.name = newname if(wizard_mob.mind) wizard_mob.mind.name = newname + + /* Wizards by nature cannot be too young. */ + if(wizard_mob.age < WIZARD_AGE_MIN) + wizard_mob.age = WIZARD_AGE_MIN return diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 5dc8ea3f20..d45859a371 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -79,7 +79,8 @@ /obj/machinery/sleeper/close_machine(mob/user) if((isnull(user) || istype(user)) && state_open && !panel_open) ..(user) - if(occupant && occupant.stat != DEAD) + var/mob/living/mob_occupant = occupant + if(mob_occupant && mob_occupant.stat != DEAD) to_chat(occupant, "You feel cool air surround you. You go numb as your senses turn inward.") /obj/machinery/sleeper/emp_act(severity) @@ -128,27 +129,30 @@ data["chems"] += list(list("name" = R.name, "id" = R.id, "allowed" = chem_allowed(chem))) data["occupant"] = list() - if(occupant) - data["occupant"]["name"] = occupant.name - data["occupant"]["stat"] = occupant.stat - data["occupant"]["health"] = occupant.health - data["occupant"]["maxHealth"] = occupant.maxHealth + var/mob/living/mob_occupant = occupant + if(mob_occupant) + data["occupant"]["name"] = mob_occupant.name + data["occupant"]["stat"] = mob_occupant.stat + data["occupant"]["health"] = mob_occupant.health + data["occupant"]["maxHealth"] = mob_occupant.maxHealth data["occupant"]["minHealth"] = HEALTH_THRESHOLD_DEAD - data["occupant"]["bruteLoss"] = occupant.getBruteLoss() - data["occupant"]["oxyLoss"] = occupant.getOxyLoss() - data["occupant"]["toxLoss"] = occupant.getToxLoss() - data["occupant"]["fireLoss"] = occupant.getFireLoss() - data["occupant"]["cloneLoss"] = occupant.getCloneLoss() - data["occupant"]["brainLoss"] = occupant.getBrainLoss() + data["occupant"]["bruteLoss"] = mob_occupant.getBruteLoss() + data["occupant"]["oxyLoss"] = mob_occupant.getOxyLoss() + data["occupant"]["toxLoss"] = mob_occupant.getToxLoss() + data["occupant"]["fireLoss"] = mob_occupant.getFireLoss() + data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss() + data["occupant"]["brainLoss"] = mob_occupant.getBrainLoss() data["occupant"]["reagents"] = list() if(occupant.reagents.reagent_list.len) - for(var/datum/reagent/R in occupant.reagents.reagent_list) + for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) return data /obj/machinery/sleeper/ui_act(action, params) if(..()) return + var/mob/living/mob_occupant = occupant + switch(action) if("door") if(state_open) @@ -158,9 +162,9 @@ . = TRUE if("inject") var/chem = params["chem"] - if(!is_operational() || !occupant) + if(!is_operational() || !mob_occupant) return - if(occupant.health < min_health && chem != "epinephrine") + if(mob_occupant.health < min_health && chem != "epinephrine") return if(inject_chem(chem)) . = TRUE @@ -177,10 +181,11 @@ return TRUE /obj/machinery/sleeper/proc/chem_allowed(chem) - if(!occupant) + var/mob/living/mob_occupant = occupant + if(!mob_occupant) return - var/amount = occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency - var/occ_health = occupant.health > min_health || chem == "epinephrine" + var/amount = mob_occupant.reagents.get_reagent_amount(chem) + 10 <= 20 * efficiency + var/occ_health = mob_occupant.health > min_health || chem == "epinephrine" return amount && occ_health /obj/machinery/sleeper/proc/reset_chem_buttons() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 824b50b168..ec87cf6ba9 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -121,10 +121,12 @@ /obj/machinery/clonepod/examine(mob/user) ..() + var/mob/living/mob_occupant = occupant if(mess) to_chat(user, "It's filled with blood and viscera. You swear you can see it moving...") - if (is_operational() && (!isnull(occupant)) && (occupant.stat != DEAD)) - to_chat(user, "Current clone cycle is [round(get_completion())]% complete.") + if(is_operational() && mob_occupant) + if(mob_occupant.stat != DEAD) + to_chat(user, "Current clone cycle is [round(get_completion())]% complete.") /obj/machinery/clonepod/return_air() // We want to simulate the clone not being in contact with @@ -136,7 +138,10 @@ return GM /obj/machinery/clonepod/proc/get_completion() - . = (100 * ((occupant.health + 100) / (heal_level + 100))) + . = FALSE + var/mob/living/mob_occupant = occupant + if(mob_occupant) + . = (100 * ((mob_occupant.health + 100) / (heal_level + 100))) /obj/machinery/clonepod/attack_ai(mob/user) return examine(user) @@ -172,11 +177,11 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - if(clonemind.changeling) - var/obj/item/organ/brain/B = H.getorganslot("brain") - B.vital = FALSE - B.decoy_override = TRUE - + if(clonemind.changeling) + var/obj/item/organ/brain/B = H.getorganslot("brain") + B.vital = FALSE + B.decoy_override = TRUE + H.hardset_dna(ui, se, H.real_name, null, mrace, features) if(efficiency > 2) @@ -204,13 +209,13 @@ clonemind.transfer_to(H) - if(grab_ghost_when == CLONER_FRESH_CLONE) - H.grab_ghost() - to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
") + if(grab_ghost_when == CLONER_FRESH_CLONE) + H.grab_ghost() + to_chat(H, "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
") if(grab_ghost_when == CLONER_MATURE_CLONE) - H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost - to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") + H.ghostize(TRUE) //Only does anything if they were still in their old body and not already a ghost + to_chat(H.get_ghost(TRUE), "Your body is beginning to regenerate in a cloning pod. You will become conscious when it is complete.") if(H) H.faction |= factions @@ -223,25 +228,26 @@ //Grow clones to maturity then kick them out. FREELOADERS /obj/machinery/clonepod/process() + var/mob/living/mob_occupant = occupant if(!is_operational()) //Autoeject if power is lost - if (occupant) + if(mob_occupant) go_out() connected_message("Clone Ejected: Loss of power.") - else if((occupant) && (occupant.loc == src)) - if((occupant.stat == DEAD) || (occupant.suiciding) || occupant.hellbound) //Autoeject corpses and suiciding dudes. + else if(mob_occupant && (mob_occupant.loc == src)) + if((mob_occupant.stat == DEAD) || (mob_occupant.suiciding) || mob_occupant.hellbound) //Autoeject corpses and suiciding dudes. connected_message("Clone Rejected: Deceased.") - SPEAK("The cloning of [occupant.real_name] has been \ + SPEAK("The cloning of [mob_occupant.real_name] has been \ aborted due to unrecoverable tissue failure.") go_out() - else if(occupant.cloneloss > (100 - heal_level)) - occupant.Paralyse(4) + else if(mob_occupant.cloneloss > (100 - heal_level)) + mob_occupant.Paralyse(4) //Slowly get that clone healed and finished. - occupant.adjustCloneLoss(-((speed_coeff/2) * config.damage_multiplier)) - var/progress = CLONE_INITIAL_DAMAGE - occupant.getCloneLoss() + mob_occupant.adjustCloneLoss(-((speed_coeff/2) * config.damage_multiplier)) + var/progress = CLONE_INITIAL_DAMAGE - mob_occupant.getCloneLoss() // To avoid the default cloner making incomplete clones progress += (100 - MINIMUM_HEAL_LEVEL) var/milestone = CLONE_INITIAL_DAMAGE / flesh_number @@ -252,24 +258,35 @@ var/obj/item/I = pick_n_take(unattached_flesh) if(isorgan(I)) var/obj/item/organ/O = I - O.Insert(occupant) + O.Insert(mob_occupant) else if(isbodypart(I)) var/obj/item/bodypart/BP = I - BP.attach_limb(occupant) + BP.attach_limb(mob_occupant) //Premature clones may have brain damage. - occupant.adjustBrainLoss(-((speed_coeff/2) * config.damage_multiplier)) + mob_occupant.adjustBrainLoss(-((speed_coeff/2) * config.damage_multiplier)) check_brine() use_power(7500) //This might need tweaking. - else if((occupant.cloneloss <= (100 - heal_level))) + else if((mob_occupant.cloneloss <= (100 - heal_level))) connected_message("Cloning Process Complete.") - SPEAK("The cloning cycle of [occupant.real_name] is complete.") + SPEAK("The cloning cycle of [mob_occupant.real_name] is complete.") + + // If the cloner is upgraded to debugging high levels, sometimes + // organs and limbs can be missing. + for(var/i in unattached_flesh) + if(isorgan(i)) + var/obj/item/organ/O = i + O.Insert(mob_occupant) + else if(isbodypart(i)) + var/obj/item/bodypart/BP = i + BP.attach_limb(mob_occupant) + go_out() - else if ((!occupant) || (occupant.loc != src)) + else if (!mob_occupant || mob_occupant.loc != src) occupant = null if (!mess && !panel_open) icon_state = "pod_0" @@ -305,16 +322,17 @@ to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-") return + var/mob/living/mob_occupant = occupant if(W.GetID()) if(!check_access(W)) to_chat(user, "Access Denied.") return - if(!(occupant || mess)) + if(!(mob_occupant || mess)) to_chat(user, "Error: Pod has no occupant.") return else connected_message("Authorized Ejection") - SPEAK("An authorized ejection of [clonemind.name] has occurred.") + SPEAK("An authorized ejection of [clonemind.name] has occurred.") to_chat(user, "You force an emergency ejection. ") go_out() else @@ -339,54 +357,59 @@ /obj/machinery/clonepod/proc/go_out() countdown.stop() + var/mob/living/mob_occupant = occupant if(mess) //Clean that mess and dump those gibs! mess = FALSE - new /obj/effect/gibspawner/generic(loc) + new /obj/effect/gibspawner/generic(loc) audible_message("You hear a splat.") icon_state = "pod_0" return - if(!occupant) + if(!mob_occupant) return - if(grab_ghost_when == CLONER_MATURE_CLONE) - occupant.grab_ghost() - to_chat(occupant, "There is a bright flash!
You feel like a new being.
") - occupant.flash_act() - var/turf/T = get_turf(src) + if(grab_ghost_when == CLONER_MATURE_CLONE) + mob_occupant.grab_ghost() + to_chat(occupant, "There is a bright flash!
You feel like a new being.
") + mob_occupant.flash_act() + + var/turf/T = get_turf(src) occupant.forceMove(T) icon_state = "pod_0" - occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest. + mob_occupant.domutcheck(1) //Waiting until they're out before possible monkeyizing. The 1 argument forces powers to manifest. + occupant = null /obj/machinery/clonepod/proc/malfunction() - if(occupant) + var/mob/living/mob_occupant = occupant + if(mob_occupant) connected_message("Critical Error!") SPEAK("Critical error! Please contact a Thinktronic Systems \ technician, as your warranty may be affected.") mess = TRUE - for(var/obj/item/O in unattached_flesh) - qdel(O) + for(var/obj/item/O in unattached_flesh) + qdel(O) icon_state = "pod_g" - if(occupant.mind != clonemind) - clonemind.transfer_to(occupant) - occupant.grab_ghost() // We really just want to make you suffer. - flash_color(occupant, flash_color="#960000", flash_time=100) - to_chat(occupant, "Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is.
") + if(mob_occupant.mind != clonemind) + clonemind.transfer_to(mob_occupant) + mob_occupant.grab_ghost() // We really just want to make you suffer. + flash_color(mob_occupant, flash_color="#960000", flash_time=100) + to_chat(mob_occupant, "Agony blazes across your consciousness as your body is torn apart.
Is this what dying is like? Yes it is.
") playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 50, 0) - occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50) - QDEL_IN(occupant, 40) + mob_occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50) + QDEL_IN(mob_occupant, 40) /obj/machinery/clonepod/relaymove(mob/user) if(user.stat == CONSCIOUS) go_out() /obj/machinery/clonepod/emp_act(severity) - if((occupant || mess) && prob(100/(severity*efficiency))) + var/mob/living/mob_occupant = occupant + if(mob_occupant && prob(100/(severity*efficiency))) connected_message(Gibberish("EMP-caused Accidental Ejection", 0)) - SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [clonemind.name] prematurely." ,0)) + SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [mob_occupant.real_name] prematurely." ,0)) go_out() ..() @@ -478,4 +501,4 @@ #undef CLONE_INITIAL_DAMAGE #undef SPEAK -#undef MINIMUM_HEAL_LEVEL +#undef MINIMUM_HEAL_LEVEL \ No newline at end of file diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 9ec74dccd3..600ededadd 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -163,6 +163,10 @@ name = "Telescience Console (Computer Board)" build_path = /obj/machinery/computer/telescience origin_tech = "programming=3;bluespace=3;plasmatech=4" +/obj/item/weapon/circuitboard/computer/launchpad_console + name = "Launchpad Control Console (Computer Board)" + build_path = /obj/machinery/computer/launchpad + origin_tech = "programming=3;bluespace=3;plasmatech=2" /obj/item/weapon/circuitboard/computer/message_monitor name = "Message Monitor (Computer Board)" build_path = /obj/machinery/computer/message_monitor diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index afa054428a..9e367d43b1 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -1,4 +1,3 @@ - /obj/machinery/computer/cloning name = "cloning console" desc = "Used to clone people and manage DNA." @@ -61,7 +60,7 @@ return if(scanner.occupant && scanner.scan_level > 2) - scan_mob(scanner.occupant) + scan_occupant(scanner.occupant) for(var/datum/data/record/R in records) var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"]) @@ -185,22 +184,23 @@ // Scanner if (!isnull(src.scanner)) + var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant) dat += "

Scanner Functions

" dat += "
" - if (!src.scanner.occupant) + if(!scanner_occupant) dat += "Scanner Unoccupied" else if(loading) - dat += "[src.scanner.occupant] => Scanning..." + dat += "[scanner_occupant] => Scanning..." else - if (src.scanner.occupant.ckey != scantemp_ckey) + if(scanner_occupant.ckey != scantemp_ckey) scantemp = "Ready to Scan" - scantemp_ckey = src.scanner.occupant.ckey - dat += "[src.scanner.occupant] => [scantemp]" + scantemp_ckey = scanner_occupant.ckey + dat += "[scanner_occupant] => [scantemp]" dat += "
" - if (src.scanner.occupant) + if(scanner_occupant) dat += "Start Scan" dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" else @@ -301,7 +301,7 @@ say("Initiating scan...") spawn(20) - src.scan_mob(scanner.occupant) + src.scan_occupant(scanner.occupant) loading = 0 src.updateUsrDialog() @@ -433,64 +433,70 @@ src.updateUsrDialog() return -/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject) - if (!istype(subject)) +/obj/machinery/computer/cloning/proc/scan_occupant(occupant) + var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) + var/datum/dna/dna + if(iscarbon(mob_occupant)) + var/mob/living/carbon/C = mob_occupant + dna = C.has_dna() + if(istype(mob_occupant, /mob/living/brain)) + var/mob/living/brain/B = mob_occupant + dna = B.stored_dna + + if(!istype(dna)) scantemp = "Unable to locate valid genetic data." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - if (!subject.getorgan(/obj/item/organ/brain)) - scantemp = "No signs of intelligence detected." - playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) - return - if (subject.suiciding == 1 || subject.hellbound) + if(mob_occupant.suiciding || mob_occupant.hellbound) scantemp = "Subject's brain is not responding to scanning stimuli." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - if ((subject.disabilities & NOCLONE) && (src.scanner.scan_level < 2)) + if((mob_occupant.disabilities & NOCLONE) && (src.scanner.scan_level < 2)) scantemp = "Subject no longer contains the fundamental materials required to create a living clone." playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) return - if ((!subject.ckey) || (!subject.client)) + if ((!mob_occupant.ckey) || (!mob_occupant.client)) scantemp = "Mental interface failure." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - if (find_record("ckey", subject.ckey, records)) + if (find_record("ckey", mob_occupant.ckey, records)) scantemp = "Subject already in database." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return var/datum/data/record/R = new() - if(subject.dna.species) + if(dna.species) // We store the instance rather than the path, because some // species (abductors, slimepeople) store state in their // species datums - R.fields["mrace"] = subject.dna.species + R.fields["mrace"] = dna.species else var/datum/species/rando_race = pick(config.roundstart_races) R.fields["mrace"] = rando_race.type - R.fields["ckey"] = subject.ckey - R.fields["name"] = subject.real_name - R.fields["id"] = copytext(md5(subject.real_name), 2, 6) - R.fields["UE"] = subject.dna.unique_enzymes - R.fields["UI"] = subject.dna.uni_identity - R.fields["SE"] = subject.dna.struc_enzymes - R.fields["blood_type"] = subject.dna.blood_type - R.fields["features"] = subject.dna.features - R.fields["factions"] = subject.faction - //Add an implant if needed + R.fields["ckey"] = mob_occupant.ckey + R.fields["name"] = mob_occupant.real_name + R.fields["id"] = copytext(md5(mob_occupant.real_name), 2, 6) + R.fields["UE"] = dna.unique_enzymes + R.fields["UI"] = dna.uni_identity + R.fields["SE"] = dna.struc_enzymes + R.fields["blood_type"] = dna.blood_type + R.fields["features"] = dna.features + R.fields["factions"] = mob_occupant.faction + + if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning. + R.fields["mind"] = "\ref[mob_occupant.mind]" + + //Add an implant if needed var/obj/item/weapon/implant/health/imp - for(var/obj/item/weapon/implant/health/HI in subject.implants) + for(var/obj/item/weapon/implant/health/HI in mob_occupant.implants) imp = HI break if(!imp) - imp = new /obj/item/weapon/implant/health(subject) - imp.implant(subject) + imp = new /obj/item/weapon/implant/health(mob_occupant) + imp.implant(mob_occupant) R.fields["imp"] = "\ref[imp]" - if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. - R.fields["mind"] = "\ref[subject.mind]" - src.records += R scantemp = "Subject successfully scanned." playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 74fcf77ce5..2033edd7f7 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -52,7 +52,7 @@ update_icon() /obj/machinery/computer/narsie_act() - if(clockwork && clockwork != initial(clockwork) && prob(20)) //if it's clockwork but isn't normally clockwork + if(clockwork && clockwork != initial(clockwork)) //if it's clockwork but isn't normally clockwork clockwork = FALSE icon_screen = initial(icon_screen) icon_keyboard = initial(icon_keyboard) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 65fbee45f0..e3b47873e6 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -56,7 +56,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) jobs["Bartender"] = 61 jobs["Cook"] = 62 jobs["Botanist"] = 63 - jobs["Librarian"] = 64 + jobs["Curator"] = 64 jobs["Chaplain"] = 65 jobs["Clown"] = 66 jobs["Mime"] = 67 diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm new file mode 100644 index 0000000000..2a573c80ce --- /dev/null +++ b/code/game/machinery/computer/launchpad_control.dm @@ -0,0 +1,155 @@ +/obj/machinery/computer/launchpad + name = "\improper Launchpad Control Console" + desc = "Used to teleport objects to and from a launchpad." + icon_screen = "teleport" + icon_keyboard = "teleport_key" + circuit = /obj/item/weapon/circuitboard/computer/launchpad_console + var/sending = TRUE + var/current_pad //current pad viewed on the screen + var/list/obj/machinery/launchpad/launchpads + var/maximum_pads = 4 + +/obj/machinery/computer/launchpad/Initialize() + launchpads = list() + . = ..() + +/obj/machinery/computer/launchpad/attack_paw(mob/user) + to_chat(user, "You are too primitive to use this computer!") + return + +/obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/device/multitool)) + var/obj/item/device/multitool/M = W + if(M.buffer && istype(M.buffer, /obj/machinery/launchpad)) + if(LAZYLEN(launchpads) < maximum_pads) + launchpads |= M.buffer + M.buffer = null + to_chat(user, "You upload the data from the [W.name]'s buffer.") + else + to_chat(user, "[src] cannot handle any more connections!") + else + return ..() + +/obj/machinery/computer/launchpad/attack_ai(mob/user) + attack_hand(user) + +/obj/machinery/computer/launchpad/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/computer/launchpad/proc/pad_exists(number) + var/obj/machinery/launchpad/pad = launchpads[number] + if(QDELETED(pad)) + return FALSE + return TRUE + +/obj/machinery/computer/launchpad/proc/get_pad(number) + var/obj/machinery/launchpad/pad = launchpads[number] + return pad + +/obj/machinery/computer/launchpad/interact(mob/user) + var/list/t = list() + if(!LAZYLEN(launchpads)) + in_use = FALSE //Yeah so if you deconstruct teleporter while its in the process of shooting it wont disable the console + t += "
No launchpad located.

" + else + for(var/i in 1 to LAZYLEN(launchpads)) + if(pad_exists(i)) + var/obj/machinery/launchpad/pad = get_pad(i) + if(pad.stat & NOPOWER) + t+= "[pad.display_name]" + else + t+= "[pad.display_name]" + else + launchpads -= get_pad(i) + t += "
" + + if(current_pad) + var/obj/machinery/launchpad/pad = get_pad(current_pad) + t += "
[pad.display_name]
" + t += "Rename" + t += "Remove

" + t += "O" //up-left + t += "^" //up + t += "O
" //up-right + t += "<"//left + t += "R"//reset to 0 + t += ">
"//right + t += "O"//down-left + t += "v"//down + t += "O
"//down-right + t += "
" + t += "
Current offset:

" + t += "
[abs(pad.y_offset)] [pad.y_offset > 0 ? "N":"S"]

" + t += "
[abs(pad.x_offset)] [pad.x_offset > 0 ? "E":"W"]

" + + t += "
Launch" + t += " Pull" + + var/datum/browser/popup = new(user, "launchpad", name, 300, 500) + popup.set_content(t.Join()) + popup.open() + +/obj/machinery/computer/launchpad/proc/teleport(mob/user, obj/machinery/launchpad/pad) + if(QDELETED(pad)) + to_chat(user, "ERROR: Launchpad not responding. Check launchpad integrity.") + return + if(!pad.isAvailable()) + to_chat(user, "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered.") + return + pad.doteleport(user, sending) + +/obj/machinery/computer/launchpad/Topic(href, href_list) + var/obj/machinery/launchpad/pad + if(href_list["pad"]) + pad = get_pad(text2num(href_list["pad"])) + + if(..()) + return + if(!LAZYLEN(launchpads)) + updateDialog() + return + + if(href_list["choose_pad"]) + current_pad = text2num(href_list["pad"]) + + if(href_list["raisex"]) + if(pad.x_offset < pad.range) + pad.x_offset++ + + if(href_list["lowerx"]) + if(pad.x_offset > (pad.range * -1)) + pad.x_offset-- + + if(href_list["raisey"]) + if(pad.y_offset < pad.range) + pad.y_offset++ + + if(href_list["lowery"]) + if(pad.y_offset > (pad.range * -1)) + pad.y_offset-- + + if(href_list["reset"]) + pad.y_offset = 0 + pad.x_offset = 0 + + if(href_list["change_name"]) + var/new_name = stripped_input(usr, "What do you wish to name the launchpad?", "Launchpad", pad.display_name, 15) as text|null + if(!new_name) + return + pad.display_name = new_name + + if(href_list["remove"]) + if(usr && alert(usr, "Are you sure?", "Remove Launchpad", "I'm Sure", "Abort") != "Abort") + launchpads -= pad + + if(href_list["launch"]) + sending = TRUE + teleport(usr, pad) + + if(href_list["pull"]) + sending = FALSE + teleport(usr, pad) + + updateDialog() \ No newline at end of file diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 3772dacbdb..79d6aa0b52 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -113,7 +113,8 @@ to_chat(R.connected_ai, "

ALERT - Cyborg detonation detected: [R.name]
") R.ResetSecurityCodes() else - message_admins("[key_name_admin(usr)] (FLW) detonated [key_name(R, R.client)](JMP)!") + var/turf/T = get_turf(R) + message_admins("[ADMIN_LOOKUPFLW(usr)] detonated [key_name(R, R.client)][ADMIN_JMP(T)]!") log_game("\[key_name(usr)] detonated [key_name(R)]!") if(R.connected_ai) to_chat(R.connected_ai, "

ALERT - Cyborg detonation detected: [R.name]
") @@ -127,7 +128,7 @@ if(can_control(usr, R)) var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") if(choice == "Confirm" && can_control(usr, R) && !..()) - message_admins("[key_name_admin(usr)] (FLW) [R.canmove ? "locked down" : "released"] [key_name(R, R.client)](FLW)!") + message_admins("[ADMIN_LOOKUPFLW(usr)] [R.canmove ? "locked down" : "released"] [key_name(R, R.client)][ADMIN_LOOKUPFLW(R)]!") log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!") R.SetLockdown(!R.lockcharge) to_chat(R, "[!R.lockcharge ? "Your lockdown has been lifted!" : "You have been locked down!"]") diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 4bb872b347..98450453bd 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -1,217 +1,223 @@ -#define NUKESCALINGMODIFIER 1 - -GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner")) - -/obj/machinery/computer/telecrystals - name = "\improper Telecrystal assignment station" - desc = "A device used to manage telecrystals during group operations. You shouldn't be looking at this particular one..." - icon_state = "tcstation" - icon_keyboard = "tcstation_key" - icon_screen = "syndie" - clockwork = TRUE //it'd look weird, at least if ratvar ever got there - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - - light_color = LIGHT_COLOR_RED - -///////////////////////////////////////////// -/obj/machinery/computer/telecrystals/uplinker - name = "\improper Telecrystal upload/receive station" - desc = "A device used to manage telecrystals during group operations. To use, simply insert your uplink. With your uplink installed \ - you can upload your telecrystals to the group's pool using the console, or be assigned additional telecrystals by your lieutenant." - var/obj/item/uplinkholder = null - var/obj/machinery/computer/telecrystals/boss/linkedboss = null - -/obj/machinery/computer/telecrystals/uplinker/Initialize() - ..() - - var/ID = pick_n_take(GLOB.possible_uplinker_IDs) - if(!ID) - ID = rand(1,999) - name = "[name] [ID]" - -/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) - if(uplinkholder) - to_chat(user, "The [src] already has an uplink in it.") - return - if(O.hidden_uplink) - var/obj/item/I = user.get_active_held_item() - if(!user.drop_item()) - return - uplinkholder = I - I.loc = src - I.add_fingerprint(user) - update_icon() - updateUsrDialog() - else - to_chat(user, "The [O] doesn't appear to be an uplink...") - -/obj/machinery/computer/telecrystals/uplinker/update_icon() - ..() - if(uplinkholder) - add_overlay("[initial(icon_state)]-closed") - -/obj/machinery/computer/telecrystals/uplinker/proc/ejectuplink() - if(uplinkholder) - uplinkholder.loc = get_turf(src.loc) - uplinkholder = null - update_icon() - -/obj/machinery/computer/telecrystals/uplinker/proc/donateTC(amt, addLog = 1) - if(uplinkholder && linkedboss) - if(amt <= uplinkholder.hidden_uplink.telecrystals) - uplinkholder.hidden_uplink.telecrystals -= amt - linkedboss.storedcrystals += amt - if(addLog) - linkedboss.logTransfer("[src] donated [amt] telecrystals to [linkedboss].") - -/obj/machinery/computer/telecrystals/uplinker/proc/giveTC(amt, addLog = 1) - if(uplinkholder && linkedboss) - if(amt <= linkedboss.storedcrystals) - uplinkholder.hidden_uplink.telecrystals += amt - linkedboss.storedcrystals -= amt - if(addLog) - linkedboss.logTransfer("[src] received [amt] telecrystals from [linkedboss].") - -/////// - -/obj/machinery/computer/telecrystals/uplinker/attack_hand(mob/user) - if(..()) - return - src.add_fingerprint(user) - user.set_machine(src) - - var/dat = "" - if(linkedboss) - dat += "[linkedboss] has [linkedboss.storedcrystals] telecrystals available for distribution.

" - else - dat += "No linked management consoles detected. Scan for uplink stations using the management console.

" - - if(uplinkholder) - dat += "[uplinkholder.hidden_uplink.telecrystals] telecrystals remain in this uplink.
" - if(linkedboss) - dat += "Donate TC: 1 | 5" - dat += "
Eject Uplink" - - - var/datum/browser/popup = new(user, "computer", "Telecrystal Upload/Receive Station", 700, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/telecrystals/uplinker/Topic(href, href_list) - if(..()) - return - - if(href_list["donate1"]) - donateTC(1) - - if(href_list["donate5"]) - donateTC(5) - - if(href_list["eject"]) - ejectuplink() - - src.updateUsrDialog() - - -///////////////////////////////////////// -/obj/machinery/computer/telecrystals/boss - name = "team Telecrystal management console" - desc = "A device used to manage telecrystals during group operations. To use, simply initialize the machine by scanning for nearby uplink stations. \ - Once the consoles are linked up, you can assign any telecrystals amongst your operatives; be they donated by your agents or rationed to the squad \ - based on the danger rating of the mission." - icon_state = "computer" - icon_screen = "tcboss" - icon_keyboard = "syndie_key" - var/virgin = 1 - var/scanrange = 10 - var/storedcrystals = 0 - var/list/TCstations = list() - var/list/transferlog = list() - -/obj/machinery/computer/telecrystals/boss/proc/logTransfer(logmessage) - transferlog += ("[worldtime2text()] [logmessage]") - -/obj/machinery/computer/telecrystals/boss/proc/scanUplinkers() - for(var/obj/machinery/computer/telecrystals/uplinker/A in urange(scanrange, src.loc)) - if(!A.linkedboss) - TCstations += A - A.linkedboss = src - if(virgin) - getDangerous() - virgin = 0 - -/obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population. - ..() - var/danger = GLOB.joined_player_list.len - SSticker.mode.syndicates.len - danger = Ceiling(danger, 10) - scaleTC(danger) - -/obj/machinery/computer/telecrystals/boss/proc/scaleTC(amt)//Its own proc, since it'll probably need a lot of tweaks for balance, use a fancier algorhithm, etc. - storedcrystals += amt * NUKESCALINGMODIFIER - -///////// - -/obj/machinery/computer/telecrystals/boss/attack_hand(mob/user) - if(..()) - return - src.add_fingerprint(user) - user.set_machine(src) - - - var/dat = "" - dat += "Scan for TC stations.
" - dat += "This [src] has [storedcrystals] telecrystals available for distribution.
" - dat += "

" - - - for(var/obj/machinery/computer/telecrystals/uplinker/A in TCstations) - dat += "[A.name] | " - if(A.uplinkholder) - dat += "[A.uplinkholder.hidden_uplink.telecrystals] telecrystals." - if(storedcrystals) - dat+= "
Add TC: 1 | 5" - dat += "
" - - if(TCstations.len) - dat += "

Evenly distribute remaining TC.

" - - - for(var/entry in transferlog) - dat += "[entry]
" - - - var/datum/browser/popup = new(user, "computer", "Team Telecrystal Management Console", 700, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/telecrystals/boss/Topic(href, href_list) - if(..()) - return - - if(href_list["scan"]) - scanUplinkers() - - if(href_list["give1"]) - var/obj/machinery/computer/telecrystals/uplinker/A = locate(href_list["give1"]) - A.giveTC(1) - - if(href_list["give5"]) - var/obj/machinery/computer/telecrystals/uplinker/A = locate(href_list["give5"]) - A.giveTC(5) - - if(href_list["distrib"]) - var/sanity = 0 - while(storedcrystals && sanity < 100) - for(var/obj/machinery/computer/telecrystals/uplinker/A in TCstations) - A.giveTC(1,0) - sanity++ - logTransfer("[src] evenly distributed telecrystals.") - - src.updateUsrDialog() - return - -#undef NUKESCALINGMODIFIER +#define NUKESCALINGMODIFIER 1 + +GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","Echo","Foxtrot","Zero", "Niner")) + +/obj/machinery/computer/telecrystals + name = "\improper Telecrystal assignment station" + desc = "A device used to manage telecrystals during group operations. You shouldn't be looking at this particular one..." + icon_state = "tcstation" + icon_keyboard = "tcstation_key" + icon_screen = "syndie" + clockwork = TRUE //it'd look weird, at least if ratvar ever got there + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + + light_color = LIGHT_COLOR_RED + +///////////////////////////////////////////// +/obj/machinery/computer/telecrystals/uplinker + name = "\improper Telecrystal upload/receive station" + desc = "A device used to manage telecrystals during group operations. To use, simply insert your uplink. With your uplink installed \ + you can upload your telecrystals to the group's pool using the console, or be assigned additional telecrystals by your lieutenant." + var/obj/item/uplinkholder = null + var/obj/machinery/computer/telecrystals/boss/linkedboss = null + +/obj/machinery/computer/telecrystals/uplinker/Initialize() + ..() + + var/ID = pick_n_take(GLOB.possible_uplinker_IDs) + if(!ID) + ID = rand(1,999) + name = "[name] [ID]" + +/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) + if(uplinkholder) + to_chat(user, "The [src] already has an uplink in it.") + return + if(O.hidden_uplink) + var/obj/item/I = user.get_active_held_item() + if(!user.drop_item()) + return + uplinkholder = I + I.loc = src + I.add_fingerprint(user) + update_icon() + updateUsrDialog() + else + to_chat(user, "The [O] doesn't appear to be an uplink...") + +/obj/machinery/computer/telecrystals/uplinker/update_icon() + ..() + if(uplinkholder) + add_overlay("[initial(icon_state)]-closed") + +/obj/machinery/computer/telecrystals/uplinker/proc/ejectuplink() + if(uplinkholder) + uplinkholder.loc = get_turf(src.loc) + uplinkholder = null + update_icon() + +/obj/machinery/computer/telecrystals/uplinker/proc/donateTC(amt, addLog = 1) + if(uplinkholder && linkedboss) + if(amt < 0) + linkedboss.storedcrystals += uplinkholder.hidden_uplink.telecrystals + if(addLog) + linkedboss.logTransfer("[src] donated [uplinkholder.hidden_uplink.telecrystals] telecrystals to [linkedboss].") + uplinkholder.hidden_uplink.telecrystals = 0 + else if(amt <= uplinkholder.hidden_uplink.telecrystals) + uplinkholder.hidden_uplink.telecrystals -= amt + linkedboss.storedcrystals += amt + if(addLog) + linkedboss.logTransfer("[src] donated [amt] telecrystals to [linkedboss].") + +/obj/machinery/computer/telecrystals/uplinker/proc/giveTC(amt, addLog = 1) + if(uplinkholder && linkedboss) + if(amt < 0) + uplinkholder.hidden_uplink.telecrystals += linkedboss.storedcrystals + if(addLog) + linkedboss.logTransfer("[src] received [linkedboss.storedcrystals] telecrystals from [linkedboss].") + linkedboss.storedcrystals = 0 + else if(amt <= linkedboss.storedcrystals) + uplinkholder.hidden_uplink.telecrystals += amt + linkedboss.storedcrystals -= amt + if(addLog) + linkedboss.logTransfer("[src] received [amt] telecrystals from [linkedboss].") + +/////// + +/obj/machinery/computer/telecrystals/uplinker/attack_hand(mob/user) + if(..()) + return + src.add_fingerprint(user) + user.set_machine(src) + + var/dat = "" + if(linkedboss) + dat += "[linkedboss] has [linkedboss.storedcrystals] telecrystals available for distribution.

" + else + dat += "No linked management consoles detected. Scan for uplink stations using the management console.

" + + if(uplinkholder) + dat += "[uplinkholder.hidden_uplink.telecrystals] telecrystals remain in this uplink.
" + if(linkedboss) + dat += "Donate TC: 1 | 5 | All" + dat += "
Eject Uplink" + + + var/datum/browser/popup = new(user, "computer", "Telecrystal Upload/Receive Station", 700, 500) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/telecrystals/uplinker/Topic(href, href_list) + if(..()) + return + + if(href_list["donate"]) + var/tcamt = text2num(href_list["donate"]) + donateTC(tcamt) + + if(href_list["eject"]) + ejectuplink() + + src.updateUsrDialog() + + +///////////////////////////////////////// +/obj/machinery/computer/telecrystals/boss + name = "team Telecrystal management console" + desc = "A device used to manage telecrystals during group operations. To use, simply initialize the machine by scanning for nearby uplink stations. \ + Once the consoles are linked up, you can assign any telecrystals amongst your operatives; be they donated by your agents or rationed to the squad \ + based on the danger rating of the mission." + icon_state = "computer" + icon_screen = "tcboss" + icon_keyboard = "syndie_key" + var/virgin = 1 + var/scanrange = 10 + var/storedcrystals = 0 + var/list/TCstations = list() + var/list/transferlog = list() + +/obj/machinery/computer/telecrystals/boss/proc/logTransfer(logmessage) + transferlog += ("[worldtime2text()] [logmessage]") + +/obj/machinery/computer/telecrystals/boss/proc/scanUplinkers() + for(var/obj/machinery/computer/telecrystals/uplinker/A in urange(scanrange, src.loc)) + if(!A.linkedboss) + TCstations += A + A.linkedboss = src + if(virgin) + getDangerous() + virgin = 0 + +/obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population. + ..() + var/danger = GLOB.joined_player_list.len - SSticker.mode.syndicates.len + danger = Ceiling(danger, 10) + scaleTC(danger) + +/obj/machinery/computer/telecrystals/boss/proc/scaleTC(amt)//Its own proc, since it'll probably need a lot of tweaks for balance, use a fancier algorhithm, etc. + storedcrystals += amt * NUKESCALINGMODIFIER + +///////// + +/obj/machinery/computer/telecrystals/boss/attack_hand(mob/user) + if(..()) + return + src.add_fingerprint(user) + user.set_machine(src) + + + var/dat = "" + dat += "Scan for TC stations.
" + dat += "[storedcrystals] telecrystals are available for distribution.
" + dat += "

" + + + for(var/obj/machinery/computer/telecrystals/uplinker/A in TCstations) + dat += "[A.name] | " + if(A.uplinkholder) + dat += "[A.uplinkholder.hidden_uplink.telecrystals] telecrystals." + if(storedcrystals) + dat+= "
Add TC: 1 | 5 | 10 | All" + dat += "
" + + if(TCstations.len && storedcrystals) + dat += "

Evenly distribute remaining TC.

" + + + for(var/entry in transferlog) + dat += "[entry]
" + + + var/datum/browser/popup = new(user, "computer", "Team Telecrystal Management Console", 700, 500) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/telecrystals/boss/Topic(href, href_list) + if(..()) + return + + if(href_list["scan"]) + scanUplinkers() + + if(href_list["give"]) + var/tcamt = text2num(href_list["give"]) + if(TCstations.len) // sanity + var/obj/machinery/computer/telecrystals/uplinker/A = locate(href_list["target"]) in TCstations + A.giveTC(tcamt) + + if(href_list["distrib"]) + var/sanity = 0 + while(storedcrystals && sanity < 100) + for(var/obj/machinery/computer/telecrystals/uplinker/A in TCstations) + A.giveTC(1,0) + sanity++ + logTransfer("[src] evenly distributed telecrystals.") + + src.updateUsrDialog() + return + +#undef NUKESCALINGMODIFIER diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index cf18a99875..3e36776773 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -85,7 +85,7 @@ return if(!allowed(user)) to_chat(user,"Error: Access Denied - Message: Only the engineering department can be trusted with this kind of power.") - playsound_local(src,'sound/misc/compiler-failure.ogg', 25, 1) + user.playsound_local(src,'sound/misc/compiler-failure.ogg', 25, 1) return if(!Adjacent(user) && !isAI(user)) return diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index af59f63888..e5785e0dab 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -9,6 +9,7 @@ use_power = 1 idle_power_usage = 50 active_power_usage = 300 + occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain) var/damage_coeff var/scan_level var/precision_coeff @@ -98,6 +99,13 @@ open_machine() +/obj/machinery/dna_scannernew/proc/locate_computer(type_) + for(dir in list(NORTH,EAST,SOUTH,WEST)) + var/C = locate(type_, get_step(src, dir)) + if(C) + return C + return null + /obj/machinery/dna_scannernew/close_machine() if(!state_open) return 0 @@ -105,21 +113,19 @@ ..() // search for ghosts, if the corpse is empty and the scanner is connected to a cloner - if(occupant) - if(locate(/obj/machinery/computer/cloning, get_step(src, NORTH)) \ - || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ - || locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \ - || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) - if(!occupant.suiciding && !(occupant.disabilities & NOCLONE) && !occupant.hellbound) - occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) + var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) + if(istype(mob_occupant)) + if(locate_computer(/obj/machinery/computer/cloning)) + if(!mob_occupant.suiciding && !(mob_occupant.disabilities & NOCLONE) && !mob_occupant.hellbound) + mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) - var/obj/machinery/computer/scan_consolenew/console - for(dir in list(NORTH,EAST,SOUTH,WEST)) - console = locate(/obj/machinery/computer/scan_consolenew, get_step(src, dir)) - if(console) - console.on_scanner_close() - break - return 1 + // DNA manipulators cannot operate on severed heads or brains + if(isliving(occupant)) + var/obj/machinery/computer/scan_consolenew/console = locate_computer(/obj/machinery/computer/scan_consolenew) + if(console) + console.on_scanner_close() + + return TRUE /obj/machinery/dna_scannernew/open_machine() if(state_open) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 7ff38f53c9..1750aa7aa8 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -179,18 +179,17 @@ /obj/machinery/door/airlock/narsie_act() var/turf/T = get_turf(src) var/runed = prob(20) - if(prob(20)) - if(glass) - if(runed) - new/obj/machinery/door/airlock/cult/glass(T) - else - new/obj/machinery/door/airlock/cult/unruned/glass(T) + if(glass) + if(runed) + new/obj/machinery/door/airlock/cult/glass(T) else - if(runed) - new/obj/machinery/door/airlock/cult(T) - else - new/obj/machinery/door/airlock/cult/unruned(T) - qdel(src) + new/obj/machinery/door/airlock/cult/unruned/glass(T) + else + if(runed) + new/obj/machinery/door/airlock/cult(T) + else + new/obj/machinery/door/airlock/cult/unruned(T) + qdel(src) /obj/machinery/door/airlock/ratvar_act() //Airlocks become pinion airlocks that only allow servants if(glass) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 167b95b634..18d60559bd 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -25,6 +25,12 @@ assemblytype = /obj/structure/door_assembly/door_assembly_mai normal_integrity = 250 +/obj/machinery/door/airlock/maintenance/external + name = "external airlock access" + icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_mai + normal_integrity = 250 + /obj/machinery/door/airlock/mining name = "mining airlock" icon = 'icons/obj/doors/airlocks/station/mining.dmi' diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 447ff5f9bc..55d8b67582 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -153,6 +153,21 @@ return if(panel_open) + + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent == INTENT_HELP) + var/obj/item/weapon/weldingtool/WT = W + if(obj_integrity < max_integrity) + if(WT.remove_fuel(0,user)) + to_chat(user, "You begin repairing [src]...") + playsound(loc, WT.usesound, 40, 1) + if(do_after(user, 40*WT.toolspeed, target = src)) + obj_integrity = max_integrity + playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + to_chat(user, "You repair [src].") + else + to_chat(user, "[src] is already in good condition!") + return + switch(buildstage) if(2) if(istype(W, /obj/item/device/multitool)) @@ -190,6 +205,7 @@ if(buildstage == 1) if(stat & BROKEN) to_chat(user, "You remove the destroyed circuit.") + stat &= ~BROKEN else to_chat(user, "You pry out the circuit.") new /obj/item/weapon/electronics/firealarm(user.loc) @@ -230,9 +246,10 @@ /obj/machinery/firealarm/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) new /obj/item/stack/sheet/metal(loc, 1) - var/obj/item/I = new /obj/item/weapon/electronics/firealarm(loc) - if(!disassembled) - I.obj_integrity = I.max_integrity * 0.5 + if(!(stat & BROKEN)) + var/obj/item/I = new /obj/item/weapon/electronics/firealarm(loc) + if(!disassembled) + I.obj_integrity = I.max_integrity * 0.5 new /obj/item/stack/cable_coil(loc, 3) qdel(src) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 92a550b17c..5979abdc29 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -136,13 +136,14 @@ The console is located at computer/gulag_teleporter.dm /obj/machinery/gulag_teleporter/proc/strip_occupant() if(linked_reclaimer) linked_reclaimer.stored_items[occupant] = list() - for(var/obj/item/W in occupant) - if(!is_type_in_typecache(W, required_items) && occupant.temporarilyRemoveItemFromInventory(W)) + var/mob/living/mob_occupant = occupant + for(var/obj/item/W in mob_occupant) + if(!is_type_in_typecache(W, required_items) && mob_occupant.temporarilyRemoveItemFromInventory(W)) if(istype(W, /obj/item/weapon/restraints/handcuffs)) W.forceMove(get_turf(src)) continue if(linked_reclaimer) - linked_reclaimer.stored_items[occupant] += W + linked_reclaimer.stored_items[mob_occupant] += W linked_reclaimer.contents += W W.forceMove(linked_reclaimer) else diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index ae8c1ac1c4..2c2e39c4d7 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -1,249 +1,397 @@ -/* Holograms! - * Contains: - * Holopad - * Hologram - * Other stuff - */ - -/* -Revised. Original based on space ninja hologram code. Which is also mine. /N -How it works: -AI clicks on holopad in camera view. View centers on holopad. -AI clicks again on the holopad to display a hologram. Hologram stays as long as AI is looking at the pad and it (the hologram) is in range of the pad. -AI can use the directional keys to move the hologram around, provided the above conditions are met and the AI in question is the holopad's master. -Any number of AIs can use a holopad. /Lo6 -AI may cancel the hologram at any time by clicking on the holopad once more. - -Possible to do for anyone motivated enough: - Give an AI variable for different hologram icons. - Itegrate EMP effect to disable the unit. -*/ - - -/* - * Holopad - */ - -#define HOLOPAD_PASSIVE_POWER_USAGE 1 -#define HOLOGRAM_POWER_USAGE 2 -#define RANGE_BASED 4 -#define AREA_BASED 6 - -#define HOLOPAD_MODE RANGE_BASED - -/obj/machinery/holopad - name = "\improper AI holopad" - desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." - icon_state = "holopad0" - layer = LOW_OBJ_LAYER - flags = HEAR - anchored = 1 - use_power = 1 - idle_power_usage = 5 - active_power_usage = 100 - obj_integrity = 300 - max_integrity = 300 - armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) - var/list/masters = list()//List of AIs that use the holopad - var/last_request = 0 //to prevent request spam. ~Carn - var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. - var/temp = "" - var/static/list/holopads = list() - -/obj/machinery/holopad/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/holopad(null) - B.apply_default_parts(src) - holopads += src - -/obj/machinery/holopad/Destroy() - for (var/mob/living/silicon/ai/master in masters) - clear_holo(master) - holopads -= src - return ..() - -/obj/machinery/holopad/power_change() - if (powered()) - stat &= ~NOPOWER - else - stat |= ~NOPOWER - -/obj/machinery/holopad/RefreshParts() - var/holograph_range = 4 - for(var/obj/item/weapon/stock_parts/capacitor/B in component_parts) - holograph_range += 1 * B.rating - holo_range = holograph_range - -/obj/machinery/holopad/attackby(obj/item/P, mob/user, params) - if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P)) - return - - if(exchange_parts(user, P)) - return - - if(default_pry_open(P)) - return - - if(default_unfasten_wrench(user, P)) - return - - if(default_deconstruction_crowbar(P)) - return - return ..() - -/obj/machinery/holopad/AltClick(mob/living/carbon/human/user) - interact(user) - -/obj/machinery/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests. - if(!istype(user)) - return - if(user.stat || !is_operational()) - return - user.set_machine(src) - var/dat - if(temp) - dat = temp - else - dat = "request an AI's presence." - - var/datum/browser/popup = new(user, "holopad", name, 300, 130) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/holopad/Topic(href, href_list) - if(..() || !is_operational()) - return - if (href_list["AIrequest"]) - if(last_request + 200 < world.time) - last_request = world.time - temp = "You requested an AI's presence.
" - temp += "Main Menu" - var/area/area = get_area(src) - for(var/mob/living/silicon/ai/AI in GLOB.living_mob_list) - if(!AI.client) - continue - to_chat(AI, "Your presence is requested at \the [area].") - else - temp = "A request for AI presence was already sent recently.
" - temp += "Main Menu" - - else if(href_list["mainmenu"]) - temp = "" - - updateDialog() - add_fingerprint(usr) - -/obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user) - if (!istype(user)) - return - /*There are pretty much only three ways to interact here. - I don't need to check for client since they're clicking on an object. - This may change in the future but for now will suffice.*/ - if(user.eyeobj.loc != src.loc)//Set client eye on the object if it's not already. - user.eyeobj.setLoc(get_turf(src)) - else if(!masters[user])//If there is no hologram, possibly make one. - activate_holo(user) - else//If there is a hologram, remove it. - clear_holo(user) - -/obj/machinery/holopad/process() - if(masters.len)//If there is a hologram. - for (var/mob/living/silicon/ai/master in masters) - if(master && !master.stat && master.client && master.eyeobj)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. - if(!(stat & NOPOWER))//If the machine has power. - if(HOLOPAD_MODE == RANGE_BASED) - if(get_dist(master.eyeobj, src) <= holo_range) - return TRUE - else - var/obj/machinery/holopad/pad_close = get_closest_atom(/obj/machinery/holopad, holopads, master.eyeobj) - if(get_dist(pad_close, master.eyeobj) <= holo_range) - var/obj/effect/overlay/holo_pad_hologram/h = masters[master] - unset_holo(master) - pad_close.set_holo(master, h) - return TRUE - - else if (HOLOPAD_MODE == AREA_BASED) - - var/area/holo_area = get_area(src) - var/area/eye_area = get_area(master.eyeobj) - - if(eye_area in holo_area.related) - return TRUE - - clear_holo(master)//If not, we want to get rid of the hologram. - return TRUE - -/obj/machinery/holopad/proc/activate_holo(mob/living/silicon/ai/user) - if(!(stat & NOPOWER) && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it - if (istype(user.current, /obj/machinery/holopad)) - to_chat(user, "ERROR: \black Image feed in progress.") - return - create_holo(user)//Create one. - src.visible_message("A holographic image of [user] flicks to life right before your eyes!") - else - to_chat(user, "ERROR: \black Unable to project hologram.") - -/*This is the proc for special two-way communication between AI and holopad/people talking near holopad. -For the other part of the code, check silicon say.dm. Particularly robot talk.*/ -/obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) - if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. - for(var/mob/living/silicon/ai/master in masters) - if(masters[master] && speaker != master) - master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) - -/obj/machinery/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc) - var/obj/effect/overlay/holo_pad_hologram/h = new(T)//Spawn a blank effect at the location. - h.icon = A.holo_icon - h.mouse_opacity = 0//So you can't click on it. - h.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. - h.anchored = 1//So space wind cannot drag it. - h.name = "[A.name] (Hologram)"//If someone decides to right click. - h.set_light(2) //hologram lighting - set_holo(A, h) - return TRUE - -/obj/machinery/holopad/proc/set_holo(mob/living/silicon/ai/A, var/obj/effect/overlay/holo_pad_hologram/h) - masters[A] = h - set_light(2) // pad lighting - icon_state = "holopad1" - A.current = src - use_power += HOLOGRAM_POWER_USAGE - return TRUE - -/obj/machinery/holopad/proc/clear_holo(mob/living/silicon/ai/user) - qdel(masters[user]) // Get rid of user's hologram - unset_holo(user) - return TRUE - -/obj/machinery/holopad/proc/unset_holo(mob/living/silicon/ai/user) - if(user.current == src) - user.current = null - masters -= user // Discard AI from the list of those who use holopad - use_power = max(HOLOPAD_PASSIVE_POWER_USAGE, use_power - HOLOGRAM_POWER_USAGE)//Reduce power usage - if (!masters.len) // If no users left - set_light(0) // pad lighting (hologram lighting will be handled automatically since its owner was deleted) - icon_state = "holopad0" - use_power = HOLOPAD_PASSIVE_POWER_USAGE - return TRUE - -/obj/machinery/holopad/proc/move_hologram(mob/living/silicon/ai/user) - if(masters[user]) - step_to(masters[user], user.eyeobj) - var/obj/effect/overlay/holo_pad_hologram/H = masters[user] - H.loc = get_turf(user.eyeobj) - return TRUE - -/obj/effect/overlay/holo_pad_hologram/Process_Spacemove(movement_dir = 0) - return 1 - -/obj/item/weapon/circuitboard/machine/holopad - name = "AI Holopad (Machine Board)" - build_path = /obj/machinery/holopad - origin_tech = "programming=1" - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) - -#undef RANGE_BASED -#undef AREA_BASED -#undef HOLOPAD_PASSIVE_POWER_USAGE -#undef HOLOGRAM_POWER_USAGE +/* Holograms! + * Contains: + * Holopad + * Hologram + * Other stuff + */ + +/* +Revised. Original based on space ninja hologram code. Which is also mine. /N +How it works: +AI clicks on holopad in camera view. View centers on holopad. +AI clicks again on the holopad to display a hologram. Hologram stays as long as AI is looking at the pad and it (the hologram) is in range of the pad. +AI can use the directional keys to move the hologram around, provided the above conditions are met and the AI in question is the holopad's master. +Any number of AIs can use a holopad. /Lo6 +AI may cancel the hologram at any time by clicking on the holopad once more. + +Possible to do for anyone motivated enough: + Give an AI variable for different hologram icons. + Itegrate EMP effect to disable the unit. +*/ + + +/* + * Holopad + */ + +#define HOLOPAD_PASSIVE_POWER_USAGE 1 +#define HOLOGRAM_POWER_USAGE 2 + +GLOBAL_LIST_EMPTY(holopads) +#define HOLOPAD_MODE RANGE_BASED + +/obj/machinery/holopad + name = "Holopad" + desc = "It's a floor-mounted device for projecting holographic images." + icon_state = "holopad0" + layer = LOW_OBJ_LAYER + flags = HEAR + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 + obj_integrity = 300 + max_integrity = 300 + armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) + var/list/masters = list()//List of living mobs that use the holopad + var/last_request = 0 //to prevent request spam. ~Carn + var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. + var/temp = "" + var/list/holo_calls //array of /datum/holocalls + var/datum/holocall/outgoing_call //do not modify the datums only check and call the public procs + var/static/force_answer_call = FALSE //Calls will be automatically answered after a couple rings, here for debugging + var/static/list/holopads = list() + +/obj/machinery/holopad/Initialize() + ..() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/holopad(null) + B.apply_default_parts(src) + holopads += src + +/obj/machinery/holopad/Destroy() + if(outgoing_call) + LAZYADD(holo_calls, outgoing_call) + + for(var/I in holo_calls) + var/datum/holocall/HC = I + HC.ConnectionFailure(src) + LAZYCLEARLIST(holo_calls) + + for (var/I in masters) + clear_holo(I) + holopads -= src + return ..() + +/obj/machinery/holopad/power_change() + if (powered()) + stat &= ~NOPOWER + else + stat |= ~NOPOWER + +/obj/machinery/holopad/RefreshParts() + var/holograph_range = 4 + for(var/obj/item/weapon/stock_parts/capacitor/B in component_parts) + holograph_range += 1 * B.rating + holo_range = holograph_range + +/obj/machinery/holopad/attackby(obj/item/P, mob/user, params) + if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P)) + return + + if(exchange_parts(user, P)) + return + + if(default_pry_open(P)) + return + + if(default_unfasten_wrench(user, P)) + return + + if(default_deconstruction_crowbar(P)) + return + return ..() + +/obj/machinery/holopad/proc/CheckCallClose() + for(var/I in holo_calls) + var/datum/holocall/HC = I + if(usr == HC.eye) + HC.Disconnect(HC.calling_holopad) //disconnect via clicking the called holopad + return TRUE + return FALSE + +/obj/machinery/holopad/Click(location,control,params) + if(!CheckCallClose()) + return ..() + +/obj/machinery/holopad/AltClick(mob/living/carbon/human/user) + if(!CheckCallClose()) + interact(user) + +/obj/machinery/holopad/interact(mob/living/carbon/human/user) //Carn: Hologram requests. + if(!istype(user)) + return + + if(outgoing_call || user.incapacitated() || !is_operational()) + return + + user.set_machine(src) + var/dat + if(temp) + dat = temp + else + dat = "Request an AI's presence.
" + dat += "Call another holopad.
" + + if(LAZYLEN(holo_calls)) + dat += "=====================================================
" + + var/one_answered_call = FALSE + var/one_unanswered_call = FALSE + for(var/I in holo_calls) + var/datum/holocall/HC = I + if(HC.connected_holopad != src) + dat += "Answer call from [get_area(HC.calling_holopad)].
" + one_unanswered_call = TRUE + else + one_answered_call = TRUE + + if(one_answered_call && one_unanswered_call) + dat += "=====================================================
" + //we loop twice for formatting + for(var/I in holo_calls) + var/datum/holocall/HC = I + if(HC.connected_holopad == src) + dat += "Disconnect call from [HC.user].
" + + + var/datum/browser/popup = new(user, "holopad", name, 300, 130) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + +/obj/machinery/holopad/Topic(href, href_list) + if(..() || isAI(usr)) + return + add_fingerprint(usr) + if(!is_operational()) + return + if (href_list["AIrequest"]) + if(last_request + 200 < world.time) + last_request = world.time + temp = "You requested an AI's presence.
" + temp += "Main Menu" + var/area/area = get_area(src) + for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs) + if(!AI.client) + continue + to_chat(AI, "Your presence is requested at \the [area].") + else + temp = "A request for AI presence was already sent recently.
" + temp += "Main Menu" + + else if(href_list["Holocall"]) + if(outgoing_call) + return + + temp = "You must stand on the holopad to make a call!
" + temp += "Main Menu" + if(usr.loc == loc) + var/list/callnames = list() + for(var/I in holopads) + var/area/A = get_area(I) + if(A) + LAZYADD(callnames[A], I) + callnames -= get_area(src) + + var/result = input(usr, "Choose an area to call", "Holocall") as null|anything in callnames + if(QDELETED(usr) || !result || outgoing_call) + return + + if(usr.loc == loc) + temp = "Dialing...
" + temp += "Main Menu" + new /datum/holocall(usr, src, callnames[result]) + + else if(href_list["connectcall"]) + var/datum/holocall/call_to_connect = locate(href_list["connectcall"]) + if(!QDELETED(call_to_connect)) + call_to_connect.Answer(src) + temp = "" + + else if(href_list["disconnectcall"]) + var/datum/holocall/call_to_disconnect = locate(href_list["disconnectcall"]) + if(!QDELETED(call_to_disconnect)) + call_to_disconnect.Disconnect(src) + temp = "" + + else if(href_list["mainmenu"]) + temp = "" + if(outgoing_call) + outgoing_call.Disconnect() + + updateDialog() + +//do not allow AIs to answer calls or people will use it to meta the AI sattelite +/obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user) + if (!istype(user)) + return + /*There are pretty much only three ways to interact here. + I don't need to check for client since they're clicking on an object. + This may change in the future but for now will suffice.*/ + if(user.eyeobj.loc != src.loc)//Set client eye on the object if it's not already. + user.eyeobj.setLoc(get_turf(src)) + else if(!masters[user])//If there is no hologram, possibly make one. + activate_holo(user) + else//If there is a hologram, remove it. + clear_holo(user) + +/obj/machinery/holopad/process() + for(var/I in masters) + var/mob/living/master = I + var/mob/living/silicon/ai/AI = master + if(!istype(AI)) + AI = null + + if(!QDELETED(master) && !master.incapacitated() && master.client && (!AI || AI.eyeobj))//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. + if(is_operational())//If the machine has power. + if(AI) //ais are range based + if(get_dist(AI.eyeobj, src) <= holo_range) + continue + else + var/obj/machinery/holopad/pad_close = get_closest_atom(/obj/machinery/holopad, holopads, AI.eyeobj) + if(get_dist(pad_close, AI.eyeobj) <= holo_range) + var/obj/effect/overlay/holo_pad_hologram/h = masters[master] + unset_holo(master) + pad_close.set_holo(master, h) + continue + else + continue + clear_holo(master)//If not, we want to get rid of the hologram. + + if(outgoing_call) + outgoing_call.Check() + + for(var/I in holo_calls) + var/datum/holocall/HC = I + if(HC.connected_holopad != src) + if(force_answer_call && world.time > (HC.call_start_time + (HOLOPAD_MAX_DIAL_TIME / 2))) + HC.Answer(src) + break + if(outgoing_call) + HC.Disconnect(src)//can't answer calls while calling + else + playsound(src, 'sound/machines/twobeep.ogg', 100) //bring, bring! + +/obj/machinery/holopad/proc/activate_holo(mob/living/user) + var/mob/living/silicon/ai/AI = user + if(!istype(AI)) + AI = null + + if(is_operational() && (!AI || AI.eyeobj.loc == loc))//If the projector has power and client eye is on it + if (AI && istype(AI.current, /obj/machinery/holopad)) + to_chat(user, "ERROR: \black Image feed in progress.") + return + + var/obj/effect/overlay/holo_pad_hologram/Hologram = new(loc)//Spawn a blank effect at the location. + if(AI) + Hologram.icon = AI.holo_icon + else //make it like real life + Hologram.icon = user.icon + Hologram.icon_state = user.icon_state + Hologram.copy_overlays(user, TRUE) + //codersprite some holo effects here + Hologram.alpha = 100 + Hologram.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY) + Hologram.Impersonation = user + + + Hologram.language_holder = user.get_language_holder() + + Hologram.mouse_opacity = 0//So you can't click on it. + Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. + Hologram.anchored = 1//So space wind cannot drag it. + Hologram.name = "[user.name] (Hologram)"//If someone decides to right click. + Hologram.set_light(2) //hologram lighting + + set_holo(user, Hologram) + visible_message("A holographic image of [user] flicks to life right before your eyes!") + + return Hologram + else + to_chat(user, "ERROR: \black Unable to project hologram.") + +/*This is the proc for special two-way communication between AI and holopad/people talking near holopad. +For the other part of the code, check silicon say.dm. Particularly robot talk.*/ +/obj/machinery/holopad/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) + if(speaker && masters.len && !radio_freq)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. + for(var/mob/living/silicon/ai/master in masters) + if(masters[master] && speaker != master) + master.relay_speech(message, speaker, message_language, raw_message, radio_freq, spans, message_mode) + + for(var/I in holo_calls) + var/datum/holocall/HC = I + if(HC.connected_holopad == src && speaker != HC.hologram) + HC.user.Hear(message, speaker, message_language, raw_message, radio_freq, spans) + + if(outgoing_call && speaker == outgoing_call.user) + outgoing_call.hologram.say(raw_message) + +/obj/machinery/holopad/proc/SetLightsAndPower() + var/total_users = masters.len + LAZYLEN(holo_calls) + use_power = HOLOPAD_PASSIVE_POWER_USAGE + HOLOGRAM_POWER_USAGE * total_users + if(total_users) + set_light(2) + icon_state = "holopad1" + else + set_light(0) + icon_state = "holopad0" + +/obj/machinery/holopad/proc/set_holo(mob/living/user, var/obj/effect/overlay/holo_pad_hologram/h) + masters[user] = h + var/mob/living/silicon/ai/AI = user + if(istype(AI)) + AI.current = src + SetLightsAndPower() + return TRUE + +/obj/machinery/holopad/proc/clear_holo(mob/living/user) + qdel(masters[user]) // Get rid of user's hologram + unset_holo(user) + return TRUE + +/obj/machinery/holopad/proc/unset_holo(mob/living/user) + var/mob/living/silicon/ai/AI = user + if(istype(AI) && AI.current == src) + AI.current = null + masters -= user // Discard AI from the list of those who use holopad + SetLightsAndPower() + return TRUE + +/obj/machinery/holopad/proc/move_hologram(mob/living/user, turf/new_turf) + if(masters[user]) + var/obj/effect/overlay/holo_pad_hologram/H = masters[user] + step_to(H, new_turf) + H.loc = new_turf + var/area/holo_area = get_area(src) + var/area/eye_area = new_turf.loc + + if(!(eye_area in holo_area.related)) + clear_holo(user) + return TRUE + +/obj/effect/overlay/holo_pad_hologram + var/mob/living/Impersonation + var/datum/holocall/HC + +/obj/effect/overlay/holo_pad_hologram/Destroy() + Impersonation = null + if(HC) + HC.Disconnect(HC.calling_holopad) + return ..() + +/obj/effect/overlay/holo_pad_hologram/Process_Spacemove(movement_dir = 0) + return 1 + +/obj/effect/overlay/holo_pad_hologram/examine(mob/user) + if(Impersonation) + return Impersonation.examine(user) + return ..() + +/obj/item/weapon/circuitboard/machine/holopad + name = "AI Holopad (Machine Board)" + build_path = /obj/machinery/holopad + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + +#undef HOLOPAD_PASSIVE_POWER_USAGE +#undef HOLOGRAM_POWER_USAGE \ No newline at end of file diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm new file mode 100644 index 0000000000..82e9d9a176 --- /dev/null +++ b/code/game/machinery/launch_pad.dm @@ -0,0 +1,373 @@ +/obj/machinery/launchpad + name = "bluespace launchpad" + desc = "A bluespace pad able to thrust matter through bluespace, teleporting it to or from nearby locations." + icon = 'icons/obj/telescience.dmi' + icon_state = "lpad-idle" + var/icon_teleport = "lpad-beam" + anchored = TRUE + use_power = TRUE + idle_power_usage = 200 + active_power_usage = 2500 + var/stationary = TRUE //to prevent briefcase pad deconstruction and such + var/display_name = "Launchpad" + var/teleport_speed = 35 + var/range = 5 + var/teleporting = FALSE //if it's in the process of teleporting + var/power_efficiency = 1 + var/x_offset = 0 + var/y_offset = 0 + +/obj/machinery/launchpad/Initialize() + . = ..() + var/obj/item/weapon/circuitboard/machine/launchpad/B = new + B.apply_default_parts(src) + +/obj/item/weapon/circuitboard/machine/launchpad + name = "Bluespace Launchpad (Machine Board)" + build_path = /obj/machinery/launchpad + origin_tech = "programming=3;engineering=3;plasmatech=2;bluespace=3" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + +/obj/machinery/launchpad/RefreshParts() + var/E = -1 //to make default parts have the base value + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + E += M.rating + range = initial(range) + range += E + +/obj/machinery/launchpad/attackby(obj/item/I, mob/user, params) + if(stationary) + if(default_deconstruction_screwdriver(user, "lpad-idle-o", "lpad-idle", I)) + return + + if(panel_open) + if(istype(I, /obj/item/device/multitool)) + var/obj/item/device/multitool/M = I + M.buffer = src + to_chat(user, "You save the data in the [I.name]'s buffer.") + return 1 + + if(exchange_parts(user, I)) + return + + if(default_deconstruction_crowbar(I)) + return + + return ..() + +/obj/machinery/launchpad/proc/isAvailable() + if(stat & NOPOWER) + return FALSE + if(panel_open) + return FALSE + return TRUE + +/obj/machinery/launchpad/proc/doteleport(mob/user, sending) + if(teleporting) + to_chat(user, "ERROR: Launchpad busy.") + return + + var/target_x = x + x_offset + var/target_y = y + y_offset + var/turf/target = locate(target_x, target_y, z) + var/area/A = get_area(target) + + flick(icon_teleport, src) + playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1) + teleporting = TRUE + + + sleep(teleport_speed) + + if(QDELETED(src) || !isAvailable()) + return + + teleporting = FALSE + + // use a lot of power + use_power(1000) + + var/turf/source = target + var/turf/dest = get_turf(src) + var/list/log_msg = list() + log_msg += ": [key_name(user)] has teleported " + + if(sending) + source = dest + dest = target + + playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, 1) + for(var/atom/movable/ROI in source) + if(ROI == src) + continue + // if it's anchored, don't teleport + if(ROI.anchored) + if(isliving(ROI)) + var/mob/living/L = ROI + if(L.buckled) + // TP people on office chairs + if(L.buckled.anchored) + continue + + log_msg += "[key_name(L)] (on a chair), " + else + continue + else if(!isobserver(ROI)) + continue + if(ismob(ROI)) + var/mob/T = ROI + log_msg += "[key_name(T)], " + else + log_msg += "[ROI.name]" + if (istype(ROI, /obj/structure/closet)) + var/obj/structure/closet/C = ROI + log_msg += " (" + for(var/atom/movable/Q as mob|obj in C) + if(ismob(Q)) + log_msg += "[key_name(Q)], " + else + log_msg += "[Q.name], " + if (dd_hassuffix(log_msg, "(")) + log_msg += "empty)" + else + log_msg = dd_limittext(log_msg, length(log_msg) - 2) + log_msg += ")" + log_msg += ", " + do_teleport(ROI, dest) + + if (dd_hassuffix(log_msg, ", ")) + log_msg = dd_limittext(log_msg, length(log_msg) - 2) + else + log_msg += "nothing" + log_msg += " [sending ? "to" : "from"] [target_x], [target_y], [z] ([A ? A.name : "null area"])" + investigate_log(log_msg.Join(), "telesci") + updateDialog() + +//Starts in the briefcase. Don't spawn this directly, or it will runtime when closing. +/obj/machinery/launchpad/briefcase + name = "briefcase launchpad" + desc = "A portable bluespace pad able to thrust matter through bluespace, teleporting it to or from nearby locations. Controlled via remote." + icon_state = "blpad-idle" + icon_teleport = "blpad-beam" + anchored = FALSE + use_power = FALSE + idle_power_usage = 0 + active_power_usage = 0 + teleport_speed = 20 + range = 3 + stationary = FALSE + var/closed = TRUE + var/obj/item/briefcase_launchpad/briefcase + +/obj/machinery/launchpad/briefcase/Initialize() + . = ..() + if(istype(loc, /obj/item/briefcase_launchpad)) + briefcase = loc + else + log_game("[src] has been spawned without a briefcase.") + qdel(src) + +/obj/machinery/launchpad/briefcase/Destroy() + if(!QDELETED(briefcase)) + qdel(briefcase) + briefcase = null + return ..() + +/obj/machinery/launchpad/briefcase/isAvailable() + if(closed) + return FALSE + return ..() + +/obj/machinery/launchpad/briefcase/MouseDrop(over_object, src_location, over_location) + . = ..() + if(over_object == usr && Adjacent(usr)) + if(!briefcase || !usr.can_hold_items()) + return + if(usr.incapacitated()) + to_chat(usr, "You can't do that right now!") + return + usr.visible_message("[usr] starts closing [src]...", "You start closing [src]...") + if(do_after(usr, 30, target = usr)) + usr.put_in_hands(briefcase) + forceMove(briefcase) + closed = TRUE + +/obj/machinery/launchpad/briefcase/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/launchpad_remote)) + var/obj/item/device/launchpad_remote/L = I + L.pad = src + to_chat(user, "You link [src] to [L].") + else + return ..() + +//Briefcase item that contains the launchpad. +/obj/item/briefcase_launchpad + name = "briefcase" + desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional." + icon = 'icons/obj/storage.dmi' + icon_state = "briefcase" + flags = CONDUCT + force = 8 + hitsound = "swing_hit" + throw_speed = 2 + throw_range = 4 + w_class = WEIGHT_CLASS_BULKY + attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") + resistance_flags = FLAMMABLE + obj_integrity = 150 + max_integrity = 150 + var/obj/machinery/launchpad/briefcase/pad + +/obj/item/briefcase_launchpad/Initialize() + . = ..() + pad = new(src) + +/obj/item/briefcase_launchpad/Destroy() + if(!QDELETED(pad)) + qdel(pad) + pad = null + return ..() + +/obj/item/briefcase_launchpad/attack_self(mob/user) + if(!isturf(user.loc)) //no setting up in a locker + return + add_fingerprint(user) + user.visible_message("[user] starts setting down [src]...", "You start setting up [pad]...") + if(do_after(user, 30, target = user)) + pad.forceMove(get_turf(src)) + pad.closed = FALSE + user.transferItemToLoc(src, pad, TRUE) + +/obj/item/briefcase_launchpad/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/launchpad_remote)) + var/obj/item/device/launchpad_remote/L = I + L.pad = src.pad + to_chat(user, "You link [pad] to [L].") + else + return ..() + +/obj/item/device/launchpad_remote + name = "\improper Launchpad Control Remote" + desc = "Used to teleport objects to and from a portable launchpad." + icon = 'icons/obj/telescience.dmi' + icon_state = "blpad-remote" + w_class = WEIGHT_CLASS_SMALL + slot_flags = SLOT_BELT + origin_tech = "materials=3;magnets=2;bluespace=4;syndicate=3" + var/sending = TRUE + var/obj/machinery/launchpad/briefcase/pad + +/obj/item/device/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "launchpad_remote", "Briefcase Launchpad Remote", 550, 400, master_ui, state) //width, height + ui.set_style("syndicate") + ui.open() + + ui.set_autoupdate(TRUE) + +/obj/item/device/launchpad_remote/ui_data(mob/user) + var/list/data = list() + data["has_pad"] = pad ? TRUE : FALSE + if(pad) + data["pad_closed"] = pad.closed + if(!pad || pad.closed) + return data + + data["pad_name"] = pad.display_name + data["abs_x"] = abs(pad.x_offset) + data["abs_y"] = abs(pad.y_offset) + data["north_south"] = pad.y_offset > 0 ? "N":"S" + data["east_west"] = pad.x_offset > 0 ? "E":"W" + return data + +/obj/item/device/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad) + if(QDELETED(pad)) + to_chat(user, "ERROR: Launchpad not responding. Check launchpad integrity.") + return + if(!pad.isAvailable()) + to_chat(user, "ERROR: Launchpad not operative. Make sure the launchpad is ready and powered.") + return + pad.doteleport(user, sending) + +/obj/item/device/launchpad_remote/ui_act(action, params) + if(..()) + return + switch(action) + if("right") + if(pad.x_offset < pad.range) + pad.x_offset++ + . = TRUE + + if("left") + if(pad.x_offset > (pad.range * -1)) + pad.x_offset-- + . = TRUE + + if("up") + if(pad.y_offset < pad.range) + pad.y_offset++ + . = TRUE + + if("down") + if(pad.y_offset > (pad.range * -1)) + pad.y_offset-- + . = TRUE + + if("up-right") + if(pad.y_offset < pad.range) + pad.y_offset++ + if(pad.x_offset < pad.range) + pad.x_offset++ + . = TRUE + + if("up-left") + if(pad.y_offset < pad.range) + pad.y_offset++ + if(pad.x_offset > (pad.range * -1)) + pad.x_offset-- + . = TRUE + + if("down-right") + if(pad.y_offset > (pad.range * -1)) + pad.y_offset-- + if(pad.x_offset < pad.range) + pad.x_offset++ + . = TRUE + + if("down-left") + if(pad.y_offset > (pad.range * -1)) + pad.y_offset-- + if(pad.x_offset > (pad.range * -1)) + pad.x_offset-- + . = TRUE + + if("reset") + pad.y_offset = 0 + pad.x_offset = 0 + . = TRUE + + if("rename") + . = TRUE + var/new_name = stripped_input(usr, "How do you want to rename the launchpad?", "Launchpad", pad.display_name, 15) as text|null + if(!new_name) + return + pad.display_name = new_name + + if("remove") + . = TRUE + if(usr && alert(usr, "Are you sure?", "Unlink Launchpad", "I'm Sure", "Abort") != "Abort") + pad = null + + if("launch") + sending = TRUE + teleport(usr, pad) + . = TRUE + + if("pull") + sending = FALSE + teleport(usr, pad) + . = TRUE \ No newline at end of file diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6cd8e75798..96b0029134 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -1,8 +1,8 @@ /* Overview: - Used to create objects that need a per step proc call. Default definition of 'New()' + Used to create objects that need a per step proc call. Default definition of 'Initialize()' stores a reference to src machine in global 'machines list'. Default definition - of 'Del' removes reference to src machine in global 'machines list'. + of 'Destroy' removes reference to src machine in global 'machines list'. Class Variables: use_power (num) @@ -44,7 +44,7 @@ Class Variables: EMPED:16 -- temporary broken by EMP pulse Class Procs: - New() 'game/machinery/machine.dm' + Initialize() 'game/machinery/machine.dm' Destroy() 'game/machinery/machine.dm' @@ -118,14 +118,15 @@ Class Procs: var/panel_open = 0 var/state_open = 0 var/critical_machine = FALSE //If this machine is critical to station operation and should have the area be excempted from power failures. - var/mob/living/occupant = null + var/list/occupant_typecache = list(/mob/living) // turned into typecache in Initialize + var/atom/movable/occupant = null var/unsecuring_tool = /obj/item/weapon/wrench var/interact_open = 0 // Can the machine be interacted with when in maint/when the panel is open. var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/speed_process = 0 // Process as fast as possible? /obj/machinery/Initialize() - if (!armor) + if(!armor) armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) . = ..() GLOB.machines += src @@ -135,6 +136,8 @@ Class Procs: START_PROCESSING(SSfastprocess, src) power_change() + occupant_typecache = typecacheof(occupant_typecache) + /obj/machinery/Destroy() GLOB.machines.Remove(src) if(!speed_process) @@ -176,16 +179,24 @@ Class Procs: L.update_canmove() occupant = null -/obj/machinery/proc/close_machine(mob/living/target = null) +/obj/machinery/proc/close_machine(atom/movable/target = null) state_open = 0 density = 1 if(!target) - for(var/mob/living/carbon/C in loc) - if(C.buckled || C.has_buckled_mobs()) + for(var/am in loc) + if(!is_type_in_typecache(am, occupant_typecache)) continue - else - target = C - if(target && !target.buckled && !target.has_buckled_mobs()) + var/atom/movable/AM = am + if(AM.has_buckled_mobs()) + continue + if(isliving(AM)) + var/mob/living/L = am + if(L.buckled) + continue + target = am + + var/mob/living/mobtarget = target + if(target && !target.has_buckled_mobs() && (!isliving(target) || !mobtarget.buckled)) occupant = target target.forceMove(src) updateUsrDialog() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 6735aa7609..2d3765a934 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -251,6 +251,8 @@ GLOBAL_LIST_INIT(pipeID2State, list( var/mob/living/carbon/C = user for(var/i=1 to 20) C.vomit(0,1,0,4,0) + if(prob(20)) + C.spew_organ() sleep(5) C.blood_volume = 0 return(OXYLOSS|BRUTELOSS) diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index b8ba21fd35..6bab77fd6f 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -1,6 +1,9 @@ #define TURRET_STUN 0 #define TURRET_LETHAL 1 +#define POPUP_ANIM_TIME 5 +#define POPDOWN_ANIM_TIME 5 //Be sure to change the icon animation at the same time or it'll look bad + /obj/machinery/porta_turret name = "turret" icon = 'icons/obj/turrets.dmi' @@ -84,6 +87,7 @@ if(has_cover) cover = new /obj/machinery/porta_turret_cover(loc) cover.parent_turret = src + underlays += image('icons/obj/turrets.dmi',icon_state = "basedark") if(!has_cover) INVOKE_ASYNC(src, .proc/popUp) @@ -364,6 +368,10 @@ var/list/targets = list() var/turretview = view(scan_range, base) for(var/A in turretview) + var/atom/AA = A + if(AA.invisibility>SEE_INVISIBLE_LIVING) + continue + if(check_anomalies)//if it's set to check for simple animals if(istype(A, /mob/living/simple_animal)) var/mob/living/simple_animal/SA = A @@ -418,7 +426,7 @@ raising = 1 if(cover) flick("popup", cover) - sleep(10) + sleep(POPUP_ANIM_TIME) raising = 0 if(cover) cover.icon_state = "openTurretCover" @@ -434,7 +442,7 @@ raising = 1 if(cover) flick("popdown", cover) - sleep(10) + sleep(POPDOWN_ANIM_TIME) raising = 0 if(cover) cover.icon_state = "turretCover" diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 57e6ee3f09..fdeb6598e5 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -121,7 +121,7 @@ var/atom/movable/AM = i var/obj/item/bodypart/head/as_head = AM var/obj/item/device/mmi/as_mmi = AM - var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) + var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain) if(isliving(AM) || brain_holder) if(emagged) if(!brain_holder) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 7fc0f98b1c..18d2a1b5bd 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -212,12 +212,12 @@ locked = TRUE update_icon() if(occupant) + var/mob/living/mob_occupant = occupant if(uv_super) - occupant.adjustFireLoss(rand(20, 36)) + mob_occupant.adjustFireLoss(rand(20, 36)) else - occupant.adjustFireLoss(rand(10, 16)) - if(iscarbon(occupant)) - occupant.emote("scream") + mob_occupant.adjustFireLoss(rand(10, 16)) + mob_occupant.emote("scream") addtimer(CALLBACK(src, .proc/cook), 50) else uv_cycles = initial(uv_cycles) @@ -369,13 +369,14 @@ return else if(occupant) - to_chat(occupant, "[src]'s confines grow warm, then hot, then scorching. You're being burned [!occupant.stat ? "alive" : "away"]!") + var/mob/living/mob_occupant = occupant + to_chat(mob_occupant, "[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!") cook() . = TRUE if("dispense") if(!state_open) return - + var/static/list/valid_items = list("helmet", "suit", "mask", "storage") var/item_name = params["item"] if(item_name in valid_items) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 7d02e70671..bd51e1e651 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -56,6 +56,7 @@ var/dish_quants = list() //used by the snack machine's custom compartment to count dishes. var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine. + var/refill_count = 3 //The number of canisters the vending machine uses /obj/machinery/vending/Initialize() ..() @@ -88,7 +89,9 @@ /obj/machinery/vending/cola = "Robust Softdrinks", /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", /obj/machinery/vending/autodrobe = "AutoDrobe", - /obj/machinery/vending/clothing = "ClothesMate") + /obj/machinery/vending/clothing = "ClothesMate", + /obj/machinery/vending/medical = "NanoMed Plus", + /obj/machinery/vending/wallmed = "NanoMed") /obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) @@ -104,7 +107,7 @@ /obj/item/weapon/circuitboard/machine/vendor/proc/set_type(var/obj/machinery/vending/typepath) build_path = typepath name = "[names_paths[build_path]] Vendor (Machine Board)" - req_components = list(initial(typepath.refill_canister) = 3) + req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count)) /obj/item/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) for(var/typepath in names_paths) @@ -113,7 +116,6 @@ break ..() - /obj/machinery/vending/Destroy() qdel(wires) wires = null @@ -307,7 +309,10 @@ if(panel_open) attack_hand(user) return - else if(istype(W, /obj/item/weapon/coin) && premium.len > 0) + else if(istype(W, /obj/item/weapon/coin)) + if(!premium.len) + to_chat(user, "[src] doesn't have a coin slot.") + return if(!user.drop_item()) return W.loc = src @@ -732,8 +737,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "sustenance" products = list(/obj/item/weapon/reagent_containers/food/snacks/tofu = 24, /obj/item/weapon/reagent_containers/food/drinks/ice = 12, - /obj/item/weapon/reagent_containers/food/snacks/candy_corn = 6, - /obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10) + /obj/item/weapon/reagent_containers/food/snacks/candy_corn = 6, + /obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10) contraband = list(/obj/item/weapon/kitchen/knife = 6, /obj/item/weapon/reagent_containers/food/drinks/coffee = 12, /obj/item/weapon/tank/internals/emergency_oxygen = 6, @@ -750,7 +755,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/pwr_game = 10, - /obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,/obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10) + /obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,/obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10) contraband = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko = 6,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/shamblers = 6) premium = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/air = 1) refill_canister = /obj/item/weapon/vending_refill/cola @@ -874,6 +879,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C premium = list(/obj/item/weapon/storage/box/hug/medical = 1,/obj/item/weapon/reagent_containers/hypospray/medipen = 3, /obj/item/weapon/storage/belt/medical = 3, /obj/item/weapon/wrench/medical = 1) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF + refill_canister = /obj/item/weapon/vending_refill/medical //This one's from bay12 /obj/machinery/vending/plasmaresearch @@ -896,6 +902,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2,/obj/item/weapon/reagent_containers/pill/morphine = 2) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF + refill_canister = /obj/item/weapon/vending_refill/medical + refill_count = 1 /obj/machinery/vending/security name = "\improper SecTech" @@ -939,7 +947,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/seeds/tea = 3,/obj/item/seeds/tobacco = 3,/obj/item/seeds/tomato = 3, /obj/item/seeds/tower = 3,/obj/item/seeds/watermelon = 3,/obj/item/seeds/wheat = 3,/obj/item/seeds/whitebeet = 3) contraband = list(/obj/item/seeds/amanita = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/liberty = 2,/obj/item/seeds/nettle = 2, - /obj/item/seeds/plump = 2,/obj/item/seeds/reishi = 2,/obj/item/seeds/cannabis = 3, /obj/item/seeds/random = 2) + /obj/item/seeds/plump = 2,/obj/item/seeds/reishi = 2,/obj/item/seeds/cannabis = 3,/obj/item/seeds/starthistle = 2, + /obj/item/seeds/random = 2) premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF @@ -1120,7 +1129,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/head/beanie=1, /obj/item/clothing/head/beanie/black=1, /obj/item/clothing/head/beanie/red=1, /obj/item/clothing/head/beanie/green=1, /obj/item/clothing/head/beanie/darkblue=1, /obj/item/clothing/head/beanie/purple=1, /obj/item/clothing/head/beanie/yellow=1, /obj/item/clothing/head/beanie/orange=1, /obj/item/clothing/head/beanie/cyan=1, /obj/item/clothing/head/beanie/christmas=1, /obj/item/clothing/head/beanie/striped=1, /obj/item/clothing/head/beanie/stripedred=1, /obj/item/clothing/head/beanie/stripedblue=1, /obj/item/clothing/head/beanie/stripedgreen=1, - /obj/item/clothing/suit/jacket/letterman_red=1) + /obj/item/clothing/suit/jacket/letterman_red=1, /obj/item/clothing/head/hunter=2) contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=2,/obj/item/clothing/suit/jacket/letterman_syndie=1,/obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1) premium = list(/obj/item/clothing/under/suit_jacket/checkered=1,/obj/item/clothing/head/mailman=1,/obj/item/clothing/under/rank/mailman=1,/obj/item/clothing/suit/jacket/leather=1,/obj/item/clothing/suit/jacket/leather/overcoat=1,/obj/item/clothing/under/pants/mustangjeans=1,/obj/item/clothing/neck/necklace/dope=3,/obj/item/clothing/suit/jacket/letterman_nanotrasen=1) refill_canister = /obj/item/weapon/vending_refill/clothing diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 7a9d01bb7f..1d7d9072c9 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -1,435 +1,435 @@ -/obj/item/mecha_parts/mecha_equipment/weapon - name = "mecha weapon" - range = RANGED - origin_tech = "materials=3;combat=3" - var/projectile - var/fire_sound - var/projectiles_per_shot = 1 - var/variance = 0 - var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter - var/projectile_delay = 0 - var/firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect //the visual effect appearing when the weapon is fired. - -/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/combat/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/proc/get_shot_amount() - return projectiles_per_shot - -/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) - if(!action_checks(target)) - return 0 - - var/turf/curloc = get_turf(chassis) - var/turf/targloc = get_turf(target) - if (!targloc || !istype(targloc) || !curloc) - return 0 - if (targloc == curloc) - return 0 - - set_ready_state(0) - for(var/i=1 to get_shot_amount()) - var/obj/item/projectile/A = new projectile(curloc) - A.firer = chassis.occupant - A.original = target - A.current = curloc - if(!A.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), chassis.dir) - - - var/spread = 0 - if(variance) - if(randomspread) - spread = round((rand() - 0.5) * variance) - else - spread = round((i / projectiles_per_shot - 0.5) * variance) - A.preparePixelProjectile(target, targloc, chassis.occupant, params, spread) - - A.fire() - playsound(chassis, fire_sound, 50, 1) - - sleep(max(0, projectile_delay)) - - chassis.log_message("Fired from [src.name], targeting [target].") - return 1 - - -//Base energy weapon type -/obj/item/mecha_parts/mecha_equipment/weapon/energy - name = "general energy weapon" - firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount() - return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot) - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() - set_ready_state(0) - chassis.use_power(energy_drain*get_shot_amount()) - addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown) - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser - equip_cooldown = 8 - name = "\improper CH-PS \"Immolator\" laser" - desc = "A weapon for combat exosuits. Shoots basic lasers." - icon_state = "mecha_laser" - origin_tech = "magnets=3;combat=3;engineering=3" - energy_drain = 30 - projectile = /obj/item/projectile/beam/laser - fire_sound = 'sound/weapons/Laser.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy - equip_cooldown = 15 - name = "\improper CH-LC \"Solaris\" laser cannon" - desc = "A weapon for combat exosuits. Shoots heavy lasers." - icon_state = "mecha_laser" - origin_tech = "magnets=4;combat=4;engineering=3" - energy_drain = 60 - projectile = /obj/item/projectile/beam/laser/heavylaser - fire_sound = 'sound/weapons/lasercannonfire.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - equip_cooldown = 20 - name = "\improper MKIV ion heavy cannon" - desc = "A weapon for combat exosuits. Shoots technology-disabling ion beams. Don't catch yourself in the blast!" - icon_state = "mecha_ion" - origin_tech = "materials=4;combat=5;magnets=4" - energy_drain = 120 - projectile = /obj/item/projectile/ion - fire_sound = 'sound/weapons/Laser.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla - equip_cooldown = 35 - name = "\improper MKI Tesla Cannon" - desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine" - icon_state = "mecha_ion" - origin_tech = "materials=4;engineering=4;combat=6;magnets=6" - energy_drain = 500 - projectile = /obj/item/projectile/energy/tesla_cannon - fire_sound = 'sound/magic/lightningbolt.ogg' - - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse - equip_cooldown = 30 - name = "eZ-13 MK2 heavy pulse rifle" - desc = "A weapon for combat exosuits. Shoots powerful destructive blasts capable of demolishing obstacles." - icon_state = "mecha_pulse" - energy_drain = 120 - origin_tech = "materials=3;combat=6;powerstorage=4" - projectile = /obj/item/projectile/beam/pulse/heavy - fire_sound = 'sound/weapons/marauder.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma - equip_cooldown = 10 - name = "217-D Heavy Plasma Cutter" - desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." - icon_state = "mecha_plasmacutter" - item_state = "plasmacutter" - energy_drain = 30 - origin_tech = "materials=3;plasmatech=4;engineering=3" - projectile = /obj/item/projectile/plasma/adv/mech - fire_sound = 'sound/weapons/plasma_cutter.ogg' - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M) - if(..()) //combat mech - return 1 - else if(M.equipment.len < M.max_equip && istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser - name = "\improper PBT \"Pacifier\" mounted taser" - desc = "A weapon for combat exosuits. Shoots non-lethal stunning electrodes." - icon_state = "mecha_taser" - origin_tech = "combat=3" - energy_drain = 20 - equip_cooldown = 8 - projectile = /obj/item/projectile/energy/electrode - fire_sound = 'sound/weapons/Taser.ogg' - - -/obj/item/mecha_parts/mecha_equipment/weapon/honker - name = "\improper HoNkER BlAsT 5000" - desc = "Equipment for clown exosuits. Spreads fun and joy to everyone around. Honk!" - icon_state = "mecha_honker" - energy_drain = 200 - equip_cooldown = 150 - range = MELEE|RANGED - -/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params) - if(!action_checks(target)) - return - playsound(chassis, 'sound/items/AirHorn.ogg', 100, 1) - chassis.occupant_message("HONK") - for(var/mob/living/carbon/M in ohearers(6, chassis)) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) - continue - to_chat(M, "HONK") - M.SetSleeping(0) - M.stuttering += 20 - M.adjustEarDamage(0, 30) - M.Weaken(3) - if(prob(30)) - M.Stun(10) - M.Paralyse(4) - else - M.Jitter(500) - - log_message("Honked from [src.name]. HONK!") - var/turf/T = get_turf(src) - message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Mecha Honker in [ADMIN_COORDJMP(T)]",0,1) - log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Mecha Honker in [COORD(T)]") - return 1 - - -//Base ballistic weapon type -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic - name = "general ballisic weapon" - fire_sound = 'sound/weapons/Gunshot.ogg' - var/projectiles - var/projectile_energy_cost - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_shot_amount() - return min(projectiles, projectiles_per_shot) - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(target) - if(!..()) - return 0 - if(projectiles <= 0) - return 0 - return 1 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() - return "[..()] \[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/rearm() - if(projectiles < initial(projectiles)) - var/projectiles_to_add = initial(projectiles) - projectiles - while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add) - projectiles++ - projectiles_to_add-- - chassis.use_power(projectile_energy_cost) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - log_message("Rearmed [src.name].") - return 1 - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/needs_rearm() - . = !(projectiles > 0) - - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/Topic(href, href_list) - ..() - if (href_list["rearm"]) - src.rearm() - return - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) - if(..()) - projectiles -= get_shot_amount() - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return 1 - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - name = "\improper FNX-99 \"Hades\" Carbine" - desc = "A weapon for combat exosuits. Shoots incendiary bullets." - icon_state = "mecha_carbine" - origin_tech = "materials=4;combat=4" - equip_cooldown = 10 - projectile = /obj/item/projectile/bullet/incendiary/shell - projectiles = 24 - projectile_energy_cost = 15 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced - name = "\improper S.H.H. \"Quietus\" Carbine" - desc = "A weapon for combat exosuits. A mime invention, field tests have shown that targets cannot even scream before going down." - fire_sound = 'sound/weapons/Gunshot_silenced.ogg' - icon_state = "mecha_mime" - equip_cooldown = 30 - projectile = /obj/item/projectile/bullet/mime - projectiles = 6 - projectile_energy_cost = 50 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - name = "\improper LBX AC 10 \"Scattershot\"" - desc = "A weapon for combat exosuits. Shoots a spread of pellets." - icon_state = "mecha_scatter" - origin_tech = "combat=4" - equip_cooldown = 20 - projectile = /obj/item/projectile/bullet/midbullet - projectiles = 40 - projectile_energy_cost = 25 - projectiles_per_shot = 4 - variance = 25 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - name = "\improper Ultra AC 2" - desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." - icon_state = "mecha_uac2" - origin_tech = "combat=4" - equip_cooldown = 10 - projectile = /obj/item/projectile/bullet/weakbullet3 - projectiles = 300 - projectile_energy_cost = 20 - projectiles_per_shot = 3 - variance = 6 - randomspread = 1 - projectile_delay = 2 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack - name = "\improper SRM-8 missile rack" - desc = "A weapon for combat exosuits. Shoots light explosive missiles." - icon_state = "mecha_missilerack" - origin_tech = "combat=5;materials=4;engineering=4" - projectile = /obj/item/projectile/bullet/srmrocket - fire_sound = 'sound/weapons/grenadelaunch.ogg' - projectiles = 8 - projectile_energy_cost = 1000 - equip_cooldown = 60 - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher - var/missile_speed = 2 - var/missile_range = 30 - var/diags_first = FALSE - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) - if(!action_checks(target)) - return - var/obj/O = new projectile(chassis.loc) - playsound(chassis, fire_sound, 50, 1) - log_message("Launched a [O.name] from [name], targeting [target].") - projectiles-- - proj_init(O) - O.throw_at(target, missile_range, missile_speed, spin = 0, diagonals_first = diags_first) - return 1 - -//used for projectile initilisation (priming flashbang) and additional logging -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(var/obj/O) - return - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang - name = "\improper SGL-6 grenade launcher" - desc = "A weapon for combat exosuits. Launches primed flashbangs." - icon_state = "mecha_grenadelnchr" - origin_tech = "combat=4;engineering=4" - projectile = /obj/item/weapon/grenade/flashbang - fire_sound = 'sound/weapons/grenadelaunch.ogg' - projectiles = 6 - missile_speed = 1.5 - projectile_energy_cost = 800 - equip_cooldown = 60 - var/det_time = 20 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(var/obj/item/weapon/grenade/flashbang/F) - var/turf/T = get_turf(src) - message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) - log_game("[key_name(chassis.occupant)] fired a [src] ([T.x],[T.y],[T.z])") - addtimer(CALLBACK(F, /obj/item/weapon/grenade/flashbang.proc/prime), det_time) - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze - name = "\improper SOB-3 grenade launcher" - desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." - origin_tech = "combat=4;materials=4" - projectiles = 3 - projectile = /obj/item/weapon/grenade/clusterbuster - projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. - equip_cooldown = 90 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar - name = "banana mortar" - desc = "Equipment for clown exosuits. Launches banana peels." - icon_state = "mecha_bananamrtr" - projectile = /obj/item/weapon/grown/bananapeel - fire_sound = 'sound/items/bikehorn.ogg' - projectiles = 15 - missile_speed = 1.5 - projectile_energy_cost = 100 - equip_cooldown = 20 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar - name = "mousetrap mortar" - desc = "Equipment for clown exosuits. Launches armed mousetraps." - icon_state = "mecha_mousetrapmrtr" - projectile = /obj/item/device/assembly/mousetrap/armed - fire_sound = 'sound/items/bikehorn.ogg' - projectiles = 15 - missile_speed = 1.5 - projectile_energy_cost = 100 - equip_cooldown = 10 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/device/assembly/mousetrap/armed/M) - M.secured = 1 - - -//Classic extending punching glove, but weaponised! -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove - name = "\improper Oingo Boingo Punch-face" - desc = "Equipment for clown exosuits. Delivers fun right to your face!" - icon_state = "mecha_punching_glove" - energy_drain = 250 - equip_cooldown = 20 - range = MELEE|RANGED - missile_range = 5 - projectile = /obj/item/punching_glove - fire_sound = 'sound/items/bikehorn.ogg' - projectiles = 10 - projectile_energy_cost = 500 - diags_first = TRUE - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/mecha/combat/honker/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(target) - . = ..() - if(.) - chassis.occupant_message("HONK") - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/proj_init(obj/item/punching_glove/PG) - if(!istype(PG)) - return - //has to be low sleep or it looks weird, the beam doesn't exist for very long so it's a non-issue - chassis.Beam(PG, icon_state = "chain", time = missile_range * 20, maxdistance = missile_range + 2, beam_sleep_time = 1) - -/obj/item/punching_glove - name = "punching glove" - desc = "INCOMING HONKS" - throwforce = 35 - icon_state = "punching_glove" - -/obj/item/punching_glove/throw_impact(atom/hit_atom) - if(!..()) - if(istype(hit_atom, /atom/movable)) - var/atom/movable/AM = hit_atom - AM.throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2) - qdel(src) - +/obj/item/mecha_parts/mecha_equipment/weapon + name = "mecha weapon" + range = RANGED + origin_tech = "materials=3;combat=3" + var/projectile + var/fire_sound + var/projectiles_per_shot = 1 + var/variance = 0 + var/randomspread = 0 //use random spread for machineguns, instead of shotgun scatter + var/projectile_delay = 0 + var/firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect //the visual effect appearing when the weapon is fired. + +/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/combat/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/proc/get_shot_amount() + return projectiles_per_shot + +/obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target, params) + if(!action_checks(target)) + return 0 + + var/turf/curloc = get_turf(chassis) + var/turf/targloc = get_turf(target) + if (!targloc || !istype(targloc) || !curloc) + return 0 + if (targloc == curloc) + return 0 + + set_ready_state(0) + for(var/i=1 to get_shot_amount()) + var/obj/item/projectile/A = new projectile(curloc) + A.firer = chassis.occupant + A.original = target + A.current = curloc + if(!A.suppressed && firing_effect_type) + new firing_effect_type(get_turf(src), chassis.dir) + + + var/spread = 0 + if(variance) + if(randomspread) + spread = round((rand() - 0.5) * variance) + else + spread = round((i / projectiles_per_shot - 0.5) * variance) + A.preparePixelProjectile(target, targloc, chassis.occupant, params, spread) + + A.fire() + playsound(chassis, fire_sound, 50, 1) + + sleep(max(0, projectile_delay)) + + chassis.log_message("Fired from [src.name], targeting [target].") + return 1 + + +//Base energy weapon type +/obj/item/mecha_parts/mecha_equipment/weapon/energy + name = "general energy weapon" + firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount() + return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() + set_ready_state(0) + chassis.use_power(energy_drain*get_shot_amount()) + addtimer(CALLBACK(src, .proc/set_ready_state, 1), equip_cooldown) + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser + equip_cooldown = 8 + name = "\improper CH-PS \"Immolator\" laser" + desc = "A weapon for combat exosuits. Shoots basic lasers." + icon_state = "mecha_laser" + origin_tech = "magnets=3;combat=3;engineering=3" + energy_drain = 30 + projectile = /obj/item/projectile/beam/laser + fire_sound = 'sound/weapons/Laser.ogg' + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy + equip_cooldown = 15 + name = "\improper CH-LC \"Solaris\" laser cannon" + desc = "A weapon for combat exosuits. Shoots heavy lasers." + icon_state = "mecha_laser" + origin_tech = "magnets=4;combat=4;engineering=3" + energy_drain = 60 + projectile = /obj/item/projectile/beam/laser/heavylaser + fire_sound = 'sound/weapons/lasercannonfire.ogg' + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion + equip_cooldown = 20 + name = "\improper MKIV ion heavy cannon" + desc = "A weapon for combat exosuits. Shoots technology-disabling ion beams. Don't catch yourself in the blast!" + icon_state = "mecha_ion" + origin_tech = "materials=4;combat=5;magnets=4" + energy_drain = 120 + projectile = /obj/item/projectile/ion + fire_sound = 'sound/weapons/Laser.ogg' + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla + equip_cooldown = 35 + name = "\improper MKI Tesla Cannon" + desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine" + icon_state = "mecha_ion" + origin_tech = "materials=4;engineering=4;combat=6;magnets=6" + energy_drain = 500 + projectile = /obj/item/projectile/energy/tesla/cannon + fire_sound = 'sound/magic/lightningbolt.ogg' + + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse + equip_cooldown = 30 + name = "eZ-13 MK2 heavy pulse rifle" + desc = "A weapon for combat exosuits. Shoots powerful destructive blasts capable of demolishing obstacles." + icon_state = "mecha_pulse" + energy_drain = 120 + origin_tech = "materials=3;combat=6;powerstorage=4" + projectile = /obj/item/projectile/beam/pulse/heavy + fire_sound = 'sound/weapons/marauder.ogg' + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma + equip_cooldown = 10 + name = "217-D Heavy Plasma Cutter" + desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." + icon_state = "mecha_plasmacutter" + item_state = "plasmacutter" + energy_drain = 30 + origin_tech = "materials=3;plasmatech=4;engineering=3" + projectile = /obj/item/projectile/plasma/adv/mech + fire_sound = 'sound/weapons/plasma_cutter.ogg' + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M) + if(..()) //combat mech + return 1 + else if(M.equipment.len < M.max_equip && istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser + name = "\improper PBT \"Pacifier\" mounted taser" + desc = "A weapon for combat exosuits. Shoots non-lethal stunning electrodes." + icon_state = "mecha_taser" + origin_tech = "combat=3" + energy_drain = 20 + equip_cooldown = 8 + projectile = /obj/item/projectile/energy/electrode + fire_sound = 'sound/weapons/Taser.ogg' + + +/obj/item/mecha_parts/mecha_equipment/weapon/honker + name = "\improper HoNkER BlAsT 5000" + desc = "Equipment for clown exosuits. Spreads fun and joy to everyone around. Honk!" + icon_state = "mecha_honker" + energy_drain = 200 + equip_cooldown = 150 + range = MELEE|RANGED + +/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target, params) + if(!action_checks(target)) + return + playsound(chassis, 'sound/items/AirHorn.ogg', 100, 1) + chassis.occupant_message("HONK") + for(var/mob/living/carbon/M in ohearers(6, chassis)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) + continue + to_chat(M, "HONK") + M.SetSleeping(0) + M.stuttering += 20 + M.adjustEarDamage(0, 30) + M.Weaken(3) + if(prob(30)) + M.Stun(10) + M.Paralyse(4) + else + M.Jitter(500) + + log_message("Honked from [src.name]. HONK!") + var/turf/T = get_turf(src) + message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] used a Mecha Honker in [ADMIN_COORDJMP(T)]",0,1) + log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Mecha Honker in [COORD(T)]") + return 1 + + +//Base ballistic weapon type +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic + name = "general ballisic weapon" + fire_sound = 'sound/weapons/Gunshot.ogg' + var/projectiles + var/projectile_energy_cost + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_shot_amount() + return min(projectiles, projectiles_per_shot) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(target) + if(!..()) + return 0 + if(projectiles <= 0) + return 0 + return 1 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() + return "[..()] \[[src.projectiles]\][(src.projectiles < initial(src.projectiles))?" - Rearm":null]" + + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/rearm() + if(projectiles < initial(projectiles)) + var/projectiles_to_add = initial(projectiles) - projectiles + while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add) + projectiles++ + projectiles_to_add-- + chassis.use_power(projectile_energy_cost) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + log_message("Rearmed [src.name].") + return 1 + + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/needs_rearm() + . = !(projectiles > 0) + + + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/Topic(href, href_list) + ..() + if (href_list["rearm"]) + src.rearm() + return + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) + if(..()) + projectiles -= get_shot_amount() + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return 1 + + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine + name = "\improper FNX-99 \"Hades\" Carbine" + desc = "A weapon for combat exosuits. Shoots incendiary bullets." + icon_state = "mecha_carbine" + origin_tech = "materials=4;combat=4" + equip_cooldown = 10 + projectile = /obj/item/projectile/bullet/incendiary/shell + projectiles = 24 + projectile_energy_cost = 15 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced + name = "\improper S.H.H. \"Quietus\" Carbine" + desc = "A weapon for combat exosuits. A mime invention, field tests have shown that targets cannot even scream before going down." + fire_sound = 'sound/weapons/Gunshot_silenced.ogg' + icon_state = "mecha_mime" + equip_cooldown = 30 + projectile = /obj/item/projectile/bullet/mime + projectiles = 6 + projectile_energy_cost = 50 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot + name = "\improper LBX AC 10 \"Scattershot\"" + desc = "A weapon for combat exosuits. Shoots a spread of pellets." + icon_state = "mecha_scatter" + origin_tech = "combat=4" + equip_cooldown = 20 + projectile = /obj/item/projectile/bullet/midbullet + projectiles = 40 + projectile_energy_cost = 25 + projectiles_per_shot = 4 + variance = 25 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg + name = "\improper Ultra AC 2" + desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." + icon_state = "mecha_uac2" + origin_tech = "combat=4" + equip_cooldown = 10 + projectile = /obj/item/projectile/bullet/weakbullet3 + projectiles = 300 + projectile_energy_cost = 20 + projectiles_per_shot = 3 + variance = 6 + randomspread = 1 + projectile_delay = 2 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + name = "\improper SRM-8 missile rack" + desc = "A weapon for combat exosuits. Shoots light explosive missiles." + icon_state = "mecha_missilerack" + origin_tech = "combat=5;materials=4;engineering=4" + projectile = /obj/item/projectile/bullet/srmrocket + fire_sound = 'sound/weapons/grenadelaunch.ogg' + projectiles = 8 + projectile_energy_cost = 1000 + equip_cooldown = 60 + + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher + var/missile_speed = 2 + var/missile_range = 30 + var/diags_first = FALSE + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) + if(!action_checks(target)) + return + var/obj/O = new projectile(chassis.loc) + playsound(chassis, fire_sound, 50, 1) + log_message("Launched a [O.name] from [name], targeting [target].") + projectiles-- + proj_init(O) + O.throw_at(target, missile_range, missile_speed, spin = 0, diagonals_first = diags_first) + return 1 + +//used for projectile initilisation (priming flashbang) and additional logging +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(var/obj/O) + return + + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang + name = "\improper SGL-6 grenade launcher" + desc = "A weapon for combat exosuits. Launches primed flashbangs." + icon_state = "mecha_grenadelnchr" + origin_tech = "combat=4;engineering=4" + projectile = /obj/item/weapon/grenade/flashbang + fire_sound = 'sound/weapons/grenadelaunch.ogg' + projectiles = 6 + missile_speed = 1.5 + projectile_energy_cost = 800 + equip_cooldown = 60 + var/det_time = 20 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(var/obj/item/weapon/grenade/flashbang/F) + var/turf/T = get_turf(src) + message_admins("[ADMIN_LOOKUPFLW(chassis.occupant)] fired a [src] in [ADMIN_COORDJMP(T)]",0,1) + log_game("[key_name(chassis.occupant)] fired a [src] [COORD(T)]") + addtimer(CALLBACK(F, /obj/item/weapon/grenade/flashbang.proc/prime), det_time) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze + name = "\improper SOB-3 grenade launcher" + desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." + origin_tech = "combat=4;materials=4" + projectiles = 3 + projectile = /obj/item/weapon/grenade/clusterbuster + projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. + equip_cooldown = 90 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar + name = "banana mortar" + desc = "Equipment for clown exosuits. Launches banana peels." + icon_state = "mecha_bananamrtr" + projectile = /obj/item/weapon/grown/bananapeel + fire_sound = 'sound/items/bikehorn.ogg' + projectiles = 15 + missile_speed = 1.5 + projectile_energy_cost = 100 + equip_cooldown = 20 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar + name = "mousetrap mortar" + desc = "Equipment for clown exosuits. Launches armed mousetraps." + icon_state = "mecha_mousetrapmrtr" + projectile = /obj/item/device/assembly/mousetrap/armed + fire_sound = 'sound/items/bikehorn.ogg' + projectiles = 15 + missile_speed = 1.5 + projectile_energy_cost = 100 + equip_cooldown = 10 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/device/assembly/mousetrap/armed/M) + M.secured = 1 + + +//Classic extending punching glove, but weaponised! +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove + name = "\improper Oingo Boingo Punch-face" + desc = "Equipment for clown exosuits. Delivers fun right to your face!" + icon_state = "mecha_punching_glove" + energy_drain = 250 + equip_cooldown = 20 + range = MELEE|RANGED + missile_range = 5 + projectile = /obj/item/punching_glove + fire_sound = 'sound/items/bikehorn.ogg' + projectiles = 10 + projectile_energy_cost = 500 + diags_first = TRUE + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/can_attach(obj/mecha/combat/honker/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/action(target) + . = ..() + if(.) + chassis.occupant_message("HONK") + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove/proj_init(obj/item/punching_glove/PG) + if(!istype(PG)) + return + //has to be low sleep or it looks weird, the beam doesn't exist for very long so it's a non-issue + chassis.Beam(PG, icon_state = "chain", time = missile_range * 20, maxdistance = missile_range + 2, beam_sleep_time = 1) + +/obj/item/punching_glove + name = "punching glove" + desc = "INCOMING HONKS" + throwforce = 35 + icon_state = "punching_glove" + +/obj/item/punching_glove/throw_impact(atom/hit_atom) + if(!..()) + if(istype(hit_atom, /atom/movable)) + var/atom/movable/AM = hit_atom + AM.throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2) + qdel(src) + diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 7727b4d9e9..a39c4fbe93 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -129,7 +129,7 @@ name = "footprints" icon = 'icons/effects/footprints.dmi' icon_state = "nothingwhatsoever" - desc = "where might they lead?" + desc = "WHOSE FOOTPRINTS ARE THESE?" random_icon_states = null var/entered_dirs = 0 var/exited_dirs = 0 diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index a34e30e689..9324c6edb7 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -74,7 +74,7 @@ /obj/effect/particle_effect/smoke/proc/spread_smoke() var/turf/t_loc = get_turf(src) if(!t_loc) - return + return var/list/newsmokes = list() for(var/turf/T in t_loc.GetAtmosAdjacentTurfs()) var/obj/effect/particle_effect/smoke/foundsmoke = locate() in T //Don't spread smoke where there's already smoke! diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 4194d9b76e..5ce88f1c27 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -1,333 +1,333 @@ -/obj/effect/landmark - name = "landmark" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - anchored = 1 - invisibility = INVISIBILITY_ABSTRACT - -/obj/effect/landmark/New() - ..() - tag = text("landmark*[]", name) - GLOB.landmarks_list += src - -/obj/effect/landmark/Destroy() - GLOB.landmarks_list -= src - return ..() - -/obj/effect/landmark/start - name = "start" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x" - anchored = 1 - -/obj/effect/landmark/start/New() - GLOB.start_landmarks_list += src - ..() - if(name != "start") - tag = "start*[name]" - -/obj/effect/landmark/start/Destroy() - GLOB.start_landmarks_list -= src - return ..() - -// START LANDMARKS FOLLOW. Don't change the names unless -// you are refactoring shitty landmark code. - -/obj/effect/landmark/start/assistant - name = "Assistant" - -/obj/effect/landmark/start/janitor - name = "Janitor" - -/obj/effect/landmark/start/cargo_technician - name = "Cargo Technician" - -/obj/effect/landmark/start/bartender - name = "Bartender" - -/obj/effect/landmark/start/clown - name = "Clown" - -/obj/effect/landmark/start/mime - name = "Mime" - -/obj/effect/landmark/start/quartermaster - name = "Quartermaster" - -/obj/effect/landmark/start/atmospheric_technician - name = "Atmospheric Technician" - -/obj/effect/landmark/start/cook - name = "Cook" - -/obj/effect/landmark/start/shaft_miner - name = "Shaft Miner" - -/obj/effect/landmark/start/security_officer - name = "Security Officer" - -/obj/effect/landmark/start/botanist - name = "Botanist" - -/obj/effect/landmark/start/head_of_security - name = "Head of Security" - -/obj/effect/landmark/start/ai - name = "AI" - -/obj/effect/landmark/start/captain - name = "Captain" - -/obj/effect/landmark/start/detective - name = "Detective" - -/obj/effect/landmark/start/warden - name = "Warden" - -/obj/effect/landmark/start/chief_engineer - name = "Chief Engineer" - -/obj/effect/landmark/start/cyborg - name = "Cyborg" - -/obj/effect/landmark/start/head_of_personnel - name = "Head of Personnel" - -/obj/effect/landmark/start/librarian - name = "Librarian" - -/obj/effect/landmark/start/lawyer - name = "Lawyer" - -/obj/effect/landmark/start/station_engineer - name = "Station Engineer" - -/obj/effect/landmark/start/medical_doctor - name = "Medical Doctor" - -/obj/effect/landmark/start/scientist - name = "Scientist" - -/obj/effect/landmark/start/chemist - name = "Chemist" - -/obj/effect/landmark/start/roboticist - name = "Roboticist" - -/obj/effect/landmark/start/research_director - name = "Research Director" - -/obj/effect/landmark/start/geneticist - name = "Geneticist" - -/obj/effect/landmark/start/chief_medical_officer - name = "Chief Medical Officer" - -/obj/effect/landmark/start/virologist - name = "Virologist" - -/obj/effect/landmark/start/chaplain - name = "Chaplain" - -//Department Security spawns - -/obj/effect/landmark/start/depsec - name = "department_sec" - -/obj/effect/landmark/start/depsec/New() - ..() - GLOB.department_security_spawns += src - -/obj/effect/landmark/start/depsec/Destroy() - GLOB.department_security_spawns -= src - return ..() - -/obj/effect/landmark/start/depsec/supply - name = "supply_sec" - -/obj/effect/landmark/start/depsec/medical - name = "medical_sec" - -/obj/effect/landmark/start/depsec/engineering - name = "engineering_sec" - -/obj/effect/landmark/start/depsec/science - name = "science_sec" - -/obj/effect/landmark/start/wizard - name = "wizard" - -/obj/effect/landmark/start/wizard/Initialize(mapload) - ..() - GLOB.wizardstart += loc - qdel(src) - -/obj/effect/landmark/start/new_player - name = "New Player" - -// Must be on New() rather than Initialize, because players will -// join before SSatom initializes everything. -/obj/effect/landmark/start/new_player/New(loc) - ..() - GLOB.newplayer_start += loc - -/obj/effect/landmark/start/new_player/Initialize(mapload) - ..() - qdel(src) - - - -/obj/effect/landmark/latejoin - name = "JoinLate" - -/obj/effect/landmark/latejoin/Initialize(mapload) - ..() - GLOB.latejoin += loc - qdel(src) - -// carp. -/obj/effect/landmark/carpspawn - name = "carpspawn" - -// lightsout. -/obj/effect/landmark/lightsout - name = "lightsout" - -// observer-start. -/obj/effect/landmark/observer_start - name = "Observer-Start" - -// revenant spawn. -/obj/effect/landmark/revenantspawn - name = "revnantspawn" - -// triple ais. -/obj/effect/landmark/tripai - name = "tripai" - -// marauder entry (XXX WTF IS MAURADER ENTRY???) - -/obj/effect/landmark/marauder_entry - name = "Marauder Entry" - -// syndicate breach area (XXX I DON'T KNOW WHAT THIS IS EITHER) - -/obj/effect/landmark/syndicate_breach_area - name = "Syndicate Breach Area" - -// teleport scroll landmark, XXX DOES THIS DO ANYTHING? -/obj/effect/landmark/teleport_scroll - name = "Teleport-Scroll" - -/obj/effect/landmark/syndicate_spawn - name = "Syndicate-Spawn" - -// xenos. -/obj/effect/landmark/xeno_spawn - name = "xeno_spawn" - -/obj/effect/landmark/xeno_spawn/Initialize(mapload) - ..() - GLOB.xeno_spawn += loc - qdel(src) - -// blobs. -/obj/effect/landmark/blobstart - name = "blobstart" - -/obj/effect/landmark/blobstart/Initialize(mapload) - ..() - GLOB.blobstart += loc - qdel(src) - -/obj/effect/landmark/secequipment - name = "secequipment" - -/obj/effect/landmark/secequipment/Initialize(mapload) - ..() - GLOB.secequipment += loc - qdel(src) - -/obj/effect/landmark/prisonwarp - name = "prisonwarp" - -/obj/effect/landmark/prisonwarp/Initialize(mapload) - ..() - GLOB.prisonwarp += loc - qdel(src) - -/obj/effect/landmark/ert_spawn - name = "Emergencyresponseteam" - -/obj/effect/landmark/ert_spawn/Initialize(mapload) - ..() - GLOB.emergencyresponseteamspawn += loc - qdel(src) - -/obj/effect/landmark/holding_facility - name = "Holding Facility" - -/obj/effect/landmark/holding_facility/Initialize(mapload) - ..() - GLOB.holdingfacility += loc - qdel(src) - -/obj/effect/landmark/thunderdome/observe - name = "tdomeobserve" - -/obj/effect/landmark/thunderdome/observe/Initialize(mapload) - ..() - GLOB.tdomeobserve += loc - qdel(src) - -/obj/effect/landmark/thunderdome/one - name = "tdome1" - -/obj/effect/landmark/thunderdome/one/Initialize(mapload) - ..() - GLOB.tdome1 += loc - qdel(src) - -/obj/effect/landmark/thunderdome/two - name = "tdome2" - -/obj/effect/landmark/thunderdome/two/Initialize(mapload) - ..() - GLOB.tdome2 += loc - qdel(src) - -/obj/effect/landmark/thunderdome/admin - name = "tdomeadmin" - -/obj/effect/landmark/thunderdome/admin/Initialize(mapload) - ..() - GLOB.tdomeadmin += loc - qdel(src) - -//generic event spawns -/obj/effect/landmark/event_spawn - name = "generic event spawn" - icon_state = "x4" - - -/obj/effect/landmark/event_spawn/New() - ..() - GLOB.generic_event_spawns += src - -/obj/effect/landmark/event_spawn/Destroy() - GLOB.generic_event_spawns -= src - return ..() - -/obj/effect/landmark/ruin - var/datum/map_template/ruin/ruin_template - -/obj/effect/landmark/ruin/New(loc, my_ruin_template) - name = "ruin_[GLOB.ruin_landmarks.len + 1]" - ..(loc) - ruin_template = my_ruin_template - GLOB.ruin_landmarks |= src - -/obj/effect/landmark/ruin/Destroy() - GLOB.ruin_landmarks -= src - ruin_template = null - . = ..() +/obj/effect/landmark + name = "landmark" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + anchored = 1 + invisibility = INVISIBILITY_ABSTRACT + +/obj/effect/landmark/New() + ..() + tag = text("landmark*[]", name) + GLOB.landmarks_list += src + +/obj/effect/landmark/Destroy() + GLOB.landmarks_list -= src + return ..() + +/obj/effect/landmark/start + name = "start" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x" + anchored = 1 + +/obj/effect/landmark/start/New() + GLOB.start_landmarks_list += src + ..() + if(name != "start") + tag = "start*[name]" + +/obj/effect/landmark/start/Destroy() + GLOB.start_landmarks_list -= src + return ..() + +// START LANDMARKS FOLLOW. Don't change the names unless +// you are refactoring shitty landmark code. + +/obj/effect/landmark/start/assistant + name = "Assistant" + +/obj/effect/landmark/start/janitor + name = "Janitor" + +/obj/effect/landmark/start/cargo_technician + name = "Cargo Technician" + +/obj/effect/landmark/start/bartender + name = "Bartender" + +/obj/effect/landmark/start/clown + name = "Clown" + +/obj/effect/landmark/start/mime + name = "Mime" + +/obj/effect/landmark/start/quartermaster + name = "Quartermaster" + +/obj/effect/landmark/start/atmospheric_technician + name = "Atmospheric Technician" + +/obj/effect/landmark/start/cook + name = "Cook" + +/obj/effect/landmark/start/shaft_miner + name = "Shaft Miner" + +/obj/effect/landmark/start/security_officer + name = "Security Officer" + +/obj/effect/landmark/start/botanist + name = "Botanist" + +/obj/effect/landmark/start/head_of_security + name = "Head of Security" + +/obj/effect/landmark/start/ai + name = "AI" + +/obj/effect/landmark/start/captain + name = "Captain" + +/obj/effect/landmark/start/detective + name = "Detective" + +/obj/effect/landmark/start/warden + name = "Warden" + +/obj/effect/landmark/start/chief_engineer + name = "Chief Engineer" + +/obj/effect/landmark/start/cyborg + name = "Cyborg" + +/obj/effect/landmark/start/head_of_personnel + name = "Head of Personnel" + +/obj/effect/landmark/start/librarian + name = "Curator" + +/obj/effect/landmark/start/lawyer + name = "Lawyer" + +/obj/effect/landmark/start/station_engineer + name = "Station Engineer" + +/obj/effect/landmark/start/medical_doctor + name = "Medical Doctor" + +/obj/effect/landmark/start/scientist + name = "Scientist" + +/obj/effect/landmark/start/chemist + name = "Chemist" + +/obj/effect/landmark/start/roboticist + name = "Roboticist" + +/obj/effect/landmark/start/research_director + name = "Research Director" + +/obj/effect/landmark/start/geneticist + name = "Geneticist" + +/obj/effect/landmark/start/chief_medical_officer + name = "Chief Medical Officer" + +/obj/effect/landmark/start/virologist + name = "Virologist" + +/obj/effect/landmark/start/chaplain + name = "Chaplain" + +//Department Security spawns + +/obj/effect/landmark/start/depsec + name = "department_sec" + +/obj/effect/landmark/start/depsec/New() + ..() + GLOB.department_security_spawns += src + +/obj/effect/landmark/start/depsec/Destroy() + GLOB.department_security_spawns -= src + return ..() + +/obj/effect/landmark/start/depsec/supply + name = "supply_sec" + +/obj/effect/landmark/start/depsec/medical + name = "medical_sec" + +/obj/effect/landmark/start/depsec/engineering + name = "engineering_sec" + +/obj/effect/landmark/start/depsec/science + name = "science_sec" + +/obj/effect/landmark/start/wizard + name = "wizard" + +/obj/effect/landmark/start/wizard/Initialize(mapload) + ..() + GLOB.wizardstart += loc + qdel(src) + +/obj/effect/landmark/start/new_player + name = "New Player" + +// Must be on New() rather than Initialize, because players will +// join before SSatom initializes everything. +/obj/effect/landmark/start/new_player/New(loc) + ..() + GLOB.newplayer_start += loc + +/obj/effect/landmark/start/new_player/Initialize(mapload) + ..() + qdel(src) + + + +/obj/effect/landmark/latejoin + name = "JoinLate" + +/obj/effect/landmark/latejoin/Initialize(mapload) + ..() + GLOB.latejoin += loc + qdel(src) + +// carp. +/obj/effect/landmark/carpspawn + name = "carpspawn" + +// lightsout. +/obj/effect/landmark/lightsout + name = "lightsout" + +// observer-start. +/obj/effect/landmark/observer_start + name = "Observer-Start" + +// revenant spawn. +/obj/effect/landmark/revenantspawn + name = "revnantspawn" + +// triple ais. +/obj/effect/landmark/tripai + name = "tripai" + +// marauder entry (XXX WTF IS MAURADER ENTRY???) + +/obj/effect/landmark/marauder_entry + name = "Marauder Entry" + +// syndicate breach area (XXX I DON'T KNOW WHAT THIS IS EITHER) + +/obj/effect/landmark/syndicate_breach_area + name = "Syndicate Breach Area" + +// teleport scroll landmark, XXX DOES THIS DO ANYTHING? +/obj/effect/landmark/teleport_scroll + name = "Teleport-Scroll" + +/obj/effect/landmark/syndicate_spawn + name = "Syndicate-Spawn" + +// xenos. +/obj/effect/landmark/xeno_spawn + name = "xeno_spawn" + +/obj/effect/landmark/xeno_spawn/Initialize(mapload) + ..() + GLOB.xeno_spawn += loc + qdel(src) + +// blobs. +/obj/effect/landmark/blobstart + name = "blobstart" + +/obj/effect/landmark/blobstart/Initialize(mapload) + ..() + GLOB.blobstart += loc + qdel(src) + +/obj/effect/landmark/secequipment + name = "secequipment" + +/obj/effect/landmark/secequipment/Initialize(mapload) + ..() + GLOB.secequipment += loc + qdel(src) + +/obj/effect/landmark/prisonwarp + name = "prisonwarp" + +/obj/effect/landmark/prisonwarp/Initialize(mapload) + ..() + GLOB.prisonwarp += loc + qdel(src) + +/obj/effect/landmark/ert_spawn + name = "Emergencyresponseteam" + +/obj/effect/landmark/ert_spawn/Initialize(mapload) + ..() + GLOB.emergencyresponseteamspawn += loc + qdel(src) + +/obj/effect/landmark/holding_facility + name = "Holding Facility" + +/obj/effect/landmark/holding_facility/Initialize(mapload) + ..() + GLOB.holdingfacility += loc + qdel(src) + +/obj/effect/landmark/thunderdome/observe + name = "tdomeobserve" + +/obj/effect/landmark/thunderdome/observe/Initialize(mapload) + ..() + GLOB.tdomeobserve += loc + qdel(src) + +/obj/effect/landmark/thunderdome/one + name = "tdome1" + +/obj/effect/landmark/thunderdome/one/Initialize(mapload) + ..() + GLOB.tdome1 += loc + qdel(src) + +/obj/effect/landmark/thunderdome/two + name = "tdome2" + +/obj/effect/landmark/thunderdome/two/Initialize(mapload) + ..() + GLOB.tdome2 += loc + qdel(src) + +/obj/effect/landmark/thunderdome/admin + name = "tdomeadmin" + +/obj/effect/landmark/thunderdome/admin/Initialize(mapload) + ..() + GLOB.tdomeadmin += loc + qdel(src) + +//generic event spawns +/obj/effect/landmark/event_spawn + name = "generic event spawn" + icon_state = "x4" + + +/obj/effect/landmark/event_spawn/New() + ..() + GLOB.generic_event_spawns += src + +/obj/effect/landmark/event_spawn/Destroy() + GLOB.generic_event_spawns -= src + return ..() + +/obj/effect/landmark/ruin + var/datum/map_template/ruin/ruin_template + +/obj/effect/landmark/ruin/New(loc, my_ruin_template) + name = "ruin_[GLOB.ruin_landmarks.len + 1]" + ..(loc) + ruin_template = my_ruin_template + GLOB.ruin_landmarks |= src + +/obj/effect/landmark/ruin/Destroy() + GLOB.ruin_landmarks -= src + ruin_template = null + . = ..() diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index ad84d203d2..29ea86daa9 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -30,4 +30,23 @@ icon_state = "white" plane = LIGHTING_PLANE layer = LIGHTING_LAYER - blend_mode = BLEND_ADD \ No newline at end of file + blend_mode = BLEND_ADD + +/obj/effect/abstract/marker + name = "marker" + icon = 'icons/effects/effects.dmi' + anchored = TRUE + icon_state = "wave3" + layer = RIPPLE_LAYER + +/obj/effect/abstract/marker/Initialize(mapload) + . = ..() + GLOB.all_abstract_markers += src + +/obj/effect/abstract/marker/Destroy() + GLOB.all_abstract_markers -= src + . = ..() + +/obj/effect/abstract/marker/at + name = "active turf marker" + diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 3935b86c92..12225321d7 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -230,7 +230,15 @@ name = "blood sparks" icon_state = "bloodsparkles" -/obj/effect/overlay/temp/dir_setting/cult/phase +/obj/effect/overlay/temp/cult/blood // The traditional teleport + name = "blood jaunt" + duration = 12 + icon_state = "bloodin" + +/obj/effect/overlay/temp/cult/blood/out + icon_state = "bloodout" + +/obj/effect/overlay/temp/dir_setting/cult/phase // The veil shifter teleport name = "phase glow" duration = 7 icon_state = "cultin" @@ -323,11 +331,30 @@ /obj/effect/overlay/temp/ratvar/grille/broken icon_state = "ratvarbrokengrilleglow" +/obj/effect/overlay/temp/ratvar/mending_mantra + layer = ABOVE_MOB_LAYER + duration = 20 + alpha = 200 + icon_state = "mending_mantra" + light_range = 1.5 + light_color = "#1E8CE1" + +/obj/effect/overlay/temp/ratvar/mending_mantra/Initialize(mapload) + . = ..() + transform = matrix()*2 + var/matrix/M = transform + M.Turn(90) + animate(src, alpha = 20, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL) + animate(src, transform = M, time = duration, flags = ANIMATION_PARALLEL) + /obj/effect/overlay/temp/ratvar/volt_hit name = "volt blast" layer = ABOVE_MOB_LAYER duration = 5 icon_state = "volt_hit" + light_range = 1.5 + light_power = 2 + light_color = LIGHT_COLOR_ORANGE var/mob/user var/damage = 20 @@ -336,7 +363,6 @@ damage *= multiplier duration = max(round(damage * 0.2), 1) . = ..() - set_light(1.5, 2, LIGHT_COLOR_ORANGE) /obj/effect/overlay/temp/ratvar/volt_hit/true/Initialize(mapload, caster, multiplier) . = ..() @@ -593,6 +619,18 @@ icon_state = "shieldsparkles" duration = 6 +/obj/effect/overlay/temp/heart + name = "heart" + icon = 'icons/mob/animal.dmi' + icon_state = "heart" + duration = 25 + +/obj/effect/overlay/temp/heart/Initialize(mapload) + . = ..() + pixel_x = rand(-4,4) + pixel_y = rand(-4,4) + + animate(src, pixel_y = pixel_y + 32, alpha = 0, time = 25) /obj/effect/overlay/palmtree_r name = "Palm tree" diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index e8c86390ea..7f66b0ab1a 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -63,7 +63,7 @@ return if (istype(M, /atom/movable)) if(ismegafauna(M)) - message_admins("[M] (FLW) has teleported through [src].") + message_admins("[M] [ADMIN_FLW(M)] has teleported through [src].") do_teleport(M, target, precision) ///You will appear adjacent to the beacon diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 63b5075cc7..8d59a03f02 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -183,8 +183,9 @@ if(!T) return - if(triggerer_only) - A.playsound_local(T, sound, volume, freq_vary) + if(triggerer_only && ismob(A)) + var/mob/B = A + B.playsound_local(T, sound, volume, freq_vary) else playsound(T, sound, volume, freq_vary, extra_range) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 07ffe61689..11079bf847 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,10 +1,15 @@ -/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1) +/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range, silent = 0, smoke = 1) set waitfor = 0 src = null //so we don't abort once src is deleted epicenter = get_turf(epicenter) if(!epicenter) return + if(isnull(flame_range)) + flame_range = light_impact_range + if(isnull(flash_range)) + flash_range = devastation_range + // Archive the uncapped explosion for the doppler array var/orig_dev_range = devastation_range var/orig_heavy_range = heavy_impact_range diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 0cf73fd9ff..36efee0092 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -7,6 +7,7 @@ desc = "An official document entrusting the governance of the station \ and surrounding space to the Captain. " var/used = FALSE + var/name_type = "station" var/unlimited_uses = FALSE var/ignores_timeout = FALSE @@ -33,10 +34,10 @@ /obj/item/station_charter/attack_self(mob/living/user) if(used) - to_chat(user, "This charter has already been used to name the station.") + to_chat(user, "The [name_type] has already been named.") return if(!ignores_timeout && (world.time-SSticker.round_start_time > STATION_RENAME_TIME_LIMIT)) //5 minutes - to_chat(user, "The crew has already settled into the shift. It probably wouldn't be good to rename the station right now.") + to_chat(user, "The crew has already settled into the shift. It probably wouldn't be good to rename the [name_type] right now.") return if(response_timer_id) to_chat(user, "You're still waiting for approval from your employers about your proposed name change, it'd be best to wait for now.") @@ -60,7 +61,7 @@ to_chat(user, "Your name has been sent to your employers for approval.") // Autoapproves after a certain time response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE) - to_chat(GLOB.admins, "CUSTOM STATION RENAME:[key_name_admin(user)] (?) proposes to rename the station to [new_name] (will autoapprove in [approval_time / 10] seconds). [ADMIN_SMITE(user)] (REJECT) (RPLY)") + to_chat(GLOB.admins, "CUSTOM STATION RENAME:[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [approval_time / 10] seconds). [ADMIN_SMITE(user)] (REJECT) [ADMIN_CENTCOM_REPLY(user)]") /obj/item/station_charter/proc/reject_proposed(user) if(!user) @@ -94,4 +95,27 @@ unlimited_uses = TRUE ignores_timeout = TRUE + +/obj/item/weapon/station_charter/flag + name = "nanotrasen banner" + icon = 'icons/obj/items.dmi' + var/name_type = "planet" + icon_state = "banner" + item_state = "banner" + desc = "A cunning device used to claim ownership of planets." + w_class = 5 + force = 15 + +/obj/item/station_charter/flag/rename_station(designation, uname, ureal_name, ukey) + set_station_name(designation) + minor_announce("[ureal_name] has designated the planet as [station_name()]", "Captain's Banner", 0) + log_game("[ukey] has renamed the planet as [station_name()].") + name = "banner of [station_name()]" + desc = "The banner bears the official coat of arms of Nanotrasen, signifying that [station_name()] has been claimed by Captain [uname] in the name of the company." + SSblackbox.set_details("station_renames","[station_name()]") + if(!unlimited_uses) + used = TRUE + + + #undef STATION_RENAME_TIME_LIMIT diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 4d46635847..6adc4efe22 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -161,11 +161,11 @@ icon_state = "pda-roboticist" default_cartridge = /obj/item/weapon/cartridge/roboticist -/obj/item/device/pda/librarian - name = "librarian PDA" +/obj/item/device/pda/curator + name = "curator PDA" icon_state = "pda-library" icon_alert = "pda-r-library" - default_cartridge = /obj/item/weapon/cartridge/librarian + default_cartridge = /obj/item/weapon/cartridge/curator desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a WGW-11 series e-reader." note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!" silent = 1 //Quiet in the library! diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 1fd52cf5d9..60296fd4d5 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -1,787 +1,787 @@ -/obj/item/weapon/cartridge - name = "generic cartridge" - desc = "A data cartridge for portable microcomputers." - icon = 'icons/obj/pda.dmi' - icon_state = "cart" - item_state = "electronic" - w_class = WEIGHT_CLASS_TINY - - var/obj/item/radio/integrated/radio = null - var/access_security = 0 - var/access_engine = 0 - var/access_atmos = 0 - var/access_medical = 0 - var/access_manifest = 0 - var/access_clown = 0 - var/access_mime = 0 - var/access_janitor = 0 -// var/access_flora = 0 - var/access_reagent_scanner = 0 - var/access_newscaster = 0 - var/access_remote_door = 0 //Control some blast doors remotely!! - var/remote_door_id = "" - var/access_status_display = 0 - var/access_quartermaster = 0 - var/access_hydroponics = 0 - var/access_dronephone = 0 - var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT|MULE_BOT|FLOOR_BOT|CLEAN_BOT|MED_BOT - var/spam_enabled = 0 //Enables "Send to All" Option - - var/mode = null - var/menu - var/datum/data/record/active1 = null //General - var/datum/data/record/active2 = null //Medical - var/datum/data/record/active3 = null //Security - var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor - var/list/powermonitors = list() - var/message1 // used for status_displays - var/message2 - var/list/stored_data = list() - var/current_channel - - var/mob/living/simple_animal/bot/active_bot - var/list/botlist = list() - -/obj/item/weapon/cartridge/engineering - name = "\improper Power-ON cartridge" - icon_state = "cart-e" - access_engine = 1 - access_dronephone = 1 - bot_access_flags = FLOOR_BOT - -/obj/item/weapon/cartridge/atmos - name = "\improper BreatheDeep cartridge" - icon_state = "cart-a" - access_atmos = 1 - access_dronephone = 1 - bot_access_flags = FLOOR_BOT - -/obj/item/weapon/cartridge/medical - name = "\improper Med-U cartridge" - icon_state = "cart-m" - access_medical = 1 - bot_access_flags = MED_BOT - -/obj/item/weapon/cartridge/chemistry - name = "\improper ChemWhiz cartridge" - icon_state = "cart-chem" - access_reagent_scanner = 1 - bot_access_flags = MED_BOT - -/obj/item/weapon/cartridge/security - name = "\improper R.O.B.U.S.T. cartridge" - icon_state = "cart-s" - access_security = 1 - bot_access_flags = SEC_BOT - -/obj/item/weapon/cartridge/detective - name = "\improper D.E.T.E.C.T. cartridge" - icon_state = "cart-s" - access_security = 1 - access_medical = 1 - access_manifest = 1 - bot_access_flags = SEC_BOT - -/obj/item/weapon/cartridge/janitor - name = "\improper CustodiPRO cartridge" - desc = "The ultimate in clean-room design." - icon_state = "cart-j" - access_janitor = 1 - access_dronephone = 1 - bot_access_flags = CLEAN_BOT - -/obj/item/weapon/cartridge/lawyer - name = "\improper P.R.O.V.E. cartridge" - icon_state = "cart-s" - access_security = 1 - spam_enabled = 1 - -/obj/item/weapon/cartridge/clown - name = "\improper Honkworks 5.0 cartridge" - icon_state = "cart-clown" - access_clown = 1 - var/honk_charges = 5 - -/obj/item/weapon/cartridge/mime - name = "\improper Gestur-O 1000 cartridge" - icon_state = "cart-mi" - access_mime = 1 - var/mime_charges = 5 - -/obj/item/weapon/cartridge/librarian - name = "\improper Lib-Tweet cartridge" - icon_state = "cart-s" - access_newscaster = 1 - -/* -/obj/item/weapon/cartridge/botanist - name = "\improper Green Thumb v4.20 cartridge" - icon_state = "cart-b" - access_flora = 1 -*/ - -/obj/item/weapon/cartridge/roboticist - name = "\improper B.O.O.P. Remote Control cartridge" - desc = "Packed with heavy duty triple-bot interlink!" - bot_access_flags = FLOOR_BOT|CLEAN_BOT|MED_BOT - access_dronephone = 1 - -/obj/item/weapon/cartridge/signal - name = "generic signaler cartridge" - desc = "A data cartridge with an integrated radio signaler module." - -/obj/item/weapon/cartridge/signal/toxins - name = "\improper Signal Ace 2 cartridge" - desc = "Complete with integrated radio signaler!" - icon_state = "cart-tox" - access_reagent_scanner = 1 - access_atmos = 1 - -/obj/item/weapon/cartridge/signal/New() - ..() - radio = new /obj/item/radio/integrated/signal(src) - - - -/obj/item/weapon/cartridge/quartermaster - name = "space parts & space vendors cartridge" - desc = "Perfect for the Quartermaster on the go!" - icon_state = "cart-q" - access_quartermaster = 1 - bot_access_flags = MULE_BOT - -/obj/item/weapon/cartridge/head - name = "\improper Easy-Record DELUXE cartridge" - icon_state = "cart-h" - access_manifest = 1 - access_status_display = 1 - -/obj/item/weapon/cartridge/hop - name = "\improper HumanResources9001 cartridge" - icon_state = "cart-h" - access_manifest = 1 - access_status_display = 1 - bot_access_flags = MULE_BOT|CLEAN_BOT - access_janitor = 1 - access_security = 1 - access_newscaster = 1 - access_quartermaster = 1 - access_dronephone = 1 - -/obj/item/weapon/cartridge/hos - name = "\improper R.O.B.U.S.T. DELUXE cartridge" - icon_state = "cart-hos" - access_manifest = 1 - access_status_display = 1 - access_security = 1 - bot_access_flags = SEC_BOT - - -/obj/item/weapon/cartridge/ce - name = "\improper Power-On DELUXE cartridge" - icon_state = "cart-ce" - access_manifest = 1 - access_status_display = 1 - access_engine = 1 - access_atmos = 1 - access_dronephone = 1 - bot_access_flags = FLOOR_BOT - -/obj/item/weapon/cartridge/cmo - name = "\improper Med-U DELUXE cartridge" - icon_state = "cart-cmo" - access_manifest = 1 - access_status_display = 1 - access_reagent_scanner = 1 - access_medical = 1 - bot_access_flags = MED_BOT - -/obj/item/weapon/cartridge/rd - name = "\improper Signal Ace DELUXE cartridge" - icon_state = "cart-rd" - access_manifest = 1 - access_status_display = 1 - access_reagent_scanner = 1 - access_atmos = 1 - access_dronephone = 1 - bot_access_flags = FLOOR_BOT|CLEAN_BOT|MED_BOT - -/obj/item/weapon/cartridge/rd/New() - ..() - radio = new /obj/item/radio/integrated/signal(src) - -/obj/item/weapon/cartridge/captain - name = "\improper Value-PAK cartridge" - desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime and Clown) - icon_state = "cart-c" - access_manifest = 1 - access_engine = 1 - access_security = 1 - access_medical = 1 - access_reagent_scanner = 1 - access_status_display = 1 - access_atmos = 1 - access_newscaster = 1 - access_quartermaster = 1 - access_janitor = 1 - access_dronephone = 1 - bot_access_flags = SEC_BOT|MULE_BOT|FLOOR_BOT|CLEAN_BOT|MED_BOT - spam_enabled = 1 - -/obj/item/weapon/cartridge/captain/New() - ..() - radio = new /obj/item/radio/integrated/signal(src) - -/obj/item/weapon/cartridge/syndicate - name = "\improper Detomatix cartridge" - icon_state = "cart" - access_remote_door = 1 - remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. - var/shock_charges = 4 - -/obj/item/weapon/cartridge/proc/unlock() - if (!istype(loc, /obj/item/device/pda)) - return - - generate_menu() - print_to_host(menu) - return - -/obj/item/weapon/cartridge/proc/print_to_host(text) - if (!istype(loc, /obj/item/device/pda)) - return - var/obj/item/device/pda/P = loc - P.cart = text - - for (var/mob/M in viewers(1, loc.loc)) - if (M.client && M.machine == loc) - P.attack_self(M) - - return - -/obj/item/weapon/cartridge/proc/post_status(command, data1, data2) - - var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) - - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - - -/obj/item/weapon/cartridge/proc/generate_menu(mob/user) - switch(mode) - if(40) //signaller - var/obj/item/radio/integrated/signal/S = radio - menu = "

Remote Signaling System

" - - menu += {" -Send Signal
-Frequency: -- -- -[format_frequency(S.frequency)] -+ -+
-
-Code: -- -- -[S.code] -+ -+
"} - if (41) //crew manifest - - menu = "

Crew Manifest

" - menu += "Entries cannot be modified from this terminal.

" - if(GLOB.data_core.general) - for (var/datum/data/record/t in sortRecord(GLOB.data_core.general)) - menu += "[t.fields["name"]] - [t.fields["rank"]]
" - menu += "
" - - - if (42) //status displays - menu = "

Station Status Display Interlink

" - - menu += "\[ Clear \]
" - menu += "\[ Shuttle ETA \]
" - menu += "\[ Message \]" - menu += "
" - menu += "\[ Alert: None |" - menu += " Red Alert |" - menu += " Lockdown |" - menu += " Biohazard \]
" - - if (43) - menu = "

Power Monitors - Please select one


" - powmonitor = null - powermonitors = list() - var/powercount = 0 - - - - for(var/obj/machinery/computer/monitor/pMon in GLOB.machines) - if(!(pMon.stat & (NOPOWER|BROKEN)) ) - powercount++ - powermonitors += pMon - - - if(!powercount) - menu += "No connection
" - else - - menu += "" - var/count = 0 - for(var/obj/machinery/computer/monitor/pMon in powermonitors) - count++ - menu += "[pMon]
" - - menu += "
" - - if (433) - menu = "

Power Monitor


" - if(!powmonitor) - menu += "No connection
" - else - var/list/L = list() - for(var/obj/machinery/power/terminal/term in powmonitor.attached.powernet.nodes) - if(istype(term.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = term.master - L += A - - menu += "
Total power: [powmonitor.attached.powernet.viewavail] W
Total load: [num2text(powmonitor.attached.powernet.viewload,10)] W
" - - menu += "" - - if(L.len > 0) - menu += "Area Eqp./Lgt./Env. Load Cell
" - - var/list/S = list(" Off","AOff"," On", " AOn") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - menu += copytext(add_tspace(A.area.name, 30), 1, 30) - menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" - - menu += "
" - - if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. - menu = "

Medical Record List

" - if(GLOB.data_core.general) - for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - menu += "[R.fields["id"]]: [R.fields["name"]]
" - menu += "
" - if(441) - menu = "

Medical Record

" - - if(active1 in GLOB.data_core.general) - menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
" - menu += "Sex: [active1.fields["sex"]]
" - menu += "Age: [active1.fields["age"]]
" - menu += "Rank: [active1.fields["rank"]]
" - menu += "Fingerprint: [active1.fields["fingerprint"]]
" - menu += "Physical Status: [active1.fields["p_stat"]]
" - menu += "Mental Status: [active1.fields["m_stat"]]
" - else - menu += "Record Lost!
" - - menu += "
" - - menu += "

Medical Data

" - if(active2 in GLOB.data_core.medical) - menu += "Blood Type: [active2.fields["blood_type"]]

" - - menu += "Minor Disabilities: [active2.fields["mi_dis"]]
" - menu += "Details: [active2.fields["mi_dis_d"]]

" - - menu += "Major Disabilities: [active2.fields["ma_dis"]]
" - menu += "Details: [active2.fields["ma_dis_d"]]

" - - menu += "Allergies: [active2.fields["alg"]]
" - menu += "Details: [active2.fields["alg_d"]]

" - - menu += "Current Diseases: [active2.fields["cdi"]]
" - menu += "Details: [active2.fields["cdi_d"]]

" - - menu += "Important Notes: [active2.fields["notes"]]
" - else - menu += "Record Lost!
" - - menu += "
" - if (45) //security records - menu = "

Security Record List

" - if(GLOB.data_core.general) - for (var/datum/data/record/R in sortRecord(GLOB.data_core.general)) - menu += "
[R.fields["id"]]: [R.fields["name"]]
" - - menu += "
" - if(451) - menu = "

Security Record

" - - if(active1 in GLOB.data_core.general) - menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
" - menu += "Sex: [active1.fields["sex"]]
" - menu += "Age: [active1.fields["age"]]
" - menu += "Rank: [active1.fields["rank"]]
" - menu += "Fingerprint: [active1.fields["fingerprint"]]
" - menu += "Physical Status: [active1.fields["p_stat"]]
" - menu += "Mental Status: [active1.fields["m_stat"]]
" - else - menu += "Record Lost!
" - - menu += "
" - - menu += "

Security Data

" - if(active3 in GLOB.data_core.security) - menu += "Criminal Status: [active3.fields["criminal"]]
" - - menu += text("
\nMinor Crimes:") - - menu +={" - - - - - -"} - for(var/datum/data/crime/c in active3.fields["mi_crim"]) - menu += "" - menu += "" - menu += "" - menu += "" - menu += "" - menu += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" - - menu += text("
\nMajor Crimes:") - - menu +={" - - - - - -"} - for(var/datum/data/crime/c in active3.fields["ma_crim"]) - menu += "" - menu += "" - menu += "" - menu += "" - menu += "" - menu += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" - - menu += "
\nImportant Notes:
" - menu += "[active3.fields["notes"]]" - else - menu += "Record Lost!
" - - menu += "
" - - if (47) //quartermaster order records - menu = "

Supply Record Interlink

" - - menu += "
Supply shuttle
" - menu += "Location: " - switch(SSshuttle.supply.mode) - if(SHUTTLE_CALL) - menu += "Moving to " - if(SSshuttle.supply.z != ZLEVEL_STATION) - menu += "station" - else - menu += "centcomm" - menu += " ([SSshuttle.supply.timeLeft(600)] Mins)" - else - menu += "At " - if(SSshuttle.supply.z != ZLEVEL_STATION) - menu += "centcomm" - else - menu += "station" - menu += "
Current approved orders:
    " - for(var/S in SSshuttle.shoppinglist) - var/datum/supply_order/SO = S - menu += "
  1. #[SO.id] - [SO.pack.name] approved by [SO.orderer] [SO.reason ? "([SO.reason])":""]
  2. " - menu += "
" - - menu += "Current requests:
    " - for(var/S in SSshuttle.requestlist) - var/datum/supply_order/SO = S - menu += "
  1. #[SO.id] - [SO.pack.name] requested by [SO.orderer]
  2. " - menu += "
Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management." - - if (49) //janitorial locator - menu = "

Persistent Custodial Object Locator

" - - var/turf/cl = get_turf(src) - if (cl) - menu += "Current Orbital Location: \[[cl.x],[cl.y]\]" - - menu += "

Located Mops:

" - - var/ldat - for (var/obj/item/weapon/mop/M in world) - var/turf/ml = get_turf(M) - - if(ml) - if (ml.z != cl.z) - continue - var/direction = get_dir(src, M) - ldat += "Mop - \[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\] - [M.reagents.total_volume ? "Wet" : "Dry"]
" - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - menu += "

Located Janitorial Cart:

" - - ldat = null - for (var/obj/structure/janitorialcart/B in world) - var/turf/bl = get_turf(B) - - if(bl) - if (bl.z != cl.z) - continue - var/direction = get_dir(src, B) - ldat += "Cart - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - Water level: [B.reagents.total_volume]/100
" - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - menu += "

Located Cleanbots:

" - - ldat = null - for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.living_mob_list) - var/turf/bl = get_turf(B) - - if(bl) - if (bl.z != cl.z) - continue - var/direction = get_dir(src, B) - ldat += "Cleanbot - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - [B.on ? "Online" : "Offline"]
" - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - else - menu += "ERROR: Unable to determine current location." - menu += "

Refresh GPS Locator" - - if (53) // Newscaster - menu = "

Newscaster Access

" - menu += "
Current Newsfeed: [current_channel ? current_channel : "None"]
" - var/datum/newscaster/feed_channel/current - for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) - if (chan.channel_name == current_channel) - current = chan - if(!current) - menu += "
ERROR : NO CHANNEL FOUND
" - return - var/i = 1 - for(var/datum/newscaster/feed_message/msg in current.messages) - menu +="-[msg.returnBody(-1)]
\[Story by [msg.returnAuthor(-1)]\]
" - menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""]
" - if(msg.img) - user << browse_rsc(msg.img, "tmp_photo[i].png") - menu +="
" - i++ - for(var/datum/newscaster/feed_comment/comment in msg.comments) - menu +="[comment.body]
[comment.author] [comment.time_stamp]
" - menu += "
Post Message" - - if (54) // Beepsky, Medibot, Floorbot, and Cleanbot access - menu = "

Bots Interlink

" - bot_control() - -/obj/item/weapon/cartridge/Topic(href, href_list) - ..() - - if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr.unset_machine() - usr << browse(null, "window=pda") - return - - var/obj/item/device/pda/pda = loc - - switch(href_list["choice"]) - if("Medical Records") - active1 = find_record("id", href_list["target"], GLOB.data_core.general) - if(active1) - active2 = find_record("id", href_list["target"], GLOB.data_core.medical) - pda.mode = 441 - mode = 441 - if(!active2) - active1 = null - - if("Security Records") - active1 = find_record("id", href_list["target"], GLOB.data_core.general) - if(active1) - active3 = find_record("id", href_list["target"], GLOB.data_core.security) - pda.mode = 451 - mode = 451 - if(!active3) - active1 = null - - if("Send Signal") - spawn( 0 ) - var/obj/item/radio/integrated/signal/S = radio - S.send_signal("ACTIVATE") - return - - if("Signal Frequency") - var/obj/item/radio/integrated/signal/S = radio - var/new_frequency = sanitize_frequency(S.frequency + text2num(href_list["sfreq"])) - S.set_frequency(new_frequency) - - if("Signal Code") - var/obj/item/radio/integrated/signal/S = radio - S.code += text2num(href_list["scode"]) - S.code = round(S.code) - S.code = min(100, S.code) - S.code = max(1, S.code) - - if("Status") - switch(href_list["statdisp"]) - if("message") - post_status("message", message1, message2) - if("alert") - post_status("alert", href_list["alert"]) - if("setmsg1") - message1 = reject_bad_text(input("Line 1", "Enter Message Text", message1) as text|null, 40) - updateSelfDialog() - if("setmsg2") - message2 = reject_bad_text(input("Line 2", "Enter Message Text", message2) as text|null, 40) - updateSelfDialog() - else - post_status(href_list["statdisp"]) - if("Power Select") - var/pnum = text2num(href_list["target"]) - powmonitor = powermonitors[pnum] - pda.mode = 433 - mode = 433 - - if("Supply Orders") - pda.mode =47 - mode = 47 - - if("Newscaster Access") - mode = 53 - - if("Newscaster Message") - var/pda_owner_name = pda.id ? "[pda.id.registered_name] ([pda.id.assignment])" : "Unknown" - var/message = pda.msg_input() - var/datum/newscaster/feed_channel/current - for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) - if (chan.channel_name == current_channel) - current = chan - if(current.locked && current.author != pda_owner_name) - pda.cart += "
ERROR : NOT AUTHORIZED [pda.id ? "" : "- ID SLOT EMPTY"]
" - pda.Topic(null,list("choice"="Refresh")) - return - GLOB.news_network.SubmitArticle(message,pda.owner,current_channel) - pda.Topic(null,list("choice"=num2text(mode))) - return - - if("Newscaster Switch Channel") - current_channel = pda.msg_input() - pda.Topic(null,list("choice"=num2text(mode))) - return - - //Bot control section! Viciously ripped from radios for being laggy and terrible. - if(href_list["op"]) - switch(href_list["op"]) - - if("control") - active_bot = locate(href_list["bot"]) - - if("botlist") - active_bot = null - if("summon") //Args are in the correct order, they are stated here just as an easy reminder. - active_bot.bot_control(command= "summon", user_turf= get_turf(usr), user_access= pda.GetAccess()) - else //Forward all other bot commands to the bot itself! - active_bot.bot_control(command= href_list["op"], user= usr) - - if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work. - - active_bot.bot_control(command= href_list["mule"], user= usr, pda= 1) - - generate_menu(usr) - print_to_host(menu) - - - -/obj/item/weapon/cartridge/proc/bot_control() - - - var/mob/living/simple_animal/bot/Bot - -// if(!SC) -// menu = "Interlink Error - Please reinsert cartridge." -// return - if(active_bot) - menu += "[active_bot]
Status: (refresh)
" - menu += "Model: [active_bot.model]
" - menu += "Location: [get_area(active_bot)]
" - menu += "Mode: [active_bot.get_mode()]" - if(active_bot.allow_pai) - menu += "
pAI: " - if(active_bot.paicard && active_bot.paicard.pai) - menu += "[active_bot.paicard.pai.name]" - if(active_bot.bot_core.allowed(usr)) - menu += " (eject)" - else - menu += "none" - - //MULEs! - if(active_bot.bot_type == MULE_BOT) - var/mob/living/simple_animal/bot/mulebot/MULE = active_bot - var/atom/Load = MULE.load - menu += "
Current Load: [ !Load ? "none" : "[Load.name] (unload)" ]
" - menu += "Destination: [MULE.destination ? MULE.destination : "None"] (set)
" - menu += "Set ID: [MULE.suffix] Modify
" - menu += "Power: [MULE.cell ? MULE.cell.percent() : 0]%
" - menu += "Home: [!MULE.home_destination ? "none" : MULE.home_destination ]
" - menu += "Delivery Reporting: [MULE.report_delivery ? "(On)": "(Off)"]
" - menu += "Auto Return Home: [MULE.auto_return ? "(On)": "(Off)"]
" - menu += "Auto Pickup Crate: [MULE.auto_pickup ? "(On)": "(Off)"]

" //Hue. - - menu += "\[Stop\] " - menu += "\[Proceed\] " - menu += "\[Return Home\]
" - - else - menu += "
\[Stop Patrol\] " //patrolon - menu += "\[Start Patrol\] " //patroloff - menu += "\[Summon Bot\]
" //summon - menu += "Keep an ID inserted to upload access codes upon summoning." - - menu += "
Return to bot list" - else - menu += "
Scan for active bots

" - var/turf/current_turf = get_turf(src) - var/zlevel = current_turf.z - var/botcount = 0 - for(Bot in GLOB.living_mob_list) //Git da botz - if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected! - continue //Also, the PDA must have access to the bot type. - menu += "[Bot.name] ([Bot.get_mode()])
" - botcount++ - if(!botcount) //No bots at all? Lame. - menu += "No bots found.
" - return - - return menu +/obj/item/weapon/cartridge + name = "generic cartridge" + desc = "A data cartridge for portable microcomputers." + icon = 'icons/obj/pda.dmi' + icon_state = "cart" + item_state = "electronic" + w_class = WEIGHT_CLASS_TINY + + var/obj/item/radio/integrated/radio = null + var/access_security = 0 + var/access_engine = 0 + var/access_atmos = 0 + var/access_medical = 0 + var/access_manifest = 0 + var/access_clown = 0 + var/access_mime = 0 + var/access_janitor = 0 +// var/access_flora = 0 + var/access_reagent_scanner = 0 + var/access_newscaster = 0 + var/access_remote_door = 0 //Control some blast doors remotely!! + var/remote_door_id = "" + var/access_status_display = 0 + var/access_quartermaster = 0 + var/access_hydroponics = 0 + var/access_dronephone = 0 + var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT|MULE_BOT|FLOOR_BOT|CLEAN_BOT|MED_BOT + var/spam_enabled = 0 //Enables "Send to All" Option + + var/mode = null + var/menu + var/datum/data/record/active1 = null //General + var/datum/data/record/active2 = null //Medical + var/datum/data/record/active3 = null //Security + var/obj/machinery/computer/monitor/powmonitor = null // Power Monitor + var/list/powermonitors = list() + var/message1 // used for status_displays + var/message2 + var/list/stored_data = list() + var/current_channel + + var/mob/living/simple_animal/bot/active_bot + var/list/botlist = list() + +/obj/item/weapon/cartridge/engineering + name = "\improper Power-ON cartridge" + icon_state = "cart-e" + access_engine = 1 + access_dronephone = 1 + bot_access_flags = FLOOR_BOT + +/obj/item/weapon/cartridge/atmos + name = "\improper BreatheDeep cartridge" + icon_state = "cart-a" + access_atmos = 1 + access_dronephone = 1 + bot_access_flags = FLOOR_BOT + +/obj/item/weapon/cartridge/medical + name = "\improper Med-U cartridge" + icon_state = "cart-m" + access_medical = 1 + bot_access_flags = MED_BOT + +/obj/item/weapon/cartridge/chemistry + name = "\improper ChemWhiz cartridge" + icon_state = "cart-chem" + access_reagent_scanner = 1 + bot_access_flags = MED_BOT + +/obj/item/weapon/cartridge/security + name = "\improper R.O.B.U.S.T. cartridge" + icon_state = "cart-s" + access_security = 1 + bot_access_flags = SEC_BOT + +/obj/item/weapon/cartridge/detective + name = "\improper D.E.T.E.C.T. cartridge" + icon_state = "cart-s" + access_security = 1 + access_medical = 1 + access_manifest = 1 + bot_access_flags = SEC_BOT + +/obj/item/weapon/cartridge/janitor + name = "\improper CustodiPRO cartridge" + desc = "The ultimate in clean-room design." + icon_state = "cart-j" + access_janitor = 1 + access_dronephone = 1 + bot_access_flags = CLEAN_BOT + +/obj/item/weapon/cartridge/lawyer + name = "\improper P.R.O.V.E. cartridge" + icon_state = "cart-s" + access_security = 1 + spam_enabled = 1 + +/obj/item/weapon/cartridge/clown + name = "\improper Honkworks 5.0 cartridge" + icon_state = "cart-clown" + access_clown = 1 + var/honk_charges = 5 + +/obj/item/weapon/cartridge/mime + name = "\improper Gestur-O 1000 cartridge" + icon_state = "cart-mi" + access_mime = 1 + var/mime_charges = 5 + +/obj/item/weapon/cartridge/curator + name = "\improper Lib-Tweet cartridge" + icon_state = "cart-s" + access_newscaster = 1 + +/* +/obj/item/weapon/cartridge/botanist + name = "\improper Green Thumb v4.20 cartridge" + icon_state = "cart-b" + access_flora = 1 +*/ + +/obj/item/weapon/cartridge/roboticist + name = "\improper B.O.O.P. Remote Control cartridge" + desc = "Packed with heavy duty triple-bot interlink!" + bot_access_flags = FLOOR_BOT|CLEAN_BOT|MED_BOT + access_dronephone = 1 + +/obj/item/weapon/cartridge/signal + name = "generic signaler cartridge" + desc = "A data cartridge with an integrated radio signaler module." + +/obj/item/weapon/cartridge/signal/toxins + name = "\improper Signal Ace 2 cartridge" + desc = "Complete with integrated radio signaler!" + icon_state = "cart-tox" + access_reagent_scanner = 1 + access_atmos = 1 + +/obj/item/weapon/cartridge/signal/New() + ..() + radio = new /obj/item/radio/integrated/signal(src) + + + +/obj/item/weapon/cartridge/quartermaster + name = "space parts & space vendors cartridge" + desc = "Perfect for the Quartermaster on the go!" + icon_state = "cart-q" + access_quartermaster = 1 + bot_access_flags = MULE_BOT + +/obj/item/weapon/cartridge/head + name = "\improper Easy-Record DELUXE cartridge" + icon_state = "cart-h" + access_manifest = 1 + access_status_display = 1 + +/obj/item/weapon/cartridge/hop + name = "\improper HumanResources9001 cartridge" + icon_state = "cart-h" + access_manifest = 1 + access_status_display = 1 + bot_access_flags = MULE_BOT|CLEAN_BOT + access_janitor = 1 + access_security = 1 + access_newscaster = 1 + access_quartermaster = 1 + access_dronephone = 1 + +/obj/item/weapon/cartridge/hos + name = "\improper R.O.B.U.S.T. DELUXE cartridge" + icon_state = "cart-hos" + access_manifest = 1 + access_status_display = 1 + access_security = 1 + bot_access_flags = SEC_BOT + + +/obj/item/weapon/cartridge/ce + name = "\improper Power-On DELUXE cartridge" + icon_state = "cart-ce" + access_manifest = 1 + access_status_display = 1 + access_engine = 1 + access_atmos = 1 + access_dronephone = 1 + bot_access_flags = FLOOR_BOT + +/obj/item/weapon/cartridge/cmo + name = "\improper Med-U DELUXE cartridge" + icon_state = "cart-cmo" + access_manifest = 1 + access_status_display = 1 + access_reagent_scanner = 1 + access_medical = 1 + bot_access_flags = MED_BOT + +/obj/item/weapon/cartridge/rd + name = "\improper Signal Ace DELUXE cartridge" + icon_state = "cart-rd" + access_manifest = 1 + access_status_display = 1 + access_reagent_scanner = 1 + access_atmos = 1 + access_dronephone = 1 + bot_access_flags = FLOOR_BOT|CLEAN_BOT|MED_BOT + +/obj/item/weapon/cartridge/rd/New() + ..() + radio = new /obj/item/radio/integrated/signal(src) + +/obj/item/weapon/cartridge/captain + name = "\improper Value-PAK cartridge" + desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime and Clown) + icon_state = "cart-c" + access_manifest = 1 + access_engine = 1 + access_security = 1 + access_medical = 1 + access_reagent_scanner = 1 + access_status_display = 1 + access_atmos = 1 + access_newscaster = 1 + access_quartermaster = 1 + access_janitor = 1 + access_dronephone = 1 + bot_access_flags = SEC_BOT|MULE_BOT|FLOOR_BOT|CLEAN_BOT|MED_BOT + spam_enabled = 1 + +/obj/item/weapon/cartridge/captain/New() + ..() + radio = new /obj/item/radio/integrated/signal(src) + +/obj/item/weapon/cartridge/syndicate + name = "\improper Detomatix cartridge" + icon_state = "cart" + access_remote_door = 1 + remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. + var/shock_charges = 4 + +/obj/item/weapon/cartridge/proc/unlock() + if (!istype(loc, /obj/item/device/pda)) + return + + generate_menu() + print_to_host(menu) + return + +/obj/item/weapon/cartridge/proc/print_to_host(text) + if (!istype(loc, /obj/item/device/pda)) + return + var/obj/item/device/pda/P = loc + P.cart = text + + for (var/mob/M in viewers(1, loc.loc)) + if (M.client && M.machine == loc) + P.attack_self(M) + + return + +/obj/item/weapon/cartridge/proc/post_status(command, data1, data2) + + var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + switch(command) + if("message") + status_signal.data["msg1"] = data1 + status_signal.data["msg2"] = data2 + if("alert") + status_signal.data["picture_state"] = data1 + + frequency.post_signal(src, status_signal) + + +/obj/item/weapon/cartridge/proc/generate_menu(mob/user) + switch(mode) + if(40) //signaller + var/obj/item/radio/integrated/signal/S = radio + menu = "

Remote Signaling System

" + + menu += {" +
Send Signal
+Frequency: +- +- +[format_frequency(S.frequency)] ++ ++
+
+Code: +- +- +[S.code] ++ ++
"} + if (41) //crew manifest + + menu = "

Crew Manifest

" + menu += "Entries cannot be modified from this terminal.

" + if(GLOB.data_core.general) + for (var/datum/data/record/t in sortRecord(GLOB.data_core.general)) + menu += "[t.fields["name"]] - [t.fields["rank"]]
" + menu += "
" + + + if (42) //status displays + menu = "

Station Status Display Interlink

" + + menu += "\[ Clear \]
" + menu += "\[ Shuttle ETA \]
" + menu += "\[ Message \]" + menu += "
" + menu += "\[ Alert: None |" + menu += " Red Alert |" + menu += " Lockdown |" + menu += " Biohazard \]
" + + if (43) + menu = "

Power Monitors - Please select one


" + powmonitor = null + powermonitors = list() + var/powercount = 0 + + + + for(var/obj/machinery/computer/monitor/pMon in GLOB.machines) + if(!(pMon.stat & (NOPOWER|BROKEN)) ) + powercount++ + powermonitors += pMon + + + if(!powercount) + menu += "No connection
" + else + + menu += "" + var/count = 0 + for(var/obj/machinery/computer/monitor/pMon in powermonitors) + count++ + menu += "[pMon]
" + + menu += "
" + + if (433) + menu = "

Power Monitor


" + if(!powmonitor) + menu += "No connection
" + else + var/list/L = list() + for(var/obj/machinery/power/terminal/term in powmonitor.attached.powernet.nodes) + if(istype(term.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = term.master + L += A + + menu += "
Total power: [powmonitor.attached.powernet.viewavail] W
Total load: [num2text(powmonitor.attached.powernet.viewload,10)] W
" + + menu += "" + + if(L.len > 0) + menu += "Area Eqp./Lgt./Env. Load Cell
" + + var/list/S = list(" Off","AOff"," On", " AOn") + var/list/chg = list("N","C","F") + + for(var/obj/machinery/power/apc/A in L) + menu += copytext(add_tspace(A.area.name, 30), 1, 30) + menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" + + menu += "
" + + if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. + menu = "

Medical Record List

" + if(GLOB.data_core.general) + for(var/datum/data/record/R in sortRecord(GLOB.data_core.general)) + menu += "[R.fields["id"]]: [R.fields["name"]]
" + menu += "
" + if(441) + menu = "

Medical Record

" + + if(active1 in GLOB.data_core.general) + menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
" + menu += "Sex: [active1.fields["sex"]]
" + menu += "Age: [active1.fields["age"]]
" + menu += "Rank: [active1.fields["rank"]]
" + menu += "Fingerprint: [active1.fields["fingerprint"]]
" + menu += "Physical Status: [active1.fields["p_stat"]]
" + menu += "Mental Status: [active1.fields["m_stat"]]
" + else + menu += "Record Lost!
" + + menu += "
" + + menu += "

Medical Data

" + if(active2 in GLOB.data_core.medical) + menu += "Blood Type: [active2.fields["blood_type"]]

" + + menu += "Minor Disabilities: [active2.fields["mi_dis"]]
" + menu += "Details: [active2.fields["mi_dis_d"]]

" + + menu += "Major Disabilities: [active2.fields["ma_dis"]]
" + menu += "Details: [active2.fields["ma_dis_d"]]

" + + menu += "Allergies: [active2.fields["alg"]]
" + menu += "Details: [active2.fields["alg_d"]]

" + + menu += "Current Diseases: [active2.fields["cdi"]]
" + menu += "Details: [active2.fields["cdi_d"]]

" + + menu += "Important Notes: [active2.fields["notes"]]
" + else + menu += "Record Lost!
" + + menu += "
" + if (45) //security records + menu = "

Security Record List

" + if(GLOB.data_core.general) + for (var/datum/data/record/R in sortRecord(GLOB.data_core.general)) + menu += "
[R.fields["id"]]: [R.fields["name"]]
" + + menu += "
" + if(451) + menu = "

Security Record

" + + if(active1 in GLOB.data_core.general) + menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
" + menu += "Sex: [active1.fields["sex"]]
" + menu += "Age: [active1.fields["age"]]
" + menu += "Rank: [active1.fields["rank"]]
" + menu += "Fingerprint: [active1.fields["fingerprint"]]
" + menu += "Physical Status: [active1.fields["p_stat"]]
" + menu += "Mental Status: [active1.fields["m_stat"]]
" + else + menu += "Record Lost!
" + + menu += "
" + + menu += "

Security Data

" + if(active3 in GLOB.data_core.security) + menu += "Criminal Status: [active3.fields["criminal"]]
" + + menu += text("
\nMinor Crimes:") + + menu +={" + + + + + +"} + for(var/datum/data/crime/c in active3.fields["mi_crim"]) + menu += "" + menu += "" + menu += "" + menu += "" + menu += "" + menu += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" + + menu += text("
\nMajor Crimes:") + + menu +={" + + + + + +"} + for(var/datum/data/crime/c in active3.fields["ma_crim"]) + menu += "" + menu += "" + menu += "" + menu += "" + menu += "" + menu += "
CrimeDetailsAuthorTime Added
[c.crimeName][c.crimeDetails][c.author][c.time]
" + + menu += "
\nImportant Notes:
" + menu += "[active3.fields["notes"]]" + else + menu += "Record Lost!
" + + menu += "
" + + if (47) //quartermaster order records + menu = "

Supply Record Interlink

" + + menu += "
Supply shuttle
" + menu += "Location: " + switch(SSshuttle.supply.mode) + if(SHUTTLE_CALL) + menu += "Moving to " + if(SSshuttle.supply.z != ZLEVEL_STATION) + menu += "station" + else + menu += "centcomm" + menu += " ([SSshuttle.supply.timeLeft(600)] Mins)" + else + menu += "At " + if(SSshuttle.supply.z != ZLEVEL_STATION) + menu += "centcomm" + else + menu += "station" + menu += "
Current approved orders:
    " + for(var/S in SSshuttle.shoppinglist) + var/datum/supply_order/SO = S + menu += "
  1. #[SO.id] - [SO.pack.name] approved by [SO.orderer] [SO.reason ? "([SO.reason])":""]
  2. " + menu += "
" + + menu += "Current requests:
    " + for(var/S in SSshuttle.requestlist) + var/datum/supply_order/SO = S + menu += "
  1. #[SO.id] - [SO.pack.name] requested by [SO.orderer]
  2. " + menu += "
Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management." + + if (49) //janitorial locator + menu = "

Persistent Custodial Object Locator

" + + var/turf/cl = get_turf(src) + if (cl) + menu += "Current Orbital Location: \[[cl.x],[cl.y]\]" + + menu += "

Located Mops:

" + + var/ldat + for (var/obj/item/weapon/mop/M in world) + var/turf/ml = get_turf(M) + + if(ml) + if (ml.z != cl.z) + continue + var/direction = get_dir(src, M) + ldat += "Mop - \[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\] - [M.reagents.total_volume ? "Wet" : "Dry"]
" + + if (!ldat) + menu += "None" + else + menu += "[ldat]" + + menu += "

Located Janitorial Cart:

" + + ldat = null + for (var/obj/structure/janitorialcart/B in world) + var/turf/bl = get_turf(B) + + if(bl) + if (bl.z != cl.z) + continue + var/direction = get_dir(src, B) + ldat += "Cart - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - Water level: [B.reagents.total_volume]/100
" + + if (!ldat) + menu += "None" + else + menu += "[ldat]" + + menu += "

Located Cleanbots:

" + + ldat = null + for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.living_mob_list) + var/turf/bl = get_turf(B) + + if(bl) + if (bl.z != cl.z) + continue + var/direction = get_dir(src, B) + ldat += "Cleanbot - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - [B.on ? "Online" : "Offline"]
" + + if (!ldat) + menu += "None" + else + menu += "[ldat]" + + else + menu += "ERROR: Unable to determine current location." + menu += "

Refresh GPS Locator" + + if (53) // Newscaster + menu = "

Newscaster Access

" + menu += "
Current Newsfeed: [current_channel ? current_channel : "None"]
" + var/datum/newscaster/feed_channel/current + for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) + if (chan.channel_name == current_channel) + current = chan + if(!current) + menu += "
ERROR : NO CHANNEL FOUND
" + return + var/i = 1 + for(var/datum/newscaster/feed_message/msg in current.messages) + menu +="-[msg.returnBody(-1)]
\[Story by [msg.returnAuthor(-1)]\]
" + menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""]
" + if(msg.img) + user << browse_rsc(msg.img, "tmp_photo[i].png") + menu +="
" + i++ + for(var/datum/newscaster/feed_comment/comment in msg.comments) + menu +="[comment.body]
[comment.author] [comment.time_stamp]
" + menu += "
Post Message" + + if (54) // Beepsky, Medibot, Floorbot, and Cleanbot access + menu = "

Bots Interlink

" + bot_control() + +/obj/item/weapon/cartridge/Topic(href, href_list) + ..() + + if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + usr.unset_machine() + usr << browse(null, "window=pda") + return + + var/obj/item/device/pda/pda = loc + + switch(href_list["choice"]) + if("Medical Records") + active1 = find_record("id", href_list["target"], GLOB.data_core.general) + if(active1) + active2 = find_record("id", href_list["target"], GLOB.data_core.medical) + pda.mode = 441 + mode = 441 + if(!active2) + active1 = null + + if("Security Records") + active1 = find_record("id", href_list["target"], GLOB.data_core.general) + if(active1) + active3 = find_record("id", href_list["target"], GLOB.data_core.security) + pda.mode = 451 + mode = 451 + if(!active3) + active1 = null + + if("Send Signal") + spawn( 0 ) + var/obj/item/radio/integrated/signal/S = radio + S.send_signal("ACTIVATE") + return + + if("Signal Frequency") + var/obj/item/radio/integrated/signal/S = radio + var/new_frequency = sanitize_frequency(S.frequency + text2num(href_list["sfreq"])) + S.set_frequency(new_frequency) + + if("Signal Code") + var/obj/item/radio/integrated/signal/S = radio + S.code += text2num(href_list["scode"]) + S.code = round(S.code) + S.code = min(100, S.code) + S.code = max(1, S.code) + + if("Status") + switch(href_list["statdisp"]) + if("message") + post_status("message", message1, message2) + if("alert") + post_status("alert", href_list["alert"]) + if("setmsg1") + message1 = reject_bad_text(input("Line 1", "Enter Message Text", message1) as text|null, 40) + updateSelfDialog() + if("setmsg2") + message2 = reject_bad_text(input("Line 2", "Enter Message Text", message2) as text|null, 40) + updateSelfDialog() + else + post_status(href_list["statdisp"]) + if("Power Select") + var/pnum = text2num(href_list["target"]) + powmonitor = powermonitors[pnum] + pda.mode = 433 + mode = 433 + + if("Supply Orders") + pda.mode =47 + mode = 47 + + if("Newscaster Access") + mode = 53 + + if("Newscaster Message") + var/pda_owner_name = pda.id ? "[pda.id.registered_name] ([pda.id.assignment])" : "Unknown" + var/message = pda.msg_input() + var/datum/newscaster/feed_channel/current + for(var/datum/newscaster/feed_channel/chan in GLOB.news_network.network_channels) + if (chan.channel_name == current_channel) + current = chan + if(current.locked && current.author != pda_owner_name) + pda.cart += "
ERROR : NOT AUTHORIZED [pda.id ? "" : "- ID SLOT EMPTY"]
" + pda.Topic(null,list("choice"="Refresh")) + return + GLOB.news_network.SubmitArticle(message,pda.owner,current_channel) + pda.Topic(null,list("choice"=num2text(mode))) + return + + if("Newscaster Switch Channel") + current_channel = pda.msg_input() + pda.Topic(null,list("choice"=num2text(mode))) + return + + //Bot control section! Viciously ripped from radios for being laggy and terrible. + if(href_list["op"]) + switch(href_list["op"]) + + if("control") + active_bot = locate(href_list["bot"]) + + if("botlist") + active_bot = null + if("summon") //Args are in the correct order, they are stated here just as an easy reminder. + active_bot.bot_control(command= "summon", user_turf= get_turf(usr), user_access= pda.GetAccess()) + else //Forward all other bot commands to the bot itself! + active_bot.bot_control(command= href_list["op"], user= usr) + + if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work. + + active_bot.bot_control(command= href_list["mule"], user= usr, pda= 1) + + generate_menu(usr) + print_to_host(menu) + + + +/obj/item/weapon/cartridge/proc/bot_control() + + + var/mob/living/simple_animal/bot/Bot + +// if(!SC) +// menu = "Interlink Error - Please reinsert cartridge." +// return + if(active_bot) + menu += "[active_bot]
Status: (refresh)
" + menu += "Model: [active_bot.model]
" + menu += "Location: [get_area(active_bot)]
" + menu += "Mode: [active_bot.get_mode()]" + if(active_bot.allow_pai) + menu += "
pAI: " + if(active_bot.paicard && active_bot.paicard.pai) + menu += "[active_bot.paicard.pai.name]" + if(active_bot.bot_core.allowed(usr)) + menu += " (eject)" + else + menu += "none" + + //MULEs! + if(active_bot.bot_type == MULE_BOT) + var/mob/living/simple_animal/bot/mulebot/MULE = active_bot + var/atom/Load = MULE.load + menu += "
Current Load: [ !Load ? "none" : "[Load.name] (unload)" ]
" + menu += "Destination: [MULE.destination ? MULE.destination : "None"] (set)
" + menu += "Set ID: [MULE.suffix] Modify
" + menu += "Power: [MULE.cell ? MULE.cell.percent() : 0]%
" + menu += "Home: [!MULE.home_destination ? "none" : MULE.home_destination ]
" + menu += "Delivery Reporting: [MULE.report_delivery ? "(On)": "(Off)"]
" + menu += "Auto Return Home: [MULE.auto_return ? "(On)": "(Off)"]
" + menu += "Auto Pickup Crate: [MULE.auto_pickup ? "(On)": "(Off)"]

" //Hue. + + menu += "\[Stop\] " + menu += "\[Proceed\] " + menu += "\[Return Home\]
" + + else + menu += "
\[Stop Patrol\] " //patrolon + menu += "\[Start Patrol\] " //patroloff + menu += "\[Summon Bot\]
" //summon + menu += "Keep an ID inserted to upload access codes upon summoning." + + menu += "
Return to bot list" + else + menu += "
Scan for active bots

" + var/turf/current_turf = get_turf(src) + var/zlevel = current_turf.z + var/botcount = 0 + for(Bot in GLOB.living_mob_list) //Git da botz + if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected! + continue //Also, the PDA must have access to the bot type. + menu += "[Bot.name] ([Bot.get_mode()])
" + botcount++ + if(!botcount) //No bots at all? Lame. + menu += "No bots found.
" + return + + return menu diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index a837bfc198..a83c6247f8 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -8,8 +8,8 @@ var/on = 0 //Are we currently active?? var/menu_message = "" -/obj/item/radio/integrated/New() - ..() +/obj/item/radio/integrated/Initialize() + . = ..() if (istype(loc.loc, /obj/item/device/pda)) hostpda = loc.loc diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 6955872c27..9131c02240 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -37,9 +37,9 @@ return 1 -/obj/item/device/flashlight/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) +/obj/item/device/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user) add_fingerprint(user) - if(on && user.zone_selected == "eyes") + if(istype(M) && on && user.zone_selected in list("eyes", "mouth")) if((user.disabilities & CLUMSY || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly return ..() //just hit them in the head @@ -48,28 +48,101 @@ to_chat(user, "You don't have the dexterity to do this!") return - var/mob/living/carbon/human/H = M //mob has protective eyewear - if(ishuman(M) && ((H.head && H.head.flags_cover & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) || (H.glasses && H.glasses.flags_cover & GLASSESCOVERSEYES))) - to_chat(user, "You're going to need to remove that [(H.head && H.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first.") + if(!M.get_bodypart("head")) + to_chat(user, "[M] doesn't have a head!") return - if(M == user) //they're using it on themselves - if(M.flash_act(visual = 1)) - M.visible_message("[M] directs [src] to [M.p_their()] eyes.", "You wave the light in front of your eyes! Trippy!") - else - M.visible_message("[M] directs [src] to [M.p_their()] eyes.", "You wave the light in front of your eyes.") - else - user.visible_message("[user] directs [src] to [M]'s eyes.", \ - "You direct [src] to [M]'s eyes.") - var/mob/living/carbon/C = M - if(istype(C)) - if(C.stat == DEAD || (C.disabilities & BLIND)) //mob is dead or fully blind - to_chat(user, "[C] pupils don't react to the light!") - else if(C.dna.check_mutation(XRAY)) //mob has X-RAY vision - to_chat(user, "[C] pupils give an eerie glow!") - else //they're okay! - if(C.flash_act(visual = 1)) - to_chat(user, "[C]'s pupils narrow.") + switch(user.zone_selected) + if("eyes") + if((M.head && M.head.flags_cover & HEADCOVERSEYES) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) || (M.glasses && M.glasses.flags_cover & GLASSESCOVERSEYES)) + to_chat(user, "You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSEYES) ? "helmet" : (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSEYES) ? "mask": "glasses"] first.") + return + + var/obj/item/organ/eyes/E = M.getorganslot("eye_sight") + if(!E) + to_chat(user, "[M] doesn't have any eyes!") + return + + if(M == user) //they're using it on themselves + if(M.flash_act(visual = 1)) + M.visible_message("[M] directs [src] to [M.p_their()] eyes.", "You wave the light in front of your eyes! Trippy!") + else + M.visible_message("[M] directs [src] to [M.p_their()] eyes.", "You wave the light in front of your eyes.") + else + user.visible_message("[user] directs [src] to [M]'s eyes.", \ + "You direct [src] to [M]'s eyes.") + if(M.stat == DEAD || (M.disabilities & BLIND) || !M.flash_act(visual = 1)) //mob is dead or fully blind + to_chat(user, "[M]'s pupils don't react to the light!") + else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-RAY vision + to_chat(user, "[M]'s pupils give an eerie glow!") + else //they're okay! + to_chat(user, "[M]'s pupils narrow.") + + if("mouth") + + if((M.head && M.head.flags_cover & HEADCOVERSMOUTH) || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSMOUTH)) + to_chat(user, "You're going to need to remove that [(M.head && M.head.flags_cover & HEADCOVERSMOUTH) ? "helmet" : "mask"] first.") + return + + var/their = M.p_their() + + var/list/mouth_organs = new + for(var/obj/item/organ/O in M.internal_organs) + if(O.zone == "mouth") + mouth_organs.Add(O) + var/organ_list = "" + var/organ_count = LAZYLEN(mouth_organs) + if(organ_count) + for(var/I in 1 to organ_count) + if(I > 1) + if(I == mouth_organs.len) + organ_list += ", and " + else + organ_list += ", " + var/obj/item/organ/O = mouth_organs[I] + organ_list += (O.gender == "plural" ? O.name : "\an [O.name]") + + var/pill_count = 0 + for(var/datum/action/item_action/hands_free/activate_pill/AP in M.actions) + pill_count++ + + if(M == user) + var/can_use_mirror = FALSE + if(isturf(user.loc)) + var/obj/structure/mirror/mirror = locate(/obj/structure/mirror, user.loc) + if(mirror) + switch(user.dir) + if(NORTH) + can_use_mirror = mirror.pixel_y > 0 + if(SOUTH) + can_use_mirror = mirror.pixel_y < 0 + if(EAST) + can_use_mirror = mirror.pixel_x > 0 + if(WEST) + can_use_mirror = mirror.pixel_x < 0 + + M.visible_message("[M] directs [src] to [their] mouth.", \ + "You point [src] into your mouth.") + if(!can_use_mirror) + to_chat(user, "You can't see anything without a mirror.") + return + if(organ_count) + to_chat(user, "Inside your mouth [organ_count > 1 ? "are" : "is"] [organ_list].") + else + to_chat(user, "There's nothing inside your mouth.") + if(pill_count) + to_chat(user, "You have [pill_count] implanted pill[pill_count > 1 ? "s" : ""].") + + else + user.visible_message("[user] directs [src] to [M]'s mouth.",\ + "You direct [src] to [M]'s mouth.") + if(organ_count) + to_chat(user, "Inside [their] mouth [organ_count > 1 ? "are" : "is"] [organ_list].") + else + to_chat(user, "[M] doesn't have any organs in [their] mouth.") + if(pill_count) + to_chat(user, "[M] has [pill_count] pill[pill_count > 1 ? "s" : ""] implanted in [their] teeth.") + else return ..() @@ -280,7 +353,7 @@ return TRUE /obj/item/device/flashlight/emp/attack(mob/living/M, mob/living/user) - if(on && user.zone_selected == "eyes") // call original attack proc only if aiming at the eyes + if(on && user.zone_selected in list("eyes", "mouth")) // call original attack when examining organs ..() return diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 00e221918c..8ced8d882b 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -1,160 +1,212 @@ -GLOBAL_LIST_EMPTY(GPS_list) -/obj/item/device/gps - name = "global positioning system" - desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power." - icon = 'icons/obj/telescience.dmi' - icon_state = "gps-c" - w_class = WEIGHT_CLASS_SMALL - slot_flags = SLOT_BELT - origin_tech = "materials=2;magnets=1;bluespace=2" - var/gpstag = "COM0" - var/emped = FALSE - var/turf/locked_location - var/tracking = TRUE - -/obj/item/device/gps/Initialize() - ..() - GLOB.GPS_list += src - name = "global positioning system ([gpstag])" - add_overlay("working") - -/obj/item/device/gps/Destroy() - GLOB.GPS_list -= src - return ..() - -/obj/item/device/gps/emp_act(severity) - emped = TRUE - cut_overlay("working") - add_overlay("emp") - addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early - -/obj/item/device/gps/proc/reboot() - emped = FALSE - cut_overlay("emp") - add_overlay("working") - -/obj/item/device/gps/AltClick(mob/user) - if(!user.canUseTopic(src, be_close=TRUE)) - return //user not valid to use gps - if(emped) - to_chat(user, "It's busted!") - return - if(tracking) - cut_overlay("working") - to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") - tracking = FALSE - else - add_overlay("working") - to_chat(user, "[src] is now tracking, and visible to other GPS devices.") - tracking = TRUE - -/obj/item/device/gps/attack_self(mob/user) - if(!tracking) - to_chat(user, "[src] is turned off. Use alt+click to toggle it back on.") - return - - var/obj/item/device/gps/t = "" - var/gps_window_height = 110 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show - if(emped) - t += "ERROR" - else - t += "
Set Tag " - t += "
Tag: [gpstag]" - if(locked_location && locked_location.loc) - t += "
Bluespace coordinates saved: [locked_location.loc]" - gps_window_height += 20 - - for(var/obj/item/device/gps/G in GLOB.GPS_list) - var/turf/pos = get_turf(G) - var/area/gps_area = get_area(G) - var/tracked_gpstag = G.gpstag - if(G.emped == 1) - t += "
[tracked_gpstag]: ERROR" - else if(G.tracking) - t += "
[tracked_gpstag]: [format_text(gps_area.name)] ([pos.x], [pos.y], [pos.z])" - else - continue - var/datum/browser/popup = new(user, "GPS", name, 360, min(gps_window_height, 800)) - popup.set_content(t) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/item/device/gps/Topic(href, href_list) - ..() - if(href_list["tag"] ) - var/a = input("Please enter desired tag.", name, gpstag) as text - a = uppertext(copytext(sanitize(a), 1, 5)) - if(in_range(src, usr)) - gpstag = a - name = "global positioning system ([gpstag])" - attack_self(usr) - -/obj/item/device/gps/science - icon_state = "gps-s" - gpstag = "SCI0" - -/obj/item/device/gps/engineering - icon_state = "gps-e" - gpstag = "ENG0" - -/obj/item/device/gps/mining - icon_state = "gps-m" - gpstag = "MINE0" - desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." - -/obj/item/device/gps/cyborg - icon_state = "gps-b" - gpstag = "BORG0" - desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams." - flags = NODROP - -/obj/item/device/gps/internal - icon_state = null - flags = ABSTRACT - gpstag = "Eerie Signal" - desc = "Report to a coder immediately." - invisibility = INVISIBILITY_MAXIMUM - -/obj/item/device/gps/mining/internal - icon_state = "gps-m" - gpstag = "MINER" - desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." - -/obj/item/device/gps/internal/base - gpstag = "NT_AUX" - desc = "A homing signal from Nanotrasen's mining base." - -/obj/item/device/gps/visible_debug - name = "visible GPS" - gpstag = "ADMIN" - desc = "This admin-spawn GPS unit leaves the coordinates visible \ - on any turf that it passes over, for debugging. Especially useful \ - for marking the area around the transition edges." - var/list/turf/tagged - -/obj/item/device/gps/visible_debug/Initialize() - . = ..() - tagged = list() - START_PROCESSING(SSfastprocess, src) - -/obj/item/device/gps/visible_debug/process() - var/turf/T = get_turf(src) - if(T) - // I assume it's faster to color,tag and OR the turf in, rather - // then checking if its there - T.color = RANDOM_COLOUR - T.maptext = "[T.x],[T.y],[T.z]" - tagged |= T - -/obj/item/device/gps/visible_debug/proc/clear() - while(tagged.len) - var/turf/T = pop(tagged) - T.color = initial(T.color) - T.maptext = initial(T.maptext) - -/obj/item/device/gps/visible_debug/Destroy() - if(tagged) - clear() - tagged = null - STOP_PROCESSING(SSfastprocess, src) - . = ..() +GLOBAL_LIST_EMPTY(GPS_list) +/obj/item/device/gps + name = "global positioning system" + desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power." + icon = 'icons/obj/telescience.dmi' + icon_state = "gps-c" + w_class = WEIGHT_CLASS_SMALL + slot_flags = SLOT_BELT + origin_tech = "materials=2;magnets=1;bluespace=2" + unique_rename = TRUE + var/gpstag = "COM0" + var/emped = FALSE + var/turf/locked_location + var/tracking = TRUE + var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user. + var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown + + +/obj/item/device/gps/Initialize() + ..() + GLOB.GPS_list += src + name = "global positioning system ([gpstag])" + add_overlay("working") + +/obj/item/device/gps/Destroy() + GLOB.GPS_list -= src + return ..() + +/obj/item/device/gps/emp_act(severity) + emped = TRUE + cut_overlay("working") + add_overlay("emp") + addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early + SStgui.close_uis(src) //Close the UI control if it is open. + +/obj/item/device/gps/proc/reboot() + emped = FALSE + cut_overlay("emp") + add_overlay("working") + +/obj/item/device/gps/AltClick(mob/user) + toggletracking(user) + +/obj/item/device/gps/proc/toggletracking(mob/user) + if(!user.canUseTopic(src, be_close=TRUE)) + return //user not valid to use gps + if(emped) + to_chat(user, "It's busted!") + return + if(tracking) + cut_overlay("working") + to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.") + tracking = FALSE + else + add_overlay("working") + to_chat(user, "[src] is now tracking, and visible to other GPS devices.") + tracking = TRUE + + +/obj/item/device/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. + if(emped) + to_chat(user, "[src] fizzles weakly.") + return + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + var/gps_window_height = 300 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show + ui = new(user, src, ui_key, "gps", "Global Positioning System", 600, gps_window_height, master_ui, state) //width, height + ui.open() + + ui.set_autoupdate(state = updating) + + +/obj/item/device/gps/ui_data(mob/user) + var/list/data = list() + data["power"] = tracking + data["tag"] = gpstag + data["updating"] = updating + data["globalmode"] = global_mode + if(!tracking || emped) //Do not bother scanning if the GPS is off or EMPed + return data + + var/turf/curr = get_turf(src) + data["current"] = "[get_area_name(curr)] ([curr.x], [curr.y], [curr.z])" + + var/list/signals = list() + data["signals"] = list() + + for(var/gps in GLOB.GPS_list) + var/obj/item/device/gps/G = gps + if(G.emped || !G.tracking || G == src) + continue + var/turf/pos = get_turf(G) + if(!global_mode && pos.z != curr.z) + continue + var/area/gps_area = get_area_name(G) + var/list/signal = list() + signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS + signal["area"] = format_text(gps_area) + signal["coord"] = "[pos.x], [pos.y], [pos.z]" + if(pos.z == curr.z) //Distance/Direction calculations for same z-level only + signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs + signal["degrees"] = round(Get_Angle(curr, pos)) //0-360 degree directional bearing, for more precision. + var/direction = uppertext(dir2text(get_dir(curr, pos))) //Direction text (East, etc). Not as precise, but still helpful. + if(!direction) + direction = "CENTER" + signal["degrees"] = "N/A" + signal["direction"] = direction + + signals += list(signal) //Add this signal to the list of signals + data["signals"] = signals + return data + + + +/obj/item/device/gps/ui_act(action, params) + if(..()) + return + switch(action) + if("rename") + var/a = input("Please enter desired tag.", name, gpstag) as text + a = uppertext(copytext(sanitize(a), 1, 5)) + gpstag = a + name = "global positioning system ([gpstag])" + . = TRUE + if("power") + toggletracking(usr) + . = TRUE + if("updating") + updating = !updating + . = TRUE + if("globalmode") + global_mode = !global_mode + . = TRUE + +/obj/item/device/gps/Topic(href, href_list) + ..() + if(href_list["tag"] ) + var/a = input("Please enter desired tag.", name, gpstag) as text + a = copytext(sanitize(a), 1, 20) + if(in_range(src, usr)) + gpstag = a + attack_self(usr) + +/obj/item/device/gps/science + icon_state = "gps-s" + gpstag = "SCI0" + +/obj/item/device/gps/engineering + icon_state = "gps-e" + gpstag = "ENG0" + +/obj/item/device/gps/mining + icon_state = "gps-m" + gpstag = "MINE0" + desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." + +/obj/item/device/gps/cyborg + icon_state = "gps-b" + gpstag = "BORG0" + desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams." + flags = NODROP + +/obj/item/device/gps/internal + icon_state = null + flags = ABSTRACT + gpstag = "Eerie Signal" + desc = "Report to a coder immediately." + invisibility = INVISIBILITY_MAXIMUM + +/obj/item/device/gps/mining/internal + icon_state = "gps-m" + gpstag = "MINER" + desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." + +/obj/item/device/gps/internal/base + gpstag = "NT_AUX" + desc = "A homing signal from Nanotrasen's mining base." + +/obj/item/device/gps/visible_debug + name = "visible GPS" + gpstag = "ADMIN" + desc = "This admin-spawn GPS unit leaves the coordinates visible \ + on any turf that it passes over, for debugging. Especially useful \ + for marking the area around the transition edges." + var/list/turf/tagged + +/obj/item/device/gps/visible_debug/Initialize() + . = ..() + tagged = list() + START_PROCESSING(SSfastprocess, src) + +/obj/item/device/gps/visible_debug/process() + var/turf/T = get_turf(src) + if(T) + // I assume it's faster to color,tag and OR the turf in, rather + // then checking if its there + T.color = RANDOM_COLOUR + T.maptext = "[T.x],[T.y],[T.z]" + tagged |= T + +/obj/item/device/gps/visible_debug/proc/clear() + while(tagged.len) + var/turf/T = pop(tagged) + T.color = initial(T.color) + T.maptext = initial(T.maptext) + +/obj/item/device/gps/visible_debug/Destroy() + if(tagged) + clear() + tagged = null + STOP_PROCESSING(SSfastprocess, src) + . = ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 18658ceeb3..e03c85c09a 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -95,8 +95,8 @@ "[user] activates \the [src]!", \ "You activate \the [src].", "You hear a click.") - message_admins("Power sink activated by [key_name_admin(user)](?) (FLW) at ([x],[y],[z] - JMP)") - log_game("Power sink activated by [key_name(user)] at ([x],[y],[z])") + message_admins("Power sink activated by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(src)]") + log_game("Power sink activated by [key_name(user)] at [COORD(src)]") set_mode(OPERATING) if(OPERATING) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index d2e788e7a3..5343e04f78 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -7,8 +7,8 @@ origin_tech = "bluespace=1" dog_fashion = null -/obj/item/device/radio/beacon/New() - ..() +/obj/item/device/radio/beacon/Initialize() + . = ..() GLOB.teleportbeacons += src /obj/item/device/radio/beacon/Destroy() diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 0cbd594b85..e1be1ca01b 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -11,8 +11,8 @@ var/obj/item/device/encryptionkey/keyslot2 = null dog_fashion = null -/obj/item/device/radio/headset/New() - ..() +/obj/item/device/radio/headset/Initialize() + . = ..() recalculateChannels() /obj/item/device/radio/headset/Destroy() @@ -47,21 +47,21 @@ item_state = "syndie_headset" /obj/item/device/radio/headset/syndicate/alt/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, BANG_PROTECT) /obj/item/device/radio/headset/syndicate/alt/leader name = "team leader headset" command = TRUE -/obj/item/device/radio/headset/syndicate/New() - ..() +/obj/item/device/radio/headset/syndicate/Initialize() + . = ..() make_syndie() /obj/item/device/radio/headset/binary origin_tech = "syndicate=3" -/obj/item/device/radio/headset/binary/New() - ..() +/obj/item/device/radio/headset/binary/Initialize() + . = ..() qdel(keyslot) keyslot = new /obj/item/device/encryptionkey/binary recalculateChannels() @@ -79,7 +79,7 @@ item_state = "sec_headset_alt" /obj/item/device/radio/headset/headset_sec/alt/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, BANG_PROTECT) /obj/item/device/radio/headset/headset_eng @@ -134,7 +134,7 @@ item_state = "com_headset_alt" /obj/item/device/radio/headset/heads/captain/alt/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, BANG_PROTECT) /obj/item/device/radio/headset/heads/rd @@ -156,7 +156,7 @@ item_state = "com_headset_alt" /obj/item/device/radio/headset/heads/hos/alt/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, BANG_PROTECT) /obj/item/device/radio/headset/heads/ce @@ -213,7 +213,7 @@ keyslot = null /obj/item/device/radio/headset/headset_cent/alt/Initialize(mapload) - ..() + . = ..() SET_SECONDARY_FLAG(src, BANG_PROTECT) /obj/item/device/radio/headset/ai diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 22a850f905..a7dceaccf1 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -11,8 +11,8 @@ var/last_tick //used to delay the powercheck dog_fashion = null -/obj/item/device/radio/intercom/New() - ..() +/obj/item/device/radio/intercom/Initialize() + . = ..() START_PROCESSING(SSobj, src) /obj/item/device/radio/intercom/Destroy() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 1f2f86e42a..fce3640d22 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,602 +1,600 @@ -/obj/item/device/radio - icon = 'icons/obj/radio.dmi' - name = "station bounced radio" - suffix = "\[3\]" - icon_state = "walkietalkie" - item_state = "walkietalkie" - dog_fashion = /datum/dog_fashion/back - var/on = 1 // 0 for off - var/last_transmission - var/frequency = 1459 //common chat - var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies - var/canhear_range = 3 // the range which mobs can hear this radio from - var/obj/item/device/radio/patch_link = null - var/list/secure_radio_connections - var/prison_radio = 0 - var/b_stat = 0 - var/broadcasting = 0 - var/listening = 1 - var/translate_binary = 0 - var/freerange = 0 // 0 - Sanitize frequencies, 1 - Full range - var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h - var/obj/item/device/encryptionkey/keyslot //To allow the radio to accept encryption keys. - var/subspace_switchable = 0 - var/subspace_transmission = 0 - var/syndie = 0//Holder to see if it's a syndicate encrpyed radio - var/independent = FALSE // If true, bypasses any tcomms machinery. - var/freqlock = 0 //Frequency lock to stop the user from untuning specialist radios. - var/emped = 0 //Highjacked to track the number of consecutive EMPs on the radio, allowing consecutive EMP's to stack properly. -// "Example" = FREQ_LISTENING|FREQ_BROADCASTING - flags = CONDUCT | HEAR - slot_flags = SLOT_BELT - throw_speed = 3 - throw_range = 7 - w_class = WEIGHT_CLASS_SMALL - materials = list(MAT_METAL=75, MAT_GLASS=25) - - var/const/TRANSMISSION_DELAY = 5 // only 2/second/radio - var/const/FREQ_LISTENING = 1 - //FREQ_BROADCASTING = 2 - - var/command = FALSE //If we are speaking into a command headset, our text can be BOLD - var/use_command = FALSE - -/obj/item/device/radio/proc/set_frequency(new_frequency) - remove_radio(src, frequency) - frequency = add_radio(src, new_frequency) - -/obj/item/device/radio/New() - wires = new /datum/wires/radio(src) - if(prison_radio) - wires.cut(WIRE_TX) // OH GOD WHY - secure_radio_connections = new - ..() - -/obj/item/device/radio/proc/recalculateChannels() - channels = list() - translate_binary = 0 - syndie = 0 - independent = FALSE - - if(keyslot) - for(var/ch_name in keyslot.channels) - if(ch_name in src.channels) - continue - channels += ch_name - channels[ch_name] = keyslot.channels[ch_name] - - if(keyslot.translate_binary) - translate_binary = 1 - - if(keyslot.syndie) - syndie = 1 - - if(keyslot.independent) - independent = TRUE - - for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) - -/obj/item/device/radio/proc/make_syndie() // Turns normal radios into Syndicate radios! - qdel(keyslot) - keyslot = new /obj/item/device/encryptionkey/syndicate - syndie = 1 - recalculateChannels() - -/obj/item/device/radio/Destroy() - qdel(wires) - wires = null - remove_radio_all(src) //Just to be sure - patch_link = null - keyslot = null - return ..() - -/obj/item/device/radio/Initialize() - ..() - frequency = sanitize_frequency(frequency, freerange) - set_frequency(frequency) - - for(var/ch_name in channels) - secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) - -/obj/item/device/radio/interact(mob/user) - if (..()) - return - if(b_stat && !isAI(user)) - wires.interact(user) - else - ui_interact(user) - -/obj/item/device/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "radio", name, 370, 220 + channels.len * 22, master_ui, state) - ui.open() - -/obj/item/device/radio/ui_data(mob/user) - var/list/data = list() - - data["broadcasting"] = broadcasting - data["listening"] = listening - data["frequency"] = frequency - data["minFrequency"] = freerange ? MIN_FREE_FREQ : MIN_FREQ - data["maxFrequency"] = freerange ? MAX_FREE_FREQ : MAX_FREQ - data["freqlock"] = freqlock - data["channels"] = list() - for(var/channel in channels) - data["channels"][channel] = channels[channel] & FREQ_LISTENING - data["command"] = command - data["useCommand"] = use_command - data["subspace"] = subspace_transmission - data["subspaceSwitchable"] = subspace_switchable - data["headset"] = istype(src, /obj/item/device/radio/headset) - - return data - -/obj/item/device/radio/ui_act(action, params, datum/tgui/ui) - if(..()) - return - switch(action) - if("frequency") - if(freqlock) - return - var/tune = params["tune"] - var/adjust = text2num(params["adjust"]) - if(tune == "input") - var/min = format_frequency(freerange ? MIN_FREE_FREQ : MIN_FREQ) - var/max = format_frequency(freerange ? MAX_FREE_FREQ : MAX_FREQ) - tune = input("Tune frequency ([min]-[max]):", name, format_frequency(frequency)) as null|num - if(!isnull(tune) && !..()) - . = TRUE - else if(adjust) - tune = frequency + adjust * 10 - . = TRUE - else if(text2num(tune) != null) - tune = tune * 10 - . = TRUE - if(.) - frequency = sanitize_frequency(tune, freerange) - set_frequency(frequency) - if(frequency == traitor_frequency && hidden_uplink) - hidden_uplink.interact(usr) - ui.close() - if("listen") - listening = !listening - . = TRUE - if("broadcast") - broadcasting = !broadcasting - . = TRUE - if("channel") - var/channel = params["channel"] - if(!(channel in channels)) - return - if(channels[channel] & FREQ_LISTENING) - channels[channel] &= ~FREQ_LISTENING - else - channels[channel] |= FREQ_LISTENING - . = TRUE - if("command") - use_command = !use_command - . = TRUE - if("subspace") - if(subspace_switchable) - subspace_transmission = !subspace_transmission - if(!subspace_transmission) - channels = list() - else - recalculateChannels() - . = TRUE - -/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language) - if(!spans) - spans = M.get_spans() - if(!language) - language = M.get_default_language() - INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans, language) - return ITALICS | REDUCE_RANGE - -/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language) - if(!on) return // the device has to be on - // Fix for permacell radios, but kinda eh about actually fixing them. - if(!M || !message) return - - if(wires.is_cut(WIRE_TX)) - return - - if(!M.IsVocal()) - return - - if(use_command) - spans |= SPAN_COMMAND - - /* Quick introduction: - This new radio system uses a very robust FTL signaling technology unoriginally - dubbed "subspace" which is somewhat similar to 'blue-space' but can't - actually transmit large mass. Headsets are the only radio devices capable - of sending subspace transmissions to the Communications Satellite. - - A headset sends a signal to a subspace listener/reciever elsewhere in space, - the signal gets processed and logged, and an audible transmission gets sent - to each individual headset. - */ - - /* - be prepared to disregard any comments in all of tcomms code. i tried my best to keep them somewhat up-to-date, but eh - */ - - //get the frequency you buttface. radios no longer use the SSradio. confusing for future generations, convenient for me. - var/freq - if(channel && channels && channels.len > 0) - if(channel == "department") - channel = channels[1] - freq = secure_radio_connections[channel] - if (!channels[channel]) // if the channel is turned off, don't broadcast - return - else - freq = frequency - channel = null - - var/freqnum = text2num(freq) //Why should we call text2num three times when we can just do it here? - var/turf/position = get_turf(src) - - var/jammed = FALSE - for(var/obj/item/device/jammer/jammer in GLOB.active_jammers) - if(get_dist(position,get_turf(jammer)) < jammer.range) - jammed = TRUE - break - - //#### Tagging the signal with all appropriate identity values ####// - - // ||-- The mob's name identity --|| - var/real_name = M.name // mob's real name - var/mobkey = "none" // player key associated with mob - var/voicemask = 0 // the speaker is wearing a voice mask - var/voice = M.GetVoice() // Why reinvent the wheel when there is a proc that does nice things already - if(ismob(M)) - var/mob/speaker = M - real_name = speaker.real_name - if(speaker.client) - mobkey = speaker.key // assign the mob's key - - - var/jobname // the mob's "job" - - if(jammed) - message = Gibberish(message,100) - - // --- Human: use their job as seen on the crew manifest - makes it unneeded to carry an ID for an AI to see their job - if(ishuman(M)) - var/datum/data/record/findjob = find_record("name", voice, GLOB.data_core.general) - - if(voice != real_name) - voicemask = 1 - if(findjob) - jobname = findjob.fields["rank"] - else - jobname = "Unknown" - - // --- Carbon Nonhuman --- - else if(iscarbon(M)) // Nonhuman carbon mob - jobname = "No id" - - // --- AI --- - else if(isAI(M)) - jobname = "AI" - - // --- Cyborg --- - else if(iscyborg(M)) - var/mob/living/silicon/robot/B = M - jobname = "[B.designation] Cyborg" - - // --- Personal AI (pAI) --- - else if(istype(M, /mob/living/silicon/pai)) - jobname = "Personal AI" - - // --- Cold, emotionless machines. --- - else if(isobj(M)) - jobname = "Machine" - - // --- Unidentifiable mob --- - else - jobname = "Unknown" - - /* ###### `independent` radios bypass all comms relays. ###### */ - - if(independent) - var/datum/signal/signal = new - signal.transmission_method = 2 - signal.data = list( - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = voice, // the mob's voice name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmask" = voicemask, // 1 if the mob is using a voice gas mas - - "compression" = 0, // uncompressed radio signal - "message" = message, // the actual sent message - "radio" = src, // stores the radio used for transmission - "slow" = 0, - "traffic" = 0, - "type" = 0, - "server" = null, - "reject" = 0, - "level" = 0, - "language" = language, - "spans" = spans, - "verb_say" = M.verb_say, - "verb_ask" = M.verb_ask, - "verb_exclaim" = M.verb_exclaim, - "verb_yell" = M.verb_yell, - ) - signal.frequency = freqnum // Quick frequency set - Broadcast_Message(M, voicemask, - src, message, voice, jobname, real_name, - 5, signal.data["compression"], list(position.z, 0), freq, spans, - verb_say, verb_ask, verb_exclaim, verb_yell, language) - return - - /* ###### Radio headsets can only broadcast through subspace ###### */ - - if(subspace_transmission) - // First, we want to generate a new radio signal - var/datum/signal/signal = new - signal.transmission_method = 2 // 2 would be a subspace transmission. - // transmission_method could probably be enumerated through #define. Would be neater. - // --- Finally, tag the actual signal with the appropriate values --- - signal.data = list( - // Identity-associated tags: - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = voice, // the mob's voice name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmask" = voicemask, // 1 if the mob is using a voice gas mask - - // We store things that would otherwise be kept in the actual mob - // so that they can be logged even AFTER the mob is deleted or something - - // Other tags: - "compression" = rand(35,65), // compressed radio signal - "message" = message, // the actual sent message - "radio" = src, // stores the radio used for transmission - "slow" = 0, // how much to sleep() before broadcasting - simulates net lag - "traffic" = 0, // dictates the total traffic sum that the signal went through - "type" = 0, // determines what type of radio input it is: normal broadcast - "server" = null, // the last server to log this signal - "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery - "level" = position.z, // The source's z level - "language" = language, - "spans" = spans, //the span classes of this message. - "verb_say" = M.verb_say, //the verb used when talking normally - "verb_ask" = M.verb_ask, //the verb used when asking - "verb_exclaim" = M.verb_exclaim, //the verb used when exclaiming - "verb_yell" = M.verb_yell //the verb used when yelling - ) - signal.frequency = freq - - //#### Sending the signal to all subspace receivers ####// - - for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) - R.receive_signal(signal) - - // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) - R.receive_signal(signal) - - // Receiving code can be located in Telecommunications.dm - return - - - /* ###### Intercoms and station-bounced radios ###### */ - - var/filter_type = 2 - - var/datum/signal/signal = new - signal.transmission_method = 2 - - - /* --- Try to send a normal subspace broadcast first */ - - signal.data = list( - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = voice, // the mob's voice name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmask" = voicemask, // 1 if the mob is using a voice gas mas - - "compression" = 0, // uncompressed radio signal - "message" = message, // the actual sent message - "radio" = src, // stores the radio used for transmission - "slow" = 0, - "traffic" = 0, - "type" = 0, - "server" = null, - "reject" = 0, - "level" = position.z, - "language" = language, - "spans" = spans, - "verb_say" = M.verb_say, - "verb_ask" = M.verb_ask, - "verb_exclaim" = M.verb_exclaim, - "verb_yell" = M.verb_yell - ) - signal.frequency = freqnum // Quick frequency set - for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) - R.receive_signal(signal) - - - spawn(20) // wait a little... - - if(signal.data["done"] && position.z in signal.data["level"]) - // we're done here. - return - - // Oh my god; the comms are down or something because the signal hasn't been broadcasted yet in our level. - // Send a mundane broadcast with limited targets: - Broadcast_Message(M, voicemask, - src, message, voice, jobname, real_name, - filter_type, signal.data["compression"], list(position.z), freq, spans, - verb_say, verb_ask, verb_exclaim, verb_yell, language) - -/obj/item/device/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - if(radio_freq) - return - if(broadcasting) - if(get_dist(src, speaker) <= canhear_range) - talk_into(speaker, raw_message, , spans, language=message_language) -/* -/obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message) - - if ((R.frequency == frequency && message)) - return 1 - else if - - else - return null - return -*/ - - -/obj/item/device/radio/proc/receive_range(freq, level) - // check if this radio can receive on the given frequency, and if so, - // what the range is in which mobs will hear the radio - // returns: -1 if can't receive, range otherwise - - if (wires.is_cut(WIRE_RX)) - return -1 - if(!listening) - return -1 - if(!(0 in level)) - var/turf/position = get_turf(src) - if(!position || !(position.z in level)) - return -1 - if(freq == GLOB.SYND_FREQ) - if(!(src.syndie)) //Checks to see if it's allowed on that frequency, based on the encryption keys - return -1 - if(freq == GLOB.CENTCOM_FREQ) - if(!independent) - return -1 - if (!on) - return -1 - if (!freq) //received on main frequency - if (!listening) - return -1 - else - var/accept = (freq==frequency && listening) - if (!accept) - for(var/ch_name in channels) - if(channels[ch_name] & FREQ_LISTENING) - if(GLOB.radiochannels[ch_name] == text2num(freq) || syndie) //the GLOB.radiochannels list is located in communications.dm - accept = 1 - break - if (!accept) - return -1 - return canhear_range - -/obj/item/device/radio/proc/send_hear(freq, level) - - var/range = receive_range(freq, level) - if(range > -1) - return get_hearers_in_view(canhear_range, src) - - -/obj/item/device/radio/examine(mob/user) - ..() - if (b_stat) - to_chat(user, "[name] can be attached and modified.") - else - to_chat(user, "[name] can not be modified or attached.") - -/obj/item/device/radio/attackby(obj/item/weapon/W, mob/user, params) - add_fingerprint(user) - if(istype(W, /obj/item/weapon/screwdriver)) - b_stat = !b_stat - if(b_stat) - to_chat(user, "The radio can now be attached and modified!") - else - to_chat(user, "The radio can no longer be modified or attached!") - else - return ..() - -/obj/item/device/radio/emp_act(severity) - emped++ //There's been an EMP; better count it - var/curremp = emped //Remember which EMP this was - if (listening && ismob(loc)) // if the radio is turned on and on someone's person they notice - to_chat(loc, "\The [src] overloads.") - broadcasting = 0 - listening = 0 - for (var/ch_name in channels) - channels[ch_name] = 0 - on = 0 - spawn(200) - if(emped == curremp) //Don't fix it if it's been EMP'd again - emped = 0 - if (!istype(src, /obj/item/device/radio/intercom)) // intercoms will turn back on on their own - on = 1 - ..() - -/////////////////////////////// -//////////Borg Radios////////// -/////////////////////////////// -//Giving borgs their own radio to have some more room to work with -Sieve - -/obj/item/device/radio/borg - name = "cyborg radio" - subspace_switchable = 1 - dog_fashion = null - -/obj/item/device/radio/borg/Initialize(mapload) - ..() - SET_SECONDARY_FLAG(src, NO_EMP_WIRES) - -/obj/item/device/radio/borg/syndicate - syndie = 1 - keyslot = new /obj/item/device/encryptionkey/syndicate - -/obj/item/device/radio/borg/syndicate/New() - ..() - set_frequency(GLOB.SYND_FREQ) - -/obj/item/device/radio/borg/attackby(obj/item/weapon/W, mob/user, params) - - if(istype(W, /obj/item/weapon/screwdriver)) - if(keyslot) - for(var/ch_name in channels) - SSradio.remove_object(src, GLOB.radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - - if(keyslot) - var/turf/T = get_turf(user) - if(T) - keyslot.loc = T - keyslot = null - - recalculateChannels() - to_chat(user, "You pop out the encryption key in the radio.") - - else - to_chat(user, "This radio doesn't have any encryption keys!") - - else if(istype(W, /obj/item/device/encryptionkey/)) - if(keyslot) - to_chat(user, "The radio can't hold another key!") - return - - if(!keyslot) - if(!user.transferItemToLoc(W, src)) - return - keyslot = W - - recalculateChannels() - - -/obj/item/device/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. - listening = 0 // And it's nice to have a subtype too for future features. - dog_fashion = /datum/dog_fashion/back +/obj/item/device/radio + icon = 'icons/obj/radio.dmi' + name = "station bounced radio" + suffix = "\[3\]" + icon_state = "walkietalkie" + item_state = "walkietalkie" + dog_fashion = /datum/dog_fashion/back + var/on = 1 // 0 for off + var/last_transmission + var/frequency = 1459 //common chat + var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies + var/canhear_range = 3 // the range which mobs can hear this radio from + var/obj/item/device/radio/patch_link = null + var/list/secure_radio_connections + var/prison_radio = 0 + var/b_stat = 0 + var/broadcasting = 0 + var/listening = 1 + var/translate_binary = 0 + var/freerange = 0 // 0 - Sanitize frequencies, 1 - Full range + var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h + var/obj/item/device/encryptionkey/keyslot //To allow the radio to accept encryption keys. + var/subspace_switchable = 0 + var/subspace_transmission = 0 + var/syndie = 0//Holder to see if it's a syndicate encrpyed radio + var/independent = FALSE // If true, bypasses any tcomms machinery. + var/freqlock = 0 //Frequency lock to stop the user from untuning specialist radios. + var/emped = 0 //Highjacked to track the number of consecutive EMPs on the radio, allowing consecutive EMP's to stack properly. +// "Example" = FREQ_LISTENING|FREQ_BROADCASTING + flags = CONDUCT | HEAR + slot_flags = SLOT_BELT + throw_speed = 3 + throw_range = 7 + w_class = WEIGHT_CLASS_SMALL + materials = list(MAT_METAL=75, MAT_GLASS=25) + + var/const/TRANSMISSION_DELAY = 5 // only 2/second/radio + var/const/FREQ_LISTENING = 1 + //FREQ_BROADCASTING = 2 + + var/command = FALSE //If we are speaking into a command headset, our text can be BOLD + var/use_command = FALSE + +/obj/item/device/radio/proc/set_frequency(new_frequency) + remove_radio(src, frequency) + frequency = add_radio(src, new_frequency) + +/obj/item/device/radio/proc/recalculateChannels() + channels = list() + translate_binary = 0 + syndie = 0 + independent = FALSE + + if(keyslot) + for(var/ch_name in keyslot.channels) + if(ch_name in src.channels) + continue + channels += ch_name + channels[ch_name] = keyslot.channels[ch_name] + + if(keyslot.translate_binary) + translate_binary = 1 + + if(keyslot.syndie) + syndie = 1 + + if(keyslot.independent) + independent = TRUE + + for(var/ch_name in channels) + secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) + +/obj/item/device/radio/proc/make_syndie() // Turns normal radios into Syndicate radios! + qdel(keyslot) + keyslot = new /obj/item/device/encryptionkey/syndicate + syndie = 1 + recalculateChannels() + +/obj/item/device/radio/Destroy() + qdel(wires) + wires = null + remove_radio_all(src) //Just to be sure + patch_link = null + keyslot = null + return ..() + +/obj/item/device/radio/Initialize() + wires = new /datum/wires/radio(src) + if(prison_radio) + wires.cut(WIRE_TX) // OH GOD WHY + secure_radio_connections = new + . = ..() + frequency = sanitize_frequency(frequency, freerange) + set_frequency(frequency) + + for(var/ch_name in channels) + secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) + +/obj/item/device/radio/interact(mob/user) + if (..()) + return + if(b_stat && !isAI(user)) + wires.interact(user) + else + ui_interact(user) + +/obj/item/device/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio", name, 370, 220 + channels.len * 22, master_ui, state) + ui.open() + +/obj/item/device/radio/ui_data(mob/user) + var/list/data = list() + + data["broadcasting"] = broadcasting + data["listening"] = listening + data["frequency"] = frequency + data["minFrequency"] = freerange ? MIN_FREE_FREQ : MIN_FREQ + data["maxFrequency"] = freerange ? MAX_FREE_FREQ : MAX_FREQ + data["freqlock"] = freqlock + data["channels"] = list() + for(var/channel in channels) + data["channels"][channel] = channels[channel] & FREQ_LISTENING + data["command"] = command + data["useCommand"] = use_command + data["subspace"] = subspace_transmission + data["subspaceSwitchable"] = subspace_switchable + data["headset"] = istype(src, /obj/item/device/radio/headset) + + return data + +/obj/item/device/radio/ui_act(action, params, datum/tgui/ui) + if(..()) + return + switch(action) + if("frequency") + if(freqlock) + return + var/tune = params["tune"] + var/adjust = text2num(params["adjust"]) + if(tune == "input") + var/min = format_frequency(freerange ? MIN_FREE_FREQ : MIN_FREQ) + var/max = format_frequency(freerange ? MAX_FREE_FREQ : MAX_FREQ) + tune = input("Tune frequency ([min]-[max]):", name, format_frequency(frequency)) as null|num + if(!isnull(tune) && !..()) + . = TRUE + else if(adjust) + tune = frequency + adjust * 10 + . = TRUE + else if(text2num(tune) != null) + tune = tune * 10 + . = TRUE + if(.) + frequency = sanitize_frequency(tune, freerange) + set_frequency(frequency) + if(frequency == traitor_frequency && hidden_uplink) + hidden_uplink.interact(usr) + ui.close() + if("listen") + listening = !listening + . = TRUE + if("broadcast") + broadcasting = !broadcasting + . = TRUE + if("channel") + var/channel = params["channel"] + if(!(channel in channels)) + return + if(channels[channel] & FREQ_LISTENING) + channels[channel] &= ~FREQ_LISTENING + else + channels[channel] |= FREQ_LISTENING + . = TRUE + if("command") + use_command = !use_command + . = TRUE + if("subspace") + if(subspace_switchable) + subspace_transmission = !subspace_transmission + if(!subspace_transmission) + channels = list() + else + recalculateChannels() + . = TRUE + +/obj/item/device/radio/talk_into(atom/movable/M, message, channel, list/spans, datum/language/language) + if(!spans) + spans = M.get_spans() + if(!language) + language = M.get_default_language() + INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans, language) + return ITALICS | REDUCE_RANGE + +/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language) + if(!on) return // the device has to be on + // Fix for permacell radios, but kinda eh about actually fixing them. + if(!M || !message) return + + if(wires.is_cut(WIRE_TX)) + return + + if(!M.IsVocal()) + return + + if(use_command) + spans |= SPAN_COMMAND + + /* Quick introduction: + This new radio system uses a very robust FTL signaling technology unoriginally + dubbed "subspace" which is somewhat similar to 'blue-space' but can't + actually transmit large mass. Headsets are the only radio devices capable + of sending subspace transmissions to the Communications Satellite. + + A headset sends a signal to a subspace listener/reciever elsewhere in space, + the signal gets processed and logged, and an audible transmission gets sent + to each individual headset. + */ + + /* + be prepared to disregard any comments in all of tcomms code. i tried my best to keep them somewhat up-to-date, but eh + */ + + //get the frequency you buttface. radios no longer use the SSradio. confusing for future generations, convenient for me. + var/freq + if(channel && channels && channels.len > 0) + if(channel == "department") + channel = channels[1] + freq = secure_radio_connections[channel] + if (!channels[channel]) // if the channel is turned off, don't broadcast + return + else + freq = frequency + channel = null + + var/freqnum = text2num(freq) //Why should we call text2num three times when we can just do it here? + var/turf/position = get_turf(src) + + var/jammed = FALSE + for(var/obj/item/device/jammer/jammer in GLOB.active_jammers) + if(get_dist(position,get_turf(jammer)) < jammer.range) + jammed = TRUE + break + + //#### Tagging the signal with all appropriate identity values ####// + + // ||-- The mob's name identity --|| + var/real_name = M.name // mob's real name + var/mobkey = "none" // player key associated with mob + var/voicemask = 0 // the speaker is wearing a voice mask + var/voice = M.GetVoice() // Why reinvent the wheel when there is a proc that does nice things already + if(ismob(M)) + var/mob/speaker = M + real_name = speaker.real_name + if(speaker.client) + mobkey = speaker.key // assign the mob's key + + + var/jobname // the mob's "job" + + if(jammed) + message = Gibberish(message,100) + + // --- Human: use their job as seen on the crew manifest - makes it unneeded to carry an ID for an AI to see their job + if(ishuman(M)) + var/datum/data/record/findjob = find_record("name", voice, GLOB.data_core.general) + + if(voice != real_name) + voicemask = 1 + if(findjob) + jobname = findjob.fields["rank"] + else + jobname = "Unknown" + + // --- Carbon Nonhuman --- + else if(iscarbon(M)) // Nonhuman carbon mob + jobname = "No id" + + // --- AI --- + else if(isAI(M)) + jobname = "AI" + + // --- Cyborg --- + else if(iscyborg(M)) + var/mob/living/silicon/robot/B = M + jobname = "[B.designation] Cyborg" + + // --- Personal AI (pAI) --- + else if(istype(M, /mob/living/silicon/pai)) + jobname = "Personal AI" + + // --- Cold, emotionless machines. --- + else if(isobj(M)) + jobname = "Machine" + voice = capitalize(voice) + + // --- Unidentifiable mob --- + else + jobname = "Unknown" + + /* ###### `independent` radios bypass all comms relays. ###### */ + + if(independent) + var/datum/signal/signal = new + signal.transmission_method = 2 + signal.data = list( + "mob" = M, // store a reference to the mob + "mobtype" = M.type, // the mob's type + "realname" = real_name, // the mob's real name + "name" = voice, // the mob's voice name + "job" = jobname, // the mob's job + "key" = mobkey, // the mob's key + "vmask" = voicemask, // 1 if the mob is using a voice gas mas + + "compression" = 0, // uncompressed radio signal + "message" = message, // the actual sent message + "radio" = src, // stores the radio used for transmission + "slow" = 0, + "traffic" = 0, + "type" = 0, + "server" = null, + "reject" = 0, + "level" = 0, + "language" = language, + "spans" = spans, + "verb_say" = M.verb_say, + "verb_ask" = M.verb_ask, + "verb_exclaim" = M.verb_exclaim, + "verb_yell" = M.verb_yell, + ) + signal.frequency = freqnum // Quick frequency set + Broadcast_Message(M, voicemask, + src, message, voice, jobname, real_name, + 5, signal.data["compression"], list(position.z, 0), freq, spans, + verb_say, verb_ask, verb_exclaim, verb_yell, language) + return + + /* ###### Radio headsets can only broadcast through subspace ###### */ + + if(subspace_transmission) + // First, we want to generate a new radio signal + var/datum/signal/signal = new + signal.transmission_method = 2 // 2 would be a subspace transmission. + // transmission_method could probably be enumerated through #define. Would be neater. + // --- Finally, tag the actual signal with the appropriate values --- + signal.data = list( + // Identity-associated tags: + "mob" = M, // store a reference to the mob + "mobtype" = M.type, // the mob's type + "realname" = real_name, // the mob's real name + "name" = voice, // the mob's voice name + "job" = jobname, // the mob's job + "key" = mobkey, // the mob's key + "vmask" = voicemask, // 1 if the mob is using a voice gas mask + + // We store things that would otherwise be kept in the actual mob + // so that they can be logged even AFTER the mob is deleted or something + + // Other tags: + "compression" = rand(35,65), // compressed radio signal + "message" = message, // the actual sent message + "radio" = src, // stores the radio used for transmission + "slow" = 0, // how much to sleep() before broadcasting - simulates net lag + "traffic" = 0, // dictates the total traffic sum that the signal went through + "type" = 0, // determines what type of radio input it is: normal broadcast + "server" = null, // the last server to log this signal + "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery + "level" = position.z, // The source's z level + "language" = language, + "spans" = spans, //the span classes of this message. + "verb_say" = M.verb_say, //the verb used when talking normally + "verb_ask" = M.verb_ask, //the verb used when asking + "verb_exclaim" = M.verb_exclaim, //the verb used when exclaiming + "verb_yell" = M.verb_yell //the verb used when yelling + ) + signal.frequency = freq + + //#### Sending the signal to all subspace receivers ####// + + for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) + R.receive_signal(signal) + + // Allinone can act as receivers. + for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) + R.receive_signal(signal) + + // Receiving code can be located in Telecommunications.dm + return + + + /* ###### Intercoms and station-bounced radios ###### */ + + var/filter_type = 2 + + var/datum/signal/signal = new + signal.transmission_method = 2 + + + /* --- Try to send a normal subspace broadcast first */ + + signal.data = list( + "mob" = M, // store a reference to the mob + "mobtype" = M.type, // the mob's type + "realname" = real_name, // the mob's real name + "name" = voice, // the mob's voice name + "job" = jobname, // the mob's job + "key" = mobkey, // the mob's key + "vmask" = voicemask, // 1 if the mob is using a voice gas mas + + "compression" = 0, // uncompressed radio signal + "message" = message, // the actual sent message + "radio" = src, // stores the radio used for transmission + "slow" = 0, + "traffic" = 0, + "type" = 0, + "server" = null, + "reject" = 0, + "level" = position.z, + "language" = language, + "spans" = spans, + "verb_say" = M.verb_say, + "verb_ask" = M.verb_ask, + "verb_exclaim" = M.verb_exclaim, + "verb_yell" = M.verb_yell + ) + signal.frequency = freqnum // Quick frequency set + for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) + R.receive_signal(signal) + + + spawn(20) // wait a little... + + if(signal.data["done"] && position.z in signal.data["level"]) + // we're done here. + return + + // Oh my god; the comms are down or something because the signal hasn't been broadcasted yet in our level. + // Send a mundane broadcast with limited targets: + Broadcast_Message(M, voicemask, + src, message, voice, jobname, real_name, + filter_type, signal.data["compression"], list(position.z), freq, spans, + verb_say, verb_ask, verb_exclaim, verb_yell, language) + +/obj/item/device/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + if(radio_freq) + return + if(broadcasting) + if(get_dist(src, speaker) <= canhear_range) + talk_into(speaker, raw_message, , spans, language=message_language) +/* +/obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message) + + if ((R.frequency == frequency && message)) + return 1 + else if + + else + return null + return +*/ + + +/obj/item/device/radio/proc/receive_range(freq, level) + // check if this radio can receive on the given frequency, and if so, + // what the range is in which mobs will hear the radio + // returns: -1 if can't receive, range otherwise + + if (wires.is_cut(WIRE_RX)) + return -1 + if(!listening) + return -1 + if(!(0 in level)) + var/turf/position = get_turf(src) + if(!position || !(position.z in level)) + return -1 + if(freq == GLOB.SYND_FREQ) + if(!(src.syndie)) //Checks to see if it's allowed on that frequency, based on the encryption keys + return -1 + if(freq == GLOB.CENTCOM_FREQ) + if(!independent) + return -1 + if (!on) + return -1 + if (!freq) //received on main frequency + if (!listening) + return -1 + else + var/accept = (freq==frequency && listening) + if (!accept) + for(var/ch_name in channels) + if(channels[ch_name] & FREQ_LISTENING) + if(GLOB.radiochannels[ch_name] == text2num(freq) || syndie) //the GLOB.radiochannels list is located in communications.dm + accept = 1 + break + if (!accept) + return -1 + return canhear_range + +/obj/item/device/radio/proc/send_hear(freq, level) + + var/range = receive_range(freq, level) + if(range > -1) + return get_hearers_in_view(canhear_range, src) + + +/obj/item/device/radio/examine(mob/user) + ..() + if (b_stat) + to_chat(user, "[name] can be attached and modified.") + else + to_chat(user, "[name] can not be modified or attached.") + +/obj/item/device/radio/attackby(obj/item/weapon/W, mob/user, params) + add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) + b_stat = !b_stat + if(b_stat) + to_chat(user, "The radio can now be attached and modified!") + else + to_chat(user, "The radio can no longer be modified or attached!") + else + return ..() + +/obj/item/device/radio/emp_act(severity) + emped++ //There's been an EMP; better count it + var/curremp = emped //Remember which EMP this was + if (listening && ismob(loc)) // if the radio is turned on and on someone's person they notice + to_chat(loc, "\The [src] overloads.") + broadcasting = 0 + listening = 0 + for (var/ch_name in channels) + channels[ch_name] = 0 + on = 0 + spawn(200) + if(emped == curremp) //Don't fix it if it's been EMP'd again + emped = 0 + if (!istype(src, /obj/item/device/radio/intercom)) // intercoms will turn back on on their own + on = 1 + ..() + +/////////////////////////////// +//////////Borg Radios////////// +/////////////////////////////// +//Giving borgs their own radio to have some more room to work with -Sieve + +/obj/item/device/radio/borg + name = "cyborg radio" + subspace_switchable = 1 + dog_fashion = null + +/obj/item/device/radio/borg/Initialize(mapload) + ..() + SET_SECONDARY_FLAG(src, NO_EMP_WIRES) + +/obj/item/device/radio/borg/syndicate + syndie = 1 + keyslot = new /obj/item/device/encryptionkey/syndicate + +/obj/item/device/radio/borg/syndicate/Initialize() + . = ..() + set_frequency(GLOB.SYND_FREQ) + +/obj/item/device/radio/borg/attackby(obj/item/weapon/W, mob/user, params) + + if(istype(W, /obj/item/weapon/screwdriver)) + if(keyslot) + for(var/ch_name in channels) + SSradio.remove_object(src, GLOB.radiochannels[ch_name]) + secure_radio_connections[ch_name] = null + + + if(keyslot) + var/turf/T = get_turf(user) + if(T) + keyslot.loc = T + keyslot = null + + recalculateChannels() + to_chat(user, "You pop out the encryption key in the radio.") + + else + to_chat(user, "This radio doesn't have any encryption keys!") + + else if(istype(W, /obj/item/device/encryptionkey/)) + if(keyslot) + to_chat(user, "The radio can't hold another key!") + return + + if(!keyslot) + if(!user.transferItemToLoc(W, src)) + return + keyslot = W + + recalculateChannels() + + +/obj/item/device/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. + listening = 0 // And it's nice to have a subtype too for future features. + dog_fashion = /datum/dog_fashion/back \ No newline at end of file diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 257418eaa7..635338fe96 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -178,21 +178,21 @@ var/log_attacher = "" if(attacher) - log_attacher = "(?) (FLW)" + log_attacher = "[ADMIN_QUE(attacher)] [ADMIN_FLW(attacher)]" var/mob/mob = get_mob_by_key(src.fingerprintslast) var/last_touch_info = "" if(mob) - last_touch_info = "(?) (FLW)" + last_touch_info = "[ADMIN_QUE(mob)] [ADMIN_FLW(mob)]" var/log_str3 = " Last touched by: [key_name_admin(mob)]" - var/bomb_message = "[log_str1] [A.name] [log_str2][log_attacher] [log_str3][last_touch_info]" + var/bomb_message = "[log_str1] [A.name][ADMIN_JMP(bombturf)] [log_str2][log_attacher] [log_str3][last_touch_info]" GLOB.bombers += bomb_message message_admins(bomb_message, 0, 1) - log_game("[log_str1] [A.name]([A.x],[A.y],[A.z]) [log_str2] [log_str3]") + log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]") merge_gases() spawn(20) // In case one tank bursts for (var/i=0,i<5,i++) diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 28e42813b6..ae3a45f457 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "eightball" + w_class = WEIGHT_CLASS_TINY verb_say = "rattles" diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2aee5acdd9..185ddf23e6 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -1,402 +1,403 @@ -// robot_upgrades.dm -// Contains various borg upgrades. - -/obj/item/borg/upgrade - name = "borg upgrade module." - desc = "Protected by FRM." - icon = 'icons/obj/module.dmi' - icon_state = "cyborg_upgrade" - origin_tech = "programming=2" - var/locked = 0 - var/installed = 0 - var/require_module = 0 - var/module_type = null - // if true, is not stored in the robot to be ejected - // if module is reset - var/one_use = FALSE - -/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R) - if(R.stat == DEAD) - to_chat(usr, "[src] will not function on a deceased cyborg.") - return 1 - if(module_type && !istype(R.module, module_type)) - to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") - to_chat(usr, "There's no mounting point for the module!") - return 1 - -/obj/item/borg/upgrade/rename - name = "cyborg reclassification board" - desc = "Used to rename a cyborg." - icon_state = "cyborg_upgrade1" - var/heldname = "" - one_use = TRUE - -/obj/item/borg/upgrade/rename/attack_self(mob/user) - heldname = stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN) - -/obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R) - if(..()) - return - - var/oldname = R.real_name - - R.custom_name = heldname - R.updatename() - if(oldname == R.real_name) - R.notify_ai(RENAME, oldname, R.real_name) - - return 1 - - -/obj/item/borg/upgrade/restart - name = "cyborg emergency reboot module" - desc = "Used to force a reboot of a disabled-but-repaired cyborg, bringing it back online." - icon_state = "cyborg_upgrade1" - one_use = TRUE - -/obj/item/borg/upgrade/restart/action(mob/living/silicon/robot/R) - if(R.health < 0) - to_chat(usr, "You have to repair the cyborg before using this module!") - return 0 - - if(R.mind) - R.mind.grab_ghost() - playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) - - R.revive() - - return 1 - -/obj/item/borg/upgrade/vtec - name = "cyborg VTEC module" - desc = "Used to kick in a cyborg's VTEC systems, increasing their speed." - icon_state = "cyborg_upgrade2" - require_module = 1 - origin_tech = "engineering=4;materials=5;programming=4" - -/obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R) - if(..()) - return - if(R.speed < 0) - to_chat(R, "A VTEC unit is already installed!") - to_chat(usr, "There's no room for another VTEC unit!") - return - - R.speed = -2 // Gotta go fast. - - return 1 - -/obj/item/borg/upgrade/disablercooler - name = "cyborg rapid disabler cooling module" - desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/security - origin_tech = "engineering=4;powerstorage=4;combat=4" - -/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R) - if(..()) - return - - var/obj/item/weapon/gun/energy/disabler/cyborg/T = locate() in R.module.modules - if(!T) - to_chat(usr, "There's no disabler in this unit!") - return - if(T.charge_delay <= 2) - to_chat(R, "A cooling unit is already installed!") - to_chat(usr, "There's no room for another cooling unit!") - return - - T.charge_delay = max(2 , T.charge_delay - 4) - - return 1 - -/obj/item/borg/upgrade/thrusters - name = "ion thruster upgrade" - desc = "A energy-operated thruster system for cyborgs." - icon_state = "cyborg_upgrade3" - origin_tech = "engineering=4;powerstorage=4" - -/obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R) - if(..()) - return - - if(R.ionpulse) - to_chat(usr, "This unit already has ion thrusters installed!") - return - - R.ionpulse = TRUE - return 1 - -/obj/item/borg/upgrade/ddrill - name = "mining cyborg diamond drill" - desc = "A diamond drill replacement for the mining module's standard drill." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/miner - origin_tech = "engineering=4;materials=5" - -/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R) - if(..()) - return - - for(var/obj/item/weapon/pickaxe/drill/cyborg/D in R.module) - R.module.remove_module(D, TRUE) - for(var/obj/item/weapon/shovel/S in R.module) - R.module.remove_module(S, TRUE) - - var/obj/item/weapon/pickaxe/drill/cyborg/diamond/DD = new /obj/item/weapon/pickaxe/drill/cyborg/diamond(R.module) - R.module.basic_modules += DD - R.module.add_module(DD, FALSE, TRUE) - return 1 - -/obj/item/borg/upgrade/soh - name = "mining cyborg satchel of holding" - desc = "A satchel of holding replacement for mining cyborg's ore satchel module." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/miner - origin_tech = "engineering=4;materials=4;bluespace=4" - -/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R) - if(..()) - return - - for(var/obj/item/weapon/storage/bag/ore/cyborg/S in R.module) - R.module.remove_module(S, TRUE) - - var/obj/item/weapon/storage/bag/ore/holding/H = new /obj/item/weapon/storage/bag/ore/holding(R.module) - R.module.basic_modules += H - R.module.add_module(H, FALSE, TRUE) - return 1 - -/obj/item/borg/upgrade/syndicate - name = "illegal equipment module" - desc = "Unlocks the hidden, deadlier functions of a cyborg" - icon_state = "cyborg_upgrade3" - require_module = 1 - origin_tech = "combat=4;syndicate=1" - -/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R) - if(..()) - return - - if(R.emagged) - return - - R.SetEmagged(1) - - return 1 - -/obj/item/borg/upgrade/lavaproof - name = "mining cyborg lavaproof tracks" - desc = "An upgrade kit to apply specialized coolant systems and insulation layers to mining cyborg tracks, enabling them to withstand exposure to molten rock." - icon_state = "ash_plating" - resistance_flags = LAVA_PROOF | FIRE_PROOF - require_module = 1 - module_type = /obj/item/weapon/robot_module/miner - origin_tech = "engineering=4;materials=4;plasmatech=4" - -/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R) - if(..()) - return - R.weather_immunities += "lava" - return 1 - -/obj/item/borg/upgrade/selfrepair - name = "self-repair module" - desc = "This module will repair the cyborg over time." - icon_state = "cyborg_upgrade5" - require_module = 1 - var/repair_amount = -1 - var/repair_tick = 1 - var/msg_cooldown = 0 - var/on = 0 - var/powercost = 10 - var/mob/living/silicon/robot/cyborg - var/datum/action/toggle_action - -/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R) - if(..()) - return - - var/obj/item/borg/upgrade/selfrepair/U = locate() in R - if(U) - to_chat(usr, "This unit is already equipped with a self-repair module.") - return 0 - - cyborg = R - icon_state = "selfrepair_off" - toggle_action = new /datum/action/item_action/toggle(src) - toggle_action.Grant(R) - return 1 - -/obj/item/borg/upgrade/selfrepair/dropped() - addtimer(CALLBACK(src, .proc/check_dropped), 1) - -/obj/item/borg/upgrade/selfrepair/proc/check_dropped() - if(loc != cyborg) - toggle_action.Remove(cyborg) - cyborg = null - deactivate() - -/obj/item/borg/upgrade/selfrepair/ui_action_click() - on = !on - if(on) - to_chat(cyborg, "You activate the self-repair module.") - START_PROCESSING(SSobj, src) - else - to_chat(cyborg, "You deactivate the self-repair module.") - STOP_PROCESSING(SSobj, src) - update_icon() - -/obj/item/borg/upgrade/selfrepair/update_icon() - if(cyborg) - icon_state = "selfrepair_[on ? "on" : "off"]" - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - else - icon_state = "cyborg_upgrade5" - -/obj/item/borg/upgrade/selfrepair/proc/deactivate() - STOP_PROCESSING(SSobj, src) - on = FALSE - update_icon() - -/obj/item/borg/upgrade/selfrepair/process() - if(!repair_tick) - repair_tick = 1 - return - - if(cyborg && (cyborg.stat != DEAD) && on) - if(!cyborg.cell) - to_chat(cyborg, "Self-repair module deactivated. Please, insert the power cell.") - deactivate() - return - - if(cyborg.cell.charge < powercost * 2) - to_chat(cyborg, "Self-repair module deactivated. Please recharge.") - deactivate() - return - - if(cyborg.health < cyborg.maxHealth) - if(cyborg.health < 0) - repair_amount = -2.5 - powercost = 30 - else - repair_amount = -1 - powercost = 10 - cyborg.adjustBruteLoss(repair_amount) - cyborg.adjustFireLoss(repair_amount) - cyborg.updatehealth() - cyborg.cell.use(powercost) - else - cyborg.cell.use(5) - repair_tick = 0 - - if((world.time - 2000) > msg_cooldown ) - var/msgmode = "standby" - if(cyborg.health < 0) - msgmode = "critical" - else if(cyborg.health < cyborg.maxHealth) - msgmode = "normal" - to_chat(cyborg, "Self-repair is active in [msgmode] mode.") - msg_cooldown = world.time - else - deactivate() - -/obj/item/borg/upgrade/hypospray - name = "medical cyborg hypospray advanced synthesiser" - desc = "An upgrade to the Medical module cyborg's hypospray, allowing it \ - to produce more advanced and complex medical reagents." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/medical - origin_tech = null - var/list/additional_reagents = list() - -/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R) - if(..()) - return - for(var/obj/item/weapon/reagent_containers/borghypo/H in R.module) - if(H.accepts_reagent_upgrades) - for(var/re in additional_reagents) - H.add_reagent(re) - - return 1 - -/obj/item/borg/upgrade/hypospray/expanded - name = "medical cyborg expanded hypospray" - desc = "An upgrade to the Medical module's hypospray, allowing it \ - to treat a wider range of conditions and problems." - additional_reagents = list("mannitol", "oculine", "inacusiate", - "mutadone", "haloperidol") - origin_tech = "programming=5;engineering=4;biotech=5" - -/obj/item/borg/upgrade/hypospray/high_strength - name = "medical cyborg high-strength hypospray" - desc = "An upgrade to the Medical module's hypospray, containing \ - stronger versions of existing chemicals." - additional_reagents = list("oxandrolone", "sal_acid", "rezadone", - "pen_acid") - origin_tech = "programming=5;engineering=5;biotech=6" - -/obj/item/borg/upgrade/piercing_hypospray - name = "cyborg piercing hypospray" - desc = "An upgrade to a cyborg's hypospray, allowing it to \ - pierce armor and thick material." - origin_tech = "materials=5;engineering=7;combat=3" - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/R) - if(..()) - return - - var/found_hypo = FALSE - for(var/obj/item/weapon/reagent_containers/borghypo/H in R.module) - H.bypass_protection = TRUE - found_hypo = TRUE - - if(!found_hypo) - return - - return 1 - -/obj/item/borg/upgrade/defib - name = "medical cyborg defibrillator" - desc = "An upgrade to the Medical module, installing a builtin \ - defibrillator, for on the scene revival." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/medical - origin_tech = "programming=4;engineering=6;materials=5;powerstorage=5;biotech=5" - -/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R) - if(..()) - return - - var/obj/item/weapon/twohanded/shockpaddles/cyborg/S = new(R.module) - R.module.basic_modules += S - R.module.add_module(S, FALSE, TRUE) - - return 1 - -/obj/item/borg/upgrade/ai - name = "B.O.R.I.S. module" - desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." - icon_state = "boris" - origin_tech = "engineering=4;magnets=4;programming=4" - -/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R) - if(..()) - return - if(R.shell) - to_chat(usr, "This unit is already an AI shell!") - return - if(R.key) //You cannot replace a player unless the key is completely removed. - to_chat(usr, "Intelligence patterns detected in this [R.braintype]. Aborting.") - return - - R.make_shell(src) - return TRUE \ No newline at end of file +// robot_upgrades.dm +// Contains various borg upgrades. + +/obj/item/borg/upgrade + name = "borg upgrade module." + desc = "Protected by FRM." + icon = 'icons/obj/module.dmi' + icon_state = "cyborg_upgrade" + origin_tech = "programming=2" + var/locked = 0 + var/installed = 0 + var/require_module = 0 + var/module_type = null + // if true, is not stored in the robot to be ejected + // if module is reset + var/one_use = FALSE + +/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R) + if(R.stat == DEAD) + to_chat(usr, "[src] will not function on a deceased cyborg.") + return 1 + if(module_type && !istype(R.module, module_type)) + to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") + to_chat(usr, "There's no mounting point for the module!") + return 1 + +/obj/item/borg/upgrade/rename + name = "cyborg reclassification board" + desc = "Used to rename a cyborg." + icon_state = "cyborg_upgrade1" + var/heldname = "" + one_use = TRUE + +/obj/item/borg/upgrade/rename/attack_self(mob/user) + heldname = stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN) + +/obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R) + if(..()) + return + + var/oldname = R.real_name + + R.custom_name = heldname + R.updatename() + if(oldname == R.real_name) + R.notify_ai(RENAME, oldname, R.real_name) + + return 1 + + +/obj/item/borg/upgrade/restart + name = "cyborg emergency reboot module" + desc = "Used to force a reboot of a disabled-but-repaired cyborg, bringing it back online." + icon_state = "cyborg_upgrade1" + one_use = TRUE + +/obj/item/borg/upgrade/restart/action(mob/living/silicon/robot/R) + if(R.health < 0) + to_chat(usr, "You have to repair the cyborg before using this module!") + return 0 + + if(R.mind) + R.mind.grab_ghost() + playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) + + R.revive() + + return 1 + +/obj/item/borg/upgrade/vtec + name = "cyborg VTEC module" + desc = "Used to kick in a cyborg's VTEC systems, increasing their speed." + icon_state = "cyborg_upgrade2" + require_module = 1 + origin_tech = "engineering=4;materials=5;programming=4" + +/obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R) + if(..()) + return + if(R.speed < 0) + to_chat(R, "A VTEC unit is already installed!") + to_chat(usr, "There's no room for another VTEC unit!") + return + + R.speed = -2 // Gotta go fast. + + return 1 + +/obj/item/borg/upgrade/disablercooler + name = "cyborg rapid disabler cooling module" + desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/weapon/robot_module/security + origin_tech = "engineering=4;powerstorage=4;combat=4" + +/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R) + if(..()) + return + + var/obj/item/weapon/gun/energy/disabler/cyborg/T = locate() in R.module.modules + if(!T) + to_chat(usr, "There's no disabler in this unit!") + return + if(T.charge_delay <= 2) + to_chat(R, "A cooling unit is already installed!") + to_chat(usr, "There's no room for another cooling unit!") + return + + T.charge_delay = max(2 , T.charge_delay - 4) + + return 1 + +/obj/item/borg/upgrade/thrusters + name = "ion thruster upgrade" + desc = "A energy-operated thruster system for cyborgs." + icon_state = "cyborg_upgrade3" + origin_tech = "engineering=4;powerstorage=4" + +/obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/R) + if(..()) + return + + if(R.ionpulse) + to_chat(usr, "This unit already has ion thrusters installed!") + return + + R.ionpulse = TRUE + return 1 + +/obj/item/borg/upgrade/ddrill + name = "mining cyborg diamond drill" + desc = "A diamond drill replacement for the mining module's standard drill." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/weapon/robot_module/miner + origin_tech = "engineering=4;materials=5" + +/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R) + if(..()) + return + + for(var/obj/item/weapon/pickaxe/drill/cyborg/D in R.module) + R.module.remove_module(D, TRUE) + for(var/obj/item/weapon/shovel/S in R.module) + R.module.remove_module(S, TRUE) + + var/obj/item/weapon/pickaxe/drill/cyborg/diamond/DD = new /obj/item/weapon/pickaxe/drill/cyborg/diamond(R.module) + R.module.basic_modules += DD + R.module.add_module(DD, FALSE, TRUE) + return 1 + +/obj/item/borg/upgrade/soh + name = "mining cyborg satchel of holding" + desc = "A satchel of holding replacement for mining cyborg's ore satchel module." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/weapon/robot_module/miner + origin_tech = "engineering=4;materials=4;bluespace=4" + +/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R) + if(..()) + return + + for(var/obj/item/weapon/storage/bag/ore/cyborg/S in R.module) + R.module.remove_module(S, TRUE) + + var/obj/item/weapon/storage/bag/ore/holding/H = new /obj/item/weapon/storage/bag/ore/holding(R.module) + R.module.basic_modules += H + R.module.add_module(H, FALSE, TRUE) + return 1 + +/obj/item/borg/upgrade/syndicate + name = "illegal equipment module" + desc = "Unlocks the hidden, deadlier functions of a cyborg" + icon_state = "cyborg_upgrade3" + require_module = 1 + origin_tech = "combat=4;syndicate=1" + +/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R) + if(..()) + return + + if(R.emagged) + return + + R.SetEmagged(1) + + return 1 + +/obj/item/borg/upgrade/lavaproof + name = "mining cyborg lavaproof tracks" + desc = "An upgrade kit to apply specialized coolant systems and insulation layers to mining cyborg tracks, enabling them to withstand exposure to molten rock." + icon_state = "ash_plating" + resistance_flags = LAVA_PROOF | FIRE_PROOF + require_module = 1 + module_type = /obj/item/weapon/robot_module/miner + origin_tech = "engineering=4;materials=4;plasmatech=4" + +/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R) + if(..()) + return + R.weather_immunities += "lava" + return 1 + +/obj/item/borg/upgrade/selfrepair + name = "self-repair module" + desc = "This module will repair the cyborg over time." + icon_state = "cyborg_upgrade5" + require_module = 1 + var/repair_amount = -1 + var/repair_tick = 1 + var/msg_cooldown = 0 + var/on = 0 + var/powercost = 10 + var/mob/living/silicon/robot/cyborg + var/datum/action/toggle_action + +/obj/item/borg/upgrade/selfrepair/action(mob/living/silicon/robot/R) + if(..()) + return + + var/obj/item/borg/upgrade/selfrepair/U = locate() in R + if(U) + to_chat(usr, "This unit is already equipped with a self-repair module.") + return 0 + + cyborg = R + icon_state = "selfrepair_off" + toggle_action = new /datum/action/item_action/toggle(src) + toggle_action.Grant(R) + return 1 + +/obj/item/borg/upgrade/selfrepair/dropped() + addtimer(CALLBACK(src, .proc/check_dropped), 1) + +/obj/item/borg/upgrade/selfrepair/proc/check_dropped() + if(loc != cyborg) + toggle_action.Remove(cyborg) + QDEL_NULL(toggle_action) + cyborg = null + deactivate() + +/obj/item/borg/upgrade/selfrepair/ui_action_click() + on = !on + if(on) + to_chat(cyborg, "You activate the self-repair module.") + START_PROCESSING(SSobj, src) + else + to_chat(cyborg, "You deactivate the self-repair module.") + STOP_PROCESSING(SSobj, src) + update_icon() + +/obj/item/borg/upgrade/selfrepair/update_icon() + if(cyborg) + icon_state = "selfrepair_[on ? "on" : "off"]" + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + else + icon_state = "cyborg_upgrade5" + +/obj/item/borg/upgrade/selfrepair/proc/deactivate() + STOP_PROCESSING(SSobj, src) + on = FALSE + update_icon() + +/obj/item/borg/upgrade/selfrepair/process() + if(!repair_tick) + repair_tick = 1 + return + + if(cyborg && (cyborg.stat != DEAD) && on) + if(!cyborg.cell) + to_chat(cyborg, "Self-repair module deactivated. Please, insert the power cell.") + deactivate() + return + + if(cyborg.cell.charge < powercost * 2) + to_chat(cyborg, "Self-repair module deactivated. Please recharge.") + deactivate() + return + + if(cyborg.health < cyborg.maxHealth) + if(cyborg.health < 0) + repair_amount = -2.5 + powercost = 30 + else + repair_amount = -1 + powercost = 10 + cyborg.adjustBruteLoss(repair_amount) + cyborg.adjustFireLoss(repair_amount) + cyborg.updatehealth() + cyborg.cell.use(powercost) + else + cyborg.cell.use(5) + repair_tick = 0 + + if((world.time - 2000) > msg_cooldown ) + var/msgmode = "standby" + if(cyborg.health < 0) + msgmode = "critical" + else if(cyborg.health < cyborg.maxHealth) + msgmode = "normal" + to_chat(cyborg, "Self-repair is active in [msgmode] mode.") + msg_cooldown = world.time + else + deactivate() + +/obj/item/borg/upgrade/hypospray + name = "medical cyborg hypospray advanced synthesiser" + desc = "An upgrade to the Medical module cyborg's hypospray, allowing it \ + to produce more advanced and complex medical reagents." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/weapon/robot_module/medical + origin_tech = null + var/list/additional_reagents = list() + +/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R) + if(..()) + return + for(var/obj/item/weapon/reagent_containers/borghypo/H in R.module) + if(H.accepts_reagent_upgrades) + for(var/re in additional_reagents) + H.add_reagent(re) + + return 1 + +/obj/item/borg/upgrade/hypospray/expanded + name = "medical cyborg expanded hypospray" + desc = "An upgrade to the Medical module's hypospray, allowing it \ + to treat a wider range of conditions and problems." + additional_reagents = list("mannitol", "oculine", "inacusiate", + "mutadone", "haloperidol") + origin_tech = "programming=5;engineering=4;biotech=5" + +/obj/item/borg/upgrade/hypospray/high_strength + name = "medical cyborg high-strength hypospray" + desc = "An upgrade to the Medical module's hypospray, containing \ + stronger versions of existing chemicals." + additional_reagents = list("oxandrolone", "sal_acid", "rezadone", + "pen_acid") + origin_tech = "programming=5;engineering=5;biotech=6" + +/obj/item/borg/upgrade/piercing_hypospray + name = "cyborg piercing hypospray" + desc = "An upgrade to a cyborg's hypospray, allowing it to \ + pierce armor and thick material." + origin_tech = "materials=5;engineering=7;combat=3" + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/R) + if(..()) + return + + var/found_hypo = FALSE + for(var/obj/item/weapon/reagent_containers/borghypo/H in R.module) + H.bypass_protection = TRUE + found_hypo = TRUE + + if(!found_hypo) + return + + return 1 + +/obj/item/borg/upgrade/defib + name = "medical cyborg defibrillator" + desc = "An upgrade to the Medical module, installing a builtin \ + defibrillator, for on the scene revival." + icon_state = "cyborg_upgrade3" + require_module = 1 + module_type = /obj/item/weapon/robot_module/medical + origin_tech = "programming=4;engineering=6;materials=5;powerstorage=5;biotech=5" + +/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R) + if(..()) + return + + var/obj/item/weapon/twohanded/shockpaddles/cyborg/S = new(R.module) + R.module.basic_modules += S + R.module.add_module(S, FALSE, TRUE) + + return 1 + +/obj/item/borg/upgrade/ai + name = "B.O.R.I.S. module" + desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." + icon_state = "boris" + origin_tech = "engineering=4;magnets=4;programming=4" + +/obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/R) + if(..()) + return + if(R.shell) + to_chat(usr, "This unit is already an AI shell!") + return + if(R.key) //You cannot replace a player unless the key is completely removed. + to_chat(usr, "Intelligence patterns detected in this [R.braintype]. Aborting.") + return + + R.make_shell(src) + return TRUE diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index dfd0723ab1..14e4f5a01c 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -118,6 +118,9 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ var/wetness = 30 //Reduced when exposed to high temperautres var/drying_threshold_temperature = 500 //Kelvin to start drying +/* + * Leather SHeet + */ /obj/item/stack/sheet/leather name = "leather" desc = "The by-product of mob grinding." @@ -125,6 +128,24 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ icon_state = "sheet-leather" origin_tech = "materials=2" +GLOBAL_LIST_INIT(leather_recipes, list ( \ + new/datum/stack_recipe("wallet", /obj/item/weapon/storage/wallet, 1), \ + new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2), \ + new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3), \ + new/datum/stack_recipe("toolbelt", /obj/item/weapon/storage/belt/utility, 4), \ + new/datum/stack_recipe("leather satchel", /obj/item/weapon/storage/backpack/satchel, 5), \ + new/datum/stack_recipe("bandolier", /obj/item/weapon/storage/belt/bandolier, 5), \ + new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \ + new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \ +)) + +/obj/item/stack/sheet/leather/Initialize(mapload, new_amount, merge = TRUE) + recipes = GLOB.leather_recipes + return ..() + +/* + * Sinew + */ /obj/item/stack/sheet/sinew name = "watcher sinew" icon = 'icons/obj/mining.dmi' @@ -136,11 +157,12 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \ GLOBAL_LIST_INIT(sinew_recipes, list ( \ new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1, on_floor = 1), \ - )) +)) /obj/item/stack/sheet/sinew/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.sinew_recipes return ..() + /* * Plates */ @@ -207,4 +229,4 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ var/obj/item/stack/sheet/leather/HS = new(src.loc) HS.amount = 1 wetness = initial(wetness) - src.use(1) \ No newline at end of file + src.use(1) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 611ef76eb4..3e6edebb53 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -29,6 +29,7 @@ Mineral Sheets GLOBAL_LIST_INIT(sandstone_recipes, list ( \ new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 2, 4, 20), \ new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Breakdown into sand", /obj/item/weapon/ore/glass, 1, one_per_turf = 0, on_floor = 1), \ /* new/datum/stack_recipe("sandstone wall", ???), \ @@ -154,14 +155,15 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ /obj/item/stack/sheet/mineral/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma sheets ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma sheets ignited by [key_name(user)] in ([x],[y],[z])") - fire_act() + var/turf/T = get_turf(src) + message_admins("Plasma sheets ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1) + log_game("Plasma sheets ignited by [key_name(user)] in [COORD(T)]") + fire_act(W.is_hot()) else return ..() /obj/item/stack/sheet/mineral/plasma/fire_act(exposed_temperature, exposed_volume) - atmos_spawn_air("plasma=[amount*10];TEMP=1000") + atmos_spawn_air("plasma=[amount*10];TEMP=[exposed_temperature]") qdel(src) /* @@ -305,7 +307,6 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ force = 1 throwforce = 2 origin_tech = "materials=1" - sheettype = "snow" GLOBAL_LIST_INIT(snow_recipes, list ( \ new/datum/stack_recipe("Snow Wall",/turf/closed/wall/mineral/snow, 5, one_per_turf = 1, on_floor = 1), \ @@ -334,12 +335,20 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \ /* * Adamantine */ +GLOBAL_LIST_INIT(adamantine_recipes, list( + new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=1, res_amount=1), + )) + /obj/item/stack/sheet/mineral/adamantine name = "adamantine" icon_state = "sheet-adamantine" singular_name = "adamantine sheet" origin_tech = "materials=4" +/obj/item/stack/sheet/mineral/adamantine/Initialize(mapload, new_amount, merge = TRUE) + recipes = GLOB.adamantine_recipes + ..() + /* * Mythril */ @@ -375,4 +384,4 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ /obj/item/stack/sheet/mineral/abductor/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.abductor_recipes - ..() + ..() \ No newline at end of file diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a007dd4545..3b9f5b4509 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -71,9 +71,8 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ qdel(src) /obj/item/stack/sheet/metal/narsie_act() - if(prob(20)) - new /obj/item/stack/sheet/runed_metal(loc, amount) - qdel(src) + new /obj/item/stack/sheet/runed_metal(loc, amount) + qdel(src) /obj/item/stack/sheet/metal/fifty amount = 50 @@ -286,13 +285,16 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ return ..() -/obj/item/stack/sheet/runed_metal/fifty - amount = 50 - /obj/item/stack/sheet/runed_metal/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.runed_metal_recipes return ..() +/obj/item/stack/sheet/runed_metal/fifty + amount = 50 + +/obj/item/stack/sheet/runed_metal/five + amount = 5 + /* * Brass */ @@ -322,13 +324,12 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ turf_type = /turf/open/floor/clockwork /obj/item/stack/tile/brass/narsie_act() - if(prob(20)) - new /obj/item/stack/sheet/runed_metal(loc, amount) - qdel(src) + new /obj/item/stack/sheet/runed_metal(loc, amount) + qdel(src) /obj/item/stack/tile/brass/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.brass_recipes - ..() + . = ..() pixel_x = 0 pixel_y = 0 @@ -364,7 +365,10 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ origin_tech = "materials=2;biotech=2" GLOBAL_LIST_INIT(plastic_recipes, list( - new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40))) + new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40), \ + new /datum/stack_recipe("water bottle", /obj/item/weapon/reagent_containers/glass/beaker/waterbottle/empty), \ + new /datum/stack_recipe("large water bottle", /obj/item/weapon/reagent_containers/glass/beaker/waterbottle/large/empty,3), \ + new /datum/stack_recipe("wet floor sign", /obj/item/weapon/caution, 2))) /obj/item/stack/sheet/plastic name = "plastic" diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index f2432cee3d..ef123030f5 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -13,8 +13,8 @@ var/turf_type = null var/mineralType = null -/obj/item/stack/tile/New(loc, amount) - ..() +/obj/item/stack/tile/Initialize(mapload, amount) + . = ..() pixel_x = rand(-3, 3) pixel_y = rand(-3, 3) //randomize a little @@ -88,6 +88,14 @@ turf_type = /turf/open/floor/wood resistance_flags = FLAMMABLE +//Basalt +/obj/item/stack/tile/basalt + name = "basalt tile" + singular_name = "basalt floor tile" + desc = "Artificially made ashy soil themed on a hostile enviroment." + icon_state = "tile_basalt" + origin_tech = "materials=1" + turf_type = /turf/open/floor/grass/fakebasalt //Carpets /obj/item/stack/tile/carpet diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f332422578..5353341ab6 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -529,7 +529,7 @@ "You hear a soft click.") /obj/item/toy/talking/codex_gigas/generate_messages() - var/datum/devilinfo/devil = randomDevilInfo() + var/datum/fakeDevil/devil = new var/list/messages = list() messages += "Some fun facts about: [devil.truename]" messages += "[GLOB.lawlorify[LORE][devil.bane]]" @@ -1218,9 +1218,9 @@ icon_state = "lawyer" toysay = "My client is a dirty traitor!" -/obj/item/toy/figure/librarian - name = "Librarian action figure" - icon_state = "librarian" +/obj/item/toy/figure/curator + name = "Curator action figure" + icon_state = "curator" toysay = "One day while..." /obj/item/toy/figure/md diff --git a/code/game/objects/items/weapons/clown.dm b/code/game/objects/items/weapons/clown.dm new file mode 100644 index 0000000000..a01a0f18b6 --- /dev/null +++ b/code/game/objects/items/weapons/clown.dm @@ -0,0 +1,46 @@ + +/obj/item/weapon/pie_cannon + name = "pie cannon" + desc = "Load cream pie for optimal results" + force = 10 + icon_state = "piecannon" + item_state = "powerfist" + var/obj/item/weapon/reagent_containers/food/snacks/pie/loaded = null + +/obj/item/weapon/pie_cannon/attackby(obj/item/I, mob/living/L) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/pie)) + if(!loaded) + L.transferItemToLoc(I, src) + loaded = I + to_chat(L, "You load the [I] into the [src]!") + return + return ..() + +/obj/item/weapon/pie_cannon/afterattack(atom/target, mob/living/user, flag, params) + if(!loaded) + return ..() + var/obj/item/projectile/pie/launched = new /obj/item/projectile/pie(src) + launched.P = loaded + loaded.forceMove(launched) + launched.appearance = loaded.appearance + loaded = null + launched.preparePixelProjectile(target, get_turf(target), user, params, 0) + launched.forceMove(get_turf(src)) + launched.fire() + user.visible_message("[user] fires the [src] at [target]!") + +/obj/item/projectile/pie + name = "pie" + desc = "Think fast!" + var/obj/item/weapon/reagent_containers/food/snacks/pie/P = null + +/obj/item/projectile/pie/on_hit(atom/A) + . = ..() + if(P) + A.visible_message("[P] smashes into [A] at high velocity!") + P.forceMove(get_turf(A)) + P.throw_impact(A) + if(ismovableatom(A)) + var/atom/movable/AM = A + if(!AM.anchored) + AM.throw_at(get_edge_target_turf(get_dir(src, AM), 3, 2)) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm deleted file mode 100644 index 756512dff1..0000000000 --- a/code/game/objects/items/weapons/explosives.dm +++ /dev/null @@ -1,115 +0,0 @@ -//In this file: C4 - -/obj/item/weapon/c4 - name = "C-4" - desc = "Used to put holes in specific areas without too much extra hole." - gender = PLURAL - icon = 'icons/obj/grenade.dmi' - icon_state = "plastic-explosive0" - item_state = "plasticx" - flags = NOBLUDGEON - w_class = WEIGHT_CLASS_SMALL - origin_tech = "syndicate=1" - var/timer = 10 - var/open_panel = 0 - parent_type = /obj/item/weapon/grenade/plastic/c4 - -/obj/item/weapon/c4/New() - wires = new /datum/wires/explosive/c4(src) - plastic_overlay = mutable_appearance(icon, "plastic-explosive2") - ..() - -/obj/item/weapon/c4/Destroy() - qdel(wires) - wires = null - target = null - return ..() - -/obj/item/weapon/c4/suicide_act(mob/user) - user.visible_message("[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") - var/message_say = "FOR NO RAISIN!" - if(user.mind) - if(user.mind.special_role) - var/role = lowertext(user.mind.special_role) - if(role == "traitor" || role == "syndicate") - message_say = "FOR THE SYNDICATE!" - else if(role == "changeling") - message_say = "FOR THE HIVE!" - else if(role == "cultist") - message_say = "FOR NAR-SIE!" - else if(role == "revolutionary" || role == "head revolutionary") - message_say = "VIVA LA REVOLUTION!" - else if(user.mind.gang_datum) - message_say = "[uppertext(user.mind.gang_datum.name)] RULES!" - user.say(message_say) - target = user - message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1) - message_admins("[key_name(user)] suicided with [name] at ([x],[y],[z])") - sleep(10) - explode(get_turf(user)) - user.gib(1, 1) - -/obj/item/weapon/c4/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - open_panel = !open_panel - to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.") - else if(is_wire_tool(I)) - wires.interact(user) - else - return ..() - -/obj/item/weapon/c4/attack_self(mob/user) - var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num - if(user.get_active_held_item() == src) - newtime = Clamp(newtime, 10, 60000) - timer = newtime - to_chat(user, "Timer set for [timer] seconds.") - -/obj/item/weapon/c4/afterattack(atom/movable/AM, mob/user, flag) - if (!flag) - return - if (ismob(AM)) - return - if(loc == AM) - return - if((istype(AM, /obj/item/weapon/storage/)) && !((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside. - return - if((istype(AM,/obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox))) - var/obj/item/weapon/storage/secure/S = AM - if(!S.locked) //Literal hacks, this works for lockboxes despite incorrect type casting, because they both share the locked var. But if its unlocked, place it inside, otherwise PLANTING C4! - return - - to_chat(user, "You start planting the bomb...") - - if(do_after(user, 50, target = AM)) - if(!user.temporarilyRemoveItemFromInventory(src)) - return - src.target = AM - forceMove(null) - - var/message = "[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [timer] second fuse" - GLOB.bombers += message - message_admins(message,0,1) - log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse") - - target.add_overlay(plastic_overlay, 1) - to_chat(user, "You plant the bomb. Timer counting down from [timer].") - addtimer(CALLBACK(src, .proc/explode), timer * 10) - -/obj/item/weapon/c4/proc/explode() - if(QDELETED(src)) - return - var/turf/location - if(target) - if(!QDELETED(target)) - location = get_turf(target) - target.cut_overlay(plastic_overlay, TRUE) - else - location = get_turf(src) - if(location) - location.ex_act(2, target) - explosion(location,0,0,3) - qdel(src) - -/obj/item/weapon/c4/attack(mob/M, mob/user, def_zone) - return diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index ac53eb25ff..aab6c9db48 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -158,7 +158,7 @@ if(lit) START_PROCESSING(SSobj, src) if(!warned_admins) - message_admins("[key_name_admin(usr)]? (FLW) has lit a flamethrower.") + message_admins("[ADMIN_LOOKUPFLW(usr)] has lit a flamethrower.") warned_admins = 1 if(href_list["amount"]) throw_amount = throw_amount + text2num(href_list["amount"]) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 1ef83f3ac1..42362c1e55 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -36,8 +36,8 @@ else if(clown_check(user)) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) - message_admins("[key_name_admin(usr)]? (FLW) has primed a [name] for detonation at [A.name] (JMP).") - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") + message_admins("[ADMIN_LOOKUPFLW(usr)] has primed a [name] for detonation at [A.name][ADMIN_JMP(bombturf)].") + log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") to_chat(user, "You prime the [name]! [det_time / 10] second\s!") playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1) active = 1 @@ -177,12 +177,12 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) (FLW) and last touched by [key_name_admin(last)](?) (FLW) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") - log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])") + message_admins("grenade primed by an assembly, attached by [ADMIN_LOOKUPFLW(M)] and last touched by [ADMIN_LOOKUPFLW(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] [ADMIN_JMP(T)].") + log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] [COORD(T)]") var/turf/DT = get_turf(src) var/area/DA = get_area(DT) - log_game("A grenade detonated at [DA.name] ([DT.x], [DT.y], [DT.z])") + log_game("A grenade detonated at [DA.name] [COORD(DT)]") update_mob() diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm index aedf0954c2..3118d731f2 100644 --- a/code/game/objects/items/weapons/grenades/plastic.dm +++ b/code/game/objects/items/weapons/grenades/plastic.dm @@ -96,7 +96,7 @@ to_chat(user, "You start planting the [src]. The timer is set to [det_time]...") - if(do_after(user, 50, target = AM)) + if(do_after(user, 30, target = AM)) if(!user.temporarilyRemoveItemFromInventory(src)) return src.target = AM @@ -119,8 +119,8 @@ qdel(src) //How? /obj/item/weapon/grenade/plastic/suicide_act(mob/user) - message_admins("[key_name_admin(user)](?) (FLW) suicided with [src] at ([user.x],[user.y],[user.z] - JMP)",0,1) - message_admins("[key_name(user)] suicided with [src] at ([user.x],[user.y],[user.z])") + message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_COORDJMP(user)]",0,1) + log_game("[key_name(user)] suicided with [src] at [COORD(user)]") user.visible_message("[user] activates the [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") var/message_say = "FOR NO RAISIN!" if(user.mind) @@ -154,6 +154,115 @@ /obj/item/weapon/grenade/plastic/c4 name = "C4" desc = "Used to put holes in specific areas without too much extra hole. A saboteur's favorite." + gender = PLURAL + icon = 'icons/obj/grenade.dmi' + icon_state = "plastic-explosive0" + item_state = "plasticx" + flags = NOBLUDGEON + w_class = WEIGHT_CLASS_SMALL + origin_tech = "syndicate=1" + var/timer = 10 + var/open_panel = 0 + +/obj/item/weapon/grenade/plastic/c4/New() + wires = new /datum/wires/explosive/c4(src) + plastic_overlay = mutable_appearance(icon, "plastic-explosive2") + ..() + +/obj/item/weapon/grenade/plastic/c4/Destroy() + qdel(wires) + wires = null + target = null + return ..() + +/obj/item/weapon/grenade/plastic/c4/suicide_act(mob/user) + user.visible_message("[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!") + var/message_say = "FOR NO RAISIN!" + if(user.mind) + if(user.mind.special_role) + var/role = lowertext(user.mind.special_role) + if(role == "traitor" || role == "syndicate") + message_say = "FOR THE SYNDICATE!" + else if(role == "changeling") + message_say = "FOR THE HIVE!" + else if(role == "cultist") + message_say = "FOR NAR-SIE!" + else if(role == "revolutionary" || role == "head revolutionary") + message_say = "VIVA LA REVOLUTION!" + else if(user.mind.gang_datum) + message_say = "[uppertext(user.mind.gang_datum.name)] RULES!" + user.say(message_say) + target = user + message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1) + message_admins("[key_name(user)] suicided with [name] at ([x],[y],[z])") + sleep(10) + explode(get_turf(user)) + user.gib(1, 1) + +/obj/item/weapon/grenade/plastic/c4/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + open_panel = !open_panel + to_chat(user, "You [open_panel ? "open" : "close"] the wire panel.") + else if(is_wire_tool(I)) + wires.interact(user) + else + return ..() + +/obj/item/weapon/grenade/plastic/c4/attack_self(mob/user) + var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num + if(user.get_active_held_item() == src) + newtime = Clamp(newtime, 10, 60000) + timer = newtime + to_chat(user, "Timer set for [timer] seconds.") + +/obj/item/weapon/grenade/plastic/c4/afterattack(atom/movable/AM, mob/user, flag) + if (!flag) + return + if (ismob(AM)) + return + if(loc == AM) + return + if((istype(AM, /obj/item/weapon/storage/)) && !((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside. + return + if((istype(AM,/obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox))) + var/obj/item/weapon/storage/secure/S = AM + if(!S.locked) //Literal hacks, this works for lockboxes despite incorrect type casting, because they both share the locked var. But if its unlocked, place it inside, otherwise PLANTING C4! + return + + to_chat(user, "You start planting the bomb...") + + if(do_after(user, 50, target = AM)) + if(!user.temporarilyRemoveItemFromInventory(src)) + return + src.target = AM + forceMove(null) + + var/message = "[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [timer] second fuse" + GLOB.bombers += message + message_admins(message,0,1) + log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse") + + target.add_overlay(plastic_overlay, 1) + to_chat(user, "You plant the bomb. Timer counting down from [timer].") + addtimer(CALLBACK(src, .proc/explode), timer * 10) + +/obj/item/weapon/grenade/plastic/c4/proc/explode() + if(QDELETED(src)) + return + var/turf/location + if(target) + if(!QDELETED(target)) + location = get_turf(target) + target.cut_overlay(plastic_overlay, TRUE) + else + location = get_turf(src) + if(location) + location.ex_act(2, target) + explosion(location,0,0,3) + qdel(src) + +/obj/item/weapon/grenade/plastic/c4/attack(mob/M, mob/user, def_zone) + return // X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of. // C4 is intended to be used for infiltration, and destroying tech. X4 is intended to be used for heavy breaching and tight spaces. @@ -165,4 +274,4 @@ icon_state = "plasticx40" item_state = "plasticx4" directional = TRUE - boom_sizes = list(0, 2, 5) \ No newline at end of file + boom_sizes = list(0, 2, 5) diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 2d5c4707a6..d53b87f5f2 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -1,39 +1,39 @@ -/obj/item/weapon/grenade/spawnergrenade - desc = "It will unleash unleash an unspecified anomaly into the vicinity." - name = "delivery grenade" - icon = 'icons/obj/grenade.dmi' - icon_state = "delivery" - item_state = "flashbang" - origin_tech = "materials=3;magnets=4" - var/spawner_type = null // must be an object path - var/deliveryamt = 1 // amount of type to deliver - -/obj/item/weapon/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it. - update_mob() - if(spawner_type && deliveryamt) - // Make a quick flash - var/turf/T = get_turf(src) - playsound(T, 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/C in viewers(T, null)) - C.flash_act() - - // Spawn some hostile syndicate critters and spread them out - spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=admin_spawned) - - qdel(src) - -/obj/item/weapon/grenade/spawnergrenade/manhacks - name = "viscerator delivery grenade" - spawner_type = /mob/living/simple_animal/hostile/viscerator - deliveryamt = 10 - origin_tech = "materials=3;magnets=4;syndicate=3" - -/obj/item/weapon/grenade/spawnergrenade/spesscarp - name = "carp delivery grenade" - spawner_type = /mob/living/simple_animal/hostile/carp - deliveryamt = 5 - origin_tech = "materials=3;magnets=4;syndicate=3" - -/obj/item/weapon/grenade/spawnergrenade/syndiesoap - name = "Mister Scrubby" - spawner_type = /obj/item/weapon/soap/syndie +/obj/item/weapon/grenade/spawnergrenade + desc = "It will unleash an unspecified anomaly into the vicinity." + name = "delivery grenade" + icon = 'icons/obj/grenade.dmi' + icon_state = "delivery" + item_state = "flashbang" + origin_tech = "materials=3;magnets=4" + var/spawner_type = null // must be an object path + var/deliveryamt = 1 // amount of type to deliver + +/obj/item/weapon/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it. + update_mob() + if(spawner_type && deliveryamt) + // Make a quick flash + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + for(var/mob/living/carbon/C in viewers(T, null)) + C.flash_act() + + // Spawn some hostile syndicate critters and spread them out + spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=admin_spawned) + + qdel(src) + +/obj/item/weapon/grenade/spawnergrenade/manhacks + name = "viscerator delivery grenade" + spawner_type = /mob/living/simple_animal/hostile/viscerator + deliveryamt = 10 + origin_tech = "materials=3;magnets=4;syndicate=3" + +/obj/item/weapon/grenade/spawnergrenade/spesscarp + name = "carp delivery grenade" + spawner_type = /mob/living/simple_animal/hostile/carp + deliveryamt = 5 + origin_tech = "materials=3;magnets=4;syndicate=3" + +/obj/item/weapon/grenade/spawnergrenade/syndiesoap + name = "Mister Scrubby" + spawner_type = /obj/item/weapon/soap/syndie diff --git a/code/game/objects/items/weapons/his_grace.dm b/code/game/objects/items/weapons/his_grace.dm index be269d583d..d8e7dabdf9 100644 --- a/code/game/objects/items/weapons/his_grace.dm +++ b/code/game/objects/items/weapons/his_grace.dm @@ -41,7 +41,7 @@ ..() /obj/item/weapon/his_grace/CtrlClick(mob/user) //you can't pull his grace - attack_hand(user) + return /obj/item/weapon/his_grace/examine(mob/user) ..() diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index aa720f1979..4b5acd949d 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -214,7 +214,7 @@ possessed = TRUE - var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) var/mob/dead/observer/theghost = null if(LAZYLEN(candidates)) diff --git a/code/game/objects/items/weapons/implants/implant_explosive.dm b/code/game/objects/items/weapons/implants/implant_explosive.dm index 369effbe7c..009aae3b54 100644 --- a/code/game/objects/items/weapons/implants/implant_explosive.dm +++ b/code/game/objects/items/weapons/implants/implant_explosive.dm @@ -44,7 +44,7 @@ active = TRUE var/turf/boomturf = get_turf(imp_in) var/area/A = get_area(boomturf) - message_admins("[key_name_admin(imp_in)]? (FLW) has activated their [name] at [A.name] (JMP).") + message_admins("[ADMIN_LOOKUPFLW(imp_in)] has activated their [name] at [A.name] [ADMIN_JMP(boomturf)].") //If the delay is short, just blow up already jeez if(delay <= 7) explosion(src,heavy,medium,weak,weak, flame_range = weak) diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 6f1a43a93a..9d7516faac 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -42,8 +42,9 @@ data["occupant"] = list() if(occupant) - data["occupant"]["name"] = occupant.name - data["occupant"]["stat"] = occupant.stat + var/mob/living/mob_occupant = occupant + data["occupant"]["name"] = mob_occupant.name + data["occupant"]["stat"] = mob_occupant.stat data["special_name"] = special ? special_name : null data["ready_implants"] = ready_implants diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 56c53e9cd8..d88c1371a7 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -1,271 +1,259 @@ -/obj/item/weapon/melee/energy - var/active = 0 - var/force_on = 30 //force when active - var/throwforce_on = 20 - var/icon_state_on = "axe1" - var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - var/list/possible_colors - w_class = WEIGHT_CLASS_SMALL - sharpness = IS_SHARP - var/w_class_on = WEIGHT_CLASS_BULKY - heat = 3500 - obj_integrity = 200 - max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) - resistance_flags = FIRE_PROOF - var/brightness_on = 3 - -/obj/item/weapon/melee/energy/Initialize() - ..() - if(LAZYLEN(possible_colors)) - item_color = pick(possible_colors) - switch(item_color)//Only run this check if the color was picked randomly, so that colors can be manually set for non-random colored energy weapons. - if("red") - light_color = LIGHT_COLOR_RED - if("green") - light_color = LIGHT_COLOR_GREEN - if("blue") - light_color = LIGHT_COLOR_LIGHT_CYAN - if("purple") - light_color = LIGHT_COLOR_LAVENDER - if(active) - set_light(brightness_on) - -/obj/item/weapon/melee/energy/suicide_act(mob/user) - user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!") - return (BRUTELOSS|FIRELOSS) - -/obj/item/weapon/melee/energy/add_blood(list/blood_dna) - return 0 - -/obj/item/weapon/melee/energy/is_sharp() - return active * sharpness - -/obj/item/weapon/melee/energy/axe - name = "energy axe" - desc = "An energized battle axe." - icon_state = "axe0" - force = 40 - force_on = 150 - throwforce = 25 - throwforce_on = 30 - hitsound = 'sound/weapons/bladeslice.ogg' - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_NORMAL - w_class_on = WEIGHT_CLASS_HUGE - flags = CONDUCT - armour_penetration = 100 - origin_tech = "combat=4;magnets=3" - attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") - attack_verb_on = list() - light_color = "#40ceff" - -/obj/item/weapon/melee/energy/axe/suicide_act(mob/user) - user.visible_message("[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS|FIRELOSS) - -/obj/item/weapon/melee/energy/sword - name = "energy sword" - desc = "May the force be within you." - icon_state = "sword0" - force = 3 - throwforce = 5 - hitsound = "swing_hit" //it starts deactivated - throw_speed = 3 - throw_range = 5 - sharpness = IS_SHARP - embed_chance = 75 - embedded_impact_pain_multiplier = 10 - armour_penetration = 35 - origin_tech = "combat=3;magnets=4;syndicate=4" - block_chance = 50 - possible_colors = list("red", "blue", "green", "purple") - var/hacked = 0 - -/obj/item/weapon/melee/energy/sword/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/weapon/melee/energy/sword/process() - if(active) - if(hacked) - light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER) - open_flame() - else - STOP_PROCESSING(SSobj, src) - -/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) - if(active) - return ..() - return 0 - -/obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user) - if(user.disabilities & CLUMSY && prob(50)) - to_chat(user, "You accidentally cut yourself with [src], like a doofus!") - user.take_bodypart_damage(5,5) - active = !active - if (active) - force = force_on - throwforce = throwforce_on - hitsound = 'sound/weapons/blade1.ogg' - throw_speed = 4 - if(attack_verb_on.len) - attack_verb = attack_verb_on - if(!item_color) - icon_state = icon_state_on - else - icon_state = "sword[item_color]" - w_class = w_class_on - playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness - to_chat(user, "[src] is now active.") - START_PROCESSING(SSobj, src) - set_light(brightness_on) - else - force = initial(force) - throwforce = initial(throwforce) - hitsound = initial(hitsound) - throw_speed = initial(throw_speed) - if(attack_verb_on.len) - attack_verb = list() - icon_state = initial(icon_state) - w_class = initial(w_class) - playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness - to_chat(user, "[src] can now be concealed.") - STOP_PROCESSING(SSobj, src) - set_light(0) - add_fingerprint(user) - -/obj/item/weapon/melee/energy/is_hot() - return active * heat - -/obj/item/weapon/melee/energy/ignition_effect(atom/A, mob/user) - if(!active) - return "" - - var/in_mouth = "" - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.wear_mask == src) - in_mouth = ", barely missing their nose" - . = "[user] swings their \ - [src][in_mouth]. They light [A] in the process." - playsound(loc, hitsound, get_clamped_volume(), 1, -1) - add_fingerprint(user) - -/obj/item/weapon/melee/energy/sword/cyborg - var/hitcost = 50 - -/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R) - if(R.cell) - var/obj/item/weapon/stock_parts/cell/C = R.cell - if(active && !(C.use(hitcost))) - attack_self(R) - to_chat(R, "It's out of charge!") - return - ..() - return - -/obj/item/weapon/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs - name = "energy saw" - desc = "For heavy duty cutting. It has a carbon-fiber blade in addition to a toggleable hard-light edge to dramatically increase sharpness." - icon_state = "esaw" - force_on = 30 - force = 18 //About as much as a spear - hitsound = 'sound/weapons/circsawhit.ogg' - icon = 'icons/obj/surgery.dmi' - icon_state = "esaw_0" - icon_state_on = "esaw_1" - hitcost = 75 //Costs more than a standard cyborg esword - item_color = null - w_class = WEIGHT_CLASS_NORMAL - sharpness = IS_SHARP - light_color = "#40ceff" - possible_colors = null - -/obj/item/weapon/melee/energy/sword/cyborg/saw/New() - ..() - icon_state = "esaw_0" - item_color = null - -/obj/item/weapon/melee/energy/sword/cyborg/saw/hit_reaction() - return 0 - -/obj/item/weapon/melee/energy/sword/saber - -/obj/item/weapon/melee/energy/sword/saber/blue - possible_colors = list("blue") - -/obj/item/weapon/melee/energy/sword/saber/purple - possible_colors = list("purple") - -/obj/item/weapon/melee/energy/sword/saber/green - possible_colors = list("green") - -/obj/item/weapon/melee/energy/sword/saber/red - possible_colors = list("red") - - -/obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params) - if(istype(W, /obj/item/weapon/melee/energy/sword/saber)) - to_chat(user, "You attach the ends of the two energy swords, making a single double-bladed weapon! You're cool.") - var/obj/item/weapon/melee/energy/sword/saber/other_esword = W - var/obj/item/weapon/twohanded/dualsaber/newSaber = new(user.loc) - if(hacked || other_esword.hacked) - newSaber.hacked = TRUE - newSaber.item_color = "rainbow" - qdel(W) - qdel(src) - user.put_in_hands(newSaber) - else if(istype(W, /obj/item/device/multitool)) - if(hacked == 0) - hacked = 1 - item_color = "rainbow" - to_chat(user, "RNBW_ENGAGE") - - if(active) - icon_state = "swordrainbow" - user.update_inv_hands() - else - to_chat(user, "It's already fabulous!") - else - return ..() - -/obj/item/weapon/melee/energy/sword/pirate - name = "energy cutlass" - desc = "Arrrr matey." - icon_state = "cutlass0" - icon_state_on = "cutlass1" - light_color = "#ff0000" - -/obj/item/weapon/melee/energy/blade - name = "energy blade" - desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." - icon_state = "blade" - force = 30 //Normal attacks deal esword damage - hitsound = 'sound/weapons/blade1.ogg' - active = 1 - throwforce = 1//Throwing or dropping the item deletes it. - throw_speed = 3 - throw_range = 1 - w_class = WEIGHT_CLASS_BULKY//So you can't hide it in your pocket or some such. - var/datum/effect_system/spark_spread/spark_system - sharpness = IS_SHARP - -//Most of the other special functions are handled in their own files. aka special snowflake code so kewl -/obj/item/weapon/melee/energy/blade/New() - spark_system = new /datum/effect_system/spark_spread() - spark_system.set_up(5, 0, src) - spark_system.attach(src) - -/obj/item/weapon/melee/energy/blade/dropped() - ..() - -/obj/item/weapon/melee/energy/blade/attack_self(mob/user) - return - -/obj/item/weapon/melee/energy/blade/hardlight - name = "hardlight blade" - desc = "An extremely sharp blade made out of hard light. Packs quite a punch." - icon_state = "lightblade" - item_state = "lightblade" +/obj/item/weapon/melee/energy + var/active = 0 + var/force_on = 30 //force when active + var/throwforce_on = 20 + var/icon_state_on = "axe1" + var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + var/list/possible_colors + w_class = WEIGHT_CLASS_SMALL + sharpness = IS_SHARP + var/w_class_on = WEIGHT_CLASS_BULKY + heat = 3500 + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + resistance_flags = FIRE_PROOF + var/brightness_on = 3 + +/obj/item/weapon/melee/energy/Initialize() + . = ..() + if(LAZYLEN(possible_colors)) + item_color = pick(possible_colors) + switch(item_color)//Only run this check if the color was picked randomly, so that colors can be manually set for non-random colored energy weapons. + if("red") + light_color = LIGHT_COLOR_RED + if("green") + light_color = LIGHT_COLOR_GREEN + if("blue") + light_color = LIGHT_COLOR_LIGHT_CYAN + if("purple") + light_color = LIGHT_COLOR_LAVENDER + if(active) + set_light(brightness_on) + +/obj/item/weapon/melee/energy/suicide_act(mob/user) + user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!") + return (BRUTELOSS|FIRELOSS) + +/obj/item/weapon/melee/energy/add_blood(list/blood_dna) + return 0 + +/obj/item/weapon/melee/energy/is_sharp() + return active * sharpness + +/obj/item/weapon/melee/energy/axe + name = "energy axe" + desc = "An energized battle axe." + icon_state = "axe0" + force = 40 + force_on = 150 + throwforce = 25 + throwforce_on = 30 + hitsound = 'sound/weapons/bladeslice.ogg' + throw_speed = 3 + throw_range = 5 + w_class = WEIGHT_CLASS_NORMAL + w_class_on = WEIGHT_CLASS_HUGE + flags = CONDUCT + armour_penetration = 100 + origin_tech = "combat=4;magnets=3" + attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") + attack_verb_on = list() + light_color = "#40ceff" + +/obj/item/weapon/melee/energy/axe/suicide_act(mob/user) + user.visible_message("[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!") + return (BRUTELOSS|FIRELOSS) + +/obj/item/weapon/melee/energy/sword + name = "energy sword" + desc = "May the force be within you." + icon_state = "sword0" + force = 3 + throwforce = 5 + hitsound = "swing_hit" //it starts deactivated + throw_speed = 3 + throw_range = 5 + sharpness = IS_SHARP + embed_chance = 75 + embedded_impact_pain_multiplier = 10 + armour_penetration = 35 + origin_tech = "combat=3;magnets=4;syndicate=4" + block_chance = 50 + possible_colors = list("red", "blue", "green", "purple") + var/hacked = 0 + +/obj/item/weapon/melee/energy/sword/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/item/weapon/melee/energy/sword/process() + if(active) + if(hacked) + light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER) + open_flame() + else + STOP_PROCESSING(SSobj, src) + +/obj/item/weapon/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance) + if(active) + return ..() + return 0 + +/obj/item/weapon/melee/energy/attack_self(mob/living/carbon/user) + if(user.disabilities & CLUMSY && prob(50)) + to_chat(user, "You accidentally cut yourself with [src], like a doofus!") + user.take_bodypart_damage(5,5) + active = !active + if (active) + force = force_on + throwforce = throwforce_on + hitsound = 'sound/weapons/blade1.ogg' + throw_speed = 4 + if(attack_verb_on.len) + attack_verb = attack_verb_on + if(!item_color) + icon_state = icon_state_on + else + icon_state = "sword[item_color]" + w_class = w_class_on + playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness + to_chat(user, "[src] is now active.") + START_PROCESSING(SSobj, src) + set_light(brightness_on) + else + force = initial(force) + throwforce = initial(throwforce) + hitsound = initial(hitsound) + throw_speed = initial(throw_speed) + if(attack_verb_on.len) + attack_verb = list() + icon_state = initial(icon_state) + w_class = initial(w_class) + playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness + to_chat(user, "[src] can now be concealed.") + STOP_PROCESSING(SSobj, src) + set_light(0) + add_fingerprint(user) + +/obj/item/weapon/melee/energy/is_hot() + return active * heat + +/obj/item/weapon/melee/energy/ignition_effect(atom/A, mob/user) + if(!active) + return "" + + var/in_mouth = "" + if(iscarbon(user)) + var/mob/living/carbon/C = user + if(C.wear_mask == src) + in_mouth = ", barely missing their nose" + . = "[user] swings their \ + [src][in_mouth]. They light [A] in the process." + playsound(loc, hitsound, get_clamped_volume(), 1, -1) + add_fingerprint(user) + +/obj/item/weapon/melee/energy/sword/cyborg + var/hitcost = 50 + +/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R) + if(R.cell) + var/obj/item/weapon/stock_parts/cell/C = R.cell + if(active && !(C.use(hitcost))) + attack_self(R) + to_chat(R, "It's out of charge!") + return + ..() + return + +/obj/item/weapon/melee/energy/sword/cyborg/saw //Used by medical Syndicate cyborgs + name = "energy saw" + desc = "For heavy duty cutting. It has a carbon-fiber blade in addition to a toggleable hard-light edge to dramatically increase sharpness." + icon_state = "esaw" + force_on = 30 + force = 18 //About as much as a spear + hitsound = 'sound/weapons/circsawhit.ogg' + icon = 'icons/obj/surgery.dmi' + icon_state = "esaw_0" + icon_state_on = "esaw_1" + hitcost = 75 //Costs more than a standard cyborg esword + item_color = null + w_class = WEIGHT_CLASS_NORMAL + sharpness = IS_SHARP + light_color = "#40ceff" + possible_colors = null + +/obj/item/weapon/melee/energy/sword/cyborg/saw/Initialize() + . = ..() + icon_state = "esaw_0" + item_color = null + +/obj/item/weapon/melee/energy/sword/cyborg/saw/hit_reaction() + return 0 + +/obj/item/weapon/melee/energy/sword/saber + +/obj/item/weapon/melee/energy/sword/saber/blue + possible_colors = list("blue") + +/obj/item/weapon/melee/energy/sword/saber/purple + possible_colors = list("purple") + +/obj/item/weapon/melee/energy/sword/saber/green + possible_colors = list("green") + +/obj/item/weapon/melee/energy/sword/saber/red + possible_colors = list("red") + + +/obj/item/weapon/melee/energy/sword/saber/attackby(obj/item/weapon/W, mob/living/user, params) + if(istype(W, /obj/item/device/multitool)) + if(!hacked) + hacked = TRUE + item_color = "rainbow" + to_chat(user, "RNBW_ENGAGE") + + if(active) + icon_state = "swordrainbow" + user.update_inv_hands() + else + to_chat(user, "It's already fabulous!") + else + return ..() + +/obj/item/weapon/melee/energy/sword/pirate + name = "energy cutlass" + desc = "Arrrr matey." + icon_state = "cutlass0" + icon_state_on = "cutlass1" + light_color = "#ff0000" + +/obj/item/weapon/melee/energy/blade + name = "energy blade" + desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." + icon_state = "blade" + force = 30 //Normal attacks deal esword damage + hitsound = 'sound/weapons/blade1.ogg' + active = 1 + throwforce = 1//Throwing or dropping the item deletes it. + throw_speed = 3 + throw_range = 1 + w_class = WEIGHT_CLASS_BULKY//So you can't hide it in your pocket or some such. + var/datum/effect_system/spark_spread/spark_system + sharpness = IS_SHARP + +//Most of the other special functions are handled in their own files. aka special snowflake code so kewl +/obj/item/weapon/melee/energy/blade/Initialize() + . = ..() + spark_system = new /datum/effect_system/spark_spread() + spark_system.set_up(5, 0, src) + spark_system.attach(src) + +/obj/item/weapon/melee/energy/blade/attack_self(mob/user) + return + +/obj/item/weapon/melee/energy/blade/hardlight + name = "hardlight blade" + desc = "An extremely sharp blade made out of hard light. Packs quite a punch." + icon_state = "lightblade" + item_state = "lightblade" diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 61e68934b9..86c517aa99 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -1,3 +1,7 @@ + +#define PCANNON_FIREALL 1 +#define PCANNON_FILO 2 +#define PCANNON_FIFO 3 /obj/item/weapon/pneumatic_cannon name = "pneumatic cannon" desc = "A gas-powered cannon that can fire any object loaded into it." @@ -16,7 +20,15 @@ var/gasPerThrow = 3 //How much gas is drawn from a tank's pressure to fire var/list/loadedItems = list() //The items loaded into the cannon that will be fired out var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws + var/checktank = TRUE + var/range_multiplier = 1 + var/throw_amount = 20 //How many items to throw per fire + var/fire_mode = PCANNON_FIREALL + var/automatic = FALSE + var/clumsyCheck = TRUE +/obj/item/weapon/pneumatic_cannon/CanItemAutoclick() + return automatic /obj/item/weapon/pneumatic_cannon/examine(mob/user) ..() @@ -30,6 +42,8 @@ /obj/item/weapon/pneumatic_cannon/attackby(obj/item/weapon/W, mob/user, params) + if(user.a_intent == INTENT_HARM) + return ..() if(istype(W, /obj/item/weapon/tank/internals)) if(!tank) var/obj/item/weapon/tank/internals/IT = W @@ -55,19 +69,31 @@ to_chat(user, "\The [src] can't hold any more items!") else if(istype(W, /obj/item)) var/obj/item/IW = W - if((loadedWeightClass + IW.w_class) > maxWeightClass) - to_chat(user, "\The [IW] won't fit into \the [src]!") - return - if(IW.w_class > src.w_class) - to_chat(user, "\The [IW] is too large to fit into \the [src]!") - return - if(!user.transferItemToLoc(W, src)) - return - to_chat(user, "You load \the [IW] into \the [src].") - loadedItems.Add(IW) - loadedWeightClass += IW.w_class + load_item(IW, user) +/obj/item/weapon/pneumatic_cannon/proc/can_load_item(obj/item/I, mob/user) + if((loadedWeightClass + I.w_class) > maxWeightClass) //Only make messages if there's a user + if(user) + to_chat(user, "\The [I] won't fit into \the [src]!") + return FALSE + if(I.w_class > w_class) + if(user) + to_chat(user, "\The [I] is too large to fit into \the [src]!") + return FALSE + return TRUE +/obj/item/weapon/pneumatic_cannon/proc/load_item(obj/item/I, mob/user) + if(!can_load_item(I, user)) + return FALSE + if(user) //Only use transfer proc if there's a user, otherwise just set loc. + if(!user.transferItemToLoc(I, src)) + return FALSE + to_chat(user, "You load \the [I] into \the [src].") + else + I.forceMove(src) + loadedItems += I + loadedWeightClass += I.w_class + return TRUE /obj/item/weapon/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params) if(flag && user.a_intent == INTENT_HARM) //melee attack @@ -76,7 +102,6 @@ return Fire(user, target) - /obj/item/weapon/pneumatic_cannon/proc/Fire(mob/living/carbon/human/user, var/atom/target) if(!istype(user) && !target) return @@ -90,13 +115,13 @@ if(!loadedItems || !loadedWeightClass) to_chat(user, "\The [src] has nothing loaded.") return - if(!tank) + if(!tank && checktank) to_chat(user, "\The [src] can't fire without a source of gas.") return if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting)) to_chat(user, "\The [src] lets out a weak hiss and doesn't react!") return - if(user.disabilities & CLUMSY && prob(75)) + if(user.disabilities & CLUMSY && prob(75) && clumsyCheck) user.visible_message("[user] loses their grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") user.drop_item() if(prob(10)) @@ -109,17 +134,48 @@ user.visible_message("[user] fires \the [src]!", \ "You fire \the [src]!") add_logs(user, target, "fired at", src) + var/turf/T = get_target(target, get_turf(src)) playsound(src.loc, 'sound/weapons/sonic_jackhammer.ogg', 50, 1) - for(var/obj/item/ITD in loadedItems) //Item To Discharge - loadedItems.Remove(ITD) - loadedWeightClass -= ITD.w_class - ITD.throw_speed = pressureSetting * 2 - ITD.loc = get_turf(src) - ITD.throw_at(target, pressureSetting * 5, pressureSetting * 2,user) + fire_items(T, user) if(pressureSetting >= 3 && user) user.visible_message("[user] is thrown down by the force of the cannon!", "[src] slams into your shoulder, knocking you down!") user.Weaken(3) +/obj/item/weapon/pneumatic_cannon/proc/fire_items(turf/target, mob/user) + if(fire_mode == PCANNON_FIREALL) + for(var/obj/item/ITD in loadedItems) //Item To Discharge + if(!throw_item(target, ITD, user)) + break + else + for(var/i in 1 to throw_amount) + if(!loadedItems.len) + break + var/obj/item/I + if(fire_mode == PCANNON_FILO) + I = loadedItems[loadedItems.len] + else + I = loadedItems[1] + if(!throw_item(target, I, user)) + break + +/obj/item/weapon/pneumatic_cannon/proc/throw_item(turf/target, obj/item/I, mob/user) + if(!istype(I)) + return FALSE + loadedItems -= I + loadedWeightClass -= I.w_class + I.forceMove(get_turf(src)) + I.throw_at(target, pressureSetting * 10 * range_multiplier, pressureSetting * 2, user) + return TRUE + +/obj/item/weapon/pneumatic_cannon/proc/get_target(turf/target, turf/starting) + if(range_multiplier == 1) + return target + var/x_o = (target.x - starting.x) + var/y_o = (target.y - starting.y) + var/new_x = Clamp((starting.x + (x_o * range_multiplier)), 0, world.maxx) + var/new_y = Clamp((starting.y + (y_o * range_multiplier)), 0, world.maxy) + var/turf/newtarget = locate(new_x, new_y, starting.z) + return newtarget /obj/item/weapon/pneumatic_cannon/ghetto //Obtainable by improvised methods; more gas per use, less capacity, but smaller name = "improvised pneumatic cannon" @@ -164,3 +220,35 @@ return add_overlay(tank.icon_state) src.update_icon() + +/obj/item/weapon/pneumatic_cannon/proc/fill_with_type(type, amount) + if(!ispath(type, /obj/item)) + return FALSE + var/loaded = 0 + for(var/i in 1 to amount) + var/obj/item/I = new type + if(!load_item(I, null)) + qdel(I) + return loaded + loaded++ + CHECK_TICK + return loaded + +/obj/item/weapon/pneumatic_cannon/pie + name = "pie cannon" + desc = "Load cream pie for optimal results" + force = 10 + icon_state = "piecannon" + gasPerThrow = 0 + checktank = FALSE + range_multiplier = 3 + fire_mode = PCANNON_FIFO + throw_amount = 1 + maxWeightClass = 100 //50 pies. :^) + clumsyCheck = FALSE + +/obj/item/weapon/pneumatic_cannon/pie/can_load_item(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/pie)) + return ..() + to_chat(user, "[src] only accepts pies!") + return FALSE diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 589cf3270d..5b1c641383 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -296,7 +296,7 @@ /obj/item/weapon/lighter, /obj/item/device/multitool, /obj/item/weapon/reagent_containers/food/drinks/bottle/molotov, - /obj/item/weapon/c4, + /obj/item/weapon/grenade/plastic/c4, ) /obj/item/weapon/storage/belt/grenade/full/PopulateContents() new /obj/item/weapon/grenade/flashbang(src) diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm index 7775b3692a..3b655550b4 100644 --- a/code/game/objects/items/weapons/storage/book.dm +++ b/code/game/objects/items/weapons/storage/book.dm @@ -85,8 +85,8 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", playsound(src.loc, "punch", 25, 1, -1) return 1 -/obj/item/weapon/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user) - +/obj/item/weapon/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return @@ -105,7 +105,10 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", to_chat(user, "The book sizzles in your hands.") user.take_bodypart_damage(0,10) return - + + if (!heal_mode) + return ..() + var/smack = 1 if (M.stat != DEAD) @@ -156,3 +159,38 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", /obj/item/weapon/storage/book/bible/booze/PopulateContents() new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) + +/obj/item/weapon/storage/book/bible/syndicate + icon_state ="ebook" + deity_name = "The Syndicate" + throw_speed = 2 + throwforce = 18 + throw_range = 7 + force = 18 + hitsound = 'sound/weapons/sear.ogg' + damtype = BURN + name = "Syndicate Tome" + attack_verb = list("attacked", "burned", "blessed", "damned", "scorched") + var/uses = 1 + + + +/obj/item/weapon/storage/book/bible/syndicate/attack_self(mob/living/carbon/human/H) + if (uses) + H.mind.isholy = TRUE + uses -= 1 + to_chat(H, "You try to open the book AND IT BITES YOU!") + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) + H.apply_damage(5, BRUTE, pick("l_arm", "r_arm")) + to_chat(H, "Your name appears on the inside cover, in blood.") + var/ownername = H.real_name + desc += "The name [ownername] is written in blood inside the cover." + +/obj/item/weapon/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE) + if (user.a_intent == INTENT_HELP) + return ..() + else + return ..(M,user,heal_mode = FALSE) + +/obj/item/storage/book/bible/syndicate/add_blood(list/blood_dna) + return FALSE diff --git a/code/game/objects/items/weapons/storage/dakis.dm b/code/game/objects/items/weapons/storage/dakis.dm new file mode 100644 index 0000000000..a238304cac --- /dev/null +++ b/code/game/objects/items/weapons/storage/dakis.dm @@ -0,0 +1,48 @@ +////////////////////////////////// +//dakimakuras +////////////////////////////////// + +/obj/item/weapon/storage/daki + name = "dakimakura" + desc = "A large pillow depicting a girl in a compromising position. Featuring as many dimensions as you." + icon = 'icons/obj/daki.dmi' + icon_state = "daki_base" + slot_flags = SLOT_BACK + storage_slots = 3 + w_class = 4 + max_w_class = 3 + max_combined_w_class = 21 + var/cooldowntime = 20 + var/static/list/dakimakura_options = list("Callie","Casca","Chaika","Elisabeth","Foxy Grandpa","Haruko","Holo","Ian","Jolyne","Kurisu","Marie","Mugi","Nar'Sie","Patchouli","Plutia","Rei","Reisen","Naga","Squid","Squigly","Tomoko","Toriel","Umaru","Yaranaika","Yoko") //Kurisu is the ideal girl." - Me, Logos. + +/obj/item/weapon/storage/daki/attack_self(mob/living/user) + var/body_choice + var/custom_name + + if(icon_state == "daki_base") + body_choice = input("Pick a body.") in dakimakura_options + icon_state = "daki_[body_choice]" + custom_name = stripped_input(user, "What's her name?") + if(length(custom_name) > MAX_NAME_LEN) + to_chat(user,"Name is too long!") + return FALSE + if(custom_name) + name = custom_name + desc = "A large pillow depicting [custom_name] in a compromising position. Featuring as many dimensions as you." + else + switch(user.a_intent) + if(INTENT_HELP) + user.visible_message("[user] hugs the [name].") + playsound(src, "rustle", 50, 1, -5) + if(INTENT_DISARM) + user.visible_message("[user] kisses the [name].") + playsound(src, "rustle", 50, 1, -5) + if(INTENT_GRAB) + user.visible_message("[user] holds the [name]!") + playsound(src, 'sound/items/bikehorn.ogg', 50, 1) + if(INTENT_HARM) + user.visible_message("[user] punches the [name]!") + playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) + user.changeNext_move(CLICK_CD_MELEE) + +//////////////////////////// diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 8c7b7df04c..cfdc6cc354 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -5,10 +5,6 @@ w_class = WEIGHT_CLASS_BULKY rustle_jimmies = FALSE -/obj/item/weapon/storage/internal/ClickAccessible(mob/user, depth=1) - if(loc) - return loc.ClickAccessible(user, depth) - /obj/item/weapon/storage/internal/Adjacent(A) if(loc) return loc.Adjacent(A) @@ -53,7 +49,7 @@ /obj/item/weapon/implanter, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool/mini, /obj/item/device/firing_pin ) - //can hold both regular pens and energy daggers. made for your every-day tactical librarians/murderers. + //can hold both regular pens and energy daggers. made for your every-day tactical curators/murderers. priority = FALSE quickdraw = TRUE silent = TRUE diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 08e947c45d..43301e6702 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -38,7 +38,7 @@ return // this must come before the screen objects only block, dunno why it wasn't before - if(over_object == M && (src.ClickAccessible(M, depth=STORAGE_VIEW_DEPTH) || Adjacent(M))) + if(over_object == M && M.CanReach(src,view_only = TRUE)) orient2hud(M) if(M.s_active) M.s_active.close(M) @@ -502,7 +502,7 @@ /obj/item/weapon/storage/Initialize(mapload) - ..() + . = ..() can_hold = typecacheof(can_hold) cant_hold = typecacheof(cant_hold) diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 9740aa22a8..d73a7ab058 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -21,8 +21,8 @@ if(has_latches) if(prob(10)) latches = "double_latch" - else if(prob(1)) - latches = "triple_latch" + if(prob(1)) + latches = "triple_latch" update_icon() /obj/item/weapon/storage/toolbox/update_icon() diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 335545e8c9..90e7d1be1a 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -1,298 +1,305 @@ -/obj/item/weapon/storage/box/syndicate - -/obj/item/weapon/storage/box/syndicate/PopulateContents() - switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) - if("bloodyspai") // 27 tc now this is more right - new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set - new /obj/item/clothing/mask/chameleon(src) // Goes with above - new /obj/item/weapon/card/id/syndicate(src) // 2 tc - new /obj/item/clothing/shoes/chameleon(src) // 2 tc - new /obj/item/device/camera_bug(src) // 1 tc - new /obj/item/device/multitool/ai_detect(src) // 1 tc - new /obj/item/device/encryptionkey/syndicate(src) // 2 tc - new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc - new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc - new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals - new /obj/item/device/flashlight/emp(src) // 2 tc - new /obj/item/device/chameleon(src) // 7 tc - - if("stealth") // 31 tc - new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src) - new /obj/item/weapon/pen/sleepy(src) - new /obj/item/device/healthanalyzer/rad_laser(src) - new /obj/item/device/chameleon(src) - new /obj/item/weapon/soap/syndie(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - - if("bond") // 29 tc - new /obj/item/weapon/gun/ballistic/automatic/pistol(src) - new /obj/item/weapon/suppressor(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/clothing/under/chameleon(src) - new /obj/item/weapon/card/id/syndicate(src) - new /obj/item/weapon/reagent_containers/syringe/stimulants(src) - - if("screwed") // 29 tc - new /obj/item/device/sbeacondrop/bomb(src) - new /obj/item/weapon/grenade/syndieminibomb(src) - new /obj/item/device/sbeacondrop/powersink(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/device/encryptionkey/syndicate(src) - - if("guns") // 28 tc now - new /obj/item/weapon/gun/ballistic/revolver(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/weapon/card/emag(src) - new /obj/item/weapon/grenade/plastic/c4(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - - if("murder") // 28 tc now - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/weapon/card/emag(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/device/encryptionkey/syndicate(src) - new /obj/item/weapon/grenade/syndieminibomb(src) - - if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? - new /obj/item/weapon/implanter/freedom(src) - new /obj/item/weapon/implanter/uplink/precharged(src) - new /obj/item/weapon/implanter/emp(src) - new /obj/item/weapon/implanter/adrenalin(src) - new /obj/item/weapon/implanter/explosive(src) - new /obj/item/weapon/implanter/storage(src) - - if("hacker") // 26 tc - new /obj/item/weapon/aiModule/syndicate(src) - new /obj/item/weapon/card/emag(src) - new /obj/item/device/encryptionkey/binary(src) - new /obj/item/weapon/aiModule/toyAI(src) - new /obj/item/device/multitool/ai_detect(src) - - if("lordsingulo") // 24 tc - new /obj/item/device/sbeacondrop(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/weapon/card/emag(src) - - if("sabotage") // 26 tc now - new /obj/item/weapon/grenade/plastic/c4 (src) - new /obj/item/weapon/grenade/plastic/c4 (src) - new /obj/item/device/doorCharge(src) - new /obj/item/device/doorCharge(src) - new /obj/item/device/camera_bug(src) - new /obj/item/device/sbeacondrop/powersink(src) - new /obj/item/weapon/cartridge/syndicate(src) - new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places - new /obj/item/pizzabox/bomb - - if("darklord") //20 tc + tk + summon item close enough for now - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/melee/energy/sword/saber(src) - new /obj/item/weapon/dnainjector/telemut/darkbundle(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/weapon/card/id/syndicate(src) - new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks - new /obj/item/weapon/spellbook/oneuse/summonitem(src) - - if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks - new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle(src) // 12 tc - new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - - if("metaops") // 30 tc - new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc - new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc - new /obj/item/weapon/implanter/explosive(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc - new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc - new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc - new /obj/item/weapon/card/emag(src) // 6 tc - - if("ninja") // 33 tc worth - new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? - new /obj/item/weapon/implanter/adrenalin(src) // 8 tc - new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6 - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/storage/belt/chameleon(src) // Unique but worth at least 2 tc - new /obj/item/weapon/card/id/syndicate(src) // 2 tc - new /obj/item/device/chameleon(src) // 7 tc - -/obj/item/weapon/storage/box/syndie_kit - name = "box" - desc = "A sleek, sturdy box." - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/weapon/storage/box/syndie_kit/imp_freedom - name = "boxed freedom implant (with injector)" - -/obj/item/weapon/storage/box/syndie_kit/imp_freedom/PopulateContents() - var/obj/item/weapon/implanter/O = new(src) - O.imp = new /obj/item/weapon/implant/freedom(O) - O.update_icon() - -/obj/item/weapon/storage/box/syndie_kit/imp_microbomb - name = "Microbomb Implant (with injector)" - -/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/PopulateContents() - var/obj/item/weapon/implanter/O = new(src) - O.imp = new /obj/item/weapon/implant/explosive(O) - O.update_icon() - -/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb - name = "Macrobomb Implant (with injector)" - -/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/PopulateContents() - var/obj/item/weapon/implanter/O = new(src) - O.imp = new /obj/item/weapon/implant/explosive/macro(O) - O.update_icon() - -/obj/item/weapon/storage/box/syndie_kit/imp_uplink - name = "boxed uplink implant (with injector)" - -/obj/item/weapon/storage/box/syndie_kit/imp_uplink/PopulateContents() - ..() - var/obj/item/weapon/implanter/O = new(src) - O.imp = new /obj/item/weapon/implant/uplink(O) - O.update_icon() - -/obj/item/weapon/storage/box/syndie_kit/bioterror - name = "bioterror syringe box" - -/obj/item/weapon/storage/box/syndie_kit/bioterror/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/weapon/reagent_containers/syringe/bioterror(src) - -/obj/item/weapon/storage/box/syndie_kit/imp_adrenal - name = "boxed adrenal implant (with injector)" - -/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/PopulateContents() - var/obj/item/weapon/implanter/O = new(src) - O.imp = new /obj/item/weapon/implant/adrenalin(O) - O.update_icon() - -/obj/item/weapon/storage/box/syndie_kit/imp_storage - name = "boxed storage implant (with injector)" - -/obj/item/weapon/storage/box/syndie_kit/imp_storage/PopulateContents() - new /obj/item/weapon/implanter/storage(src) - -/obj/item/weapon/storage/box/syndie_kit/space - name = "boxed space suit and helmet" - can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) - max_w_class = WEIGHT_CLASS_NORMAL - -/obj/item/weapon/storage/box/syndie_kit/space/PopulateContents() - new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - -/obj/item/weapon/storage/box/syndie_kit/emp - name = "boxed EMP kit" - -/obj/item/weapon/storage/box/syndie_kit/emp/PopulateContents() - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/grenade/empgrenade(src) - new /obj/item/weapon/implanter/emp(src) - -/obj/item/weapon/storage/box/syndie_kit/chemical - name = "boxed chemical kit" - storage_slots = 14 - -/obj/item/weapon/storage/box/syndie_kit/chemical/PopulateContents() - new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src) - new /obj/item/weapon/reagent_containers/glass/bottle/venom(src) - new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src) - new /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde(src) - new /obj/item/weapon/reagent_containers/glass/bottle/cyanide(src) - new /obj/item/weapon/reagent_containers/glass/bottle/histamine(src) - new /obj/item/weapon/reagent_containers/glass/bottle/initropidril(src) - new /obj/item/weapon/reagent_containers/glass/bottle/pancuronium(src) - new /obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental(src) - new /obj/item/weapon/reagent_containers/glass/bottle/coniine(src) - new /obj/item/weapon/reagent_containers/glass/bottle/curare(src) - new /obj/item/weapon/reagent_containers/glass/bottle/amanitin(src) - new /obj/item/weapon/reagent_containers/syringe(src) - -/obj/item/weapon/storage/box/syndie_kit/nuke - name = "box" - -/obj/item/weapon/storage/box/syndie_kit/nuke/PopulateContents() - new /obj/item/weapon/screwdriver/nuke(src) - new /obj/item/nuke_core_container(src) - new /obj/item/weapon/paper/nuke_instructions(src) - -/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade - name = "boxed virus grenade kit" - -/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() - new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src) - for(var/i in 1 to 5) - new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/weapon/reagent_containers/syringe(src) - new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src) - -/obj/item/weapon/storage/box/syndie_kit/chameleon - name = "chameleon kit" - -/obj/item/weapon/storage/box/syndie_kit/chameleon/PopulateContents() - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/suit/chameleon(src) - new /obj/item/clothing/gloves/chameleon(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/clothing/glasses/chameleon(src) - new /obj/item/clothing/head/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/weapon/storage/backpack/chameleon(src) - new /obj/item/device/radio/headset/chameleon(src) - new /obj/item/weapon/stamp/chameleon(src) - new /obj/item/device/pda/chameleon(src) - new /obj/item/weapon/gun/energy/laser/chameleon(src) - -//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. -//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) -/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/PopulateContents() - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/throwing_star(src) - new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) - new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) - -/obj/item/weapon/storage/box/syndie_kit/cutouts/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/cardboard_cutout/adaptive(src) - new/obj/item/toy/crayon/rainbow(src) - -/obj/item/weapon/storage/box/syndie_kit/romerol/PopulateContents() - new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src) - new /obj/item/weapon/reagent_containers/syringe(src) - new /obj/item/weapon/reagent_containers/dropper(src) - -/obj/item/weapon/storage/box/syndie_kit/ez_clean/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/weapon/grenade/chem_grenade/ez_clean(src) - -/obj/item/weapon/storage/box/hug/reverse_revolver/PopulateContents() - new /obj/item/weapon/gun/ballistic/revolver/reverse(src) - -/obj/item/weapon/storage/box/syndie_kit/mimery/PopulateContents() - new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src) - new /obj/item/weapon/spellbook/oneuse/mimery_guns(src) +/obj/item/weapon/storage/box/syndicate + +/obj/item/weapon/storage/box/syndicate/PopulateContents() + switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) + if("bloodyspai") // 27 tc now this is more right + new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set + new /obj/item/clothing/mask/chameleon(src) // Goes with above + new /obj/item/weapon/card/id/syndicate(src) // 2 tc + new /obj/item/clothing/shoes/chameleon(src) // 2 tc + new /obj/item/device/camera_bug(src) // 1 tc + new /obj/item/device/multitool/ai_detect(src) // 1 tc + new /obj/item/device/encryptionkey/syndicate(src) // 2 tc + new /obj/item/weapon/reagent_containers/syringe/mulligan(src) // 4 tc + new /obj/item/weapon/switchblade(src) //I'll count this as 2 tc + new /obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals + new /obj/item/device/flashlight/emp(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc + + if("stealth") // 31 tc + new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow(src) + new /obj/item/weapon/pen/sleepy(src) + new /obj/item/device/healthanalyzer/rad_laser(src) + new /obj/item/device/chameleon(src) + new /obj/item/weapon/soap/syndie(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + + if("bond") // 29 tc + new /obj/item/weapon/gun/ballistic/automatic/pistol(src) + new /obj/item/weapon/suppressor(src) + new /obj/item/ammo_box/magazine/m10mm(src) + new /obj/item/ammo_box/magazine/m10mm(src) + new /obj/item/clothing/under/chameleon(src) + new /obj/item/weapon/card/id/syndicate(src) + new /obj/item/weapon/reagent_containers/syringe/stimulants(src) + + if("screwed") // 29 tc + new /obj/item/device/sbeacondrop/bomb(src) + new /obj/item/weapon/grenade/syndieminibomb(src) + new /obj/item/device/sbeacondrop/powersink(src) + new /obj/item/clothing/suit/space/syndicate/black/red(src) + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + new /obj/item/device/encryptionkey/syndicate(src) + + if("guns") // 28 tc now + new /obj/item/weapon/gun/ballistic/revolver(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/weapon/card/emag(src) + new /obj/item/weapon/grenade/plastic/c4(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/clothing/under/suit_jacket/really_black(src) + + if("murder") // 28 tc now + new /obj/item/weapon/melee/energy/sword/saber(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/weapon/card/emag(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/device/encryptionkey/syndicate(src) + new /obj/item/weapon/grenade/syndieminibomb(src) + + if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? + new /obj/item/weapon/implanter/freedom(src) + new /obj/item/weapon/implanter/uplink/precharged(src) + new /obj/item/weapon/implanter/emp(src) + new /obj/item/weapon/implanter/adrenalin(src) + new /obj/item/weapon/implanter/explosive(src) + new /obj/item/weapon/implanter/storage(src) + + if("hacker") // 26 tc + new /obj/item/weapon/aiModule/syndicate(src) + new /obj/item/weapon/card/emag(src) + new /obj/item/device/encryptionkey/binary(src) + new /obj/item/weapon/aiModule/toyAI(src) + new /obj/item/device/multitool/ai_detect(src) + + if("lordsingulo") // 24 tc + new /obj/item/device/sbeacondrop(src) + new /obj/item/clothing/suit/space/syndicate/black/red(src) + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + new /obj/item/weapon/card/emag(src) + + if("sabotage") // 26 tc now + new /obj/item/weapon/grenade/plastic/c4 (src) + new /obj/item/weapon/grenade/plastic/c4 (src) + new /obj/item/device/doorCharge(src) + new /obj/item/device/doorCharge(src) + new /obj/item/device/camera_bug(src) + new /obj/item/device/sbeacondrop/powersink(src) + new /obj/item/weapon/cartridge/syndicate(src) + new /obj/item/weapon/storage/toolbox/syndicate(src) //To actually get to those places + new /obj/item/pizzabox/bomb + + if("darklord") //20 tc + tk + summon item close enough for now + new /obj/item/weapon/twohanded/dualsaber(src) + new /obj/item/weapon/dnainjector/telemut/darkbundle(src) + new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) + new /obj/item/weapon/card/id/syndicate(src) + new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks + new /obj/item/weapon/spellbook/oneuse/summonitem(src) + + if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks + new /obj/item/weapon/gun/ballistic/automatic/sniper_rifle(src) // 12 tc + new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/clothing/under/suit_jacket/really_black(src) + + if("metaops") // 30 tc + new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc + new /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc + new /obj/item/weapon/implanter/explosive(src) // 2 tc + new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc + new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc + new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc + new /obj/item/weapon/grenade/plastic/c4 (src) // 1 tc + new /obj/item/weapon/card/emag(src) // 6 tc + + if("ninja") // 33 tc worth + new /obj/item/weapon/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? + new /obj/item/weapon/implanter/adrenalin(src) // 8 tc + new /obj/item/weapon/throwing_star(src) // ~5 tc for all 6 + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/storage/belt/chameleon(src) // Unique but worth at least 2 tc + new /obj/item/weapon/card/id/syndicate(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc + +/obj/item/weapon/storage/box/syndie_kit + name = "box" + desc = "A sleek, sturdy box." + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/weapon/storage/box/syndie_kit/imp_freedom + name = "boxed freedom implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_freedom/PopulateContents() + var/obj/item/weapon/implanter/O = new(src) + O.imp = new /obj/item/weapon/implant/freedom(O) + O.update_icon() + +/obj/item/weapon/storage/box/syndie_kit/imp_microbomb + name = "Microbomb Implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_microbomb/PopulateContents() + var/obj/item/weapon/implanter/O = new(src) + O.imp = new /obj/item/weapon/implant/explosive(O) + O.update_icon() + +/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb + name = "Macrobomb Implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_macrobomb/PopulateContents() + var/obj/item/weapon/implanter/O = new(src) + O.imp = new /obj/item/weapon/implant/explosive/macro(O) + O.update_icon() + +/obj/item/weapon/storage/box/syndie_kit/imp_uplink + name = "boxed uplink implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_uplink/PopulateContents() + ..() + var/obj/item/weapon/implanter/O = new(src) + O.imp = new /obj/item/weapon/implant/uplink(O) + O.update_icon() + +/obj/item/weapon/storage/box/syndie_kit/bioterror + name = "bioterror syringe box" + +/obj/item/weapon/storage/box/syndie_kit/bioterror/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/weapon/reagent_containers/syringe/bioterror(src) + +/obj/item/weapon/storage/box/syndie_kit/imp_adrenal + name = "boxed adrenal implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_adrenal/PopulateContents() + var/obj/item/weapon/implanter/O = new(src) + O.imp = new /obj/item/weapon/implant/adrenalin(O) + O.update_icon() + +/obj/item/weapon/storage/box/syndie_kit/imp_storage + name = "boxed storage implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_storage/PopulateContents() + new /obj/item/weapon/implanter/storage(src) + +/obj/item/weapon/storage/box/syndie_kit/space + name = "boxed space suit and helmet" + can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) + max_w_class = WEIGHT_CLASS_NORMAL + +/obj/item/weapon/storage/box/syndie_kit/space/PopulateContents() + new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + +/obj/item/weapon/storage/box/syndie_kit/emp + name = "boxed EMP kit" + +/obj/item/weapon/storage/box/syndie_kit/emp/PopulateContents() + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/implanter/emp(src) + +/obj/item/weapon/storage/box/syndie_kit/chemical + name = "boxed chemical kit" + storage_slots = 14 + +/obj/item/weapon/storage/box/syndie_kit/chemical/PopulateContents() + new /obj/item/weapon/reagent_containers/glass/bottle/polonium(src) + new /obj/item/weapon/reagent_containers/glass/bottle/venom(src) + new /obj/item/weapon/reagent_containers/glass/bottle/neurotoxin2(src) + new /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde(src) + new /obj/item/weapon/reagent_containers/glass/bottle/spewium(src) + new /obj/item/weapon/reagent_containers/glass/bottle/cyanide(src) + new /obj/item/weapon/reagent_containers/glass/bottle/histamine(src) + new /obj/item/weapon/reagent_containers/glass/bottle/initropidril(src) + new /obj/item/weapon/reagent_containers/glass/bottle/pancuronium(src) + new /obj/item/weapon/reagent_containers/glass/bottle/sodium_thiopental(src) + new /obj/item/weapon/reagent_containers/glass/bottle/coniine(src) + new /obj/item/weapon/reagent_containers/glass/bottle/curare(src) + new /obj/item/weapon/reagent_containers/glass/bottle/amanitin(src) + new /obj/item/weapon/reagent_containers/syringe(src) + +/obj/item/weapon/storage/box/syndie_kit/nuke + name = "box" + +/obj/item/weapon/storage/box/syndie_kit/nuke/PopulateContents() + new /obj/item/weapon/screwdriver/nuke(src) + new /obj/item/nuke_core_container(src) + new /obj/item/weapon/paper/nuke_instructions(src) + +/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade + name = "boxed virus grenade kit" + +/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() + new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src) + for(var/i in 1 to 5) + new /obj/item/weapon/reagent_containers/hypospray/medipen/tuberculosiscure(src) + new /obj/item/weapon/reagent_containers/syringe(src) + new /obj/item/weapon/reagent_containers/glass/bottle/tuberculosiscure(src) + +/obj/item/weapon/storage/box/syndie_kit/chameleon + name = "chameleon kit" + +/obj/item/weapon/storage/box/syndie_kit/chameleon/PopulateContents() + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/weapon/storage/backpack/chameleon(src) + new /obj/item/device/radio/headset/chameleon(src) + new /obj/item/weapon/stamp/chameleon(src) + new /obj/item/device/pda/chameleon(src) + new /obj/item/weapon/gun/energy/laser/chameleon(src) + +//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. +//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) +/obj/item/weapon/storage/box/syndie_kit/throwing_weapons/PopulateContents() + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/throwing_star(src) + new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) + new /obj/item/weapon/restraints/legcuffs/bola/tactical(src) + +/obj/item/weapon/storage/box/syndie_kit/cutouts/PopulateContents() + for(var/i in 1 to 3) + new/obj/item/cardboard_cutout/adaptive(src) + new/obj/item/toy/crayon/rainbow(src) + +/obj/item/weapon/storage/box/syndie_kit/romerol/PopulateContents() + new /obj/item/weapon/reagent_containers/glass/bottle/romerol(src) + new /obj/item/weapon/reagent_containers/syringe(src) + new /obj/item/weapon/reagent_containers/dropper(src) + +/obj/item/weapon/storage/box/syndie_kit/ez_clean/PopulateContents() + for(var/i in 1 to 3) + new/obj/item/weapon/grenade/chem_grenade/ez_clean(src) + +/obj/item/weapon/storage/box/hug/reverse_revolver/PopulateContents() + new /obj/item/weapon/gun/ballistic/revolver/reverse(src) + +/obj/item/weapon/storage/box/syndie_kit/mimery/PopulateContents() + new /obj/item/weapon/spellbook/oneuse/mimery_blockade(src) + new /obj/item/weapon/spellbook/oneuse/mimery_guns(src) + +/obj/item/weapon/storage/box/syndie_kit/holoparasite + name = "box" + +/obj/item/weapon/storage/box/syndie_kit/holoparasite/PopulateContents() + new /obj/item/weapon/guardiancreator/tech/choose/traitor(src) + new /obj/item/weapon/paper/guardian(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 002c7773b4..baf65fd084 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -262,11 +262,11 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) resistance_flags = FIRE_PROOF var/hacked = 0 - var/brightness_on = 6//TWICE AS BRIGHT AS A REGULAR ESWORD + var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD var/list/possible_colors = list("red", "blue", "green", "purple") /obj/item/weapon/twohanded/dualsaber/Initialize() - ..() + . = ..() if(LAZYLEN(possible_colors)) item_color = pick(possible_colors) switch(item_color) @@ -602,20 +602,19 @@ user.visible_message("[user] impales [user.p_them()]self in [user.p_their()] abdomen with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) -/obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/user) - if(isliving(user)) +/obj/item/weapon/twohanded/pitchfork/demonic/pickup(mob/living/user) + if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) var/mob/living/U = user - if(U.mind && !U.mind.devilinfo && (U.mind.soulOwner == U.mind)) //Burn hands unless they are a devil or have sold their soul - U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ - "\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"") - if(ishuman(U)) - var/mob/living/carbon/human/H = U - H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) - else - U.adjustFireLoss(rand(force/2,force)) + U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ + "\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"") + if(ishuman(U)) + var/mob/living/carbon/human/H = U + H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) + else + U.adjustFireLoss(rand(force/2,force)) /obj/item/weapon/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && !user.mind.devilinfo && (user.mind.soulOwner != user.mind)) + if(user.mind && user.owns_soul() && !is_devil(user)) to_chat(user, "[src] burns in your hands.") user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) ..() diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index 74ab7be4b6..5424e45044 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -1,73 +1,79 @@ -/obj/item/weapon/vending_refill - name = "resupply canister" - var/machine_name = "Generic" - - icon = 'icons/obj/vending_restock.dmi' - icon_state = "refill_snack" - item_state = "restock_unit" - flags = CONDUCT - force = 7 - throwforce = 10 - throw_speed = 1 - throw_range = 7 - w_class = WEIGHT_CLASS_BULKY - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30) - var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products - var/init_charges = list(0, 0, 0) - - -/obj/item/weapon/vending_refill/New(amt = -1) - ..() - name = "\improper [machine_name] restocking unit" - if(isnum(amt) && amt > -1) - charges[1] = amt - -/obj/item/weapon/vending_refill/examine(mob/user) - ..() - if(charges[1] > 0) - to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).") - else - to_chat(user, "It's empty!") - -//NOTE I decided to go for about 1/3 of a machine's capacity - -/obj/item/weapon/vending_refill/boozeomat - machine_name = "Booze-O-Mat" - icon_state = "refill_booze" - charges = list(54, 4, 0)//of 159 standard, 12 contraband - init_charges = list(54, 4, 0) - -/obj/item/weapon/vending_refill/coffee - machine_name = "Solar's Best Hot Drinks" - icon_state = "refill_joe" - charges = list(25, 4, 0)//of 75 standard, 12 contraband - init_charges = list(25, 4, 0) - -/obj/item/weapon/vending_refill/snack - machine_name = "Getmore Chocolate Corp" - charges = list(12, 2, 0)//of 36 standard, 6 contraband - init_charges = list(12, 2, 0) - -/obj/item/weapon/vending_refill/cola - machine_name = "Robust Softdrinks" - icon_state = "refill_cola" - charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium - init_charges = list(30, 4, 1) - -/obj/item/weapon/vending_refill/cigarette - machine_name = "ShadyCigs Deluxe" - icon_state = "refill_smoke" - charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium - init_charges = list(12, 3, 2) - -/obj/item/weapon/vending_refill/autodrobe - machine_name = "AutoDrobe" - icon_state = "refill_costume" - charges = list(31, 2, 3)// of 94 standard, 6 contraband, 9 premium - init_charges = list(27, 2, 3) - -/obj/item/weapon/vending_refill/clothing - machine_name = "ClothesMate" - icon_state = "refill_clothes" - charges = list(31, 4, 4)// of 101 standard, 12 contraband, 10 premium(?) - init_charges = list(31, 4, 4) +/obj/item/weapon/vending_refill + name = "resupply canister" + var/machine_name = "Generic" + + icon = 'icons/obj/vending_restock.dmi' + icon_state = "refill_snack" + item_state = "restock_unit" + flags = CONDUCT + force = 7 + throwforce = 10 + throw_speed = 1 + throw_range = 7 + w_class = WEIGHT_CLASS_BULKY + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30) + var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products + var/init_charges = list(0, 0, 0) + + +/obj/item/weapon/vending_refill/New(amt = -1) + ..() + name = "\improper [machine_name] restocking unit" + if(isnum(amt) && amt > -1) + charges[1] = amt + +/obj/item/weapon/vending_refill/examine(mob/user) + ..() + if(charges[1] > 0) + to_chat(user, "It can restock [charges[1]+charges[2]+charges[3]] item(s).") + else + to_chat(user, "It's empty!") + +//NOTE I decided to go for about 1/3 of a machine's capacity + +/obj/item/weapon/vending_refill/boozeomat + machine_name = "Booze-O-Mat" + icon_state = "refill_booze" + charges = list(54, 4, 0)//of 159 standard, 12 contraband + init_charges = list(54, 4, 0) + +/obj/item/weapon/vending_refill/coffee + machine_name = "Solar's Best Hot Drinks" + icon_state = "refill_joe" + charges = list(25, 4, 0)//of 75 standard, 12 contraband + init_charges = list(25, 4, 0) + +/obj/item/weapon/vending_refill/snack + machine_name = "Getmore Chocolate Corp" + charges = list(12, 2, 0)//of 36 standard, 6 contraband + init_charges = list(12, 2, 0) + +/obj/item/weapon/vending_refill/cola + machine_name = "Robust Softdrinks" + icon_state = "refill_cola" + charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium + init_charges = list(30, 4, 1) + +/obj/item/weapon/vending_refill/cigarette + machine_name = "ShadyCigs Deluxe" + icon_state = "refill_smoke" + charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium + init_charges = list(12, 3, 2) + +/obj/item/weapon/vending_refill/autodrobe + machine_name = "AutoDrobe" + icon_state = "refill_costume" + charges = list(31, 2, 3)// of 94 standard, 6 contraband, 9 premium + init_charges = list(27, 2, 3) + +/obj/item/weapon/vending_refill/clothing + machine_name = "ClothesMate" + icon_state = "refill_clothes" + charges = list(31, 4, 4)// of 101 standard, 12 contraband, 10 premium(?) + init_charges = list(31, 4, 4) + +/obj/item/weapon/vending_refill/medical + machine_name = "NanoMed" + icon_state = "refill_medical" + charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium + init_charges = list(26, 5, 3) \ No newline at end of file diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index a0de9b5f76..084ac19f63 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -390,7 +390,7 @@ desc = "A chainsaw that has replaced your arm." icon_state = "chainsaw_on" item_state = "mounted_chainsaw" - flags = NODROP | ABSTRACT + flags = NODROP | ABSTRACT | DROPDEL w_class = WEIGHT_CLASS_HUGE force = 21 throwforce = 0 @@ -400,10 +400,17 @@ attack_verb = list("sawed", "torn", "cut", "chopped", "diced") hitsound = 'sound/weapons/chainsawhit.ogg' -/obj/item/weapon/mounted_chainsaw/dropped() - ..() +/obj/item/weapon/mounted_chainsaw/Destroy() + var/obj/item/bodypart/part new /obj/item/weapon/twohanded/required/chainsaw(get_turf(src)) - qdel(src) + if(iscarbon(loc)) + var/mob/living/carbon/holder = loc + var/index = holder.get_held_index_of_item(src) + if(index) + part = holder.hand_bodyparts[index] + . = ..() + if(part) + part.drop_limb() /obj/item/weapon/statuebust name = "bust" diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index e29d372a6c..9766dbc26d 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -23,7 +23,7 @@ var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. var/unique_rename = FALSE // can you customize the description/name of the thing? - + var/dangerous_possession = FALSE //Admin possession yes/no /obj/vv_edit_var(vname, vval) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index d46136a9ae..6212133b12 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -298,7 +298,7 @@ else for(var/mob/M in range(1,src)) if(CanHug(M)) - child.Attach(M) + child.Leap(M) break /obj/structure/alien/egg/obj_break(damage_flag) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 87560f426f..7202aeae1c 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -37,10 +37,9 @@ return attack_hand(user) /obj/structure/chair/narsie_act() - if(prob(20)) - var/obj/structure/chair/wood/W = new/obj/structure/chair/wood(get_turf(src)) - W.setDir(dir) - qdel(src) + var/obj/structure/chair/wood/W = new/obj/structure/chair/wood(get_turf(src)) + W.setDir(dir) + qdel(src) /obj/structure/chair/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) @@ -239,10 +238,9 @@ var/obj/structure/chair/origin_type = /obj/structure/chair /obj/item/chair/narsie_act() - if(prob(20)) - var/obj/item/chair/wood/W = new/obj/item/chair/wood(get_turf(src)) - W.setDir(dir) - qdel(src) + var/obj/item/chair/wood/W = new/obj/item/chair/wood(get_turf(src)) + W.setDir(dir) + qdel(src) /obj/item/chair/attack_self(mob/user) plant(user) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 6813706ed6..36730239ea 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -106,6 +106,11 @@ LINEN BINS icon_state = "sheetrd" item_color = "director" +// for Free Golems. +/obj/item/weapon/bedsheet/rd/royal_cape + name = "Royal Cape of the Liberator" + desc = "Majestic." + /obj/item/weapon/bedsheet/medical name = "medical blanket" desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 67989257f2..98a52994e9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -11,6 +11,7 @@ else new /obj/item/weapon/storage/backpack/satchel/cap(src) new /obj/item/clothing/neck/cloak/cap(src) + new /obj/item/weapon/storage/daki(src) new /obj/item/weapon/storage/backpack/dufflebag/captain(src) new /obj/item/clothing/head/crown/fancy(src) new /obj/item/clothing/suit/captunic(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 3817a16685..43fbdde5ee 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -11,30 +11,31 @@ max_integrity = 200 integrity_failure = 50 var/obj/item/showpiece = null - var/alert = 0 - var/open = 0 + var/alert = TRUE + var/open = FALSE + var/openable = TRUE var/obj/item/weapon/electronics/airlock/electronics var/start_showpiece_type = null //add type for items on display -/obj/structure/displaycase/Initialize() - . = ..() +/obj/structure/displaycase/Initialize() + . = ..() if(start_showpiece_type) showpiece = new start_showpiece_type (src) update_icon() /obj/structure/displaycase/Destroy() if(electronics) - QDEL_NULL(electronics) + QDEL_NULL(electronics) if(showpiece) - QDEL_NULL(showpiece) + QDEL_NULL(showpiece) return ..() /obj/structure/displaycase/examine(mob/user) ..() if(alert) to_chat(user, "Hooked up with an anti-theft system.") - if(showpiece) - to_chat(user, "There's [showpiece] inside.") + if(showpiece) + to_chat(user, "There's [showpiece] inside.") /obj/structure/displaycase/proc/dump() @@ -81,8 +82,8 @@ try getFlatIcon(A,defdir=4) catch - return 0 - return 1 + return FALSE + return TRUE /obj/structure/displaycase/proc/get_flat_icon_directional(atom/A) //Get flatIcon even if dir is mismatched for directionless icons @@ -113,7 +114,7 @@ return /obj/structure/displaycase/attackby(obj/item/weapon/W, mob/user, params) - if(W.GetID() && !broken) + if(W.GetID() && !broken && openable) if(allowed(user)) to_chat(user, "You [open ? "close":"open"] the [src]") toggle_lock(user) @@ -132,7 +133,7 @@ else to_chat(user, "[src] is already in good condition!") return - else if(!alert && istype(W,/obj/item/weapon/crowbar)) //Only applies to the lab cage and player made display cases + else if(!alert && istype(W,/obj/item/weapon/crowbar) && openable) //Only applies to the lab cage and player made display cases if(broken) if(showpiece) to_chat(user, "Remove the displayed object first.") @@ -145,8 +146,7 @@ to_chat(user, "You [open ? "close":"open"] the [src]") toggle_lock(user) else if(open && !showpiece) - if(user.drop_item()) - W.loc = src + if(user.transferItemToLoc(W, src)) showpiece = W to_chat(user, "You put [W] on display") update_icon() @@ -175,7 +175,7 @@ user.changeNext_move(CLICK_CD_MELEE) if (showpiece && (broken || open)) to_chat(user, "You deactivate the hover field built into the case.") - dump() + dump() src.add_fingerprint(user) update_icon() return @@ -247,96 +247,115 @@ desc = "A glass lab container for storing interesting creatures." start_showpiece_type = /obj/item/clothing/mask/facehugger/lamarr req_access = list(GLOB.access_rd) - - - -/obj/structure/displaycase/trophy - name = "trophy display case" - desc = "Store your trophies of accomplishment in here, and they will stay forever." - var/trophy_message = "" - var/placer_key = "" - var/added_roundstart = TRUE - alert = TRUE - integrity_failure = 0 - -/obj/structure/displaycase/trophy/Initialize() - . = ..() - GLOB.trophy_cases += src - -/obj/structure/displaycase/trophy/Destroy() - GLOB.trophy_cases -= src - return ..() - -/obj/structure/displaycase/trophy/examine(mob/user) - ..() - if(trophy_message) - to_chat(user, "The plaque reads:") - to_chat(user, trophy_message) - -/obj/structure/displaycase/trophy/attackby(obj/item/weapon/W, mob/user, params) - - if(!user.Adjacent(src)) //no TK museology - return - - if(!added_roundstart) - to_chat(user, "You've already put something new in this case.") - return - - if(is_type_in_typecache(W, GLOB.blacklisted_cargo_types)) - to_chat(user, "The case rejects the [W].") - return - - for(var/a in W.GetAllContents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) - to_chat(user, "The case rejects the [W].") - return - - if(user.drop_item()) - - if(showpiece) - to_chat(user, "You press a button, and [showpiece] descends into the floor of the case.") - QDEL_NULL(showpiece) - - to_chat(user, "You insert [W] into the case.") - W.forceMove(src) - showpiece = W - added_roundstart = FALSE - update_icon() - - placer_key = user.ckey - - trophy_message = W.desc //default value - - var/chosen_plaque = stripped_input(user, "What would you like the plaque to say? Default value is item's description.", "Trophy Plaque") - if(chosen_plaque) - if(user.Adjacent(src)) - trophy_message = chosen_plaque - to_chat(user, "You set the plaque's text.") - else - to_chat(user, "You are too far to set the plaque's text.") - - SSpersistence.SaveTrophy(src) - - else - to_chat(user, "\The [W] is stuck to your hand, you can't put it in the [src.name]!") - - return - -/obj/structure/displaycase/trophy/dump() - if (showpiece) - if(added_roundstart) - visible_message("The [showpiece] crumbles to dust!") - new /obj/effect/decal/cleanable/ash(loc) - QDEL_NULL(showpiece) - else - ..() - -/obj/item/showpiece_dummy - name = "Cheap replica" - -/obj/item/showpiece_dummy/Initialize(mapload, path) - . = ..() - var/obj/item/I = path - name = initial(I.name) - icon = initial(I.icon) - icon_state = initial(I.icon_state) + +/obj/structure/displaycase/trophy + name = "trophy display case" + desc = "Store your trophies of accomplishment in here, and they will stay forever." + var/trophy_message = "" + var/placer_key = "" + var/added_roundstart = TRUE + var/is_locked = TRUE + + alert = TRUE + integrity_failure = 0 + openable = FALSE + +/obj/structure/displaycase/trophy/Initialize() + . = ..() + GLOB.trophy_cases += src + +/obj/structure/displaycase/trophy/Destroy() + GLOB.trophy_cases -= src + return ..() + +/obj/structure/displaycase/trophy/examine(mob/user) + ..() + if(trophy_message) + to_chat(user, "The plaque reads:") + to_chat(user, trophy_message) + +/obj/structure/displaycase/trophy/attackby(obj/item/weapon/W, mob/user, params) + + if(!user.Adjacent(src)) //no TK museology + return + if(user.a_intent == INTENT_HARM) + return ..() + + if(user.is_holding_item_of_type(/obj/item/key/displaycase)) + if(added_roundstart) + is_locked = !is_locked + to_chat(user, "You [!is_locked ? "un" : ""]lock the case.") + else + to_chat(user, "The lock is stuck shut!") + return + + if(is_locked) + to_chat(user, "The case is shut tight with an old fashioned physical lock. Maybe you should ask the curator for the key?") + return + + if(!added_roundstart) + to_chat(user, "You've already put something new in this case.") + return + + if(is_type_in_typecache(W, GLOB.blacklisted_cargo_types)) + to_chat(user, "The case rejects the [W].") + return + + for(var/a in W.GetAllContents()) + if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types)) + to_chat(user, "The case rejects the [W].") + return + + if(user.transferItemToLoc(W, src)) + + if(showpiece) + to_chat(user, "You press a button, and [showpiece] descends into the floor of the case.") + QDEL_NULL(showpiece) + + to_chat(user, "You insert [W] into the case.") + showpiece = W + added_roundstart = FALSE + update_icon() + + placer_key = user.ckey + + trophy_message = W.desc //default value + + var/chosen_plaque = stripped_input(user, "What would you like the plaque to say? Default value is item's description.", "Trophy Plaque") + if(chosen_plaque) + if(user.Adjacent(src)) + trophy_message = chosen_plaque + to_chat(user, "You set the plaque's text.") + else + to_chat(user, "You are too far to set the plaque's text.") + + SSpersistence.SaveTrophy(src) + return TRUE + + else + to_chat(user, "\The [W] is stuck to your hand, you can't put it in the [src.name]!") + + return + +/obj/structure/displaycase/trophy/dump() + if (showpiece) + if(added_roundstart) + visible_message("The [showpiece] crumbles to dust!") + new /obj/effect/decal/cleanable/ash(loc) + QDEL_NULL(showpiece) + else + ..() + +/obj/item/key/displaycase + name = "display case key" + desc = "The key to the curator's display cases." + +/obj/item/showpiece_dummy + name = "Cheap replica" + +/obj/item/showpiece_dummy/Initialize(mapload, path) + . = ..() + var/obj/item/I = path + name = initial(I.name) + icon = initial(I.icon) + icon_state = initial(I.icon_state) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index c072c052e5..3990533562 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -12,6 +12,10 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user + if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits)) + to_chat(user, "You are not capable of wearing underwear.") + return + var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks") if(!Adjacent(user)) @@ -32,4 +36,4 @@ H.socks= new_socks add_fingerprint(H) - H.update_body() \ No newline at end of file + H.update_body() diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 466be07c50..389ae40e88 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -234,8 +234,9 @@ /obj/structure/falsewall/plasma/attackby(obj/item/weapon/W, mob/user, params) if(W.is_hot() > 300) - message_admins("Plasma falsewall ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma falsewall ignited by [key_name(user)] in ([x],[y],[z])") + var/turf/T = get_turf(src) + message_admins("Plasma falsewall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1) + log_game("Plasma falsewall ignited by [key_name(user)] in [COORD(T)]") burnbabyburn() else return ..() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index cdd706e5df..c00348a2c6 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -88,7 +88,7 @@ pixel_y = -20 /obj/structure/flora/tree/jungle/Initialize() - icon_state = "[icon_state][rand(1, 3)]" + icon_state = "[icon_state][rand(1, 6)]" ..() //grass diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index d087b14390..82378b094c 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -48,6 +48,11 @@ /obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn) new_spawn.real_name = random_unique_lizard_name(gender) to_chat(new_spawn, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!") + + new_spawn.grant_language(/datum/language/draconic) + var/datum/language_holder/holder = new_spawn.get_language_holder() + holder.selected_default_language = /datum/language/draconic + if(ishuman(new_spawn)) var/mob/living/carbon/human/H = new_spawn H.underwear = "Nude" @@ -91,7 +96,7 @@ //Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom. /obj/effect/mob_spawn/human/golem - name = "inert golem shell" + name = "inert free golem shell" desc = "A humanoid shape, empty, lifeless, and full of potential." mob_name = "a free golem" icon = 'icons/obj/wizard.dmi' @@ -101,13 +106,14 @@ death = FALSE anchored = 0 density = 0 + var/has_owner = FALSE var/can_transfer = TRUE //if golems can switch bodies to this new shell var/mob/living/owner = null //golem's owner if it has one flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \ travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ golems, so that no golem may ever be forced to serve again." -/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, has_owner = FALSE, mob/creator = null) +/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) ..() if(species) name += " ([initial(species.prefix)])" @@ -134,7 +140,10 @@ var/mob/living/carbon/human/H = new_spawn H.set_cloned_appearance() if(!name) - H.real_name = H.dna.species.random_name() + if(has_owner) + H.real_name = "[initial(X.prefix)] Golem ([rand(1,999)])" + else + H.real_name = H.dna.species.random_name() else H.real_name = name @@ -150,13 +159,15 @@ return ..() +/obj/effect/mob_spawn/human/golem/servant + has_owner = TRUE + name = "inert servant golem shell" + /obj/effect/mob_spawn/human/golem/adamantine - name = "dust-caked golem shell" + name = "dust-caked free golem shell" desc = "A humanoid shape, empty, lifeless, and full of potential." mob_name = "a free golem" - anchored = 1 - density = 1 can_transfer = FALSE mob_species = /datum/species/golem/adamantine @@ -287,3 +298,52 @@ /obj/effect/mob_spawn/human/hotel_staff/Destroy() new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) ..() + +/obj/effect/mob_spawn/human/demonic_friend + name = "Essence of friendship" + desc = "Oh boy! Oh boy! A friend!" + mob_name = "Demonic friend" + icon = 'icons/obj/cardboard_cutout.dmi' + icon_state = "cutout_basic" + uniform = /obj/item/clothing/under/assistantformal + shoes = /obj/item/clothing/shoes/laceup + pocket1 = /obj/item/device/radio/off + back = /obj/item/weapon/storage/backpack + implants = list(/obj/item/weapon/implant/mindshield) //No revolutionaries, he's MY friend. + death = FALSE + roundstart = FALSE + random = TRUE + has_id = TRUE + id_job = "SuperFriend" + id_access = "assistant" + var/obj/effect/proc_holder/spell/targeted/summon_friend/spell + var/datum/mind/owner + +/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell) + ..() + owner = owner_mind + flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for their short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell." + var/area/A = get_area(src) + if(!mapload && A) + notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) + objectives = "Be [owner.name]'s friend, and keep [owner.name] alive, so you don't get sent back to hell." + spell = summoning_spell + + +/obj/effect/mob_spawn/human/demonic_friend/special(mob/living/L) + if(!QDELETED(owner.current) && owner.current.stat != DEAD) + L.real_name = "[owner.name]'s best friend" + L.name = L.real_name + soullink(/datum/soullink/oneway, owner.current, L) + spell.friend = L + spell.charge_counter = spell.charge_max + L.mind.hasSoul = FALSE + var/mob/living/carbon/human/H = L + var/obj/item/worn = H.wear_id + var/obj/item/weapon/card/id/id = worn.GetID() + id.registered_name = L.real_name + id.update_label() + else + to_chat(L, "Your owner is already dead! You will soon perish.") + addtimer(CALLBACK(L, /mob.proc/dust, 150)) //Give em a few seconds as a mercy. + diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 9f37710d78..bdf2a5eb40 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -297,9 +297,8 @@ qdel(src) /obj/structure/girder/narsie_act() - if(prob(25)) - new /obj/structure/girder/cult(loc) - qdel(src) + new /obj/structure/girder/cult(loc) + qdel(src) /obj/structure/girder/displaced name = "displaced girder" diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 129862dd62..4c57c55e6a 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -188,8 +188,9 @@ /obj/structure/mineral_door/transparent/plasma/attackby(obj/item/weapon/W, mob/user, params) if(W.is_hot()) - message_admins("Plasma mineral door ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma mineral door ignited by [key_name(user)] in ([x],[y],[z])") + var/turf/T = get_turf(src) + message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1) + log_game("Plasma mineral door ignited by [key_name(user)] in [COORD(T)]") TemperatureAct() else return ..() diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index f5defdab50..6909965614 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -163,18 +163,20 @@ PlasmaBurn(500) burn = TRUE if(burn) + var/turf/T = get_turf(src) if(Proj.firer) - message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") + message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(Proj.firer)] in [ADMIN_COORDJMP(T)]",0,1) + log_game("Plasma statue ignited by [key_name(Proj.firer)] in [COORD(T)]") else - message_admins("Plasma statue ignited by [Proj]. No known firer.(?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma statue ignited by [Proj] in ([x],[y],[z]). No known firer.") + message_admins("Plasma statue ignited by [Proj]. No known firer, in [ADMIN_COORDJMP(T)]",0,1) + log_game("Plasma statue ignited by [Proj] in [COORD(T)]. No known firer.") ..() /obj/structure/statue/plasma/attackby(obj/item/weapon/W, mob/user, params) if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma statue ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma statue ignited by [key_name(user)] in ([x],[y],[z])") + var/turf/T = get_turf(src) + message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1) + log_game("Plasma statue ignited by [key_name(user)] in [COORD(T)]") ignite(W.is_hot()) else return ..() diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm index b6837015f1..50aa23434e 100644 --- a/code/game/objects/structures/table_frames.dm +++ b/code/game/objects/structures/table_frames.dm @@ -84,9 +84,8 @@ qdel(src) /obj/structure/table_frame/narsie_act() - if(prob(20)) - new /obj/structure/table_frame/wood(src.loc) - qdel(src) + new /obj/structure/table_frame/wood(src.loc) + qdel(src) /obj/structure/table_frame/ratvar_act() new /obj/structure/table_frame/brass(src.loc) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index c42b61a622..41ef527e1e 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -47,8 +47,7 @@ queue_smooth_neighbors(src) /obj/structure/table/narsie_act() - if(prob(20)) - new /obj/structure/table/wood(src.loc) + new /obj/structure/table/wood(src.loc) /obj/structure/table/ratvar_act() new /obj/structure/table/reinforced/brass(src.loc) diff --git a/code/game/say.dm b/code/game/say.dm index deab83ad10..bbbca1bbd9 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -35,10 +35,10 @@ GLOBAL_LIST_INIT(freqtospan, list( return 1 /atom/movable/proc/send_speech(message, range = 7, obj/source = src, bubble_type, list/spans, datum/language/message_language = null, message_mode) - var/rendered = compose_message(src, message_language, message, , spans) + var/rendered = compose_message(src, message_language, message, , spans, message_mode) for(var/_AM in get_hearers_in_view(range, source)) var/atom/movable/AM = _AM - AM.Hear(rendered, src, message_language, message, , spans) + AM.Hear(rendered, src, message_language, message, , spans, message_mode) //To get robot span classes, stuff like that. /atom/movable/proc/get_spans() @@ -58,11 +58,11 @@ GLOBAL_LIST_INIT(freqtospan, list( var/endspanpart = "" //Message - var/messagepart = " [lang_treat(speaker, message_language, raw_message, spans)]
" + var/messagepart = " [lang_treat(speaker, message_language, raw_message, spans, message_mode)]
" var/languageicon = "" - var/datum/language/D = get_language_instance(message_language) - if(D.display_icon(src)) + var/datum/language/D = GLOB.language_datum_instances[message_language] + if(istype(D) && D.display_icon(src)) languageicon = "[D.get_icon()] " return "[spanpart1][spanpart2][freqpart][languageicon][compose_track_href(speaker, namepart)][namepart][compose_job(speaker, message_language, raw_message, radio_freq)][endspanpart][messagepart]" @@ -103,7 +103,7 @@ GLOBAL_LIST_INIT(freqtospan, list( return speaker.say_quote(raw_message, spans, message_mode) else if(language) var/atom/movable/AM = speaker.GetSource() - var/datum/language/D = get_language_instance(language) + var/datum/language/D = GLOB.language_datum_instances[language] raw_message = D.scramble(raw_message) if(AM) return AM.say_quote(raw_message, spans, message_mode) @@ -172,4 +172,4 @@ GLOBAL_LIST_INIT(freqtospan, list( return source /atom/movable/virtualspeaker/GetRadio() - return radio + return radio \ No newline at end of file diff --git a/code/game/sound.dm b/code/game/sound.dm index 448f3cd85b..af5394ea2a 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -23,10 +23,10 @@ if(T && T.z == turf_source.z) M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, surround, channel, pressure_affected) -/atom/proc/playsound_direct(soundin, vol as num, vary, frequency, falloff, surround = TRUE, channel = 0, pressure_affected = FALSE) - playsound_local(get_turf(src), soundin, vol, vary, frequency, falloff, surround, channel) +/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1, channel = 0, pressure_affected = TRUE) + if(!client || !can_hear()) + return -/atom/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1, channel = 0, pressure_affected = TRUE) soundin = get_sfx(soundin) var/sound/S = sound(soundin) @@ -76,15 +76,10 @@ // The y value is for above your head, but there is no ceiling in 2d spessmens. S.y = 1 - S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) + S.falloff = falloff || FALLOFF_SOUNDS src << S -/mob/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1, channel = 0, pressure_affected = TRUE) - if(!client || !can_hear()) - return - ..() - /proc/open_sound_channel() var/static/next_channel = 1 //loop through the available 1024 - (the ones we reserve) channels and pray that its not still being used . = ++next_channel diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 7183d33ef9..ff278b415a 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -30,7 +30,7 @@ initial_gas_mix = "o2=14;n2=23;TEMP=300" /turf/open/indestructible/necropolis/Initialize() - ..() + . = ..() if(prob(12)) icon_state = "necro[rand(2,3)]" diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 8890c50129..8b24a4c816 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -143,14 +143,14 @@ qdel(S.mmi) qdel(AM) - + if(AM && !QDELETED(AM)) //It's indestructible visible_message("[src] spits out the [AM]!") AM.alpha = oldalpha AM.color = oldcolor AM.transform = oldtransform AM.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)),rand(1, 10),rand(1, 10)) - + /turf/open/chasm/straight_down/lava_land_surface/normal_air initial_gas_mix = "o2=22;n2=82;TEMP=293.15" @@ -158,3 +158,17 @@ /turf/open/chasm/CanPass(atom/movable/mover, turf/target, height=0) return 1 + + + +//Jungle + +/turf/open/chasm/jungle + icon = 'icons/turf/floors/junglechasm.dmi' + planetary_atmos = TRUE + initial_gas_mix = "o2=14;n2=23;TEMP=300" + +/turf/open/chasm/straight_down/jungle + icon = 'icons/turf/floors/junglechasm.dmi' + planetary_atmos = TRUE + initial_gas_mix = "o2=14;n2=23;TEMP=300" \ No newline at end of file diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 5f581fba63..c1993677f3 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -188,8 +188,9 @@ else if(prob(50)) ReplaceWithLattice() -/turf/open/floor/narsie_act() - if(prob(20)) +/turf/open/floor/narsie_act(force, ignore_mobs, probability = 20) + . = ..() + if(.) ChangeTurf(/turf/open/floor/engine/cult) /turf/open/floor/ratvar_act(force, ignore_mobs) diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index eaba3d50eb..4f6da47bde 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -1,6 +1,7 @@ /* In this file: * Wood floor * Grass floor + * Fake Basalt * Carpet floor * Fake pits * Fake space @@ -67,6 +68,7 @@ broken_states = list("sand") flags = NONE var/ore_type = /obj/item/weapon/ore/glass + var/turfverb = "uproot" /turf/open/floor/grass/Initialize() ..() @@ -76,7 +78,7 @@ if(istype(C, /obj/item/weapon/shovel) && params) new ore_type(src) new ore_type(src) //Make some sand if you shovel grass - user.visible_message("[user] digs up [src].", "You uproot [src].") + user.visible_message("[user] digs up [src].", "You [src.turfverb] [src].") playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) make_plating() if(..()) @@ -93,7 +95,6 @@ initial_gas_mix = "o2=22;n2=82;TEMP=180" slowdown = 2 - /turf/open/floor/grass/snow/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/crowbar))//You need to dig this turf out instead of crowbarring it return @@ -113,6 +114,24 @@ icon_state = "basalt[rand(0, 12)]" set_basalt_light(src) + +/turf/open/floor/grass/fakebasalt //Heart is not a real planeteer power + name = "aesthetic volcanic flooring" + desc = "Safely recreated turf for your hellplanet-scaping" + icon = 'icons/turf/floors.dmi' + icon_state = "basalt" + floor_tile = /obj/item/stack/tile/basalt + ore_type = /obj/item/weapon/ore/glass/basalt + turfverb = "dig up" + slowdown = 0 + +/turf/open/floor/grass/fakebasalt/Initialize() + ..() + if(prob(15)) + icon_state = "basalt[rand(0, 12)]" + set_basalt_light(src) + + /turf/open/floor/carpet name = "carpet" desc = "Soft velvet carpeting. Feels good between your toes." @@ -139,8 +158,14 @@ if(smooth) queue_smooth_neighbors(src) -/turf/open/floor/carpet/narsie_act() - return +/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20) + . = (prob(probability) || force) + for(var/I in src) + var/atom/A = I + if(ignore_mobs && ismob(A)) + continue + if(ismob(A) || .) + A.narsie_act() /turf/open/floor/carpet/break_tile() broken = 1 diff --git a/code/game/turfs/simulated/floor/mineral_floor.dm b/code/game/turfs/simulated/floor/mineral_floor.dm index 3e58e62854..fc5a57e16d 100644 --- a/code/game/turfs/simulated/floor/mineral_floor.dm +++ b/code/game/turfs/simulated/floor/mineral_floor.dm @@ -40,23 +40,23 @@ /turf/open/floor/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) - PlasmaBurn() + PlasmaBurn(exposed_temperature) /turf/open/floor/mineral/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma flooring was ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma flooring was ignited by [key_name(user)] in ([x],[y],[z])") + message_admins("Plasma flooring was ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("Plasma flooring was ignited by [key_name(user)] in [COORD(src)]") ignite(W.is_hot()) return ..() -/turf/open/floor/mineral/plasma/proc/PlasmaBurn() +/turf/open/floor/mineral/plasma/proc/PlasmaBurn(temperature) make_plating() - atmos_spawn_air("plasma=20;TEMP=1000") + atmos_spawn_air("plasma=20;TEMP=[temperature]") /turf/open/floor/mineral/plasma/proc/ignite(exposed_temperature) if(exposed_temperature > 300) - PlasmaBurn() + PlasmaBurn(exposed_temperature) //GOLD diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 79ad84e752..9144cbc871 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -250,9 +250,10 @@ if(severity < 3 || target == src) ChangeTurf(src.baseturf) -/turf/open/floor/vines/narsie_act() - if(prob(20)) - ChangeTurf(src.baseturf) //nar sie eats this shit +/turf/open/floor/vines/narsie_act(force, ignore_mobs, probability = 20) + if(prob(probability) || force) + ChangeTurf(baseturf) //nar sie eats this shit + narsie_act(force, ignore_mobs, probability) /turf/open/floor/vines/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm index 580aadc85f..0d13b93432 100644 --- a/code/game/turfs/simulated/floor/plating/dirt.dm +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -3,19 +3,9 @@ desc = "Upon closer examination, it's still dirt." icon = 'icons/turf/floors.dmi' icon_state = "dirt" - var/smooth_icon = 'icons/turf/floors/dirt.dmi' - canSmoothWith = list(/turf/closed, /turf/open/floor/plating/dirt) - smooth = SMOOTH_MORE|SMOOTH_BORDER - baseturf = /turf/open/chasm/straight_down/lava_land_surface + baseturf = /turf/open/chasm/straight_down/jungle initial_gas_mix = "o2=14;n2=23;TEMP=300" planetary_atmos = TRUE -/turf/open/floor/plating/dirt/Initialize() - pixel_y = -2 - pixel_x = -2 - icon = smooth_icon - ..() - /turf/open/floor/plating/dirt/dark - icon_state = "darkdirt" - smooth_icon = 'icons/turf/floors/darkdirt.dmi' + icon_state = "greenerdirt" diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index bbc61d54d3..9c40b8276f 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -125,9 +125,6 @@ qdel(realappearence) realappearence = null -/turf/open/floor/engine/cult/narsie_act() - return - /turf/open/floor/engine/cult/ratvar_act() . = ..() if(istype(src, /turf/open/floor/engine/cult)) //if we haven't changed type diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 398ff190f2..54f3ad5ad5 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -407,14 +407,14 @@ if(z != 5) notify_admins = 1 if(!triggered_by_explosion) - message_admins("[key_name_admin(user)]? (FLW) has triggered a gibtonite deposit reaction at [A.name] (JMP).") + message_admins("[ADMIN_LOOKUPFLW(user)] has triggered a gibtonite deposit reaction at [A.name] [ADMIN_JMP(bombturf)].") else - message_admins("An explosion has triggered a gibtonite deposit reaction at [A.name] (JMP).") + message_admins("An explosion has triggered a gibtonite deposit reaction at [A.name] [ADMIN_JMP(bombturf)].") if(!triggered_by_explosion) - log_game("[key_name(user)] has triggered a gibtonite deposit reaction at [A.name] ([A.x], [A.y], [A.z]).") + log_game("[key_name(user)] has triggered a gibtonite deposit reaction at [A.name] [ADMIN_JMP(bombturf)].") else - log_game("An explosion has triggered a gibtonite deposit reaction at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") + log_game("An explosion has triggered a gibtonite deposit reaction at [A.name] [COORD(bombturf)]") countdown(notify_admins) diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index 355ba66a62..b78099c6bb 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -101,8 +101,8 @@ /turf/closed/wall/mineral/plasma/attackby(obj/item/weapon/W, mob/user, params) if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite - message_admins("Plasma wall ignited by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma wall ignited by [key_name(user)] in ([x],[y],[z])") + message_admins("Plasma wall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("Plasma wall ignited by [key_name(user)] in [COORD(src)]") ignite(W.is_hot()) return ..() @@ -111,7 +111,7 @@ new girder_type(src) src.ChangeTurf(/turf/open/floor/plasteel) var/turf/open/T = src - T.atmos_spawn_air("plasma=400;TEMP=1000") + T.atmos_spawn_air("plasma=400;TEMP=[temperature]") /turf/closed/wall/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( if(exposed_temperature > 300) @@ -153,8 +153,11 @@ icon = 'icons/turf/walls/snow_wall.dmi' icon_state = "snow" hardness = 80 + explosion_block = 0 + slicing_duration = 30 sheet_type = /obj/item/stack/sheet/mineral/snow canSmoothWith = null + girder_type = null /turf/closed/wall/mineral/abductor name = "alien wall" diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm index a0ed982144..9fa69fc6a7 100644 --- a/code/game/turfs/simulated/wall/misc_walls.dm +++ b/code/game/turfs/simulated/wall/misc_walls.dm @@ -4,19 +4,27 @@ icon = 'icons/turf/walls/cult_wall.dmi' icon_state = "cult" canSmoothWith = null + smooth = SMOOTH_MORE sheet_type = /obj/item/stack/sheet/runed_metal sheet_amount = 1 girder_type = /obj/structure/girder/cult /turf/closed/wall/mineral/cult/Initialize() new /obj/effect/overlay/temp/cult/turf(src) - ..() + . = ..() /turf/closed/wall/mineral/cult/devastate_wall() new sheet_type(get_turf(src), sheet_amount) -/turf/closed/wall/mineral/cult/narsie_act() - return +/turf/closed/wall/mineral/cult/Exited(atom/movable/AM, atom/newloc) + . = ..() + if(istype(AM, /mob/living/simple_animal/hostile/construct/harvester)) //harvesters can go through cult walls, dragging something with + var/mob/living/simple_animal/hostile/construct/harvester/H = AM + var/atom/movable/stored_pulling = H.pulling + if(stored_pulling) + stored_pulling.setDir(get_dir(stored_pulling.loc, newloc)) + stored_pulling.forceMove(src) + H.start_pulling(stored_pulling, TRUE) /turf/closed/wall/mineral/cult/ratvar_act() . = ..() diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 1aea3d7dbc..068dd0f218 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -50,7 +50,8 @@ /turf/closed/wall/proc/devastate_wall() new sheet_type(src, sheet_amount) - new /obj/item/stack/sheet/metal(src) + if(girder_type) + new /obj/item/stack/sheet/metal(src) /turf/closed/wall/ex_act(severity, target) if(target == src) @@ -238,8 +239,9 @@ if(prob(30)) dismantle_wall() -/turf/closed/wall/narsie_act() - if(prob(20)) +/turf/closed/wall/narsie_act(force, ignore_mobs, probability = 20) + . = ..() + if(.) ChangeTurf(/turf/closed/wall/mineral/cult) /turf/closed/wall/ratvar_act(force, ignore_mobs) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index b3a322d407..68c00c54ec 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -59,7 +59,8 @@ AM.newtonian_move(dir) /turf/open/space/transit/CanBuildHere() - return istype(get_area(src), /area/shuttle) + return SSshuttle.is_in_shuttle_bounds(src) + /turf/open/space/transit/Initialize() ..() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 4c29d87dfa..96e3b9c590 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -375,6 +375,15 @@ A.ex_act(severity, target) CHECK_TICK +/turf/narsie_act(force, ignore_mobs, probability = 20) + . = (prob(probability) || force) + for(var/I in src) + var/atom/A = I + if(ignore_mobs && ismob(A)) + continue + if(ismob(A) || .) + A.narsie_act() + /turf/ratvar_act(force, ignore_mobs, probability = 40) . = (prob(probability) || force) for(var/I in src) @@ -455,6 +464,8 @@ O = new() O.underlays.Add(T) T.ChangeTurf(type) + for(var/group in decals) + T.add_decal(decals[group],group) if(underlays.len) T.underlays = O.underlays if(T.icon_state != icon_state) diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index 9411917c39..bba253a9da 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -9,6 +9,7 @@ icon_state = "sleeper" state_open = TRUE anchored = TRUE + occupant_typecache = list(/mob/living/carbon/human) // turned into typecache in Initialize var/you_die_in_the_game_you_die_for_real = FALSE var/datum/effect_system/spark_spread/sparks var/mob/living/carbon/human/virtual_reality/vr_human @@ -92,11 +93,12 @@ return switch(action) if("vr_connect") - if(ishuman(occupant) && occupant.mind) + var/mob/living/carbon/human/human_occupant = occupant + if(human_occupant && human_occupant.mind) to_chat(occupant, "Transfering to virtual reality...") if(vr_human) vr_human.revert_to_reality(FALSE, FALSE) - occupant.mind.transfer_to(vr_human) + human_occupant.mind.transfer_to(vr_human) vr_human.real_me = occupant to_chat(vr_human, "Transfer successful! you are now playing as [vr_human] in VR!") SStgui.close_user_uis(vr_human, src) diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 12517eb385..b2dc6882cb 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -1,505 +1,502 @@ -#define MAX_ADMIN_BANS_PER_ADMIN 1 - -//Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. -/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null) - - if(!check_rights(R_BAN)) - return - - if(!SSdbcore.Connect()) - to_chat(src, "Failed to establish database connection.") - return - - var/bantype_pass = 0 - var/bantype_str - var/maxadminbancheck //Used to limit the number of active bans of a certein type that each admin can give. Used to protect against abuse or mutiny. - var/announceinirc //When set, it announces the ban in irc. Intended to be a way to raise an alarm, so to speak. - var/blockselfban //Used to prevent the banning of yourself. - var/kickbannedckey //Defines whether this proc should kick the banned person, if they are connected (if banned_mob is defined). - //some ban types kick players after this proc passes (tempban, permaban), but some are specific to db_ban, so - //they should kick within this proc. - switch(bantype) - if(BANTYPE_PERMA) - bantype_str = "PERMABAN" - duration = -1 - bantype_pass = 1 - blockselfban = 1 - if(BANTYPE_TEMP) - bantype_str = "TEMPBAN" - bantype_pass = 1 - blockselfban = 1 - if(BANTYPE_JOB_PERMA) - bantype_str = "JOB_PERMABAN" - duration = -1 - bantype_pass = 1 - if(BANTYPE_JOB_TEMP) - bantype_str = "JOB_TEMPBAN" - bantype_pass = 1 - if(BANTYPE_ADMIN_PERMA) - bantype_str = "ADMIN_PERMABAN" - duration = -1 - bantype_pass = 1 - maxadminbancheck = 1 - announceinirc = 1 - blockselfban = 1 - kickbannedckey = 1 - if(BANTYPE_ADMIN_TEMP) - bantype_str = "ADMIN_TEMPBAN" - bantype_pass = 1 - maxadminbancheck = 1 - announceinirc = 1 - blockselfban = 1 - kickbannedckey = 1 - if( !bantype_pass ) return - if( !istext(reason) ) return - if( !isnum(duration) ) return - - var/ckey - var/computerid - var/ip - - if(ismob(banned_mob)) - ckey = banned_mob.ckey - if(banned_mob.client) - computerid = banned_mob.client.computer_id - ip = banned_mob.client.address - else - computerid = banned_mob.computer_id - ip = banned_mob.lastKnownIP - else if(banckey) - ckey = ckey(banckey) - computerid = bancid - ip = banip - - var/datum/DBQuery/query_add_ban_get_id = SSdbcore.NewQuery("SELECT id FROM [format_table_name("player")] WHERE ckey = '[ckey]'") - if(!query_add_ban_get_id.warn_execute()) - return - var/validckey = 0 - if(query_add_ban_get_id.NextRow()) - validckey = 1 - if(!validckey) - if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) - message_admins("[key_name_admin(usr)] attempted to ban [ckey], but [ckey] has not been seen yet. Please only ban actual players.",1) - return - - var/a_ckey - var/a_computerid - var/a_ip - - if(src.owner && istype(src.owner, /client)) - a_ckey = src.owner:ckey - a_computerid = src.owner:computer_id - a_ip = src.owner:address - - if(blockselfban) - if(a_ckey == ckey) - to_chat(usr, "You cannot apply this ban type on yourself.") - return - - var/who - for(var/client/C in GLOB.clients) - if(!who) - who = "[C]" - else - who += ", [C]" - - var/adminwho - for(var/client/C in GLOB.admins) - if(!adminwho) - adminwho = "[C]" - else - adminwho += ", [C]" - - reason = sanitizeSQL(reason) - - if(maxadminbancheck) - var/datum/DBQuery/query_check_adminban_amt = SSdbcore.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") - if(!query_check_adminban_amt.warn_execute()) - return - if(query_check_adminban_amt.NextRow()) - var/adm_bans = text2num(query_check_adminban_amt.item[1]) - if(adm_bans >= MAX_ADMIN_BANS_PER_ADMIN) - to_chat(usr, "You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!") - return - if(!computerid) - computerid = "0" - if(!ip) - ip = "0.0.0.0" - var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" - var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql) - if(!query_add_ban.warn_execute()) - return - to_chat(usr, "Ban saved to database.") - var/msg = "[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database." - message_admins(msg,1) - var/datum/admin_help/AH = admin_ticket_log(ckey, msg) - - if(announceinirc) - send2irc("BAN ALERT","[a_ckey] applied a [bantype_str] on [ckey]") - - if(kickbannedckey) - if(AH) - AH.Resolve() //with prejudice - if(banned_mob && banned_mob.client && banned_mob.client.ckey == banckey) - qdel(banned_mob.client) - return 1 - -/datum/admins/proc/DB_ban_unban(ckey, bantype, job = "") - - if(!check_rights(R_BAN)) - return - - var/bantype_str - if(bantype) - var/bantype_pass = 0 - switch(bantype) - if(BANTYPE_PERMA) - bantype_str = "PERMABAN" - bantype_pass = 1 - if(BANTYPE_TEMP) - bantype_str = "TEMPBAN" - bantype_pass = 1 - if(BANTYPE_JOB_PERMA) - bantype_str = "JOB_PERMABAN" - bantype_pass = 1 - if(BANTYPE_JOB_TEMP) - bantype_str = "JOB_TEMPBAN" - bantype_pass = 1 - if(BANTYPE_ADMIN_PERMA) - bantype_str = "ADMIN_PERMABAN" - bantype_pass = 1 - if(BANTYPE_ADMIN_TEMP) - bantype_str = "ADMIN_TEMPBAN" - bantype_pass = 1 - if(BANTYPE_ANY_FULLBAN) - bantype_str = "ANY" - bantype_pass = 1 - if(BANTYPE_ANY_JOB) - bantype_str = "ANYJOB" - bantype_pass = 1 - if( !bantype_pass ) return - - var/bantype_sql - if(bantype_str == "ANY") - bantype_sql = "(bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now() ) )" - else if(bantype_str == "ANYJOB") - bantype_sql = "(bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now() ) )" - 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)" - if(job) - sql += " AND job = '[job]'" - - if(!SSdbcore.Connect()) - return - - var/ban_id - var/ban_number = 0 //failsafe - - var/datum/DBQuery/query_unban_get_id = SSdbcore.NewQuery(sql) - if(!query_unban_get_id.warn_execute()) - return - while(query_unban_get_id.NextRow()) - ban_id = query_unban_get_id.item[1] - ban_number++; - - if(ban_number == 0) - to_chat(usr, "Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.") - return - - if(ban_number > 1) - to_chat(usr, "Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.") - return - - if(istext(ban_id)) - ban_id = text2num(ban_id) - if(!isnum(ban_id)) - to_chat(usr, "Database update failed due to a ban ID mismatch. Contact the database admin.") - return - - DB_ban_unban_by_id(ban_id) - -/datum/admins/proc/DB_ban_edit(banid = null, param = null) - - if(!check_rights(R_BAN)) - return - - if(!isnum(banid) || !istext(param)) - to_chat(usr, "Cancelled") - return - - var/datum/DBQuery/query_edit_ban_get_details = SSdbcore.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") - if(!query_edit_ban_get_details.warn_execute()) - return - - var/eckey = usr.ckey //Editing admin ckey - var/pckey //(banned) Player ckey - var/duration //Old duration - var/reason //Old reason - - if(query_edit_ban_get_details.NextRow()) - pckey = query_edit_ban_get_details.item[1] - duration = query_edit_ban_get_details.item[2] - reason = query_edit_ban_get_details.item[3] - else - to_chat(usr, "Invalid ban id. Contact the database admin") - return - - reason = sanitizeSQL(reason) - var/value - - switch(param) - if("reason") - if(!value) - value = input("Insert the new reason for [pckey]'s ban", "New Reason", "[reason]", null) as null|text - value = sanitizeSQL(value) - if(!value) - to_chat(usr, "Cancelled") - return - - var/datum/DBQuery/query_edit_ban_reason = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") - if(!query_edit_ban_reason.warn_execute()) - return - message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]",1) - if("duration") - if(!value) - value = input("Insert the new duration (in minutes) for [pckey]'s ban", "New Duration", "[duration]", null) as null|num - if(!isnum(value) || !value) - to_chat(usr, "Cancelled") - return - - var/datum/DBQuery/query_edit_ban_duration = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") - if(!query_edit_ban_duration.warn_execute()) - return - message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]",1) - if("unban") - if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") - DB_ban_unban_by_id(banid) - return - else - to_chat(usr, "Cancelled") - return - else - to_chat(usr, "Cancelled") - return - -/datum/admins/proc/DB_ban_unban_by_id(id) - - if(!check_rights(R_BAN)) - return - - var/sql = "SELECT ckey FROM [format_table_name("ban")] WHERE id = [id]" - - if(!SSdbcore.Connect()) - return - - var/ban_number = 0 //failsafe - - var/pckey - var/datum/DBQuery/query_unban_get_ckey = SSdbcore.NewQuery(sql) - if(!query_unban_get_ckey.warn_execute()) - return - while(query_unban_get_ckey.NextRow()) - pckey = query_unban_get_ckey.item[1] - ban_number++; - - if(ban_number == 0) - to_chat(usr, "Database update failed due to a ban id not being present in the database.") - return - - if(ban_number > 1) - to_chat(usr, "Database update failed due to multiple bans having the same ID. Contact the database admin.") - return - - if(!src.owner || !istype(src.owner, /client)) - return - - var/unban_ckey = src.owner:ckey - var/unban_computerid = src.owner:computer_id - var/unban_ip = src.owner:address - - var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" - var/datum/DBQuery/query_unban = SSdbcore.NewQuery(sql_update) - if(!query_unban.warn_execute()) - return - message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) - -/client/proc/DB_ban_panel() - set category = "Admin" - set name = "Banning Panel" - set desc = "Edit admin permissions" - - if(!holder) - return - - holder.DB_ban_panel() - - -/datum/admins/proc/DB_ban_panel(playerckey = null, adminckey = null, page = 0) - if(!usr.client) - return - - if(!check_rights(R_BAN)) - return - - if(!SSdbcore.Connect()) - to_chat(usr, "Failed to establish database connection.") - return - - var/output = "
" - - output += "" - - output += "" - output += "" - output += "
" - output += "

Banning panel

" - output += "
" - - output += "
Add custom ban: (ONLY use this if you can't ban through any other method)" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "
Ban type:Ckey:
IP: Computer id:
Duration: Job:
" - output += "Reason:

" - output += "" - output += "
" - - output += "
" - - output += "
Search: " - output += "" - output += "Ckey: " - output += "Admin ckey: " - output += "" - output += "
" - output += "Please note that all jobban bans or unbans are in-effect the following round." - - if(adminckey || playerckey) - playerckey = sanitizeSQL(ckey(playerckey)) - adminckey = sanitizeSQL(ckey(adminckey)) - var/playersearch = "" - var/adminsearch = "" - if(playerckey) - playersearch = "AND ckey = '[playerckey]' " - if(adminckey) - adminsearch = "AND a_ckey = '[adminckey]' " - var/bancount = 0 - var/bansperpage = 15 - var/pagecount = 0 - page = text2num(page) - var/datum/DBQuery/query_count_bans = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch]") - if(!query_count_bans.warn_execute()) - return - if(query_count_bans.NextRow()) - bancount = text2num(query_count_bans.item[1]) - if(bancount > bansperpage) - output += "
Page: " - while(bancount > 0) - output+= "|[pagecount == page ? "\[[pagecount]\]" : "\[[pagecount]\]"]" - bancount -= bansperpage - pagecount++ - output += "|" - var/blcolor = "#ffeeee" //banned light - var/bdcolor = "#ffdddd" //banned dark - var/ulcolor = "#eeffee" //unbanned light - var/udcolor = "#ddffdd" //unbanned dark - - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - var/limit = " LIMIT [bansperpage * page], [bansperpage]" - var/datum/DBQuery/query_search_bans = SSdbcore.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch] ORDER BY bantime DESC[limit]") - if(!query_search_bans.warn_execute()) - return - - while(query_search_bans.NextRow()) - var/banid = query_search_bans.item[1] - var/bantime = query_search_bans.item[2] - var/bantype = query_search_bans.item[3] - var/reason = query_search_bans.item[4] - var/job = query_search_bans.item[5] - var/duration = query_search_bans.item[6] - var/expiration = query_search_bans.item[7] - var/ckey = query_search_bans.item[8] - var/ackey = query_search_bans.item[9] - var/unbanned = query_search_bans.item[10] - var/unbanckey = query_search_bans.item[11] - var/unbantime = query_search_bans.item[12] - var/edits = query_search_bans.item[13] - - var/lcolor = blcolor - var/dcolor = bdcolor - if(unbanned) - lcolor = ulcolor - dcolor = udcolor - - var/typedesc ="" - switch(bantype) - if("PERMABAN") - typedesc = "PERMABAN" - if("TEMPBAN") - typedesc = "TEMPBAN
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]
" - if("JOB_PERMABAN") - typedesc = "JOBBAN
([job])" - if("JOB_TEMPBAN") - typedesc = "TEMP JOBBAN
([job])
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]" - if("ADMIN_PERMABAN") - typedesc = "ADMIN PERMABAN" - if("ADMIN_TEMPBAN") - typedesc = "ADMIN TEMPBAN
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]
" - - output += "
" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - if(edits) - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - if(unbanned) - output += "" - output += "" - output += "" - output += "" - output += "" - output += "" - - output += "
TYPECKEYTIME APPLIEDADMINOPTIONS
[typedesc][ckey][bantime][ackey][(unbanned) ? "" : "Unban"]
Reason: [(unbanned) ? "" : "(Edit)"] \"[reason]\"
EDITS
[edits]
UNBANNED by admin [unbanckey] on [unbantime]
 
" - +#define MAX_ADMIN_BANS_PER_ADMIN 1 + +//Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. +/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null) + + if(!check_rights(R_BAN)) + return + + if(!SSdbcore.Connect()) + to_chat(src, "Failed to establish database connection.") + return + + var/bantype_pass = 0 + var/bantype_str + var/maxadminbancheck //Used to limit the number of active bans of a certein type that each admin can give. Used to protect against abuse or mutiny. + var/announceinirc //When set, it announces the ban in irc. Intended to be a way to raise an alarm, so to speak. + var/blockselfban //Used to prevent the banning of yourself. + var/kickbannedckey //Defines whether this proc should kick the banned person, if they are connected (if banned_mob is defined). + //some ban types kick players after this proc passes (tempban, permaban), but some are specific to db_ban, so + //they should kick within this proc. + switch(bantype) + if(BANTYPE_PERMA) + bantype_str = "PERMABAN" + duration = -1 + bantype_pass = 1 + blockselfban = 1 + if(BANTYPE_TEMP) + bantype_str = "TEMPBAN" + bantype_pass = 1 + blockselfban = 1 + if(BANTYPE_JOB_PERMA) + bantype_str = "JOB_PERMABAN" + duration = -1 + bantype_pass = 1 + if(BANTYPE_JOB_TEMP) + bantype_str = "JOB_TEMPBAN" + bantype_pass = 1 + if(BANTYPE_ADMIN_PERMA) + bantype_str = "ADMIN_PERMABAN" + duration = -1 + bantype_pass = 1 + maxadminbancheck = 1 + announceinirc = 1 + blockselfban = 1 + kickbannedckey = 1 + if(BANTYPE_ADMIN_TEMP) + bantype_str = "ADMIN_TEMPBAN" + bantype_pass = 1 + maxadminbancheck = 1 + announceinirc = 1 + blockselfban = 1 + kickbannedckey = 1 + if( !bantype_pass ) return + if( !istext(reason) ) return + if( !isnum(duration) ) return + + var/ckey + var/computerid + var/ip + + if(ismob(banned_mob)) + ckey = banned_mob.ckey + if(banned_mob.client) + computerid = banned_mob.client.computer_id + ip = banned_mob.client.address + else + computerid = banned_mob.computer_id + ip = banned_mob.lastKnownIP + else if(banckey) + ckey = ckey(banckey) + computerid = bancid + ip = banip + + var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[ckey]'") + if(!query_add_ban_get_ckey.warn_execute()) + return + if(!query_add_ban_get_ckey.NextRow()) + if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) + if(alert(usr, "[ckey] has not been seen before, are you sure you want to create a ban for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") + return + + var/a_ckey + var/a_computerid + var/a_ip + + if(src.owner && istype(src.owner, /client)) + a_ckey = src.owner:ckey + a_computerid = src.owner:computer_id + a_ip = src.owner:address + + if(blockselfban) + if(a_ckey == ckey) + to_chat(usr, "You cannot apply this ban type on yourself.") + return + + var/who + for(var/client/C in GLOB.clients) + if(!who) + who = "[C]" + else + who += ", [C]" + + var/adminwho + for(var/client/C in GLOB.admins) + if(!adminwho) + adminwho = "[C]" + else + adminwho += ", [C]" + + reason = sanitizeSQL(reason) + + if(maxadminbancheck) + var/datum/DBQuery/query_check_adminban_amt = SSdbcore.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_check_adminban_amt.warn_execute()) + return + if(query_check_adminban_amt.NextRow()) + var/adm_bans = text2num(query_check_adminban_amt.item[1]) + if(adm_bans >= MAX_ADMIN_BANS_PER_ADMIN) + to_chat(usr, "You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!") + return + if(!computerid) + computerid = "0" + if(!ip) + ip = "0.0.0.0" + var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" + var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql) + if(!query_add_ban.warn_execute()) + return + to_chat(usr, "Ban saved to database.") + var/msg = "[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database." + message_admins(msg,1) + var/datum/admin_help/AH = admin_ticket_log(ckey, msg) + + if(announceinirc) + send2irc("BAN ALERT","[a_ckey] applied a [bantype_str] on [ckey]") + + if(kickbannedckey) + if(AH) + AH.Resolve() //with prejudice + if(banned_mob && banned_mob.client && banned_mob.client.ckey == banckey) + qdel(banned_mob.client) + return 1 + +/datum/admins/proc/DB_ban_unban(ckey, bantype, job = "") + + if(!check_rights(R_BAN)) + return + + var/bantype_str + if(bantype) + var/bantype_pass = 0 + switch(bantype) + if(BANTYPE_PERMA) + bantype_str = "PERMABAN" + bantype_pass = 1 + if(BANTYPE_TEMP) + bantype_str = "TEMPBAN" + bantype_pass = 1 + if(BANTYPE_JOB_PERMA) + bantype_str = "JOB_PERMABAN" + bantype_pass = 1 + if(BANTYPE_JOB_TEMP) + bantype_str = "JOB_TEMPBAN" + bantype_pass = 1 + if(BANTYPE_ADMIN_PERMA) + bantype_str = "ADMIN_PERMABAN" + bantype_pass = 1 + if(BANTYPE_ADMIN_TEMP) + bantype_str = "ADMIN_TEMPBAN" + bantype_pass = 1 + if(BANTYPE_ANY_FULLBAN) + bantype_str = "ANY" + bantype_pass = 1 + if(BANTYPE_ANY_JOB) + bantype_str = "ANYJOB" + bantype_pass = 1 + if( !bantype_pass ) return + + var/bantype_sql + if(bantype_str == "ANY") + bantype_sql = "(bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now() ) )" + else if(bantype_str == "ANYJOB") + bantype_sql = "(bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now() ) )" + 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)" + if(job) + sql += " AND job = '[job]'" + + if(!SSdbcore.Connect()) + return + + var/ban_id + var/ban_number = 0 //failsafe + + var/datum/DBQuery/query_unban_get_id = SSdbcore.NewQuery(sql) + if(!query_unban_get_id.warn_execute()) + return + while(query_unban_get_id.NextRow()) + ban_id = query_unban_get_id.item[1] + ban_number++; + + if(ban_number == 0) + to_chat(usr, "Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.") + return + + if(ban_number > 1) + to_chat(usr, "Database update failed due to multiple bans fitting the search criteria. Note down the ckey, job and current time and contact the database admin.") + return + + if(istext(ban_id)) + ban_id = text2num(ban_id) + if(!isnum(ban_id)) + to_chat(usr, "Database update failed due to a ban ID mismatch. Contact the database admin.") + return + + DB_ban_unban_by_id(ban_id) + +/datum/admins/proc/DB_ban_edit(banid = null, param = null) + + if(!check_rights(R_BAN)) + return + + if(!isnum(banid) || !istext(param)) + to_chat(usr, "Cancelled") + return + + var/datum/DBQuery/query_edit_ban_get_details = SSdbcore.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") + if(!query_edit_ban_get_details.warn_execute()) + return + + var/eckey = usr.ckey //Editing admin ckey + var/pckey //(banned) Player ckey + var/duration //Old duration + var/reason //Old reason + + if(query_edit_ban_get_details.NextRow()) + pckey = query_edit_ban_get_details.item[1] + duration = query_edit_ban_get_details.item[2] + reason = query_edit_ban_get_details.item[3] + else + to_chat(usr, "Invalid ban id. Contact the database admin") + return + + reason = sanitizeSQL(reason) + var/value + + switch(param) + if("reason") + if(!value) + value = input("Insert the new reason for [pckey]'s ban", "New Reason", "[reason]", null) as null|text + value = sanitizeSQL(value) + if(!value) + to_chat(usr, "Cancelled") + return + + var/datum/DBQuery/query_edit_ban_reason = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") + if(!query_edit_ban_reason.warn_execute()) + return + message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]",1) + if("duration") + if(!value) + value = input("Insert the new duration (in minutes) for [pckey]'s ban", "New Duration", "[duration]", null) as null|num + if(!isnum(value) || !value) + to_chat(usr, "Cancelled") + return + + var/datum/DBQuery/query_edit_ban_duration = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + if(!query_edit_ban_duration.warn_execute()) + return + message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]",1) + if("unban") + if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") + DB_ban_unban_by_id(banid) + return + else + to_chat(usr, "Cancelled") + return + else + to_chat(usr, "Cancelled") + return + +/datum/admins/proc/DB_ban_unban_by_id(id) + + if(!check_rights(R_BAN)) + return + + var/sql = "SELECT ckey FROM [format_table_name("ban")] WHERE id = [id]" + + if(!SSdbcore.Connect()) + return + + var/ban_number = 0 //failsafe + + var/pckey + var/datum/DBQuery/query_unban_get_ckey = SSdbcore.NewQuery(sql) + if(!query_unban_get_ckey.warn_execute()) + return + while(query_unban_get_ckey.NextRow()) + pckey = query_unban_get_ckey.item[1] + ban_number++; + + if(ban_number == 0) + to_chat(usr, "Database update failed due to a ban id not being present in the database.") + return + + if(ban_number > 1) + to_chat(usr, "Database update failed due to multiple bans having the same ID. Contact the database admin.") + return + + if(!src.owner || !istype(src.owner, /client)) + return + + var/unban_ckey = src.owner:ckey + var/unban_computerid = src.owner:computer_id + var/unban_ip = src.owner:address + + var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" + var/datum/DBQuery/query_unban = SSdbcore.NewQuery(sql_update) + if(!query_unban.warn_execute()) + return + message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) + +/client/proc/DB_ban_panel() + set category = "Admin" + set name = "Banning Panel" + set desc = "Edit admin permissions" + + if(!holder) + return + + holder.DB_ban_panel() + + +/datum/admins/proc/DB_ban_panel(playerckey = null, adminckey = null, page = 0) + if(!usr.client) + return + + if(!check_rights(R_BAN)) + return + + if(!SSdbcore.Connect()) + to_chat(usr, "Failed to establish database connection.") + return + + var/output = "
" + + output += "" + + output += "" + output += "" + output += "
" + output += "

Banning panel

" + output += "
" + + output += "
Add custom ban: (ONLY use this if you can't ban through any other method)" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "
Ban type:Ckey:
IP: Computer id:
Duration: Job:
" + output += "Reason:

" + output += "" + output += "
" + + output += "
" + + output += "
Search: " + output += "" + output += "Ckey: " + output += "Admin ckey: " + output += "" + output += "
" + output += "Please note that all jobban bans or unbans are in-effect the following round." + + if(adminckey || playerckey) + playerckey = sanitizeSQL(ckey(playerckey)) + adminckey = sanitizeSQL(ckey(adminckey)) + var/playersearch = "" + var/adminsearch = "" + if(playerckey) + playersearch = "AND ckey = '[playerckey]' " + if(adminckey) + adminsearch = "AND a_ckey = '[adminckey]' " + var/bancount = 0 + var/bansperpage = 15 + var/pagecount = 0 + page = text2num(page) + var/datum/DBQuery/query_count_bans = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch]") + if(!query_count_bans.warn_execute()) + return + if(query_count_bans.NextRow()) + bancount = text2num(query_count_bans.item[1]) + if(bancount > bansperpage) + output += "
Page: " + while(bancount > 0) + output+= "|[pagecount == page ? "\[[pagecount]\]" : "\[[pagecount]\]"]" + bancount -= bansperpage + pagecount++ + output += "|" + var/blcolor = "#ffeeee" //banned light + var/bdcolor = "#ffdddd" //banned dark + var/ulcolor = "#eeffee" //unbanned light + var/udcolor = "#ddffdd" //unbanned dark + + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + var/limit = " LIMIT [bansperpage * page], [bansperpage]" + var/datum/DBQuery/query_search_bans = SSdbcore.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits FROM [format_table_name("ban")] WHERE 1 [playersearch] [adminsearch] ORDER BY bantime DESC[limit]") + if(!query_search_bans.warn_execute()) + return + + while(query_search_bans.NextRow()) + var/banid = query_search_bans.item[1] + var/bantime = query_search_bans.item[2] + var/bantype = query_search_bans.item[3] + var/reason = query_search_bans.item[4] + var/job = query_search_bans.item[5] + var/duration = query_search_bans.item[6] + var/expiration = query_search_bans.item[7] + var/ckey = query_search_bans.item[8] + var/ackey = query_search_bans.item[9] + var/unbanned = query_search_bans.item[10] + var/unbanckey = query_search_bans.item[11] + var/unbantime = query_search_bans.item[12] + var/edits = query_search_bans.item[13] + + var/lcolor = blcolor + var/dcolor = bdcolor + if(unbanned) + lcolor = ulcolor + dcolor = udcolor + + var/typedesc ="" + switch(bantype) + if("PERMABAN") + typedesc = "PERMABAN" + if("TEMPBAN") + typedesc = "TEMPBAN
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]
" + if("JOB_PERMABAN") + typedesc = "JOBBAN
([job])" + if("JOB_TEMPBAN") + typedesc = "TEMP JOBBAN
([job])
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]" + if("ADMIN_PERMABAN") + typedesc = "ADMIN PERMABAN" + if("ADMIN_TEMPBAN") + typedesc = "ADMIN TEMPBAN
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]
" + + output += "
" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + if(edits) + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + if(unbanned) + output += "" + output += "" + output += "" + output += "" + output += "" + output += "" + + output += "
TYPECKEYTIME APPLIEDADMINOPTIONS
[typedesc][ckey][bantime][ackey][(unbanned) ? "" : "Unban"]
Reason: [(unbanned) ? "" : "(Edit)"] \"[reason]\"
EDITS
[edits]
UNBANNED by admin [unbanckey] on [unbantime]
 
" + usr << browse(output,"window=lookupbans;size=900x500") \ No newline at end of file diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 09e3629533..0010414087 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -1,195 +1,196 @@ -//Blocks an attempt to connect before even creating our client datum thing. - -//How many new ckey matches before we revert the stickyban to it's roundstart state -//These are exclusive, so once it goes over one of these numbers, it reverts the ban -#define STICKYBAN_MAX_MATCHES 20 -#define STICKYBAN_MAX_EXISTING_USER_MATCHES 5 //ie, users who were connected before the ban triggered -#define STICKYBAN_MAX_ADMIN_MATCHES 2 - -/world/IsBanned(key,address,computer_id) - if (!key || !address || !computer_id) - log_access("Failed Login (invalid data): [key] [address]-[computer_id]") - return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]'. (If you continue to get this error, please restart byond or contact byond support.)") - - if (text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire - log_access("Failed Login (invalid cid): [key] [address]-[computer_id]") - return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.)") - var/admin = 0 - var/ckey = ckey(key) - if((ckey in GLOB.admin_datums) || (ckey in GLOB.deadmins)) - admin = 1 - - //Whitelist - if(config.usewhitelist) - if(!check_whitelist(ckey(key))) - if (admin) - log_admin("The admin [key] has been allowed to bypass the whitelist") - message_admins("The admin [key] has been allowed to bypass the whitelist") - addclientmessage(ckey,"You have been allowed to bypass the whitelist") - else - log_access("Failed Login: [key] - Not on whitelist") - return list("reason"="whitelist", "desc" = "\nReason: You are not on the white list for this server") - - //Guest Checking - if(IsGuestKey(key)) - if (!GLOB.guests_allowed) - log_access("Failed Login: [key] - Guests not allowed") - return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") +//Blocks an attempt to connect before even creating our client datum thing. + +//How many new ckey matches before we revert the stickyban to it's roundstart state +//These are exclusive, so once it goes over one of these numbers, it reverts the ban +#define STICKYBAN_MAX_MATCHES 20 +#define STICKYBAN_MAX_EXISTING_USER_MATCHES 5 //ie, users who were connected before the ban triggered +#define STICKYBAN_MAX_ADMIN_MATCHES 2 + +/world/IsBanned(key,address,computer_id) + if (!key || !address || !computer_id) + log_access("Failed Login (invalid data): [key] [address]-[computer_id]") + return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]'. (If you continue to get this error, please restart byond or contact byond support.)") + + if (text2num(computer_id) == 2147483647) //this cid causes stickybans to go haywire + log_access("Failed Login (invalid cid): [key] [address]-[computer_id]") + return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided an invalid Computer ID.)") + var/admin = 0 + var/ckey = ckey(key) + if((ckey in GLOB.admin_datums) || (ckey in GLOB.deadmins)) + admin = 1 + + //Whitelist + if(config.usewhitelist) + if(!check_whitelist(ckey(key))) + if (admin) + log_admin("The admin [key] has been allowed to bypass the whitelist") + message_admins("The admin [key] has been allowed to bypass the whitelist") + addclientmessage(ckey,"You have been allowed to bypass the whitelist") + else + log_access("Failed Login: [key] - Not on whitelist") + return list("reason"="whitelist", "desc" = "\nReason: You are not on the white list for this server") + + //Guest Checking + if(IsGuestKey(key)) + if (!GLOB.guests_allowed) + log_access("Failed Login: [key] - Guests not allowed") + return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") if (config.panic_bunker && SSdbcore && SSdbcore.IsConnected()) - log_access("Failed Login: [key] - Guests not allowed during panic bunker") - return list("reason"="guest", "desc"="\nReason: Sorry but the server is currently not accepting connections from never before seen players or guests. If you have played on this server with a byond account before, please log in to the byond account you have played from.") - - //Population Cap Checking - if(config.extreme_popcap && living_player_count() >= config.extreme_popcap && !admin) - log_access("Failed Login: [key] - Population cap reached") - return list("reason"="popcap", "desc"= "\nReason: [config.extreme_popcap_message]") - - if(config.ban_legacy_system) - - //Ban Checking - . = CheckBan( ckey(key), computer_id, address ) - if(.) - if (admin) - log_admin("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") - message_admins("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") - addclientmessage(ckey,"You have been allowed to bypass a matching ban on [.["key"]]") - else - log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") - return . - - else - - var/ckeytext = ckey(key) - + log_access("Failed Login: [key] - Guests not allowed during panic bunker") + return list("reason"="guest", "desc"="\nReason: Sorry but the server is currently not accepting connections from never before seen players or guests. If you have played on this server with a byond account before, please log in to the byond account you have played from.") + + //Population Cap Checking + if(config.extreme_popcap && living_player_count() >= config.extreme_popcap && !admin) + log_access("Failed Login: [key] - Population cap reached") + return list("reason"="popcap", "desc"= "\nReason: [config.extreme_popcap_message]") + + if(config.ban_legacy_system) + + //Ban Checking + . = CheckBan( ckey(key), computer_id, address ) + if(.) + if (admin) + log_admin("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") + message_admins("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") + addclientmessage(ckey,"You have been allowed to bypass a matching ban on [.["key"]]") + else + log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") + return . + + else + + var/ckeytext = ckey(key) + if(!SSdbcore.Connect()) - log_world("Ban database connection failure. Key [ckeytext] not checked") - GLOB.diary << "Ban database connection failure. Key [ckeytext] not checked" - return - - var/ipquery = "" - var/cidquery = "" - if(address) - ipquery = " OR ip = INET_ATON('[address]') " - - if(computer_id) - cidquery = " OR computerid = '[computer_id]' " - + var/msg = "Ban database connection failure. Key [ckeytext] not checked" + log_world(msg) + message_admins(msg) + return + + var/ipquery = "" + var/cidquery = "" + if(address) + ipquery = " OR ip = INET_ATON('[address]') " + + if(computer_id) + cidquery = " OR computerid = '[computer_id]' " + var/datum/DBQuery/query_ban_check = SSdbcore.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") - if(!query_ban_check.Execute()) - return - while(query_ban_check.NextRow()) - var/pckey = query_ban_check.item[1] - var/ackey = query_ban_check.item[2] - var/reason = query_ban_check.item[3] - var/expiration = query_ban_check.item[4] - var/duration = query_ban_check.item[5] - var/bantime = query_ban_check.item[6] - var/bantype = query_ban_check.item[7] - if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") - //admin bans MUST match on ckey to prevent cid-spoofing attacks - // as well as dynamic ip abuse - if (pckey != ckey) - continue - if (admin) - if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") - log_admin("The admin [key] is admin banned, and has been disallowed access") - message_admins("The admin [key] is admin banned, and has been disallowed access") - else - log_admin("The admin [key] has been allowed to bypass a matching ban on [pckey]") - message_admins("The admin [key] has been allowed to bypass a matching ban on [pckey]") - addclientmessage(ckey,"You have been allowed to bypass a matching ban on [pckey]") - continue - var/expires = "" - if(text2num(duration) > 0) - expires = " The ban is for [duration] minutes and expires on [expiration] (server time)." - else - expires = " The is a permanent ban." - - var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]" - - . = list("reason"="[bantype]", "desc"="[desc]") - - - log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") - return . - - var/list/ban = ..() //default pager ban stuff - if (ban) - var/bannedckey = "ERROR" - if (ban["ckey"]) - bannedckey = ban["ckey"] - - var/newmatch = FALSE - var/client/C = GLOB.directory[ckey] - var/cachedban = SSstickyban.cache[bannedckey] - - //rogue ban in the process of being reverted. - if (cachedban && cachedban["reverting"]) - return null - - if (cachedban && ckey != bannedckey) - newmatch = TRUE - if (cachedban["keys"]) - if (cachedban["keys"][ckey]) - newmatch = FALSE - if (cachedban["matches_this_round"][ckey]) - newmatch = FALSE - - if (newmatch && cachedban) - var/list/newmatches = cachedban["matches_this_round"] - var/list/newmatches_connected = cachedban["existing_user_matches_this_round"] - var/list/newmatches_admin = cachedban["admin_matches_this_round"] - - newmatches[ckey] = ckey - if (C) - newmatches_connected[ckey] = ckey - if (admin) - newmatches_admin[ckey] = ckey - - if (\ - newmatches.len > STICKYBAN_MAX_MATCHES || \ - newmatches_connected.len > STICKYBAN_MAX_EXISTING_USER_MATCHES || \ - newmatches_admin.len > STICKYBAN_MAX_ADMIN_MATCHES \ - ) - if (cachedban["reverting"]) - return null - cachedban["reverting"] = TRUE - - world.SetConfig("ban", bannedckey, null) - - log_game("Stickyban on [bannedckey] detected as rogue, reverting to it's roundstart state") - message_admins("Stickyban on [bannedckey] detected as rogue, reverting to it's roundstart state") - //do not convert to timer. - spawn (5) - world.SetConfig("ban", bannedckey, null) - sleep(1) - world.SetConfig("ban", bannedckey, null) - cachedban["matches_this_round"] = list() - cachedban["existing_user_matches_this_round"] = list() - cachedban["admin_matches_this_round"] = list() - cachedban -= "reverting" - world.SetConfig("ban", bannedckey, list2stickyban(cachedban)) - return null - - //byond will not trigger isbanned() for "global" host bans, - //ie, ones where the "apply to this game only" checkbox is not checked (defaults to not checked) - //So it's safe to let admins walk thru host/sticky bans here - if (admin) - log_admin("The admin [key] has been allowed to bypass a matching host/sticky ban on [bannedckey]") - message_admins("The admin [key] has been allowed to bypass a matching host/sticky ban on [bannedckey]") - addclientmessage(ckey,"You have been allowed to bypass a matching host/sticky ban on [bannedckey]") - return null - - if (C) //user is already connected!. - to_chat(C, "You are about to get disconnected for matching a sticky ban after you connected. If this turns out to be the ban evasion detection system going haywire, we will automatically detect this and revert the matches. if you feel that this is the case, please wait EXACTLY 6 seconds then reconnect using file -> reconnect to see if the match was reversed.") - - var/desc = "\nReason:(StickyBan) You, or another user of this computer or connection ([bannedckey]) is banned from playing here. The ban reason is:\n[ban["message"]]\nThis ban was applied by [ban["admin"]]\nThis is a BanEvasion Detection System ban, if you think this ban is a mistake, please wait EXACTLY 6 seconds, then try again before filing an appeal.\n" - . = list("reason" = "Stickyban", "desc" = desc) - log_access("Failed Login: [key] [computer_id] [address] - StickyBanned [ban["message"]] Target Username: [bannedckey] Placed by [ban["admin"]]") - - return . - - -#undef STICKYBAN_MAX_MATCHES -#undef STICKYBAN_MAX_EXISTING_USER_MATCHES -#undef STICKYBAN_MAX_ADMIN_MATCHES + if(!query_ban_check.Execute()) + return + while(query_ban_check.NextRow()) + var/pckey = query_ban_check.item[1] + var/ackey = query_ban_check.item[2] + var/reason = query_ban_check.item[3] + var/expiration = query_ban_check.item[4] + var/duration = query_ban_check.item[5] + var/bantime = query_ban_check.item[6] + var/bantype = query_ban_check.item[7] + if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") + //admin bans MUST match on ckey to prevent cid-spoofing attacks + // as well as dynamic ip abuse + if (pckey != ckey) + continue + if (admin) + if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") + log_admin("The admin [key] is admin banned, and has been disallowed access") + message_admins("The admin [key] is admin banned, and has been disallowed access") + else + log_admin("The admin [key] has been allowed to bypass a matching ban on [pckey]") + message_admins("The admin [key] has been allowed to bypass a matching ban on [pckey]") + addclientmessage(ckey,"You have been allowed to bypass a matching ban on [pckey]") + continue + var/expires = "" + if(text2num(duration) > 0) + expires = " The ban is for [duration] minutes and expires on [expiration] (server time)." + else + expires = " The is a permanent ban." + + var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]" + + . = list("reason"="[bantype]", "desc"="[desc]") + + + log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") + return . + + var/list/ban = ..() //default pager ban stuff + if (ban) + var/bannedckey = "ERROR" + if (ban["ckey"]) + bannedckey = ban["ckey"] + + var/newmatch = FALSE + var/client/C = GLOB.directory[ckey] + var/cachedban = SSstickyban.cache[bannedckey] + + //rogue ban in the process of being reverted. + if (cachedban && cachedban["reverting"]) + return null + + if (cachedban && ckey != bannedckey) + newmatch = TRUE + if (cachedban["keys"]) + if (cachedban["keys"][ckey]) + newmatch = FALSE + if (cachedban["matches_this_round"][ckey]) + newmatch = FALSE + + if (newmatch && cachedban) + var/list/newmatches = cachedban["matches_this_round"] + var/list/newmatches_connected = cachedban["existing_user_matches_this_round"] + var/list/newmatches_admin = cachedban["admin_matches_this_round"] + + newmatches[ckey] = ckey + if (C) + newmatches_connected[ckey] = ckey + if (admin) + newmatches_admin[ckey] = ckey + + if (\ + newmatches.len > STICKYBAN_MAX_MATCHES || \ + newmatches_connected.len > STICKYBAN_MAX_EXISTING_USER_MATCHES || \ + newmatches_admin.len > STICKYBAN_MAX_ADMIN_MATCHES \ + ) + if (cachedban["reverting"]) + return null + cachedban["reverting"] = TRUE + + world.SetConfig("ban", bannedckey, null) + + log_game("Stickyban on [bannedckey] detected as rogue, reverting to it's roundstart state") + message_admins("Stickyban on [bannedckey] detected as rogue, reverting to it's roundstart state") + //do not convert to timer. + spawn (5) + world.SetConfig("ban", bannedckey, null) + sleep(1) + world.SetConfig("ban", bannedckey, null) + cachedban["matches_this_round"] = list() + cachedban["existing_user_matches_this_round"] = list() + cachedban["admin_matches_this_round"] = list() + cachedban -= "reverting" + world.SetConfig("ban", bannedckey, list2stickyban(cachedban)) + return null + + //byond will not trigger isbanned() for "global" host bans, + //ie, ones where the "apply to this game only" checkbox is not checked (defaults to not checked) + //So it's safe to let admins walk thru host/sticky bans here + if (admin) + log_admin("The admin [key] has been allowed to bypass a matching host/sticky ban on [bannedckey]") + message_admins("The admin [key] has been allowed to bypass a matching host/sticky ban on [bannedckey]") + addclientmessage(ckey,"You have been allowed to bypass a matching host/sticky ban on [bannedckey]") + return null + + if (C) //user is already connected!. + to_chat(C, "You are about to get disconnected for matching a sticky ban after you connected. If this turns out to be the ban evasion detection system going haywire, we will automatically detect this and revert the matches. if you feel that this is the case, please wait EXACTLY 6 seconds then reconnect using file -> reconnect to see if the match was reversed.") + + var/desc = "\nReason:(StickyBan) You, or another user of this computer or connection ([bannedckey]) is banned from playing here. The ban reason is:\n[ban["message"]]\nThis ban was applied by [ban["admin"]]\nThis is a BanEvasion Detection System ban, if you think this ban is a mistake, please wait EXACTLY 6 seconds, then try again before filing an appeal.\n" + . = list("reason" = "Stickyban", "desc" = desc) + log_access("Failed Login: [key] [computer_id] [address] - StickyBanned [ban["message"]] Target Username: [bannedckey] Placed by [ban["admin"]]") + + return . + + +#undef STICKYBAN_MAX_MATCHES +#undef STICKYBAN_MAX_EXISTING_USER_MATCHES +#undef STICKYBAN_MAX_ADMIN_MATCHES diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 0e7986ec18..ac8162bc08 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,4 +1,3 @@ - //////////////////////////////// /proc/message_admins(msg) msg = "ADMIN LOG: [msg]" @@ -37,6 +36,12 @@ else body += " \[Heal\] " + if(M.client) + body += "
\[Player Age: [M.client.player_age]\]\[Byond Age: [M.client.account_age]\]" + body += "
Show related accounts by: " + body += "\[ CID | " + body += "IP \]" + body += "

\[ " body += "VV - " body += "TP - " @@ -699,7 +704,7 @@ to_chat(usr, "No Devils located" ) /datum/admins/proc/output_devil_info(mob/living/M) - if(istype(M) && M.mind && M.mind.devilinfo) + if(is_devil(M)) to_chat(usr, SSticker.mode.printdevilinfo(M.mind)) else to_chat(usr, "[M] is not a devil.") @@ -804,7 +809,7 @@ return 1 /client/proc/adminGreet(logout) - if(SSticker.HasRoundStarted()) + if(SSticker.HasRoundStarted()) var/string if(logout && config && config.announce_admin_logout) string = pick( @@ -813,4 +818,4 @@ string = pick( "Admin login: [key_name(src)]") if(string) - message_admins("[string]") + message_admins("[string]") \ No newline at end of file diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 53fefc30bc..cdd05a3aad 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -1,50 +1,21 @@ -//By Carnwennan - -//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game. -//lists and variables are great. However, they have several major flaws: -//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches. -//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that -//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine! -#define INVESTIGATE_DIR "data/investigate/" - -//SYSTEM -/proc/investigate_subject2file(subject) - return file("[INVESTIGATE_DIR][subject].html") - -/proc/investigate_reset() - if(fdel(INVESTIGATE_DIR)) - return 1 - return 0 - /atom/proc/investigate_log(message, subject) - if(!message) - return - var/F = investigate_subject2file(subject) - if(!F) + if(!message || !subject) return + var/F = file("[GLOB.log_directory]/[subject].html") F << "[time_stamp()] \ref[src] ([x],[y],[z]) || [src] [message]
" -//ADMINVERBS -/client/proc/investigate_show( subject in list("hrefs","notes, memos, watchlist","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor", "botany") ) + +/client/proc/investigate_show( subject in list("hrefs","notes, memos, watchlist","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor", "botany") ) set name = "Investigate" set category = "Admin" if(!holder) return switch(subject) - if("singulo", "wires", "telesci", "gravity", "records", "cargo", "supermatter", "atmos", "botany") //general one-round-only stuff - var/F = investigate_subject2file(subject) - if(!F) - to_chat(src, "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed.") - return - src << browse(F,"window=investigate[subject];size=800x300") - if("hrefs") //persistent logs and stuff - if(GLOB.href_logfile) - src << browse(GLOB.href_logfile,"window=investigate[subject];size=800x300") - else if(!config.log_hrefs) - to_chat(src, "Href logging is off and no logfile was found.") - return - else - to_chat(src, "No href logfile was found.") - return if("notes, memos, watchlist") browse_messages() + else + var/F = file("[GLOB.log_directory]/[subject].html") + if(!fexists(F)) + to_chat(src, "No [subject] logfile was found.") + return + src << browse(F,"window=investigate[subject];size=800x300") diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index b38cc4e289..d4fbd1a030 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -127,7 +127,7 @@ GLOBAL_PROTECT(admin_ranks) else if(!SSdbcore.Connect()) log_world("Failed to connect to database in load_admin_ranks(). Reverting to legacy system.") - GLOB.diary << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system." + GLOB.world_game_log << "Failed to connect to database in load_admin_ranks(). Reverting to legacy system." config.admin_legacy_system = 1 load_admin_ranks() return @@ -202,7 +202,7 @@ GLOBAL_PROTECT(admin_ranks) else if(!SSdbcore.Connect()) log_world("Failed to connect to database in load_admins(). Reverting to legacy system.") - GLOB.diary << "Failed to connect to database in load_admins(). Reverting to legacy system." + GLOB.world_game_log << "Failed to connect to database in load_admins(). Reverting to legacy system." config.admin_legacy_system = 1 load_admins() return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d4ba53c6af..e5f8360527 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -4,18 +4,12 @@ GLOBAL_PROTECT(admin_verbs_default) GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) /world/proc/AVerbsDefault() return list( - /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ - /client/proc/toggleannouncelogin, /*toggles if an admin's login is announced during a round*/ /client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/ /client/proc/cmd_admin_say, /*admin-only ooc chat*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/ - /client/proc/deadchat, /*toggles deadchat on/off*/ /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/toggleprayers, /*toggles prayers on/off*/ - /client/verb/toggleprayersounds, /*Toggles prayer sounds (HALLELUJAH!)*/ - /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ /client/proc/secrets, /client/proc/restart_controller, @@ -32,7 +26,6 @@ GLOBAL_PROTECT(admin_verbs_admin) GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) /world/proc/AVerbsAdmin() return list( - /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/ /client/proc/invisimin, /*allows our mob to go invisible/visible*/ // /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ @@ -46,16 +39,14 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) /datum/admins/proc/set_admin_notice,/*announcement all clients see when joining the server.*/ /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ /client/proc/toggle_view_range, /*changes how far we can see*/ - /datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/ + /datum/admins/proc/view_txt_log, /*shows the server log (world_game_log) for today*/ /datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/ /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/ /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ /client/proc/check_antagonists, /*shows all antags*/ /datum/admins/proc/access_news_network, /*allows access of newscasters*/ - /client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/ - /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/ - /client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/ + /client/proc/getserverlog, /*allows us to fetch server logs (world_game_log) for other days*/ /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ /client/proc/Getmob, /*teleports a mob to our location*/ /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ @@ -116,7 +107,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer()) /datum/admins/proc/end_round, /datum/admins/proc/delay, /datum/admins/proc/toggleaban, - /client/proc/toggle_log_hrefs, /client/proc/everyone_random, /datum/admins/proc/toggleAI, /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ @@ -182,9 +172,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/set_ooc, /client/proc/reset_ooc, /client/proc/deadmin, - /client/proc/deadchat, - /client/proc/toggleprayers, - /client/proc/toggle_hear_radio, /datum/admins/proc/show_traitor_panel, /datum/admins/proc/toggleenter, /datum/admins/proc/toggleguests, @@ -223,7 +210,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /datum/admins/proc/restart, /datum/admins/proc/delay, /datum/admins/proc/toggleaban, - /client/proc/toggle_log_hrefs, /client/proc/everyone_random, /datum/admins/proc/toggleAI, /client/proc/restart_controller, @@ -398,13 +384,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( mob.invisibility = INVISIBILITY_OBSERVER to_chat(mob, "Invisimin on. You are now as invisible as a ghost.") -/client/proc/player_panel_new() - set name = "Player Panel" - set category = "Admin" - if(holder) - holder.player_panel_new() - SSblackbox.add_details("admin_verb","Player Panel New") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/proc/check_antagonists() set name = "Check Antagonists" set category = "Admin" @@ -638,19 +617,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( togglebuildmode(src.mob) SSblackbox.add_details("admin_verb","Toggle Build Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/toggle_log_hrefs() - set name = "Toggle href logging" - set category = "Server" - if(!holder) - return - if(config) - if(config.log_hrefs) - config.log_hrefs = 0 - to_chat(src, "Stopped logging hrefs") - else - config.log_hrefs = 1 - to_chat(src, "Started logging hrefs") - /client/proc/check_ai_laws() set name = "Check AI Laws" set category = "Admin" diff --git a/code/modules/admin/adminmenu.dm b/code/modules/admin/adminmenu.dm new file mode 100644 index 0000000000..fc7a57e212 --- /dev/null +++ b/code/modules/admin/adminmenu.dm @@ -0,0 +1,11 @@ +/datum/menu/Admin/Generate_list(client/C) + if (C.holder) + . = ..() + +/datum/menu/Admin/verb/playerpanel() + set name = "Player Panel" + set desc = "Player Panel" + set category = "Admin" + usr.client.holder.player_panel_new() + SSblackbox.add_details("admin_verb","Player Panel New") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return \ No newline at end of file diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 09aced33a8..06f6e5e993 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -567,13 +567,14 @@ for(var/X in SSticker.mode.devils) var/datum/mind/devil = X var/mob/M = devil.current + var/datum/antagonist/devil/devilinfo = devil.has_antag_datum(ANTAG_DATUM_DEVIL) if(M) - dat += "[M.real_name] : [devil.devilinfo.truename][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name] : [devilinfo.truename][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "Show Objective" dat += "Show all devil info" else - dat += "[devil.name] : [devil.devilinfo.truename] ([devil.key])devil body destroyed!" + dat += "[devil.name] : [devilinfo.truename] ([devil.key])devil body destroyed!" dat += "PM" dat += "" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a2f124df6d..c1780e4a34 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1799,12 +1799,12 @@ if(!check_rights(R_ADMIN)) return - var/mob/living/L = locate(href_list["languagemenu"]) in GLOB.mob_list - if(!isliving(L)) - to_chat(usr, "This can only be used on instances of type /mob/living.") + var/mob/M = locate(href_list["languagemenu"]) in GLOB.mob_list + if(!ismob(M)) + to_chat(usr, "This can only be used on instances of type /mob.") return - - L.open_language_menu(usr) + var/datum/language_holder/H = M.get_language_holder() + H.open_language_menu(usr) else if(href_list["traitor"]) if(!check_rights(R_ADMIN)) @@ -2242,4 +2242,20 @@ if(href_list["viewruntime_backto"]) error_viewer.show_to(owner, locate(href_list["viewruntime_backto"]), href_list["viewruntime_linear"]) else - error_viewer.show_to(owner, null, href_list["viewruntime_linear"]) \ No newline at end of file + error_viewer.show_to(owner, null, href_list["viewruntime_linear"]) + else if(href_list["showrelatedacc"]) + var/client/C = locate(href_list["client"]) in GLOB.clients + var/list/thing_to_check + if(href_list["showrelatedacc"] == "cid") + thing_to_check = C.related_accounts_cid + else + thing_to_check = C.related_accounts_ip + thing_to_check = splittext(thing_to_check, ", ") + + + var/dat = "Related accounts by [uppertext(href_list["showrelatedacc"])]:
" + for(var/thing in thing_to_check) + dat += "[thing]
" + + usr << browse(dat, "size=420x300") + diff --git a/code/modules/admin/topic.dm.rej b/code/modules/admin/topic.dm.rej deleted file mode 100644 index 041ae92107..0000000000 --- a/code/modules/admin/topic.dm.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm (rejected hunks) -@@ -8,7 +8,7 @@ - if(href_list["ahelp"]) - if(!check_rights(R_ADMIN)) - return -- -+ - var/ahelp_ref = href_list["ahelp"] - var/datum/admin_help/AH = locate(ahelp_ref) - if(AH) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index a59f40e35a..70ef44576c 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -71,7 +71,7 @@ if("select", "delete", "update") select_types = query_tree[query_tree[1]] - from_objs = SDQL_from_objs(query_tree["from"]) + from_objs = world.SDQL_from_objs(query_tree["from"]) var/list/objs = list() @@ -101,7 +101,7 @@ if("call") for(var/datum/d in objs) try - SDQL_var(d, query_tree["call"][1], source = d) + world.SDQL_var(d, query_tree["call"][1], source = d) catch(var/exception/e) runtime_tracker += SDQL_parse_exception(e) runtimes++ @@ -177,15 +177,6 @@ returning += "Description: [E.desc]
" return returning -/proc/SDQL_callproc_global(procname,args_list) - set waitfor = FALSE - WrapAdminProcCall(GLOBAL_PROC, procname, args_list) - -/proc/SDQL_callproc(thing, procname, args_list) - set waitfor = FALSE - if(hascall(thing, procname)) - WrapAdminProcCall(thing, procname, args_list) - /proc/SDQL_parse(list/query_list) var/datum/SDQL_parser/parser = new() var/list/querys = list() @@ -249,15 +240,10 @@ -/proc/SDQL_from_objs(list/tree) +/world/proc/SDQL_from_objs(list/tree) if("world" in tree) - if(IsAdminAdvancedProcCall()) - var/msg = "WARNING: Attempt to retrieve world reference made by [usr]!" - log_admin(msg) - message_admins(msg) - return - return world - return SDQL_expression(world, tree) + return src + return SDQL_expression(src, tree) /proc/SDQL_get_all(type, location) var/list/out = list() @@ -417,12 +403,12 @@ result = dummy val += result else - val = SDQL_var(object, expression, i, object) + val = world.SDQL_var(object, expression, i, object) i = expression.len return list("val" = val, "i" = i) -/proc/SDQL_var(datum/object, list/expression, start = 1, source) +/world/proc/SDQL_var(datum/object, list/expression, start = 1, source) var/v var/long = start < expression.len if(object == world && long && expression[start + 1] == ".") @@ -456,11 +442,6 @@ else return null if("world") - if(IsAdminAdvancedProcCall()) - var/msg = "WARNING: Attempt to retrieve world reference made by [usr]!" - log_admin(msg) - message_admins(msg) - return v = world if("global") v = GLOB diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 6b642d4fdd..8e9abff81c 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -431,9 +431,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /obj/effect/statclick/ahelp var/datum/admin_help/ahelp_datum -/obj/effect/statclick/ahelp/New(loc, datum/admin_help/AH) +/obj/effect/statclick/ahelp/Initialize(mapload, datum/admin_help/AH) ahelp_datum = AH - ..(loc) + . = ..() /obj/effect/statclick/ahelp/update() return ..(ahelp_datum.name) @@ -479,7 +479,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) current_ticket.MessageNoRecipient(msg) current_ticket.TimeoutVerb() return - else + else to_chat(usr, "Ticket not found, creating new one...") else current_ticket.AddInteraction("[key_name_admin(usr)] opened a new ticket.") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index df59c1a7bb..eb3e24265c 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -103,6 +103,7 @@ if(!recipient) if(holder) to_chat(src, "Error: Admin-PM: Client not found.") + to_chat(src, msg) else current_ticket.MessageNoRecipient(msg) return diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 37af9e8601..500edfe665 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -19,7 +19,7 @@ if (!msg) return - var/nicknames = world.file2list("config/admin_nicknames.txt") + var/static/nicknames = world.file2list("config/admin_nicknames.txt") var/rendered = "DEAD: ADMIN([src.holder.fakekey ? pick(nicknames) : src.key]) says, \"[msg]\"" diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index 7624a9443e..24cb4275b8 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -1,62 +1,3 @@ -/* - HOW DO I LOG RUNTIMES? - Firstly, start dreamdeamon if it isn't already running. Then select "world>Log Session" (or press the F3 key) - navigate the popup window to the data/logs/runtimes/ folder from where your tgstation .dmb is located. - (you may have to make this folder yourself) - - OPTIONAL: you can select the little checkbox down the bottom to make dreamdeamon save the log everytime you - start a world. Just remember to repeat these steps with a new name when you update to a new revision! - - Save it with the name of the revision your server uses (e.g. r3459.txt). - Game Masters will now be able to grant access any runtime logs you have archived this way! - This will allow us to gather information on bugs across multiple servers and make maintaining the TG - codebase for the entire /TG/station commuity a TONNE easier :3 Thanks for your help! -*/ - - -//This proc allows Game Masters to grant a client access to the .getruntimelog verb -//Permissions expire at the end of each round. -//Runtimes can be used to meta or spot game-crashing exploits so it's advised to only grant coders that -//you trust access. Also, it may be wise to ensure that they are not going to play in the current round. -/client/proc/giveruntimelog() - set name = ".giveruntimelog" - set desc = "Give somebody access to any session logfiles saved to the /log/runtime/ folder." - set category = null - - if(!src.holder) - to_chat(src, "Only Admins may use this command.") - return - - var/client/target = input(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions",null) as null|anything in GLOB.clients - if(!istype(target,/client)) - to_chat(src, "Error: giveruntimelog(): Client not found.") - return - - target.verbs |= /client/proc/getruntimelog - to_chat(target, "You have been granted access to runtime logs. Please use them responsibly or risk being banned.") - return - - -//This proc allows download of runtime logs saved within the data/logs/ folder by dreamdeamon. -//It works similarly to show-server-log. -/client/proc/getruntimelog() - set name = ".getruntimelog" - set desc = "Retrieve any session logfiles saved by dreamdeamon." - set category = null - - var/path = browse_files("data/logs/runtimes/") - if(!path) - return - - if(file_spam_check()) - return - - message_admins("[key_name_admin(src)] accessed file: [path]") - src << ftp(file(path)) - to_chat(src, "Attempting to send file, this may take a fair few minutes if the file is very large.") - return - - //This proc allows download of past server logs saved within the data/logs/ folder. //It works similarly to show-server-log. /client/proc/getserverlog() @@ -83,10 +24,10 @@ /datum/admins/proc/view_txt_log() set category = "Admin" set name = "Show Server Log" - set desc = "Shows today's server log." + set desc = "Shows server log for this round." - if(fexists("[GLOB.diary]")) - src << ftp(GLOB.diary) + if(fexists("[GLOB.world_game_log]")) + src << ftp(GLOB.world_game_log) else to_chat(src, "Server log not found, try using .getserverlog.") return @@ -97,10 +38,10 @@ /datum/admins/proc/view_atk_log() set category = "Admin" set name = "Show Server Attack Log" - set desc = "Shows today's server attack log." + set desc = "Shows server attack log for this round." - if(fexists("[GLOB.diaryofmeanpeople]")) - src << ftp(GLOB.diaryofmeanpeople) + if(fexists("[GLOB.world_attack_log]")) + src << ftp(GLOB.world_attack_log) else to_chat(src, "Server attack log not found, try using .getserverlog.") return diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 9fdb316971..ba50ecae32 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -19,7 +19,7 @@ usr.client.images += preview if(alert(usr,"Confirm location.","Template Confirm","Yes","No") == "Yes") if(template.load(T, centered = TRUE)) - message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP)") + message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at [ADMIN_COORDJMP(T)]") else to_chat(usr, "Failed to place map") usr.client.images -= preview diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 66d04a4159..122e0d2dd2 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -1,262 +1,284 @@ -//- Are all the floors with or without air, as they should be? (regular or airless) -//- Does the area have an APC? -//- Does the area have an Air Alarm? -//- Does the area have a Request Console? -//- Does the area have lights? -//- Does the area have a light switch? -//- Does the area have enough intercoms? -//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug) -//- Is the area connected to the scrubbers air loop? -//- Is the area connected to the vent air loop? (vent pumps) -//- Is everything wired properly? -//- Does the area have a fire alarm and firedoors? -//- Do all pod doors work properly? -//- Are accesses set properly on doors, pod buttons, etc. -//- Are all items placed properly? (not below vents, scrubbers, tables) -//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room? -//- Check for any misplaced or stacked piece of pipe (air and disposal) -//- Check for any misplaced or stacked piece of wire -//- Identify how hard it is to break into the area and where the weak points are -//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. - -GLOBAL_PROTECT(admin_verbs_debug_mapping) -GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( - /client/proc/do_not_use_these, //-errorage - /client/proc/camera_view, //-errorage - /client/proc/sec_camera_report, //-errorage - /client/proc/intercom_view, //-errorage - /client/proc/air_status, //Air things - /client/proc/Cell, //More air things - /client/proc/atmosscan, //check plumbing - /client/proc/powerdebug, //check power - /client/proc/count_objects_on_z_level, - /client/proc/count_objects_all, - /client/proc/cmd_assume_direct_control, //-errorage - /client/proc/startSinglo, - /client/proc/set_server_fps, //allows you to set the ticklag. - /client/proc/cmd_admin_grantfullaccess, - /client/proc/cmd_admin_areatest, - /client/proc/cmd_admin_rejuvenate, - /datum/admins/proc/show_traitor_panel, - /client/proc/disable_communication, - /client/proc/print_pointers, - /client/proc/cmd_show_at_list, - /client/proc/cmd_show_at_list, - /client/proc/manipulate_organs -)) - -/obj/effect/debugging/mapfix_marker - name = "map fix marker" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "mapfixmarker" - desc = "I am a mappers mistake." - -/obj/effect/debugging/marker - icon = 'icons/turf/areas.dmi' - icon_state = "yellow" - -/obj/effect/debugging/marker/Move() - return 0 - -/client/proc/do_not_use_these() - set category = "Mapping" - set name = "-None of these are for ingame use!!" - - ..() - -/client/proc/camera_view() - set category = "Mapping" - set name = "Camera Range Display" - - var/on = 0 - for(var/turf/T in world) - if(T.maptext) - on = 1 - T.maptext = null - - if(!on) - var/list/seen = list() - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - for(var/turf/T in C.can_see()) - seen[T]++ - for(var/turf/T in seen) - T.maptext = "[seen[T]]" +//- Are all the floors with or without air, as they should be? (regular or airless) +//- Does the area have an APC? +//- Does the area have an Air Alarm? +//- Does the area have a Request Console? +//- Does the area have lights? +//- Does the area have a light switch? +//- Does the area have enough intercoms? +//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug) +//- Is the area connected to the scrubbers air loop? +//- Is the area connected to the vent air loop? (vent pumps) +//- Is everything wired properly? +//- Does the area have a fire alarm and firedoors? +//- Do all pod doors work properly? +//- Are accesses set properly on doors, pod buttons, etc. +//- Are all items placed properly? (not below vents, scrubbers, tables) +//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room? +//- Check for any misplaced or stacked piece of pipe (air and disposal) +//- Check for any misplaced or stacked piece of wire +//- Identify how hard it is to break into the area and where the weak points are +//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. + +GLOBAL_PROTECT(admin_verbs_debug_mapping) +GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( + /client/proc/do_not_use_these, //-errorage + /client/proc/camera_view, //-errorage + /client/proc/sec_camera_report, //-errorage + /client/proc/intercom_view, //-errorage + /client/proc/air_status, //Air things + /client/proc/Cell, //More air things + /client/proc/atmosscan, //check plumbing + /client/proc/powerdebug, //check power + /client/proc/count_objects_on_z_level, + /client/proc/count_objects_all, + /client/proc/cmd_assume_direct_control, //-errorage + /client/proc/startSinglo, + /client/proc/set_server_fps, //allows you to set the ticklag. + /client/proc/cmd_admin_grantfullaccess, + /client/proc/cmd_admin_areatest, + /client/proc/cmd_admin_rejuvenate, + /datum/admins/proc/show_traitor_panel, + /client/proc/disable_communication, + /client/proc/print_pointers, + /client/proc/cmd_show_at_list, + /client/proc/cmd_show_at_markers, + /client/proc/manipulate_organs +)) + +/obj/effect/debugging/mapfix_marker + name = "map fix marker" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "mapfixmarker" + desc = "I am a mappers mistake." + +/obj/effect/debugging/marker + icon = 'icons/turf/areas.dmi' + icon_state = "yellow" + +/obj/effect/debugging/marker/Move() + return 0 + +/client/proc/do_not_use_these() + set category = "Mapping" + set name = "-None of these are for ingame use!!" + + ..() + +/client/proc/camera_view() + set category = "Mapping" + set name = "Camera Range Display" + + var/on = 0 + for(var/turf/T in world) + if(T.maptext) + on = 1 + T.maptext = null + + if(!on) + var/list/seen = list() + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) + for(var/turf/T in C.can_see()) + seen[T]++ + for(var/turf/T in seen) + T.maptext = "[seen[T]]" SSblackbox.add_details("admin_verb","Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - - -/client/proc/sec_camera_report() - set category = "Mapping" - set name = "Camera Report" - - if(!Master) - alert(usr,"Master_controller not found.","Sec Camera Report") - return 0 - - var/list/obj/machinery/camera/CL = list() - - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - CL += C - - var/output = {"CAMERA ANNOMALITIES REPORT
-The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
    "} - - for(var/obj/machinery/camera/C1 in CL) - for(var/obj/machinery/camera/C2 in CL) - if(C1 != C2) - if(C1.c_tag == C2.c_tag) - output += "
  • c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
  • " - if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) - output += "
  • FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " - if(C1.loc == C2.loc) - output += "
  • overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " - var/turf/T = get_step(C1,turn(C1.dir,180)) - if(!T || !isturf(T) || !T.density ) - if(!(locate(/obj/structure/grille,T))) - var/window_check = 0 - for(var/obj/structure/window/W in T) - if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) ) - window_check = 1 - break - if(!window_check) - output += "
  • Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
  • " - - output += "
" - usr << browse(output,"window=airreport;size=1000x500") + + + +/client/proc/sec_camera_report() + set category = "Mapping" + set name = "Camera Report" + + if(!Master) + alert(usr,"Master_controller not found.","Sec Camera Report") + return 0 + + var/list/obj/machinery/camera/CL = list() + + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) + CL += C + + var/output = {"CAMERA ANNOMALITIES REPORT
+The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
    "} + + for(var/obj/machinery/camera/C1 in CL) + for(var/obj/machinery/camera/C2 in CL) + if(C1 != C2) + if(C1.c_tag == C2.c_tag) + output += "
  • c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
  • " + if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y) + output += "
  • FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " + if(C1.loc == C2.loc) + output += "
  • overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
  • " + var/turf/T = get_step(C1,turn(C1.dir,180)) + if(!T || !isturf(T) || !T.density ) + if(!(locate(/obj/structure/grille,T))) + var/window_check = 0 + for(var/obj/structure/window/W in T) + if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) ) + window_check = 1 + break + if(!window_check) + output += "
  • Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
  • " + + output += "
" + usr << browse(output,"window=airreport;size=1000x500") SSblackbox.add_details("admin_verb","Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/intercom_view() - set category = "Mapping" - set name = "Intercom Range Display" - - var/static/intercom_range_display_status = 0 - if(intercom_range_display_status) - intercom_range_display_status = 0 - else - intercom_range_display_status = 1 - - for(var/obj/effect/debugging/marker/M in world) - qdel(M) - - if(intercom_range_display_status) - for(var/obj/item/device/radio/intercom/I in world) - for(var/turf/T in orange(7,I)) - var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) - if (!(F in view(7,I.loc))) - qdel(F) + +/client/proc/intercom_view() + set category = "Mapping" + set name = "Intercom Range Display" + + var/static/intercom_range_display_status = 0 + if(intercom_range_display_status) + intercom_range_display_status = 0 + else + intercom_range_display_status = 1 + + for(var/obj/effect/debugging/marker/M in world) + qdel(M) + + if(intercom_range_display_status) + for(var/obj/item/device/radio/intercom/I in world) + for(var/turf/T in orange(7,I)) + var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T) + if (!(F in view(7,I.loc))) + qdel(F) SSblackbox.add_details("admin_verb","Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/cmd_show_at_list() - set category = "Mapping" - set name = "Show roundstart AT list" - set desc = "Displays a list of active turfs coordinates at roundstart" - - var/dat = {"Coordinate list of Active Turfs at Roundstart -
Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
"} - - for(var/i=1; i<=GLOB.active_turfs_startlist.len; i++) - dat += GLOB.active_turfs_startlist[i] - dat += "
" - - usr << browse(dat, "window=at_list") - + +/client/proc/cmd_show_at_list() + set category = "Mapping" + set name = "Show roundstart AT list" + set desc = "Displays a list of active turfs coordinates at roundstart" + + var/dat = {"Coordinate list of Active Turfs at Roundstart +
Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
"} + + for(var/t in GLOB.active_turfs_startlist) + var/turf/T = t + dat += "[ADMIN_COORDJMP(T)]\n" + dat += "
" + + usr << browse(dat, "window=at_list") + SSblackbox.add_details("admin_verb","Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/enable_debug_verbs() - set category = "Debug" - set name = "Debug verbs - Enable" - if(!check_rights(R_DEBUG)) - return - verbs -= /client/proc/enable_debug_verbs - verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) + +/client/proc/cmd_show_at_markers() + set category = "Mapping" + set name = "Show roundstart AT markers" + set desc = "Places a marker on all active-at-roundstart turfs" + + var/count = 0 + for(var/obj/effect/abstract/marker/at/AT in GLOB.all_abstract_markers) + qdel(AT) + count++ + + if(count) + to_chat(usr, "[count] AT markers removed.") + else + for(var/t in GLOB.active_turfs_startlist) + new /obj/effect/abstract/marker/at(t) + count++ + to_chat(usr, "[count] AT markers placed.") + + SSblackbox.add_details("admin_verb","Show Roundstart Active Turf Markers") + + +/client/proc/enable_debug_verbs() + set category = "Debug" + set name = "Debug verbs - Enable" + if(!check_rights(R_DEBUG)) + return + verbs -= /client/proc/enable_debug_verbs + verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) SSblackbox.add_details("admin_verb","Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/disable_debug_verbs() - set category = "Debug" - set name = "Debug verbs - Disable" - verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) - verbs += /client/proc/enable_debug_verbs + +/client/proc/disable_debug_verbs() + set category = "Debug" + set name = "Debug verbs - Disable" + verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping) + verbs += /client/proc/enable_debug_verbs SSblackbox.add_details("admin_verb", "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/count_objects_on_z_level() - set category = "Mapping" - set name = "Count Objects On Level" - var/level = input("Which z-level?","Level?") as text - if(!level) return - var/num_level = text2num(level) - if(!num_level) return - if(!isnum(num_level)) return - - var/type_text = input("Which type path?","Path?") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 0 - - var/list/atom/atom_list = list() - - for(var/atom/A in world) - if(istype(A,type_path)) - var/atom/B = A - while(!(isturf(B.loc))) - if(B && B.loc) - B = B.loc - else - break - if(B) - if(B.z == num_level) - count++ - atom_list += A - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - to_chat(world, line)*/ - - to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]") + +/client/proc/count_objects_on_z_level() + set category = "Mapping" + set name = "Count Objects On Level" + var/level = input("Which z-level?","Level?") as text + if(!level) return + var/num_level = text2num(level) + if(!num_level) return + if(!isnum(num_level)) return + + var/type_text = input("Which type path?","Path?") as text + if(!type_text) return + var/type_path = text2path(type_text) + if(!type_path) return + + var/count = 0 + + var/list/atom/atom_list = list() + + for(var/atom/A in world) + if(istype(A,type_path)) + var/atom/B = A + while(!(isturf(B.loc))) + if(B && B.loc) + B = B.loc + else + break + if(B) + if(B.z == num_level) + count++ + atom_list += A + /* + var/atom/temp_atom + for(var/i = 0; i <= (atom_list.len/10); i++) + var/line = "" + for(var/j = 1; j <= 10; j++) + if(i*10+j <= atom_list.len) + temp_atom = atom_list[i*10+j] + line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " + to_chat(world, line)*/ + + to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]") SSblackbox.add_details("admin_verb","Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/count_objects_all() - set category = "Mapping" - set name = "Count Objects All" - - var/type_text = input("Which type path?","") as text - if(!type_text) return - var/type_path = text2path(type_text) - if(!type_path) return - - var/count = 0 - - for(var/atom/A in world) - if(istype(A,type_path)) - count++ - /* - var/atom/temp_atom - for(var/i = 0; i <= (atom_list.len/10); i++) - var/line = "" - for(var/j = 1; j <= 10; j++) - if(i*10+j <= atom_list.len) - temp_atom = atom_list[i*10+j] - line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " - to_chat(world, line)*/ - - to_chat(world, "There are [count] objects of type [type_path] in the game world") + +/client/proc/count_objects_all() + set category = "Mapping" + set name = "Count Objects All" + + var/type_text = input("Which type path?","") as text + if(!type_text) return + var/type_path = text2path(type_text) + if(!type_path) return + + var/count = 0 + + for(var/atom/A in world) + if(istype(A,type_path)) + count++ + /* + var/atom/temp_atom + for(var/i = 0; i <= (atom_list.len/10); i++) + var/line = "" + for(var/j = 1; j <= 10; j++) + if(i*10+j <= atom_list.len) + temp_atom = atom_list[i*10+j] + line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; " + to_chat(world, line)*/ + + to_chat(world, "There are [count] objects of type [type_path] in the game world") SSblackbox.add_details("admin_verb","Count Objects All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -//This proc is intended to detect lag problems relating to communication procs -GLOBAL_VAR_INIT(say_disabled, FALSE) -/client/proc/disable_communication() - set category = "Mapping" - set name = "Disable all communication verbs" - - GLOB.say_disabled = !GLOB.say_disabled - if(GLOB.say_disabled) - message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") - else - message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") + + +//This proc is intended to detect lag problems relating to communication procs +GLOBAL_VAR_INIT(say_disabled, FALSE) +/client/proc/disable_communication() + set category = "Mapping" + set name = "Disable all communication verbs" + + GLOB.say_disabled = !GLOB.say_disabled + if(GLOB.say_disabled) + message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") + else + message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index d7b06ee9c8..87a9e5a040 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -132,7 +132,7 @@ /datum/admins/proc/makeWizard() - var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", "wizard", null) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", "wizard", null) var/mob/dead/observer/selected = pick_n_take(candidates) @@ -215,7 +215,7 @@ /datum/admins/proc/makeNukeTeam() var/datum/game_mode/nuclear/temp = new - var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp) var/list/mob/dead/observer/chosen = list() var/mob/dead/observer/theghost = null @@ -288,7 +288,7 @@ // DEATH SQUADS /datum/admins/proc/makeDeathsquad() var/mission = input("Assign a mission to the deathsquad", "Assign Mission", "Leave no witnesses.") - var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null) var/squadSpawned = 0 if(candidates.len >= 2) //Minimum 2 to be considered a squad @@ -396,7 +396,7 @@ /datum/admins/proc/makeOfficial() var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.") - var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered to be a Centcom Official?", "deathsquad") + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered to be a Centcom Official?", "deathsquad") if(candidates.len) var/mob/dead/observer/chosen_candidate = pick(candidates) @@ -457,7 +457,7 @@ var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", "Assist the station.") as null|text if(!mission) return - var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null) var/teamSpawned = 0 if(candidates.len > 0) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index f417dfbad3..2397f6c4a5 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -21,7 +21,7 @@ var/res = alert(usr, "Show the title of this song to the players?",, "No", "Yes", "Cancel") switch(res) if("Yes") - to_chat(world, "An admin played: [S]") + to_chat(world, "An admin played: [S]") if("Cancel") return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 547e8e1d03..757721daa3 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -112,6 +112,7 @@ message_admins(" LocalNarrate: [key_name_admin(usr)] at [get_area(A)][ADMIN_JMP(A)]: [msg]
") SSblackbox.add_details("admin_verb","Local Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /client/proc/cmd_admin_godmode(mob/M in GLOB.mob_list) set category = "Special Verbs" set name = "Godmode" @@ -350,7 +351,6 @@ Traitors and the like can also be revived with the previous role mostly intact. if(G_found.mind && !G_found.mind.active) G_found.mind.transfer_to(new_character) //be careful when doing stuff like this! I've already checked the mind isn't in use - new_character.mind.special_verbs = list() else new_character.mind_initialize() if(!new_character.mind.assigned_role) @@ -587,7 +587,7 @@ Traitors and the like can also be revived with the previous role mostly intact. empulse(O, heavy, light) log_admin("[key_name(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])") - message_admins("[key_name_admin(usr)] created an EM PUlse ([heavy],[light]) at ([O.x],[O.y],[O.z])") + message_admins("[key_name_admin(usr)] created an EM Pulse ([heavy],[light]) at ([O.x],[O.y],[O.z])") SSblackbox.add_details("admin_verb","EM Pulse") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return @@ -701,7 +701,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set name = "Make Everyone Random" set desc = "Make everyone have a random appearance. You can only use this before rounds!" - if(SSticker.HasRoundStarted()) + if(SSticker.HasRoundStarted()) to_chat(usr, "Nope you can't do this, the game's already started. This only works before rounds!") return diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 897812db5c..d8c6427477 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -93,10 +93,10 @@ if(href_list["time"]) timing = text2num(href_list["time"]) if(timing && istype(holder, /obj/item/device/transfer_valve)) - var/timer_message = "[key_name_admin(usr)](?) (FLW) activated [src] attachment on [holder]." + var/timer_message = "[ADMIN_LOOKUPFLW(usr)] activated [src] attachment on [holder]." message_admins(timer_message) GLOB.bombers += timer_message - log_game("[key_name(usr)] activated [src] attachment for [loc]") + log_game("[key_name(usr)] activated [src] attachment on [holder]") update_icon() if(href_list["repeat"]) loop = text2num(href_list["repeat"]) diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 7e9df7d22c..0cc7249c96 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -39,7 +39,7 @@ if(!blocks_air) air = new air.copy_from_turf(src) - ..() + . = ..() /turf/open/Destroy() if(active_hotspot) diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 10a9a7f65d..60364086a5 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -3,7 +3,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou /proc/meta_gas_list() . = new /list for(var/gas_path in subtypesof(/datum/gas)) - var/list/gas_info = new(4) + var/list/gas_info = new(5) var/datum/gas/gas = gas_path gas_info[META_GAS_SPECIFIC_HEAT] = initial(gas.specific_heat) @@ -11,6 +11,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou gas_info[META_GAS_MOLES_VISIBLE] = initial(gas.moles_visible) if(initial(gas.moles_visible) != null) gas_info[META_GAS_OVERLAY] = new /obj/effect/overlay/gas(initial(gas.gas_overlay)) + gas_info[META_GAS_DANGER] = initial(gas.dangerous) .[initial(gas.id)] = gas_info /*||||||||||||||/----------\||||||||||||||*\ @@ -28,6 +29,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou var/name = "" var/gas_overlay = "" //icon_state in icons/effects/tile_effects.dmi var/moles_visible = null + var/dangerous = FALSE //currently used by canisters /datum/gas/oxygen id = "o2" @@ -50,6 +52,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou name = "Plasma" gas_overlay = "plasma" moles_visible = MOLES_PLASMA_VISIBLE + dangerous = TRUE /datum/gas/water_vapor id = "water_vapor" @@ -64,6 +67,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou name = "Freon" gas_overlay = "freon" moles_visible = MOLES_PLASMA_VISIBLE + dangerous = TRUE /datum/gas/nitrous_oxide id = "n2o" @@ -71,6 +75,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou name = "Nitrous Oxide" gas_overlay = "nitrous_oxide" moles_visible = 1 + dangerous = TRUE /datum/gas/oxygen_agent_b id = "agent_b" @@ -86,6 +91,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou id = "bz" specific_heat = 20 name = "BZ" + dangerous = TRUE /obj/effect/overlay/gas icon = 'icons/effects/tile_effects.dmi' @@ -95,4 +101,4 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou /obj/effect/overlay/gas/New(state) . = ..() - icon_state = state \ No newline at end of file + icon_state = state diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 2a67b5fe13..99db88dfe3 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -153,30 +153,31 @@ return var/datum/gas_mixture/air1 = AIR1 var/turf/T = get_turf(src) - if(occupant) - if(occupant.health >= 100) // Don't bother with fully healed people. + if(isliving(occupant)) + var/mob/living/mob_occupant + if(mob_occupant.health >= 100) // Don't bother with fully healed people. on = FALSE update_icon() - playsound(T, 'sound/machines/cryo_warning.ogg', volume, 1) // Bug the doctors. - radio.talk_into(src, "Patient fully restored", radio_channel) + playsound(T, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors. + radio.talk_into(src, "Patient fully restored", radio_channel, get_spans(), get_default_language()) if(autoeject) // Eject if configured. - radio.talk_into(src, "Auto ejecting patient now", radio_channel,get_spans(), get_default_language()) + radio.talk_into(src, "Auto ejecting patient now", radio_channel, get_spans(), get_default_language()) open_machine() return - else if(occupant.stat == DEAD) // We don't bother with dead people. + else if(mob_occupant.stat == DEAD) // We don't bother with dead people. return if(autoeject) // Eject if configured. open_machine() return if(air1.gases.len) - if(occupant.bodytemperature < T0C) // Sleepytime. Why? More cryo magic. - occupant.Sleeping((occupant.bodytemperature / sleep_factor) * 100) - occupant.Paralyse((occupant.bodytemperature / paralyze_factor) * 100) + if(mob_occupant.bodytemperature < T0C) // Sleepytime. Why? More cryo magic. + mob_occupant.Sleeping((mob_occupant.bodytemperature / sleep_factor) * 100) + mob_occupant.Paralyse((mob_occupant.bodytemperature / paralyze_factor) * 100) if(beaker) if(reagent_transfer == 0) // Magically transfer reagents. Because cryo magic. - beaker.reagents.trans_to(occupant, 1, 10 * efficiency) // Transfer reagents, multiplied because cryo magic. - beaker.reagents.reaction(occupant, VAPOR) + beaker.reagents.trans_to(mob_occupant, 1, 10 * efficiency) // Transfer reagents, multiplied because cryo magic. + beaker.reagents.reaction(mob_occupant, VAPOR) air1.gases["o2"][MOLES] -= 2 / efficiency // Lets use gas for this. if(++reagent_transfer >= 10 * efficiency) // Throttle reagent transfer (higher efficiency will transfer the same amount but consume less from the beaker). reagent_transfer = 0 @@ -191,20 +192,21 @@ on = FALSE update_icon() return - if(occupant) + if(isliving(occupant)) + var/mob/living/mob_occupant = occupant var/cold_protection = 0 var/mob/living/carbon/human/H = occupant if(istype(H)) cold_protection = H.get_cold_protection(air1.temperature) - var/temperature_delta = air1.temperature - occupant.bodytemperature // The only semi-realistic thing here: share temperature between the cell and the occupant. + var/temperature_delta = air1.temperature - mob_occupant.bodytemperature // The only semi-realistic thing here: share temperature between the cell and the occupant. if(abs(temperature_delta) > 1) var/air_heat_capacity = air1.heat_capacity() var/heat = ((1 - cold_protection) / 10 + conduction_coefficient) \ * temperature_delta * \ (air_heat_capacity * heat_capacity / (air_heat_capacity + heat_capacity)) air1.temperature = max(air1.temperature - heat / air_heat_capacity, TCMB) - occupant.bodytemperature = max(occupant.bodytemperature + heat / heat_capacity, TCMB) + mob_occupant.bodytemperature = max(mob_occupant.bodytemperature + heat / heat_capacity, TCMB) air1.gases["o2"][MOLES] -= 0.5 / efficiency // Magically consume gas? Why not, we run on cryo magic. @@ -265,6 +267,9 @@ I.loc = src user.visible_message("[user] places [I] in [src].", \ "You place [I] in [src].") + var/reagentlist = pretty_string_from_reagent_list(I.reagents.reagent_list) + log_game("[key_name(user)] added an [I] to cyro containing [reagentlist]") + return if(!on && !occupant && !state_open) if(default_deconstruction_screwdriver(user, "pod0-o", "pod0", I)) @@ -294,17 +299,18 @@ data["autoEject"] = autoeject var/list/occupantData = list() - if(occupant) - occupantData["name"] = occupant.name - occupantData["stat"] = occupant.stat - occupantData["health"] = occupant.health - occupantData["maxHealth"] = occupant.maxHealth + if(isliving(occupant)) + var/mob/living/mob_occupant = occupant + occupantData["name"] = mob_occupant.name + occupantData["stat"] = mob_occupant.stat + occupantData["health"] = mob_occupant.health + occupantData["maxHealth"] = mob_occupant.maxHealth occupantData["minHealth"] = HEALTH_THRESHOLD_DEAD - occupantData["bruteLoss"] = occupant.getBruteLoss() - occupantData["oxyLoss"] = occupant.getOxyLoss() - occupantData["toxLoss"] = occupant.getToxLoss() - occupantData["fireLoss"] = occupant.getFireLoss() - occupantData["bodyTemperature"] = occupant.bodytemperature + occupantData["bruteLoss"] = mob_occupant.getBruteLoss() + occupantData["oxyLoss"] = mob_occupant.getOxyLoss() + occupantData["toxLoss"] = mob_occupant.getToxLoss() + occupantData["fireLoss"] = mob_occupant.getFireLoss() + occupantData["bodyTemperature"] = mob_occupant.bodytemperature data["occupant"] = occupantData @@ -355,4 +361,4 @@ return //can't ventcrawl in or out of cryo. /obj/machinery/atmospherics/components/unary/cryo_cell/can_see_pipes() - return 0 //you can't see the pipe network when inside a cryo cell. + return 0 //you can't see the pipe network when inside a cryo cell. \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index f9e3b79ed6..bd9f3e35df 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -1,139 +1,134 @@ -/obj/machinery/meter - name = "gas flow meter" - desc = "It measures something." - icon = 'icons/obj/meter.dmi' - icon_state = "meterX" - var/atom/target = null - anchored = 1 - power_channel = ENVIRON - var/frequency = 0 - var/id_tag - use_power = 1 - idle_power_usage = 2 - active_power_usage = 4 - obj_integrity = 150 - max_integrity = 150 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 40, acid = 0) - - -/obj/machinery/meter/New() - ..() - SSair.atmos_machinery += src - src.target = locate(/obj/machinery/atmospherics/pipe) in loc - return 1 - -/obj/machinery/meter/Destroy() - SSair.atmos_machinery -= src - src.target = null - return ..() - -/obj/machinery/meter/Initialize(mapload) - ..() - if (mapload && !target) - src.target = locate(/obj/machinery/atmospherics/pipe) in loc - -/obj/machinery/meter/process_atmos() - if(!target) - icon_state = "meterX" - return 0 - - if(stat & (BROKEN|NOPOWER)) - icon_state = "meter0" - return 0 - - use_power(5) - - var/datum/gas_mixture/environment = target.return_air() - if(!environment) - icon_state = "meterX" - return 0 - - var/env_pressure = environment.return_pressure() - if(env_pressure <= 0.15*ONE_ATMOSPHERE) - icon_state = "meter0" - else if(env_pressure <= 1.8*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*0.3) + 0.5) - icon_state = "meter1_[val]" - else if(env_pressure <= 30*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*5)-0.35) + 1 - icon_state = "meter2_[val]" - else if(env_pressure <= 59*ONE_ATMOSPHERE) - var/val = round(env_pressure/(ONE_ATMOSPHERE*5) - 6) + 1 - icon_state = "meter3_[val]" - else - icon_state = "meter4" - - if(frequency) - var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency) - - if(!radio_connection) - return - - var/datum/signal/signal = new - signal.source = src - signal.transmission_method = 1 - signal.data = list( - "id_tag" = id_tag, - "device" = "AM", - "pressure" = round(env_pressure), - "sigtype" = "status" - ) - radio_connection.post_signal(src, signal) - -/obj/machinery/meter/proc/status() - var/t = "" - if (src.target) - var/datum/gas_mixture/environment = target.return_air() - if(environment) - t += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)] K ([round(environment.temperature-T0C,0.01)]°C)" - else - t += "The sensor error light is blinking." - else - t += "The connect error light is blinking." - return t - -/obj/machinery/meter/examine(mob/user) - ..() - to_chat(user, status()) - - -/obj/machinery/meter/attackby(obj/item/weapon/W, mob/user, params) - if (istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, W.usesound, 50, 1) - to_chat(user, "You begin to unfasten \the [src]...") - if (do_after(user, 40*W.toolspeed, target = src)) - user.visible_message( \ - "[user] unfastens \the [src].", \ - "You unfasten \the [src].", \ - "You hear ratchet.") - new /obj/item/pipe_meter(src.loc) - qdel(src) - else - return ..() - -/obj/machinery/meter/attack_ai(mob/user) - return src.attack_hand(user) - -/obj/machinery/meter/attack_paw(mob/user) - return src.attack_hand(user) - -/obj/machinery/meter/attack_hand(mob/user) - - if(stat & (NOPOWER|BROKEN)) - return 1 - else - to_chat(usr, status()) - return 1 - -/obj/machinery/meter/singularity_pull(S, current_size) - if(current_size >= STAGE_FIVE) - new /obj/item/pipe_meter(loc) - qdel(src) - -// TURF METER - REPORTS A TILE'S AIR CONTENTS -// why are you yelling? -/obj/machinery/meter/turf - -/obj/machinery/meter/turf/Initialize() - ..() - src.target = loc +/obj/machinery/meter + name = "gas flow meter" + desc = "It measures something." + icon = 'icons/obj/meter.dmi' + icon_state = "meterX" + var/atom/target = null + anchored = 1 + power_channel = ENVIRON + var/frequency = 0 + var/id_tag + use_power = 1 + idle_power_usage = 2 + active_power_usage = 4 + obj_integrity = 150 + max_integrity = 150 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 40, acid = 0) + + +/obj/machinery/meter/Initialize(mapload) + . = ..() + SSair.atmos_machinery += src + if (mapload && !target) + target = locate(/obj/machinery/atmospherics/pipe) in loc + +/obj/machinery/meter/Destroy() + SSair.atmos_machinery -= src + src.target = null + return ..() + +/obj/machinery/meter/process_atmos() + if(!target) + icon_state = "meterX" + return 0 + + if(stat & (BROKEN|NOPOWER)) + icon_state = "meter0" + return 0 + + use_power(5) + + var/datum/gas_mixture/environment = target.return_air() + if(!environment) + icon_state = "meterX" + return 0 + + var/env_pressure = environment.return_pressure() + if(env_pressure <= 0.15*ONE_ATMOSPHERE) + icon_state = "meter0" + else if(env_pressure <= 1.8*ONE_ATMOSPHERE) + var/val = round(env_pressure/(ONE_ATMOSPHERE*0.3) + 0.5) + icon_state = "meter1_[val]" + else if(env_pressure <= 30*ONE_ATMOSPHERE) + var/val = round(env_pressure/(ONE_ATMOSPHERE*5)-0.35) + 1 + icon_state = "meter2_[val]" + else if(env_pressure <= 59*ONE_ATMOSPHERE) + var/val = round(env_pressure/(ONE_ATMOSPHERE*5) - 6) + 1 + icon_state = "meter3_[val]" + else + icon_state = "meter4" + + if(frequency) + var/datum/radio_frequency/radio_connection = SSradio.return_frequency(frequency) + + if(!radio_connection) + return + + var/datum/signal/signal = new + signal.source = src + signal.transmission_method = 1 + signal.data = list( + "id_tag" = id_tag, + "device" = "AM", + "pressure" = round(env_pressure), + "sigtype" = "status" + ) + radio_connection.post_signal(src, signal) + +/obj/machinery/meter/proc/status() + var/t = "" + if (src.target) + var/datum/gas_mixture/environment = target.return_air() + if(environment) + t += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)] K ([round(environment.temperature-T0C,0.01)]°C)" + else + t += "The sensor error light is blinking." + else + t += "The connect error light is blinking." + return t + +/obj/machinery/meter/examine(mob/user) + ..() + to_chat(user, status()) + + +/obj/machinery/meter/attackby(obj/item/weapon/W, mob/user, params) + if (istype(W, /obj/item/weapon/wrench)) + playsound(src.loc, W.usesound, 50, 1) + to_chat(user, "You begin to unfasten \the [src]...") + if (do_after(user, 40*W.toolspeed, target = src)) + user.visible_message( \ + "[user] unfastens \the [src].", \ + "You unfasten \the [src].", \ + "You hear ratchet.") + new /obj/item/pipe_meter(src.loc) + qdel(src) + else + return ..() + +/obj/machinery/meter/attack_ai(mob/user) + return src.attack_hand(user) + +/obj/machinery/meter/attack_paw(mob/user) + return src.attack_hand(user) + +/obj/machinery/meter/attack_hand(mob/user) + + if(stat & (NOPOWER|BROKEN)) + return 1 + else + to_chat(usr, status()) + return 1 + +/obj/machinery/meter/singularity_pull(S, current_size) + if(current_size >= STAGE_FIVE) + new /obj/item/pipe_meter(loc) + qdel(src) + +// TURF METER - REPORTS A TILE'S AIR CONTENTS +// why are you yelling? +/obj/machinery/meter/turf + +/obj/machinery/meter/turf/Initialize() + ..() + src.target = loc diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index f5613c0b7e..09c7a44c66 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -395,25 +395,21 @@ if(valve_open) logmsg = "Valve was opened by [key_name(usr)], starting a transfer into \the [holding || "air"].
" if(!holding) - var/plasma = air_contents.gases["plasma"] - var/n2o = air_contents.gases["n2o"] - var/bz = air_contents.gases["bz"] - var/freon = air_contents.gases["freon"] - if(n2o || plasma || bz || freon) - message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains the following: (JMP)") - log_admin("[key_name(usr)] opened a canister that contains the following at [x], [y], [z]:") - if(plasma) - log_admin("Plasma") - message_admins("Plasma") - if(n2o) - log_admin("N2O") - message_admins("N2O") - if(bz) - log_admin("BZ Gas") - message_admins("BZ Gas") - if(freon) - log_admin("Freon") - message_admins("Freon") + var/list/danger = list() + for(var/id in air_contents.gases) + var/gas = air_contents.gases[id] + if(!gas[GAS_META][META_GAS_DANGER]) + continue + if(gas[MOLES] > (gas[GAS_META][META_GAS_MOLES_VISIBLE] || MOLES_PLASMA_VISIBLE)) //if moles_visible is undefined, default to plasma visibility + danger[gas[GAS_META][META_GAS_NAME]] = gas[MOLES] //ex. "plasma" = 20 + + if(danger.len) + message_admins("[ADMIN_LOOKUPFLW(usr)] opened a canister that contains the following: [ADMIN_JMP(src)]") + log_admin("[key_name(usr)] opened a canister that contains the following at [COORD(src)]:") + for(var/name in danger) + var/msg = "[name]: [danger[name]] moles." + log_admin(msg) + message_admins(msg) else logmsg = "Valve was closed by [key_name(usr)], stopping the transfer into \the [holding || "air"].
" investigate_log(logmsg, "atmos") @@ -447,6 +443,4 @@ holding.forceMove(get_turf(src)) holding = null . = TRUE - update_icon() - - + update_icon() \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 40f88cbecb..16c786c044 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -103,8 +103,9 @@ var/plasma = air_contents.gases["plasma"] var/n2o = air_contents.gases["n2o"] if(n2o || plasma) - message_admins("[key_name_admin(usr)] (?) (FLW) turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""]! (JMP)") - log_admin("[key_name(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [x], [y], [z]") + var/area/A = get_area(src) + message_admins("[ADMIN_LOOKUPFLW(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [A][ADMIN_JMP(src)]") + log_admin("[key_name(usr)] turned on a pump that contains [n2o ? "N2O" : ""][n2o && plasma ? " & " : ""][plasma ? "Plasma" : ""] at [A][COORD(src)]") . = TRUE if("direction") if(direction == PUMP_OUT) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 9fa0fbf5a5..6100b296ed 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -20,6 +20,7 @@ var/oxy_damage = 0 density = 1 anchored = 1 + var/banType = "lavaland" /obj/effect/mob_spawn/attack_ghost(mob/user) if(!SSticker.HasRoundStarted() || !loc) @@ -27,7 +28,7 @@ if(!uses) to_chat(user, "This spawner is out of charges!") return - if(jobban_isbanned(user, "lavaland")) + if(jobban_isbanned(user, banType)) to_chat(user, "You are jobanned!") return var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No") diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 80d6d84a68..a1cba47271 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -1,240 +1,240 @@ -GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) - -/obj/machinery/gateway - name = "gateway" - desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations." - icon = 'icons/obj/machines/gateway.dmi' - icon_state = "off" - density = 1 - anchored = 1 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/active = 0 - var/checkparts = TRUE - var/list/obj/effect/landmark/randomspawns = list() - var/calibrated = TRUE - var/list/linked = list() - var/can_link = FALSE //Is this the centerpiece? - -/obj/machinery/gateway/Initialize() - randomspawns = GLOB.awaydestinations - update_icon() - if(!istype(src, /obj/machinery/gateway/centerstation) && !istype(src, /obj/machinery/gateway/centeraway)) - switch(dir) - if(SOUTH,SOUTHEAST,SOUTHWEST) - density = 0 - ..() - -/obj/machinery/gateway/proc/toggleoff() - for(var/obj/machinery/gateway/G in linked) - G.active = 0 - G.update_icon() - active = 0 - update_icon() - -/obj/machinery/gateway/proc/detect() - if(!can_link) - return FALSE - linked = list() //clear the list - var/turf/T = loc - var/ready = FALSE - - for(var/i in GLOB.alldirs) - T = get_step(loc, i) - var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T - if(G) - linked.Add(G) - continue - - //this is only done if we fail to find a part - ready = FALSE - toggleoff() - break - - if((linked.len == 8) || !checkparts) - ready = TRUE - return ready - -/obj/machinery/gateway/update_icon() - if(active) - icon_state = "on" - return - icon_state = "off" - -//prevents shuttles attempting to rotate this since it messes up sprites -/obj/machinery/gateway/shuttleRotate() - return - -/obj/machinery/gateway/attack_hand(mob/user) - if(!detect()) - return - if(!active) - toggleon(user) - return - toggleoff() - -/obj/machinery/gateway/proc/toggleon(mob/user) - return FALSE - -/obj/machinery/gateway/centerstation/New() - ..() - if(!GLOB.the_gateway) - GLOB.the_gateway = src - -/obj/machinery/gateway/centerstation/Destroy() - if(GLOB.the_gateway == src) - GLOB.the_gateway = null - return ..() - -//this is da important part wot makes things go -/obj/machinery/gateway/centerstation - density = TRUE - icon_state = "offcenter" - use_power = TRUE - - //warping vars - var/wait = 0 //this just grabs world.time at world start - var/obj/machinery/gateway/centeraway/awaygate = null - can_link = TRUE - -/obj/machinery/gateway/centerstation/Initialize() - ..() - update_icon() - wait = world.time + config.gateway_delay //+ thirty minutes default - awaygate = locate(/obj/machinery/gateway/centeraway) - -/obj/machinery/gateway/centerstation/update_icon() - if(active) - icon_state = "oncenter" - return - icon_state = "offcenter" - -/obj/machinery/gateway/centerstation/process() - if((stat & (NOPOWER)) && use_power) - if(active) - toggleoff() - return - - if(active) - use_power(5000) - -/obj/machinery/gateway/centerstation/toggleon(mob/user) - if(!detect()) - return - if(!powered()) - return - if(!awaygate) - to_chat(user, "Error: No destination found.") - return - if(world.time < wait) - to_chat(user, "Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.") - return - - for(var/obj/machinery/gateway/G in linked) - G.active = 1 - G.update_icon() - active = 1 - update_icon() - -//okay, here's the good teleporting stuff -/obj/machinery/gateway/centerstation/Bumped(atom/movable/AM) - if(!active) - return - if(!detect()) - return - if(!awaygate || QDELETED(awaygate)) - return - - if(awaygate.calibrated) - AM.forceMove(get_step(awaygate.loc, SOUTH)) - AM.setDir(SOUTH) - if (ismob(AM)) - var/mob/M = AM - if (M.client) - M.client.move_delay = max(world.time + 5, M.client.move_delay) - return - else - var/obj/effect/landmark/dest = pick(randomspawns) - if(dest) - AM.forceMove(get_turf(dest)) - AM.setDir(SOUTH) - use_power(5000) - return - -/obj/machinery/gateway/centeraway/attackby(obj/item/device/W, mob/user, params) - if(istype(W,/obj/item/device/multitool)) - if(calibrated) - to_chat(user, "\black The gate is already calibrated, there is no work for you to do here.") - return - else - to_chat(user, "Recalibration successful!: \black This gate's systems have been fine tuned. Travel to this gate will now be on target.") - calibrated = TRUE - return - -/////////////////////////////////////Away//////////////////////// - - -/obj/machinery/gateway/centeraway - density = TRUE - icon_state = "offcenter" - use_power = FALSE - var/obj/machinery/gateway/centeraway/stationgate = null - can_link = TRUE - - -/obj/machinery/gateway/centeraway/Initialize() - ..() - update_icon() - stationgate = locate(/obj/machinery/gateway/centerstation) - - -/obj/machinery/gateway/centeraway/update_icon() - if(active) - icon_state = "oncenter" - return - icon_state = "offcenter" - -/obj/machinery/gateway/centeraway/toggleon(mob/user) - if(!detect()) - return - if(!stationgate) - to_chat(user, "Error: No destination found.") - return - - for(var/obj/machinery/gateway/G in linked) - G.active = 1 - G.update_icon() - active = 1 - update_icon() - -/obj/machinery/gateway/centeraway/proc/check_exile_implant(mob/living/carbon/C) - for(var/obj/item/weapon/implant/exile/E in C.implants)//Checking that there is an exile implant - to_chat(C, "\black The station gate has detected your exile implant and is blocking your entry.") - return TRUE - return FALSE - -/obj/machinery/gateway/centeraway/Bumped(atom/movable/AM) - if(!detect()) - return - if(!active) - return - if(!stationgate || QDELETED(stationgate)) - return - if(istype(AM, /mob/living/carbon)) - if(check_exile_implant(AM)) - return - else - for(var/mob/living/carbon/C in AM.contents) - if(check_exile_implant(C)) - say("Rejecting [AM]: Exile implant detected in contained lifeform.") - return - if(AM.buckled_mobs.len) - for(var/mob/living/carbon/C in AM.buckled_mobs) - if(check_exile_implant(C)) - say("Rejecting [AM]: Exile implant detected in close proximity lifeform.") - return - AM.forceMove(get_step(stationgate.loc, SOUTH)) - AM.setDir(SOUTH) - if (ismob(AM)) - var/mob/M = AM - if (M.client) - M.client.move_delay = max(world.time + 5, M.client.move_delay) +GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) + +/obj/machinery/gateway + name = "gateway" + desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations." + icon = 'icons/obj/machines/gateway.dmi' + icon_state = "off" + density = 1 + anchored = 1 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + var/active = 0 + var/checkparts = TRUE + var/list/obj/effect/landmark/randomspawns = list() + var/calibrated = TRUE + var/list/linked = list() + var/can_link = FALSE //Is this the centerpiece? + +/obj/machinery/gateway/Initialize() + randomspawns = GLOB.awaydestinations + update_icon() + if(!istype(src, /obj/machinery/gateway/centerstation) && !istype(src, /obj/machinery/gateway/centeraway)) + switch(dir) + if(SOUTH,SOUTHEAST,SOUTHWEST) + density = 0 + ..() + +/obj/machinery/gateway/proc/toggleoff() + for(var/obj/machinery/gateway/G in linked) + G.active = 0 + G.update_icon() + active = 0 + update_icon() + +/obj/machinery/gateway/proc/detect() + if(!can_link) + return FALSE + linked = list() //clear the list + var/turf/T = loc + var/ready = FALSE + + for(var/i in GLOB.alldirs) + T = get_step(loc, i) + var/obj/machinery/gateway/G = locate(/obj/machinery/gateway) in T + if(G) + linked.Add(G) + continue + + //this is only done if we fail to find a part + ready = FALSE + toggleoff() + break + + if((linked.len == 8) || !checkparts) + ready = TRUE + return ready + +/obj/machinery/gateway/update_icon() + if(active) + icon_state = "on" + return + icon_state = "off" + +//prevents shuttles attempting to rotate this since it messes up sprites +/obj/machinery/gateway/shuttleRotate() + return + +/obj/machinery/gateway/attack_hand(mob/user) + if(!detect()) + return + if(!active) + toggleon(user) + return + toggleoff() + +/obj/machinery/gateway/proc/toggleon(mob/user) + return FALSE + +/obj/machinery/gateway/centerstation/New() + ..() + if(!GLOB.the_gateway) + GLOB.the_gateway = src + +/obj/machinery/gateway/centerstation/Destroy() + if(GLOB.the_gateway == src) + GLOB.the_gateway = null + return ..() + +//this is da important part wot makes things go +/obj/machinery/gateway/centerstation + density = TRUE + icon_state = "offcenter" + use_power = TRUE + + //warping vars + var/wait = 0 //this just grabs world.time at world start + var/obj/machinery/gateway/centeraway/awaygate = null + can_link = TRUE + +/obj/machinery/gateway/centerstation/Initialize() + ..() + update_icon() + wait = world.time + config.gateway_delay //+ thirty minutes default + awaygate = locate(/obj/machinery/gateway/centeraway) + +/obj/machinery/gateway/centerstation/update_icon() + if(active) + icon_state = "oncenter" + return + icon_state = "offcenter" + +/obj/machinery/gateway/centerstation/process() + if((stat & (NOPOWER)) && use_power) + if(active) + toggleoff() + return + + if(active) + use_power(5000) + +/obj/machinery/gateway/centerstation/toggleon(mob/user) + if(!detect()) + return + if(!powered()) + return + if(!awaygate) + to_chat(user, "Error: No destination found.") + return + if(world.time < wait) + to_chat(user, "Error: Warpspace triangulation in progress. Estimated time to completion: [round(((wait - world.time) / 10) / 60)] minutes.") + return + + for(var/obj/machinery/gateway/G in linked) + G.active = 1 + G.update_icon() + active = 1 + update_icon() + +//okay, here's the good teleporting stuff +/obj/machinery/gateway/centerstation/Bumped(atom/movable/AM) + if(!active) + return + if(!detect()) + return + if(!awaygate || QDELETED(awaygate)) + return + + if(awaygate.calibrated) + AM.forceMove(get_step(awaygate.loc, SOUTH)) + AM.setDir(SOUTH) + if (ismob(AM)) + var/mob/M = AM + if (M.client) + M.client.move_delay = max(world.time + 5, M.client.move_delay) + return + else + var/obj/effect/landmark/dest = pick(randomspawns) + if(dest) + AM.forceMove(get_turf(dest)) + AM.setDir(SOUTH) + use_power(5000) + return + +/obj/machinery/gateway/centeraway/attackby(obj/item/device/W, mob/user, params) + if(istype(W,/obj/item/device/multitool)) + if(calibrated) + to_chat(user, "\black The gate is already calibrated, there is no work for you to do here.") + return + else + to_chat(user, "Recalibration successful!: \black This gate's systems have been fine tuned. Travel to this gate will now be on target.") + calibrated = TRUE + return + +/////////////////////////////////////Away//////////////////////// + + +/obj/machinery/gateway/centeraway + density = TRUE + icon_state = "offcenter" + use_power = FALSE + var/obj/machinery/gateway/centeraway/stationgate = null + can_link = TRUE + + +/obj/machinery/gateway/centeraway/Initialize() + ..() + update_icon() + stationgate = locate(/obj/machinery/gateway/centerstation) + + +/obj/machinery/gateway/centeraway/update_icon() + if(active) + icon_state = "oncenter" + return + icon_state = "offcenter" + +/obj/machinery/gateway/centeraway/toggleon(mob/user) + if(!detect()) + return + if(!stationgate) + to_chat(user, "Error: No destination found.") + return + + for(var/obj/machinery/gateway/G in linked) + G.active = 1 + G.update_icon() + active = 1 + update_icon() + +/obj/machinery/gateway/centeraway/proc/check_exile_implant(mob/living/carbon/C) + for(var/obj/item/weapon/implant/exile/E in C.implants)//Checking that there is an exile implant + to_chat(C, "\black The station gate has detected your exile implant and is blocking your entry.") + return TRUE + return FALSE + +/obj/machinery/gateway/centeraway/Bumped(atom/movable/AM) + if(!detect()) + return + if(!active) + return + if(!stationgate || QDELETED(stationgate)) + return + if(istype(AM, /mob/living/carbon)) + if(check_exile_implant(AM)) + return + else + for(var/mob/living/carbon/C in AM.contents) + if(check_exile_implant(C)) + say("Rejecting [AM]: Exile implant detected in contained lifeform.") + return + if(AM.has_buckled_mobs()) + for(var/mob/living/carbon/C in AM.buckled_mobs) + if(check_exile_implant(C)) + say("Rejecting [AM]: Exile implant detected in close proximity lifeform.") + return + AM.forceMove(get_step(stationgate.loc, SOUTH)) + AM.setDir(SOUTH) + if (ismob(AM)) + var/mob/M = AM + if (M.client) + M.client.move_delay = max(world.time + 5, M.client.move_delay) diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index f24075702a..c120f53660 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -1,308 +1,309 @@ - -//Academy Items - -/obj/singularity/academy - dissipate = 0 - move_self = 0 - grav_pull = 1 - -/obj/singularity/academy/admin_investigate_setup() - return - -/obj/singularity/academy/process() - eat() - if(prob(1)) - mezzer() - - -/obj/item/clothing/glasses/meson/truesight - name = "The Lens of Truesight" - desc = "I can see forever!" - icon_state = "monocle" - item_state = "headset" - - -/obj/structure/academy_wizard_spawner - name = "Academy Defensive System" - desc = "Made by Abjuration Inc" - icon = 'icons/obj/cult.dmi' - icon_state = "forge" - anchored = 1 - obj_integrity = 200 - max_integrity = 200 - var/mob/living/current_wizard = null - var/next_check = 0 - var/cooldown = 600 - var/faction = "wizard" - var/braindead_check = 0 - -/obj/structure/academy_wizard_spawner/New() - START_PROCESSING(SSobj, src) - -/obj/structure/academy_wizard_spawner/Destroy() - if(!broken) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/academy_wizard_spawner/process() - if(next_check < world.time) - if(!current_wizard) - for(var/mob/living/L in GLOB.player_list) - if(L.z == src.z && L.stat != DEAD && !(faction in L.faction)) - summon_wizard() - break - else - if(current_wizard.stat == DEAD) - current_wizard = null - summon_wizard() - if(!current_wizard.client) - if(!braindead_check) - braindead_check = 1 - else - braindead_check = 0 - give_control() - next_check = world.time + cooldown - -/obj/structure/academy_wizard_spawner/proc/give_control() - if(!current_wizard) - return - spawn(0) - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", "wizard", null, ROLE_WIZARD, current_wizard) - var/mob/dead/observer/chosen = null - - if(candidates.len) - chosen = pick(candidates) - message_admins("[key_name_admin(chosen)] was spawned as Wizard Academy Defender") - current_wizard.ghostize() // on the off chance braindead defender gets back in - current_wizard.key = chosen.key - -/obj/structure/academy_wizard_spawner/proc/summon_wizard() - var/turf/T = src.loc - - var/mob/living/carbon/human/wizbody = new(T) - wizbody.equipOutfit(/datum/outfit/wizard/academy) - var/obj/item/weapon/implant/exile/Implant = new/obj/item/weapon/implant/exile(wizbody) - Implant.implant(wizbody) - wizbody.faction |= "wizard" - wizbody.real_name = "Academy Teacher" - wizbody.name = "Academy Teacher" - - var/datum/mind/wizmind = new /datum/mind() - wizmind.name = "Wizard Defender" - wizmind.special_role = "Academy Defender" - var/datum/objective/O = new("Protect Wizard Academy from the intruders") - wizmind.objectives += O - wizmind.transfer_to(wizbody) - SSticker.mode.wizards |= wizmind - - wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt) - wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile) - wizmind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball) - - current_wizard = wizbody - - give_control() - -/obj/structure/academy_wizard_spawner/deconstruct(disassembled = TRUE) - if(!broken) - broken = 1 - visible_message("[src] breaks down!") - icon_state = "forge_off" - STOP_PROCESSING(SSobj, src) - -/datum/outfit/wizard/academy - name = "Academy Wizard" - r_pocket = null - r_hand = null - suit = /obj/item/clothing/suit/wizrobe/red - head = /obj/item/clothing/head/wizard/red - backpack_contents = list(/obj/item/weapon/storage/box/survival = 1) - -/obj/item/weapon/dice/d20/fate - name = "Die of Fate" - desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky." - icon_state = "d20" - sides = 20 - can_be_rigged = FALSE - var/reusable = 1 - var/used = 0 - -/obj/item/weapon/dice/d20/fate/one_use - reusable = 0 - -/obj/item/weapon/dice/d20/fate/diceroll(mob/user) - ..() - if(!used) - if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) - to_chat(user, "You feel the magic of the dice is restricted to ordinary humans!") - return - if(rigged) - effect(user,rigged) - else - effect(user,result) - -/obj/item/weapon/dice/d20/fate/equipped(mob/user, slot) - if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) - to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") - user.drop_item() - - -/obj/item/weapon/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user,roll) - if(!reusable) - used = 1 - visible_message("The die flare briefly.") - switch(roll) - if(1) - //Dust - user.dust() - if(2) - //Death - user.death() - if(3) - //Swarm of creatures - for(var/direction in GLOB.alldirs) - var/turf/T = get_turf(src) - new /mob/living/simple_animal/hostile/creature(get_step(T,direction)) - if(4) - //Destroy Equipment - for (var/obj/item/I in user) - if (istype(I, /obj/item/weapon/implant)) - continue - qdel(I) - if(5) - //Monkeying - user.monkeyize() - if(6) - //Cut speed - var/datum/species/S = user.dna.species - S.speedmod += 1 - if(7) - //Throw - user.Stun(3) - user.adjustBruteLoss(50) - var/throw_dir = pick(GLOB.cardinal) - var/atom/throw_target = get_edge_target_turf(user, throw_dir) - user.throw_at(throw_target, 200, 4) - if(8) - //Fueltank Explosion - explosion(src.loc,-1,0,2, flame_range = 2) - if(9) - //Cold - var/datum/disease/D = new /datum/disease/cold - user.ForceContractDisease(D) - if(10) - //Nothing - visible_message("[src] roll perfectly.") - if(11) - //Cookie - var/obj/item/weapon/reagent_containers/food/snacks/cookie/C = new(get_turf(src)) - C.name = "Cookie of Fate" - if(12) - //Healing - user.revive(full_heal = 1, admin_revive = 1) - if(13) - //Mad Dosh - var/turf/Start = get_turf(src) - for(var/direction in GLOB.alldirs) - var/turf/T = get_step(Start,direction) - if(rand(0,1)) - new /obj/item/stack/spacecash/c1000(T) - else - var/obj/item/weapon/storage/bag/money/M = new(T) - for(var/i in 1 to rand(5,50)) - new /obj/item/weapon/coin/gold(M) - if(14) - //Free Gun - new /obj/item/weapon/gun/ballistic/revolver/mateba(get_turf(src)) - if(15) - //Random One-use spellbook - new /obj/item/weapon/spellbook/oneuse/random(get_turf(src)) - if(16) - //Servant & Servant Summon - var/mob/living/carbon/human/H = new(get_turf(src)) - H.equipOutfit(/datum/outfit/butler) - var/datum/mind/servant_mind = new /datum/mind() - var/datum/objective/O = new("Serve [user.real_name].") - servant_mind.objectives += O - servant_mind.transfer_to(H) - - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", "wizard", mob = H) - var/mob/dead/observer/chosen = null - - if(candidates.len) - chosen = pick(candidates) - message_admins("[key_name_admin(chosen)] was spawned as Dice Servant") - H.key = chosen.key - - var/obj/effect/proc_holder/spell/targeted/summonmob/S = new - S.target_mob = H - user.mind.AddSpell(S) - - if(17) - //Tator Kit - new /obj/item/weapon/storage/box/syndicate/(get_turf(src)) - if(18) - //Captain ID - new /obj/item/weapon/card/id/captains_spare(get_turf(src)) - if(19) - //Instrinct Resistance - to_chat(user, "You feel robust.") - var/datum/species/S = user.dna.species - S.brutemod *= 0.5 - S.burnmod *= 0.5 - S.coldmod *= 0.5 - if(20) - //Free wizard! - user.mind.make_Wizard() - - -/datum/outfit/butler - name = "Butler" - uniform = /obj/item/clothing/under/suit_jacket/really_black - shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/bowler - glasses = /obj/item/clothing/glasses/monocle - gloves = /obj/item/clothing/gloves/color/white - -/obj/effect/proc_holder/spell/targeted/summonmob - name = "Summon Servant" - desc = "This spell can be used to call your servant, whenever you need it." - charge_max = 100 - clothes_req = 0 - invocation = "JE VES" - invocation_type = "whisper" - range = -1 - level_max = 0 //cannot be improved - cooldown_min = 100 - include_user = 1 - - var/mob/living/target_mob - - action_icon_state = "summons" - -/obj/effect/proc_holder/spell/targeted/summonmob/cast(list/targets,mob/user = usr) - if(!target_mob) - return - var/turf/Start = get_turf(user) - for(var/direction in GLOB.alldirs) - var/turf/T = get_step(Start,direction) - if(!T.density) - target_mob.Move(T) - -/obj/structure/ladder/unbreakable/rune - name = "Teleportation Rune" - desc = "Could lead anywhere." - icon = 'icons/obj/rune.dmi' - icon_state = "1" - color = rgb(0,0,255) - -/obj/structure/ladder/unbreakable/rune/update_icon() - return - -/obj/structure/ladder/unbreakable/rune/show_fluff_message(up,mob/user) - user.visible_message("[user] activates \the [src].","You activate \the [src].") - -/obj/structure/ladder/can_use(mob/user) - if(user.mind in SSticker.mode.wizards) - return 0 - return 1 + +//Academy Items + +/obj/singularity/academy + dissipate = 0 + move_self = 0 + grav_pull = 1 + +/obj/singularity/academy/admin_investigate_setup() + return + +/obj/singularity/academy/process() + eat() + if(prob(1)) + mezzer() + + +/obj/item/clothing/glasses/meson/truesight + name = "The Lens of Truesight" + desc = "I can see forever!" + icon_state = "monocle" + item_state = "headset" + + +/obj/structure/academy_wizard_spawner + name = "Academy Defensive System" + desc = "Made by Abjuration Inc" + icon = 'icons/obj/cult.dmi' + icon_state = "forge" + anchored = 1 + obj_integrity = 200 + max_integrity = 200 + var/mob/living/current_wizard = null + var/next_check = 0 + var/cooldown = 600 + var/faction = "wizard" + var/braindead_check = 0 + +/obj/structure/academy_wizard_spawner/New() + START_PROCESSING(SSobj, src) + +/obj/structure/academy_wizard_spawner/Destroy() + if(!broken) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/academy_wizard_spawner/process() + if(next_check < world.time) + if(!current_wizard) + for(var/mob/living/L in GLOB.player_list) + if(L.z == src.z && L.stat != DEAD && !(faction in L.faction)) + summon_wizard() + break + else + if(current_wizard.stat == DEAD) + current_wizard = null + summon_wizard() + if(!current_wizard.client) + if(!braindead_check) + braindead_check = 1 + else + braindead_check = 0 + give_control() + next_check = world.time + cooldown + +/obj/structure/academy_wizard_spawner/proc/give_control() + set waitfor = FALSE + + if(!current_wizard) + return + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as Wizard Academy Defender?", "wizard", null, be_special_flag = ROLE_WIZARD, M = current_wizard) + var/mob/dead/observer/chosen = null + + if(candidates.len) + chosen = pick(candidates) + message_admins("[key_name_admin(chosen)] was spawned as Wizard Academy Defender") + current_wizard.ghostize() // on the off chance braindead defender gets back in + current_wizard.key = chosen.key + +/obj/structure/academy_wizard_spawner/proc/summon_wizard() + var/turf/T = src.loc + + var/mob/living/carbon/human/wizbody = new(T) + wizbody.equipOutfit(/datum/outfit/wizard/academy) + var/obj/item/weapon/implant/exile/Implant = new/obj/item/weapon/implant/exile(wizbody) + Implant.implant(wizbody) + wizbody.faction |= "wizard" + wizbody.real_name = "Academy Teacher" + wizbody.name = "Academy Teacher" + + var/datum/mind/wizmind = new /datum/mind() + wizmind.name = "Wizard Defender" + wizmind.special_role = "Academy Defender" + var/datum/objective/O = new("Protect Wizard Academy from the intruders") + wizmind.objectives += O + wizmind.transfer_to(wizbody) + SSticker.mode.wizards |= wizmind + + wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt) + wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile) + wizmind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball) + + current_wizard = wizbody + + give_control() + +/obj/structure/academy_wizard_spawner/deconstruct(disassembled = TRUE) + if(!broken) + broken = 1 + visible_message("[src] breaks down!") + icon_state = "forge_off" + STOP_PROCESSING(SSobj, src) + +/datum/outfit/wizard/academy + name = "Academy Wizard" + r_pocket = null + r_hand = null + suit = /obj/item/clothing/suit/wizrobe/red + head = /obj/item/clothing/head/wizard/red + backpack_contents = list(/obj/item/weapon/storage/box/survival = 1) + +/obj/item/weapon/dice/d20/fate + name = "Die of Fate" + desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky." + icon_state = "d20" + sides = 20 + can_be_rigged = FALSE + var/reusable = 1 + var/used = 0 + +/obj/item/weapon/dice/d20/fate/one_use + reusable = 0 + +/obj/item/weapon/dice/d20/fate/diceroll(mob/user) + ..() + if(!used) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) + to_chat(user, "You feel the magic of the dice is restricted to ordinary humans!") + return + if(rigged) + effect(user,rigged) + else + effect(user,result) + +/obj/item/weapon/dice/d20/fate/equipped(mob/user, slot) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) + to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") + user.drop_item() + + +/obj/item/weapon/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user,roll) + if(!reusable) + used = 1 + visible_message("The die flare briefly.") + switch(roll) + if(1) + //Dust + user.dust() + if(2) + //Death + user.death() + if(3) + //Swarm of creatures + for(var/direction in GLOB.alldirs) + var/turf/T = get_turf(src) + new /mob/living/simple_animal/hostile/creature(get_step(T,direction)) + if(4) + //Destroy Equipment + for (var/obj/item/I in user) + if (istype(I, /obj/item/weapon/implant)) + continue + qdel(I) + if(5) + //Monkeying + user.monkeyize() + if(6) + //Cut speed + var/datum/species/S = user.dna.species + S.speedmod += 1 + if(7) + //Throw + user.Stun(3) + user.adjustBruteLoss(50) + var/throw_dir = pick(GLOB.cardinal) + var/atom/throw_target = get_edge_target_turf(user, throw_dir) + user.throw_at(throw_target, 200, 4) + if(8) + //Fueltank Explosion + explosion(src.loc,-1,0,2, flame_range = 2) + if(9) + //Cold + var/datum/disease/D = new /datum/disease/cold + user.ForceContractDisease(D) + if(10) + //Nothing + visible_message("[src] roll perfectly.") + if(11) + //Cookie + var/obj/item/weapon/reagent_containers/food/snacks/cookie/C = new(get_turf(src)) + C.name = "Cookie of Fate" + if(12) + //Healing + user.revive(full_heal = 1, admin_revive = 1) + if(13) + //Mad Dosh + var/turf/Start = get_turf(src) + for(var/direction in GLOB.alldirs) + var/turf/T = get_step(Start,direction) + if(rand(0,1)) + new /obj/item/stack/spacecash/c1000(T) + else + var/obj/item/weapon/storage/bag/money/M = new(T) + for(var/i in 1 to rand(5,50)) + new /obj/item/weapon/coin/gold(M) + if(14) + //Free Gun + new /obj/item/weapon/gun/ballistic/revolver/mateba(get_turf(src)) + if(15) + //Random One-use spellbook + new /obj/item/weapon/spellbook/oneuse/random(get_turf(src)) + if(16) + //Servant & Servant Summon + var/mob/living/carbon/human/H = new(get_turf(src)) + H.equipOutfit(/datum/outfit/butler) + var/datum/mind/servant_mind = new /datum/mind() + var/datum/objective/O = new("Serve [user.real_name].") + servant_mind.objectives += O + servant_mind.transfer_to(H) + + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as [user.real_name] Servant?", "wizard", mob = H) + var/mob/dead/observer/chosen = null + + if(candidates.len) + chosen = pick(candidates) + message_admins("[key_name_admin(chosen)] was spawned as Dice Servant") + H.key = chosen.key + + var/obj/effect/proc_holder/spell/targeted/summonmob/S = new + S.target_mob = H + user.mind.AddSpell(S) + + if(17) + //Tator Kit + new /obj/item/weapon/storage/box/syndicate/(get_turf(src)) + if(18) + //Captain ID + new /obj/item/weapon/card/id/captains_spare(get_turf(src)) + if(19) + //Instrinct Resistance + to_chat(user, "You feel robust.") + var/datum/species/S = user.dna.species + S.brutemod *= 0.5 + S.burnmod *= 0.5 + S.coldmod *= 0.5 + if(20) + //Free wizard! + user.mind.make_Wizard() + + +/datum/outfit/butler + name = "Butler" + uniform = /obj/item/clothing/under/suit_jacket/really_black + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/bowler + glasses = /obj/item/clothing/glasses/monocle + gloves = /obj/item/clothing/gloves/color/white + +/obj/effect/proc_holder/spell/targeted/summonmob + name = "Summon Servant" + desc = "This spell can be used to call your servant, whenever you need it." + charge_max = 100 + clothes_req = 0 + invocation = "JE VES" + invocation_type = "whisper" + range = -1 + level_max = 0 //cannot be improved + cooldown_min = 100 + include_user = 1 + + var/mob/living/target_mob + + action_icon_state = "summons" + +/obj/effect/proc_holder/spell/targeted/summonmob/cast(list/targets,mob/user = usr) + if(!target_mob) + return + var/turf/Start = get_turf(user) + for(var/direction in GLOB.alldirs) + var/turf/T = get_step(Start,direction) + if(!T.density) + target_mob.Move(T) + +/obj/structure/ladder/unbreakable/rune + name = "Teleportation Rune" + desc = "Could lead anywhere." + icon = 'icons/obj/rune.dmi' + icon_state = "1" + color = rgb(0,0,255) + +/obj/structure/ladder/unbreakable/rune/update_icon() + return + +/obj/structure/ladder/unbreakable/rune/show_fluff_message(up,mob/user) + user.visible_message("[user] activates \the [src].","You activate \the [src].") + +/obj/structure/ladder/can_use(mob/user) + if(user.mind in SSticker.mode.wizards) + return 0 + return 1 diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index dfb223fe15..b6fdf9ae2f 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -179,8 +179,8 @@ name = "dusty radio" desc = "A dusty looking radio." -/obj/item/device/radio/uplink/old/New() - ..() +/obj/item/device/radio/uplink/old/Initialize() + . = ..() hidden_uplink.name = "dusty radio" hidden_uplink.telecrystals = 10 diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index c2a0734958..8f3292df3a 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -50,11 +50,6 @@ material_id = MAT_PLASMA message = "cm3 of plasma" -/datum/export/material/plasma/get_cost(obj/O, contr = 0, emag = 0) - . = ..() - if(emag) // Syndicate pays you more for the plasma. - . = round(. * 1.5) - // Uranium. Still useful for both power generation and nuclear annihilation. /datum/export/material/uranium cost = 400 @@ -98,4 +93,4 @@ message = "cm3 of glass" material_id = MAT_GLASS export_types = list(/obj/item/stack/sheet/glass, /obj/item/weapon/ore, - /obj/item/weapon/shard) \ No newline at end of file + /obj/item/weapon/shard) diff --git a/code/modules/cargo/exports/research.dm b/code/modules/cargo/exports/research.dm index 8dfd08913c..6601e5cb87 100644 --- a/code/modules/cargo/exports/research.dm +++ b/code/modules/cargo/exports/research.dm @@ -22,4 +22,4 @@ if(!V) continue var/datum/tech/tech = V - techLevels[tech.id] = tech.level + techLevels[tech.id] = max(techLevels[tech.id], tech.level) diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index 707dab703c..06f2d6d019 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -88,7 +88,7 @@ // Wood. Quite expensive in the grim and dark 26 century. /datum/export/stack/wood - cost = 25 + cost = 50 unit_name = "wood plank" export_types = list(/obj/item/stack/sheet/mineral/wood) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index b7c7a7e377..b88cfc0315 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -182,14 +182,14 @@ /datum/supply_pack/emergency/syndicate name = "NULL_ENTRY" hidden = TRUE - cost = 14000 + cost = 20000 contains = list() crate_name = "emergency crate" crate_type = /obj/structure/closet/crate/internals dangerous = TRUE /datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) - var/crate_value = 50 + var/crate_value = 30 var/list/uplink_items = get_uplink_items(SSticker.mode) while(crate_value) var/category = pick(uplink_items) @@ -828,6 +828,14 @@ /obj/item/weapon/defibrillator/loaded) crate_name = "defibrillator crate" +/datum/supply_pack/medical/vending + name = "Medical Vending Crate" + cost = 2000 + contains = list(/obj/item/weapon/vending_refill/medical, + /obj/item/weapon/vending_refill/medical, + /obj/item/weapon/vending_refill/medical) + crate_name = "medical vending crate" + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Science ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1680,15 +1688,6 @@ /obj/item/toy/crayon/rainbow) crate_name = "art supply crate" -/datum/supply_pack/misc/soapstone - name = "Librarian Engraving/Scribbling Crate" - crate_name = "librarian engraving/scribbling crate" - cost = 3000 - contains = list(/obj/item/soapstone) - access = GLOB.access_library - crate_type = /obj/structure/closet/crate/secure - - /datum/supply_pack/misc/bsa name = "Bluespace Artillery Parts" cost = 15000 diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 739e0231ca..221043bd8a 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -39,9 +39,12 @@ //////////////////////////////////// //things that require the database// //////////////////////////////////// - var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. + var/player_age = -1 //Used to determine how old the account is - in days. + var/player_join_date = null //Date that this account was first seen in the server var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id + var/account_join_date = null //Date of byond account creation in ISO 8601 format + var/account_age = -1 //Age of byond account in days preload_rsc = PRELOAD_RSC @@ -62,4 +65,4 @@ var/connection_timeofday //world.timeofday they connected var/inprefs = FALSE - var/list/topiclimiter \ No newline at end of file + var/list/topiclimiter diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 4f6642f051..0d5e93fba7 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -80,8 +80,7 @@ */ //Logs all hrefs - if(config && config.log_hrefs && GLOB.href_logfile) - GLOB.href_logfile << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
" + GLOB.world_href_log << "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
" // Admin PM if(href_list["priv_msg"]) @@ -289,16 +288,11 @@ GLOBAL_LIST(external_rsc_urls) mentor_memo_output("Show") */ add_verbs_from_config() - set_client_age_from_db() + set_client_age_from_db(tdata) var/cached_player_age = player_age //we have to cache this because other shit may change it and we need it's current value now down below. if (isnum(cached_player_age) && cached_player_age == -1) //first connection - player_age = 0 - if(!IsGuestKey(key) && SSdbcore.IsConnected()) - findJoinDate() + player_age = 0 - sync_client_with_db(tdata) - - if (isnum(cached_player_age) && cached_player_age == -1) //first connection if (config.panic_bunker && !holder && !(ckey in GLOB.deadmins)) log_access("Failed Login: [key] - New account attempting to connect during panic bunker") @@ -311,20 +305,19 @@ GLOBAL_LIST(external_rsc_urls) qdel(src) return 0 + if (config.notify_new_player_age >= 0) message_admins("New user: [key_name_admin(src)] is connecting here for the first time.") if (config.irc_first_connection_alert) send2irc_adminless_only("New-user", "[key_name(src)] is connecting for the first time!") - - player_age = 0 // set it from -1 to 0 so the job selection code doesn't have a panic attack - - else if (isnum(player_age) && player_age < config.notify_new_player_age) - message_admins("New user: [key_name_admin(src)] just connected with an age of [player_age] day[(player_age==1?"":"s")]") - - if(!IsGuestKey(key) && SSdbcore.IsConnected()) - findJoinDate() - - sync_client_with_db(tdata) + else if (isnum(cached_player_age) && cached_player_age < config.notify_new_player_age) + message_admins("New user: [key_name_admin(src)] just connected with an age of [cached_player_age] day[(player_age==1?"":"s")]") + if(config.use_account_age_for_jobs && account_age >= 0) + player_age = account_age + if(account_age >= 0 && account_age < config.notify_new_player_account_age) + message_admins("[key_name_admin(src)] (IP: [address], ID: [computer_id]) is a new BYOND account [account_age] day[(account_age==1?"":"s")] old, created on [account_join_date].") + if (config.irc_first_connection_alert) + send2irc_adminless_only("new_byond_user", "[key_name(src)] (IP: [address], ID: [computer_id]) is a new BYOND account [account_age] day[(account_age==1?"":"s")] old, created on [account_join_date].") get_message_output("watchlist entry", ckey) check_ip_intel() @@ -360,6 +353,27 @@ GLOBAL_LIST(external_rsc_urls) hook_vr("client_new",list(src)) + var/list/topmenus = GLOB.menulist[/datum/menu] + for (var/thing in topmenus) + var/datum/menu/topmenu = thing + var/topmenuname = "[topmenu]" + if (topmenuname == "[topmenu.type]") + var/list/tree = splittext(topmenuname, "/") + topmenuname = tree[tree.len] + winset(src, "[topmenu.type]", "parent=menu;name=[url_encode(topmenuname)]") + var/list/entries = topmenu.Generate_list(src) + for (var/child in entries) + winset(src, "[url_encode(child)]", "[entries[child]]") + if (!ispath(child, /datum/menu)) + var/atom/verb/verbpath = child + if (copytext(verbpath.name,1,2) != "@") + new child(src) + + for (var/thing in prefs.menuoptions) + var/datum/menu/menuitem = GLOB.menulist[thing] + if (menuitem) + menuitem.Load_checked(src) + ////////////// //DISCONNECT// ////////////// @@ -370,8 +384,8 @@ GLOBAL_LIST(external_rsc_urls) adminGreet(1) holder.owner = null GLOB.admins -= src - - if (!GLOB.admins.len && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing. + + if (!GLOB.admins.len && SSticker.IsRoundInProgress()) //Only report this stuff if we are currently playing. if(!GLOB.admins.len) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. var/cheesy_message = pick( "I have no admins online!",\ @@ -396,7 +410,7 @@ GLOBAL_LIST(external_rsc_urls) "Sometimes when I have sex, I think about putting an entire peanut butter and jelly sandwich in the VCR.",\ "Forever alone :("\ ) - + send2irc("Server", "[cheesy_message] (No admins online)") GLOB.ahelp_tickets.ClientLogout(src) @@ -410,70 +424,86 @@ GLOBAL_LIST(external_rsc_urls) /client/Destroy() return QDEL_HINT_HARDDEL_NOW -/client/proc/set_client_age_from_db() +/client/proc/set_client_age_from_db(connectiontopic) if (IsGuestKey(src.key)) return - if(!SSdbcore.Connect()) return - var/sql_ckey = sanitizeSQL(src.ckey) - - var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") - if(!query_get_client_age.Execute()) - return - - while(query_get_client_age.NextRow()) - player_age = text2num(query_get_client_age.item[2]) - return - - //no match mark it as a first connection for use in client/New() - player_age = -1 - - -/client/proc/sync_client_with_db(connectiontopic) - if (IsGuestKey(src.key)) - return - - if (!SSdbcore.Connect()) - return - - var/sql_ckey = sanitizeSQL(ckey) - - var/datum/DBQuery/query_get_ip = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") - query_get_ip.Execute() + var/datum/DBQuery/query_get_related_ip = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ip = INET_ATON('[address]') AND ckey != '[sql_ckey]'") + query_get_related_ip.Execute() related_accounts_ip = "" - while(query_get_ip.NextRow()) - related_accounts_ip += "[query_get_ip.item[1]], " - - var/datum/DBQuery/query_get_cid = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") - if(!query_get_cid.Execute()) + while(query_get_related_ip.NextRow()) + related_accounts_ip += "[query_get_related_ip.item[1]], " + var/datum/DBQuery/query_get_related_cid = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") + if(!query_get_related_cid.Execute()) return related_accounts_cid = "" - while (query_get_cid.NextRow()) - related_accounts_cid += "[query_get_cid.item[1]], " - + while (query_get_related_cid.NextRow()) + related_accounts_cid += "[query_get_related_cid.item[1]], " var/admin_rank = "Player" if (src.holder && src.holder.rank) admin_rank = src.holder.rank.name else if (check_randomizer(connectiontopic)) return - - var/sql_ip = sanitizeSQL(src.address) - var/sql_computerid = sanitizeSQL(src.computer_id) + var/sql_ip = sanitizeSQL(address) + var/sql_computerid = sanitizeSQL(computer_id) var/sql_admin_rank = sanitizeSQL(admin_rank) - - - var/datum/DBQuery/query_log_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]') ON DUPLICATE KEY UPDATE lastseen = VALUES(lastseen), ip = VALUES(ip), computerid = VALUES(computerid), lastadminrank = VALUES(lastadminrank)") - if(!query_log_player.Execute()) + var/new_player + var/datum/DBQuery/query_client_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") + if(!query_client_in_db.Execute()) return - - //Logging player access - + if(!query_client_in_db.NextRow()) + new_player = 1 + account_join_date = sanitizeSQL(findJoinDate()) + var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `firstseen`, `lastseen`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', Now(), Now(), INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") + if(!query_add_player.Execute()) + return + if(!account_join_date) + account_join_date = "Error" + account_age = -1 + var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") + if(!query_get_client_age.Execute()) + return + if(query_get_client_age.NextRow()) + player_join_date = query_get_client_age.item[1] + player_age = text2num(query_get_client_age.item[2]) + if(!account_join_date) + account_join_date = query_get_client_age.item[3] + account_age = text2num(query_get_client_age.item[4]) + if(!account_age) + account_join_date = sanitizeSQL(findJoinDate()) + if(!account_join_date) + account_age = -1 + else + var/datum/DBQuery/query_datediff = SSdbcore.NewQuery("SELECT DATEDIFF(Now(),[account_join_date])") + if(!query_datediff.Execute()) + return + if(query_datediff.NextRow()) + account_age = text2num(query_datediff.item[1]) + if(!new_player) + var/datum/DBQuery/query_log_player = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET lastseen = Now(), ip = INET_ATON('[sql_ip]'), computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]', accountjoindate = [account_join_date ? "'[account_join_date]'" : "NULL"] WHERE ckey = '[sql_ckey]'") + if(!query_log_player.Execute()) + return + if(!account_join_date) + account_join_date = "Error" var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") query_log_connection.Execute() +/client/proc/findJoinDate() + var/list/http = world.Export("http://byond.com/members/[ckey]?format=text") + if(!http) + log_world("Failed to connect to byond age check for [ckey]") + return + var/F = file2text(http["CONTENT"]) + if(F) + var/regex/R = regex("joined = \"(\\d{4}-\\d{2}-\\d{2})\"") + if(R.Find(F)) + . = R.group[1] + else + CRASH("Age check regex failed for [src.ckey]") + /client/proc/check_randomizer(topic) . = FALSE if (connection != "seeker") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 631871288d..8d5bbde4b3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -168,6 +168,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/uplink_spawn_loc = UPLINK_PDA + var/list/menuoptions + //citadel code var/arousable = TRUE //Allows players to disable arousal from the character creation menu var/flavor_text = "" @@ -194,6 +196,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(!loaded_preferences_successfully) save_preferences() save_character() //let's save this new random character so it doesn't keep generating new ones. + menuoptions = list() return /datum/preferences/proc/ShowChoices(mob/user) @@ -790,7 +793,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(href_list["jobbancheck"]) var/job = sanitizeSQL(href_list["jobbancheck"]) var/sql_ckey = sanitizeSQL(user.ckey) - var/datum/DBQuery/query_get_jobban = SSdbcore.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") + var/datum/DBQuery/query_get_jobban = SSdbcore.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") if(!query_get_jobban.warn_execute()) return if(query_get_jobban.NextRow()) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 128a07ebd1..076761f93f 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -1,5 +1,5 @@ //This is the lowest supported version, anything below this is completely obsolete and the entire savefile will be wiped. -#define SAVEFILE_VERSION_MIN 10 +#define SAVEFILE_VERSION_MIN 15 //This is the current version, anything below this will attempt to update (if it's not obsolete) #define SAVEFILE_VERSION_MAX 20 @@ -88,15 +88,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car /datum/preferences/proc/update_preferences(current_version, savefile/S) - if(current_version < 10) - toggles |= MEMBER_PUBLIC - if(current_version < 11) - chat_toggles = TOGGLES_DEFAULT_CHAT - toggles = TOGGLES_DEFAULT - if(current_version < 12) - ignoring = list() - if(current_version < 15) - toggles |= SOUND_ANNOUNCEMENTS //should this proc get fairly long (say 3 versions long), @@ -106,16 +97,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //It's only really meant to avoid annoying frequent players //if your savefile is 3 months out of date, then 'tough shit'. /datum/preferences/proc/update_character(current_version, savefile/S) - if(pref_species && !(pref_species.id in GLOB.roundstart_species)) - var/rando_race = pick(config.roundstart_races) - pref_species = new rando_race() - - if(current_version < 13 || !istext(backbag)) - switch(backbag) - if(2) - backbag = DSATCHEL - else - backbag = DBACKPACK if(current_version < 16) var/berandom S["userandomjob"] >> berandom @@ -186,12 +167,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["tgui_fancy"] >> tgui_fancy S["tgui_lock"] >> tgui_lock S["windowflash"] >> windowflashing + S["be_special"] >> be_special - if(islist(S["be_special"])) - S["be_special"] >> be_special - else //force update and store the old bitflag version of be_special - needs_update = 12 - S["be_special"] >> old_be_special S["default_slot"] >> default_slot S["chat_toggles"] >> chat_toggles @@ -207,6 +184,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["uses_glasses_colour"]>> uses_glasses_colour S["clientfps"] >> clientfps S["parallax"] >> parallax + S["menuoptions"] >> menuoptions //citadel code S["arousable"] >> arousable @@ -231,6 +209,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) + menuoptions = SANITIZE_LIST(menuoptions) + be_special = SANITIZE_LIST(be_special) + return 1 @@ -267,6 +248,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["uses_glasses_colour"]<< uses_glasses_colour S["clientfps"] << clientfps S["parallax"] << parallax + S["menuoptions"] << menuoptions //citadel code S["arousable"] << arousable @@ -299,9 +281,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(config.mutant_races && species_id && (species_id in GLOB.roundstart_species)) var/newtype = GLOB.roundstart_species[species_id] pref_species = new newtype() - else + else if (config.roundstart_races.len) var/rando_race = pick(config.roundstart_races) - pref_species = new rando_race() + if (rando_race) + pref_species = new rando_race() if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000") S["features["mcolor"]"] << "#FFF" @@ -565,7 +548,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car #undef SAVEFILE_VERSION_MAX #undef SAVEFILE_VERSION_MIN -/* + +#ifdef TESTING //DEBUG //Some crude tools for testing savefiles //path is the savefile path @@ -576,4 +560,5 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car /client/verb/savefile_import(path as text) var/savefile/S = new /savefile(path) S.ImportText("/",file("[path].txt")) -*/ + +#endif \ No newline at end of file diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 74cbc70b87..eb244937e6 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -1,162 +1,249 @@ -//toggles -/client/verb/toggle_ghost_ears() - set name = "Show/Hide GhostEars" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs" - prefs.chat_toggles ^= CHAT_GHOSTEARS - to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb","Toggle Ghost Ears|[prefs.chat_toggles & CHAT_GHOSTEARS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +//this works as is to create a single checked item, but has no back end code for toggleing the check yet +#define TOGGLE_CHECKBOX(PARENT, CHILD) PARENT/CHILD/abstract = TRUE;PARENT/CHILD/checkbox = CHECKBOX_TOGGLE;PARENT/CHILD/verb/CHILD -/client/verb/toggle_ghost_sight() - set name = "Show/Hide GhostSight" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs" - prefs.chat_toggles ^= CHAT_GHOSTSIGHT - to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb","Toggle Ghost Sight|[prefs.chat_toggles & CHAT_GHOSTSIGHT]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +//Example usage TOGGLE_CHECKBOX(datum/menu/Settings/Ghost/chatterbox, toggle_ghost_ears)() -/client/verb/toggle_ghost_whispers() - set name = "Show/Hide GhostWhispers" - set category = "Preferences" - set desc = ".Toggle between hearing all whispers, and only whispers of nearby mobs" - prefs.chat_toggles ^= CHAT_GHOSTWHISPER - to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"].") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb","Toggle Ghost Whispers|[prefs.chat_toggles & CHAT_GHOSTWHISPER]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +//override because we don't want to save preferences twice. +/datum/menu/Settings/Set_checked(client/C, verbpath) + if (checkbox == CHECKBOX_GROUP) + C.prefs.menuoptions[type] = verbpath + else if (checkbox == CHECKBOX_TOGGLE) + var/checked = Get_checked(C) + C.prefs.menuoptions[type] = !checked + winset(C, "[verbpath]", "is-checked = [!checked]") -/client/verb/toggle_ghost_radio() - set name = "Show/Hide GhostRadio" +/datum/menu/Settings/verb/setup_character() + set name = "Game Preferences" set category = "Preferences" - set desc = ".Enable or disable hearing radio chatter as a ghost" - prefs.chat_toggles ^= CHAT_GHOSTRADIO - to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTRADIO) ? "see radio chatter" : "not see radio chatter"].") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb","Toggle Ghost Radio|[prefs.chat_toggles & CHAT_GHOSTRADIO]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 + set desc = "Open Game Preferences Window" + usr.client.prefs.current_tab = 1 + usr.client.prefs.ShowChoices(usr) + +//toggles +/datum/menu/Settings/Ghost/chatterbox + name = "Chat Box Spam" -/client/verb/toggle_ghost_pda() +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox, toggle_ghost_ears)() + set name = "Show/Hide GhostEars" + set category = "Preferences" + set desc = "See All Speech" + usr.client.prefs.chat_toggles ^= CHAT_GHOSTEARS + to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb","Toggle Ghost Ears|[usr.client.prefs.chat_toggles & CHAT_GHOSTEARS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Ghost/chatterbox/toggle_ghost_ears/Get_checked(client/C) + return C.prefs.chat_toggles & CHAT_GHOSTEARS + +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox, toggle_ghost_sight)() + set name = "Show/Hide GhostSight" + set category = "Preferences" + set desc = "See All Emotes" + usr.client.prefs.chat_toggles ^= CHAT_GHOSTSIGHT + to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb","Toggle Ghost Sight|[usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Ghost/chatterbox/toggle_ghost_sight/Get_checked(client/C) + return C.prefs.chat_toggles & CHAT_GHOSTSIGHT + +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox, toggle_ghost_whispers)() + set name = "Show/Hide GhostWhispers" + set category = "Preferences" + set desc = "See All Whispers" + usr.client.prefs.chat_toggles ^= CHAT_GHOSTWHISPER + to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"].") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb","Toggle Ghost Whispers|[usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Ghost/chatterbox/toggle_ghost_whispers/Get_checked(client/C) + return C.prefs.chat_toggles & CHAT_GHOSTWHISPER + +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox, toggle_ghost_radio)() + set name = "Show/Hide GhostRadio" + set category = "Preferences" + set desc = "See All Radio Chatter" + usr.client.prefs.chat_toggles ^= CHAT_GHOSTRADIO + to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO) ? "see radio chatter" : "not see radio chatter"].") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb","Toggle Ghost Radio|[usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 +/datum/menu/Settings/Ghost/chatterbox/toggle_ghost_radio/Get_checked(client/C) + return C.prefs.chat_toggles & CHAT_GHOSTRADIO + +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox, toggle_ghost_pda)() set name = "Show/Hide GhostPDA" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob pda messages, and only pda messages of nearby mobs" - prefs.chat_toggles ^= CHAT_GHOSTPDA - to_chat(src, "As a ghost, you will now [(prefs.chat_toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"].") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb","Toggle Ghost PDA|[prefs.chat_toggles & CHAT_GHOSTPDA]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + set category = "Preferences" + set desc = "See All PDA Messages" + usr.client.prefs.chat_toggles ^= CHAT_GHOSTPDA + to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"].") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb","Toggle Ghost PDA|[usr.client.prefs.chat_toggles & CHAT_GHOSTPDA]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Ghost/chatterbox/toggle_ghost_pda/Get_checked(client/C) + return C.prefs.chat_toggles & CHAT_GHOSTPDA + +/datum/menu/Settings/Ghost/chatterbox/Events + name = "Events" //please be aware that the following two verbs have inverted stat output, so that "Toggle Deathrattle|1" still means you activated it -/client/verb/toggle_deathrattle() +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox/Events, toggle_deathrattle)() set name = "Toggle Deathrattle" - set category = "Preferences" - set desc = "Toggle recieving a message in deadchat when sentient mobs die." - prefs.toggles ^= DISABLE_DEATHRATTLE - prefs.save_preferences() - to_chat(usr, "You will [(prefs.toggles & DISABLE_DEATHRATTLE) ? "no longer" : "now"] get messages when a sentient mob dies.") - SSblackbox.add_details("preferences_verb", "Toggle Deathrattle|[!(prefs.toggles & DISABLE_DEATHRATTLE)]") //If you are copy-pasting this, maybe you should spend some time reading the comments. - -/client/verb/toggle_arrivalrattle() + set category = "Preferences" + set desc = "Death" + usr.client.prefs.toggles ^= DISABLE_DEATHRATTLE + usr.client.prefs.save_preferences() + to_chat(usr, "You will [(usr.client.prefs.toggles & DISABLE_DEATHRATTLE) ? "no longer" : "now"] get messages when a sentient mob dies.") + SSblackbox.add_details("preferences_verb", "Toggle Deathrattle|[!(usr.client.prefs.toggles & DISABLE_DEATHRATTLE)]") //If you are copy-pasting this, maybe you should spend some time reading the comments. +/datum/menu/Settings/Ghost/chatterbox/Events/toggle_deathrattle/Get_checked(client/C) + return !(C.prefs.toggles & DISABLE_DEATHRATTLE) + +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost/chatterbox/Events, toggle_arrivalrattle)() set name = "Toggle Arrivalrattle" - set category = "Preferences" - set desc = "Toggle recieving a message in deadchat when someone joins the station." - prefs.toggles ^= DISABLE_ARRIVALRATTLE - to_chat(usr, "You will [(prefs.toggles & DISABLE_ARRIVALRATTLE) ? "no longer" : "now"] get messages when someone joins the station.") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb", "Toggle Arrivalrattle|[!(prefs.toggles & DISABLE_ARRIVALRATTLE)]") //If you are copy-pasting this, maybe you should rethink where your life went so wrong. - -/client/verb/togglemidroundantag() + set category = "Preferences" + set desc = "New Player Arrival" + usr.client.prefs.toggles ^= DISABLE_ARRIVALRATTLE + to_chat(usr, "You will [(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE) ? "no longer" : "now"] get messages when someone joins the station.") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb", "Toggle Arrivalrattle|[!(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE)]") //If you are copy-pasting this, maybe you should rethink where your life went so wrong. +/datum/menu/Settings/Ghost/chatterbox/Events/toggle_arrivalrattle/Get_checked(client/C) + return !(C.prefs.toggles & DISABLE_ARRIVALRATTLE) + +TOGGLE_CHECKBOX(/datum/menu/Settings/Ghost, togglemidroundantag)() set name = "Toggle Midround Antagonist" - set category = "Preferences" - set desc = "Toggles whether or not you will be considered for antagonist status given during a round." - prefs.toggles ^= MIDROUND_ANTAG - prefs.save_preferences() - to_chat(src, "You will [(prefs.toggles & MIDROUND_ANTAG) ? "now" : "no longer"] be considered for midround antagonist positions.") - SSblackbox.add_details("preferences_verb","Toggle Midround Antag|[prefs.toggles & MIDROUND_ANTAG]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggletitlemusic() + set category = "Preferences" + set desc = "Midround Antagonist" + usr.client.prefs.toggles ^= MIDROUND_ANTAG + usr.client.prefs.save_preferences() + to_chat(usr, "You will [(usr.client.prefs.toggles & MIDROUND_ANTAG) ? "now" : "no longer"] be considered for midround antagonist positions.") + SSblackbox.add_details("preferences_verb","Toggle Midround Antag|[usr.client.prefs.toggles & MIDROUND_ANTAG]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Ghost/togglemidroundantag/Get_checked(client/C) + return C.prefs.toggles & MIDROUND_ANTAG + +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, toggletitlemusic)() set name = "Hear/Silence LobbyMusic" set category = "Preferences" - set desc = "Toggles hearing the GameLobby music" - prefs.toggles ^= SOUND_LOBBY - prefs.save_preferences() - if(prefs.toggles & SOUND_LOBBY) - to_chat(src, "You will now hear music in the game lobby.") - if(isnewplayer(mob)) - playtitlemusic() + set desc = "Hear Music In Lobby" + usr.client.prefs.toggles ^= SOUND_LOBBY + usr.client.prefs.save_preferences() + if(usr.client.prefs.toggles & SOUND_LOBBY) + to_chat(usr, "You will now hear music in the game lobby.") + if(isnewplayer(usr)) + usr.client.playtitlemusic() else - to_chat(src, "You will no longer hear music in the game lobby.") - mob.stop_sound_channel(CHANNEL_LOBBYMUSIC) - SSblackbox.add_details("preferences_verb","Toggle Lobby Music|[prefs.toggles & SOUND_LOBBY]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + to_chat(usr, "You will no longer hear music in the game lobby.") + usr.stop_sound_channel(CHANNEL_LOBBYMUSIC) + SSblackbox.add_details("preferences_verb","Toggle Lobby Music|[usr.client.prefs.toggles & SOUND_LOBBY]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Sound/toggletitlemusic/Get_checked(client/C) + return C.prefs.toggles & SOUND_LOBBY + -/client/verb/togglemidis() +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, togglemidis)() set name = "Hear/Silence Midis" set category = "Preferences" - set desc = "Toggles hearing sounds uploaded by admins" - prefs.toggles ^= SOUND_MIDI - prefs.save_preferences() - if(prefs.toggles & SOUND_MIDI) - to_chat(src, "You will now hear any sounds uploaded by admins.") + set desc = "Hear Admin Triggered Sounds (Midis)" + usr.client.prefs.toggles ^= SOUND_MIDI + usr.client.prefs.save_preferences() + if(usr.client.prefs.toggles & SOUND_MIDI) + to_chat(usr, "You will now hear any sounds uploaded by admins.") else - to_chat(src, "You will no longer hear sounds uploaded by admins") - mob.stop_sound_channel(CHANNEL_ADMIN) - SSblackbox.add_details("preferences_verb","Toggle Hearing Midis|[prefs.toggles & SOUND_MIDI]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + to_chat(usr, "You will no longer hear sounds uploaded by admins") + usr.stop_sound_channel(CHANNEL_ADMIN) + SSblackbox.add_details("preferences_verb","Toggle Hearing Midis|[usr.client.prefs.toggles & SOUND_MIDI]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Sound/togglemidis/Get_checked(client/C) + return C.prefs.toggles & SOUND_MIDI -/client/verb/stop_client_sounds() - set name = "Stop Sounds" + +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, toggle_instruments)() + set name = "Hear/Silence Instruments" set category = "Preferences" - set desc = "Kills all currently playing sounds, use if admin taste in midis a shite" - src << sound(null) - SSblackbox.add_details("preferences_verb","Stop Self Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + set desc = "Hear In-game Instruments" + usr.client.prefs.toggles ^= SOUND_INSTRUMENTS + usr.client.prefs.save_preferences() + if(usr.client.prefs.toggles & SOUND_INSTRUMENTS) + to_chat(usr, "You will now hear people playing musical instruments.") + else + to_chat(usr, "You will no longer hear musical instruments.") + SSblackbox.add_details("preferences_verb","Toggle Instruments|[usr.client.prefs.toggles & SOUND_INSTRUMENTS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Sound/toggle_instruments/Get_checked(client/C) + return C.prefs.toggles & SOUND_INSTRUMENTS + -/client/verb/listen_ooc() - set name = "Show/Hide OOC" - set category = "Preferences" - set desc = "Toggles seeing OutOfCharacter chat" - prefs.chat_toggles ^= CHAT_OOC - prefs.save_preferences() - to_chat(src, "You will [(prefs.chat_toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") - SSblackbox.add_details("preferences_verb","Toggle Seeing OOC|[prefs.chat_toggles & CHAT_OOC]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, Toggle_Soundscape)() set name = "Hear/Silence Ambience" set category = "Preferences" - set desc = "Toggles hearing ambient sound effects" - prefs.toggles ^= SOUND_AMBIENCE - prefs.save_preferences() - if(prefs.toggles & SOUND_AMBIENCE) - to_chat(src, "You will now hear ambient sounds.") + set desc = "Hear Ambient Sound Effects" + usr.client.prefs.toggles ^= SOUND_AMBIENCE + usr.client.prefs.save_preferences() + if(usr.client.prefs.toggles & SOUND_AMBIENCE) + to_chat(usr, "You will now hear ambient sounds.") else - to_chat(src, "You will no longer hear ambient sounds.") - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) - SSblackbox.add_details("preferences_verb","Toggle Ambience|[prefs.toggles & SOUND_AMBIENCE]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + to_chat(usr, "You will no longer hear ambient sounds.") + usr << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) + usr << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + SSblackbox.add_details("preferences_verb","Toggle Ambience|[usr.client.prefs.toggles & SOUND_AMBIENCE]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Sound/Toggle_Soundscape/Get_checked(client/C) + return C.prefs.toggles & SOUND_AMBIENCE -// This needs a toggle because you people are awful and spammed terrible music -/client/verb/toggle_instruments() - set name = "Hear/Silence Instruments" + +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, toggle_ship_ambience)() + set name = "Hear/Silence Ship Ambience" set category = "Preferences" - set desc = "Toggles hearing musical instruments like the violin and piano" - prefs.toggles ^= SOUND_INSTRUMENTS - prefs.save_preferences() - if(prefs.toggles & SOUND_INSTRUMENTS) - to_chat(src, "You will now hear people playing musical instruments.") + set desc = "Hear Ship Ambience Roar" + usr.client.prefs.toggles ^= SOUND_SHIP_AMBIENCE + usr.client.prefs.save_preferences() + if(usr.client.prefs.toggles & SOUND_SHIP_AMBIENCE) + to_chat(usr, "You will now hear ship ambience.") else - to_chat(src, "You will no longer hear musical instruments.") - SSblackbox.add_details("preferences_verb","Toggle Instruments|[prefs.toggles & SOUND_INSTRUMENTS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + to_chat(usr, "You will no longer hear ship ambience.") + usr << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + usr.client.ambience_playing = 0 + SSblackbox.add_details("preferences_verb", "Toggle Ship Ambience|[usr.client.prefs.toggles & SOUND_SHIP_AMBIENCE]") //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) +/datum/menu/Settings/Sound/toggle_ship_ambience/Get_checked(client/C) + return C.prefs.toggles & SOUND_SHIP_AMBIENCE -//Lots of people get headaches from the normal ship ambience, this is to prevent that -/client/verb/toggle_ship_ambience() - set name = "Hear/Silence Ship Ambience" + +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, toggle_announcement_sound)() + set name = "Hear/Silence Announcements" set category = "Preferences" - set desc = "Toggles hearing generalized ship ambience, no matter your area." - prefs.toggles ^= SOUND_SHIP_AMBIENCE - prefs.save_preferences() - if(prefs.toggles & SOUND_SHIP_AMBIENCE) - to_chat(src, "You will now hear ship ambience.") + set desc = "Hear Announcement Sound" + usr.client.prefs.toggles ^= SOUND_ANNOUNCEMENTS + to_chat(usr, "You will now [(usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS) ? "hear announcement sounds" : "no longer hear announcements"].") + usr.client.prefs.save_preferences() + SSblackbox.add_details("preferences_verb","Toggle Announcement Sound|[usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/Sound/toggle_announcement_sound/Get_checked(client/C) + return C.prefs.toggles & SOUND_ANNOUNCEMENTS + + +TOGGLE_CHECKBOX(/datum/menu/Settings/Sound, toggleprayersounds)() + set name = "Hear/Silence Prayer Sounds" + set category = "Preferences" + set desc = "Hear Prayer Sounds" + usr.client.prefs.toggles ^= SOUND_PRAYERS + usr.client.prefs.save_preferences() + if(usr.client.prefs.toggles & SOUND_PRAYERS) + to_chat(usr, "You will now hear prayer sounds.") else - to_chat(src, "You will no longer hear ship ambience.") - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) - src.ambience_playing = 0 - SSblackbox.add_details("preferences_verb", "Toggle Ship Ambience|[prefs.toggles & SOUND_SHIP_AMBIENCE]") //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) + to_chat(usr, "You will no longer prayer sounds.") + SSblackbox.add_details("admin_toggle", "Toggle Prayer Sounds|[usr.client.prefs.toggles & SOUND_PRAYERS]") +/datum/menu/Settings/Sound/toggleprayersounds/Get_checked(client/C) + return C.prefs.toggles & SOUND_PRAYERS + + +/datum/menu/Settings/Sound/verb/stop_client_sounds() + set name = "Stop Sounds" + set category = "Preferences" + set desc = "Stop Current Sounds" + usr << sound(null) + SSblackbox.add_details("preferences_verb","Stop Self Sounds") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + +TOGGLE_CHECKBOX(/datum/menu/Settings, listen_ooc)() + set name = "Show/Hide OOC" + set category = "Preferences" + set desc = "Show OOC Chat" + usr.client.prefs.chat_toggles ^= CHAT_OOC + usr.client.prefs.save_preferences() + to_chat(usr, "You will [(usr.client.prefs.chat_toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") + SSblackbox.add_details("preferences_verb","Toggle Seeing OOC|[usr.client.prefs.chat_toggles & CHAT_OOC]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/menu/Settings/listen_ooc/Get_checked(client/C) + return C.prefs.chat_toggles & CHAT_OOC + GLOBAL_LIST_INIT(ghost_forms, list("ghost","ghostking","ghostian2","skeleghost","ghost_red","ghost_black", \ "ghost_blue","ghost_yellow","ghost_green","ghost_pink", \ @@ -246,13 +333,6 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.save_preferences() SSblackbox.add_details("preferences_verb","Toggle Intent Selection|[prefs.toggles & INTENT_STYLE]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/verb/setup_character() - set name = "Game Preferences" - set category = "Preferences" - set desc = "Allows you to access the Setup Character screen. Changes to your character won't take effect until next round, but other changes will." - prefs.current_tab = 1 - prefs.ShowChoices(usr) - /client/verb/toggle_ghost_hud_pref() set name = "Toggle Ghost HUD" set category = "Preferences" @@ -278,15 +358,6 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS to_chat(src, "You will no longer examine things you click on.") SSblackbox.add_details("preferences_verb","Toggle Ghost Inquisitiveness|[prefs.inquisitive_ghost]") -/client/verb/toggle_announcement_sound() - set name = "Hear/Silence Announcements" - set category = "Preferences" - set desc = ".Toggles hearing Central Command, Captain, VOX, and other announcement sounds" - prefs.toggles ^= SOUND_ANNOUNCEMENTS - to_chat(src, "You will now [(prefs.toggles & SOUND_ANNOUNCEMENTS) ? "hear announcement sounds" : "no longer hear announcements"].") - prefs.save_preferences() - SSblackbox.add_details("preferences_verb","Toggle Announcement Sound|[prefs.toggles & SOUND_ANNOUNCEMENTS]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - //Admin Preferences /client/proc/toggleadminhelpsound() set name = "Hear/Silence Adminhelps" @@ -338,14 +409,3 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS to_chat(src, "You will [(prefs.chat_toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") SSblackbox.add_details("admin_toggle","Toggle Prayer Visibility|[prefs.chat_toggles & CHAT_PRAYER]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/verb/toggleprayersounds() - set name = "Hear/Silence Prayer Sounds" - set category = "Preferences" - set desc = "Toggles hearing pray sounds." - prefs.toggles ^= SOUND_PRAYERS - prefs.save_preferences() - if(prefs.toggles & SOUND_PRAYERS) - to_chat(src, "You will now hear prayer sounds.") - else - to_chat(src, "You will no longer prayer sounds.") - SSblackbox.add_details("admin_toggle", "Toggle Prayer Sounds|[prefs.toggles & SOUND_PRAYERS]") diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 6847a7c1f4..1f50a697c2 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -13,8 +13,8 @@ return if(confirm == "Yes") suiciding = 1 - log_game("[key_name(src)] (job: [job ? "[job]" : "None"]) commited suicide at [get_area(src)].") - message_admins("[key_name(src)] (job: [job ? "[job]" : "None"]) commited suicide at [get_area(src)].") + log_game("[key_name(src)] (job: [job ? "[job]" : "None"]) committed suicide at [get_area(src)].") + message_admins("[key_name(src)] (job: [job ? "[job]" : "None"]) committed suicide at [get_area(src)].") var/obj/item/held_item = get_active_held_item() if(held_item) var/damagetype = held_item.suicide_act(src) diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index a7b1a9ac53..1614966726 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -33,7 +33,7 @@ entry += " - DEAD" if(is_special_character(C.mob)) entry += " - Antagonist" - entry += " (?)" + entry += " [ADMIN_QUE(C.mob)]" entry += " ([round(C.avgping, 1)]ms)" Lines += entry else//If they don't have +ADMIN, only show hidden admins diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 81037bd037..0de56aa86a 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -558,8 +558,8 @@ name = "radio headset" var/datum/action/item_action/chameleon/change/chameleon_action -/obj/item/device/radio/headset/chameleon/New() - ..() +/obj/item/device/radio/headset/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/device/radio/headset chameleon_action.chameleon_name = "Headset" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 20f59d0435..f287870ef6 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,804 +1,806 @@ -/obj/item/clothing - name = "clothing" - resistance_flags = FLAMMABLE - obj_integrity = 200 - max_integrity = 200 - integrity_failure = 80 - var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var - var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS - var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect - var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets - var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down - var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv - var/visor_flags_cover = 0 //same as above, but for flags_cover -//what to toggle when toggled with weldingvisortoggle() - var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW - lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' - var/alt_desc = null - var/toggle_message = null - var/alt_toggle_message = null - var/active_sound = null - var/toggle_cooldown = null - var/cooldown = 0 - var/obj/item/device/flashlight/F = null - var/can_flashlight = 0 - var/gang //Is this a gang outfit? - var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? - - //Var modification - PLEASE be careful with this I know who you are and where you live - var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts" - var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped() - - var/obj/item/weapon/storage/internal/pocket/pockets = null - - //These allow head/mask items to dynamically alter the user's hair - // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi - // for a state matching hair_state+dynamic_hair_suffix - // THESE OVERRIDE THE HIDEHAIR FLAGS - var/dynamic_hair_suffix = ""//head > mask for head hair - var/dynamic_fhair_suffix = ""//mask > head for facial hair - -/obj/item/clothing/New() - ..() - if(ispath(pockets)) - pockets = new pockets(src) - -/obj/item/clothing/MouseDrop(atom/over_object) - var/mob/M = usr - - if(pockets && over_object == M) - return pockets.MouseDrop(over_object) - - if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech - return - - if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand)) - var/obj/screen/inventory/hand/H = over_object - if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) - add_fingerprint(usr) - -/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - if(pockets) - pockets.close_all() - return ..() - -/obj/item/clothing/attack_hand(mob/user) - if(pockets && pockets.priority && ismob(loc)) - //If we already have the pockets open, close them. - if (user.s_active == pockets) - pockets.close(user) - //Close whatever the user has open and show them the pockets. - else - if (user.s_active) - user.s_active.close(user) - pockets.orient2hud(user) - pockets.show_to(user) - else - return ..() - -/obj/item/clothing/attackby(obj/item/W, mob/user, params) - if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth)) - var/obj/item/stack/sheet/cloth/C = W - C.use(1) - update_clothes_damaged_state(FALSE) - obj_integrity = max_integrity - to_chat(user, "You fix the damage on [src] with [C].") - return 1 - if(pockets) - var/i = pockets.attackby(W, user, params) - if(i) - return i - return ..() - -/obj/item/clothing/AltClick(mob/user) - if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated()) - var/obj/item/I = pockets.contents[1] - if(!I) - return - pockets.remove_from_storage(I, get_turf(src)) - - if(!user.put_in_hands(I)) - to_chat(user, "You fumble for [I] and it falls on the floor.") - return 1 - user.visible_message("[user] draws [I] from [src]!", "You draw [I] from [src].") - return 1 - else - return ..() - - -/obj/item/clothing/Destroy() - if(isliving(loc)) - dropped(loc) - if(pockets) - qdel(pockets) - pockets = null - user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up - return ..() - - -/obj/item/clothing/dropped(mob/user) - ..() - if(!istype(user)) - return - if(user_vars_remembered && user_vars_remembered.len) - for(var/variable in user_vars_remembered) - if(variable in user.vars) - if(user.vars[variable] == user_vars_to_edit[variable]) //Is it still what we set it to? (if not we best not change it) - user.vars[variable] = user_vars_remembered[variable] - user_vars_remembered = list() - - -/obj/item/clothing/equipped(mob/user, slot) - ..() - - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? - for(var/variable in user_vars_to_edit) - if(variable in user.vars) - user_vars_remembered[variable] = user.vars[variable] - user.vars[variable] = user_vars_to_edit[variable] - - -/obj/item/clothing/examine(mob/user) - ..() - if(damaged_clothes) - to_chat(user, "It looks damaged!") - if(pockets) - var/list/how_cool_are_your_threads = list("") - if(pockets.priority) - how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" - else - how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" - how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" - how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" - if(pockets.quickdraw) - how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" - if(pockets.silent) - how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" - how_cool_are_your_threads += "" - to_chat(user, how_cool_are_your_threads.Join()) - -/obj/item/clothing/obj_break(damage_flag) - if(!damaged_clothes) - update_clothes_damaged_state(TRUE) - to_chat(usr, "Your [src] starts to fall apart!") - -/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) - var/index = "\ref[initial(icon)]-[initial(icon_state)]" - var/static/list/damaged_clothes_icons = list() - if(damaging) - damaged_clothes = 1 - var/icon/damaged_clothes_icon = damaged_clothes_icons[index] - if(!damaged_clothes_icon) - damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object - damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) - damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant - damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) - damaged_clothes_icons[index] = damaged_clothes_icon - add_overlay(damaged_clothes_icon, 1) - else - damaged_clothes = 0 - cut_overlay(damaged_clothes_icons[index], TRUE) - - -//Ears: currently only used for headsets and earmuffs -/obj/item/clothing/ears - name = "ears" - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - slot_flags = SLOT_EARS - resistance_flags = 0 - -/obj/item/clothing/ears/earmuffs - name = "earmuffs" - desc = "Protects your hearing from loud noises, and quiet ones as well." - icon_state = "earmuffs" - item_state = "earmuffs" - strip_delay = 15 - put_on_delay = 25 - resistance_flags = FLAMMABLE - -/obj/item/clothing/ears/earmuffs/Initialize(mapload) - ..() - SET_SECONDARY_FLAG(src, BANG_PROTECT) - SET_SECONDARY_FLAG(src, HEALS_EARS) - -//Glasses -/obj/item/clothing/glasses - name = "glasses" - icon = 'icons/obj/clothing/glasses.dmi' - w_class = WEIGHT_CLASS_SMALL - flags_cover = GLASSESCOVERSEYES - slot_flags = SLOT_EYES - var/vision_flags = 0 - var/darkness_view = 2//Base human is 2 - var/invis_view = SEE_INVISIBLE_LIVING - var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis - var/lighting_alpha - var/emagged = 0 - var/list/icon/current = list() //the current hud icons - var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? - strip_delay = 20 - put_on_delay = 25 - resistance_flags = 0 -/* -SEE_SELF // can see self, no matter what -SEE_MOBS // can see all mobs, no matter what -SEE_OBJS // can see all objs, no matter what -SEE_TURFS // can see all turfs (and areas), no matter what -SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are - // in a lit area (via pixel_x,y or smooth movement), can see those pixels -BLIND // can't see anything -*/ - - -//Gloves -/obj/item/clothing/gloves - name = "gloves" - gender = PLURAL //Carn: for grammarically correct text-parsing - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/clothing/gloves.dmi' - siemens_coefficient = 0.50 - body_parts_covered = HANDS - slot_flags = SLOT_GLOVES - attack_verb = list("challenged") - var/transfer_prints = FALSE - strip_delay = 20 - put_on_delay = 40 - - -/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") - -/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_gloves() - -// Called just before an attack_hand(), in mob/UnarmedAttack() -/obj/item/clothing/gloves/proc/Touch(atom/A, proximity) - return 0 // return 1 to cancel attack_hand() - -//Head -/obj/item/clothing/head - name = "head" - icon = 'icons/obj/clothing/hats.dmi' - body_parts_covered = HEAD - slot_flags = SLOT_HEAD - var/blockTracking = 0 //For AI tracking - var/can_toggle = null - - -/obj/item/clothing/head/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") - -/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_head() - - -//Neck -/obj/item/clothing/neck - name = "necklace" - icon = 'icons/obj/clothing/neck.dmi' - body_parts_covered = NECK - slot_flags = SLOT_NECK - strip_delay = 40 - put_on_delay = 40 - -/obj/item/clothing/neck/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(body_parts_covered & HEAD) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "maskblood") - - -//Mask -/obj/item/clothing/mask - name = "mask" - icon = 'icons/obj/clothing/masks.dmi' - body_parts_covered = HEAD - slot_flags = SLOT_MASK - strip_delay = 40 - put_on_delay = 40 - var/mask_adjusted = 0 - var/adjusted_flags = null - - -/obj/item/clothing/mask/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(body_parts_covered & HEAD) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "maskblood") - -/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_wear_mask() - - -//Override this to modify speech like luchador masks. -/obj/item/clothing/mask/proc/speechModification(message) - return message - -//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption -/obj/item/clothing/mask/proc/adjustmask(mob/living/user) - if(user && user.incapacitated()) - return - mask_adjusted = !mask_adjusted - if(!mask_adjusted) - src.icon_state = initial(icon_state) - gas_transfer_coefficient = initial(gas_transfer_coefficient) - permeability_coefficient = initial(permeability_coefficient) - flags |= visor_flags - flags_inv |= visor_flags_inv - flags_cover |= visor_flags_cover - to_chat(user, "You push \the [src] back into place.") - slot_flags = initial(slot_flags) - else - icon_state += "_up" - to_chat(user, "You push \the [src] out of the way.") - gas_transfer_coefficient = null - permeability_coefficient = null - flags &= ~visor_flags - flags_inv &= ~visor_flags_inv - flags_cover &= ~visor_flags_cover - if(adjusted_flags) - slot_flags = adjusted_flags - if(user) - user.wear_mask_update(src, toggle_off = mask_adjusted) - user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off. - - - - -//Shoes -/obj/item/clothing/shoes - name = "shoes" - icon = 'icons/obj/clothing/shoes.dmi' - desc = "Comfortable-looking shoes." - gender = PLURAL //Carn: for grammarically correct text-parsing - var/chained = 0 - - body_parts_covered = FEET - slot_flags = SLOT_FEET - - permeability_coefficient = 0.50 - slowdown = SHOES_SLOWDOWN - var/blood_state = BLOOD_STATE_NOT_BLOODY - var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) - var/offset = 0 - var/equipped_before_drop = FALSE - -/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - var/bloody = 0 - if(blood_DNA) - bloody = 1 - else - bloody = bloody_shoes[BLOOD_STATE_HUMAN] - - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") - if(bloody) - . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") - -/obj/item/clothing/shoes/equipped(mob/user, slot) - . = ..() - if(offset && slot_flags & slotdefine2slotbit(slot)) - user.pixel_y += offset - worn_y_dimension -= (offset * 2) - user.update_inv_shoes() - equipped_before_drop = TRUE - -/obj/item/clothing/shoes/proc/restore_offsets(mob/user) - equipped_before_drop = FALSE - user.pixel_y -= offset - worn_y_dimension = world.icon_size - -/obj/item/clothing/shoes/dropped(mob/user) - if(offset && equipped_before_drop) - restore_offsets(user) - . = ..() - -/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_shoes() - -/obj/item/clothing/shoes/clean_blood() - ..() - bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) - blood_state = BLOOD_STATE_NOT_BLOODY - if(ismob(loc)) - var/mob/M = loc - M.update_inv_shoes() - -/obj/item/proc/negates_gravity() - return 0 - -//Suit -/obj/item/clothing/suit - icon = 'icons/obj/clothing/suits.dmi' - name = "suit" - var/fire_resist = T0C+100 - allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - slot_flags = SLOT_OCLOTHING - var/blood_overlay_type = "suit" - var/togglename = null - - -/obj/item/clothing/suit/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") - -/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_wear_suit() - -//Spacesuit -//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. -// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! -/obj/item/clothing/head/helmet/space - name = "space helmet" - icon_state = "spaceold" - desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays." - flags = STOPSPRESSUREDMAGE | THICKMATERIAL - item_state = "spaceold" - permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - cold_protection = HEAD - min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - flash_protect = 2 - strip_delay = 50 - put_on_delay = 50 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - resistance_flags = 0 - -/obj/item/clothing/suit/space - name = "space suit" - desc = "A suit that protects against low pressure environments. Has a big 13 on the back." - icon_state = "spaceold" - item_state = "s_suit" - w_class = WEIGHT_CLASS_BULKY - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - flags = STOPSPRESSUREDMAGE | THICKMATERIAL - body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals) - slowdown = 1 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS - min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - strip_delay = 80 - put_on_delay = 80 - resistance_flags = 0 - -//Under clothing - -/obj/item/clothing/under - icon = 'icons/obj/clothing/uniforms.dmi' - name = "under" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - permeability_coefficient = 0.90 - slot_flags = SLOT_ICLOTHING - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women - var/has_sensor = HAS_SENSORS // For the crew computer - var/random_sensor = 1 - var/sensor_mode = NO_SENSORS - var/can_adjust = 1 - var/adjusted = NORMAL_STYLE - var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only - var/obj/item/clothing/tie/hastie = null - var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. - -/obj/item/clothing/under/worn_overlays(isinhands = FALSE) - . = list() - - if(!isinhands) - - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") - if(hastie) - var/tie_color = hastie.item_color - if(!tie_color) - tie_color = hastie.icon_state - var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]") - tie.alpha = hastie.alpha - tie.color = hastie.color - . += tie - -/obj/item/clothing/under/attackby(obj/item/W, mob/user, params) - if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - C.use(1) - has_sensor = HAS_SENSORS - to_chat(user,"You repair the suit sensors on [src] with [C].") - return 1 - -/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_w_uniform() - if(has_sensor > NO_SENSORS) - has_sensor = BROKEN_SENSORS - -/obj/item/clothing/under/New() - if(random_sensor) - //make the sensor mode favor higher levels, except coords. - sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS) - adjusted = NORMAL_STYLE - ..() - -/obj/item/clothing/under/equipped(mob/user, slot) - ..() - if(adjusted) - adjusted = NORMAL_STYLE - fitted = initial(fitted) - if(!alt_covers_chest) - body_parts_covered |= CHEST - - if(mutantrace_variation && ishuman(user)) - var/mob/living/carbon/human/H = user - if(DIGITIGRADE in H.dna.species.species_traits) - adjusted = DIGITIGRADE_STYLE - H.update_inv_w_uniform() - - if(hastie && slot != slot_hands) - hastie.on_uniform_equip(src, user) - -/obj/item/clothing/under/dropped(mob/user) - if(hastie) - hastie.on_uniform_dropped(src, user) - ..() - -/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) - if(!attachTie(I, user)) - ..() - -/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1) - if(istype(I, /obj/item/clothing/tie)) - var/obj/item/clothing/tie/T = I - if(hastie) - if(user) - to_chat(user, "[src] already has an accessory.") - return 0 - else - if(user && !user.drop_item()) - return - if(!T.attach(src, user)) - return - - if(user && notifyAttach) - to_chat(user, "You attach [I] to [src].") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform() - - return 1 - -/obj/item/clothing/under/proc/removetie(mob/user) - if(!isliving(user)) - return - if(!can_use(user)) - return - - if(hastie) - var/obj/item/clothing/tie/T = hastie - hastie.detach(src, user) - if(user.put_in_hands(T)) - to_chat(user, "You detach [T] from [src].") - else - to_chat(user, "You detach [T] from [src] and it falls on the floor.") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform() - - -/obj/item/clothing/under/examine(mob/user) - ..() - if(can_adjust) - if(adjusted == ALT_STYLE) - to_chat(user, "Alt-click on [src] to wear it normally.") - else - to_chat(user, "Alt-click on [src] to wear it casually.") - if (has_sensor == BROKEN_SENSORS) - to_chat(user, "Its sensors appear to be shorted out.") - else if(has_sensor > NO_SENSORS) - switch(sensor_mode) - if(SENSOR_OFF) - to_chat(user, "Its sensors appear to be disabled.") - if(SENSOR_LIVING) - to_chat(user, "Its binary life sensors appear to be enabled.") - if(SENSOR_VITALS) - to_chat(user, "Its vital tracker appears to be enabled.") - if(SENSOR_COORDS) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") - if(hastie) - to_chat(user, "\A [hastie] is attached to it.") - -/proc/generate_female_clothing(index,t_color,icon,type) - var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color) - var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") - female_clothing_icon.Blend(female_s, ICON_MULTIPLY) - female_clothing_icon = fcopy_rsc(female_clothing_icon) - GLOB.female_clothing_icons[index] = female_clothing_icon - -/obj/item/clothing/under/verb/toggle() - set name = "Adjust Suit Sensors" - set category = "Object" - set src in usr - var/mob/M = usr - if (istype(M, /mob/dead/)) - return - if (!can_use(M)) - return - if(src.has_sensor == LOCKED_SENSORS) - to_chat(usr, "The controls are locked.") - return 0 - if(src.has_sensor == BROKEN_SENSORS) - to_chat(usr, "The sensors have shorted out!") - return 0 - if(src.has_sensor <= NO_SENSORS) - to_chat(usr, "This suit does not have any sensors.") - return 0 - - var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") - var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes - if(get_dist(usr, src) > 1) - to_chat(usr, "You have moved too far away!") - return - sensor_mode = modes.Find(switchMode) - 1 - - if (src.loc == usr) - switch(sensor_mode) - if(0) - to_chat(usr, "You disable your suit's remote sensing equipment.") - if(1) - to_chat(usr, "Your suit will now only report whether you are alive or dead.") - if(2) - to_chat(usr, "Your suit will now only report your exact vital lifesigns.") - if(3) - to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") - - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.w_uniform == src) - H.update_suit_sensors() - - ..() - -/obj/item/clothing/under/AltClick(mob/user) - if(..()) - return 1 - - if(!user.canUseTopic(src, be_close=TRUE)) - to_chat(user, "You can't do that right now!") - return - else - if(hastie) - removetie(user) - else - rolldown() - -/obj/item/clothing/under/verb/jumpsuit_adjust() - set name = "Adjust Jumpsuit Style" - set category = null - set src in usr - rolldown() - -/obj/item/clothing/under/proc/rolldown() - if(!can_use(usr)) - return - if(!can_adjust) - to_chat(usr, "You cannot wear this suit any differently!") - return - if(toggle_jumpsuit_adjust()) - to_chat(usr, "You adjust the suit to wear it more casually.") - else - to_chat(usr, "You adjust the suit back to normal.") - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - H.update_inv_w_uniform() - H.update_body() - -/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() - if(adjusted == DIGITIGRADE_STYLE) - return - adjusted = !adjusted - if(adjusted) - if(fitted != FEMALE_UNIFORM_TOP) - fitted = NO_FEMALE_UNIFORM - if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted - body_parts_covered &= ~CHEST - else - fitted = initial(fitted) - if(!alt_covers_chest) - body_parts_covered |= CHEST - return adjusted - -/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. - if(!can_use(user)) - return FALSE - - visor_toggling() - - to_chat(user, "You adjust \the [src] [up ? "up" : "down"].") - - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.head_update(src, forced = 1) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - return TRUE - -/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags - up = !up - flags ^= visor_flags - flags_inv ^= visor_flags_inv - flags_cover ^= initial(flags_cover) - icon_state = "[initial(icon_state)][up ? "up" : ""]" - if(visor_vars_to_toggle & VISOR_FLASHPROTECT) - flash_protect ^= initial(flash_protect) - if(visor_vars_to_toggle & VISOR_TINT) - tint ^= initial(tint) - - -/obj/item/clothing/proc/can_use(mob/user) - if(user && ismob(user)) - if(!user.incapacitated()) - return 1 - return 0 - - -/obj/item/clothing/obj_destruction(damage_flag) - if(damage_flag == "bomb" || damage_flag == "melee") - var/turf/T = get_turf(src) - spawn(1) //so the shred survives potential turf change from the explosion. - var/obj/effect/decal/cleanable/shreds/Shreds = new(T) - Shreds.desc = "The sad remains of what used to be [name]." - deconstruct(FALSE) - else - ..() +/obj/item/clothing + name = "clothing" + resistance_flags = FLAMMABLE + obj_integrity = 200 + max_integrity = 200 + integrity_failure = 80 + var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var + var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS + var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect + var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets + var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down + var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv + var/visor_flags_cover = 0 //same as above, but for flags_cover +//what to toggle when toggled with weldingvisortoggle() + var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW + lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' + var/alt_desc = null + var/toggle_message = null + var/alt_toggle_message = null + var/active_sound = null + var/toggle_cooldown = null + var/cooldown = 0 + var/obj/item/device/flashlight/F = null + var/can_flashlight = 0 + var/gang //Is this a gang outfit? + var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? + + //Var modification - PLEASE be careful with this I know who you are and where you live + var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts" + var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped() + + var/obj/item/weapon/storage/internal/pocket/pockets = null + + //These allow head/mask items to dynamically alter the user's hair + // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi + // for a state matching hair_state+dynamic_hair_suffix + // THESE OVERRIDE THE HIDEHAIR FLAGS + var/dynamic_hair_suffix = ""//head > mask for head hair + var/dynamic_fhair_suffix = ""//mask > head for facial hair + +/obj/item/clothing/New() + ..() + if(ispath(pockets)) + pockets = new pockets(src) + +/obj/item/clothing/MouseDrop(atom/over_object) + var/mob/M = usr + + if(pockets && over_object == M) + return pockets.MouseDrop(over_object) + + if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech + return + + if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand)) + var/obj/screen/inventory/hand/H = over_object + if(M.putItemFromInventoryInHandIfPossible(src, H.held_index)) + add_fingerprint(usr) + +/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) + if(pockets) + pockets.close_all() + return ..() + +/obj/item/clothing/attack_hand(mob/user) + if(pockets && pockets.priority && ismob(loc)) + //If we already have the pockets open, close them. + if (user.s_active == pockets) + pockets.close(user) + //Close whatever the user has open and show them the pockets. + else + if (user.s_active) + user.s_active.close(user) + pockets.orient2hud(user) + pockets.show_to(user) + else + return ..() + +/obj/item/clothing/attackby(obj/item/W, mob/user, params) + if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth)) + var/obj/item/stack/sheet/cloth/C = W + C.use(1) + update_clothes_damaged_state(FALSE) + obj_integrity = max_integrity + to_chat(user, "You fix the damage on [src] with [C].") + return 1 + if(pockets) + var/i = pockets.attackby(W, user, params) + if(i) + return i + return ..() + +/obj/item/clothing/AltClick(mob/user) + if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated()) + var/obj/item/I = pockets.contents[1] + if(!I) + return + pockets.remove_from_storage(I, get_turf(src)) + + if(!user.put_in_hands(I)) + to_chat(user, "You fumble for [I] and it falls on the floor.") + return 1 + user.visible_message("[user] draws [I] from [src]!", "You draw [I] from [src].") + return 1 + else + return ..() + + +/obj/item/clothing/Destroy() + if(isliving(loc)) + dropped(loc) + if(pockets) + qdel(pockets) + pockets = null + user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up + return ..() + + +/obj/item/clothing/dropped(mob/user) + ..() + if(!istype(user)) + return + if(user_vars_remembered && user_vars_remembered.len) + for(var/variable in user_vars_remembered) + if(variable in user.vars) + if(user.vars[variable] == user_vars_to_edit[variable]) //Is it still what we set it to? (if not we best not change it) + user.vars[variable] = user_vars_remembered[variable] + user_vars_remembered = list() + + +/obj/item/clothing/equipped(mob/user, slot) + ..() + + if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? + for(var/variable in user_vars_to_edit) + if(variable in user.vars) + user_vars_remembered[variable] = user.vars[variable] + user.vars[variable] = user_vars_to_edit[variable] + + +/obj/item/clothing/examine(mob/user) + ..() + if(damaged_clothes) + to_chat(user, "It looks damaged!") + if(pockets) + var/list/how_cool_are_your_threads = list("") + if(pockets.priority) + how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" + else + how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" + how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" + how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" + if(pockets.quickdraw) + how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" + if(pockets.silent) + how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" + how_cool_are_your_threads += "" + to_chat(user, how_cool_are_your_threads.Join()) + +/obj/item/clothing/obj_break(damage_flag) + if(!damaged_clothes) + update_clothes_damaged_state(TRUE) + if(ismob(loc)) //It's not important enough to warrant a message if nobody's wearing it + var/mob/M = loc + M.visible_message("[M]'s [name] starts to fall apart!", "Your [name] starts to fall apart!") + +/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) + var/index = "\ref[initial(icon)]-[initial(icon_state)]" + var/static/list/damaged_clothes_icons = list() + if(damaging) + damaged_clothes = 1 + var/icon/damaged_clothes_icon = damaged_clothes_icons[index] + if(!damaged_clothes_icon) + damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object + damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant + damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) + damaged_clothes_icons[index] = damaged_clothes_icon + add_overlay(damaged_clothes_icon, 1) + else + damaged_clothes = 0 + cut_overlay(damaged_clothes_icons[index], TRUE) + + +//Ears: currently only used for headsets and earmuffs +/obj/item/clothing/ears + name = "ears" + w_class = WEIGHT_CLASS_TINY + throwforce = 0 + slot_flags = SLOT_EARS + resistance_flags = 0 + +/obj/item/clothing/ears/earmuffs + name = "earmuffs" + desc = "Protects your hearing from loud noises, and quiet ones as well." + icon_state = "earmuffs" + item_state = "earmuffs" + strip_delay = 15 + put_on_delay = 25 + resistance_flags = FLAMMABLE + +/obj/item/clothing/ears/earmuffs/Initialize(mapload) + ..() + SET_SECONDARY_FLAG(src, BANG_PROTECT) + SET_SECONDARY_FLAG(src, HEALS_EARS) + +//Glasses +/obj/item/clothing/glasses + name = "glasses" + icon = 'icons/obj/clothing/glasses.dmi' + w_class = WEIGHT_CLASS_SMALL + flags_cover = GLASSESCOVERSEYES + slot_flags = SLOT_EYES + var/vision_flags = 0 + var/darkness_view = 2//Base human is 2 + var/invis_view = SEE_INVISIBLE_LIVING + var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis + var/lighting_alpha + var/emagged = 0 + var/list/icon/current = list() //the current hud icons + var/vision_correction = 0 //does wearing these glasses correct some of our vision defects? + strip_delay = 20 + put_on_delay = 25 + resistance_flags = 0 +/* +SEE_SELF // can see self, no matter what +SEE_MOBS // can see all mobs, no matter what +SEE_OBJS // can see all objs, no matter what +SEE_TURFS // can see all turfs (and areas), no matter what +SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are + // in a lit area (via pixel_x,y or smooth movement), can see those pixels +BLIND // can't see anything +*/ + + +//Gloves +/obj/item/clothing/gloves + name = "gloves" + gender = PLURAL //Carn: for grammarically correct text-parsing + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/clothing/gloves.dmi' + siemens_coefficient = 0.50 + body_parts_covered = HANDS + slot_flags = SLOT_GLOVES + attack_verb = list("challenged") + var/transfer_prints = FALSE + strip_delay = 20 + put_on_delay = 40 + + +/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") + +/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_gloves() + +// Called just before an attack_hand(), in mob/UnarmedAttack() +/obj/item/clothing/gloves/proc/Touch(atom/A, proximity) + return 0 // return 1 to cancel attack_hand() + +//Head +/obj/item/clothing/head + name = "head" + icon = 'icons/obj/clothing/hats.dmi' + body_parts_covered = HEAD + slot_flags = SLOT_HEAD + var/blockTracking = 0 //For AI tracking + var/can_toggle = null + + +/obj/item/clothing/head/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") + +/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_head() + + +//Neck +/obj/item/clothing/neck + name = "necklace" + icon = 'icons/obj/clothing/neck.dmi' + body_parts_covered = NECK + slot_flags = SLOT_NECK + strip_delay = 40 + put_on_delay = 40 + +/obj/item/clothing/neck/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(body_parts_covered & HEAD) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") + + +//Mask +/obj/item/clothing/mask + name = "mask" + icon = 'icons/obj/clothing/masks.dmi' + body_parts_covered = HEAD + slot_flags = SLOT_MASK + strip_delay = 40 + put_on_delay = 40 + var/mask_adjusted = 0 + var/adjusted_flags = null + + +/obj/item/clothing/mask/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(body_parts_covered & HEAD) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "maskblood") + +/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_wear_mask() + + +//Override this to modify speech like luchador masks. +/obj/item/clothing/mask/proc/speechModification(message) + return message + +//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption +/obj/item/clothing/mask/proc/adjustmask(mob/living/user) + if(user && user.incapacitated()) + return + mask_adjusted = !mask_adjusted + if(!mask_adjusted) + src.icon_state = initial(icon_state) + gas_transfer_coefficient = initial(gas_transfer_coefficient) + permeability_coefficient = initial(permeability_coefficient) + flags |= visor_flags + flags_inv |= visor_flags_inv + flags_cover |= visor_flags_cover + to_chat(user, "You push \the [src] back into place.") + slot_flags = initial(slot_flags) + else + icon_state += "_up" + to_chat(user, "You push \the [src] out of the way.") + gas_transfer_coefficient = null + permeability_coefficient = null + flags &= ~visor_flags + flags_inv &= ~visor_flags_inv + flags_cover &= ~visor_flags_cover + if(adjusted_flags) + slot_flags = adjusted_flags + if(user) + user.wear_mask_update(src, toggle_off = mask_adjusted) + user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off. + + + + +//Shoes +/obj/item/clothing/shoes + name = "shoes" + icon = 'icons/obj/clothing/shoes.dmi' + desc = "Comfortable-looking shoes." + gender = PLURAL //Carn: for grammarically correct text-parsing + var/chained = 0 + + body_parts_covered = FEET + slot_flags = SLOT_FEET + + permeability_coefficient = 0.50 + slowdown = SHOES_SLOWDOWN + var/blood_state = BLOOD_STATE_NOT_BLOODY + var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + var/offset = 0 + var/equipped_before_drop = FALSE + +/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + var/bloody = 0 + if(blood_DNA) + bloody = 1 + else + bloody = bloody_shoes[BLOOD_STATE_HUMAN] + + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") + if(bloody) + . += mutable_appearance('icons/effects/blood.dmi', "shoeblood") + +/obj/item/clothing/shoes/equipped(mob/user, slot) + . = ..() + if(offset && slot_flags & slotdefine2slotbit(slot)) + user.pixel_y += offset + worn_y_dimension -= (offset * 2) + user.update_inv_shoes() + equipped_before_drop = TRUE + +/obj/item/clothing/shoes/proc/restore_offsets(mob/user) + equipped_before_drop = FALSE + user.pixel_y -= offset + worn_y_dimension = world.icon_size + +/obj/item/clothing/shoes/dropped(mob/user) + if(offset && equipped_before_drop) + restore_offsets(user) + . = ..() + +/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + +/obj/item/clothing/shoes/clean_blood() + ..() + bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + blood_state = BLOOD_STATE_NOT_BLOODY + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + +/obj/item/proc/negates_gravity() + return 0 + +//Suit +/obj/item/clothing/suit + icon = 'icons/obj/clothing/suits.dmi' + name = "suit" + var/fire_resist = T0C+100 + allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + slot_flags = SLOT_OCLOTHING + var/blood_overlay_type = "suit" + var/togglename = null + + +/obj/item/clothing/suit/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") + +/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_wear_suit() + +//Spacesuit +//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. +// Meaning the the suit is defined directly after the corrisponding helmet. Just like below! +/obj/item/clothing/head/helmet/space + name = "space helmet" + icon_state = "spaceold" + desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays." + flags = STOPSPRESSUREDMAGE | THICKMATERIAL + item_state = "spaceold" + permeability_coefficient = 0.01 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT + flash_protect = 2 + strip_delay = 50 + put_on_delay = 50 + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + resistance_flags = 0 + +/obj/item/clothing/suit/space + name = "space suit" + desc = "A suit that protects against low pressure environments. Has a big 13 on the back." + icon_state = "spaceold" + item_state = "s_suit" + w_class = WEIGHT_CLASS_BULKY + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.02 + flags = STOPSPRESSUREDMAGE | THICKMATERIAL + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals) + slowdown = 1 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) + flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT + cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS + min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + strip_delay = 80 + put_on_delay = 80 + resistance_flags = 0 + +//Under clothing + +/obj/item/clothing/under + icon = 'icons/obj/clothing/uniforms.dmi' + name = "under" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + permeability_coefficient = 0.90 + slot_flags = SLOT_ICLOTHING + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women + var/has_sensor = HAS_SENSORS // For the crew computer + var/random_sensor = 1 + var/sensor_mode = NO_SENSORS + var/can_adjust = 1 + var/adjusted = NORMAL_STYLE + var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only + var/obj/item/clothing/tie/hastie = null + var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. + +/obj/item/clothing/under/worn_overlays(isinhands = FALSE) + . = list() + + if(!isinhands) + + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") + if(hastie) + var/tie_color = hastie.item_color + if(!tie_color) + tie_color = hastie.icon_state + var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]") + tie.alpha = hastie.alpha + tie.color = hastie.color + . += tie + +/obj/item/clothing/under/attackby(obj/item/W, mob/user, params) + if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + C.use(1) + has_sensor = HAS_SENSORS + to_chat(user,"You repair the suit sensors on [src] with [C].") + return 1 + +/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_w_uniform() + if(has_sensor > NO_SENSORS) + has_sensor = BROKEN_SENSORS + +/obj/item/clothing/under/New() + if(random_sensor) + //make the sensor mode favor higher levels, except coords. + sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS) + adjusted = NORMAL_STYLE + ..() + +/obj/item/clothing/under/equipped(mob/user, slot) + ..() + if(adjusted) + adjusted = NORMAL_STYLE + fitted = initial(fitted) + if(!alt_covers_chest) + body_parts_covered |= CHEST + + if(mutantrace_variation && ishuman(user)) + var/mob/living/carbon/human/H = user + if(DIGITIGRADE in H.dna.species.species_traits) + adjusted = DIGITIGRADE_STYLE + H.update_inv_w_uniform() + + if(hastie && slot != slot_hands) + hastie.on_uniform_equip(src, user) + +/obj/item/clothing/under/dropped(mob/user) + if(hastie) + hastie.on_uniform_dropped(src, user) + ..() + +/obj/item/clothing/under/attackby(obj/item/I, mob/user, params) + if(!attachTie(I, user)) + ..() + +/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1) + if(istype(I, /obj/item/clothing/tie)) + var/obj/item/clothing/tie/T = I + if(hastie) + if(user) + to_chat(user, "[src] already has an accessory.") + return 0 + else + if(user && !user.drop_item()) + return + if(!T.attach(src, user)) + return + + if(user && notifyAttach) + to_chat(user, "You attach [I] to [src].") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.update_inv_w_uniform() + + return 1 + +/obj/item/clothing/under/proc/removetie(mob/user) + if(!isliving(user)) + return + if(!can_use(user)) + return + + if(hastie) + var/obj/item/clothing/tie/T = hastie + hastie.detach(src, user) + if(user.put_in_hands(T)) + to_chat(user, "You detach [T] from [src].") + else + to_chat(user, "You detach [T] from [src] and it falls on the floor.") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.update_inv_w_uniform() + + +/obj/item/clothing/under/examine(mob/user) + ..() + if(can_adjust) + if(adjusted == ALT_STYLE) + to_chat(user, "Alt-click on [src] to wear it normally.") + else + to_chat(user, "Alt-click on [src] to wear it casually.") + if (has_sensor == BROKEN_SENSORS) + to_chat(user, "Its sensors appear to be shorted out.") + else if(has_sensor > NO_SENSORS) + switch(sensor_mode) + if(SENSOR_OFF) + to_chat(user, "Its sensors appear to be disabled.") + if(SENSOR_LIVING) + to_chat(user, "Its binary life sensors appear to be enabled.") + if(SENSOR_VITALS) + to_chat(user, "Its vital tracker appears to be enabled.") + if(SENSOR_COORDS) + to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + if(hastie) + to_chat(user, "\A [hastie] is attached to it.") + +/proc/generate_female_clothing(index,t_color,icon,type) + var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color) + var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") + female_clothing_icon.Blend(female_s, ICON_MULTIPLY) + female_clothing_icon = fcopy_rsc(female_clothing_icon) + GLOB.female_clothing_icons[index] = female_clothing_icon + +/obj/item/clothing/under/verb/toggle() + set name = "Adjust Suit Sensors" + set category = "Object" + set src in usr + var/mob/M = usr + if (istype(M, /mob/dead/)) + return + if (!can_use(M)) + return + if(src.has_sensor == LOCKED_SENSORS) + to_chat(usr, "The controls are locked.") + return 0 + if(src.has_sensor == BROKEN_SENSORS) + to_chat(usr, "The sensors have shorted out!") + return 0 + if(src.has_sensor <= NO_SENSORS) + to_chat(usr, "This suit does not have any sensors.") + return 0 + + var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon") + var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes + if(get_dist(usr, src) > 1) + to_chat(usr, "You have moved too far away!") + return + sensor_mode = modes.Find(switchMode) - 1 + + if (src.loc == usr) + switch(sensor_mode) + if(0) + to_chat(usr, "You disable your suit's remote sensing equipment.") + if(1) + to_chat(usr, "Your suit will now only report whether you are alive or dead.") + if(2) + to_chat(usr, "Your suit will now only report your exact vital lifesigns.") + if(3) + to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.") + + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(H.w_uniform == src) + H.update_suit_sensors() + + ..() + +/obj/item/clothing/under/AltClick(mob/user) + if(..()) + return 1 + + if(!user.canUseTopic(src, be_close=TRUE)) + to_chat(user, "You can't do that right now!") + return + else + if(hastie) + removetie(user) + else + rolldown() + +/obj/item/clothing/under/verb/jumpsuit_adjust() + set name = "Adjust Jumpsuit Style" + set category = null + set src in usr + rolldown() + +/obj/item/clothing/under/proc/rolldown() + if(!can_use(usr)) + return + if(!can_adjust) + to_chat(usr, "You cannot wear this suit any differently!") + return + if(toggle_jumpsuit_adjust()) + to_chat(usr, "You adjust the suit to wear it more casually.") + else + to_chat(usr, "You adjust the suit back to normal.") + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + H.update_inv_w_uniform() + H.update_body() + +/obj/item/clothing/under/proc/toggle_jumpsuit_adjust() + if(adjusted == DIGITIGRADE_STYLE) + return + adjusted = !adjusted + if(adjusted) + if(fitted != FEMALE_UNIFORM_TOP) + fitted = NO_FEMALE_UNIFORM + if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted + body_parts_covered &= ~CHEST + else + fitted = initial(fitted) + if(!alt_covers_chest) + body_parts_covered |= CHEST + return adjusted + +/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. + if(!can_use(user)) + return FALSE + + visor_toggling() + + to_chat(user, "You adjust \the [src] [up ? "up" : "down"].") + + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.head_update(src, forced = 1) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + return TRUE + +/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags + up = !up + flags ^= visor_flags + flags_inv ^= visor_flags_inv + flags_cover ^= initial(flags_cover) + icon_state = "[initial(icon_state)][up ? "up" : ""]" + if(visor_vars_to_toggle & VISOR_FLASHPROTECT) + flash_protect ^= initial(flash_protect) + if(visor_vars_to_toggle & VISOR_TINT) + tint ^= initial(tint) + + +/obj/item/clothing/proc/can_use(mob/user) + if(user && ismob(user)) + if(!user.incapacitated()) + return 1 + return 0 + + +/obj/item/clothing/obj_destruction(damage_flag) + if(damage_flag == "bomb" || damage_flag == "melee") + var/turf/T = get_turf(src) + spawn(1) //so the shred survives potential turf change from the explosion. + var/obj/effect/decal/cleanable/shreds/Shreds = new(T) + Shreds.desc = "The sad remains of what used to be [name]." + deconstruct(FALSE) + else + ..() diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index 6720663fb7..6a9ac41a0d 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -18,6 +18,7 @@ vision_flags = 0 darkness_view = 2 invis_view = SEE_INVISIBLE_LIVING + lighting_alpha = null to_chat(user, "You toggle the goggles' scanning mode to \[T-Ray].") else STOP_PROCESSING(SSobj, src) diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm new file mode 100644 index 0000000000..d562802db1 --- /dev/null +++ b/code/modules/clothing/head/cit_hats.dm @@ -0,0 +1,5 @@ +/obj/item/clothing/head/hunter + name = "hunter hat" + desc = "It's a flimsy looking hat." + icon_state = "hunter" + icon = 'icons/obj/clothing/cit_hats.dmi' \ No newline at end of file diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 61171ccf59..8ec8d00c77 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -1,147 +1,147 @@ - -//Hat Station 13 - -/obj/item/clothing/head/collectable - name = "collectable hat" - desc = "A rare collectable hat." - -/obj/item/clothing/head/collectable/petehat - name = "ultra rare Pete's hat!" - desc = "It smells faintly of plasma." - icon_state = "petehat" - -/obj/item/clothing/head/collectable/slime - name = "collectable slime cap!" - desc = "It just latches right in place!" - icon_state = "slime" - -/obj/item/clothing/head/collectable/xenom - name = "collectable xenomorph helmet!" - desc = "Hiss hiss hiss!" - icon_state = "xenom" - -/obj/item/clothing/head/collectable/chef - name = "collectable chef's hat" - desc = "A rare chef's hat meant for hat collectors!" - icon_state = "chef" - item_state = "chef" - - dog_fashion = /datum/dog_fashion/head/chef - -/obj/item/clothing/head/collectable/paper - name = "collectable paper hat" - desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from water, fire, and Librarians." - icon_state = "paper" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/collectable/tophat - name = "collectable top hat" - desc = "A top hat worn by only the most prestigious hat collectors." - icon_state = "tophat" - item_state = "that" - -/obj/item/clothing/head/collectable/captain - name = "collectable captain's hat" - desc = "A collectable hat that'll make you look just like a real comdom!" - icon_state = "captain" - item_state = "caphat" - - dog_fashion = /datum/dog_fashion/head/captain - -/obj/item/clothing/head/collectable/police - name = "collectable police officer's hat" - desc = "A collectable police officer's Hat. This hat emphasizes that you are THE LAW." - icon_state = "policehelm" - - dog_fashion = /datum/dog_fashion/head/warden - -/obj/item/clothing/head/collectable/beret - name = "collectable beret" - desc = "A collectable red beret. It smells faintly of garlic." - icon_state = "beret" - - dog_fashion = /datum/dog_fashion/head/beret - -/obj/item/clothing/head/collectable/welding - name = "collectable welding helmet" - desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!" - icon_state = "welding" - item_state = "welding" - resistance_flags = 0 - -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "Just like a real brain slug!" - icon_state = "headslime" - item_state = "headslime" - -/obj/item/clothing/head/collectable/flatcap - name = "collectable flat cap" - desc = "A collectible farmer's flat cap!" - icon_state = "flat_cap" - item_state = "detective" - -/obj/item/clothing/head/collectable/pirate - name = "collectable pirate hat" - desc = "You'd make a great Dread Syndie Roberts!" - icon_state = "pirate" - item_state = "pirate" - - dog_fashion = /datum/dog_fashion/head/pirate - -/obj/item/clothing/head/collectable/kitty - name = "collectable kitty ears" - desc = "The fur feels... a bit too realistic." - icon_state = "kitty" - item_state = "kitty" - - dog_fashion = /datum/dog_fashion/head/kitty - -/obj/item/clothing/head/collectable/rabbitears - name = "collectable rabbit ears" - desc = "Not as lucky as the feet!" - icon_state = "bunny" - item_state = "bunny" - - dog_fashion = /datum/dog_fashion/head/rabbit - -/obj/item/clothing/head/collectable/wizard - name = "collectable wizard's hat" - desc = "NOTE: Any magical powers gained from wearing this hat are purely coincidental." - icon_state = "wizard" - - dog_fashion = /datum/dog_fashion/head/blue_wizard - -/obj/item/clothing/head/collectable/hardhat - name = "collectable hard hat" - desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!" - icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/collectable/HoS - name = "collectable HoS hat" - desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" - icon_state = "hoscap" - -/obj/item/clothing/head/collectable/HoP - name = "collectable HoP hat" - desc = "It's your turn to demand excessive paperwork, signatures, stamps, and hire more clowns! Papers, please!" - icon_state = "hopcap" - dog_fashion = /datum/dog_fashion/head/hop - -/obj/item/clothing/head/collectable/thunderdome - name = "collectable Thunderdome helmet" - desc = "Go Red! I mean Green! I mean Red! No Green!" - icon_state = "thunderdome" - item_state = "thunderdome" - resistance_flags = 0 - -/obj/item/clothing/head/collectable/swat - name = "collectable SWAT helmet" - desc = "That's not real blood. That's red paint." //Reference to the actual description - icon_state = "swat" - item_state = "swat" - resistance_flags = 0 + +//Hat Station 13 + +/obj/item/clothing/head/collectable + name = "collectable hat" + desc = "A rare collectable hat." + +/obj/item/clothing/head/collectable/petehat + name = "ultra rare Pete's hat!" + desc = "It smells faintly of plasma." + icon_state = "petehat" + +/obj/item/clothing/head/collectable/slime + name = "collectable slime cap!" + desc = "It just latches right in place!" + icon_state = "slime" + +/obj/item/clothing/head/collectable/xenom + name = "collectable xenomorph helmet!" + desc = "Hiss hiss hiss!" + icon_state = "xenom" + +/obj/item/clothing/head/collectable/chef + name = "collectable chef's hat" + desc = "A rare chef's hat meant for hat collectors!" + icon_state = "chef" + item_state = "chef" + + dog_fashion = /datum/dog_fashion/head/chef + +/obj/item/clothing/head/collectable/paper + name = "collectable paper hat" + desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from water, fire, and Curators." + icon_state = "paper" + + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/collectable/tophat + name = "collectable top hat" + desc = "A top hat worn by only the most prestigious hat collectors." + icon_state = "tophat" + item_state = "that" + +/obj/item/clothing/head/collectable/captain + name = "collectable captain's hat" + desc = "A collectable hat that'll make you look just like a real comdom!" + icon_state = "captain" + item_state = "caphat" + + dog_fashion = /datum/dog_fashion/head/captain + +/obj/item/clothing/head/collectable/police + name = "collectable police officer's hat" + desc = "A collectable police officer's Hat. This hat emphasizes that you are THE LAW." + icon_state = "policehelm" + + dog_fashion = /datum/dog_fashion/head/warden + +/obj/item/clothing/head/collectable/beret + name = "collectable beret" + desc = "A collectable red beret. It smells faintly of garlic." + icon_state = "beret" + + dog_fashion = /datum/dog_fashion/head/beret + +/obj/item/clothing/head/collectable/welding + name = "collectable welding helmet" + desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!" + icon_state = "welding" + item_state = "welding" + resistance_flags = 0 + +/obj/item/clothing/head/collectable/slime + name = "collectable slime hat" + desc = "Just like a real brain slug!" + icon_state = "headslime" + item_state = "headslime" + +/obj/item/clothing/head/collectable/flatcap + name = "collectable flat cap" + desc = "A collectible farmer's flat cap!" + icon_state = "flat_cap" + item_state = "detective" + +/obj/item/clothing/head/collectable/pirate + name = "collectable pirate hat" + desc = "You'd make a great Dread Syndie Roberts!" + icon_state = "pirate" + item_state = "pirate" + + dog_fashion = /datum/dog_fashion/head/pirate + +/obj/item/clothing/head/collectable/kitty + name = "collectable kitty ears" + desc = "The fur feels... a bit too realistic." + icon_state = "kitty" + item_state = "kitty" + + dog_fashion = /datum/dog_fashion/head/kitty + +/obj/item/clothing/head/collectable/rabbitears + name = "collectable rabbit ears" + desc = "Not as lucky as the feet!" + icon_state = "bunny" + item_state = "bunny" + + dog_fashion = /datum/dog_fashion/head/rabbit + +/obj/item/clothing/head/collectable/wizard + name = "collectable wizard's hat" + desc = "NOTE: Any magical powers gained from wearing this hat are purely coincidental." + icon_state = "wizard" + + dog_fashion = /datum/dog_fashion/head/blue_wizard + +/obj/item/clothing/head/collectable/hardhat + name = "collectable hard hat" + desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!" + icon_state = "hardhat0_yellow" + item_state = "hardhat0_yellow" + + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/collectable/HoS + name = "collectable HoS hat" + desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" + icon_state = "hoscap" + +/obj/item/clothing/head/collectable/HoP + name = "collectable HoP hat" + desc = "It's your turn to demand excessive paperwork, signatures, stamps, and hire more clowns! Papers, please!" + icon_state = "hopcap" + dog_fashion = /datum/dog_fashion/head/hop + +/obj/item/clothing/head/collectable/thunderdome + name = "collectable Thunderdome helmet" + desc = "Go Red! I mean Green! I mean Red! No Green!" + icon_state = "thunderdome" + item_state = "thunderdome" + resistance_flags = 0 + +/obj/item/clothing/head/collectable/swat + name = "collectable SWAT helmet" + desc = "That's not real blood. That's red paint." //Reference to the actual description + icon_state = "swat" + item_state = "swat" + resistance_flags = 0 diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 6f8e365bd9..083332c3bd 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -1,161 +1,162 @@ - -//Chef -/obj/item/clothing/head/chefhat - name = "chef's hat" - item_state = "chef" - icon_state = "chef" - desc = "The commander in chef's head wear." - strip_delay = 10 - put_on_delay = 10 - dog_fashion = /datum/dog_fashion/head/chef - -/obj/item/clothing/head/chefhat/suicide_act(mob/user) - user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to become a chef.") - user.say("Bork Bork Bork!") - sleep(20) - user.visible_message("[user] climbs into an imaginary oven!") - user.say("BOOORK!") - playsound(user, 'sound/machines/ding.ogg', 50, 1) - return(FIRELOSS) - -//Captain -/obj/item/clothing/head/caphat - name = "captain's hat" - desc = "It's good being the king." - icon_state = "captain" - item_state = "that" - flags_inv = 0 - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) - strip_delay = 60 - dog_fashion = /datum/dog_fashion/head/captain - -//Captain: This is no longer space-worthy -/obj/item/clothing/head/caphat/parade - name = "captain's parade cap" - desc = "Worn only by Captains with an abundance of class." - icon_state = "capcap" - - dog_fashion = null - - -//Head of Personnel -/obj/item/clothing/head/hopcap - name = "head of personnel's cap" - icon_state = "hopcap" - desc = "The symbol of true bureaucratic micromanagement." - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) - dog_fashion = /datum/dog_fashion/head/hop - -//Chaplain -/obj/item/clothing/head/nun_hood - name = "nun hood" - desc = "Maximum piety in this star system." - icon_state = "nun_hood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/cage - name = "cage" - desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is." - alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' - icon_state = "cage" - item_state = "cage" - worn_x_dimension = 64 - worn_y_dimension = 64 - - -/obj/item/clothing/head/witchunter_hat - name = "witchunter hat" - desc = "This hat saw much use back in the day." - icon_state = "witchhunterhat" - item_state = "witchhunterhat" - flags_cover = HEADCOVERSEYES - -//Detective -/obj/item/clothing/head/det_hat - name = "detective's fedora" - desc = "There's only one man who can sniff out the dirty stench of crime, and he's likely wearing this hat." - icon_state = "detective" - armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) - var/candy_cooldown = 0 - pockets = /obj/item/weapon/storage/internal/pocket/small/detective - dog_fashion = /datum/dog_fashion/head/detective - -/obj/item/clothing/head/det_hat/AltClick() - ..() - if(ismob(loc)) - var/mob/M = loc - if(candy_cooldown < world.time) - var/obj/item/weapon/reagent_containers/food/snacks/candy_corn/CC = new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(src) - M.put_in_hands(CC) - to_chat(M, "You slip a candy corn from your hat.") - candy_cooldown = world.time+1200 - else - to_chat(M, "You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.") - - -//Mime -/obj/item/clothing/head/beret - name = "beret" - desc = "A beret, a mime's favorite headwear." - icon_state = "beret" - - dog_fashion = /datum/dog_fashion/head/beret - -/obj/item/clothing/head/beret/highlander - desc = "That was white fabric. Was." - flags = NODROP - dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES - -//Security - -/obj/item/clothing/head/HoS - name = "head of security cap" - desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." - icon_state = "hoscap" - armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 60) - strip_delay = 80 - -/obj/item/clothing/head/HoS/beret - name = "head of security beret" - desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." - icon_state = "hosberetblack" - -/obj/item/clothing/head/warden - name = "warden's police hat" - desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." - icon_state = "policehelm" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 60) - strip_delay = 60 - dog_fashion = /datum/dog_fashion/head/warden - -/obj/item/clothing/head/beret/sec - name = "security beret" - desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." - icon_state = "beret_badge" - armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) - strip_delay = 60 - dog_fashion = null - -/obj/item/clothing/head/beret/sec/navyhos - name = "head of security's beret" - desc = "A special beret with the Head of Security's insignia emblazoned on it. A symbol of excellence, a badge of courage, a mark of distinction." - icon_state = "hosberet" - -/obj/item/clothing/head/beret/sec/navywarden - name = "warden's beret" - desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." - icon_state = "wardenberet" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 50) - strip_delay = 60 - -/obj/item/clothing/head/beret/sec/navyofficer - desc = "A special beret with the security insignia emblazoned on it. For officers with class." - icon_state = "officerberet" - -//Curator -/obj/item/clothing/head/curator - name = "treasure hunter's fedora" - desc = "You got red text today kid, but it doesn't mean you have to like it." - icon_state = "curator" - armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) \ No newline at end of file + +//Chef +/obj/item/clothing/head/chefhat + name = "chef's hat" + item_state = "chef" + icon_state = "chef" + desc = "The commander in chef's head wear." + strip_delay = 10 + put_on_delay = 10 + dog_fashion = /datum/dog_fashion/head/chef + +/obj/item/clothing/head/chefhat/suicide_act(mob/user) + user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to become a chef.") + user.say("Bork Bork Bork!") + sleep(20) + user.visible_message("[user] climbs into an imaginary oven!") + user.say("BOOORK!") + playsound(user, 'sound/machines/ding.ogg', 50, 1) + return(FIRELOSS) + +//Captain +/obj/item/clothing/head/caphat + name = "captain's hat" + desc = "It's good being the king." + icon_state = "captain" + item_state = "that" + flags_inv = 0 + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + strip_delay = 60 + dog_fashion = /datum/dog_fashion/head/captain + +//Captain: This is no longer space-worthy +/obj/item/clothing/head/caphat/parade + name = "captain's parade cap" + desc = "Worn only by Captains with an abundance of class." + icon_state = "capcap" + + dog_fashion = null + + +//Head of Personnel +/obj/item/clothing/head/hopcap + name = "head of personnel's cap" + icon_state = "hopcap" + desc = "The symbol of true bureaucratic micromanagement." + armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + dog_fashion = /datum/dog_fashion/head/hop + +//Chaplain +/obj/item/clothing/head/nun_hood + name = "nun hood" + desc = "Maximum piety in this star system." + icon_state = "nun_hood" + flags_inv = HIDEHAIR + flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/cage + name = "cage" + desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is." + alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' + icon_state = "cage" + item_state = "cage" + worn_x_dimension = 64 + worn_y_dimension = 64 + + +/obj/item/clothing/head/witchunter_hat + name = "witchunter hat" + desc = "This hat saw much use back in the day." + icon_state = "witchhunterhat" + item_state = "witchhunterhat" + flags_cover = HEADCOVERSEYES + +//Detective +/obj/item/clothing/head/det_hat + name = "detective's fedora" + desc = "There's only one man who can sniff out the dirty stench of crime, and he's likely wearing this hat." + icon_state = "detective" + armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) + var/candy_cooldown = 0 + pockets = /obj/item/weapon/storage/internal/pocket/small/detective + dog_fashion = /datum/dog_fashion/head/detective + +/obj/item/clothing/head/det_hat/AltClick() + ..() + if(ismob(loc)) + var/mob/M = loc + if(candy_cooldown < world.time) + var/obj/item/weapon/reagent_containers/food/snacks/candy_corn/CC = new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(src) + M.put_in_hands(CC) + to_chat(M, "You slip a candy corn from your hat.") + candy_cooldown = world.time+1200 + else + to_chat(M, "You just took a candy corn! You should wait a couple minutes, lest you burn through your stash.") + + +//Mime +/obj/item/clothing/head/beret + name = "beret" + desc = "A beret, a mime's favorite headwear." + icon_state = "beret" + + dog_fashion = /datum/dog_fashion/head/beret + +/obj/item/clothing/head/beret/highlander + desc = "That was white fabric. Was." + flags = NODROP + dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES + +//Security + +/obj/item/clothing/head/HoS + name = "head of security cap" + desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." + icon_state = "hoscap" + armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 60) + strip_delay = 80 + +/obj/item/clothing/head/HoS/beret + name = "head of security beret" + desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." + icon_state = "hosberetblack" + +/obj/item/clothing/head/warden + name = "warden's police hat" + desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." + icon_state = "policehelm" + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 60) + strip_delay = 60 + dog_fashion = /datum/dog_fashion/head/warden + +/obj/item/clothing/head/beret/sec + name = "security beret" + desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." + icon_state = "beret_badge" + armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) + strip_delay = 60 + dog_fashion = null + +/obj/item/clothing/head/beret/sec/navyhos + name = "head of security's beret" + desc = "A special beret with the Head of Security's insignia emblazoned on it. A symbol of excellence, a badge of courage, a mark of distinction." + icon_state = "hosberet" + +/obj/item/clothing/head/beret/sec/navywarden + name = "warden's beret" + desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." + icon_state = "wardenberet" + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 50) + strip_delay = 60 + +/obj/item/clothing/head/beret/sec/navyofficer + desc = "A special beret with the security insignia emblazoned on it. For officers with class." + icon_state = "officerberet" + +//Curator +/obj/item/clothing/head/curator + name = "treasure hunter's fedora" + desc = "You got red text today kid, but it doesn't mean you have to like it." + icon_state = "curator" + armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) + pockets = /obj/item/weapon/storage/internal/pocket/small \ No newline at end of file diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 944d3a624e..6344ef22d7 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -242,6 +242,15 @@ R.set_frequency(GLOB.CENTCOM_FREQ) R.freqlock = 1 +/datum/outfit/ghost_cultist + name = "Cultist Ghost" + + uniform = /obj/item/clothing/under/color/black/ghost + suit = /obj/item/clothing/suit/cultrobes/alt/ghost + shoes = /obj/item/clothing/shoes/cult/alt/ghost + head = /obj/item/clothing/head/culthood/alt/ghost + r_hand = /obj/item/weapon/melee/cultblade/ghost + /datum/outfit/wizard name = "Blue Wizard" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 25e09b9af7..6643920e01 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -142,6 +142,9 @@ name = "cultist boots" icon_state = "cultalt" +/obj/item/clothing/shoes/cult/alt/ghost + flags = NODROP|DROPDEL + /obj/item/clothing/shoes/cyborg name = "cyborg boots" desc = "Shoes for a cyborg costume." diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index 275ad542b5..b1c0bb325d 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -326,9 +326,6 @@ disable_flight(1) if(!suit) disable_flight(1) - if(!resync) - addtimer(CALLBACK(src, .proc/resync), 600) - resync = 1 if(!wearer) //Oh god our user fell off! disable_flight(1) if(!pressure && brake) @@ -340,12 +337,6 @@ stabilizer = FALSE usermessage("Warning: Sensor data is not being recieved from flight shoes. Stabilizers and airbrake modules OFFLINE!", 2) -//Resync the suit -/obj/item/device/flightpack/proc/resync() - resync = FALSE - suit.resync() - -//How fast should the wearer be? /obj/item/device/flightpack/proc/update_slowdown() if(!flight) suit.slowdown = slowdown_ground @@ -356,20 +347,11 @@ /obj/item/device/flightpack/process() if(!suit || (processing_mode == FLIGHTSUIT_PROCESSING_NONE)) return FALSE - update_slowdown() - update_icon() check_conditions() calculate_momentum_speed() momentum_drift() handle_boost() handle_damage() - handle_flight() - -/obj/item/device/flightpack/proc/handle_flight() - if(!flight) - return FALSE - if(wearer) - wearer.float(TRUE) /obj/item/device/flightpack/proc/handle_damage() if(crash_damage) @@ -424,7 +406,6 @@ if(boost_charge < boost_maxcharge) boost_charge = Clamp(boost_charge+boost_chargerate, 0, boost_maxcharge) - /obj/item/device/flightpack/proc/cycle_power() if(powersetting < powersetting_high) powersetting++ @@ -654,6 +635,8 @@ wearer.movement_type |= FLYING wearer.pass_flags |= flight_passflags usermessage("ENGAGING FLIGHT ENGINES.") + update_slowdown() + wearer.floating = TRUE wearer.visible_message("[wearer]'s flight engines activate as they lift into the air!") //I DONT HAVE SOUND EFFECTS YET playsound( flight = TRUE @@ -670,6 +653,8 @@ momentum_x = 0 momentum_y = 0 usermessage("DISENGAGING FLIGHT ENGINES.") + update_slowdown() + wearer.floating = FALSE wearer.visible_message("[wearer] drops to the ground as their flight engines cut out!") //NO SOUND YET playsound( ion_trail.stop() @@ -678,6 +663,9 @@ flight = FALSE if(suit.shoes) suit.shoes.toggle(FALSE) + if(isturf(wearer.loc)) + var/turf/T = wearer.loc + T.Entered(src) else if(override_safe) disable_flight(TRUE) @@ -749,11 +737,13 @@ wearer.visible_message("[wearer.name]'s flightpack engines flare in intensity as they are rocketed forward by the immense thrust!") boost = TRUE update_slowdown() + update_icon() /obj/item/device/flightpack/proc/deactivate_booster() usermessage("Boosters disengaged!") boost = FALSE update_slowdown() + update_icon() /obj/item/device/flightpack/proc/enable_airbrake() if(wearer) diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 22741f18f3..6774bf3f9e 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -1,188 +1,188 @@ -/* - * Job related - */ - -//Botanist -/obj/item/clothing/suit/apron - name = "apron" - desc = "A basic blue apron." - icon_state = "apron" - item_state = "apron" - blood_overlay_type = "armor" - body_parts_covered = CHEST|GROIN - allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants) - -//Captain -/obj/item/clothing/suit/captunic - name = "captain's parade tunic" - desc = "Worn by a Captain to show their class." - icon_state = "captunic" - item_state = "bio_suit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/internals/emergency_oxygen) - -//Chaplain -/obj/item/clothing/suit/hooded/chaplain_hoodie - name = "chaplain hoodie" - desc = "This suit says to you 'hush'!" - icon_state = "chaplain_hoodie" - item_state = "chaplain_hoodie" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood - -/obj/item/clothing/head/hooded/chaplain_hood - name = "chaplain hood" - desc = "For protecting your identity when immolating demons." - icon_state = "chaplain_hood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/suit/nun - name = "nun robe" - desc = "Maximum piety in this star system." - icon_state = "nun" - item_state = "nun" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) - -/obj/item/clothing/suit/studentuni - name = "student robe" - desc = "The uniform of a bygone institute of learning." - icon_state = "studentuni" - item_state = "studentuni" - body_parts_covered = ARMS|CHEST - allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) - -/obj/item/clothing/suit/witchhunter - name = "witchunter garb" - desc = "This worn outfit saw much use back in the day." - icon_state = "witchhunter" - item_state = "witchhunter" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) - -//Chef -/obj/item/clothing/suit/toggle/chef - name = "chef's apron" - desc = "An apron-jacket used by a high class chef." - icon_state = "chef" - item_state = "chef" - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = CHEST|GROIN|ARMS - allowed = list(/obj/item/weapon/kitchen) - togglename = "sleeves" - -//Cook -/obj/item/clothing/suit/apron/chef - name = "cook's apron" - desc = "A basic, dull, white chef's apron." - icon_state = "apronchef" - item_state = "apronchef" - blood_overlay_type = "armor" - body_parts_covered = CHEST|GROIN - allowed = list(/obj/item/weapon/kitchen) - -//Detective -/obj/item/clothing/suit/det_suit - name = "trenchcoat" - desc = "An 18th-century multi-purpose trenchcoat. Someone who wears this means serious business." - icon_state = "detective" - item_state = "det_suit" - blood_overlay_type = "coat" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/weapon/melee/classic_baton) - armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 45) - cold_protection = CHEST|GROIN|LEGS|ARMS - heat_protection = CHEST|GROIN|LEGS|ARMS - -/obj/item/clothing/suit/det_suit/grey - name = "noir trenchcoat" - desc = "A hard-boiled private investigator's grey trenchcoat." - icon_state = "greydet" - item_state = "greydet" - -//Engineering -/obj/item/clothing/suit/hazardvest - name = "hazard vest" - desc = "A high-visibility vest used in work zones." - icon_state = "hazard" - item_state = "hazard" - blood_overlay_type = "armor" - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,/obj/item/device/radio) - resistance_flags = 0 -//Lawyer -/obj/item/clothing/suit/toggle/lawyer - name = "blue suit jacket" - desc = "A snappy dress jacket." - icon_state = "suitjacket_blue" - item_state = "suitjacket_blue" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - togglename = "buttons" - -/obj/item/clothing/suit/toggle/lawyer/purple - name = "purple suit jacket" - desc = "A foppish dress jacket." - icon_state = "suitjacket_purp" - item_state = "suitjacket_purp" - -/obj/item/clothing/suit/toggle/lawyer/black - name = "black suit jacket" - desc = "A professional suit jacket." - icon_state = "suitjacket_black" - item_state = "ro_suit" - - -//Mime -/obj/item/clothing/suit/suspenders - name = "suspenders" - desc = "They suspend the illusion of the mime's play." - icon = 'icons/obj/clothing/belts.dmi' - icon_state = "suspenders" - blood_overlay_type = "armor" //it's the less thing that I can put here - -//Security -/obj/item/clothing/suit/security/officer - name = "security officer's jacket" - desc = "This jacket is for those special occasions when a security officer isn't required to wear their armor." - icon_state = "officerbluejacket" - item_state = "officerbluejacket" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/security/warden - name = "warden's jacket" - desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." - icon_state = "wardenbluejacket" - item_state = "wardenbluejacket" - body_parts_covered = CHEST|ARMS - -/obj/item/clothing/suit/security/hos - name = "head of security's jacket" - desc = "This piece of clothing was specifically designed for asserting superior authority." - icon_state = "hosbluejacket" - item_state = "hosbluejacket" - body_parts_covered = CHEST|ARMS - -//Surgeon -/obj/item/clothing/suit/apron/surgical - name = "surgical apron" - desc = "A sterile blue surgical apron." - icon_state = "surgical" - allowed = list(/obj/item/weapon/scalpel, /obj/item/weapon/surgical_drapes, /obj/item/weapon/cautery, /obj/item/weapon/hemostat, /obj/item/weapon/retractor) - -//Curator -/obj/item/clothing/suit/curator - name = "treasure hunter's coat" - desc = "Both fashionable and lightly armoured, this jacket is favoured by treasure hunters the galaxy over." - icon_state = "curator" - item_state = "curator" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen, /obj/item/weapon/melee/curator_whip) - armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 45) - cold_protection = CHEST|ARMS - heat_protection = CHEST|ARMS +/* + * Job related + */ + +//Botanist +/obj/item/clothing/suit/apron + name = "apron" + desc = "A basic blue apron." + icon_state = "apron" + item_state = "apron" + blood_overlay_type = "armor" + body_parts_covered = CHEST|GROIN + allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants) + +//Captain +/obj/item/clothing/suit/captunic + name = "captain's parade tunic" + desc = "Worn by a Captain to show their class." + icon_state = "captunic" + item_state = "bio_suit" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + flags_inv = HIDEJUMPSUIT + allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/internals/emergency_oxygen) + +//Chaplain +/obj/item/clothing/suit/hooded/chaplain_hoodie + name = "chaplain hoodie" + desc = "This suit says to you 'hush'!" + icon_state = "chaplain_hoodie" + item_state = "chaplain_hoodie" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) + hoodtype = /obj/item/clothing/head/hooded/chaplain_hood + +/obj/item/clothing/head/hooded/chaplain_hood + name = "chaplain hood" + desc = "For protecting your identity when immolating demons." + icon_state = "chaplain_hood" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + +/obj/item/clothing/suit/nun + name = "nun robe" + desc = "Maximum piety in this star system." + icon_state = "nun" + item_state = "nun" + body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS + flags_inv = HIDESHOES|HIDEJUMPSUIT + allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) + +/obj/item/clothing/suit/studentuni + name = "student robe" + desc = "The uniform of a bygone institute of learning." + icon_state = "studentuni" + item_state = "studentuni" + body_parts_covered = ARMS|CHEST + allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) + +/obj/item/clothing/suit/witchhunter + name = "witchunter garb" + desc = "This worn outfit saw much use back in the day." + icon_state = "witchhunter" + item_state = "witchhunter" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen) + +//Chef +/obj/item/clothing/suit/toggle/chef + name = "chef's apron" + desc = "An apron-jacket used by a high class chef." + icon_state = "chef" + item_state = "chef" + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.50 + body_parts_covered = CHEST|GROIN|ARMS + allowed = list(/obj/item/weapon/kitchen) + togglename = "sleeves" + +//Cook +/obj/item/clothing/suit/apron/chef + name = "cook's apron" + desc = "A basic, dull, white chef's apron." + icon_state = "apronchef" + item_state = "apronchef" + blood_overlay_type = "armor" + body_parts_covered = CHEST|GROIN + allowed = list(/obj/item/weapon/kitchen) + +//Detective +/obj/item/clothing/suit/det_suit + name = "trenchcoat" + desc = "An 18th-century multi-purpose trenchcoat. Someone who wears this means serious business." + icon_state = "detective" + item_state = "det_suit" + blood_overlay_type = "coat" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/ballistic,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/weapon/melee/classic_baton) + armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 45) + cold_protection = CHEST|GROIN|LEGS|ARMS + heat_protection = CHEST|GROIN|LEGS|ARMS + +/obj/item/clothing/suit/det_suit/grey + name = "noir trenchcoat" + desc = "A hard-boiled private investigator's grey trenchcoat." + icon_state = "greydet" + item_state = "greydet" + +//Engineering +/obj/item/clothing/suit/hazardvest + name = "hazard vest" + desc = "A high-visibility vest used in work zones." + icon_state = "hazard" + item_state = "hazard" + blood_overlay_type = "armor" + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,/obj/item/device/radio) + resistance_flags = 0 +//Lawyer +/obj/item/clothing/suit/toggle/lawyer + name = "blue suit jacket" + desc = "A snappy dress jacket." + icon_state = "suitjacket_blue" + item_state = "suitjacket_blue" + blood_overlay_type = "coat" + body_parts_covered = CHEST|ARMS + togglename = "buttons" + +/obj/item/clothing/suit/toggle/lawyer/purple + name = "purple suit jacket" + desc = "A foppish dress jacket." + icon_state = "suitjacket_purp" + item_state = "suitjacket_purp" + +/obj/item/clothing/suit/toggle/lawyer/black + name = "black suit jacket" + desc = "A professional suit jacket." + icon_state = "suitjacket_black" + item_state = "ro_suit" + + +//Mime +/obj/item/clothing/suit/suspenders + name = "suspenders" + desc = "They suspend the illusion of the mime's play." + icon = 'icons/obj/clothing/belts.dmi' + icon_state = "suspenders" + blood_overlay_type = "armor" //it's the less thing that I can put here + +//Security +/obj/item/clothing/suit/security/officer + name = "security officer's jacket" + desc = "This jacket is for those special occasions when a security officer isn't required to wear their armor." + icon_state = "officerbluejacket" + item_state = "officerbluejacket" + body_parts_covered = CHEST|ARMS + +/obj/item/clothing/suit/security/warden + name = "warden's jacket" + desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." + icon_state = "wardenbluejacket" + item_state = "wardenbluejacket" + body_parts_covered = CHEST|ARMS + +/obj/item/clothing/suit/security/hos + name = "head of security's jacket" + desc = "This piece of clothing was specifically designed for asserting superior authority." + icon_state = "hosbluejacket" + item_state = "hosbluejacket" + body_parts_covered = CHEST|ARMS + +//Surgeon +/obj/item/clothing/suit/apron/surgical + name = "surgical apron" + desc = "A sterile blue surgical apron." + icon_state = "surgical" + allowed = list(/obj/item/weapon/scalpel, /obj/item/weapon/surgical_drapes, /obj/item/weapon/cautery, /obj/item/weapon/hemostat, /obj/item/weapon/retractor) + +//Curator +/obj/item/clothing/suit/curator + name = "treasure hunter's coat" + desc = "Both fashionable and lightly armoured, this jacket is favoured by treasure hunters the galaxy over." + icon_state = "curator" + item_state = "curator" + blood_overlay_type = "coat" + body_parts_covered = CHEST|ARMS + allowed = list(/obj/item/weapon/tank/internals, /obj/item/weapon/melee/curator_whip) + armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 45) + cold_protection = CHEST|ARMS + heat_protection = CHEST|ARMS diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 7e48b495f0..cd6d209e5c 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -16,6 +16,9 @@ item_color = "black" resistance_flags = 0 +/obj/item/clothing/under/color/black/ghost + flags = NODROP|DROPDEL + /obj/item/clothing/under/color/grey name = "grey jumpsuit" desc = "A tasteful grey jumpsuit that reminds you of the good old days." diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 8c30774c02..eaa80d823c 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -137,7 +137,7 @@ can_adjust = 1 alt_covers_chest = 1 -/obj/item/clothing/under/rank/librarian +/obj/item/clothing/under/rank/curator name = "sensible suit" desc = "It's very... sensible." icon_state = "red_suit" @@ -145,7 +145,7 @@ item_color = "red_suit" can_adjust = 0 -/obj/item/clothing/under/rank/librarian/curator +/obj/item/clothing/under/rank/curator/treasure_hunter name = "treasure hunter uniform" desc = "A rugged uniform suitable for treasure hunting." icon_state = "curator" diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index d1a663cfb2..72088961de 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -337,6 +337,12 @@ /obj/item/weapon/restraints/handcuffs/cable = 1 ) category = CAT_MISC + +/datum/crafting_recipe/toysword + name = "Toy Sword" + reqs = list(/obj/item/weapon/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) + result = /obj/item/toy/sword + category = CAT_MISC /datum/crafting_recipe/chemical_payload name = "Chemical Payload (C4)" diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 92437a34c1..c3d58ee67d 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -1,172 +1,172 @@ -//CONTAINS: Detective's Scanner - -// TODO: Split everything into easy to manage procs. - -/obj/item/device/detective_scanner - name = "forensic scanner" - desc = "Used to remotely scan objects and biomass for DNA and fingerprints. Can print a report of the findings." - icon_state = "forensicnew" - w_class = WEIGHT_CLASS_SMALL - item_state = "electronic" - flags = CONDUCT | NOBLUDGEON - slot_flags = SLOT_BELT - var/scanning = 0 - var/list/log = list() - origin_tech = "engineering=4;biotech=2;programming=5" - -/obj/item/device/detective_scanner/attack_self(mob/user) - if(log.len && !scanning) - scanning = 1 - to_chat(user, "Printing report, please wait...") - addtimer(CALLBACK(src, .proc/PrintReport), 100) - else - to_chat(user, "The scanner has no logs or is in use.") - -/obj/item/device/detective_scanner/attack(mob/living/M, mob/user) - return - -/obj/item/device/detective_scanner/proc/PrintReport() - // Create our paper - var/obj/item/weapon/paper/P = new(get_turf(src)) - P.name = "paper- 'Scanner Report'" - P.info = "
Scanner Report


" - P.info += jointext(log, "
") - P.info += "
Notes:
" - P.info_links = P.info - - if(ismob(loc)) - var/mob/M = loc - M.put_in_hands(P) - to_chat(M, "Report printed. Log cleared.") - - // Clear the logs - log = list() - scanning = 0 - -/obj/item/device/detective_scanner/pre_attackby(atom/A, mob/user, params) - scan(A, user) - return FALSE - -/obj/item/device/detective_scanner/proc/scan(atom/A, mob/user) - set waitfor = 0 - if(!scanning) - // Can remotely scan objects and mobs. - if(!in_range(A, user) && !(A in view(world.view, user))) - return - if(loc != user) - return - - scanning = 1 - - user.visible_message("\The [user] points the [src.name] at \the [A] and performs a forensic scan.") - to_chat(user, "You scan \the [A]. The scanner is now analysing the results...") - - - // GATHER INFORMATION - - //Make our lists - var/list/fingerprints = list() - var/list/blood = list() - var/list/fibers = list() - var/list/reagents = list() - - var/target_name = A.name - - // Start gathering - - if(A.blood_DNA && A.blood_DNA.len) - blood = A.blood_DNA.Copy() - - if(A.suit_fibers && A.suit_fibers.len) - fibers = A.suit_fibers.Copy() - - if(ishuman(A)) - - var/mob/living/carbon/human/H = A - if(!H.gloves) - fingerprints += md5(H.dna.uni_identity) - - else if(!ismob(A)) - - if(A.fingerprints && A.fingerprints.len) - fingerprints = A.fingerprints.Copy() - - // Only get reagents from non-mobs. - if(A.reagents && A.reagents.reagent_list.len) - - for(var/datum/reagent/R in A.reagents.reagent_list) - reagents[R.name] = R.volume - - // Get blood data from the blood reagent. - if(istype(R, /datum/reagent/blood)) - - if(R.data["blood_DNA"] && R.data["blood_type"]) - var/blood_DNA = R.data["blood_DNA"] - var/blood_type = R.data["blood_type"] - blood[blood_DNA] = blood_type - - // We gathered everything. Create a fork and slowly display the results to the holder of the scanner. - - var/found_something = 0 - add_log("[worldtime2text()][get_timestamp()] - [target_name]", 0) - - // Fingerprints - if(fingerprints && fingerprints.len) - sleep(30) - add_log("Prints:") - for(var/finger in fingerprints) - add_log("[finger]") - found_something = 1 - - // Blood - if (blood && blood.len) - sleep(30) - add_log("Blood:") - found_something = 1 - for(var/B in blood) - add_log("Type: [blood[B]] DNA: [B]") - - //Fibers - if(fibers && fibers.len) - sleep(30) - add_log("Fibers:") - for(var/fiber in fibers) - add_log("[fiber]") - found_something = 1 - - //Reagents - if(reagents && reagents.len) - sleep(30) - add_log("Reagents:") - for(var/R in reagents) - add_log("Reagent: [R] Volume: [reagents[R]]") - found_something = 1 - - // Get a new user - var/mob/holder = null - if(ismob(src.loc)) - holder = src.loc - - if(!found_something) - add_log("# No forensic traces found #", 0) // Don't display this to the holder user - if(holder) - to_chat(holder, "Unable to locate any fingerprints, materials, fibers, or blood on \the [target_name]!") - else - if(holder) - to_chat(holder, "You finish scanning \the [target_name].") - - add_log("---------------------------------------------------------", 0) - scanning = 0 - return - -/obj/item/device/detective_scanner/proc/add_log(msg, broadcast = 1) - if(scanning) - if(broadcast && ismob(loc)) - var/mob/M = loc - to_chat(M, msg) - log += "  [msg]" - else - CRASH("[src] \ref[src] is adding a log when it was never put in scanning mode!") - -/proc/get_timestamp() - return time2text(world.time + 432000, ":ss") +//CONTAINS: Detective's Scanner + +// TODO: Split everything into easy to manage procs. + +/obj/item/device/detective_scanner + name = "forensic scanner" + desc = "Used to remotely scan objects and biomass for DNA and fingerprints. Can print a report of the findings." + icon_state = "forensicnew" + w_class = WEIGHT_CLASS_SMALL + item_state = "electronic" + flags = CONDUCT | NOBLUDGEON + slot_flags = SLOT_BELT + var/scanning = 0 + var/list/log = list() + origin_tech = "engineering=4;biotech=2;programming=5" + var/range = 8 + var/view_check = TRUE + +/obj/item/device/detective_scanner/attack_self(mob/user) + if(log.len && !scanning) + scanning = 1 + to_chat(user, "Printing report, please wait...") + addtimer(CALLBACK(src, .proc/PrintReport), 100) + else + to_chat(user, "The scanner has no logs or is in use.") + +/obj/item/device/detective_scanner/attack(mob/living/M, mob/user) + return + +/obj/item/device/detective_scanner/proc/PrintReport() + // Create our paper + var/obj/item/weapon/paper/P = new(get_turf(src)) + P.name = "paper- 'Scanner Report'" + P.info = "
Scanner Report


" + P.info += jointext(log, "
") + P.info += "
Notes:
" + P.info_links = P.info + + if(ismob(loc)) + var/mob/M = loc + M.put_in_hands(P) + to_chat(M, "Report printed. Log cleared.") + + // Clear the logs + log = list() + scanning = 0 + +/obj/item/device/detective_scanner/afterattack(atom/A, mob/user, params) + scan(A, user) + return FALSE + +/obj/item/device/detective_scanner/proc/scan(atom/A, mob/user) + set waitfor = 0 + if(!scanning) + // Can remotely scan objects and mobs. + if((get_dist(A, user) > range) || (!(A in view(range, user)) && view_check) || (loc != user)) + return + + scanning = 1 + + user.visible_message("\The [user] points the [src.name] at \the [A] and performs a forensic scan.") + to_chat(user, "You scan \the [A]. The scanner is now analysing the results...") + + + // GATHER INFORMATION + + //Make our lists + var/list/fingerprints = list() + var/list/blood = list() + var/list/fibers = list() + var/list/reagents = list() + + var/target_name = A.name + + // Start gathering + + if(A.blood_DNA && A.blood_DNA.len) + blood = A.blood_DNA.Copy() + + if(A.suit_fibers && A.suit_fibers.len) + fibers = A.suit_fibers.Copy() + + if(ishuman(A)) + + var/mob/living/carbon/human/H = A + if(!H.gloves) + fingerprints += md5(H.dna.uni_identity) + + else if(!ismob(A)) + + if(A.fingerprints && A.fingerprints.len) + fingerprints = A.fingerprints.Copy() + + // Only get reagents from non-mobs. + if(A.reagents && A.reagents.reagent_list.len) + + for(var/datum/reagent/R in A.reagents.reagent_list) + reagents[R.name] = R.volume + + // Get blood data from the blood reagent. + if(istype(R, /datum/reagent/blood)) + + if(R.data["blood_DNA"] && R.data["blood_type"]) + var/blood_DNA = R.data["blood_DNA"] + var/blood_type = R.data["blood_type"] + blood[blood_DNA] = blood_type + + // We gathered everything. Create a fork and slowly display the results to the holder of the scanner. + + var/found_something = 0 + add_log("[worldtime2text()][get_timestamp()] - [target_name]", 0) + + // Fingerprints + if(fingerprints && fingerprints.len) + sleep(30) + add_log("Prints:") + for(var/finger in fingerprints) + add_log("[finger]") + found_something = 1 + + // Blood + if (blood && blood.len) + sleep(30) + add_log("Blood:") + found_something = 1 + for(var/B in blood) + add_log("Type: [blood[B]] DNA: [B]") + + //Fibers + if(fibers && fibers.len) + sleep(30) + add_log("Fibers:") + for(var/fiber in fibers) + add_log("[fiber]") + found_something = 1 + + //Reagents + if(reagents && reagents.len) + sleep(30) + add_log("Reagents:") + for(var/R in reagents) + add_log("Reagent: [R] Volume: [reagents[R]]") + found_something = 1 + + // Get a new user + var/mob/holder = null + if(ismob(src.loc)) + holder = src.loc + + if(!found_something) + add_log("# No forensic traces found #", 0) // Don't display this to the holder user + if(holder) + to_chat(holder, "Unable to locate any fingerprints, materials, fibers, or blood on \the [target_name]!") + else + if(holder) + to_chat(holder, "You finish scanning \the [target_name].") + + add_log("---------------------------------------------------------", 0) + scanning = 0 + return + +/obj/item/device/detective_scanner/proc/add_log(msg, broadcast = 1) + if(scanning) + if(broadcast && ismob(loc)) + var/mob/M = loc + to_chat(M, msg) + log += "  [msg]" + else + CRASH("[src] \ref[src] is adding a log when it was never put in scanning mode!") + +/proc/get_timestamp() + return time2text(world.time + 432000, ":ss") diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index b48dd40e09..e2cce14db3 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -6,7 +6,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) if(!istype(E)) //Something threw an unusual exception log_world("\[[time_stamp()]] Uncaught exception: [E]") return ..() - + var/static/list/error_last_seen = list() var/static/list/error_cooldown = list() /* Error_cooldown items will either be positive(cooldown time) or negative(silenced error) If negative, starts at -1, and goes down by 1 each time that error gets skipped*/ @@ -107,9 +107,8 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) if (split[i] != "") split[i] = "\[[time2text(world.timeofday,"hh:mm:ss")]\][split[i]]" E.desc = jointext(split, "\n") - if(config && config.log_runtimes) - world.log = GLOB.runtime_diary - ..(E) + world.log = GLOB.world_runtime_log + ..(E) world.log = null diff --git a/code/modules/events/devil.dm b/code/modules/events/devil.dm index e4a90fc184..69648fa95a 100644 --- a/code/modules/events/devil.dm +++ b/code/modules/events/devil.dm @@ -32,11 +32,7 @@ var/mob/living/carbon/human/devil = create_event_devil(spawn_loc) Mind.transfer_to(devil) - SSticker.mode.finalize_devil(Mind, FALSE) - SSticker.mode.add_devil_objectives(src, 2) - Mind.announceDevilLaws() - Mind.announce_objectives() - + add_devil(devil, ascendable = FALSE) spawned_mobs += devil message_admins("[key_name_admin(devil)] has been made into a devil by an event.") diff --git a/code/modules/events/ghost_role.dm b/code/modules/events/ghost_role.dm index 93eff54b27..2468ddb5c6 100644 --- a/code/modules/events/ghost_role.dm +++ b/code/modules/events/ghost_role.dm @@ -59,7 +59,7 @@ var/list/mob/dead/observer/regular_candidates // don't get their hopes up if(priority_candidates.len < minimum_required) - regular_candidates = pollCandidates("Do you wish to be considered for the special role of '[role_name]'?", jobban, gametypecheck, be_special) + regular_candidates = pollGhostCandidates("Do you wish to be considered for the special role of '[role_name]'?", jobban, gametypecheck, be_special) else regular_candidates = list() diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index bbeedee68f..ea35e79824 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -362,8 +362,6 @@ for(var/datum/spacevine_mutation/SM in mutations) override += SM.on_eat(src, eater) if(!override) - if(prob(10)) - eater.say("Nom") qdel(src) /obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params) @@ -557,6 +555,10 @@ /obj/structure/spacevine/proc/spread() var/direction = pick(GLOB.cardinal) var/turf/stepturf = get_step(src,direction) + + if(istype(stepturf, /turf/open/space/transit)) + return + for(var/datum/spacevine_mutation/SM in mutations) SM.on_spread(src, stepturf) stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4c1328a38b..9710098c5f 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -356,9 +356,9 @@ Gunshots/explosions/opening doors/less rare audio (done) for(var/i=0,i[src] is set to [fridges[build_path]]. You can use a screwdriver to reconfigure it.") @@ -384,12 +393,8 @@ return TRUE return FALSE -/obj/machinery/smartfridge/extract/New() - ..() - var/obj/item/device/slime_scanner/I = new /obj/item/device/slime_scanner(src) - load(I) - var/obj/item/device/slime_scanner/T = new /obj/item/device/slime_scanner(src) - load(T) +/obj/machinery/smartfridge/extract/preloaded + initial_contents = list(/obj/item/device/slime_scanner = 2) // ----------------------------- // Chemistry Medical Smartfridge @@ -397,21 +402,6 @@ /obj/machinery/smartfridge/chemistry name = "smart chemical storage" desc = "A refrigerated storage unit for medicine storage." - var/list/spawn_meds = list( - /obj/item/weapon/reagent_containers/pill/epinephrine = 12, - /obj/item/weapon/reagent_containers/pill/charcoal = 5, - /obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 1, - /obj/item/weapon/reagent_containers/glass/bottle/charcoal = 1) - -/obj/machinery/smartfridge/chemistry/New() - ..() - for(var/typekey in spawn_meds) - var/amount = spawn_meds[typekey] - if(isnull(amount)) amount = 1 - while(amount) - var/obj/item/I = new typekey(src) - load(I) - amount-- /obj/machinery/smartfridge/chemistry/accept_check(obj/item/O) if(istype(O,/obj/item/weapon/storage/pill_bottle)) @@ -431,13 +421,22 @@ return TRUE return FALSE +/obj/machinery/smartfridge/chemistry/preloaded + initial_contents = list( + /obj/item/weapon/reagent_containers/pill/epinephrine = 12, + /obj/item/weapon/reagent_containers/pill/charcoal = 5, + /obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 1, + /obj/item/weapon/reagent_containers/glass/bottle/charcoal = 1) + // ---------------------------- // Virology Medical Smartfridge // ---------------------------- /obj/machinery/smartfridge/chemistry/virology name = "smart virus storage" desc = "A refrigerated storage unit for volatile sample storage." - spawn_meds = list( + +/obj/machinery/smartfridge/chemistry/virology/preloaded + initial_contents = list( /obj/item/weapon/reagent_containers/syringe/antiviral = 4, /obj/item/weapon/reagent_containers/glass/bottle/cold = 1, /obj/item/weapon/reagent_containers/glass/bottle/flu_virion = 1, diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index d6f6c0f32e..7bdd62211b 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -67,6 +67,7 @@ var/mutable_appearance/bomb_overlay = mutable_appearance(bomb.icon, bomb.icon_state) bomb_overlay.pixel_y = 5 add_overlay(bomb_overlay) + else icon_state = "pizzabox[boxes.len + 1]" var/obj/item/pizzabox/box = boxes.len ? boxes[boxes.len] : src if(box.boxtag != "") diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index e35d5c89e6..d0682ced1e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -74,3 +74,22 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/mimana category = CAT_BREAD + +/datum/crafting_recipe/food/butteredtoast + name = "Buttered Toast" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 1, + /obj/item/weapon/reagent_containers/food/snacks/butter = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/butteredtoast + category = CAT_BREAD + +/datum/crafting_recipe/food/butterbiscuit + name = "Butter Biscuit" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/bun = 1, + /obj/item/weapon/reagent_containers/food/snacks/butter = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/butterbiscuit + category = CAT_BREAD + diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index d2245a0ecd..878dda1804 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -160,3 +160,13 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/rawkhinkali category = CAT_MEAT + +/datum/crafting_recipe/food/pigblanket + name = "Pig in a Blanket" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/bun = 1, + /obj/item/weapon/reagent_containers/food/snacks/butter = 1, + /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/pigblanket + category = CAT_MEAT diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm index 85d2ee6d65..412157033b 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm @@ -59,3 +59,12 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/chowmein category = CAT_SPAGHETTI + +/datum/crafting_recipe/food/butternoodles + name = "Butter Noodles" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti = 1, + /obj/item/weapon/reagent_containers/food/snacks/butter = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/butternoodles + category = CAT_SPAGHETTI \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 555df764b8..5104ab333a 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -111,6 +111,7 @@ for(var/datum/plant_gene/trait/trait in seed.genes) trait.on_squash(src, target) + reagents.reaction(T) for(var/A in T) reagents.reaction(A) diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index 554cba9f47..51b8f3c43e 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -59,7 +59,7 @@ species = "ambrosia_gaia" plantname = "Ambrosia Gaia" product = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/gaia - mutatelist = list() + mutatelist = list(/obj/item/seeds/ambrosia/deus) reagents_add = list("earthsblood" = 0.05, "nutriment" = 0.06, "vitamin" = 0.05) rarity = 30 //These are some pretty good plants right here genes = list() diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index 71e6debf25..3f89618c09 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -1,19 +1,32 @@ -// Weeds -/obj/item/seeds/weeds - name = "pack of weed seeds" - desc = "Yo mang, want some weeds?" - icon_state = "seed" - species = "weeds" +// Starthistle +/obj/item/seeds/starthistle + name = "pack of starthistle seeds" + desc = "A robust species of weed that often springs up in-between the cracks of spaceship parking lots" + icon_state = "seed-starthistle" + species = "starthistle" plantname = "Starthistle" - lifespan = 100 + lifespan = 70 endurance = 50 // damm pesky weeds maturation = 5 production = 1 - yield = -1 - potency = -1 - growthstages = 4 + yield = 2 + potency = 10 + growthstages = 3 + growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' genes = list(/datum/plant_gene/trait/plant_type/weed_hardy) + mutatelist = list(/obj/item/seeds/harebell) +/obj/item/seeds/starthistle/harvest(mob/user) + var/obj/machinery/hydroponics/parent = loc + var/seed_count = yield + if(prob(getYield() * 20)) + seed_count++ + var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc + for(var/i in 1 to seed_count) + var/obj/item/seeds/starthistle/harvestseeds = Copy() + harvestseeds.forceMove(output_loc) + + parent.update_tray() // Cabbage /obj/item/seeds/cabbage @@ -123,8 +136,8 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) var/area/A = get_area(user) user.visible_message("[user] plucks the stem from [src]!", "You pluck the stem from [src], which begins to hiss loudly!") - message_admins("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x], [user.y], [user.z]) (JMP)") - log_game("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x],[user.y],[user.z]).") + message_admins("[ADMIN_LOOKUPFLW(user)] primed a cherry bomb for detonation at [A] [ADMIN_COORDJMP(user)]") + log_game("[key_name(user)] primed a cherry bomb for detonation at [A] [COORD(user)].") prime() /obj/item/weapon/reagent_containers/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE) diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index 264261dd69..82cc192344 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -50,17 +50,22 @@ /obj/item/weapon/grown/nettle/pickup(mob/living/user) ..() if(!iscarbon(user)) - return 0 + return FALSE var/mob/living/carbon/C = user if(C.gloves) - return 0 + return FALSE + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(H.dna && H.dna.species) + if(PIERCEIMMUNE in H.dna.species.species_traits) + return FALSE var/hit_zone = (C.held_index_to_dir(C.active_hand_index) == "l" ? "l_":"r_") + "arm" var/obj/item/bodypart/affecting = C.get_bodypart(hit_zone) if(affecting) if(affecting.receive_damage(0, force)) C.update_damage_overlays() to_chat(C, "The nettle burns your bare hand!") - return 1 + return TRUE /obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity) if(!proximity) return diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 6a1c877b97..dd322e57d3 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -107,20 +107,45 @@ anchored = TRUE buckle_lying = 0 var/burning = 0 + var/grill = FALSE var/fire_stack_strength = 5 /obj/structure/bonfire/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/stack/rods) && !can_buckle) + if(istype(W, /obj/item/stack/rods) && !can_buckle && !grill) var/obj/item/stack/rods/R = W - R.use(1) - can_buckle = 1 - buckle_requires_restraints = 1 - to_chat(user, "You add a rod to [src].") - var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod") - rod_underlay.pixel_y = 16 - underlays += rod_underlay + var/choice = input(user, "What would you like to construct?", "Bonfire") as null|anything in list("Stake","Grill") + switch(choice) + if("Stake") + R.use(1) + can_buckle = TRUE + buckle_requires_restraints = TRUE + to_chat(user, "You add a rod to \the [src].") + var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod") + rod_underlay.pixel_y = 16 + underlays += rod_underlay + if("Grill") + R.use(1) + grill = TRUE + to_chat(user, "You add a grill to \the [src].") + var/mutable_appearance/grill_overlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_grill") + overlays += grill_overlay + else + return ..() if(W.is_hot()) StartBurning() + if(grill) + if(user.a_intent != INTENT_HARM && !(W.flags & ABSTRACT)) + if(user.temporarilyRemoveItemFromInventory(W)) + W.forceMove(get_turf(src)) + var/list/click_params = params2list(params) + //Center the icon where the user clicked. + if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) + return + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) + W.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + W.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + else + return ..() /obj/structure/bonfire/attack_hand(mob/user) @@ -158,7 +183,7 @@ StartBurning() /obj/structure/bonfire/Crossed(atom/movable/AM) - if(burning) + if(burning & !grill) Burn() /obj/structure/bonfire/proc/Burn() @@ -175,11 +200,27 @@ L.adjust_fire_stacks(fire_stack_strength) L.IgniteMob() +/obj/structure/bonfire/proc/Cook() + var/turf/current_location = get_turf(src) + for(var/A in current_location) + if(A == src) + continue + else if(isliving(A)) //It's still a fire, idiot. + var/mob/living/L = A + L.adjust_fire_stacks(fire_stack_strength) + L.IgniteMob() + else if(istype(A, /obj/item) && prob(20)) + var/obj/item/O = A + O.microwave_act() + /obj/structure/bonfire/process() if(!CheckOxygen()) extinguish() return - Burn() + if(!grill) + Burn() + else + Cook() /obj/structure/bonfire/extinguish() if(burning) diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index b26a911b3a..8f49846f60 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -27,6 +27,8 @@ var/unwrenchable = 1 var/recent_bee_visit = FALSE //Have we been visited by a bee recently, so bees dont overpollinate one plant var/using_irrigation = FALSE //If the tray is connected to other trays via irrigation hoses + var/self_sufficiency_req = 20 //Required total dose to make a self-sufficient hydro tray. 1:1 with earthsblood. + var/self_sufficiency_progress = 0 var/self_sustaining = FALSE //If the tray generates nutrients and water on its own @@ -329,6 +331,9 @@ if(!self_sustaining) to_chat(user, "Water: [waterlevel]/[maxwater]") to_chat(user, "Nutrient: [nutrilevel]/[maxnutri]") + if(self_sufficiency_progress > 0) + var/percent_progress = round(self_sufficiency_progress * 100 / self_sufficiency_req) + to_chat(user, "Treatment for self-sustenance are [percent_progress]% complete.") else to_chat(user, "It doesn't require any water or nutrients.") @@ -364,7 +369,7 @@ if(4 to 5) myseed = new /obj/item/seeds/plump(src) else - myseed = new /obj/item/seeds/weeds(src) + myseed = new /obj/item/seeds/starthistle(src) age = 0 plant_health = myseed.endurance lastcycle = world.time @@ -504,6 +509,14 @@ yieldmod = 1.3 mutmod = 0 adjustNutri(round(S.get_reagent_amount("robustharvestnutriment") *1 )) + + // Ambrosia Gaia produces earthsblood. + if(S.has_reagent("earthsblood")) + self_sufficiency_progress += S.get_reagent_amount("earthsblood") + if(self_sufficiency_progress >= self_sufficiency_req) + become_self_sufficient() + else if(!self_sustaining) + to_chat(user, "[src] warms as it might on a spring day under a genuine Sun.") // Antitoxin binds shit pretty well. So the tox goes significantly down if(S.has_reagent("charcoal", 1)) @@ -675,33 +688,7 @@ /obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params) //Called when mob user "attacks" it with object O - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/gaia)) //Checked early on so it doesn't have to deal with composting checks - if(self_sustaining) - to_chat(user, "This [name] is already self-sustaining!") - return - if(myseed || weedlevel) - to_chat(user, "[src] needs to be clear of plants and weeds!") - return - if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user) - return - if(!O || QDELETED(O)) - return - if(!Adjacent(user)) - return - if(self_sustaining) - to_chat(user, "This [name] is already self-sustaining!") - return - if(myseed || weedlevel) - to_chat(user, "[src] needs to be clear of plants and weeds!") - return - user.visible_message("[user] gently pulls open the soil for [O] and places it inside.", "You tenderly root [O] into [src].") - user.drop_item() - qdel(O) - visible_message("[src] begins to glow with a beautiful light!") - self_sustaining = TRUE - update_icon() - - else if(istype(O, /obj/item/weapon/reagent_containers) ) // Syringe stuff (and other reagent containers now too) + if(istype(O, /obj/item/weapon/reagent_containers) ) // Syringe stuff (and other reagent containers now too) var/obj/item/weapon/reagent_containers/reagent_source = O if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe)) @@ -930,6 +917,10 @@ var/mob/living/simple_animal/hostile/C = new chosen C.faction = list("plants") +/obj/machinery/hydroponics/proc/become_self_sufficient() // Ambrosia Gaia effect + visible_message("[src] begins to glow with a beautiful light!") + self_sustaining = TRUE + update_icon() /////////////////////////////////////////////////////////////////////////////// /obj/machinery/hydroponics/soil //Not actually hydroponics at all! Honk! diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 31bb564a06..5f4a79b661 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -268,7 +268,7 @@ rate = 0.03 examine_line = "It emits a soft glow." trait_id = "glow" - var/glow_color = "#AAD84B" + var/glow_color = "#C3E381" /datum/plant_gene/trait/glow/proc/glow_range(obj/item/seeds/S) return 1.4 + S.potency*rate @@ -285,6 +285,7 @@ //adds -potency*(rate*0.05) light power to products name = "Shadow Emission" rate = 0.04 + glow_color = "#AAD84B" /datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S) return -max(S.potency*(rate*0.05), 0.075) diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 0ab974126e..d3a8c089d6 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -1,481 +1,481 @@ - - -GLOBAL_VAR_CONST(access_security, 1) // Security equipment -GLOBAL_VAR_CONST(access_brig, 2) // Brig timers and permabrig -GLOBAL_VAR_CONST(access_armory, 3) -GLOBAL_VAR_CONST(access_forensics_lockers, 4) -GLOBAL_VAR_CONST(access_medical, 5) -GLOBAL_VAR_CONST(access_morgue, 6) -GLOBAL_VAR_CONST(access_tox, 7) -GLOBAL_VAR_CONST(access_tox_storage, 8) -GLOBAL_VAR_CONST(access_genetics, 9) -GLOBAL_VAR_CONST(access_engine, 10) -GLOBAL_VAR_CONST(access_engine_equip, 11) -GLOBAL_VAR_CONST(access_maint_tunnels, 12) -GLOBAL_VAR_CONST(access_external_airlocks, 13) -GLOBAL_VAR_CONST(access_emergency_storage, 14) -GLOBAL_VAR_CONST(access_change_ids, 15) -GLOBAL_VAR_CONST(access_ai_upload, 16) -GLOBAL_VAR_CONST(access_teleporter, 17) -GLOBAL_VAR_CONST(access_eva, 18) -GLOBAL_VAR_CONST(access_heads, 19) -GLOBAL_VAR_CONST(access_captain, 20) -GLOBAL_VAR_CONST(access_all_personal_lockers, 21) -GLOBAL_VAR_CONST(access_chapel_office, 22) -GLOBAL_VAR_CONST(access_tech_storage, 23) -GLOBAL_VAR_CONST(access_atmospherics, 24) -GLOBAL_VAR_CONST(access_bar, 25) -GLOBAL_VAR_CONST(access_janitor, 26) -GLOBAL_VAR_CONST(access_crematorium, 27) -GLOBAL_VAR_CONST(access_kitchen, 28) -GLOBAL_VAR_CONST(access_robotics, 29) -GLOBAL_VAR_CONST(access_rd, 30) -GLOBAL_VAR_CONST(access_cargo, 31) -GLOBAL_VAR_CONST(access_construction, 32) -GLOBAL_VAR_CONST(access_chemistry, 33) -GLOBAL_VAR_CONST(access_cargo_bot, 34) -GLOBAL_VAR_CONST(access_hydroponics, 35) -GLOBAL_VAR_CONST(access_manufacturing, 36) -GLOBAL_VAR_CONST(access_library, 37) -GLOBAL_VAR_CONST(access_lawyer, 38) -GLOBAL_VAR_CONST(access_virology, 39) -GLOBAL_VAR_CONST(access_cmo, 40) -GLOBAL_VAR_CONST(access_qm, 41) -GLOBAL_VAR_CONST(access_court, 42) -GLOBAL_VAR_CONST(access_surgery, 45) -GLOBAL_VAR_CONST(access_theatre, 46) -GLOBAL_VAR_CONST(access_research, 47) -GLOBAL_VAR_CONST(access_mining, 48) -GLOBAL_VAR_CONST(access_mining_office, 49) //not in use -GLOBAL_VAR_CONST(access_mailsorting, 50) -GLOBAL_VAR_CONST(access_mint, 51) -GLOBAL_VAR_CONST(access_mint_vault, 52) -GLOBAL_VAR_CONST(access_heads_vault, 53) -GLOBAL_VAR_CONST(access_mining_station, 54) -GLOBAL_VAR_CONST(access_xenobiology, 55) -GLOBAL_VAR_CONST(access_ce, 56) -GLOBAL_VAR_CONST(access_hop, 57) -GLOBAL_VAR_CONST(access_hos, 58) -GLOBAL_VAR_CONST(access_RC_announce, 59) //Request console announcements -GLOBAL_VAR_CONST(access_keycard_auth, 60) //Used for events which require at least two people to confirm them -GLOBAL_VAR_CONST(access_tcomsat, 61) // has access to the entire telecomms satellite / machinery -GLOBAL_VAR_CONST(access_gateway, 62) -GLOBAL_VAR_CONST(access_sec_doors, 63) // Security front doors -GLOBAL_VAR_CONST(access_mineral_storeroom, 64) -GLOBAL_VAR_CONST(access_minisat, 65) -GLOBAL_VAR_CONST(access_weapons, 66) //Weapon authorization for secbots -GLOBAL_VAR_CONST(access_network, 67) -GLOBAL_VAR_CONST(access_cloning, 68) //Cloning room - - //BEGIN CENTCOM ACCESS - /*Should leave plenty of room if we need to add more access levels. - Mostly for admin fun times.*/ -GLOBAL_VAR_CONST(access_cent_general, 101)//General facilities. -GLOBAL_VAR_CONST(access_cent_thunder, 102)//Thunderdome. -GLOBAL_VAR_CONST(access_cent_specops, 103)//Special Ops. -GLOBAL_VAR_CONST(access_cent_medical, 104)//Medical/Research -GLOBAL_VAR_CONST(access_cent_living, 105)//Living quarters. -GLOBAL_VAR_CONST(access_cent_storage, 106)//Generic storage areas. -GLOBAL_VAR_CONST(access_cent_teleporter, 107)//Teleporter. -GLOBAL_VAR_CONST(access_cent_captain, 109)//Captain's office/ID comp/AI. -GLOBAL_VAR_CONST(access_cent_bar, 110) // The non-existent Centcom Bar - - //The Syndicate -GLOBAL_VAR_CONST(access_syndicate, 150)//General Syndicate Access -GLOBAL_VAR_CONST(access_syndicate_leader, 151)//Nuke Op Leader Access - - //Away Missions or Ruins - /*For generic away-mission/ruin access. Why would normal crew have access to a long-abandoned derelict - or a 2000 year-old temple? */ -GLOBAL_VAR_CONST(access_away_general, 200)//General facilities. -GLOBAL_VAR_CONST(access_away_maint, 201)//Away maintenance -GLOBAL_VAR_CONST(access_away_med, 202)//Away medical -GLOBAL_VAR_CONST(access_away_sec, 203)//Away security -GLOBAL_VAR_CONST(access_away_engine, 204)//Away engineering -GLOBAL_VAR_CONST(access_away_generic1, 205)//Away generic access -GLOBAL_VAR_CONST(access_away_generic2, 206) -GLOBAL_VAR_CONST(access_away_generic3, 207) -GLOBAL_VAR_CONST(access_away_generic4, 208) - -/obj/var/list/req_access = null -/obj/var/req_access_txt = "0" -/obj/var/list/req_one_access = null -/obj/var/req_one_access_txt = "0" - -//returns 1 if this mob has sufficient access to use this object -/obj/proc/allowed(mob/M) - //check if it doesn't require any access at all - if(src.check_access(null)) - return TRUE - if(issilicon(M)) - if(ispAI(M)) - return FALSE - return TRUE //AI can do whatever it wants - if(IsAdminGhost(M)) - //Access can't stop the abuse - return TRUE - else if(ishuman(M)) - var/mob/living/carbon/human/H = M - //if they are holding or wearing a card that has access, that works - if(check_access(H.get_active_held_item()) || src.check_access(H.wear_id)) - return TRUE - else if(ismonkey(M) || isalienadult(M)) - var/mob/living/carbon/george = M - //they can only hold things :( - if(check_access(george.get_active_held_item())) - return TRUE - else if(isanimal(M)) - var/mob/living/simple_animal/A = M - if(check_access(A.get_active_held_item()) || check_access(A.access_card)) - return TRUE - return FALSE - -/obj/item/proc/GetAccess() - return list() - -/obj/item/proc/GetID() - return null - -//Call this before using req_access or req_one_access directly -/obj/proc/gen_access() - //These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system. - if(!src.req_access) - src.req_access = list() - if(src.req_access_txt) - var/list/req_access_str = splittext(req_access_txt,";") - for(var/x in req_access_str) - var/n = text2num(x) - if(n) - req_access += n - - if(!src.req_one_access) - src.req_one_access = list() - if(src.req_one_access_txt) - var/list/req_one_access_str = splittext(req_one_access_txt,";") - for(var/x in req_one_access_str) - var/n = text2num(x) - if(n) - req_one_access += n - -/obj/proc/check_access(obj/item/I) - gen_access() - - if(!istype(src.req_access, /list)) //something's very wrong - return TRUE - - var/list/L = src.req_access - if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements - return TRUE - if(!I) - return FALSE - for(var/req in src.req_access) - if(!(req in I.GetAccess())) //doesn't have this access - return FALSE - if(src.req_one_access && src.req_one_access.len) - for(var/req in src.req_one_access) - if(req in I.GetAccess()) //has an access from the single access list - return TRUE - return FALSE - return TRUE - - -/obj/proc/check_access_list(list/L) - if(!src.req_access && !src.req_one_access) - return TRUE - if(!istype(src.req_access, /list)) - return TRUE - if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len)) - return TRUE - if(!L) - return FALSE - if(!istype(L, /list)) - return FALSE - for(var/req in src.req_access) - if(!(req in L)) //doesn't have this access - return FALSE - if(src.req_one_access && src.req_one_access.len) - for(var/req in src.req_one_access) - if(req in L) //has an access from the single access list - return TRUE - return FALSE - return TRUE - -/proc/get_centcom_access(job) - switch(job) - if("VIP Guest") - return list(GLOB.access_cent_general) - if("Custodian") - return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_storage) - if("Thunderdome Overseer") - return list(GLOB.access_cent_general, GLOB.access_cent_thunder) - if("Centcom Official") - return list(GLOB.access_cent_general, GLOB.access_cent_living) - if("Medical Officer") - return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_medical) - if("Death Commando") - return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) - if("Research Officer") - return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_teleporter, GLOB.access_cent_storage) - if("Special Ops Officer") - return list(GLOB.access_cent_general, GLOB.access_cent_thunder, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) - if("Admiral") - return get_all_centcom_access() - if("Centcom Commander") - return get_all_centcom_access() - if("Emergency Response Team Commander") - return get_ert_access("commander") - if("Security Response Officer") - return get_ert_access("sec") - if("Engineer Response Officer") - return get_ert_access("eng") - if("Medical Response Officer") - return get_ert_access("med") - if("Centcom Bartender") - return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_bar) - -/proc/get_all_accesses() - return list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_forensics_lockers, GLOB.access_court, - GLOB.access_medical, GLOB.access_genetics, GLOB.access_morgue, GLOB.access_rd, - GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_chemistry, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_maint_tunnels, - GLOB.access_external_airlocks, GLOB.access_change_ids, GLOB.access_ai_upload, - GLOB.access_teleporter, GLOB.access_eva, GLOB.access_heads, GLOB.access_captain, GLOB.access_all_personal_lockers, - GLOB.access_tech_storage, GLOB.access_chapel_office, GLOB.access_atmospherics, GLOB.access_kitchen, - GLOB.access_bar, GLOB.access_janitor, GLOB.access_crematorium, GLOB.access_robotics, GLOB.access_cargo, GLOB.access_construction, - GLOB.access_hydroponics, GLOB.access_library, GLOB.access_lawyer, GLOB.access_virology, GLOB.access_cmo, GLOB.access_qm, GLOB.access_surgery, - GLOB.access_theatre, GLOB.access_research, GLOB.access_mining, GLOB.access_mailsorting, GLOB.access_weapons, - GLOB.access_heads_vault, GLOB.access_mining_station, GLOB.access_xenobiology, GLOB.access_ce, GLOB.access_hop, GLOB.access_hos, GLOB.access_RC_announce, - GLOB.access_keycard_auth, GLOB.access_tcomsat, GLOB.access_gateway, GLOB.access_mineral_storeroom, GLOB.access_minisat, GLOB.access_network, GLOB.access_cloning) - -/proc/get_all_centcom_access() - return list(GLOB.access_cent_general, GLOB.access_cent_thunder, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_living, GLOB.access_cent_storage, GLOB.access_cent_teleporter, GLOB.access_cent_captain) - -/proc/get_ert_access(class) - switch(class) - if("commander") - return get_all_centcom_access() - if("sec") - return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living) - if("eng") - return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) - if("med") - return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_living) - -/proc/get_all_syndicate_access() - return list(GLOB.access_syndicate, GLOB.access_syndicate) - -/proc/get_region_accesses(code) - switch(code) - if(0) - return get_all_accesses() - if(1) //station general - return list(GLOB.access_kitchen,GLOB.access_bar, GLOB.access_hydroponics, GLOB.access_janitor, GLOB.access_chapel_office, GLOB.access_crematorium, GLOB.access_library, GLOB.access_theatre, GLOB.access_lawyer) - if(2) //security - return list(GLOB.access_sec_doors, GLOB.access_weapons, GLOB.access_security, GLOB.access_brig, GLOB.access_armory, GLOB.access_forensics_lockers, GLOB.access_court, GLOB.access_hos) - if(3) //medbay - return list(GLOB.access_medical, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_morgue, GLOB.access_chemistry, GLOB.access_virology, GLOB.access_surgery, GLOB.access_cmo) - if(4) //research - return list(GLOB.access_research, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_genetics, GLOB.access_robotics, GLOB.access_xenobiology, GLOB.access_minisat, GLOB.access_rd, GLOB.access_network) - if(5) //engineering and maintenance - return list(GLOB.access_construction, GLOB.access_maint_tunnels, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_external_airlocks, GLOB.access_tech_storage, GLOB.access_atmospherics, GLOB.access_tcomsat, GLOB.access_minisat, GLOB.access_ce) - if(6) //supply - return list(GLOB.access_mailsorting, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom, GLOB.access_cargo, GLOB.access_qm) - if(7) //command - return list(GLOB.access_heads, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_change_ids, GLOB.access_ai_upload, GLOB.access_teleporter, GLOB.access_eva, GLOB.access_gateway, GLOB.access_all_personal_lockers, GLOB.access_heads_vault, GLOB.access_hop, GLOB.access_captain) - -/proc/get_region_accesses_name(code) - switch(code) - if(0) - return "All" - if(1) //station general - return "General" - if(2) //security - return "Security" - if(3) //medbay - return "Medbay" - if(4) //research - return "Research" - if(5) //engineering and maintenance - return "Engineering" - if(6) //supply - return "Supply" - if(7) //command - return "Command" - -/proc/get_access_desc(A) - switch(A) - if(GLOB.access_cargo) - return "Cargo Bay" - if(GLOB.access_cargo_bot) - return "Delivery Chutes" - if(GLOB.access_security) - return "Security" - if(GLOB.access_brig) - return "Holding Cells" - if(GLOB.access_court) - return "Courtroom" - if(GLOB.access_forensics_lockers) - return "Forensics" - if(GLOB.access_medical) - return "Medical" - if(GLOB.access_genetics) - return "Genetics Lab" - if(GLOB.access_morgue) - return "Morgue" - if(GLOB.access_tox) - return "R&D Lab" - if(GLOB.access_tox_storage) - return "Toxins Lab" - if(GLOB.access_chemistry) - return "Chemistry Lab" - if(GLOB.access_rd) - return "RD Office" - if(GLOB.access_bar) - return "Bar" - if(GLOB.access_janitor) - return "Custodial Closet" - if(GLOB.access_engine) - return "Engineering" - if(GLOB.access_engine_equip) - return "Power Equipment" - if(GLOB.access_maint_tunnels) - return "Maintenance" - if(GLOB.access_external_airlocks) - return "External Airlocks" - if(GLOB.access_emergency_storage) - return "Emergency Storage" - if(GLOB.access_change_ids) - return "ID Console" - if(GLOB.access_ai_upload) - return "AI Chambers" - if(GLOB.access_teleporter) - return "Teleporter" - if(GLOB.access_eva) - return "EVA" - if(GLOB.access_heads) - return "Bridge" - if(GLOB.access_captain) - return "Captain" - if(GLOB.access_all_personal_lockers) - return "Personal Lockers" - if(GLOB.access_chapel_office) - return "Chapel Office" - if(GLOB.access_tech_storage) - return "Technical Storage" - if(GLOB.access_atmospherics) - return "Atmospherics" - if(GLOB.access_crematorium) - return "Crematorium" - if(GLOB.access_armory) - return "Armory" - if(GLOB.access_construction) - return "Construction" - if(GLOB.access_kitchen) - return "Kitchen" - if(GLOB.access_hydroponics) - return "Hydroponics" - if(GLOB.access_library) - return "Library" - if(GLOB.access_lawyer) - return "Law Office" - if(GLOB.access_robotics) - return "Robotics" - if(GLOB.access_virology) - return "Virology" - if(GLOB.access_cmo) - return "CMO Office" - if(GLOB.access_qm) - return "Quartermaster" - if(GLOB.access_surgery) - return "Surgery" - if(GLOB.access_theatre) - return "Theatre" - if(GLOB.access_manufacturing) - return "Manufacturing" - if(GLOB.access_research) - return "Science" - if(GLOB.access_mining) - return "Mining" - if(GLOB.access_mining_office) - return "Mining Office" - if(GLOB.access_mailsorting) - return "Cargo Office" - if(GLOB.access_mint) - return "Mint" - if(GLOB.access_mint_vault) - return "Mint Vault" - if(GLOB.access_heads_vault) - return "Main Vault" - if(GLOB.access_mining_station) - return "Mining EVA" - if(GLOB.access_xenobiology) - return "Xenobiology Lab" - if(GLOB.access_hop) - return "HoP Office" - if(GLOB.access_hos) - return "HoS Office" - if(GLOB.access_ce) - return "CE Office" - if(GLOB.access_RC_announce) - return "RC Announcements" - if(GLOB.access_keycard_auth) - return "Keycode Auth." - if(GLOB.access_tcomsat) - return "Telecommunications" - if(GLOB.access_gateway) - return "Gateway" - if(GLOB.access_sec_doors) - return "Brig" - if(GLOB.access_mineral_storeroom) - return "Mineral Storage" - if(GLOB.access_minisat) - return "AI Satellite" - if(GLOB.access_weapons) - return "Weapon Permit" - if(GLOB.access_network) - return "Network Access" - if(GLOB.access_cloning) - return "Cloning Room" - -/proc/get_centcom_access_desc(A) - switch(A) - if(GLOB.access_cent_general) - return "Code Grey" - if(GLOB.access_cent_thunder) - return "Code Yellow" - if(GLOB.access_cent_storage) - return "Code Orange" - if(GLOB.access_cent_living) - return "Code Green" - if(GLOB.access_cent_medical) - return "Code White" - if(GLOB.access_cent_teleporter) - return "Code Blue" - if(GLOB.access_cent_specops) - return "Code Black" - if(GLOB.access_cent_captain) - return "Code Gold" - if(GLOB.access_cent_bar) - return "Code Scotch" - -/proc/get_all_jobs() - return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician", - "Shaft Miner", "Clown", "Mime", "Janitor", "Librarian", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", - "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", - "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer") - -/proc/get_all_job_icons() //For all existing HUD icons - return get_all_jobs() + list("Prisoner") - -/proc/get_all_centcom_jobs() - return list("VIP Guest","Custodian","Thunderdome Overseer","Centcom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","Centcom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","Centcom Bartender") - -/obj/item/proc/GetJobName() //Used in secHUD icon generation - var/obj/item/weapon/card/id/I = GetID() - if(!I) - return - var/jobName = I.assignment - if(jobName in get_all_job_icons()) //Check if the job has a hud icon - return jobName - if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a Centcom job - return "Centcom" - return "Unknown" //Return unknown if none of the above apply + + +GLOBAL_VAR_CONST(access_security, 1) // Security equipment +GLOBAL_VAR_CONST(access_brig, 2) // Brig timers and permabrig +GLOBAL_VAR_CONST(access_armory, 3) +GLOBAL_VAR_CONST(access_forensics_lockers, 4) +GLOBAL_VAR_CONST(access_medical, 5) +GLOBAL_VAR_CONST(access_morgue, 6) +GLOBAL_VAR_CONST(access_tox, 7) +GLOBAL_VAR_CONST(access_tox_storage, 8) +GLOBAL_VAR_CONST(access_genetics, 9) +GLOBAL_VAR_CONST(access_engine, 10) +GLOBAL_VAR_CONST(access_engine_equip, 11) +GLOBAL_VAR_CONST(access_maint_tunnels, 12) +GLOBAL_VAR_CONST(access_external_airlocks, 13) +GLOBAL_VAR_CONST(access_emergency_storage, 14) +GLOBAL_VAR_CONST(access_change_ids, 15) +GLOBAL_VAR_CONST(access_ai_upload, 16) +GLOBAL_VAR_CONST(access_teleporter, 17) +GLOBAL_VAR_CONST(access_eva, 18) +GLOBAL_VAR_CONST(access_heads, 19) +GLOBAL_VAR_CONST(access_captain, 20) +GLOBAL_VAR_CONST(access_all_personal_lockers, 21) +GLOBAL_VAR_CONST(access_chapel_office, 22) +GLOBAL_VAR_CONST(access_tech_storage, 23) +GLOBAL_VAR_CONST(access_atmospherics, 24) +GLOBAL_VAR_CONST(access_bar, 25) +GLOBAL_VAR_CONST(access_janitor, 26) +GLOBAL_VAR_CONST(access_crematorium, 27) +GLOBAL_VAR_CONST(access_kitchen, 28) +GLOBAL_VAR_CONST(access_robotics, 29) +GLOBAL_VAR_CONST(access_rd, 30) +GLOBAL_VAR_CONST(access_cargo, 31) +GLOBAL_VAR_CONST(access_construction, 32) +GLOBAL_VAR_CONST(access_chemistry, 33) +GLOBAL_VAR_CONST(access_cargo_bot, 34) +GLOBAL_VAR_CONST(access_hydroponics, 35) +GLOBAL_VAR_CONST(access_manufacturing, 36) +GLOBAL_VAR_CONST(access_library, 37) +GLOBAL_VAR_CONST(access_lawyer, 38) +GLOBAL_VAR_CONST(access_virology, 39) +GLOBAL_VAR_CONST(access_cmo, 40) +GLOBAL_VAR_CONST(access_qm, 41) +GLOBAL_VAR_CONST(access_court, 42) +GLOBAL_VAR_CONST(access_surgery, 45) +GLOBAL_VAR_CONST(access_theatre, 46) +GLOBAL_VAR_CONST(access_research, 47) +GLOBAL_VAR_CONST(access_mining, 48) +GLOBAL_VAR_CONST(access_mining_office, 49) //not in use +GLOBAL_VAR_CONST(access_mailsorting, 50) +GLOBAL_VAR_CONST(access_mint, 51) +GLOBAL_VAR_CONST(access_mint_vault, 52) +GLOBAL_VAR_CONST(access_heads_vault, 53) +GLOBAL_VAR_CONST(access_mining_station, 54) +GLOBAL_VAR_CONST(access_xenobiology, 55) +GLOBAL_VAR_CONST(access_ce, 56) +GLOBAL_VAR_CONST(access_hop, 57) +GLOBAL_VAR_CONST(access_hos, 58) +GLOBAL_VAR_CONST(access_RC_announce, 59) //Request console announcements +GLOBAL_VAR_CONST(access_keycard_auth, 60) //Used for events which require at least two people to confirm them +GLOBAL_VAR_CONST(access_tcomsat, 61) // has access to the entire telecomms satellite / machinery +GLOBAL_VAR_CONST(access_gateway, 62) +GLOBAL_VAR_CONST(access_sec_doors, 63) // Security front doors +GLOBAL_VAR_CONST(access_mineral_storeroom, 64) +GLOBAL_VAR_CONST(access_minisat, 65) +GLOBAL_VAR_CONST(access_weapons, 66) //Weapon authorization for secbots +GLOBAL_VAR_CONST(access_network, 67) +GLOBAL_VAR_CONST(access_cloning, 68) //Cloning room + + //BEGIN CENTCOM ACCESS + /*Should leave plenty of room if we need to add more access levels. + Mostly for admin fun times.*/ +GLOBAL_VAR_CONST(access_cent_general, 101)//General facilities. +GLOBAL_VAR_CONST(access_cent_thunder, 102)//Thunderdome. +GLOBAL_VAR_CONST(access_cent_specops, 103)//Special Ops. +GLOBAL_VAR_CONST(access_cent_medical, 104)//Medical/Research +GLOBAL_VAR_CONST(access_cent_living, 105)//Living quarters. +GLOBAL_VAR_CONST(access_cent_storage, 106)//Generic storage areas. +GLOBAL_VAR_CONST(access_cent_teleporter, 107)//Teleporter. +GLOBAL_VAR_CONST(access_cent_captain, 109)//Captain's office/ID comp/AI. +GLOBAL_VAR_CONST(access_cent_bar, 110) // The non-existent Centcom Bar + + //The Syndicate +GLOBAL_VAR_CONST(access_syndicate, 150)//General Syndicate Access +GLOBAL_VAR_CONST(access_syndicate_leader, 151)//Nuke Op Leader Access + + //Away Missions or Ruins + /*For generic away-mission/ruin access. Why would normal crew have access to a long-abandoned derelict + or a 2000 year-old temple? */ +GLOBAL_VAR_CONST(access_away_general, 200)//General facilities. +GLOBAL_VAR_CONST(access_away_maint, 201)//Away maintenance +GLOBAL_VAR_CONST(access_away_med, 202)//Away medical +GLOBAL_VAR_CONST(access_away_sec, 203)//Away security +GLOBAL_VAR_CONST(access_away_engine, 204)//Away engineering +GLOBAL_VAR_CONST(access_away_generic1, 205)//Away generic access +GLOBAL_VAR_CONST(access_away_generic2, 206) +GLOBAL_VAR_CONST(access_away_generic3, 207) +GLOBAL_VAR_CONST(access_away_generic4, 208) + +/obj/var/list/req_access = null +/obj/var/req_access_txt = "0" +/obj/var/list/req_one_access = null +/obj/var/req_one_access_txt = "0" + +//returns 1 if this mob has sufficient access to use this object +/obj/proc/allowed(mob/M) + //check if it doesn't require any access at all + if(src.check_access(null)) + return TRUE + if(issilicon(M)) + if(ispAI(M)) + return FALSE + return TRUE //AI can do whatever it wants + if(IsAdminGhost(M)) + //Access can't stop the abuse + return TRUE + else if(ishuman(M)) + var/mob/living/carbon/human/H = M + //if they are holding or wearing a card that has access, that works + if(check_access(H.get_active_held_item()) || src.check_access(H.wear_id)) + return TRUE + else if(ismonkey(M) || isalienadult(M)) + var/mob/living/carbon/george = M + //they can only hold things :( + if(check_access(george.get_active_held_item())) + return TRUE + else if(isanimal(M)) + var/mob/living/simple_animal/A = M + if(check_access(A.get_active_held_item()) || check_access(A.access_card)) + return TRUE + return FALSE + +/obj/item/proc/GetAccess() + return list() + +/obj/item/proc/GetID() + return null + +//Call this before using req_access or req_one_access directly +/obj/proc/gen_access() + //These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system. + if(!src.req_access) + src.req_access = list() + if(src.req_access_txt) + var/list/req_access_str = splittext(req_access_txt,";") + for(var/x in req_access_str) + var/n = text2num(x) + if(n) + req_access += n + + if(!src.req_one_access) + src.req_one_access = list() + if(src.req_one_access_txt) + var/list/req_one_access_str = splittext(req_one_access_txt,";") + for(var/x in req_one_access_str) + var/n = text2num(x) + if(n) + req_one_access += n + +/obj/proc/check_access(obj/item/I) + gen_access() + + if(!istype(src.req_access, /list)) //something's very wrong + return TRUE + + var/list/L = src.req_access + if(!L.len && (!src.req_one_access || !src.req_one_access.len)) //no requirements + return TRUE + if(!I) + return FALSE + for(var/req in src.req_access) + if(!(req in I.GetAccess())) //doesn't have this access + return FALSE + if(src.req_one_access && src.req_one_access.len) + for(var/req in src.req_one_access) + if(req in I.GetAccess()) //has an access from the single access list + return TRUE + return FALSE + return TRUE + + +/obj/proc/check_access_list(list/L) + if(!src.req_access && !src.req_one_access) + return TRUE + if(!istype(src.req_access, /list)) + return TRUE + if(!src.req_access.len && (!src.req_one_access || !src.req_one_access.len)) + return TRUE + if(!L) + return FALSE + if(!istype(L, /list)) + return FALSE + for(var/req in src.req_access) + if(!(req in L)) //doesn't have this access + return FALSE + if(src.req_one_access && src.req_one_access.len) + for(var/req in src.req_one_access) + if(req in L) //has an access from the single access list + return TRUE + return FALSE + return TRUE + +/proc/get_centcom_access(job) + switch(job) + if("VIP Guest") + return list(GLOB.access_cent_general) + if("Custodian") + return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_storage) + if("Thunderdome Overseer") + return list(GLOB.access_cent_general, GLOB.access_cent_thunder) + if("Centcom Official") + return list(GLOB.access_cent_general, GLOB.access_cent_living) + if("Medical Officer") + return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_medical) + if("Death Commando") + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) + if("Research Officer") + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_teleporter, GLOB.access_cent_storage) + if("Special Ops Officer") + return list(GLOB.access_cent_general, GLOB.access_cent_thunder, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) + if("Admiral") + return get_all_centcom_access() + if("Centcom Commander") + return get_all_centcom_access() + if("Emergency Response Team Commander") + return get_ert_access("commander") + if("Security Response Officer") + return get_ert_access("sec") + if("Engineer Response Officer") + return get_ert_access("eng") + if("Medical Response Officer") + return get_ert_access("med") + if("Centcom Bartender") + return list(GLOB.access_cent_general, GLOB.access_cent_living, GLOB.access_cent_bar) + +/proc/get_all_accesses() + return list(GLOB.access_security, GLOB.access_sec_doors, GLOB.access_brig, GLOB.access_armory, GLOB.access_forensics_lockers, GLOB.access_court, + GLOB.access_medical, GLOB.access_genetics, GLOB.access_morgue, GLOB.access_rd, + GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_chemistry, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_maint_tunnels, + GLOB.access_external_airlocks, GLOB.access_change_ids, GLOB.access_ai_upload, + GLOB.access_teleporter, GLOB.access_eva, GLOB.access_heads, GLOB.access_captain, GLOB.access_all_personal_lockers, + GLOB.access_tech_storage, GLOB.access_chapel_office, GLOB.access_atmospherics, GLOB.access_kitchen, + GLOB.access_bar, GLOB.access_janitor, GLOB.access_crematorium, GLOB.access_robotics, GLOB.access_cargo, GLOB.access_construction, + GLOB.access_hydroponics, GLOB.access_library, GLOB.access_lawyer, GLOB.access_virology, GLOB.access_cmo, GLOB.access_qm, GLOB.access_surgery, + GLOB.access_theatre, GLOB.access_research, GLOB.access_mining, GLOB.access_mailsorting, GLOB.access_weapons, + GLOB.access_heads_vault, GLOB.access_mining_station, GLOB.access_xenobiology, GLOB.access_ce, GLOB.access_hop, GLOB.access_hos, GLOB.access_RC_announce, + GLOB.access_keycard_auth, GLOB.access_tcomsat, GLOB.access_gateway, GLOB.access_mineral_storeroom, GLOB.access_minisat, GLOB.access_network, GLOB.access_cloning) + +/proc/get_all_centcom_access() + return list(GLOB.access_cent_general, GLOB.access_cent_thunder, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_living, GLOB.access_cent_storage, GLOB.access_cent_teleporter, GLOB.access_cent_captain) + +/proc/get_ert_access(class) + switch(class) + if("commander") + return get_all_centcom_access() + if("sec") + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living) + if("eng") + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_living, GLOB.access_cent_storage) + if("med") + return list(GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_living) + +/proc/get_all_syndicate_access() + return list(GLOB.access_syndicate, GLOB.access_syndicate) + +/proc/get_region_accesses(code) + switch(code) + if(0) + return get_all_accesses() + if(1) //station general + return list(GLOB.access_kitchen,GLOB.access_bar, GLOB.access_hydroponics, GLOB.access_janitor, GLOB.access_chapel_office, GLOB.access_crematorium, GLOB.access_library, GLOB.access_theatre, GLOB.access_lawyer) + if(2) //security + return list(GLOB.access_sec_doors, GLOB.access_weapons, GLOB.access_security, GLOB.access_brig, GLOB.access_armory, GLOB.access_forensics_lockers, GLOB.access_court, GLOB.access_hos) + if(3) //medbay + return list(GLOB.access_medical, GLOB.access_genetics, GLOB.access_cloning, GLOB.access_morgue, GLOB.access_chemistry, GLOB.access_virology, GLOB.access_surgery, GLOB.access_cmo) + if(4) //research + return list(GLOB.access_research, GLOB.access_tox, GLOB.access_tox_storage, GLOB.access_genetics, GLOB.access_robotics, GLOB.access_xenobiology, GLOB.access_minisat, GLOB.access_rd, GLOB.access_network) + if(5) //engineering and maintenance + return list(GLOB.access_construction, GLOB.access_maint_tunnels, GLOB.access_engine, GLOB.access_engine_equip, GLOB.access_external_airlocks, GLOB.access_tech_storage, GLOB.access_atmospherics, GLOB.access_tcomsat, GLOB.access_minisat, GLOB.access_ce) + if(6) //supply + return list(GLOB.access_mailsorting, GLOB.access_mining, GLOB.access_mining_station, GLOB.access_mineral_storeroom, GLOB.access_cargo, GLOB.access_qm) + if(7) //command + return list(GLOB.access_heads, GLOB.access_RC_announce, GLOB.access_keycard_auth, GLOB.access_change_ids, GLOB.access_ai_upload, GLOB.access_teleporter, GLOB.access_eva, GLOB.access_gateway, GLOB.access_all_personal_lockers, GLOB.access_heads_vault, GLOB.access_hop, GLOB.access_captain) + +/proc/get_region_accesses_name(code) + switch(code) + if(0) + return "All" + if(1) //station general + return "General" + if(2) //security + return "Security" + if(3) //medbay + return "Medbay" + if(4) //research + return "Research" + if(5) //engineering and maintenance + return "Engineering" + if(6) //supply + return "Supply" + if(7) //command + return "Command" + +/proc/get_access_desc(A) + switch(A) + if(GLOB.access_cargo) + return "Cargo Bay" + if(GLOB.access_cargo_bot) + return "Delivery Chutes" + if(GLOB.access_security) + return "Security" + if(GLOB.access_brig) + return "Holding Cells" + if(GLOB.access_court) + return "Courtroom" + if(GLOB.access_forensics_lockers) + return "Forensics" + if(GLOB.access_medical) + return "Medical" + if(GLOB.access_genetics) + return "Genetics Lab" + if(GLOB.access_morgue) + return "Morgue" + if(GLOB.access_tox) + return "R&D Lab" + if(GLOB.access_tox_storage) + return "Toxins Lab" + if(GLOB.access_chemistry) + return "Chemistry Lab" + if(GLOB.access_rd) + return "RD Office" + if(GLOB.access_bar) + return "Bar" + if(GLOB.access_janitor) + return "Custodial Closet" + if(GLOB.access_engine) + return "Engineering" + if(GLOB.access_engine_equip) + return "Power Equipment" + if(GLOB.access_maint_tunnels) + return "Maintenance" + if(GLOB.access_external_airlocks) + return "External Airlocks" + if(GLOB.access_emergency_storage) + return "Emergency Storage" + if(GLOB.access_change_ids) + return "ID Console" + if(GLOB.access_ai_upload) + return "AI Chambers" + if(GLOB.access_teleporter) + return "Teleporter" + if(GLOB.access_eva) + return "EVA" + if(GLOB.access_heads) + return "Bridge" + if(GLOB.access_captain) + return "Captain" + if(GLOB.access_all_personal_lockers) + return "Personal Lockers" + if(GLOB.access_chapel_office) + return "Chapel Office" + if(GLOB.access_tech_storage) + return "Technical Storage" + if(GLOB.access_atmospherics) + return "Atmospherics" + if(GLOB.access_crematorium) + return "Crematorium" + if(GLOB.access_armory) + return "Armory" + if(GLOB.access_construction) + return "Construction" + if(GLOB.access_kitchen) + return "Kitchen" + if(GLOB.access_hydroponics) + return "Hydroponics" + if(GLOB.access_library) + return "Library" + if(GLOB.access_lawyer) + return "Law Office" + if(GLOB.access_robotics) + return "Robotics" + if(GLOB.access_virology) + return "Virology" + if(GLOB.access_cmo) + return "CMO Office" + if(GLOB.access_qm) + return "Quartermaster" + if(GLOB.access_surgery) + return "Surgery" + if(GLOB.access_theatre) + return "Theatre" + if(GLOB.access_manufacturing) + return "Manufacturing" + if(GLOB.access_research) + return "Science" + if(GLOB.access_mining) + return "Mining" + if(GLOB.access_mining_office) + return "Mining Office" + if(GLOB.access_mailsorting) + return "Cargo Office" + if(GLOB.access_mint) + return "Mint" + if(GLOB.access_mint_vault) + return "Mint Vault" + if(GLOB.access_heads_vault) + return "Main Vault" + if(GLOB.access_mining_station) + return "Mining EVA" + if(GLOB.access_xenobiology) + return "Xenobiology Lab" + if(GLOB.access_hop) + return "HoP Office" + if(GLOB.access_hos) + return "HoS Office" + if(GLOB.access_ce) + return "CE Office" + if(GLOB.access_RC_announce) + return "RC Announcements" + if(GLOB.access_keycard_auth) + return "Keycode Auth." + if(GLOB.access_tcomsat) + return "Telecommunications" + if(GLOB.access_gateway) + return "Gateway" + if(GLOB.access_sec_doors) + return "Brig" + if(GLOB.access_mineral_storeroom) + return "Mineral Storage" + if(GLOB.access_minisat) + return "AI Satellite" + if(GLOB.access_weapons) + return "Weapon Permit" + if(GLOB.access_network) + return "Network Access" + if(GLOB.access_cloning) + return "Cloning Room" + +/proc/get_centcom_access_desc(A) + switch(A) + if(GLOB.access_cent_general) + return "Code Grey" + if(GLOB.access_cent_thunder) + return "Code Yellow" + if(GLOB.access_cent_storage) + return "Code Orange" + if(GLOB.access_cent_living) + return "Code Green" + if(GLOB.access_cent_medical) + return "Code White" + if(GLOB.access_cent_teleporter) + return "Code Blue" + if(GLOB.access_cent_specops) + return "Code Black" + if(GLOB.access_cent_captain) + return "Code Gold" + if(GLOB.access_cent_bar) + return "Code Scotch" + +/proc/get_all_jobs() + return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician", + "Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", + "Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", + "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer") + +/proc/get_all_job_icons() //For all existing HUD icons + return get_all_jobs() + list("Prisoner") + +/proc/get_all_centcom_jobs() + return list("VIP Guest","Custodian","Thunderdome Overseer","Centcom Official","Medical Officer","Death Commando","Research Officer","Special Ops Officer","Admiral","Centcom Commander","Emergency Response Team Commander","Security Response Officer","Engineer Response Officer", "Medical Response Officer","Centcom Bartender") + +/obj/item/proc/GetJobName() //Used in secHUD icon generation + var/obj/item/weapon/card/id/I = GetID() + if(!I) + return + var/jobName = I.assignment + if(jobName in get_all_job_icons()) //Check if the job has a hud icon + return jobName + if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a Centcom job + return "Centcom" + return "Unknown" //Return unknown if none of the above apply diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm index a863f983cf..b606000ef4 100644 --- a/code/modules/jobs/job_types/cargo_service.dm +++ b/code/modules/jobs/job_types/cargo_service.dm @@ -277,4 +277,4 @@ Janitor belt = /obj/item/device/pda/janitor ears = /obj/item/device/radio/headset/headset_srv uniform = /obj/item/clothing/under/rank/janitor - backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1, /obj/item/soapstone/empty=1) + backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1) diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 86185e2848..fd01846467 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -1,150 +1,153 @@ -/* -Clown -*/ -/datum/job/clown - title = "Clown" - flag = CLOWN - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/clown - - access = list(GLOB.access_theatre) - minimal_access = list(GLOB.access_theatre) - -/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) - H.rename_self("clown", M.client) - -/datum/outfit/job/clown - name = "Clown" - jobtype = /datum/job/clown - - belt = /obj/item/device/pda/clown - uniform = /obj/item/clothing/under/rank/clown - shoes = /obj/item/clothing/shoes/clown_shoes - mask = /obj/item/clothing/mask/gas/clown_hat - l_pocket = /obj/item/weapon/bikehorn - r_pocket = /obj/item/toy/crayon/rainbow - backpack_contents = list( - /obj/item/weapon/stamp/clown = 1, - /obj/item/weapon/reagent_containers/spray/waterflower = 1, - /obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1, - /obj/item/device/megaphone/clown = 1, - /obj/item/weapon/reagent_containers/food/drinks/soda_cans/canned_laughter = 1 - ) - - implants = list(/obj/item/weapon/implant/sad_trombone) - - backpack = /obj/item/weapon/storage/backpack/clown - satchel = /obj/item/weapon/storage/backpack/clown - dufflebag = /obj/item/weapon/storage/backpack/dufflebag/clown //strangely has a duffle - - box = /obj/item/weapon/storage/box/hug/survival - - -/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - - H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) - -/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - - H.dna.add_mutation(CLOWNMUT) - -/* -Mime -*/ -/datum/job/mime - title = "Mime" - flag = MIME - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/mime - - access = list(GLOB.access_theatre) - minimal_access = list(GLOB.access_theatre) - -/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) - H.rename_self("mime", M.client) - -/datum/outfit/job/mime - name = "Mime" - jobtype = /datum/job/mime - - belt = /obj/item/device/pda/mime - uniform = /obj/item/clothing/under/rank/mime - mask = /obj/item/clothing/mask/gas/mime - gloves = /obj/item/clothing/gloves/color/white - head = /obj/item/clothing/head/beret - suit = /obj/item/clothing/suit/suspenders - backpack_contents = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing=1,\ - /obj/item/toy/crayon/mime=1) - - backpack = /obj/item/weapon/storage/backpack/mime - satchel = /obj/item/weapon/storage/backpack/mime - - -/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - - if(visualsOnly) - return - - if(H.mind) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) - H.mind.miming = 1 - -/* -Librarian -*/ -/datum/job/librarian - title = "Librarian" - flag = LIBRARIAN - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of personnel" - selection_color = "#dddddd" - - outfit = /datum/outfit/job/librarian - - access = list(GLOB.access_library) - minimal_access = list(GLOB.access_library) - -/datum/outfit/job/librarian - name = "Librarian" - jobtype = /datum/job/librarian - - belt = /obj/item/device/pda/librarian - uniform = /obj/item/clothing/under/rank/librarian - l_hand = /obj/item/weapon/storage/bag/books - r_pocket = /obj/item/weapon/barcodescanner - l_pocket = /obj/item/device/laser_pointer - backpack_contents = list( - /obj/item/soapstone = 1 - ) - +/* +Clown +*/ +/datum/job/clown + title = "Clown" + flag = CLOWN + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" -/datum/outfit/job/librarian/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + outfit = /datum/outfit/job/clown + + access = list(GLOB.access_theatre) + minimal_access = list(GLOB.access_theatre) + +/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) + H.rename_self("clown", M.client) + +/datum/outfit/job/clown + name = "Clown" + jobtype = /datum/job/clown + + belt = /obj/item/device/pda/clown + uniform = /obj/item/clothing/under/rank/clown + shoes = /obj/item/clothing/shoes/clown_shoes + mask = /obj/item/clothing/mask/gas/clown_hat + l_pocket = /obj/item/weapon/bikehorn + r_pocket = /obj/item/toy/crayon/rainbow + backpack_contents = list( + /obj/item/weapon/stamp/clown = 1, + /obj/item/weapon/reagent_containers/spray/waterflower = 1, + /obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1, + /obj/item/device/megaphone/clown = 1, + /obj/item/weapon/reagent_containers/food/drinks/soda_cans/canned_laughter = 1, + /obj/item/weapon/pneumatic_cannon/pie = 1 + ) + + implants = list(/obj/item/weapon/implant/sad_trombone) + + backpack = /obj/item/weapon/storage/backpack/clown + satchel = /obj/item/weapon/storage/backpack/clown + dufflebag = /obj/item/weapon/storage/backpack/dufflebag/clown //strangely has a duffle + + box = /obj/item/weapon/storage/box/hug/survival + + +/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + + H.fully_replace_character_name(H.real_name, pick(GLOB.clown_names)) + +/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + + H.dna.add_mutation(CLOWNMUT) + +/* +Mime +*/ +/datum/job/mime + title = "Mime" + flag = MIME + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" + + outfit = /datum/outfit/job/mime + + access = list(GLOB.access_theatre) + minimal_access = list(GLOB.access_theatre) + +/datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) + H.rename_self("mime", M.client) + +/datum/outfit/job/mime + name = "Mime" + jobtype = /datum/job/mime + + belt = /obj/item/device/pda/mime + uniform = /obj/item/clothing/under/rank/mime + mask = /obj/item/clothing/mask/gas/mime + gloves = /obj/item/clothing/gloves/color/white + head = /obj/item/clothing/head/beret + suit = /obj/item/clothing/suit/suspenders + backpack_contents = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing=1,\ + /obj/item/toy/crayon/mime=1) + + backpack = /obj/item/weapon/storage/backpack/mime + satchel = /obj/item/weapon/storage/backpack/mime + + +/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + + if(visualsOnly) + return + + if(H.mind) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) + H.mind.miming = 1 + +/* +Curator +*/ +/datum/job/curator + title = "Curator" + flag = CURATOR + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of personnel" + selection_color = "#dddddd" + + outfit = /datum/outfit/job/curator + + access = list(GLOB.access_library) + minimal_access = list(GLOB.access_library, GLOB.access_construction,GLOB.access_mining_station) + +/datum/outfit/job/curator + name = "Curator" + jobtype = /datum/job/curator + + belt = /obj/item/device/pda/curator + uniform = /obj/item/clothing/under/rank/curator + l_hand = /obj/item/weapon/storage/bag/books + r_pocket = /obj/item/key/displaycase + l_pocket = /obj/item/device/laser_pointer + backpack_contents = list( + /obj/item/weapon/melee/curator_whip = 1, + /obj/item/soapstone = 1, + /obj/item/weapon/barcodescanner = 1 + ) + + +/datum/outfit/job/curator/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() if(visualsOnly) @@ -152,47 +155,47 @@ Librarian H.grant_all_languages(omnitongue=TRUE) -/* -Lawyer -*/ -/datum/job/lawyer - title = "Lawyer" - flag = LAWYER - department_head = list("Head of Personnel") - department_flag = CIVILIAN - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the head of personnel" - selection_color = "#dddddd" - var/lawyers = 0 //Counts lawyer amount - - outfit = /datum/outfit/job/lawyer - - access = list(GLOB.access_lawyer, GLOB.access_court, GLOB.access_sec_doors) - minimal_access = list(GLOB.access_lawyer, GLOB.access_court, GLOB.access_sec_doors) - -/datum/outfit/job/lawyer - name = "Lawyer" - jobtype = /datum/job/lawyer - - belt = /obj/item/device/pda/lawyer - ears = /obj/item/device/radio/headset/headset_sec - uniform = /obj/item/clothing/under/lawyer/bluesuit - suit = /obj/item/clothing/suit/toggle/lawyer - shoes = /obj/item/clothing/shoes/laceup - l_hand = /obj/item/weapon/storage/briefcase/lawyer - l_pocket = /obj/item/device/laser_pointer - r_pocket = /obj/item/clothing/tie/lawyers_badge - - -/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - - var/datum/job/lawyer/J = SSjob.GetJobType(jobtype) - J.lawyers++ - if(J.lawyers>1) - uniform = /obj/item/clothing/under/lawyer/purpsuit - suit = /obj/item/clothing/suit/toggle/lawyer/purple +/* +Lawyer +*/ +/datum/job/lawyer + title = "Lawyer" + flag = LAWYER + department_head = list("Head of Personnel") + department_flag = CIVILIAN + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the head of personnel" + selection_color = "#dddddd" + var/lawyers = 0 //Counts lawyer amount + + outfit = /datum/outfit/job/lawyer + + access = list(GLOB.access_lawyer, GLOB.access_court, GLOB.access_sec_doors) + minimal_access = list(GLOB.access_lawyer, GLOB.access_court, GLOB.access_sec_doors) + +/datum/outfit/job/lawyer + name = "Lawyer" + jobtype = /datum/job/lawyer + + belt = /obj/item/device/pda/lawyer + ears = /obj/item/device/radio/headset/headset_sec + uniform = /obj/item/clothing/under/lawyer/bluesuit + suit = /obj/item/clothing/suit/toggle/lawyer + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/weapon/storage/briefcase/lawyer + l_pocket = /obj/item/device/laser_pointer + r_pocket = /obj/item/clothing/tie/lawyers_badge + + +/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + + var/datum/job/lawyer/J = SSjob.GetJobType(jobtype) + J.lawyers++ + if(J.lawyers>1) + uniform = /obj/item/clothing/under/lawyer/purpsuit + suit = /obj/item/clothing/suit/toggle/lawyer/purple diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index eff50f07ff..2d7caa5fc4 100644 --- a/code/modules/jobs/jobs.dm +++ b/code/modules/jobs/jobs.dm @@ -1,109 +1,109 @@ -GLOBAL_LIST_INIT(command_positions, list( - "Captain", - "Head of Personnel", - "Head of Security", - "Chief Engineer", - "Research Director", - "Chief Medical Officer")) - - -GLOBAL_LIST_INIT(engineering_positions, list( - "Chief Engineer", - "Station Engineer", - "Atmospheric Technician")) - - -GLOBAL_LIST_INIT(medical_positions, list( - "Chief Medical Officer", - "Medical Doctor", - "Geneticist", - "Virologist", - "Chemist")) - - -GLOBAL_LIST_INIT(science_positions, list( - "Research Director", - "Scientist", - "Roboticist")) - - -GLOBAL_LIST_INIT(supply_positions, list( - "Head of Personnel", - "Quartermaster", - "Cargo Technician", - "Shaft Miner")) - - -GLOBAL_LIST_INIT(civilian_positions, list( - "Bartender", - "Botanist", - "Cook", - "Janitor", - "Librarian", - "Lawyer", - "Chaplain", - "Clown", - "Mime", - "Assistant")) - - -GLOBAL_LIST_INIT(security_positions, list( - "Head of Security", - "Warden", - "Detective", - "Security Officer")) - - -GLOBAL_LIST_INIT(nonhuman_positions, list( - "AI", - "Cyborg", - "pAI")) - - -/proc/guest_jobbans(job) - return ((job in GLOB.command_positions) || (job in GLOB.nonhuman_positions) || (job in GLOB.security_positions)) - - - -//this is necessary because antags happen before job datums are handed out, but NOT before they come into existence -//so I can't simply use job datum.department_head straight from the mind datum, laaaaame. -/proc/get_department_heads(var/job_title) - if(!job_title) - return list() - - for(var/datum/job/J in SSjob.occupations) - if(J.title == job_title) - return J.department_head //this is a list - -/proc/get_full_job_name(job) - var/static/regex/cap_expand = new("cap(?!tain)") - var/static/regex/cmo_expand = new("cmo") - var/static/regex/hos_expand = new("hos") - var/static/regex/hop_expand = new("hop") - var/static/regex/rd_expand = new("rd") - var/static/regex/ce_expand = new("ce") - var/static/regex/qm_expand = new("qm") - var/static/regex/sec_expand = new("(?" -/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) - if(!syllables || !syllables.len) - if(gender==FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - - var/full_name = "" - var/new_name = "" - - for(var/i in 0 to name_count) - new_name = "" - var/Y = rand(Floor(syllable_count/syllable_divisor), syllable_count) - for(var/x in Y to 0) - new_name += pick(syllables) - full_name += " [capitalize(lowertext(new_name))]" - - return "[trim(full_name)]" - -/datum/language/proc/scramble(input) - - if(!syllables || !syllables.len) - return stars(input) - - // If the input is cached already, move it to the end of the cache and return it - var/lookup = scramble_cache[input] - if(lookup) - scramble_cache -= input - scramble_cache[input] = lookup - return lookup - - var/input_size = length(input) - var/scrambled_text = "" - var/capitalize = TRUE - - while(length(scrambled_text) < input_size) - var/next = pick(syllables) - if(capitalize) - next = capitalize(next) - capitalize = FALSE - scrambled_text += next - var/chance = rand(100) - if(chance <= sentence_chance) - scrambled_text += ". " - capitalize = TRUE - else if(chance > sentence_chance && chance <= space_chance) - scrambled_text += " " - - scrambled_text = trim(scrambled_text) - var/ending = copytext(scrambled_text, length(scrambled_text)) - if(ending == ".") - scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1) - var/input_ending = copytext(input, input_size) - if(input_ending in list("!","?",".")) - scrambled_text += input_ending - - // Add it to cache, cutting old entries if the list is too long - scramble_cache[input] = scrambled_text - if(scramble_cache.len > SCRAMBLE_CACHE_LEN) - scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) - - return scrambled_text - -/datum/language/proc/get_spoken_verb(msg_end) - switch(msg_end) - if("!") - return exclaim_verb - if("?") - return ask_verb - return speech_verb - -#undef SCRAMBLE_CACHE_LEN +/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) + if(!syllables || !syllables.len) + if(gender==FEMALE) + return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) + else + return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) -/proc/get_language_instance(langtype) - if(!ispath(langtype, /datum/language)) - return + var/full_name = "" + var/new_name = "" - if(!GLOB.language_datums[langtype]) - var/datum/language/langdatum = new langtype - GLOB.language_datums[langtype] = langdatum + for(var/i in 0 to name_count) + new_name = "" + var/Y = rand(Floor(syllable_count/syllable_divisor), syllable_count) + for(var/x in Y to 0) + new_name += pick(syllables) + full_name += " [capitalize(lowertext(new_name))]" - . = GLOB.language_datums[langtype] + return "[trim(full_name)]" + +/datum/language/proc/scramble(input) + + if(!syllables || !syllables.len) + return stars(input) + + // If the input is cached already, move it to the end of the cache and return it + var/lookup = scramble_cache[input] + if(lookup) + scramble_cache -= input + scramble_cache[input] = lookup + return lookup + + var/input_size = length(input) + var/scrambled_text = "" + var/capitalize = TRUE + + while(length(scrambled_text) < input_size) + var/next = pick(syllables) + if(capitalize) + next = capitalize(next) + capitalize = FALSE + scrambled_text += next + var/chance = rand(100) + if(chance <= sentence_chance) + scrambled_text += ". " + capitalize = TRUE + else if(chance > sentence_chance && chance <= space_chance) + scrambled_text += " " + + scrambled_text = trim(scrambled_text) + var/ending = copytext(scrambled_text, length(scrambled_text)) + if(ending == ".") + scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1) + var/input_ending = copytext(input, input_size) + if(input_ending in list("!","?",".")) + scrambled_text += input_ending + + // Add it to cache, cutting old entries if the list is too long + scramble_cache[input] = scrambled_text + if(scramble_cache.len > SCRAMBLE_CACHE_LEN) + scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) + + return scrambled_text + +/datum/language/proc/get_spoken_verb(msg_end) + switch(msg_end) + if("!") + return exclaim_verb + if("?") + return ask_verb + return speech_verb + +#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm new file mode 100644 index 0000000000..84bf984ca9 --- /dev/null +++ b/code/modules/language/language_holder.dm @@ -0,0 +1,132 @@ +/datum/language_holder + var/list/languages = list(/datum/language/common) + var/list/shadow_languages = list() + var/only_speaks_language = null + var/selected_default_language = null + var/datum/language_menu/language_menu + + var/omnitongue = FALSE + var/owner + +/datum/language_holder/New(owner) + src.owner = owner + + languages = typecacheof(languages) + shadow_languages = typecacheof(shadow_languages) + +/datum/language_holder/Destroy() + owner = null + QDEL_NULL(language_menu) + +/datum/language_holder/proc/copy(newowner) + var/datum/language_holder/copy = new(newowner) + copy.languages = src.languages.Copy() + // shadow languages are not copied. + copy.only_speaks_language = src.only_speaks_language + copy.selected_default_language = src.selected_default_language + // language menu is not copied, that's tied to the holder. + copy.omnitongue = src.omnitongue + return copy + +/datum/language_holder/proc/grant_language(datum/language/dt) + languages[dt] = TRUE + +/datum/language_holder/proc/grant_all_languages(omnitongue=FALSE) + for(var/la in GLOB.all_languages) + grant_language(la) + + if(omnitongue) + src.omnitongue = TRUE + +/datum/language_holder/proc/get_random_understood_language() + var/list/possible = list() + for(var/dt in languages) + possible += dt + . = safepick(possible) + +/datum/language_holder/proc/remove_language(datum/language/dt) + languages -= dt + +/datum/language_holder/proc/remove_all_languages() + languages.Cut() + +/datum/language_holder/proc/has_language(datum/language/dt) + if(is_type_in_typecache(dt, languages)) + return LANGUAGE_KNOWN + else + var/atom/movable/AM = get_atom() + var/datum/language_holder/L = AM.get_language_holder(shadow=FALSE) + if(L != src) + if(is_type_in_typecache(dt, L.shadow_languages)) + return LANGUAGE_SHADOWED + return FALSE + +/datum/language_holder/proc/copy_known_languages_from(thing, replace=FALSE) + var/datum/language_holder/other + if(istype(thing, /datum/language_holder)) + other = thing + else if(istype(thing, /atom/movable)) + var/atom/movable/AM = thing + other = AM.get_language_holder() + else if(istype(thing, /datum/mind)) + var/datum/mind/M = thing + other = M.get_language_holder() + + if(replace) + src.remove_all_languages() + + for(var/l in other.languages) + src.grant_language(l) + + +/datum/language_holder/proc/open_language_menu(mob/user) + if(!language_menu) + language_menu = new(src) + language_menu.ui_interact(user) + +/datum/language_holder/proc/get_atom() + if(istype(owner, /atom/movable)) + . = owner + else if(istype(owner, /datum/mind)) + var/datum/mind/M = owner + if(M.current) + . = M.current + +/datum/language_holder/alien + languages = list(/datum/language/xenocommon) + +/datum/language_holder/monkey + languages = list(/datum/language/monkey) + +/datum/language_holder/swarmer + languages = list(/datum/language/swarmer) + +/datum/language_holder/clockmob + languages = list(/datum/language/common, /datum/language/ratvar) + only_speaks_language = /datum/language/ratvar + +/datum/language_holder/construct + languages = list(/datum/language/common, /datum/language/narsie) + only_speaks_language = /datum/language/narsie + +/datum/language_holder/drone + languages = list(/datum/language/common, /datum/language/drone, /datum/language/machine) + only_speaks_language = /datum/language/drone + +/datum/language_holder/drone/syndicate + only_speaks_language = null + +/datum/language_holder/slime + languages = list(/datum/language/common, /datum/language/slime) + +/datum/language_holder/lightbringer + // TODO change to a lightbringer specific sign language + languages = list(/datum/language/slime) + +/datum/language_holder/synthetic + languages = list(/datum/language/common) + shadow_languages = list(/datum/language/machine, /datum/language/draconic) + +/datum/language_holder/universal/New() + ..() + grant_all_languages(omnitongue=TRUE) diff --git a/code/modules/language/language_menu.dm b/code/modules/language/language_menu.dm index 43af26a972..3a30c6c11a 100644 --- a/code/modules/language/language_menu.dm +++ b/code/modules/language/language_menu.dm @@ -1,11 +1,11 @@ /datum/language_menu - var/mob/living/owner + var/datum/language_holder/language_holder -/datum/language_menu/New(new_owner) - owner = new_owner +/datum/language_menu/New(language_holder) + src.language_holder = language_holder /datum/language_menu/Destroy() - owner = null + language_holder = null . = ..() /datum/language_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.language_menu_state) @@ -17,28 +17,38 @@ /datum/language_menu/ui_data(mob/user) var/list/data = list() - var/datum/language/mob_default_language = owner.get_default_language() + var/atom/movable/AM = language_holder.get_atom() + if(isliving(AM)) + data["is_living"] = TRUE + else + data["is_living"] = FALSE data["languages"] = list() - for(var/ld in owner.languages) + for(var/ld in GLOB.all_languages) + var/result = language_holder.has_language(ld) + if(!result) + continue + var/shadow = result == LANGUAGE_SHADOWED var/datum/language/LD = ld var/list/L = list() L["name"] = initial(LD.name) L["desc"] = initial(LD.desc) L["key"] = initial(LD.key) - L["is_default"] = (LD == mob_default_language) - L["can_speak"] = owner.can_speak_in_language(LD) + L["is_default"] = (LD == language_holder.selected_default_language) + L["shadow"] = shadow + if(AM) + L["can_speak"] = AM.can_speak_in_language(LD) data["languages"] += list(L) - if(check_rights_for(user.client, R_ADMIN)) + if(check_rights_for(user.client, R_ADMIN) || isobserver(AM)) data["admin_mode"] = TRUE - data["omnitongue"] = HAS_SECONDARY_FLAG(owner, OMNITONGUE) + data["omnitongue"] = language_holder.omnitongue data["unknown_languages"] = list() - for(var/ld in subtypesof(/datum/language)) - if(owner.has_language(ld)) + for(var/ld in GLOB.all_languages) + if(language_holder.has_language(ld)) continue var/datum/language/LD = ld var/list/L = list() @@ -54,10 +64,11 @@ if(..()) return var/mob/user = usr + var/atom/movable/AM = language_holder.get_atom() var/language_name = params["language_name"] var/datum/language/language_datum - for(var/ld in subtypesof(/datum/language)) + for(var/ld in GLOB.all_languages) var/datum/language/LD = ld if(language_name == initial(LD.name)) language_datum = LD @@ -65,24 +76,27 @@ switch(action) if("select_default") - if(language_datum) - owner.selected_default_language = language_datum + if(language_datum && AM.can_speak_in_language(language_datum)) + language_holder.selected_default_language = language_datum . = TRUE if("grant_language") - if(is_admin && language_datum) - owner.grant_language(language_datum) - message_admins("[key_name_admin(user)] granted the [language_name] language to [key_name_admin(owner)].") - log_admin("[key_name(user)] granted the language [language_name] to [key_name(owner)].") + if((is_admin || isobserver(AM)) && language_datum) + language_holder.grant_language(language_datum) + if(is_admin) + message_admins("[key_name_admin(user)] granted the [language_name] language to [key_name_admin(AM)].") + log_admin("[key_name(user)] granted the language [language_name] to [key_name(AM)].") . = TRUE if("remove_language") - if(is_admin && language_datum) - owner.remove_language(language_datum) - message_admins("[key_name_admin(user)] removed the [language_name] language to [key_name_admin(owner)].") - log_admin("[key_name(user)] removed the language [language_name] to [key_name(owner)].") + if((is_admin || isobserver(AM)) && language_datum) + language_holder.remove_language(language_datum) + if(is_admin) + message_admins("[key_name_admin(user)] removed the [language_name] language to [key_name_admin(AM)].") + log_admin("[key_name(user)] removed the language [language_name] to [key_name(AM)].") . = TRUE if("toggle_omnitongue") - if(is_admin) - TOGGLE_SECONDARY_FLAG(owner, OMNITONGUE) - message_admins("[key_name_admin(user)] [HAS_SECONDARY_FLAG(owner, OMNITONGUE) ? "enabled" : "disabled"] the ability to speak all languages (that they know) of [key_name_admin(owner)].") - log_admin("[key_name(user)] [HAS_SECONDARY_FLAG(owner, OMNITONGUE) ? "enabled" : "disabled"] the ability to speak all languages (that_they know) of [key_name(owner)].") + if(is_admin || isobserver(AM)) + language_holder.omnitongue = !language_holder.omnitongue + if(is_admin) + message_admins("[key_name_admin(user)] [language_holder.omnitongue ? "enabled" : "disabled"] the ability to speak all languages (that they know) of [key_name_admin(AM)].") + log_admin("[key_name(user)] [language_holder.omnitongue ? "enabled" : "disabled"] the ability to speak all languages (that_they know) of [key_name(AM)].") . = TRUE diff --git a/code/modules/language/narsian.dm b/code/modules/language/narsian.dm new file mode 100644 index 0000000000..70966ad880 --- /dev/null +++ b/code/modules/language/narsian.dm @@ -0,0 +1,43 @@ +/datum/language/narsie + name = "Nar-Sian" + desc = "The ancient, blood-soaked, impossibly complex language of Nar-Sian cultists." + speech_verb = "intones" + ask_verb = "inquires" + exclaim_verb = "invokes" + key = "n" + sentence_chance = 8 + space_chance = 95 //very high due to the potential length of each syllable + var/static/list/base_syllables = list( + "h", "v", "c", "e", "g", "d", "r", "n", "h", "o", "p", + "ra", "so", "at", "il", "ta", "gh", "sh", "ya", "te", "sh", "ol", "ma", "om", "ig", "ni", "in", + "sha", "mir", "sas", "mah", "zar", "tok", "lyr", "nqa", "nap", "olt", "val", "qha", + "fwe", "ath", "yro", "eth", "gal", "gib", "bar", "jin", "kla", "atu", "kal", "lig", + "yoka", "drak", "loso", "arta", "weyh", "ines", "toth", "fara", "amar", "nyag", "eske", "reth", "dedo", "btoh", "nikt", "neth", + "kanas", "garis", "uloft", "tarat", "khari", "thnor", "rekka", "ragga", "rfikk", "harfr", "andid", "ethra", "dedol", "totum", + "ntrath", "keriam" + ) //the list of syllables we'll combine with itself to get a larger list of syllables + syllables = list( + "sha", "mir", "sas", "mah", "hra", "zar", "tok", "lyr", "nqa", "nap", "olt", "val", + "yam", "qha", "fel", "det", "fwe", "mah", "erl", "ath", "yro", "eth", "gal", "mud", + "gib", "bar", "tea", "fuu", "jin", "kla", "atu", "kal", "lig", + "yoka", "drak", "loso", "arta", "weyh", "ines", "toth", "fara", "amar", "nyag", "eske", "reth", "dedo", "btoh", "nikt", "neth", "abis", + "kanas", "garis", "uloft", "tarat", "khari", "thnor", "rekka", "ragga", "rfikk", "harfr", "andid", "ethra", "dedol", "totum", + "verbot", "pleggh", "ntrath", "barhah", "pasnar", "keriam", "usinar", "savrae", "amutan", "tannin", "remium", "barada", + "forbici" + ) //the base syllables, which include a few rare ones that won't appear in the mixed syllables + icon_state = "narsie" + default_priority = 10 + +/datum/language/narsie/New() + for(var/syllable in base_syllables) //we only do this once, since there's only ever a single one of each language datum. + for(var/target_syllable in base_syllables) + if(syllable != target_syllable) //don't combine with yourself + if(length(syllable) + length(target_syllable) > 8) //if the resulting syllable would be very long, don't put anything between it + syllables += "[syllable][target_syllable]" + else if(prob(80)) //we'll be minutely different each round. + syllables += "[syllable]'[target_syllable]" + else if(prob(25)) //5% chance of - instead of ' + syllables += "[syllable]-[target_syllable]" + else //15% chance of no ' or - at all + syllables += "[syllable][target_syllable]" + ..() diff --git a/code/modules/language/ratvar.dm b/code/modules/language/ratvarian.dm similarity index 51% rename from code/modules/language/ratvar.dm rename to code/modules/language/ratvarian.dm index cef4a3164e..b924d2fc79 100644 --- a/code/modules/language/ratvar.dm +++ b/code/modules/language/ratvarian.dm @@ -1,14 +1,19 @@ /datum/language/ratvar name = "Ratvarian" desc = "A timeless language full of power and incomprehensible to the unenlightened." - speech_verb = "clinks" - ask_verb = "clunks" - exclaim_verb = "clanks" + var/static/random_speech_verbs = list("clanks", "clinks", "clunks", "clangs") + ask_verb = "requests" + exclaim_verb = "proclaims" + whisper_verb = "imparts" key = "r" default_priority = 10 spans = list(SPAN_ROBOT) - icon_state = "ratvar" /datum/language/ratvar/scramble(var/input) . = text2ratvar(input) + +/datum/language/ratvar/get_spoken_verb(msg_end) + if(!msg_end) + return pick(random_speech_verbs) + return ..() \ No newline at end of file diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm index 4fcd00c5c0..ba14a6f210 100644 --- a/code/modules/library/lib_codex_gigas.dm +++ b/code/modules/library/lib_codex_gigas.dm @@ -1,3 +1,9 @@ +#define PRE_TITLE 1 +#define TITLE 2 +#define SYLLABLE 3 +#define MULTIPLE_SYLLABLE 4 +#define SUFFIX 5 + /obj/item/weapon/book/codex_gigas name = "Codex Gigas" icon_state ="demonomicon" @@ -8,16 +14,14 @@ unique = 1 title = "The codex gigas" var/inUse = 0 - - - - + var/currentName = "" + var/currentSection = PRE_TITLE /obj/item/weapon/book/codex_gigas/attack_self(mob/user) if(is_blind(user)) to_chat(user, "As you are trying to read, you suddenly feel very stupid.") return - if(ismonkey(user)) + if(!user.is_literate()) to_chat(user, "You skim through the book but can't comprehend any of it.") return if(inUse) @@ -27,31 +31,78 @@ if(U.check_acedia()) to_chat(user, "None of this matters, why are you reading this? You put the [title] down.") return - inUse = 1 - var/devilName = copytext(sanitize(input(user, "What infernal being do you wish to research?", "Codex Gigas", null) as text),1,MAX_MESSAGE_LEN) - var/speed = 300 - var/correctness = 85 - var/willpower = 98 - if(U.job in list("Librarian")) // the librarian is both faster, and more accurate than normal crew members at research - speed = 45 + user.visible_message("[user] opens [title] and begins reading intently.") + ask_name(user) + + +/obj/item/weapon/book/codex_gigas/proc/perform_research(mob/user, devilName) + if(!devilName) + user.visible_message("[user] closes [title] without looking anything up.") + return + inUse = TRUE + var/speed = 300 + var/correctness = 85 + if(ishuman(user)) + var/mob/living/carbon/human/U = user + if(U.job in list("Curator")) // the curator is both faster, and more accurate than normal crew members at research + speed = 100 correctness = 100 - willpower = 100 - if(U.job in list("Captain", "Security Officer", "Head of Security", "Detective", "Warden")) - willpower = 99 - if(U.job in list("Clown")) // WHO GAVE THE CLOWN A DEMONOMICON? BAD THINGS WILL HAPPEN! - willpower = 25 correctness -= U.getBrainLoss() *0.5 //Brain damage makes researching hard. speed += U.getBrainLoss() * 3 - user.visible_message("[user] opens [title] and begins reading intently.") - if(do_after(U, speed, 0, U)) - var/usedName = devilName - if(!prob(correctness)) - usedName += "x" - var/datum/devilinfo/devil = devilInfo(usedName, 0) - user << browse("Information on [devilName]


[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.bane]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]", "window=book[window_size != null ? ";size=[window_size]" : ""]") - inUse = 0 - sleep(10) - if(!prob(willpower)) - U.influenceSin() - onclose(user, "book") + if(do_after(user, speed, 0, user)) + var/usedName = devilName + if(!prob(correctness)) + usedName += "x" + var/datum/antagonist/devil/devil = devilInfo(usedName) + display_devil(devil, user, usedName) + sleep(10) + onclose(user, "book") + inUse = FALSE +/obj/item/weapon/book/codex_gigas/proc/display_devil(datum/antagonist/devil/devil, mob/reader, devilName) + reader << browse("Information on [devilName]


[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.bane]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]", "window=book[window_size != null ? ";size=[window_size]" : ""]") + +/obj/item/weapon/book/codex_gigas/proc/ask_name(mob/reader) + ui_interact(reader) + +/obj/item/weapon/book/codex_gigas/ui_act(action, params) + if(..()) + return + if(!action) + return FALSE + if(action == "search") + SStgui.close_uis(src) + addtimer(CALLBACK(src, .proc/perform_research, usr, currentName), 0) + currentName = "" + currentSection = PRE_TITLE + return FALSE + else + currentName += action + var/oldSection = currentSection + if(GLOB.devil_pre_title.Find(action)) + currentSection = TITLE + else if(GLOB.devil_title.Find(action)) + currentSection = SYLLABLE + else if(GLOB.devil_syllable.Find(action)) + if (currentSection>=SYLLABLE) + currentSection = MULTIPLE_SYLLABLE + else + currentSection = SYLLABLE + else if(GLOB.devil_suffix.Find(action)) + currentSection = SUFFIX + else + to_chat(world, "Codex gigas failure [action]") + return currentSection != oldSection + +/obj/item/weapon/book/codex_gigas/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "codex_gigas", name, 450, 450, master_ui, state) + ui.open() + +/obj/item/weapon/book/codex_gigas/ui_data(mob/user) + var/list/data = list() + data["name"]=currentName + data["currentSection"]=currentSection + return data diff --git a/code/modules/library/lib_readme.dm b/code/modules/library/lib_readme.dm index b8a0a42ed6..224c6f8199 100644 --- a/code/modules/library/lib_readme.dm +++ b/code/modules/library/lib_readme.dm @@ -1,61 +1,61 @@ -//******************************* -// -// Library SQL Configuration -// -//******************************* - -// Deprecated! See global.dm for new SQL config vars -/* -#define SQL_ADDRESS "" -#define SQL_DB "" -#define SQL_PORT "3306" -#define SQL_LOGIN "" -#define SQL_PASS "" -*/ - -//******************************* -// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB ) - - -/* - The Library - ------------ - A place for the crew to go, relax, and enjoy a good book. - Aspiring authors can even self publish and, if they're lucky - convince the on-staff Librarian to submit it to the Archives - to be chronicled in history forever - some say even persisting - through alternate dimensions. - - - Written by TLE for /tg/station 13 - Feel free to use this as you like. Some credit would be cool. - Check us out at http://nanotrasen.com/ if you're so inclined. -*/ - -// CONTAINS: - -// Objects: -// - bookcase -// - book -// - barcode scanner -// Machinery: -// - library computer -// - visitor's computer -// - book binder -// - book scanner -// Datum: -// - borrowbook - - -// Ideas for the future -// --------------------- -// - Visitor's computer should be able to search the current in-round library inventory (that the Librarian has stocked and checked in) -// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents. -// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game. -// -- If this gets implemented, allow Librarians to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?). -// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table. -// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Librarian is a useless fuck there are at least a few books around. -// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside. -// - Make books/book cases burn when exposed to flame. -// - Make book binder hackable. -// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource. +//******************************* +// +// Library SQL Configuration +// +//******************************* + +// Deprecated! See global.dm for new SQL config vars +/* +#define SQL_ADDRESS "" +#define SQL_DB "" +#define SQL_PORT "3306" +#define SQL_LOGIN "" +#define SQL_PASS "" +*/ + +//******************************* +// Requires Dantom.DB library ( http://www.byond.com/developer/Dantom/DB ) + + +/* + The Library + ------------ + A place for the crew to go, relax, and enjoy a good book. + Aspiring authors can even self publish and, if they're lucky + convince the on-staff Curator to submit it to the Archives + to be chronicled in history forever - some say even persisting + through alternate dimensions. + + + Written by TLE for /tg/station 13 + Feel free to use this as you like. Some credit would be cool. + Check us out at http://nanotrasen.com/ if you're so inclined. +*/ + +// CONTAINS: + +// Objects: +// - bookcase +// - book +// - barcode scanner +// Machinery: +// - library computer +// - visitor's computer +// - book binder +// - book scanner +// Datum: +// - borrowbook + + +// Ideas for the future +// --------------------- +// - Visitor's computer should be able to search the current in-round library inventory (that the Curator has stocked and checked in) +// -- Give computer other features like an Instant Messenger application, or the ability to edit, save, and print documents. +// - Admin interface directly tied to the Archive DB. Right now there's no way to delete uploaded books in-game. +// -- If this gets implemented, allow Curators to "tag" or "suggest" books to be deleted. The DB ID of the tagged books gets saved to a text file (or another table in the DB maybe?). +// The admin interface would automatically take these IDs and SELECT them all from the DB to be displayed along with a Delete link to drop the row from the table. +// - When the game sets up and the round begins, have it automatically pick random books from the DB to populate the library with. Even if the Curator is a useless fuck there are at least a few books around. +// - Allow books to be "hollowed out" like the Chaplain's Bible, allowing you to store one pocket-sized item inside. +// - Make books/book cases burn when exposed to flame. +// - Make book binder hackable. +// - Books shouldn't print straight from the library computer. Make it synch with a machine like the book binder to print instead. This should consume some sort of resource. diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index 231f5417ab..5efc9c1dd3 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -1,5 +1,5 @@ /obj/item/soapstone - name = "chisel" + name = "soapstone" desc = "Leave informative messages for the crew, including the crew of future shifts!\nEven if out of uses, it can still be used to remove messages.\n(Not suitable for engraving on shuttles, off station or on cats. Side effects may include beatings, bannings and orbital bombardment.)" icon = 'icons/obj/items.dmi' icon_state = "soapstone" @@ -9,36 +9,9 @@ var/tool_speed = 50 var/remaining_uses = 3 - var/non_dull_name - var/w_engrave = "engrave" - var/w_engraving = "engraving" - var/w_chipping = "chipping" - var/w_dull = "dull" - -/obj/item/soapstone/New() +/obj/item/soapstone/Initialize(mapload) . = ..() - random_name() - check_name() // could start empty - -/obj/item/soapstone/proc/random_name() - name = pick("soapstone", "chisel", "chalk", "magic marker") - non_dull_name = name - if(name == "chalk" || name == "magic marker") - desc = replacetext(desc, "engraving", "scribbling") - w_engrave = "scribble" - w_engraving = "scribbling" - w_chipping = "sketching" - if(name == "chalk") - w_dull = "used" - if(name == "magic marker") - w_dull = "empty" - - if(name == "soapstone" || name == "chisel") - desc = replacetext(desc, "scribbling", "engraving") - w_engrave = initial(w_engrave) - w_engraving = initial(w_engraving) - w_chipping = initial(w_chipping) - w_dull = "dull" + check_name() /obj/item/soapstone/examine(mob/user) . = ..() @@ -57,11 +30,11 @@ return if(!good_chisel_message_location(T)) - to_chat(user, "It's not appropriate to [w_engrave] on [T].") + to_chat(user, "It's not appropriate to engrave on [T].") return if(existing_message) - user.visible_message("[user] starts erasing [existing_message].", "You start erasing [existing_message].", "You hear a [w_chipping] sound.") + user.visible_message("[user] starts erasing [existing_message].", "You start erasing [existing_message].", "You hear a chipping sound.") playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) if(do_after(user, tool_speed, target = existing_message)) user.visible_message("[user] erases [existing_message].", "You erase [existing_message][existing_message.creator_key == user.ckey ? ", refunding a use" : ""].") @@ -72,19 +45,19 @@ refund_use() return - var/message = stripped_input(user, "What would you like to [w_engrave]?", "Leave a message") + var/message = stripped_input(user, "What would you like to engrave?", "Leave a message") if(!message) - to_chat(user, "You decide not to [w_engrave] anything.") + to_chat(user, "You decide not to engrave anything.") return if(!target.Adjacent(user) && locate(/obj/structure/chisel_message) in T) to_chat(user, "Someone wrote here before you chose! Find another spot.") return playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) - user.visible_message("[user] starts [w_engraving] a message into [T]...", "You start [w_engraving] a message into [T]...", "You hear a [w_chipping] sound.") + user.visible_message("[user] starts engraving a message into [T]...", "You start engraving a message into [T]...", "You hear a chipping sound.") if(can_use() && do_after(user, tool_speed, target = T) && can_use()) //This looks messy but it's actually really clever! if(!locate(/obj/structure/chisel_message in T)) - user.visible_message("[user] leaves a message for future spacemen!", "You [w_engrave] a message into [T]!", "You hear a [w_chipping] sound.") + user.visible_message("[user] leaves a message for future spacemen!", "You engrave a message into [T]!", "You hear a chipping sound.") playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) var/obj/structure/chisel_message/M = new(T) M.register(user, message) @@ -107,15 +80,16 @@ /obj/item/soapstone/proc/check_name() if(remaining_uses) - name = non_dull_name + // This will mess up RPG loot names, but w/e + name = initial(name) else - name = "[w_dull] [name]" + name = "dull [initial(name)]" /* Persistent engraved messages, etched onto the station turfs to serve as instructions and/or memes for the next generation of spessmen. Limited in location to station_z only. Can be smashed out or exploded, - but only permamently removed with the librarian's soapstone. + but only permamently removed with the curator's soapstone. */ /obj/item/soapstone/infinite @@ -127,10 +101,6 @@ /proc/good_chisel_message_location(turf/T) if(!T) . = FALSE - else if(T.z != ZLEVEL_STATION) - . = FALSE - else if(istype(get_area(T), /area/shuttle)) - . = FALSE else if(!(isfloorturf(T) || iswallturf(T))) . = FALSE else @@ -142,9 +112,8 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "soapstone_message" layer = HIGH_OBJ_LAYER - density = 0 - anchored = 1 - luminosity = 1 + density = FALSE + anchored = TRUE obj_integrity = 30 max_integrity = 30 @@ -157,17 +126,18 @@ var/list/like_keys = list() var/list/dislike_keys = list() -/obj/structure/chisel_message/New(newloc) - ..() + var/turf/original_turf + +/obj/structure/chisel_message/Initialize(mapload) + . = ..() SSpersistence.chisel_messages += src var/turf/T = get_turf(src) + original_turf = T + if(!good_chisel_message_location(T)) persists = FALSE qdel(src) -/obj/structure/chisel_message/singularity_pull() - return - /obj/structure/chisel_message/proc/register(mob/user, newmessage) hidden_message = newmessage creator_name = user.real_name @@ -181,6 +151,8 @@ var/hash = md5(hidden_message) var/newcolor = copytext(hash, 1, 7) add_atom_colour("#[newcolor]", FIXED_COLOUR_PRIORITY) + light_color = "#[newcolor]" + set_light(1) /obj/structure/chisel_message/proc/pack() var/list/data = list() @@ -189,12 +161,12 @@ data["creator_key"] = creator_key data["realdate"] = realdate data["map"] = SSmapping.config.map_name - var/turf/T = get_turf(src) - data["x"] = T.x - data["y"] = T.y - data["z"] = T.z + data["x"] = original_turf.x + data["y"] = original_turf.y + data["z"] = original_turf.z data["like_keys"] = like_keys data["dislike_keys"] = dislike_keys + return data /obj/structure/chisel_message/proc/unpack(list/data) if(!islist(data)) diff --git a/code/modules/lighting/lighting_corner.dm b/code/modules/lighting/lighting_corner.dm index 2f431e884a..c51e7feb7a 100644 --- a/code/modules/lighting/lighting_corner.dm +++ b/code/modules/lighting/lighting_corner.dm @@ -6,8 +6,8 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST)) /datum/lighting_corner - var/list/turf/masters = list() - var/list/datum/light_source/affecting = list() // Light sources affecting us. + var/list/turf/masters + var/list/datum/light_source/affecting // Light sources affecting us. var/active = FALSE // TRUE if one of our masters has dynamic lighting. var/x = 0 @@ -25,11 +25,9 @@ GLOBAL_LIST_INIT(LIGHTING_CORNER_DIAGONAL, list(NORTHEAST, SOUTHEAST, SOUTHWEST, var/cache_b = LIGHTING_SOFT_THRESHOLD var/cache_mx = 0 - var/update_gen = 0 - /datum/lighting_corner/New(var/turf/new_turf, var/diagonal) . = ..() - + masters = list() masters[new_turf] = turn(diagonal, 180) z = new_turf.z diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 369129fc57..b0b0b32285 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -6,6 +6,7 @@ GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects. anchored = TRUE icon = LIGHTING_ICON + icon_state = "transparent" color = LIGHTING_BASE_MATRIX plane = LIGHTING_PLANE mouse_opacity = 0 @@ -16,7 +17,7 @@ GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects. var/needs_update = FALSE -/atom/movable/lighting_object/Initialize(mapload, var/no_update = FALSE) +/atom/movable/lighting_object/Initialize(mapload) . = ..() verbs.Cut() GLOB.all_lighting_objects += src @@ -28,10 +29,8 @@ GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects. for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm S.update_starlight() - if (no_update) - return - - update() + needs_update = TRUE + GLOB.lighting_update_objects += src /atom/movable/lighting_object/Destroy(var/force) if (force) @@ -69,10 +68,17 @@ GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects. // See LIGHTING_CORNER_DIAGONAL in lighting_corner.dm for why these values are what they are. var/static/datum/lighting_corner/dummy/dummy_lighting_corner = new - var/datum/lighting_corner/cr = T.corners[3] || dummy_lighting_corner - var/datum/lighting_corner/cg = T.corners[2] || dummy_lighting_corner - var/datum/lighting_corner/cb = T.corners[4] || dummy_lighting_corner - var/datum/lighting_corner/ca = T.corners[1] || dummy_lighting_corner + + var/list/corners = T.corners + var/datum/lighting_corner/cr = dummy_lighting_corner + var/datum/lighting_corner/cg = dummy_lighting_corner + var/datum/lighting_corner/cb = dummy_lighting_corner + var/datum/lighting_corner/ca = dummy_lighting_corner + if (corners) //done this way for speed + cr = corners[3] || dummy_lighting_corner + cg = corners[2] || dummy_lighting_corner + cb = corners[4] || dummy_lighting_corner + ca = corners[1] || dummy_lighting_corner var/max = max(cr.cache_mx, cg.cache_mx, cb.cache_mx, ca.cache_mx) diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index fe9bdb5609..5086b0c9d2 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -8,6 +8,6 @@ if(!IS_DYNAMIC_LIGHTING(T)) continue - new/atom/movable/lighting_object(T, TRUE) + new/atom/movable/lighting_object(T) CHECK_TICK CHECK_TICK diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 1cf14c3c47..63457a1ce9 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -26,22 +26,15 @@ var/applied = FALSE // Whether we have applied our light yet or not. - var/vis_update // Whether we should smartly recalculate visibility. and then only update tiles that became (in)visible to us. - var/needs_update // Whether we are queued for an update. - var/force_update + var/needs_update = LIGHTING_NO_UPDATE // Whether we are queued for an update. + /datum/light_source/New(var/atom/owner, var/atom/top) source_atom = owner // Set our new owner. - if (!source_atom.light_sources) - source_atom.light_sources = list() - - source_atom.light_sources += src // Add us to the lights of our owner. + LAZYADD(source_atom.light_sources, src) top_atom = top if (top_atom != source_atom) - if (!top.light_sources) - top.light_sources = list() - - top_atom.light_sources += src + LAZYADD(top_atom.light_sources, src) source_turf = top_atom pixel_turf = get_turf_pixel(top_atom) || source_turf @@ -52,20 +45,18 @@ parse_light_color() - effect_str = list() - affecting_turfs = list() - update() return ..() /datum/light_source/Destroy(force) - force_update() + remove_lum() if (source_atom) - source_atom.light_sources -= src + LAZYREMOVE(source_atom.light_sources, src) if (top_atom) - top_atom.light_sources -= src + LAZYREMOVE(top_atom.light_sources, src) + . = ..() if(!force) return QDEL_HINT_IWILLGC @@ -73,79 +64,34 @@ // Yes this doesn't align correctly on anything other than 4 width tabs. // If you want it to go switch everybody to elastic tab stops. // Actually that'd be great if you could! -#define EFFECT_UPDATE \ - if (!needs_update) \ - { \ - GLOB.lighting_update_lights += src; \ - needs_update = TRUE; \ - } +#define EFFECT_UPDATE(level) \ + if (needs_update == LIGHTING_NO_UPDATE) \ + GLOB.lighting_update_lights += src; \ + if (needs_update < level) \ + needs_update = level; \ + // This proc will cause the light source to update the top atom, and add itself to the update queue. /datum/light_source/proc/update(var/atom/new_top_atom) // This top atom is different. if (new_top_atom && new_top_atom != top_atom) if(top_atom != source_atom && top_atom.light_sources) // Remove ourselves from the light sources of that top atom. - top_atom.light_sources -= src + LAZYREMOVE(top_atom.light_sources, src) top_atom = new_top_atom if (top_atom != source_atom) LAZYADD(top_atom.light_sources, src) // Add ourselves to the light sources of our new top atom. - EFFECT_UPDATE + EFFECT_UPDATE(LIGHTING_CHECK_UPDATE) // Will force an update without checking if it's actually needed. /datum/light_source/proc/force_update() - force_update = 1 - - EFFECT_UPDATE + EFFECT_UPDATE(LIGHTING_FORCE_UPDATE) // Will cause the light source to recalculate turfs that were removed or added to visibility only. /datum/light_source/proc/vis_update() - vis_update = 1 - - EFFECT_UPDATE - -// Will check if we actually need to update, and update any variables that may need to be updated. -/datum/light_source/proc/check() - if (!source_atom || !light_range || !light_power) - qdel(src) - return 1 - - if (!top_atom) - top_atom = source_atom - . = 1 - - if (isturf(top_atom)) - if (source_turf != top_atom) - source_turf = top_atom - pixel_turf = source_turf - . = 1 - else if (top_atom.loc != source_turf) - source_turf = top_atom.loc - pixel_turf = get_turf_pixel(top_atom) - . = 1 - else - var/P = get_turf_pixel(top_atom) - if (P != pixel_turf) - . = 1 - pixel_turf = get_turf_pixel(top_atom) - - if (source_atom.light_power != light_power) - light_power = source_atom.light_power - . = 1 - - if (source_atom.light_range != light_range) - light_range = source_atom.light_range - . = 1 - - if (light_range && light_power && !applied) - . = 1 - - if (source_atom.light_color != light_color) - light_color = source_atom.light_color - parse_light_color() - . = 1 + EFFECT_UPDATE(LIGHTING_VIS_UPDATE) // Decompile the hexadecimal colour into lumcounts of each perspective. /datum/light_source/proc/parse_light_color() @@ -164,48 +110,47 @@ // As such this all gets counted as a single line. // The braces and semicolons are there to be able to do this on a single line. #define LUM_FALLOFF(C, T) (1 - CLAMP01(sqrt((C.x - T.x) ** 2 + (C.y - T.y) ** 2 + LIGHTING_HEIGHT) / max(1, light_range))) -#define APPLY_CORNER(C) \ - . = LUM_FALLOFF(C, pixel_turf); \ - \ - . *= light_power; \ - \ - effect_str[C] = .; \ - \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ + +#define APPLY_CORNER(C) \ + . = LUM_FALLOFF(C, pixel_turf); \ + . *= light_power; \ + var/OLD = effect_str[C]; \ + \ + effect_str[C] = .; \ + \ + C.update_lumcount \ + ( \ + (. * lum_r) - (OLD * applied_lum_r), \ + (. * lum_g) - (OLD * applied_lum_g), \ + (. * lum_b) - (OLD * applied_lum_b) \ ); -// I don't need to explain what this does, do I? -#define REMOVE_CORNER(C) \ - . = -effect_str[C]; \ - C.update_lumcount \ - ( \ - . * applied_lum_r, \ - . * applied_lum_g, \ - . * applied_lum_b \ + +#define REMOVE_CORNER(C) \ + . = -effect_str[C]; \ + C.update_lumcount \ + ( \ + . * applied_lum_r, \ + . * applied_lum_g, \ + . * applied_lum_b \ ); // This is the define used to calculate falloff. - +/* /datum/light_source/proc/apply_lum() var/static/update_gen = 1 applied = 1 // Keep track of the last applied lum values so that the lighting can be reversed - applied_lum_r = lum_r - applied_lum_g = lum_g - applied_lum_b = lum_b var/thing var/datum/lighting_corner/C + var/corners = list() + LAZYINITLIST(effect_str) FOR_DVIEW(var/turf/T, light_range+1, source_turf, INVISIBILITY_LIGHTING) - if (!T.lighting_corners_initialised) - T.generate_missing_corners() + var/list/turf_corners = T.get_corners() - for (thing in T.get_corners()) + for (thing in turf_corners) C = thing if (C.update_gen == update_gen) continue @@ -220,9 +165,13 @@ APPLY_CORNER(C) LAZYADD(T.affecting_lights, src) - affecting_turfs += T + LAZYADD(affecting_turfs, T) FOR_DVIEW_END update_gen++ + applied_lum_r = lum_r + applied_lum_g = lum_g + applied_lum_b = lum_b +*/ /datum/light_source/proc/remove_lum() applied = FALSE @@ -231,7 +180,7 @@ var/turf/T = thing LAZYREMOVE(T.affecting_lights, src) - affecting_turfs.Cut() + affecting_turfs = null var/datum/lighting_corner/C for (thing in effect_str) @@ -240,30 +189,93 @@ LAZYREMOVE(C.affecting, src) - effect_str.Cut() + effect_str = null /datum/light_source/proc/recalc_corner(var/datum/lighting_corner/C) - if (effect_str.Find(C)) // Already have one. + LAZYINITLIST(effect_str) + if (effect_str[C]) // Already have one. REMOVE_CORNER(C) + effect_str[C] = 0 APPLY_CORNER(C) + UNSETEMPTY(effect_str) + +/datum/light_source/proc/update_corners() + var/update = FALSE + + if (!source_atom || QDELETED(source_atom)) + qdel(src) + return + + if (source_atom.light_power != light_power) + light_power = source_atom.light_power + update = TRUE + + if (source_atom.light_range != light_range) + light_range = source_atom.light_range + update = TRUE + + if (!top_atom) + top_atom = source_atom + update = TRUE + + if (!light_range || !light_power) + qdel(src) + return + + if (isturf(top_atom)) + if (source_turf != top_atom) + source_turf = top_atom + pixel_turf = source_turf + update = TRUE + else if (top_atom.loc != source_turf) + source_turf = top_atom.loc + pixel_turf = get_turf_pixel(top_atom) + update = TRUE + else + var/P = get_turf_pixel(top_atom) + if (P != pixel_turf) + pixel_turf = P + update = TRUE + + if (!isturf(source_turf)) + if (applied) + remove_lum() + return + + if (light_range && light_power && !applied) + update = TRUE + + if (source_atom.light_color != light_color) + light_color = source_atom.light_color + parse_light_color() + update = TRUE + + else if (applied_lum_r != lum_r || applied_lum_g != lum_g || applied_lum_b != lum_b) + update = TRUE + + if (update) + needs_update = LIGHTING_CHECK_UPDATE + applied = TRUE + else if (needs_update == LIGHTING_CHECK_UPDATE) + return //nothing's changed -/datum/light_source/proc/smart_vis_update() var/list/datum/lighting_corner/corners = list() var/list/turf/turfs = list() var/thing var/datum/lighting_corner/C var/turf/T + if (source_turf) + var/oldlum = source_turf.luminosity + source_turf.luminosity = Ceiling(light_range) + for(T in view(Ceiling(light_range), source_turf)) + for (thing in T.get_corners(source_turf)) + C = thing + corners[C] = 0 + turfs += T + source_turf.luminosity = oldlum - FOR_DVIEW(T, light_range+1, source_turf, 0) - if (!T.lighting_corners_initialised) - T.generate_missing_corners() - for (thing in T.get_corners(source_turf)) - C = thing - corners[C] = 0 - turfs += T - FOR_DVIEW_END - + LAZYINITLIST(affecting_turfs) var/list/L = turfs - affecting_turfs // New turfs, add us to the affecting lights of them. affecting_turfs += L for (thing in L) @@ -276,22 +288,45 @@ T = thing LAZYREMOVE(T.affecting_lights, src) + LAZYINITLIST(effect_str) + if (needs_update == LIGHTING_VIS_UPDATE) + for (thing in corners - effect_str) // New corners + C = thing + LAZYADD(C.affecting, src) + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + else + L = corners - effect_str + for (thing in L) // New corners + C = thing + LAZYADD(C.affecting, src) + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) + for (thing in corners - L) // Existing corners + C = thing + if (!C.active) + effect_str[C] = 0 + continue + APPLY_CORNER(C) - for (thing in corners - effect_str) // New corners - C = thing - LAZYADD(C.affecting, src) - if (!C.active) - effect_str[C] = 0 - continue - - APPLY_CORNER(C) - - for (thing in effect_str - corners) // Old, now gone, corners. + L = effect_str - corners + for (thing in L) // Old, now gone, corners. C = thing REMOVE_CORNER(C) LAZYREMOVE(C.affecting, src) - effect_str -= C + effect_str -= L + + applied_lum_r = lum_r + applied_lum_g = lum_g + applied_lum_b = lum_b + + UNSETEMPTY(effect_str) + UNSETEMPTY(affecting_turfs) #undef EFFECT_UPDATE #undef LUM_FALLOFF diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 65b1ec2615..ca6866c48e 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -33,7 +33,7 @@ return var/area/A = loc - if (!IS_DYNAMIC_LIGHTING(A)) + if (!IS_DYNAMIC_LIGHTING(A) && !light_sources) return if (!lighting_corners_initialised) @@ -113,12 +113,18 @@ lighting_clear_overlay() /turf/proc/get_corners() + if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + return null + if (!lighting_corners_initialised) + generate_missing_corners() if (has_opaque_atom) return null // Since this proc gets used in a for loop, null won't be looped though. return corners /turf/proc/generate_missing_corners() + if (!IS_DYNAMIC_LIGHTING(src) && !light_sources) + return lighting_corners_initialised = TRUE if (!corners) corners = list(null, null, null, null) diff --git a/code/modules/mapping/ruins.dm b/code/modules/mapping/ruins.dm index 81c0a7e54d..f4824a96a2 100644 --- a/code/modules/mapping/ruins.dm +++ b/code/modules/mapping/ruins.dm @@ -20,7 +20,7 @@ if(ruins && ruins.len) ruin = ruins[pick(ruins)] else - world.log << "Ruin loader had no ruins to pick from with [budget] left to spend." + log_world("Ruin loader had no ruins to pick from with [budget] left to spend.") break // Can we afford it if(ruin.cost > budget) @@ -47,7 +47,7 @@ if(!valid) continue - world.log << "Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])" + log_world("Ruin \"[ruin.name]\" placed at ([T.x], [T.y], [T.z])") var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) R.Load(ruins,ruin) @@ -57,7 +57,7 @@ break if(!overall_sanity) - world.log << "Ruin loader gave up with [budget] left to spend." + log_world("Ruin loader gave up with [budget] left to spend.") /obj/effect/ruin_loader diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 6b1179a585..4999f796c5 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -10,7 +10,7 @@ desc = "It's watching you suspiciously." /obj/structure/closet/crate/necropolis/tendril/PopulateContents() - var/loot = rand(1,25) + var/loot = rand(1,26) switch(loot) if(1) new /obj/item/device/shared_storage/red(src) @@ -33,7 +33,7 @@ if(9) new /obj/item/organ/brain/alien(src) if(10) - new /obj/item/organ/heart/cursed(src) + new /obj/item/organ/heart/cursed/wizard(src) if(11) new /obj/item/ship_in_a_bottle(src) if(12) @@ -65,6 +65,8 @@ new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src) if(25) new /obj/item/weapon/spellbook/oneuse/summonitem(src) + if(26) + new /obj/item/book_of_babel(src) @@ -343,6 +345,24 @@ add_fingerprint(usr) + + +//Book of Babel + +/obj/item/book_of_babel + name = "Book of Babel" + desc = "An ancient tome written in countless tongues." + icon = 'icons/obj/library.dmi' + icon_state = "book1" + w_class = 2 + +/obj/item/book_of_babel/attack_self(mob/user) + to_chat(user, "You flip through the pages of the book, quickly and conveniently learning every language in existence. Somewhat less conveniently, the aging book crumbles to dust in the process. Whoops.") + user.grant_all_languages(omnitongue=TRUE) + new /obj/effect/decal/cleanable/ash(get_turf(user)) + qdel(src) + + //Boat /obj/vehicle/lavaboat diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index d93bcb5028..ee60463d04 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -23,6 +23,7 @@ var/list/ore_buffer = list() var/datum/material_container/materials var/datum/research/files + var/obj/item/weapon/disk/design_disk/inserted_disk /obj/machinery/mineral/ore_redemption/Initialize() . = ..() @@ -73,18 +74,18 @@ if(!material_amount) qdel(O) //no materials, incinerate it - else if(!materials.has_space(material_amount)) //if there is no space, eject it + else if(!materials.has_space(material_amount * sheet_per_ore)) //if there is no space, eject it unload_mineral(O) else - materials.insert_item(O) //insert it + materials.insert_item(O, sheet_per_ore) //insert it qdel(O) /obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D) if(D.make_reagents.len) return 0 - var/build_amount = 1 + var/build_amount = 0 for(var/mat_id in D.materials) var/M = D.materials[mat_id] @@ -93,7 +94,15 @@ if(!M || !redemption_mat) return 0 - build_amount = min(build_amount, round(redemption_mat.amount / M)) + var/smeltable_sheets = round(redemption_mat.amount / M) + + if(!smeltable_sheets) + return 0 + + if(!build_amount) + build_amount = smeltable_sheets + + build_amount = min(build_amount, smeltable_sheets) return build_amount @@ -152,6 +161,7 @@ if(exchange_parts(user, W)) return if(default_pry_open(W)) + materials.retrieve_all() return if(default_unfasten_wrench(user, W)) return @@ -179,6 +189,11 @@ to_chat(user, "You change [src]'s I/O settings, setting the input to [dir2text(input_dir)] and the output to [dir2text(output_dir)].") return + if(istype(W, /obj/item/weapon/disk/design_disk)) + if(user.transferItemToLoc(W, src)) + inserted_disk = W + return TRUE + return ..() /obj/machinery/mineral/ore_redemption/on_deconstruction() @@ -210,6 +225,8 @@ else dat += "Release
" + dat += "
Alloys:
" + for(var/v in files.known_designs) var/datum/design/D = files.known_designs[v] if(can_smelt_alloy(D)) @@ -219,6 +236,20 @@ dat += "
Mineral Value List:
[get_ore_values()]
" + if(inserted_disk) + dat += "Eject disk
" + dat += "
Uploadable designs:
" + + for(var/i in 1 to inserted_disk.max_blueprints) + if(inserted_disk.blueprints[i]) + var/datum/design/D = inserted_disk.blueprints[i] + if(D.build_type & SMELTER) + dat += "Name: [D.name] Upload to smelter" + + dat += "

" + else + dat += "Insert design disk

" + var/datum/browser/popup = new(user, "ore_redemption_machine", "Ore Redemption Machine", 400, 500) popup.set_content(dat) popup.open() @@ -248,12 +279,26 @@ else if(href_list["insert_id"]) var/obj/item/weapon/card/id/I = usr.get_active_held_item() if(istype(I)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(I,src)) return - I.forceMove(src) inserted_id = I else to_chat(usr, "Not a valid ID!") + if(href_list["eject_disk"]) + if(inserted_disk) + inserted_disk.forceMove(loc) + inserted_disk = null + if(href_list["insert_disk"]) + var/obj/item/weapon/disk/design_disk/D = usr.get_active_held_item() + if(istype(D)) + if(!usr.transferItemToLoc(D,src)) + return + inserted_disk = D + if(href_list["upload"]) + var/n = text2num(href_list["upload"]) + if(inserted_disk && inserted_disk.blueprints && inserted_disk.blueprints[n]) + files.AddDesign2Known(inserted_disk.blueprints[n]) + if(href_list["release"]) if(check_access(inserted_id) || allowed(usr)) //Check the ID inside, otherwise check the user var/mat_id = href_list["release"] diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 0d651518b7..ae0ad90dfe 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -193,9 +193,7 @@ qdel(voucher) /obj/machinery/mineral/equipment_vendor/ex_act(severity, target) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, TRUE, src) if(prob(50 / severity) && severity < 3) qdel(src) @@ -214,11 +212,10 @@ new /datum/data/mining_equipment("Monkey Cube", /obj/item/weapon/reagent_containers/food/snacks/monkeycube, 300), new /datum/data/mining_equipment("Toolbelt", /obj/item/weapon/storage/belt/utility, 350), new /datum/data/mining_equipment("Sulphuric Acid", /obj/item/weapon/reagent_containers/glass/beaker/sulphuric, 500), - new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), new /datum/data/mining_equipment("Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1700), new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/weapon/storage/box/rndboards, 2000), - + new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/weapon/bedsheet/rd/royal_cape, 500) ) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem(null) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 2bb438639b..d15896a8db 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -278,8 +278,8 @@ var/turf/T = deploy_location if(T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND)//only report capsules away from the mining/lavaland level - message_admins("[key_name_admin(usr)] (?) (FLW) activated a bluespace capsule away from the mining level! (JMP)") - log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]") + message_admins("[ADMIN_LOOKUPFLW(usr)] activated a bluespace capsule away from the mining level! [ADMIN_JMP(T)]") + log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [get_area(T)][COORD(T)]") template.load(deploy_location, centered = TRUE) new /obj/effect/particle_effect/smoke(get_turf(src)) qdel(src) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 1e7f01d7a3..b1ba6680c2 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -248,18 +248,18 @@ if(notify_admins) if(triggered_by == 1) - message_admins("An explosion has triggered a [name] to detonate at [A.name] (JMP).") + message_admins("An explosion has triggered a [name] to detonate at [ADMIN_COORDJMP(bombturf)].") else if(triggered_by == 2) - message_admins("A signal has triggered a [name] to detonate at [A.name] (JMP). Igniter attacher: [key_name_admin(attacher)]? (FLW)") + message_admins("A signal has triggered a [name] to detonate at [ADMIN_COORDJMP(bombturf)]. Igniter attacher: [ADMIN_LOOKUPFLW(attacher)]") else - message_admins("[key_name_admin(user)]? (FLW) has triggered a [name] to detonate at [A.name] (JMP).") + message_admins("[ADMIN_LOOKUPFLW(attacher)] has triggered a [name] to detonate at [ADMIN_COORDJMP(bombturf)].") if(triggered_by == 1) - log_game("An explosion has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") + log_game("An explosion has primed a [name] for detonation at [A][COORD(bombturf)]") else if(triggered_by == 2) - log_game("A signal has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z]). Igniter attacher: [key_name(attacher)].") + log_game("A signal has primed a [name] for detonation at [A][COORD(bombturf)]. Igniter attacher: [key_name(attacher)].") else user.visible_message("[user] strikes \the [src], causing a chain reaction!", "You strike \the [src], causing a chain reaction.") - log_game("[key_name(user)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") + log_game("[key_name(user)] has primed a [name] for detonation at [A][COORD(bombturf)]") spawn(det_time) if(primed) if(quality == 3) diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 666222aa27..45a64bbfde 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -1,42 +1,51 @@ //Dead mobs can exist whenever. This is needful -INITIALIZE_IMMEDIATE(/mob/dead) - -/mob/dead/Initialize() - . = ..() - if(config.cross_allowed) - verbs += /mob/dead/proc/server_hop + INITIALIZE_IMMEDIATE(/mob/dead) -/mob/dead/dust() //ghosts can't be vaporised. - return - -/mob/dead/gib() //ghosts can't be gibbed. - return + /mob/dead/Initialize() + if(initialized) + stack_trace("Warning: [src]([type]) initialized multiple times!") + initialized = TRUE + tag = "mob_[next_mob_id++]" + GLOB.mob_list += src -/mob/dead/ConveyorMove() //lol - return + prepare_huds() + + if(config.cross_allowed) + verbs += /mob/dead/proc/server_hop + return INITIALIZE_HINT_NORMAL + + /mob/dead/dust() //ghosts can't be vaporised. + return + + /mob/dead/gib() //ghosts can't be gibbed. + return + + /mob/dead/ConveyorMove() //lol + return -/mob/dead/proc/server_hop() - set category = "OOC" - set name = "Server Hop!" - set desc= "Jump to the other server" - if(notransform) - return - if(!config.cross_allowed) - verbs -= /mob/dead/proc/server_hop - to_chat(src, "Server Hop has been disabled.") - return - if (alert(src, "Jump to server running at [config.cross_address]?", "Server Hop", "Yes", "No") != "Yes") - return 0 - if (client && config.cross_allowed) - to_chat(src, "Sending you to [config.cross_address].") - new /obj/screen/splash(client) - notransform = TRUE - sleep(29) //let the animation play - notransform = FALSE - winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources - client << link(config.cross_address + "?server_hop=[key]") - else - to_chat(src, "There is no other server configured!") + /mob/dead/proc/server_hop() + set category = "OOC" + set name = "Server Hop!" + set desc= "Jump to the other server" + if(notransform) + return + if(!config.cross_allowed) + verbs -= /mob/dead/proc/server_hop + to_chat(src, "Server Hop has been disabled.") + return + if (alert(src, "Jump to server running at [config.cross_address]?", "Server Hop", "Yes", "No") != "Yes") + return 0 + if (client && config.cross_allowed) + to_chat(src, "Sending you to [config.cross_address].") + new /obj/screen/splash(client) + notransform = TRUE + sleep(29) //let the animation play + notransform = FALSE + winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources + client << link(config.cross_address + "?server_hop=[key]") + else + to_chat(src, "There is no other server configured!") + \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index bc00dc395a..e3943d07e6 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -16,12 +16,6 @@ var/mob/living/new_character //for instant transfer once the round is set up /mob/dead/new_player/Initialize() - if(initialized) - stack_trace("Warning: [src]([type]) initialized multiple times!") - initialized = TRUE - tag = "mob_[next_mob_id++]" - GLOB.mob_list += src - if(client && SSticker.state == GAME_STATE_STARTUP) var/obj/screen/splash/S = new(client, TRUE, TRUE) S.Fade(TRUE) @@ -30,7 +24,10 @@ loc = pick(GLOB.newplayer_start) else loc = locate(1,1,1) - return INITIALIZE_HINT_NORMAL + . = ..() + +/mob/dead/new_player/prepare_huds() + return /mob/dead/new_player/proc/new_player_panel() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7f2c6d6485..0599aaaa8a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -54,7 +54,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/deadchat_name /mob/dead/observer/Initialize() - invisibility = GLOB.observer_default_invisibility + set_invisibility(GLOB.observer_default_invisibility) verbs += /mob/dead/observer/proc/dead_tele @@ -117,28 +117,31 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) animate(src, pixel_y = 2, time = 10, loop = -1) - grant_all_languages() + + GLOB.dead_mob_list += src + ..() + grant_all_languages() + /mob/dead/observer/narsie_act() var/old_color = color color = "#960000" - animate(src, color = old_color, time = 10) + animate(src, color = old_color, time = 10, flags = ANIMATION_PARALLEL) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10) /mob/dead/observer/ratvar_act() var/old_color = color color = "#FAE48C" - animate(src, color = old_color, time = 10) + animate(src, color = old_color, time = 10, flags = ANIMATION_PARALLEL) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10) +/mob/dead/observer/Destroy() GLOB.ghost_images_default -= ghostimage_default - qdel(ghostimage_default) - ghostimage_default = null + QDEL_NULL(ghostimage_default) GLOB.ghost_images_simple -= ghostimage_simple - qdel(ghostimage_simple) - ghostimage_simple = null + QDEL_NULL(ghostimage_simple) updateallghostimages() return ..() @@ -269,25 +272,24 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) if(updatedir) - setDir(direct )//only update dir if we actually need it, so overlays won't spin on base sprites that don't have directions of their own + setDir(direct)//only update dir if we actually need it, so overlays won't spin on base sprites that don't have directions of their own + var/oldloc = loc + if(NewLoc) loc = NewLoc - for(var/obj/effect/step_trigger/S in NewLoc) - S.Crossed(src) update_parallax_contents() - return - loc = get_turf(src) //Get out of closets and such as a ghost - if((direct & NORTH) && y < world.maxy) - y++ - else if((direct & SOUTH) && y > 1) - y-- - if((direct & EAST) && x < world.maxx) - x++ - else if((direct & WEST) && x > 1) - x-- + else + loc = get_turf(src) //Get out of closets and such as a ghost + if((direct & NORTH) && y < world.maxy) + y++ + else if((direct & SOUTH) && y > 1) + y-- + if((direct & EAST) && x < world.maxx) + x++ + else if((direct & WEST) && x > 1) + x-- - for(var/obj/effect/step_trigger/S in locate(x, y, z)) //<-- this is dumb - S.Crossed(src) + Moved(oldloc, direct) /mob/dead/observer/is_active() return 0 @@ -296,9 +298,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ..() if(statpanel("Status")) if(SSticker.HasRoundStarted()) - for(var/datum/gang/G in SSticker.mode.gangs) - if(G.is_dominating) - stat(null, "[G.name] Gang Takeover: [max(G.domination_time_remaining(), 0)]") if(istype(SSticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/B = SSticker.mode if(B.message_sent) @@ -787,13 +786,25 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!invisibility) to_chat(user, "It seems extremely obvious.") +/mob/dead/observer/proc/set_invisibility(value) + invisibility = value + if(!value) + set_light(1, 2) + else + set_light(0, 0) + // Ghosts have no momentum, being massless ectoplasm /mob/dead/observer/Process_Spacemove(movement_dir) return 1 +/mob/dead/observer/vv_edit_var(var_name, var_value) + . = ..() + if(var_name == "invisibility") + set_invisibility(invisibility) // updates light + /proc/set_observer_default_invisibility(amount, message=null) for(var/mob/dead/observer/G in GLOB.player_list) - G.invisibility = amount + G.set_invisibility(amount) if(message) to_chat(G, message) GLOB.observer_default_invisibility = amount diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index ca380170f7..908d787a7b 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -31,8 +31,23 @@ if(bodytemperature >= 225 && !(disabilities & NOCLONE)) //cryosleep or husked people do not pump the blood. //Blood regeneration if there is some space - if(blood_volume < BLOOD_VOLUME_NORMAL) - blood_volume += 0.1 // regenerate blood VERY slowly + if(blood_volume < BLOOD_VOLUME_NORMAL && !(NOHUNGER in dna.species.species_traits)) + var/nutrition_ratio = 0 + switch(nutrition) + if(0 to NUTRITION_LEVEL_STARVING) + nutrition_ratio = 0.2 + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) + nutrition_ratio = 0.4 + if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) + nutrition_ratio = 0.6 + if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) + nutrition_ratio = 0.8 + else + nutrition_ratio = 1 + if(satiety > 80) + nutrition_ratio *= 1.25 + nutrition = max(0, nutrition - nutrition_ratio * HUNGER_FACTOR) + blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio) //Effects of bloodloss switch(blood_volume) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 6247083747..9cad58c201 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -31,13 +31,10 @@ else icon_state = "mmi_empty" -/obj/item/device/mmi/New() - ..() +/obj/item/device/mmi/Initialize() + . = ..() radio = new(src) //Spawns a radio inside the MMI. radio.broadcasting = 0 //researching radio mmis turned the robofabs into radios because this didnt start as 0. - -/obj/item/device/mmi/Initialize() - ..() laws.set_laws_config() /obj/item/device/mmi/attackby(obj/item/O, mob/user, params) diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 1f74ed1917..11700b7638 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -1,5 +1,3 @@ - - /mob/living/brain var/obj/item/device/mmi/container = null var/timeofhostdeath = 0 diff --git a/code/modules/mob/living/brain/say.dm b/code/modules/mob/living/brain/say.dm index 5751c65b36..0cfbf5d170 100644 --- a/code/modules/mob/living/brain/say.dm +++ b/code/modules/mob/living/brain/say.dm @@ -27,10 +27,9 @@ message = capitalize(message) return message -/mob/living/brain/can_speak_in_language(datum/language/dt) - if(HAS_SECONDARY_FLAG(src, OMNITONGUE)) - . = has_language(dt) - else if(istype(container, /obj/item/device/mmi/posibrain/soul_vessel)) - . = has_language(dt) && ispath(dt, /datum/language/ratvar) +/mob/living/brain/could_speak_in_language(datum/language/dt) + if(istype(container, /obj/item/device/mmi/posibrain/soul_vessel)) + // soul vessels can only speak ratvarian. + . = ispath(dt, /datum/language/ratvar) else . = ..() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 5e1a91113f..322726aa62 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -14,7 +14,7 @@ sight = SEE_MOBS see_in_dark = 4 verb_say = "hisses" - initial_languages = list(/datum/language/xenocommon) + initial_language_holder = /datum/language_holder/alien bubble_icon = "alien" type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno var/nightvision = 1 diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 8a9ee012d9..f9bd64153e 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -87,6 +87,8 @@ owner.adjustFireLoss(-heal_amt) owner.adjustOxyLoss(-heal_amt) owner.adjustCloneLoss(-heal_amt) + else + owner.adjustPlasma(plasma_rate * 0.1) /obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0) ..() diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 72162387ee..12c131b3cc 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -1,4 +1,4 @@ -/mob/living/proc/alien_talk(message, shown_name = name) +/mob/living/proc/alien_talk(message, shown_name = real_name) log_say("[key_name(src)] : [message]") message = trim(message) if(!message) return diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 68d94b4c04..86ea3d64e9 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -1,134 +1,134 @@ -// This is to replace the previous datum/disease/alien_embryo for slightly improved handling and maintainability -// It functions almost identically (see code/datums/diseases/alien_embryo.dm) -/obj/item/organ/body_egg/alien_embryo - name = "alien embryo" - icon = 'icons/mob/alien.dmi' - icon_state = "larva0_dead" - var/stage = 0 - var/bursting = FALSE - -/obj/item/organ/body_egg/alien_embryo/on_find(mob/living/finder) - ..() - if(stage < 4) - to_chat(finder, "It's small and weak, barely the size of a foetus.") - else - to_chat(finder, "It's grown quite large, and writhes slightly as you look at it.") - if(prob(10)) - AttemptGrow(0) - -/obj/item/organ/body_egg/alien_embryo/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent("sacid", 10) - return S - -/obj/item/organ/body_egg/alien_embryo/on_life() - switch(stage) - if(2, 3) - if(prob(2)) - owner.emote("sneeze") - if(prob(2)) - owner.emote("cough") - if(prob(2)) - to_chat(owner, "Your throat feels sore.") - if(prob(2)) - to_chat(owner, "Mucous runs down the back of your throat.") - if(4) - if(prob(2)) - owner.emote("sneeze") - if(prob(2)) - owner.emote("cough") - if(prob(4)) - to_chat(owner, "Your muscles ache.") - if(prob(20)) - owner.take_bodypart_damage(1) - if(prob(4)) - to_chat(owner, "Your stomach hurts.") - if(prob(20)) - owner.adjustToxLoss(1) - if(5) - to_chat(owner, "You feel something tearing its way out of your stomach...") - owner.adjustToxLoss(10) - -/obj/item/organ/body_egg/alien_embryo/egg_process() - if(stage < 5 && prob(3)) - stage++ - INVOKE_ASYNC(src, .proc/RefreshInfectionImage) - - if(stage == 5 && prob(50)) - for(var/datum/surgery/S in owner.surgeries) - if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs)) - AttemptGrow(0) - return - AttemptGrow() - - - -/obj/item/organ/body_egg/alien_embryo/proc/AttemptGrow(gib_on_success=TRUE) - if(!owner || bursting) - return - - bursting = TRUE - - var/list/candidates = pollCandidates("Do you want to play as an alien larva that will burst out of [owner]?", ROLE_ALIEN, null, ROLE_ALIEN, 100, POLL_IGNORE_ALIEN_LARVA) - - if(QDELETED(src) || QDELETED(owner)) - return - - if(!candidates.len || !owner) - bursting = FALSE - stage = 4 - return - - var/mob/dead/observer/ghost = pick(candidates) - +// This is to replace the previous datum/disease/alien_embryo for slightly improved handling and maintainability +// It functions almost identically (see code/datums/diseases/alien_embryo.dm) +/obj/item/organ/body_egg/alien_embryo + name = "alien embryo" + icon = 'icons/mob/alien.dmi' + icon_state = "larva0_dead" + var/stage = 0 + var/bursting = FALSE + +/obj/item/organ/body_egg/alien_embryo/on_find(mob/living/finder) + ..() + if(stage < 4) + to_chat(finder, "It's small and weak, barely the size of a foetus.") + else + to_chat(finder, "It's grown quite large, and writhes slightly as you look at it.") + if(prob(10)) + AttemptGrow(0) + +/obj/item/organ/body_egg/alien_embryo/prepare_eat() + var/obj/S = ..() + S.reagents.add_reagent("sacid", 10) + return S + +/obj/item/organ/body_egg/alien_embryo/on_life() + switch(stage) + if(2, 3) + if(prob(2)) + owner.emote("sneeze") + if(prob(2)) + owner.emote("cough") + if(prob(2)) + to_chat(owner, "Your throat feels sore.") + if(prob(2)) + to_chat(owner, "Mucous runs down the back of your throat.") + if(4) + if(prob(2)) + owner.emote("sneeze") + if(prob(2)) + owner.emote("cough") + if(prob(4)) + to_chat(owner, "Your muscles ache.") + if(prob(20)) + owner.take_bodypart_damage(1) + if(prob(4)) + to_chat(owner, "Your stomach hurts.") + if(prob(20)) + owner.adjustToxLoss(1) + if(5) + to_chat(owner, "You feel something tearing its way out of your stomach...") + owner.adjustToxLoss(10) + +/obj/item/organ/body_egg/alien_embryo/egg_process() + if(stage < 5 && prob(3)) + stage++ + INVOKE_ASYNC(src, .proc/RefreshInfectionImage) + + if(stage == 5 && prob(50)) + for(var/datum/surgery/S in owner.surgeries) + if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs)) + AttemptGrow(0) + return + AttemptGrow() + + + +/obj/item/organ/body_egg/alien_embryo/proc/AttemptGrow(gib_on_success=TRUE) + if(!owner || bursting) + return + + bursting = TRUE + + var/list/candidates = pollGhostCandidates("Do you want to play as an alien larva that will burst out of [owner]?", ROLE_ALIEN, null, ROLE_ALIEN, 100, POLL_IGNORE_ALIEN_LARVA) + + if(QDELETED(src) || QDELETED(owner)) + return + + if(!candidates.len || !owner) + bursting = FALSE + stage = 4 + return + + var/mob/dead/observer/ghost = pick(candidates) + var/mutable_appearance/overlay = mutable_appearance('icons/mob/alien.dmi', "burst_lie") - owner.add_overlay(overlay) - - var/atom/xeno_loc = get_turf(owner) - var/mob/living/carbon/alien/larva/new_xeno = new(xeno_loc) - new_xeno.key = ghost.key - new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention - new_xeno.canmove = 0 //so we don't move during the bursting animation - new_xeno.notransform = 1 - new_xeno.invisibility = INVISIBILITY_MAXIMUM - - sleep(6) - - if(QDELETED(src) || QDELETED(owner)) - return - - if(new_xeno) - new_xeno.canmove = 1 - new_xeno.notransform = 0 - new_xeno.invisibility = 0 - - if(gib_on_success) - new_xeno.visible_message("[new_xeno] bursts out of [owner] in a shower of gore!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!") - owner.gib(TRUE) - else - new_xeno.visible_message("[new_xeno] wriggles out of [owner]!", "You exit [owner], your previous host.") - owner.adjustBruteLoss(40) - owner.cut_overlay(overlay) - qdel(src) - - -/*---------------------------------------- -Proc: AddInfectionImages(C) -Des: Adds the infection image to all aliens for this embryo -----------------------------------------*/ -/obj/item/organ/body_egg/alien_embryo/AddInfectionImages() - for(var/mob/living/carbon/alien/alien in GLOB.player_list) - if(alien.client) - var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") - alien.client.images += I - -/*---------------------------------------- -Proc: RemoveInfectionImage(C) -Des: Removes all images from the mob infected by this embryo -----------------------------------------*/ -/obj/item/organ/body_egg/alien_embryo/RemoveInfectionImages() - for(var/mob/living/carbon/alien/alien in GLOB.player_list) - if(alien.client) - for(var/image/I in alien.client.images) - if(dd_hasprefix_case(I.icon_state, "infected") && I.loc == owner) - qdel(I) + owner.add_overlay(overlay) + + var/atom/xeno_loc = get_turf(owner) + var/mob/living/carbon/alien/larva/new_xeno = new(xeno_loc) + new_xeno.key = ghost.key + new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention + new_xeno.canmove = 0 //so we don't move during the bursting animation + new_xeno.notransform = 1 + new_xeno.invisibility = INVISIBILITY_MAXIMUM + + sleep(6) + + if(QDELETED(src) || QDELETED(owner)) + return + + if(new_xeno) + new_xeno.canmove = 1 + new_xeno.notransform = 0 + new_xeno.invisibility = 0 + + if(gib_on_success) + new_xeno.visible_message("[new_xeno] bursts out of [owner] in a shower of gore!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!") + owner.gib(TRUE) + else + new_xeno.visible_message("[new_xeno] wriggles out of [owner]!", "You exit [owner], your previous host.") + owner.adjustBruteLoss(40) + owner.cut_overlay(overlay) + qdel(src) + + +/*---------------------------------------- +Proc: AddInfectionImages(C) +Des: Adds the infection image to all aliens for this embryo +----------------------------------------*/ +/obj/item/organ/body_egg/alien_embryo/AddInfectionImages() + for(var/mob/living/carbon/alien/alien in GLOB.player_list) + if(alien.client) + var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]") + alien.client.images += I + +/*---------------------------------------- +Proc: RemoveInfectionImage(C) +Des: Removes all images from the mob infected by this embryo +----------------------------------------*/ +/obj/item/organ/body_egg/alien_embryo/RemoveInfectionImages() + for(var/mob/living/carbon/alien/alien in GLOB.player_list) + if(alien.client) + for(var/image/I in alien.client.images) + if(dd_hasprefix_case(I.icon_state, "infected") && I.loc == owner) + qdel(I) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 87cf246717..06145235a0 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -484,7 +484,7 @@ adjustBruteLoss(3) else if(T) - T.add_vomit_floor(src, 0)//toxic barf looks different + T.add_vomit_floor(src, toxic)//toxic barf looks different nutrition -= lost_nutrition adjustToxLoss(-3) T = get_step(T, dir) @@ -492,6 +492,16 @@ break return 1 +/mob/living/carbon/proc/spew_organ(power = 5) + if(!internal_organs.len) + return //Guess we're out of organs + var/obj/item/organ/guts = pick(internal_organs) + var/turf/T = get_turf(src) + guts.Remove(src) + guts.forceMove(T) + var/atom/throw_target = get_edge_target_turf(guts, dir) + guts.throw_at(throw_target, power, 4, src) + /mob/living/carbon/fully_replace_character_name(oldname,newname) ..() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 0d8cfeb98d..57caa35c42 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -2,16 +2,38 @@ /mob/living/carbon/get_eye_protection() var/number = ..() + if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head + var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item + number += HFP.flash_protect + + if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses + var/obj/item/clothing/glasses/GFP = src.glasses + number += GFP.flash_protect + + if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask + var/obj/item/clothing/mask/MFP = src.wear_mask + number += MFP.flash_protect + var/obj/item/organ/eyes/E = getorganslot("eye_sight") if(!E) number = INFINITY //Can't get flashed without eyes else number += E.flash_protect + return number /mob/living/carbon/get_ear_protection() + var/number = ..() + if(ears && HAS_SECONDARY_FLAG(ears, BANG_PROTECT)) + number += 1 if(head && HAS_SECONDARY_FLAG(head, BANG_PROTECT)) - return 1 + number += 1 + var/obj/item/organ/ears/E = getorganslot("ears") + if(!E) + number = INFINITY + else + number += E.bang_protect + return number /mob/living/carbon/check_projectile_dismemberment(obj/item/projectile/P, def_zone) var/obj/item/bodypart/affecting = get_bodypart(def_zone) @@ -119,9 +141,7 @@ visible_message("The [M.name] has shocked [src]!", \ "The [M.name] has shocked [src]!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, TRUE, src) var/power = M.powerlevel + rand(0,3) Weaken(power) if(stuttering < power) @@ -278,25 +298,25 @@ /mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 1, damage_pwr = 5, deafen_pwr = 15) var/ear_safety = get_ear_protection() var/obj/item/organ/ears/ears = getorganslot("ears") - if(ear_safety < 2) //has ears - var/effect_amount = intensity - ear_safety - if(effect_amount > 0) - if(stun_pwr) - Stun(stun_pwr*effect_amount) - Weaken(stun_pwr*effect_amount) - if(istype(ears) && (deafen_pwr || damage_pwr)) - ears.ear_damage += damage_pwr * effect_amount - ears.deaf = max(ears.deaf, deafen_pwr * effect_amount) + var/effect_amount = intensity - ear_safety + if(effect_amount > 0) + if(stun_pwr) + Stun(stun_pwr*effect_amount) + Weaken(stun_pwr*effect_amount) - if(ears.ear_damage >= 15) - to_chat(src, "Your ears start to ring badly!") - if(prob(ears.ear_damage - 5)) - to_chat(src, "You can't hear anything!") - ears.ear_damage = min(ears.ear_damage, UNHEALING_EAR_DAMAGE) - // you need earmuffs, inacusiate, or replacement - else if(ears.ear_damage >= 5) - to_chat(src, "Your ears start to ring!") - src << sound('sound/weapons/flash_ring.ogg',0,1,0,250) + if(istype(ears) && (deafen_pwr || damage_pwr)) + ears.ear_damage += damage_pwr * effect_amount + ears.deaf = max(ears.deaf, deafen_pwr * effect_amount) + + if(ears.ear_damage >= 15) + to_chat(src, "Your ears start to ring badly!") + if(prob(ears.ear_damage - 5)) + to_chat(src, "You can't hear anything!") + ears.ear_damage = min(ears.ear_damage, UNHEALING_EAR_DAMAGE) + // you need earmuffs, inacusiate, or replacement + else if(ears.ear_damage >= 5) + to_chat(src, "Your ears start to ring!") + src << sound('sound/weapons/flash_ring.ogg',0,1,0,250) return effect_amount //how soundbanged we are diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 30fa676500..48ebd53435 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -68,6 +68,17 @@ if(!isnum(text2num(params))) return message +/datum/emote/sound/carbon/snap + key = "snap" + key_third_person = "snaps" + message = "snaps their fingers." + muzzle_ignore = TRUE + restraint_check = TRUE + emote_type = EMOTE_AUDIBLE + sound = 'sound/effects/snap01.ogg' + mob_type_allowed_typecache = list(/mob/living/carbon/) + + /datum/emote/living/carbon/sign/signal key = "signal" key_third_person = "signals" diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 6c4fd0b80c..e272680418 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -34,8 +34,8 @@ if(SSticker && SSticker.mode) SSblackbox.ReportDeath(src) - if(mind && mind.devilinfo) - INVOKE_ASYNC(mind.devilinfo, /datum/devilinfo.proc/beginResurrectionCheck, src) + if(is_devil(src)) + INVOKE_ASYNC(is_devil(src), /datum/antagonist/devil.proc/beginResurrectionCheck, src) /mob/living/carbon/human/proc/makeSkeleton() status_flags |= DISFIGURED diff --git a/code/modules/mob/living/carbon/human/death.dm.rej b/code/modules/mob/living/carbon/human/death.dm.rej deleted file mode 100644 index a4a1fc5a7c..0000000000 --- a/code/modules/mob/living/carbon/human/death.dm.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm (rejected hunks) -@@ -32,7 +32,7 @@ - - dna.species.spec_death(gibbed, src) - -- if(SSticker && SSticker.mode) -+ if(SSticker.HasRoundStarted()) - SSblackbox.ReportDeath(src) - if(mind && mind.devilinfo) - INVOKE_ASYNC(mind.devilinfo, /datum/devilinfo.proc/beginResurrectionCheck, src) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index de4eecabff..6fb2ab25f5 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1,175 +1,178 @@ -/datum/emote/living/carbon/human - mob_type_allowed_typecache = list(/mob/living/carbon/human) - -/datum/emote/living/carbon/human/cry - key = "cry" - key_third_person = "cries" - message = "cries." - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/dap - key = "dap" - key_third_person = "daps" - message = "sadly can't find anybody to give daps to, and daps themself. Shameful." - message_param = "give daps to %t." - restraint_check = TRUE - -/datum/emote/living/carbon/human/eyebrow - key = "eyebrow" - message = "raises an eyebrow." - -/datum/emote/living/carbon/human/grumble - key = "grumble" - key_third_person = "grumbles" - message = "grumbles!" - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/handshake - key = "handshake" - message = "shakes their own hands." - message_param = "shakes hands with %t." - restraint_check = TRUE - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/hug - key = "hug" - key_third_person = "hugs" - message = "hugs themself." - message_param = "hugs %t." - restraint_check = TRUE - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/mumble - key = "mumble" - key_third_person = "mumbles" - message = "mumbles!" - emote_type = EMOTE_AUDIBLE - -/datum/emote/living/carbon/human/pale - key = "pale" - message = "goes pale for a second." - -/datum/emote/living/carbon/human/raise - key = "raise" - key_third_person = "raises" - message = "raises a hand." - restraint_check = TRUE - -/datum/emote/living/carbon/human/salute - key = "salute" - key_third_person = "salutes" - message = "salutes." - message_param = "salutes to %t." - restraint_check = TRUE - -/datum/emote/living/carbon/human/shrug - key = "shrug" - key_third_person = "shrugs" - message = "shrugs." - -/datum/emote/living/carbon/human/wag - key = "wag" - key_third_person = "wags" - message = "wags their tail." - -/datum/emote/living/carbon/human/wag/run_emote(mob/user, params) - . = ..() - var/mob/living/carbon/human/H = user - if(.) - H.startTailWag() - else - H.endTailWag() - -/datum/emote/living/carbon/human/wag/can_run_emote(mob/user) - if(!..()) - return FALSE - var/mob/living/carbon/human/H = user - if(H.dna && H.dna.species && ((H.dna.features["tail_lizard"] != "None") || (H.dna.features["tail_human"] != "None") || ("mam_tail" in H.dna.species.mutant_bodyparts))) - return TRUE - -/datum/emote/living/carbon/human/wag/select_message_type(mob/user) - . = ..() - var/mob/living/carbon/human/H = user - if(("waggingtail_lizard" in H.dna.species.mutant_bodyparts) || ("waggingtail_human" in H.dna.species.mutant_bodyparts) || ("mam_waggingtail" in H.dna.species.mutant_bodyparts)) - . = null - -/datum/emote/living/carbon/human/wing - key = "wing" - key_third_person = "wings" - message = "their wings." - -/datum/emote/living/carbon/human/wing/run_emote(mob/user, params) - . = ..() - if(.) - var/mob/living/carbon/human/H = user - if(findtext(select_message_type(user), "open")) - H.OpenWings() - else - H.CloseWings() - -/datum/emote/living/carbon/human/wing/select_message_type(mob/user) - . = ..() - var/mob/living/carbon/human/H = user - if("wings" in H.dna.species.mutant_bodyparts) - . = "opens " + message - else - . = "closes " + message - -/datum/emote/living/carbon/human/wing/can_run_emote(mob/user) - if(!..()) - return FALSE - var/mob/living/carbon/human/H = user - if(H.dna && H.dna.species && (H.dna.features["wings"] != "None")) - return TRUE - -//Don't know where else to put this, it's basically an emote -/mob/living/carbon/human/proc/startTailWag() - if(!dna || !dna.species) - return - if("tail_lizard" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "tail_lizard" - dna.species.mutant_bodyparts -= "spines" - dna.species.mutant_bodyparts |= "waggingtail_lizard" - dna.species.mutant_bodyparts |= "waggingspines" - if("tail_human" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "tail_human" - dna.species.mutant_bodyparts |= "waggingtail_human" - if("mam_tail" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "mam_tail" - dna.species.mutant_bodyparts |= "mam_waggingtail" - update_body() - - -/mob/living/carbon/human/proc/endTailWag() - if(!dna || !dna.species) - return - if("waggingtail_lizard" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "waggingtail_lizard" - dna.species.mutant_bodyparts -= "waggingspines" - dna.species.mutant_bodyparts |= "tail_lizard" - dna.species.mutant_bodyparts |= "spines" - if("waggingtail_human" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "waggingtail_human" - dna.species.mutant_bodyparts |= "tail_human" - if("mam_waggingtail" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "mam_waggingtail" - dna.species.mutant_bodyparts |= "mam_tail" - update_body() - -/mob/living/carbon/human/proc/OpenWings() - if(!dna || !dna.species) - return - if("wings" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "wings" - dna.species.mutant_bodyparts |= "wingsopen" - update_body() - -/mob/living/carbon/human/proc/CloseWings() - if(!dna || !dna.species) - return - if("wingsopen" in dna.species.mutant_bodyparts) - dna.species.mutant_bodyparts -= "wingsopen" - dna.species.mutant_bodyparts |= "wings" - update_body() - -//Ayy lmao +/datum/emote/living/carbon/human + mob_type_allowed_typecache = list(/mob/living/carbon/human) + +/datum/emote/living/carbon/human/cry + key = "cry" + key_third_person = "cries" + message = "cries." + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/human/dap + key = "dap" + key_third_person = "daps" + message = "sadly can't find anybody to give daps to, and daps themself. Shameful." + message_param = "give daps to %t." + restraint_check = TRUE + +/datum/emote/living/carbon/human/eyebrow + key = "eyebrow" + message = "raises an eyebrow." + +/datum/emote/living/carbon/human/grumble + key = "grumble" + key_third_person = "grumbles" + message = "grumbles!" + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/human/handshake + key = "handshake" + message = "shakes their own hands." + message_param = "shakes hands with %t." + restraint_check = TRUE + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/human/hug + key = "hug" + key_third_person = "hugs" + message = "hugs themself." + message_param = "hugs %t." + restraint_check = TRUE + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/human/mumble + key = "mumble" + key_third_person = "mumbles" + message = "mumbles!" + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/human/pale + key = "pale" + message = "goes pale for a second." + +/datum/emote/living/carbon/human/raise + key = "raise" + key_third_person = "raises" + message = "raises a hand." + restraint_check = TRUE + +/datum/emote/living/carbon/human/salute + key = "salute" + key_third_person = "salutes" + message = "salutes." + message_param = "salutes to %t." + restraint_check = TRUE + +/datum/emote/living/carbon/human/shrug + key = "shrug" + key_third_person = "shrugs" + message = "shrugs." + +/datum/emote/living/carbon/human/wag + key = "wag" + key_third_person = "wags" + message = "wags their tail." + +/datum/emote/living/carbon/human/wag/run_emote(mob/user, params) + . = ..() + var/mob/living/carbon/human/H = user + if(.) + H.startTailWag() + else + H.endTailWag() + +/datum/emote/living/carbon/human/wag/can_run_emote(mob/user) + if(!..()) + return FALSE + var/mob/living/carbon/human/H = user + if(H.dna && H.dna.species && ((H.dna.features["tail_lizard"] != "None") || (H.dna.features["tail_human"] != "None") || ("mam_tail" in H.dna.species.mutant_bodyparts))) + return TRUE + +/datum/emote/living/carbon/human/wag/select_message_type(mob/user) + . = ..() + var/mob/living/carbon/human/H = user + if(("waggingtail_lizard" in H.dna.species.mutant_bodyparts) || ("waggingtail_human" in H.dna.species.mutant_bodyparts) || ("mam_waggingtail" in H.dna.species.mutant_bodyparts)) + . = null + +/datum/emote/living/carbon/human/wing + key = "wing" + key_third_person = "wings" + message = "their wings." + +/datum/emote/living/carbon/human/wing/run_emote(mob/user, params) + . = ..() + if(.) + var/mob/living/carbon/human/H = user + if(findtext(select_message_type(user), "open")) + H.OpenWings() + else + H.CloseWings() + +/datum/emote/living/carbon/human/wing/select_message_type(mob/user) + . = ..() + var/mob/living/carbon/human/H = user + if("wings" in H.dna.species.mutant_bodyparts) + . = "opens " + message + else + . = "closes " + message + +/datum/emote/living/carbon/human/wing/can_run_emote(mob/user) + if(!..()) + return FALSE + var/mob/living/carbon/human/H = user + if(H.dna && H.dna.species && (H.dna.features["wings"] != "None")) + return TRUE + +//Don't know where else to put this, it's basically an emote +/mob/living/carbon/human/proc/startTailWag() + if(!dna || !dna.species) + return + if("tail_lizard" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "tail_lizard" + dna.species.mutant_bodyparts -= "spines" + dna.species.mutant_bodyparts |= "waggingtail_lizard" + dna.species.mutant_bodyparts |= "waggingspines" + if("tail_human" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "tail_human" + dna.species.mutant_bodyparts |= "waggingtail_human" + if("mam_tail" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "mam_tail" + dna.species.mutant_bodyparts |= "mam_waggingtail" + update_body() + + +/mob/living/carbon/human/proc/endTailWag() + if(!dna || !dna.species) + return + if("waggingtail_lizard" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "waggingtail_lizard" + dna.species.mutant_bodyparts -= "waggingspines" + dna.species.mutant_bodyparts |= "tail_lizard" + dna.species.mutant_bodyparts |= "spines" + if("waggingtail_human" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "waggingtail_human" + dna.species.mutant_bodyparts |= "tail_human" + if("mam_waggingtail" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "mam_waggingtail" + dna.species.mutant_bodyparts |= "mam_tail" + update_body() + +/mob/living/carbon/human/proc/OpenWings() + if(!dna || !dna.species) + return + if("wings" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "wings" + dna.species.mutant_bodyparts |= "wingsopen" + update_body() + +/mob/living/carbon/human/proc/CloseWings() + if(!dna || !dna.species) + return + if("wingsopen" in dna.species.mutant_bodyparts) + dna.species.mutant_bodyparts -= "wingsopen" + dna.species.mutant_bodyparts |= "wings" + update_body() + if(isturf(loc)) + var/turf/T = loc + T.Entered(src) + +//Ayy lmao diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 9081591395..a3bb2fefde 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -134,7 +134,7 @@ if(stat == DEAD || (status_flags & FAKEDEATH)) appears_dead = 1 if(suiciding) - msg += "[t_He] appear[p_s()] to have commited suicide... there is no hope of recovery.\n" + msg += "[t_He] appear[p_s()] to have committed suicide... there is no hope of recovery.\n" if(hellbound) msg += "[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.\n" msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ebbe18ff11..be7e851a8e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1,934 +1,930 @@ -/mob/living/carbon/human - name = "Unknown" - real_name = "Unknown" - voice_name = "Unknown" - icon = 'icons/mob/human.dmi' - icon_state = "caucasian_m" - - // ME TARZAN, YOU JANEBOT - initial_languages = list(/datum/language/common) +/mob/living/carbon/human + name = "Unknown" + real_name = "Unknown" + voice_name = "Unknown" + icon = 'icons/mob/human.dmi' + icon_state = "caucasian_m" - - -/mob/living/carbon/human/dummy - real_name = "Test Dummy" - status_flags = GODMODE|CANPUSH - -/mob/living/carbon/human/dummy/New(loc) - ..() - if(!initialized) - args[1] = FALSE - Initialize(arglist(args)) - -/mob/living/carbon/human/dummy/Life() - return - -/mob/living/carbon/human/Initialize() - verbs += /mob/living/proc/mob_sleep - verbs += /mob/living/proc/lay_down - - //initialize limbs first - create_bodyparts() - - //initialize dna. for spawned humans; overwritten by other code - create_dna(src) - randomize_human(src) - dna.initialize_dna() - - if(dna.species) - set_species(dna.species.type) - - //initialise organs - create_internal_organs() - - martial_art = default_martial_art - - handcrafting = new() - - ..() - -/mob/living/carbon/human/create_internal_organs() - if(!(NOHUNGER in dna.species.species_traits)) - internal_organs += new /obj/item/organ/appendix - if(!(NOBREATH in dna.species.species_traits)) - if(dna.species.mutantlungs) - internal_organs += new dna.species.mutantlungs() - else - internal_organs += new /obj/item/organ/lungs() - if(!(NOBLOOD in dna.species.species_traits)) - internal_organs += new /obj/item/organ/heart - - internal_organs += new dna.species.mutanteyes() - internal_organs += new dna.species.mutantears - internal_organs += new /obj/item/organ/brain - give_genitals() - ..() - -/mob/living/carbon/human/OpenCraftingMenu() - handcrafting.ui_interact(src) - -/mob/living/carbon/human/prepare_data_huds() - //Update med hud images... - ..() - //...sec hud images... - sec_hud_set_ID() - sec_hud_set_implants() - sec_hud_set_security_status() - //...and display them. - add_to_all_human_data_huds() - -/mob/living/carbon/human/Stat() - ..() - - if(statpanel("Status")) - stat(null, "Intent: [a_intent]") - stat(null, "Move Mode: [m_intent]") - if (internal) - if (!internal.air_contents) - qdel(internal) - else - stat("Internal Atmosphere Info", internal.name) - stat("Tank Pressure", internal.air_contents.return_pressure()) - stat("Distribution Pressure", internal.distribute_pressure) - - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B && B.controlling) - stat("Chemicals", B.chemicals) - - if(mind) - if(mind.changeling) - stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]") - stat("Absorbed DNA", mind.changeling.absorbedcount) - - - //NINJACODE - if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)) //Only display if actually a ninja. - var/obj/item/clothing/suit/space/space_ninja/SN = wear_suit - if(statpanel("SpiderOS")) - stat("SpiderOS Status:","[SN.s_initialized ? "Initialized" : "Disabled"]") - stat("Current Time:", "[worldtime2text()]") - if(SN.s_initialized) - //Suit gear - stat("Energy Charge:", "[round(SN.cell.charge/100)]%") - stat("Smoke Bombs:", "\Roman [SN.s_bombs]") - //Ninja status - stat("Fingerprints:", "[md5(dna.uni_identity)]") - stat("Unique Identity:", "[dna.unique_enzymes]") - stat("Overall Status:", "[stat > 1 ? "dead" : "[health]% healthy"]") - stat("Nutrition Status:", "[nutrition]") - stat("Oxygen Loss:", "[getOxyLoss()]") - stat("Toxin Levels:", "[getToxLoss()]") - stat("Burn Severity:", "[getFireLoss()]") - stat("Brute Trauma:", "[getBruteLoss()]") - stat("Radiation Levels:","[radiation] rad") - stat("Body Temperature:","[bodytemperature-T0C] degrees C ([bodytemperature*1.8-459.67] degrees F)") - - //Virsuses - if(viruses.len) - stat("Viruses:", null) - for(var/datum/disease/D in viruses) - stat("*", "[D.name], Type: [D.spread_text], Stage: [D.stage]/[D.max_stages], Possible Cure: [D.cure_text]") - - -/mob/living/carbon/human/show_inv(mob/user) - user.set_machine(src) - var/has_breathable_mask = istype(wear_mask, /obj/item/clothing/mask) - var/list/obscured = check_obscured_slots() - var/list/dat = list() - - dat += "" - for(var/i in 1 to held_items.len) - var/obj/item/I = get_item_for_held_index(i) - dat += "" - dat += "" - - dat += "" - - dat += "" - - if(slot_wear_mask in obscured) - dat += "" - else - dat += "" - - if(slot_neck in obscured) - dat += "" - else - dat += "" - - if(slot_glasses in obscured) - dat += "" - else - dat += "" - - if(slot_ears in obscured) - dat += "" - else - dat += "" - - dat += "" - - dat += "" - if(wear_suit) - dat += "" - else - dat += "" - - if(slot_shoes in obscured) - dat += "" - else - dat += "" - - if(slot_gloves in obscured) - dat += "" - else - dat += "" - - if(slot_w_uniform in obscured) - dat += "" - else - dat += "" - - if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (slot_w_uniform in obscured)) - dat += "" - dat += "" - dat += "" - else - dat += "" - dat += "" - dat += "" - - if(handcuffed) - dat += "" - if(legcuffed) - dat += "" - - dat += {"
[get_held_index_name(i)]:[(I && !(I.flags & ABSTRACT)) ? I : "Empty"]
 
Back:[(back && !(back.flags&ABSTRACT)) ? back : "Empty"]" - if(has_breathable_mask && istype(back, /obj/item/weapon/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - - dat += "
 
Head:[(head && !(head.flags&ABSTRACT)) ? head : "Empty"]
Mask:Obscured
Mask:[(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Empty"]
Neck:Obscured
Neck:[(wear_neck && !(wear_neck.flags&ABSTRACT)) ? wear_neck : "Empty"]
Eyes:Obscured
Eyes:[(glasses && !(glasses.flags&ABSTRACT)) ? glasses : "Empty"]
Ears:Obscured
Ears:[(ears && !(ears.flags&ABSTRACT)) ? ears : "Empty"]
 
Exosuit:[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "Empty"]
 ↳Suit Storage:[(s_store && !(s_store.flags&ABSTRACT)) ? s_store : "Empty"]" - if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - dat += "
 ↳Suit Storage:
Shoes:Obscured
Shoes:[(shoes && !(shoes.flags&ABSTRACT)) ? shoes : "Empty"]
Gloves:Obscured
Gloves:[(gloves && !(gloves.flags&ABSTRACT)) ? gloves : "Empty"]
Uniform:Obscured
Uniform:[(w_uniform && !(w_uniform.flags&ABSTRACT)) ? w_uniform : "Empty"]
 ↳Pockets:
 ↳ID:
 ↳Belt:
 ↳Belt:[(belt && !(belt.flags&ABSTRACT)) ? belt : "Empty"]" - if(has_breathable_mask && istype(belt, /obj/item/weapon/tank)) - dat += " [internal ? "Disable Internals" : "Set Internals"]" - dat += "
 ↳Pockets:[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" - dat += " [(r_store && !(r_store.flags&ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]
 ↳ID:[(wear_id && !(wear_id.flags&ABSTRACT)) ? wear_id : "Empty"]
Handcuffed: Remove
Legcuffed
- Close - "} - - var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 510) - popup.set_content(dat.Join()) - popup.open() - -// called when something steps onto a human -// this could be made more general, but for now just handle mulebot -/mob/living/carbon/human/Crossed(atom/movable/AM) - var/mob/living/simple_animal/bot/mulebot/MB = AM - if(istype(MB)) - MB.RunOver(src) - - spreadFire(AM) - - -/mob/living/carbon/human/Topic(href, href_list) - if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - - if(href_list["embedded_object"]) - var/obj/item/bodypart/L = locate(href_list["embedded_limb"]) in bodyparts - if(!L) - return - var/obj/item/I = locate(href_list["embedded_object"]) in L.embedded_objects - if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore - return - var/time_taken = I.embedded_unsafe_removal_time*I.w_class - usr.visible_message("[usr] attempts to remove [I] from their [L.name].","You attempt to remove [I] from your [L.name]... (It will take [time_taken/10] seconds.)") - if(do_after(usr, time_taken, needhand = 1, target = src)) - if(!I || !L || I.loc != src || !(I in L.embedded_objects)) - return - L.embedded_objects -= I - L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. - I.forceMove(get_turf(src)) - usr.put_in_hands(I) - usr.emote("scream") - usr.visible_message("[usr] successfully rips [I] out of their [L.name]!","You successfully remove [I] from your [L.name].") - if(!has_embedded_objects()) - clear_alert("embeddedobject") - return - - if(href_list["item"]) - var/slot = text2num(href_list["item"]) - if(slot in check_obscured_slots()) - to_chat(usr, "You can't reach that! Something is covering it.") - return - - if(href_list["pockets"]) - var/pocket_side = href_list["pockets"] - var/pocket_id = (pocket_side == "right" ? slot_r_store : slot_l_store) - var/obj/item/pocket_item = (pocket_id == slot_r_store ? r_store : l_store) - var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty - - var/delay_denominator = 1 - if(pocket_item && !(pocket_item.flags&ABSTRACT)) - if(pocket_item.flags & NODROP) - to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!") - to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.") - else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.flags&ABSTRACT)) - to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.") - delay_denominator = 4 - else - return - - if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator)) //placing an item into the pocket is 4 times faster - if(pocket_item) - if(pocket_item == (pocket_id == slot_r_store ? r_store : l_store)) //item still in the pocket we search - dropItemToGround(pocket_item) - else - if(place_item) - if(place_item.mob_can_equip(src, usr, pocket_id, FALSE, TRUE)) - usr.temporarilyRemoveItemFromInventory(place_item, TRUE) - equip_to_slot(place_item, pocket_id, TRUE) - //do nothing otherwise - - // Update strip window - if(usr.machine == src && in_range(src, usr)) - show_inv(usr) - else - // Display a warning if the user mocks up - to_chat(src, "You feel your [pocket_side] pocket being fumbled with!") - - ..() - - -///////HUDs/////// - if(href_list["hud"]) - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr - var/perpname = get_face_name(get_id_name("")) - if(istype(H.glasses, /obj/item/clothing/glasses/hud) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud)) - var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general) - if(href_list["photo_front"] || href_list["photo_side"]) - if(R) - if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) - return - var/obj/item/weapon/photo/P = null - if(href_list["photo_front"]) - P = R.fields["photo_front"] - else if(href_list["photo_side"]) - P = R.fields["photo_side"] - if(P) - P.show(H) - - if(href_list["hud"] == "m") - if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) - if(href_list["p_stat"]) - var/health_status = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel") - if(R) - if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) - return - if(health_status && health_status != "Cancel") - R.fields["p_stat"] = health_status - return - if(href_list["m_stat"]) - var/health_status = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel") - if(R) - if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) - return - if(health_status && health_status != "Cancel") - R.fields["m_stat"] = health_status - return - if(href_list["evaluation"]) - if(!getBruteLoss() && !getFireLoss() && !getOxyLoss() && getToxLoss() < 20) - to_chat(usr, "No external injuries detected.
") - return - var/span = "notice" - var/status = "" - if(getBruteLoss()) - to_chat(usr, "Physical trauma analysis:") - for(var/X in bodyparts) - var/obj/item/bodypart/BP = X - var/brutedamage = BP.brute_dam - if(brutedamage > 0) - status = "received minor physical injuries." - span = "notice" - if(brutedamage > 20) - status = "been seriously damaged." - span = "danger" - if(brutedamage > 40) - status = "sustained major trauma!" - span = "userdanger" - if(brutedamage) - to_chat(usr, "[BP] appears to have [status]") - if(getFireLoss()) - to_chat(usr, "Analysis of skin burns:") - for(var/X in bodyparts) - var/obj/item/bodypart/BP = X - var/burndamage = BP.burn_dam - if(burndamage > 0) - status = "signs of minor burns." - span = "notice" - if(burndamage > 20) - status = "serious burns." - span = "danger" - if(burndamage > 40) - status = "major burns!" - span = "userdanger" - if(burndamage) - to_chat(usr, "[BP] appears to have [status]") - if(getOxyLoss()) - to_chat(usr, "Patient has signs of suffocation, emergency treatment may be required!") - if(getToxLoss() > 20) - to_chat(usr, "Gathered data is inconsistent with the analysis, possible cause: poisoning.") - - if(href_list["hud"] == "s") - if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. - return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten - // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access - var/allowed_access = null - var/obj/item/clothing/glasses/G = H.glasses - if (!G.emagged) - if(H.wear_id) - var/list/access = H.wear_id.GetAccess() - if(GLOB.access_sec_doors in access) - allowed_access = H.get_authentification_name() - else - allowed_access = "@%&ERROR_%$*" - - - if(!allowed_access) - to_chat(H, "ERROR: Invalid Access") - return - - if(perpname) - R = find_record("name", perpname, GLOB.data_core.security) - if(R) - if(href_list["status"]) - var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel") - if(setcriminal != "Cancel") - if(R) - if(H.canUseHUD()) - if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records") - R.fields["criminal"] = setcriminal - sec_hud_set_security_status() - return - - if(href_list["view"]) - if(R) - if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - return - to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") - to_chat(usr, "Minor Crimes:") - for(var/datum/data/crime/c in R.fields["mi_crim"]) - to_chat(usr, "Crime: [c.crimeName]") - to_chat(usr, "Details: [c.crimeDetails]") - to_chat(usr, "Added by [c.author] at [c.time]") - to_chat(usr, "----------") - to_chat(usr, "Major Crimes:") - for(var/datum/data/crime/c in R.fields["ma_crim"]) - to_chat(usr, "Crime: [c.crimeName]") - to_chat(usr, "Details: [c.crimeDetails]") - to_chat(usr, "Added by [c.author] at [c.time]") - to_chat(usr, "----------") - to_chat(usr, "Notes: [R.fields["notes"]]") - return - - if(href_list["add_crime"]) - switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel")) - if("Minor Crime") - if(R) - var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null) - var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null) - if(R) - if (!t1 || !t2 || !allowed_access) - return - else if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - return - var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) - GLOB.data_core.addMinorCrime(R.fields["id"], crime) - to_chat(usr, "Successfully added a minor crime.") - return - if("Major Crime") - if(R) - var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null) - var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null) - if(R) - if (!t1 || !t2 || !allowed_access) - return - else if (!H.canUseHUD()) - return - else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - return - var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) - GLOB.data_core.addMajorCrime(R.fields["id"], crime) - to_chat(usr, "Successfully added a major crime.") - return - - if(href_list["view_comment"]) - if(R) - if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - return - to_chat(usr, "Comments/Log:") - var/counter = 1 - while(R.fields[text("com_[]", counter)]) - to_chat(usr, R.fields[text("com_[]", counter)]) - to_chat(usr, "----------") - counter++ - return - - if(href_list["add_comment"]) - if(R) - var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null) - if(R) - if (!t1 || !allowed_access) - return - else if(!H.canUseHUD()) - return - else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) - return - var/counter = 1 - while(R.fields[text("com_[]", counter)]) - counter++ - R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []
[]", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) - to_chat(usr, "Successfully added comment.") - return - to_chat(usr, "Unable to locate a data core entry for this person.") - -/mob/living/carbon/human/proc/canUseHUD() - return !(src.stat || src.weakened || src.stunned || src.restrained()) - -/mob/living/carbon/human/can_inject(mob/user, error_msg, target_zone, var/penetrate_thick = 0) - . = 1 // Default to returning true. - if(user && !target_zone) - target_zone = user.zone_selected - if(dna && (PIERCEIMMUNE in dna.species.species_traits)) - . = 0 - // If targeting the head, see if the head item is thin enough. - // If targeting anything else, see if the wear suit is thin enough. - if(above_neck(target_zone)) - if(head && head.flags & THICKMATERIAL && !penetrate_thick) - . = 0 - else - if(wear_suit && wear_suit.flags & THICKMATERIAL && !penetrate_thick) - . = 0 - if(!. && error_msg && user) - // Might need re-wording. - to_chat(user, "There is no exposed flesh or thin material [above_neck(target_zone) ? "on [p_their()] head" : "on [p_their()] body"].") - -/mob/living/carbon/human/proc/check_obscured_slots() - var/list/obscured = list() - - if(wear_suit) - if(wear_suit.flags_inv & HIDEGLOVES) - obscured |= slot_gloves - if(wear_suit.flags_inv & HIDEJUMPSUIT) - obscured |= slot_w_uniform - if(wear_suit.flags_inv & HIDESHOES) - obscured |= slot_shoes - - if(head) - if(head.flags_inv & HIDEMASK) - obscured |= slot_wear_mask - if(head.flags_inv & HIDEEYES) - obscured |= slot_glasses - if(head.flags_inv & HIDEEARS) - obscured |= slot_ears - - if(wear_mask) - if(wear_mask.flags_inv & HIDEEYES) - obscured |= slot_glasses - - if(obscured.len) - return obscured - else - return null - -/mob/living/carbon/human/assess_threat(mob/living/simple_animal/bot/secbot/judgebot, lasercolor) - if(judgebot.emagged == 2) - return 10 //Everyone is a criminal! - - var/threatcount = 0 - - //Lasertag bullshit - if(lasercolor) - if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve - if(istype(wear_suit, /obj/item/clothing/suit/redtag)) - threatcount += 4 - if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/redtag)) - threatcount += 4 - if(istype(belt, /obj/item/weapon/gun/energy/laser/redtag)) - threatcount += 2 - - if(lasercolor == "r") - if(istype(wear_suit, /obj/item/clothing/suit/bluetag)) - threatcount += 4 - if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/bluetag)) - threatcount += 4 - if(istype(belt, /obj/item/weapon/gun/energy/laser/bluetag)) - threatcount += 2 - - return threatcount - - //Check for ID - var/obj/item/weapon/card/id/idcard = get_idcard() - if(judgebot.idcheck && !idcard && name=="Unknown") - threatcount += 4 - - //Check for weapons - if(judgebot.weaponscheck) - if(!idcard || !(GLOB.access_weapons in idcard.access)) - for(var/obj/item/I in held_items) - if(judgebot.check_for_weapons(I)) - threatcount += 4 - if(judgebot.check_for_weapons(belt)) - threatcount += 2 - - //Check for arrest warrant - if(judgebot.check_records) - var/perpname = get_face_name(get_id_name()) - var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) - if(R && R.fields["criminal"]) - switch(R.fields["criminal"]) - if("*Arrest*") - threatcount += 5 - if("Incarcerated") - threatcount += 2 - if("Parolled") - threatcount += 2 - - //Check for dresscode violations - if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi)) - threatcount += 5 - - //Check for nonhuman scum - if(dna && dna.species.id && dna.species.id != "human" || "lizard" || "mammal" || "avian" || "aquatic" || "insect") - threatcount += 1 - - //mindshield implants imply trustworthyness - if(isloyal()) - threatcount -= 1 - - //Agent cards lower threatlevel. - if(istype(idcard, /obj/item/weapon/card/id/syndicate)) - threatcount -= 2 - - return threatcount - - -//Used for new human mobs created by cloning/goleming/podding -/mob/living/carbon/human/proc/set_cloned_appearance() - if(gender == MALE) - facial_hair_style = "Full Beard" - else - facial_hair_style = "Shaved" - hair_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") - underwear = "Nude" - update_body() - update_genitals() - update_hair() - -/mob/living/carbon/human/singularity_pull(S, current_size) - if(current_size >= STAGE_THREE) - for(var/obj/item/hand in held_items) - if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && dropItemToGround(hand)) - step_towards(hand, src) - to_chat(src, "\The [S] pulls \the [hand] from your grip!") - rad_act(current_size * 3) - if(mob_negates_gravity()) - return - ..() - -/mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C) - CHECK_DNA_AND_SPECIES(C) - - if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) - to_chat(src, "[C.name] is dead!") - return - if(is_mouth_covered()) - to_chat(src, "Remove your mask first!") - return 0 - if(C.is_mouth_covered()) - to_chat(src, "Remove [p_their()] mask first!") - return 0 - - if(C.cpr_time < world.time + 30) - visible_message("[src] is trying to perform CPR on [C.name]!", \ - "You try to perform CPR on [C.name]... Hold still!") - if(!do_mob(src, C)) - to_chat(src, "You fail to perform CPR on [C]!") - return 0 - - var/they_breathe = (!(NOBREATH in C.dna.species.species_traits)) - var/they_lung = C.getorganslot("lungs") - - if(C.health > HEALTH_THRESHOLD_CRIT) - return - - src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") - C.cpr_time = world.time - add_logs(src, C, "CPRed") - - if(they_breathe && they_lung) - var/suff = min(C.getOxyLoss(), 7) - C.adjustOxyLoss(-suff) - C.updatehealth() - to_chat(C, "You feel a breath of fresh air enter your lungs... It feels good...") - else if(they_breathe && !they_lung) - to_chat(C, "You feel a breath of fresh air... but you don't feel any better...") - else - to_chat(C, "You feel a breath of fresh air... which is a sensation you don't recognise...") - -/mob/living/carbon/human/generateStaticOverlay() - var/image/staticOverlay = image(icon('icons/effects/effects.dmi', "static"), loc = src) - staticOverlay.override = 1 - staticOverlays["static"] = staticOverlay - - staticOverlay = image(icon('icons/effects/effects.dmi', "blank"), loc = src) - staticOverlay.override = 1 - staticOverlays["blank"] = staticOverlay - - staticOverlay = getLetterImage(src, "H", 1) - staticOverlay.override = 1 - staticOverlays["letter"] = staticOverlay - - staticOverlay = getRandomAnimalImage(src) - staticOverlay.override = 1 - staticOverlays["animal"] = staticOverlay - -/mob/living/carbon/human/cuff_resist(obj/item/I) - if(dna && dna.check_mutation(HULK)) - say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) - if(..(I, cuff_break = FAST_CUFFBREAK)) - dropItemToGround(I) - else - if(..()) - dropItemToGround(I) - -/mob/living/carbon/human/clean_blood() - var/mob/living/carbon/human/H = src - if(H.gloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves() - else - ..() // Clear the Blood_DNA list - if(H.bloody_hands) - H.bloody_hands = 0 - H.update_inv_gloves() - update_icons() //apply the now updated overlays to the mob - - -/mob/living/carbon/human/wash_cream() - //clean both to prevent a rare bug +/mob/living/carbon/human/dummy + real_name = "Test Dummy" + status_flags = GODMODE|CANPUSH + +/mob/living/carbon/human/dummy/New(loc) + ..() + if(!initialized) + args[1] = FALSE + Initialize(arglist(args)) + +/mob/living/carbon/human/dummy/Life() + return + +/mob/living/carbon/human/Initialize() + verbs += /mob/living/proc/mob_sleep + verbs += /mob/living/proc/lay_down + + //initialize limbs first + create_bodyparts() + + //initialize dna. for spawned humans; overwritten by other code + create_dna(src) + randomize_human(src) + dna.initialize_dna() + + if(dna.species) + set_species(dna.species.type) + + //initialise organs + create_internal_organs() + + martial_art = default_martial_art + + handcrafting = new() + + ..() + +/mob/living/carbon/human/create_internal_organs() + if(!(NOHUNGER in dna.species.species_traits)) + internal_organs += new /obj/item/organ/appendix + if(!(NOBREATH in dna.species.species_traits)) + if(dna.species.mutantlungs) + internal_organs += new dna.species.mutantlungs() + else + internal_organs += new /obj/item/organ/lungs() + if(!(NOBLOOD in dna.species.species_traits)) + internal_organs += new /obj/item/organ/heart + + internal_organs += new dna.species.mutanteyes + internal_organs += new dna.species.mutantears + internal_organs += new /obj/item/organ/brain + internal_organs += new dna.species.mutanttongue + give_genitals() + ..() + +/mob/living/carbon/human/OpenCraftingMenu() + handcrafting.ui_interact(src) + +/mob/living/carbon/human/prepare_data_huds() + //Update med hud images... + ..() + //...sec hud images... + sec_hud_set_ID() + sec_hud_set_implants() + sec_hud_set_security_status() + //...and display them. + add_to_all_human_data_huds() + +/mob/living/carbon/human/Stat() + ..() + + if(statpanel("Status")) + stat(null, "Intent: [a_intent]") + stat(null, "Move Mode: [m_intent]") + if (internal) + if (!internal.air_contents) + qdel(internal) + else + stat("Internal Atmosphere Info", internal.name) + stat("Tank Pressure", internal.air_contents.return_pressure()) + stat("Distribution Pressure", internal.distribute_pressure) + + var/mob/living/simple_animal/borer/B = has_brain_worms() + if(B && B.controlling) + stat("Chemicals", B.chemicals) + + if(mind) + if(mind.changeling) + stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]") + stat("Absorbed DNA", mind.changeling.absorbedcount) + + + //NINJACODE + if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)) //Only display if actually a ninja. + var/obj/item/clothing/suit/space/space_ninja/SN = wear_suit + if(statpanel("SpiderOS")) + stat("SpiderOS Status:","[SN.s_initialized ? "Initialized" : "Disabled"]") + stat("Current Time:", "[worldtime2text()]") + if(SN.s_initialized) + //Suit gear + stat("Energy Charge:", "[round(SN.cell.charge/100)]%") + stat("Smoke Bombs:", "\Roman [SN.s_bombs]") + //Ninja status + stat("Fingerprints:", "[md5(dna.uni_identity)]") + stat("Unique Identity:", "[dna.unique_enzymes]") + stat("Overall Status:", "[stat > 1 ? "dead" : "[health]% healthy"]") + stat("Nutrition Status:", "[nutrition]") + stat("Oxygen Loss:", "[getOxyLoss()]") + stat("Toxin Levels:", "[getToxLoss()]") + stat("Burn Severity:", "[getFireLoss()]") + stat("Brute Trauma:", "[getBruteLoss()]") + stat("Radiation Levels:","[radiation] rad") + stat("Body Temperature:","[bodytemperature-T0C] degrees C ([bodytemperature*1.8-459.67] degrees F)") + + //Virsuses + if(viruses.len) + stat("Viruses:", null) + for(var/datum/disease/D in viruses) + stat("*", "[D.name], Type: [D.spread_text], Stage: [D.stage]/[D.max_stages], Possible Cure: [D.cure_text]") + + +/mob/living/carbon/human/show_inv(mob/user) + user.set_machine(src) + var/has_breathable_mask = istype(wear_mask, /obj/item/clothing/mask) + var/list/obscured = check_obscured_slots() + var/list/dat = list() + + dat += "" + for(var/i in 1 to held_items.len) + var/obj/item/I = get_item_for_held_index(i) + dat += "" + dat += "" + + dat += "" + + dat += "" + + if(slot_wear_mask in obscured) + dat += "" + else + dat += "" + + if(slot_neck in obscured) + dat += "" + else + dat += "" + + if(slot_glasses in obscured) + dat += "" + else + dat += "" + + if(slot_ears in obscured) + dat += "" + else + dat += "" + + dat += "" + + dat += "" + if(wear_suit) + dat += "" + else + dat += "" + + if(slot_shoes in obscured) + dat += "" + else + dat += "" + + if(slot_gloves in obscured) + dat += "" + else + dat += "" + + if(slot_w_uniform in obscured) + dat += "" + else + dat += "" + + if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (slot_w_uniform in obscured)) + dat += "" + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "" + + if(handcuffed) + dat += "" + if(legcuffed) + dat += "" + + dat += {"
[get_held_index_name(i)]:[(I && !(I.flags & ABSTRACT)) ? I : "Empty"]
 
Back:[(back && !(back.flags&ABSTRACT)) ? back : "Empty"]" + if(has_breathable_mask && istype(back, /obj/item/weapon/tank)) + dat += " [internal ? "Disable Internals" : "Set Internals"]" + + dat += "
 
Head:[(head && !(head.flags&ABSTRACT)) ? head : "Empty"]
Mask:Obscured
Mask:[(wear_mask && !(wear_mask.flags&ABSTRACT)) ? wear_mask : "Empty"]
Neck:Obscured
Neck:[(wear_neck && !(wear_neck.flags&ABSTRACT)) ? wear_neck : "Empty"]
Eyes:Obscured
Eyes:[(glasses && !(glasses.flags&ABSTRACT)) ? glasses : "Empty"]
Ears:Obscured
Ears:[(ears && !(ears.flags&ABSTRACT)) ? ears : "Empty"]
 
Exosuit:[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "Empty"]
 ↳Suit Storage:[(s_store && !(s_store.flags&ABSTRACT)) ? s_store : "Empty"]" + if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank)) + dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += "
 ↳Suit Storage:
Shoes:Obscured
Shoes:[(shoes && !(shoes.flags&ABSTRACT)) ? shoes : "Empty"]
Gloves:Obscured
Gloves:[(gloves && !(gloves.flags&ABSTRACT)) ? gloves : "Empty"]
Uniform:Obscured
Uniform:[(w_uniform && !(w_uniform.flags&ABSTRACT)) ? w_uniform : "Empty"]
 ↳Pockets:
 ↳ID:
 ↳Belt:
 ↳Belt:[(belt && !(belt.flags&ABSTRACT)) ? belt : "Empty"]" + if(has_breathable_mask && istype(belt, /obj/item/weapon/tank)) + dat += " [internal ? "Disable Internals" : "Set Internals"]" + dat += "
 ↳Pockets:[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" + dat += " [(r_store && !(r_store.flags&ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]
 ↳ID:[(wear_id && !(wear_id.flags&ABSTRACT)) ? wear_id : "Empty"]
Handcuffed: Remove
Legcuffed
+ Close + "} + + var/datum/browser/popup = new(user, "mob\ref[src]", "[src]", 440, 510) + popup.set_content(dat.Join()) + popup.open() + +// called when something steps onto a human +// this could be made more general, but for now just handle mulebot +/mob/living/carbon/human/Crossed(atom/movable/AM) + var/mob/living/simple_animal/bot/mulebot/MB = AM + if(istype(MB)) + MB.RunOver(src) + + spreadFire(AM) + + +/mob/living/carbon/human/Topic(href, href_list) + if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + + if(href_list["embedded_object"]) + var/obj/item/bodypart/L = locate(href_list["embedded_limb"]) in bodyparts + if(!L) + return + var/obj/item/I = locate(href_list["embedded_object"]) in L.embedded_objects + if(!I || I.loc != src) //no item, no limb, or item is not in limb or in the person anymore + return + var/time_taken = I.embedded_unsafe_removal_time*I.w_class + usr.visible_message("[usr] attempts to remove [I] from their [L.name].","You attempt to remove [I] from your [L.name]... (It will take [time_taken/10] seconds.)") + if(do_after(usr, time_taken, needhand = 1, target = src)) + if(!I || !L || I.loc != src || !(I in L.embedded_objects)) + return + L.embedded_objects -= I + L.receive_damage(I.embedded_unsafe_removal_pain_multiplier*I.w_class)//It hurts to rip it out, get surgery you dingus. + I.forceMove(get_turf(src)) + usr.put_in_hands(I) + usr.emote("scream") + usr.visible_message("[usr] successfully rips [I] out of their [L.name]!","You successfully remove [I] from your [L.name].") + if(!has_embedded_objects()) + clear_alert("embeddedobject") + return + + if(href_list["item"]) + var/slot = text2num(href_list["item"]) + if(slot in check_obscured_slots()) + to_chat(usr, "You can't reach that! Something is covering it.") + return + + if(href_list["pockets"]) + var/pocket_side = href_list["pockets"] + var/pocket_id = (pocket_side == "right" ? slot_r_store : slot_l_store) + var/obj/item/pocket_item = (pocket_id == slot_r_store ? r_store : l_store) + var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty + + var/delay_denominator = 1 + if(pocket_item && !(pocket_item.flags&ABSTRACT)) + if(pocket_item.flags & NODROP) + to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!") + to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.") + else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.flags&ABSTRACT)) + to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.") + delay_denominator = 4 + else + return + + if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator)) //placing an item into the pocket is 4 times faster + if(pocket_item) + if(pocket_item == (pocket_id == slot_r_store ? r_store : l_store)) //item still in the pocket we search + dropItemToGround(pocket_item) + else + if(place_item) + if(place_item.mob_can_equip(src, usr, pocket_id, FALSE, TRUE)) + usr.temporarilyRemoveItemFromInventory(place_item, TRUE) + equip_to_slot(place_item, pocket_id, TRUE) + //do nothing otherwise + + // Update strip window + if(usr.machine == src && in_range(src, usr)) + show_inv(usr) + else + // Display a warning if the user mocks up + to_chat(src, "You feel your [pocket_side] pocket being fumbled with!") + + ..() + + +///////HUDs/////// + if(href_list["hud"]) + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + var/perpname = get_face_name(get_id_name("")) + if(istype(H.glasses, /obj/item/clothing/glasses/hud) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud)) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.general) + if(href_list["photo_front"] || href_list["photo_side"]) + if(R) + if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + return + var/obj/item/weapon/photo/P = null + if(href_list["photo_front"]) + P = R.fields["photo_front"] + else if(href_list["photo_side"]) + P = R.fields["photo_side"] + if(P) + P.show(H) + + if(href_list["hud"] == "m") + if(istype(H.glasses, /obj/item/clothing/glasses/hud/health) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + if(href_list["p_stat"]) + var/health_status = input(usr, "Specify a new physical status for this person.", "Medical HUD", R.fields["p_stat"]) in list("Active", "Physically Unfit", "*Unconscious*", "*Deceased*", "Cancel") + if(R) + if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + return + if(health_status && health_status != "Cancel") + R.fields["p_stat"] = health_status + return + if(href_list["m_stat"]) + var/health_status = input(usr, "Specify a new mental status for this person.", "Medical HUD", R.fields["m_stat"]) in list("Stable", "*Watch*", "*Unstable*", "*Insane*", "Cancel") + if(R) + if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/health) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical)) + return + if(health_status && health_status != "Cancel") + R.fields["m_stat"] = health_status + return + if(href_list["evaluation"]) + if(!getBruteLoss() && !getFireLoss() && !getOxyLoss() && getToxLoss() < 20) + to_chat(usr, "No external injuries detected.
") + return + var/span = "notice" + var/status = "" + if(getBruteLoss()) + to_chat(usr, "Physical trauma analysis:") + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + var/brutedamage = BP.brute_dam + if(brutedamage > 0) + status = "received minor physical injuries." + span = "notice" + if(brutedamage > 20) + status = "been seriously damaged." + span = "danger" + if(brutedamage > 40) + status = "sustained major trauma!" + span = "userdanger" + if(brutedamage) + to_chat(usr, "[BP] appears to have [status]") + if(getFireLoss()) + to_chat(usr, "Analysis of skin burns:") + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + var/burndamage = BP.burn_dam + if(burndamage > 0) + status = "signs of minor burns." + span = "notice" + if(burndamage > 20) + status = "serious burns." + span = "danger" + if(burndamage > 40) + status = "major burns!" + span = "userdanger" + if(burndamage) + to_chat(usr, "[BP] appears to have [status]") + if(getOxyLoss()) + to_chat(usr, "Patient has signs of suffocation, emergency treatment may be required!") + if(getToxLoss() > 20) + to_chat(usr, "Gathered data is inconsistent with the analysis, possible cause: poisoning.") + + if(href_list["hud"] == "s") + if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at. + return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten + // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access + var/allowed_access = null + var/obj/item/clothing/glasses/G = H.glasses + if (!G.emagged) + if(H.wear_id) + var/list/access = H.wear_id.GetAccess() + if(GLOB.access_sec_doors in access) + allowed_access = H.get_authentification_name() + else + allowed_access = "@%&ERROR_%$*" + + + if(!allowed_access) + to_chat(H, "ERROR: Invalid Access") + return + + if(perpname) + R = find_record("name", perpname, GLOB.data_core.security) + if(R) + if(href_list["status"]) + var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel") + if(setcriminal != "Cancel") + if(R) + if(H.canUseHUD()) + if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + investigate_log("[src.key] has been set from [R.fields["criminal"]] to [setcriminal] by [usr.name] ([usr.key]).", "records") + R.fields["criminal"] = setcriminal + sec_hud_set_security_status() + return + + if(href_list["view"]) + if(R) + if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + return + to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]") + to_chat(usr, "Minor Crimes:") + for(var/datum/data/crime/c in R.fields["mi_crim"]) + to_chat(usr, "Crime: [c.crimeName]") + to_chat(usr, "Details: [c.crimeDetails]") + to_chat(usr, "Added by [c.author] at [c.time]") + to_chat(usr, "----------") + to_chat(usr, "Major Crimes:") + for(var/datum/data/crime/c in R.fields["ma_crim"]) + to_chat(usr, "Crime: [c.crimeName]") + to_chat(usr, "Details: [c.crimeDetails]") + to_chat(usr, "Added by [c.author] at [c.time]") + to_chat(usr, "----------") + to_chat(usr, "Notes: [R.fields["notes"]]") + return + + if(href_list["add_crime"]) + switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel")) + if("Minor Crime") + if(R) + var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null) + var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null) + if(R) + if (!t1 || !t2 || !allowed_access) + return + else if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + return + var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) + GLOB.data_core.addMinorCrime(R.fields["id"], crime) + to_chat(usr, "Successfully added a minor crime.") + return + if("Major Crime") + if(R) + var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null) + var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null) + if(R) + if (!t1 || !t2 || !allowed_access) + return + else if (!H.canUseHUD()) + return + else if (!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + return + var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, worldtime2text()) + GLOB.data_core.addMajorCrime(R.fields["id"], crime) + to_chat(usr, "Successfully added a major crime.") + return + + if(href_list["view_comment"]) + if(R) + if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + return + to_chat(usr, "Comments/Log:") + var/counter = 1 + while(R.fields[text("com_[]", counter)]) + to_chat(usr, R.fields[text("com_[]", counter)]) + to_chat(usr, "----------") + counter++ + return + + if(href_list["add_comment"]) + if(R) + var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null) + if(R) + if (!t1 || !allowed_access) + return + else if(!H.canUseHUD()) + return + else if(!istype(H.glasses, /obj/item/clothing/glasses/hud/security) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/security)) + return + var/counter = 1 + while(R.fields[text("com_[]", counter)]) + counter++ + R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []
[]", allowed_access, worldtime2text(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1) + to_chat(usr, "Successfully added comment.") + return + to_chat(usr, "Unable to locate a data core entry for this person.") + +/mob/living/carbon/human/proc/canUseHUD() + return !(src.stat || src.weakened || src.stunned || src.restrained()) + +/mob/living/carbon/human/can_inject(mob/user, error_msg, target_zone, var/penetrate_thick = 0) + . = 1 // Default to returning true. + if(user && !target_zone) + target_zone = user.zone_selected + if(dna && (PIERCEIMMUNE in dna.species.species_traits)) + . = 0 + // If targeting the head, see if the head item is thin enough. + // If targeting anything else, see if the wear suit is thin enough. + if(above_neck(target_zone)) + if(head && head.flags & THICKMATERIAL && !penetrate_thick) + . = 0 + else + if(wear_suit && wear_suit.flags & THICKMATERIAL && !penetrate_thick) + . = 0 + if(!. && error_msg && user) + // Might need re-wording. + to_chat(user, "There is no exposed flesh or thin material [above_neck(target_zone) ? "on [p_their()] head" : "on [p_their()] body"].") + +/mob/living/carbon/human/proc/check_obscured_slots() + var/list/obscured = list() + + if(wear_suit) + if(wear_suit.flags_inv & HIDEGLOVES) + obscured |= slot_gloves + if(wear_suit.flags_inv & HIDEJUMPSUIT) + obscured |= slot_w_uniform + if(wear_suit.flags_inv & HIDESHOES) + obscured |= slot_shoes + + if(head) + if(head.flags_inv & HIDEMASK) + obscured |= slot_wear_mask + if(head.flags_inv & HIDEEYES) + obscured |= slot_glasses + if(head.flags_inv & HIDEEARS) + obscured |= slot_ears + + if(wear_mask) + if(wear_mask.flags_inv & HIDEEYES) + obscured |= slot_glasses + + if(obscured.len) + return obscured + else + return null + +/mob/living/carbon/human/assess_threat(mob/living/simple_animal/bot/secbot/judgebot, lasercolor) + if(judgebot.emagged == 2) + return 10 //Everyone is a criminal! + + var/threatcount = 0 + + //Lasertag bullshit + if(lasercolor) + if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve + if(istype(wear_suit, /obj/item/clothing/suit/redtag)) + threatcount += 4 + if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/redtag)) + threatcount += 4 + if(istype(belt, /obj/item/weapon/gun/energy/laser/redtag)) + threatcount += 2 + + if(lasercolor == "r") + if(istype(wear_suit, /obj/item/clothing/suit/bluetag)) + threatcount += 4 + if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/bluetag)) + threatcount += 4 + if(istype(belt, /obj/item/weapon/gun/energy/laser/bluetag)) + threatcount += 2 + + return threatcount + + //Check for ID + var/obj/item/weapon/card/id/idcard = get_idcard() + if(judgebot.idcheck && !idcard && name=="Unknown") + threatcount += 4 + + //Check for weapons + if(judgebot.weaponscheck) + if(!idcard || !(GLOB.access_weapons in idcard.access)) + for(var/obj/item/I in held_items) + if(judgebot.check_for_weapons(I)) + threatcount += 4 + if(judgebot.check_for_weapons(belt)) + threatcount += 2 + + //Check for arrest warrant + if(judgebot.check_records) + var/perpname = get_face_name(get_id_name()) + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) + if(R && R.fields["criminal"]) + switch(R.fields["criminal"]) + if("*Arrest*") + threatcount += 5 + if("Incarcerated") + threatcount += 2 + if("Parolled") + threatcount += 2 + + //Check for dresscode violations + if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi)) + threatcount += 5 + + //Check for nonhuman scum + if(dna && dna.species.id && dna.species.id != "human" || "lizard" || "mammal" || "avian" || "aquatic" || "insect") + threatcount += 1 + + //mindshield implants imply trustworthyness + if(isloyal()) + threatcount -= 1 + + //Agent cards lower threatlevel. + if(istype(idcard, /obj/item/weapon/card/id/syndicate)) + threatcount -= 2 + + return threatcount + + +//Used for new human mobs created by cloning/goleming/podding +/mob/living/carbon/human/proc/set_cloned_appearance() + if(gender == MALE) + facial_hair_style = "Full Beard" + else + facial_hair_style = "Shaved" + hair_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") + underwear = "Nude" + update_body() + update_genitals() + update_hair() + +/mob/living/carbon/human/singularity_pull(S, current_size) + if(current_size >= STAGE_THREE) + for(var/obj/item/hand in held_items) + if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && dropItemToGround(hand)) + step_towards(hand, src) + to_chat(src, "\The [S] pulls \the [hand] from your grip!") + rad_act(current_size * 3) + if(mob_negates_gravity()) + return + ..() + +/mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C) + CHECK_DNA_AND_SPECIES(C) + + if(C.stat == DEAD || (C.status_flags & FAKEDEATH)) + to_chat(src, "[C.name] is dead!") + return + if(is_mouth_covered()) + to_chat(src, "Remove your mask first!") + return 0 + if(C.is_mouth_covered()) + to_chat(src, "Remove [p_their()] mask first!") + return 0 + + if(C.cpr_time < world.time + 30) + visible_message("[src] is trying to perform CPR on [C.name]!", \ + "You try to perform CPR on [C.name]... Hold still!") + if(!do_mob(src, C)) + to_chat(src, "You fail to perform CPR on [C]!") + return 0 + + var/they_breathe = (!(NOBREATH in C.dna.species.species_traits)) + var/they_lung = C.getorganslot("lungs") + + if(C.health > HEALTH_THRESHOLD_CRIT) + return + + src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") + C.cpr_time = world.time + add_logs(src, C, "CPRed") + + if(they_breathe && they_lung) + var/suff = min(C.getOxyLoss(), 7) + C.adjustOxyLoss(-suff) + C.updatehealth() + to_chat(C, "You feel a breath of fresh air enter your lungs... It feels good...") + else if(they_breathe && !they_lung) + to_chat(C, "You feel a breath of fresh air... but you don't feel any better...") + else + to_chat(C, "You feel a breath of fresh air... which is a sensation you don't recognise...") + +/mob/living/carbon/human/generateStaticOverlay() + var/image/staticOverlay = image(icon('icons/effects/effects.dmi', "static"), loc = src) + staticOverlay.override = 1 + staticOverlays["static"] = staticOverlay + + staticOverlay = image(icon('icons/effects/effects.dmi', "blank"), loc = src) + staticOverlay.override = 1 + staticOverlays["blank"] = staticOverlay + + staticOverlay = getLetterImage(src, "H", 1) + staticOverlay.override = 1 + staticOverlays["letter"] = staticOverlay + + staticOverlay = getRandomAnimalImage(src) + staticOverlay.override = 1 + staticOverlays["animal"] = staticOverlay + +/mob/living/carbon/human/cuff_resist(obj/item/I) + if(dna && dna.check_mutation(HULK)) + say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) + if(..(I, cuff_break = FAST_CUFFBREAK)) + dropItemToGround(I) + else + if(..()) + dropItemToGround(I) + +/mob/living/carbon/human/clean_blood() + var/mob/living/carbon/human/H = src + if(H.gloves) + if(H.gloves.clean_blood()) + H.update_inv_gloves() + else + ..() // Clear the Blood_DNA list + if(H.bloody_hands) + H.bloody_hands = 0 + H.update_inv_gloves() + update_icons() //apply the now updated overlays to the mob + + +/mob/living/carbon/human/wash_cream() + //clean both to prevent a rare bug cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard")) cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_human")) - - -//Turns a mob black, flashes a skeleton overlay -//Just like a cartoon! -/mob/living/carbon/human/proc/electrocution_animation(anim_duration) - //Handle mutant parts if possible - if(dna && dna.species) - add_atom_colour("#000000", TEMPORARY_COLOUR_PRIORITY) + + +//Turns a mob black, flashes a skeleton overlay +//Just like a cartoon! +/mob/living/carbon/human/proc/electrocution_animation(anim_duration) + //Handle mutant parts if possible + if(dna && dna.species) + add_atom_colour("#000000", TEMPORARY_COLOUR_PRIORITY) var/static/mutable_appearance/electrocution_skeleton_anim if(!electrocution_skeleton_anim) electrocution_skeleton_anim = mutable_appearance(icon, "electrocuted_base") electrocution_skeleton_anim.appearance_flags |= RESET_COLOR - add_overlay(electrocution_skeleton_anim) - addtimer(CALLBACK(src, .proc/end_electrocution_animation, electrocution_skeleton_anim), anim_duration) - - else //or just do a generic animation - flick_overlay_view(image(icon,src,"electrocuted_generic",ABOVE_MOB_LAYER), src, anim_duration) - + add_overlay(electrocution_skeleton_anim) + addtimer(CALLBACK(src, .proc/end_electrocution_animation, electrocution_skeleton_anim), anim_duration) + + else //or just do a generic animation + flick_overlay_view(image(icon,src,"electrocuted_generic",ABOVE_MOB_LAYER), src, anim_duration) + /mob/living/carbon/human/proc/end_electrocution_animation(mutable_appearance/MA) - remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#000000") + remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#000000") cut_overlay(MA) - -/mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 0) - if(incapacitated() || lying ) - return - if(!Adjacent(M) && (M.loc != src)) - if((be_close == 0) && (dna.check_mutation(TK))) - if(tkMaxRangeCheck(src, M)) - return 1 - return - return 1 - -/mob/living/carbon/human/resist_restraints() - if(wear_suit && wear_suit.breakouttime) - changeNext_move(CLICK_CD_BREAKOUT) - last_special = world.time + CLICK_CD_BREAKOUT - cuff_resist(wear_suit) - else - ..() - -/mob/living/carbon/human/replace_records_name(oldname,newname) // Only humans have records right now, move this up if changed. - for(var/list/L in list(GLOB.data_core.general,GLOB.data_core.medical,GLOB.data_core.security,GLOB.data_core.locked)) - var/datum/data/record/R = find_record("name", oldname, L) - if(R) - R.fields["name"] = newname - -/mob/living/carbon/human/get_total_tint() - . = ..() - if(glasses) - . += glasses.tint - -/mob/living/carbon/human/update_health_hud() - if(!client || !hud_used) - return - if(dna.species.update_health_hud()) - return - else - if(hud_used.healths) - var/health_amount = health - staminaloss - if(..(health_amount)) //not dead - switch(hal_screwyhud) - if(SCREWYHUD_CRIT) - hud_used.healths.icon_state = "health6" - if(SCREWYHUD_DEAD) - hud_used.healths.icon_state = "health7" - if(SCREWYHUD_HEALTHY) - hud_used.healths.icon_state = "health0" - if(hud_used.healthdoll) - hud_used.healthdoll.cut_overlays() - if(stat != DEAD) - hud_used.healthdoll.icon_state = "healthdoll_OVERLAY" - for(var/X in bodyparts) - var/obj/item/bodypart/BP = X - var/damage = BP.burn_dam + BP.brute_dam - var/comparison = (BP.max_damage/5) - var/icon_num = 0 - if(damage) - icon_num = 1 - if(damage > (comparison)) - icon_num = 2 - if(damage > (comparison*2)) - icon_num = 3 - if(damage > (comparison*3)) - icon_num = 4 - if(damage > (comparison*4)) - icon_num = 5 - if(hal_screwyhud == SCREWYHUD_HEALTHY) - icon_num = 0 - if(icon_num) + +/mob/living/carbon/human/canUseTopic(atom/movable/M, be_close = 0) + if(incapacitated() || lying ) + return + if(!Adjacent(M) && (M.loc != src)) + if((be_close == 0) && (dna.check_mutation(TK))) + if(tkMaxRangeCheck(src, M)) + return 1 + return + return 1 + +/mob/living/carbon/human/resist_restraints() + if(wear_suit && wear_suit.breakouttime) + changeNext_move(CLICK_CD_BREAKOUT) + last_special = world.time + CLICK_CD_BREAKOUT + cuff_resist(wear_suit) + else + ..() + +/mob/living/carbon/human/replace_records_name(oldname,newname) // Only humans have records right now, move this up if changed. + for(var/list/L in list(GLOB.data_core.general,GLOB.data_core.medical,GLOB.data_core.security,GLOB.data_core.locked)) + var/datum/data/record/R = find_record("name", oldname, L) + if(R) + R.fields["name"] = newname + +/mob/living/carbon/human/get_total_tint() + . = ..() + if(glasses) + . += glasses.tint + +/mob/living/carbon/human/update_health_hud() + if(!client || !hud_used) + return + if(dna.species.update_health_hud()) + return + else + if(hud_used.healths) + var/health_amount = health - staminaloss + if(..(health_amount)) //not dead + switch(hal_screwyhud) + if(SCREWYHUD_CRIT) + hud_used.healths.icon_state = "health6" + if(SCREWYHUD_DEAD) + hud_used.healths.icon_state = "health7" + if(SCREWYHUD_HEALTHY) + hud_used.healths.icon_state = "health0" + if(hud_used.healthdoll) + hud_used.healthdoll.cut_overlays() + if(stat != DEAD) + hud_used.healthdoll.icon_state = "healthdoll_OVERLAY" + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + var/damage = BP.burn_dam + BP.brute_dam + var/comparison = (BP.max_damage/5) + var/icon_num = 0 + if(damage) + icon_num = 1 + if(damage > (comparison)) + icon_num = 2 + if(damage > (comparison*2)) + icon_num = 3 + if(damage > (comparison*3)) + icon_num = 4 + if(damage > (comparison*4)) + icon_num = 5 + if(hal_screwyhud == SCREWYHUD_HEALTHY) + icon_num = 0 + if(icon_num) hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[BP.body_zone][icon_num]")) - for(var/t in get_missing_limbs()) //Missing limbs + for(var/t in get_missing_limbs()) //Missing limbs hud_used.healthdoll.add_overlay(mutable_appearance('icons/mob/screen_gen.dmi', "[t]6")) - else - hud_used.healthdoll.icon_state = "healthdoll_DEAD" - -/mob/living/carbon/human/fully_heal(admin_revive = 0) - if(admin_revive) - regenerate_limbs() - regenerate_organs() - remove_all_embedded_objects() - set_heartattack(FALSE) - drunkenness = 0 - for(var/datum/mutation/human/HM in dna.mutations) - if(HM.quality != POSITIVE) - dna.remove_mutation(HM.name) - ..() - -/mob/living/carbon/human/proc/influenceSin() - var/datum/objective/sintouched/O - switch(rand(1,7))//traditional seven deadly sins... except lust. - if(1) // acedia - log_game("[src] was influenced by the sin of Acedia.") - O = new /datum/objective/sintouched/acedia - if(2) // Gluttony - log_game("[src] was influenced by the sin of gluttony.") - O = new /datum/objective/sintouched/gluttony - if(3) // Greed - log_game("[src] was influenced by the sin of greed.") - O = new /datum/objective/sintouched/greed - if(4) // sloth - log_game("[src] was influenced by the sin of sloth.") - O = new /datum/objective/sintouched/sloth - if(5) // Wrath - log_game("[src] was influenced by the sin of wrath.") - O = new /datum/objective/sintouched/wrath - if(6) // Envy - log_game("[src] was influenced by the sin of envy.") - O = new /datum/objective/sintouched/envy - if(7) // Pride - log_game("[src] was influenced by the sin of pride.") - O = new /datum/objective/sintouched/pride - SSticker.mode.sintouched += src.mind - src.mind.objectives += O - src.mind.announce_objectives() - -/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker) - . = ..() - if (dna && dna.species) - . += dna.species.check_weakness(weapon, attacker) - -/mob/living/carbon/human/is_literate() - return 1 - -/mob/living/carbon/human/can_hold_items() - return TRUE - -/mob/living/carbon/human/update_gravity(has_gravity,override = 0) - override = dna.species.override_float - ..() - -/mob/living/carbon/human/vomit(lost_nutrition = 10, blood = 0, stun = 1, distance = 0, message = 1, toxic = 0) - if(blood && (NOBLOOD in dna.species.species_traits)) - if(message) - visible_message("[src] dry heaves!", \ - "You try to throw up, but there's nothing in your stomach!") - if(stun) - Weaken(10) - return 1 - ..() - -/mob/living/carbon/human/Bump(atom/A) - ..() - var/crashdir = get_dir(src, A) - var/obj/item/device/flightpack/FP = get_flightpack() - if(FP) - FP.flight_impact(A, crashdir) - -/mob/living/carbon/human/vv_get_dropdown() - . = ..() - . += "---" - .["Make monkey"] = "?_src_=vars;makemonkey=\ref[src]" - .["Set Species"] = "?_src_=vars;setspecies=\ref[src]" - .["Make cyborg"] = "?_src_=vars;makerobot=\ref[src]" - .["Make alien"] = "?_src_=vars;makealien=\ref[src]" - .["Make slime"] = "?_src_=vars;makeslime=\ref[src]" - .["Toggle Purrbation"] = "?_src_=vars;purrbation=\ref[src]" - -/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user) - if((target != pulling) || (grab_state < GRAB_AGGRESSIVE) || (user != target) || !isliving(user) || stat || user.stat)//Get consent first :^) - . = ..() - return - buckle_mob(target, TRUE, TRUE) - . = ..() - -/mob/living/carbon/human/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) - if(!force)//humans are only meant to be ridden through piggybacking and special cases - return - if(!is_type_in_typecache(M, can_ride_typecache)) - M.visible_message("[M] really can't seem to mount [src]...") - return - if(!riding_datum) - riding_datum = new /datum/riding/human(src) - if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS)) - return + else + hud_used.healthdoll.icon_state = "healthdoll_DEAD" + +/mob/living/carbon/human/fully_heal(admin_revive = 0) + if(admin_revive) + regenerate_limbs() + regenerate_organs() + remove_all_embedded_objects() + set_heartattack(FALSE) + drunkenness = 0 + for(var/datum/mutation/human/HM in dna.mutations) + if(HM.quality != POSITIVE) + dna.remove_mutation(HM.name) + ..() + +/mob/living/carbon/human/proc/influenceSin() + var/datum/objective/sintouched/O + switch(rand(1,7))//traditional seven deadly sins... except lust. + if(1) // acedia + log_game("[src] was influenced by the sin of Acedia.") + O = new /datum/objective/sintouched/acedia + if(2) // Gluttony + log_game("[src] was influenced by the sin of gluttony.") + O = new /datum/objective/sintouched/gluttony + if(3) // Greed + log_game("[src] was influenced by the sin of greed.") + O = new /datum/objective/sintouched/greed + if(4) // sloth + log_game("[src] was influenced by the sin of sloth.") + O = new /datum/objective/sintouched/sloth + if(5) // Wrath + log_game("[src] was influenced by the sin of wrath.") + O = new /datum/objective/sintouched/wrath + if(6) // Envy + log_game("[src] was influenced by the sin of envy.") + O = new /datum/objective/sintouched/envy + if(7) // Pride + log_game("[src] was influenced by the sin of pride.") + O = new /datum/objective/sintouched/pride + SSticker.mode.sintouched += src.mind + src.mind.objectives += O + src.mind.announce_objectives() + +/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker) + . = ..() + if (dna && dna.species) + . += dna.species.check_weakness(weapon, attacker) + +/mob/living/carbon/human/is_literate() + return 1 + +/mob/living/carbon/human/can_hold_items() + return TRUE + +/mob/living/carbon/human/update_gravity(has_gravity,override = 0) + override = dna.species.override_float + ..() + +/mob/living/carbon/human/vomit(lost_nutrition = 10, blood = 0, stun = 1, distance = 0, message = 1, toxic = 0) + if(blood && (NOBLOOD in dna.species.species_traits)) + if(message) + visible_message("[src] dry heaves!", \ + "You try to throw up, but there's nothing in your stomach!") + if(stun) + Weaken(10) + return 1 + ..() + +/mob/living/carbon/human/Bump(atom/A) + ..() + var/crashdir = get_dir(src, A) + var/obj/item/device/flightpack/FP = get_flightpack() + if(FP) + FP.flight_impact(A, crashdir) + +/mob/living/carbon/human/vv_get_dropdown() + . = ..() + . += "---" + .["Make monkey"] = "?_src_=vars;makemonkey=\ref[src]" + .["Set Species"] = "?_src_=vars;setspecies=\ref[src]" + .["Make cyborg"] = "?_src_=vars;makerobot=\ref[src]" + .["Make alien"] = "?_src_=vars;makealien=\ref[src]" + .["Make slime"] = "?_src_=vars;makeslime=\ref[src]" + .["Toggle Purrbation"] = "?_src_=vars;purrbation=\ref[src]" + +/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user) + if((target != pulling) || (grab_state < GRAB_AGGRESSIVE) || (user != target) || !isliving(user) || stat || user.stat)//Get consent first :^) + . = ..() + return + buckle_mob(target, TRUE, TRUE) + . = ..() + +/mob/living/carbon/human/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) + if(!force)//humans are only meant to be ridden through piggybacking and special cases + return + if(!is_type_in_typecache(M, can_ride_typecache)) + M.visible_message("[M] really can't seem to mount [src]...") + return + if(!riding_datum) + riding_datum = new /datum/riding/human(src) + if(buckled_mobs && ((M in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled || (M.stat != CONSCIOUS)) + return visible_message("[M] starts to climb onto [src]...") if(do_after(M, 15, target = src)) if(iscarbon(M)) @@ -942,10 +938,10 @@ stop_pulling() else visible_message("[M] fails to climb onto [src]!") - -/mob/living/carbon/human/unbuckle_mob(mob/living/M, force=FALSE) - if(iscarbon(M)) - if(riding_datum) - riding_datum.unequip_buckle_inhands(M) - riding_datum.restore_position(M) - . = ..(M, force) + +/mob/living/carbon/human/unbuckle_mob(mob/living/M, force=FALSE) + if(iscarbon(M)) + if(riding_datum) + riding_datum.unequip_buckle_inhands(M) + riding_datum.restore_position(M) + . = ..(M, force) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d7a2282a98..0623921d63 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -31,25 +31,6 @@ protection += C.armor[d_type] return protection -///checkeyeprot() -///Returns a number between -1 to 2 -/mob/living/carbon/human/get_eye_protection() - var/number = ..() - if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head - var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item - number += HFP.flash_protect - if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses - var/obj/item/clothing/glasses/GFP = src.glasses - number += GFP.flash_protect - if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask - var/obj/item/clothing/mask/MFP = src.wear_mask - number += MFP.flash_protect - return number - -/mob/living/carbon/human/get_ear_protection() - if((ears && HAS_SECONDARY_FLAG(ears, BANG_PROTECT)) || (head && HAS_SECONDARY_FLAG(head, BANG_PROTECT))) - return 1 - /mob/living/carbon/human/on_hit(obj/item/projectile/P) dna.species.on_hit(P, src) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 7ca155ec57..f697215a4a 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,5 +1,4 @@ /mob/living/carbon/human - initial_languages = list(/datum/language/common) hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD) possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM) pressure_resistance = 25 @@ -49,4 +48,4 @@ var/datum/personal_crafting/handcrafting can_buckle = TRUE buckle_lying = FALSE - can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot) \ No newline at end of file + can_ride_typecache = list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 331fc5fc95..21e1a5648e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -142,10 +142,12 @@ return not_handled //For future deeper overrides /mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE) + var/index = get_held_index_of_item(I) . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should. if(!. || !I) return - + if(index && dna.species.mutanthands) + put_in_hand(new dna.species.mutanthands(), index) if(I == wear_suit) if(s_store && invdrop) dropItemToGround(s_store, TRUE) //It makes no sense for your suit storage to stay on you if you drop your suit. diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a48124e412..b3f436ec68 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -35,7 +35,7 @@ var/say_mod = "says" // affects the speech message var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have. var/list/mutant_bodyparts = list() // Parts of the body that are diferent enough from the standard human model that they cause clipping with some equipment - var/list/mutant_organs = list(/obj/item/organ/tongue) //Internal organs that are unique to this race. + var/list/mutant_organs = list() //Internal organs that are unique to this race. var/speedmod = 0 // this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster var/armor = 0 // overall defense for the race... or less defense, if it's negative. var/brutemod = 1 // multiplier for brute damage @@ -65,11 +65,12 @@ //Flight and floating var/override_float = 0 - //Eyes var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes - - //Ears var/obj/item/organ/ears/mutantears = /obj/item/organ/ears + var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue + + //Hands + var/obj/item/mutanthands = null //Citadel snowflake var/fixed_mut_color2 = "" @@ -119,6 +120,8 @@ var/obj/item/thing = C.get_item_by_slot(slot_id) if(thing && (!thing.species_exception || !is_type_in_list(src,thing.species_exception))) C.dropItemToGround(thing) + if(C.hud_used) + C.hud_used.update_locked_slots() // this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs") @@ -131,6 +134,7 @@ var/obj/item/organ/appendix/appendix = C.getorganslot("appendix") var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight") var/obj/item/organ/ears/ears = C.getorganslot("ears") + var/obj/item/organ/tongue/tongue = C.getorganslot("tongue") if((NOBLOOD in species_traits) && heart) heart.Remove(C) @@ -143,15 +147,21 @@ qdel(lungs) lungs = null - if(eyes) - qdel(eyes) - eyes = new mutanteyes - eyes.Insert(C) + if(C.get_bodypart("head")) + if(eyes) + qdel(eyes) + eyes = new mutanteyes + eyes.Insert(C) - if(ears) - qdel(ears) - ears = new mutantears - ears.Insert(C) + if(ears) + qdel(ears) + ears = new mutantears + ears.Insert(C) + + if(tongue) + qdel(tongue) + tongue = new mutanttongue + tongue.Insert(C) if((!(NOBREATH in species_traits)) && !lungs) if(mutantlungs) @@ -173,6 +183,21 @@ if(exotic_bloodtype && C.dna.blood_type != exotic_bloodtype) C.dna.blood_type = exotic_bloodtype + if(old_species.mutanthands) + for(var/obj/item/I in C.held_items) + if(istype(I, old_species.mutanthands)) + qdel(I) + + if(mutanthands) + // Drop items in hands + // If you're lucky enough to have a NODROP item, then it stays. + for(var/V in C.held_items) + var/obj/item/I = V + if(istype(I)) + C.dropItemToGround(I) + else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand + C.put_in_hands(new mutanthands()) + if(NOAROUSAL in species_traits) C.canbearoused = FALSE else @@ -343,23 +368,23 @@ standing += eye_overlay //Underwear, Undershirts & Socks - if(H.underwear) - var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] - if(underwear) - standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + if(!(NO_UNDERWEAR in species_traits)) + if(H.underwear) + var/datum/sprite_accessory/underwear/underwear = GLOB.underwear_list[H.underwear] + if(underwear) + standing += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) - if(H.undershirt) - var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] - if(undershirt) - if(H.dna.species.sexes && H.gender == FEMALE) - standing += wear_female_version(undershirt.icon_state, undershirt.icon, -BODY_LAYER) - else - standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) - - if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) - var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] - if(socks) - standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) + if(H.undershirt) + var/datum/sprite_accessory/undershirt/undershirt = GLOB.undershirt_list[H.undershirt] + if(undershirt) + if(H.dna.species.sexes && H.gender == FEMALE) + standing += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + else + standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) + var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] + if(socks) + standing += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) if(standing.len) H.overlays_standing[BODY_LAYER] = standing diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 85b36c90c0..b76536f5bf 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -4,6 +4,6 @@ say_mod = "gibbers" sexes = 0 species_traits = list(NOBLOOD,NOBREATH,VIRUSIMMUNE,NOGUNS,NOHUNGER) - mutant_organs = list(/obj/item/organ/tongue/abductor) + mutanttongue = /obj/item/organ/tongue/abductor var/scientist = 0 // vars to not pollute spieces list with castes - var/team = 1 \ No newline at end of file + var/team = 1 diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 0e63115652..1c7cc6806b 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -5,7 +5,7 @@ species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOBLOOD,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYLIMBATTACHMENT) meat = null damage_overlay_type = "synth" - mutant_organs = list(/obj/item/organ/tongue/robot) + mutanttongue = /obj/item/organ/tongue/robot limbs_id = "synth" /datum/species/android/on_species_gain(mob/living/carbon/C) @@ -18,4 +18,4 @@ . = ..() for(var/X in C.bodyparts) var/obj/item/bodypart/O = X - O.change_bodypart_status(BODYPART_ORGANIC,FALSE, TRUE) \ No newline at end of file + O.change_bodypart_status(BODYPART_ORGANIC,FALSE, TRUE) diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 65b3eb9a65..5c56a34a20 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -2,7 +2,7 @@ name = "Flyperson" id = "fly" say_mod = "buzzes" - mutant_organs = list(/obj/item/organ/tongue/fly) + mutanttongue = /obj/item/organ/tongue/fly meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly /datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 0390661c78..aba76f570a 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -1,646 +1,699 @@ -/datum/species/golem - // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. - name = "Golem" - id = "iron golem" - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) - speedmod = 2 - armor = 55 - siemens_coeff = 0 - punchdamagelow = 5 - punchdamagehigh = 14 - punchstunthreshold = 11 //about 40% chance to stun - no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform) - nojumpsuit = 1 - sexes = 1 - damage_overlay_type = "" - meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem - // To prevent golem subtypes from overwhelming the odds when random species - // changes, only the Random Golem type can be chosen - blacklisted = TRUE - dangerous_existence = TRUE - limbs_id = "golem" - fixed_mut_color = "aaa" - var/info_text = "As an Iron Golem, you don't have any special traits." - - var/prefix = "Iron" - var/list/special_names - -/datum/species/golem/random_name(gender,unique,lastname) - var/golem_surname = pick(GLOB.golem_names) - // 3% chance that our golem has a human surname, because - // cultural contamination - if(prob(3)) - golem_surname = pick(GLOB.last_names) - else if(special_names && prob(5)) - golem_surname = pick(special_names) - - var/golem_name = "[prefix] [golem_surname]" - return golem_name - -/datum/species/golem/random - name = "Random Golem" - blacklisted = FALSE - dangerous_existence = FALSE - -/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - var/list/golem_types = typesof(/datum/species/golem) - src.type - var/datum/species/golem/golem_type = pick(golem_types) - var/mob/living/carbon/human/H = C - H.set_species(golem_type) - to_chat(H, "[initial(golem_type.info_text)]") - -/datum/species/golem/adamantine - name = "Adamantine Golem" - id = "adamantine golem" - meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine - fixed_mut_color = "4ed" - info_text = "As an Adamantine Golem, you don't have any special traits." - prefix = "Adamantine" - -//Explodes on death -/datum/species/golem/plasma - name = "Plasma Golem" - id = "plasma golem" - fixed_mut_color = "a3d" - meat = /obj/item/weapon/ore/plasma - //Can burn and takes damage from heat - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) - info_text = "As a Plasma Golem, you explode on death!" - burnmod = 1.5 - prefix = "Plasma" - special_names = list("Flood","Fire","Bar","Man") - +/datum/species/golem + // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. + name = "Golem" + id = "iron golem" + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) + mutant_organs = list(/obj/item/organ/adamantine_resonator) + speedmod = 2 + armor = 55 + siemens_coeff = 0 + punchdamagelow = 5 + punchdamagehigh = 14 + punchstunthreshold = 11 //about 40% chance to stun + no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform, slot_s_store) + nojumpsuit = 1 + sexes = 1 + damage_overlay_type = "" + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem + // To prevent golem subtypes from overwhelming the odds when random species + // changes, only the Random Golem type can be chosen + blacklisted = TRUE + dangerous_existence = TRUE + limbs_id = "golem" + fixed_mut_color = "aaa" + var/info_text = "As an Iron Golem, you don't have any special traits." + + var/prefix = "Iron" + var/list/special_names + var/human_surname_chance = 3 + var/special_name_chance = 5 + +/datum/species/golem/random_name(gender,unique,lastname) + var/golem_surname = pick(GLOB.golem_names) + // 3% chance that our golem has a human surname, because + // cultural contamination + if(prob(human_surname_chance)) + golem_surname = pick(GLOB.last_names) + else if(special_names && special_names.len && prob(special_name_chance)) + golem_surname = pick(special_names) + + var/golem_name = "[prefix] [golem_surname]" + return golem_name + +/datum/species/golem/random + name = "Random Golem" + blacklisted = FALSE + dangerous_existence = FALSE + +/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + var/list/golem_types = typesof(/datum/species/golem) - src.type + var/datum/species/golem/golem_type = pick(golem_types) + var/mob/living/carbon/human/H = C + H.set_species(golem_type) + to_chat(H, "[initial(golem_type.info_text)]") + +/datum/species/golem/adamantine + name = "Adamantine Golem" + id = "adamantine golem" + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine + mutant_organs = list(/obj/item/organ/adamantine_resonator, /obj/item/organ/vocal_cords/adamantine) + fixed_mut_color = "4ed" + info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems." + prefix = "Adamantine" + +//The suicide bombers of golemkind +/datum/species/golem/plasma + name = "Plasma Golem" + id = "plasma golem" + fixed_mut_color = "a3d" + meat = /obj/item/weapon/ore/plasma + //Can burn and takes damage from heat + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) + info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!" + heatmod = 0 //fine until they blow up + prefix = "Plasma" + special_names = list("Flood","Fire","Bar","Man") + var/boom_warning = FALSE + var/datum/action/innate/ignite/ignite + /datum/species/golem/plasma/spec_life(mob/living/carbon/human/H) - if(H.bodytemperature > 900 && H.on_fire) + if(H.bodytemperature > 750) + if(!boom_warning && H.on_fire) + to_chat(H, "You feel like you could blow up at any moment!") + boom_warning = TRUE + else + if(boom_warning) + to_chat(H, "You feel more stable.") + boom_warning = FALSE + + if(H.bodytemperature > 850 && H.on_fire && prob(25)) explosion(get_turf(H),1,2,4,flame_range = 5) if(H) H.gib() if(H.fire_stacks < 2) //flammable H.adjust_fire_stacks(1) ..() - -//Harder to hurt -/datum/species/golem/diamond - name = "Diamond Golem" - id = "diamond golem" - fixed_mut_color = "0ff" - armor = 70 //up from 55 - meat = /obj/item/weapon/ore/diamond - info_text = "As a Diamond Golem, you are more resistant than the average golem." - prefix = "Diamond" - special_names = list("Back") - -//Faster but softer and less armoured -/datum/species/golem/gold - name = "Gold Golem" - id = "gold golem" - fixed_mut_color = "cc0" - speedmod = 1 - armor = 25 //down from 55 - meat = /obj/item/weapon/ore/gold - info_text = "As a Gold Golem, you are faster but less resistant than the average golem." - prefix = "Golden" - -//Heavier, thus higher chance of stunning when punching -/datum/species/golem/silver - name = "Silver Golem" - id = "silver golem" - fixed_mut_color = "ddd" - punchstunthreshold = 9 //60% chance, from 40% - meat = /obj/item/weapon/ore/silver - info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning." - prefix = "Silver" - special_names = list("Surfer", "Chariot", "Lining") - -//Harder to stun, deals more damage, but it's even slower -/datum/species/golem/plasteel - name = "Plasteel Golem" - id = "plasteel golem" - fixed_mut_color = "bbb" - stunmod = 0.40 - punchdamagelow = 12 - punchdamagehigh = 21 - punchstunthreshold = 18 //still 40% stun chance - speedmod = 4 //pretty fucking slow - meat = /obj/item/weapon/ore/iron - info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." - attack_verb = "smash" - attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard - prefix = "Plasteel" - -//Immune to ash storms -/datum/species/golem/titanium - name = "Titanium Golem" - id = "titanium golem" - fixed_mut_color = "fff" - meat = /obj/item/weapon/ore/titanium - info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." - burnmod = 0.9 - prefix = "Titanium" - -/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "ash" - -/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "ash" - -//Immune to ash storms and lava -/datum/species/golem/plastitanium - name = "Plastitanium Golem" - id = "plastitanium golem" - fixed_mut_color = "888" - meat = /obj/item/weapon/ore/titanium - info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." - burnmod = 0.8 - prefix = "Plastitanium" - -/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.weather_immunities |= "lava" - C.weather_immunities |= "ash" - -/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) - . = ..() - C.weather_immunities -= "ash" - C.weather_immunities -= "lava" - -//Fast and regenerates... but can only speak like an abductor -/datum/species/golem/alloy - name = "Alien Alloy Golem" - id = "alloy golem" - fixed_mut_color = "333" - meat = /obj/item/stack/sheet/mineral/abductor - mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue - speedmod = 1 //faster - info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems." - prefix = "Alien" - special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown - -//Regenerates because self-repairing super-advanced alien tech -/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - H.heal_overall_damage(2,2) - H.adjustToxLoss(-2) - H.adjustOxyLoss(-2) - -//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races -/datum/species/golem/wood - name = "Wood Golem" - id = "wood golem" - fixed_mut_color = "49311c" - meat = /obj/item/stack/sheet/mineral/wood - //Can burn and take damage from heat - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS) - armor = 30 - burnmod = 1.25 - heatmod = 1.5 - info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." - prefix = "Wooden" - -/datum/species/golem/wood/random_name(gender,unique,lastname) - var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \ - "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper") - var/golem_name = "[prefix] [plant_name]" - return golem_name - -/datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.faction |= "plants" - C.faction |= "vines" - -/datum/species/golem/wood/on_species_loss(mob/living/carbon/C) - . = ..() - C.faction -= "plants" - C.faction -= "vines" - -/datum/species/golem/wood/spec_life(mob/living/carbon/human/H) - if(H.stat == DEAD) - return - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(H.loc)) //else, there's considered to be no light - var/turf/T = H.loc - light_amount = min(1,T.get_lumcount()) - 0.5 - H.nutrition += light_amount * 10 - if(H.nutrition > NUTRITION_LEVEL_FULL) - H.nutrition = NUTRITION_LEVEL_FULL - if(light_amount > 0.2) //if there's enough light, heal - H.heal_overall_damage(1,1) - H.adjustToxLoss(-1) - H.adjustOxyLoss(-1) - - if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) - H.take_overall_damage(2,0) - -/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.id == "plantbgone") - H.adjustToxLoss(3) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - return 1 - -//Radioactive -/datum/species/golem/uranium - name = "Uranium Golem" - id = "uranium golem" - fixed_mut_color = "7f0" - meat = /obj/item/weapon/ore/uranium - info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." - - var/last_event = 0 - var/active = null - prefix = "Uranium" - -/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_event+30) - active = 1 - radiation_pulse(get_turf(H), 3, 3, 5, 0) - last_event = world.time - active = null - ..() - -//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. -/datum/species/golem/sand - name = "Sand Golem" - id = "sand golem" - fixed_mut_color = "ffdc8f" - meat = /obj/item/weapon/ore/glass //this is sand - armor = 0 - burnmod = 3 //melts easily - brutemod = 0.25 - info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery." - attack_sound = 'sound/effects/shovel_dig.ogg' - prefix = "Sand" - -/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) - H.visible_message("[H] turns into a pile of sand!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/weapon/ore/glass(get_turf(H)) - qdel(H) - -/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) - if(P.flag == "bullet" || P.flag == "bomb") - playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) - H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ - "The [P.name] sinks harmlessly in [H]'s sandy body!") - return 2 - return 0 - -//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. -/datum/species/golem/glass - name = "Glass Golem" - id = "glass golem" - fixed_mut_color = "5a96b4aa" //transparent body - meat = /obj/item/weapon/shard - armor = 0 - brutemod = 3 //very fragile - burnmod = 0.25 - info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." - attack_sound = 'sound/effects/Glassbr2.ogg' - prefix = "Glass" - -/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) - playsound(H, "shatter", 70, 1) - H.visible_message("[H] shatters!") - for(var/obj/item/W in H) - H.dropItemToGround(W) - for(var/i=1, i <= rand(3,5), i++) - new /obj/item/weapon/shard(get_turf(H)) - qdel(H) - -/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) - if(!(P.original == H && P.firer == H)) //self-shots don't reflect - if(P.flag == "laser" || P.flag == "energy") - H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ - "The [P.name] gets reflected by [H]'s glass skin!") - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(H) - - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.current = curloc - P.firer = H - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - P.Angle = null - return -1 - return 0 - -//Teleports when hit or when it wants to -/datum/species/golem/bluespace - name = "Bluespace Golem" - id = "bluespace golem" - fixed_mut_color = "33f" - meat = /obj/item/weapon/ore/bluespace_crystal - info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance." - attack_verb = "bluespace punch" - attack_sound = 'sound/effects/phasein.ogg' - prefix = "Bluespace" - special_names = list("Crystal", "Polycrystal") - - var/datum/action/innate/unstable_teleport/unstable_teleport - var/teleport_cooldown = 100 - var/last_teleport = 0 - -/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) - H.visible_message("[H] teleports!", "You destabilize and teleport!") - new /obj/effect/particle_effect/sparks(get_turf(H)) - playsound(get_turf(H), "sparks", 50, 1) - do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg') - last_teleport = world.time - -/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport - return 0 - else - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) - ..() - if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP) - reactive_teleport(H) - -/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown && user != H) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_teleport + teleport_cooldown) - reactive_teleport(H) - -/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) - ..() - if(ishuman(C)) - unstable_teleport = new - unstable_teleport.Grant(C) - -/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) - if(unstable_teleport) - unstable_teleport.Remove(C) - ..() - -/datum/action/innate/unstable_teleport - name = "Unstable Teleport" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "jaunt" - var/cooldown = 150 - var/last_teleport = 0 - -/datum/action/innate/unstable_teleport/IsAvailable() - if(..()) - if(world.time > last_teleport + cooldown) - return 1 - return 0 - -/datum/action/innate/unstable_teleport/Activate() - var/mob/living/carbon/human/H = owner - H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...") - playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1) - addtimer(CALLBACK(src, .proc/teleport, H), 15) - -/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) - H.visible_message("[H] disappears in a shower of sparks!", "You teleport!") - var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread - spark_system.set_up(10, 0, src) - spark_system.attach(H) - spark_system.start() - do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg') - last_teleport = world.time - UpdateButtonIcon() //action icon looks unavailable - sleep(cooldown + 5) - UpdateButtonIcon() //action icon looks available again - - -//honk -/datum/species/golem/bananium - name = "Bananium Golem" - id = "bananium golem" - fixed_mut_color = "ff0" - say_mod = "honks" - punchdamagelow = 0 - punchdamagehigh = 1 - punchstunthreshold = 2 //Harmless and can't stun - meat = /obj/item/weapon/ore/bananium - info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged." - attack_verb = "honk" - attack_sound = 'sound/items/AirHorn2.ogg' - prefix = "Bananium" - - var/last_honk = 0 - var/honkooldown = 0 - var/last_banana = 0 - var/banana_cooldown = 100 - var/active = null - -/datum/species/golem/bananium/random_name(gender,unique,lastname) - var/clown_name = pick(GLOB.clown_names) - var/golem_name = "[uppertext(clown_name)]" - return golem_name - -/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) - ..() - if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) - ..() - if(world.time > last_banana + banana_cooldown && user != H) - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) - ..() - if(world.time > last_banana + banana_cooldown) - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) - ..() - var/obj/item/I - if(istype(AM, /obj/item)) - I = AM - if(I.thrownby == H) //No throwing stuff at yourself to make bananas - return 0 - else - new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) - last_banana = world.time - -/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_honk + honkooldown) - active = 1 - playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1) - last_honk = world.time - honkooldown = rand(20, 80) - active = null - ..() - -/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) - playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) - -/datum/species/golem/bananium/get_spans() - return list(SPAN_CLOWN) - - -/datum/species/golem/runic - name = "Runic Golem" - id = "runic golem" - limbs_id = "cultgolem" - sexes = FALSE - info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie." - species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER) //no mutcolors + +/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + ignite = new + ignite.Grant(C) + +/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C) + if(ignite) + ignite.Remove(C) + ..() + +/datum/action/innate/ignite + name = "Ignite" + desc = "Set yourself aflame, bringing yourself closer to exploding!" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "sacredflame" + +/datum/action/innate/ignite/Activate() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + if(H.fire_stacks) + to_chat(owner, "You ignite yourself!") + else + to_chat(owner, "You try ignite yourself, but fail!") + H.IgniteMob() //firestacks are already there passively + +//Harder to hurt +/datum/species/golem/diamond + name = "Diamond Golem" + id = "diamond golem" + fixed_mut_color = "0ff" + armor = 70 //up from 55 + meat = /obj/item/weapon/ore/diamond + info_text = "As a Diamond Golem, you are more resistant than the average golem." + prefix = "Diamond" + special_names = list("Back") + +//Faster but softer and less armoured +/datum/species/golem/gold + name = "Gold Golem" + id = "gold golem" + fixed_mut_color = "cc0" + speedmod = 1 + armor = 25 //down from 55 + meat = /obj/item/weapon/ore/gold + info_text = "As a Gold Golem, you are faster but less resistant than the average golem." + prefix = "Golden" + +//Heavier, thus higher chance of stunning when punching +/datum/species/golem/silver + name = "Silver Golem" + id = "silver golem" + fixed_mut_color = "ddd" + punchstunthreshold = 9 //60% chance, from 40% + meat = /obj/item/weapon/ore/silver + info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning." + prefix = "Silver" + special_names = list("Surfer", "Chariot", "Lining") + +//Harder to stun, deals more damage, but it's even slower +/datum/species/golem/plasteel + name = "Plasteel Golem" + id = "plasteel golem" + fixed_mut_color = "bbb" + stunmod = 0.40 + punchdamagelow = 12 + punchdamagehigh = 21 + punchstunthreshold = 18 //still 40% stun chance + speedmod = 4 //pretty fucking slow + meat = /obj/item/weapon/ore/iron + info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching." + attack_verb = "smash" + attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard + prefix = "Plasteel" + +//Immune to ash storms +/datum/species/golem/titanium + name = "Titanium Golem" + id = "titanium golem" + fixed_mut_color = "fff" + meat = /obj/item/weapon/ore/titanium + info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage." + burnmod = 0.9 + prefix = "Titanium" + +/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.weather_immunities |= "ash" + +/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C) + . = ..() + C.weather_immunities -= "ash" + +//Immune to ash storms and lava +/datum/species/golem/plastitanium + name = "Plastitanium Golem" + id = "plastitanium golem" + fixed_mut_color = "888" + meat = /obj/item/weapon/ore/titanium + info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage." + burnmod = 0.8 + prefix = "Plastitanium" + +/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.weather_immunities |= "lava" + C.weather_immunities |= "ash" + +/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C) + . = ..() + C.weather_immunities -= "ash" + C.weather_immunities -= "lava" + +//Fast and regenerates... but can only speak like an abductor +/datum/species/golem/alloy + name = "Alien Alloy Golem" + id = "alloy golem" + fixed_mut_color = "333" + meat = /obj/item/stack/sheet/mineral/abductor + mutanttongue = /obj/item/organ/tongue/abductor + speedmod = 1 //faster + info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems." + prefix = "Alien" + special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown + +//Regenerates because self-repairing super-advanced alien tech +/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H) + if(H.stat == DEAD) + return + H.heal_overall_damage(2,2) + H.adjustToxLoss(-2) + H.adjustOxyLoss(-2) + +//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races +/datum/species/golem/wood + name = "Wood Golem" + id = "wood golem" + fixed_mut_color = "49311c" + meat = /obj/item/stack/sheet/mineral/wood + //Can burn and take damage from heat + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR) + armor = 30 + burnmod = 1.25 + heatmod = 1.5 + info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness." + prefix = "Wooden" + special_names = list("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper") + human_surname_chance = 0 + special_name_chance = 100 + +/datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.faction |= "plants" + C.faction |= "vines" + +/datum/species/golem/wood/on_species_loss(mob/living/carbon/C) + . = ..() + C.faction -= "plants" + C.faction -= "vines" + +/datum/species/golem/wood/spec_life(mob/living/carbon/human/H) + if(H.stat == DEAD) + return + var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing + if(isturf(H.loc)) //else, there's considered to be no light + var/turf/T = H.loc + light_amount = min(1,T.get_lumcount()) - 0.5 + H.nutrition += light_amount * 10 + if(H.nutrition > NUTRITION_LEVEL_FULL) + H.nutrition = NUTRITION_LEVEL_FULL + if(light_amount > 0.2) //if there's enough light, heal + H.heal_overall_damage(1,1) + H.adjustToxLoss(-1) + H.adjustOxyLoss(-1) + + if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) + H.take_overall_damage(2,0) + +/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + if(chem.id == "plantbgone") + H.adjustToxLoss(3) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + return 1 + +//Radioactive +/datum/species/golem/uranium + name = "Uranium Golem" + id = "uranium golem" + fixed_mut_color = "7f0" + meat = /obj/item/weapon/ore/uranium + info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." + + var/last_event = 0 + var/active = null + prefix = "Uranium" + +/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) + if(!active) + if(world.time > last_event+30) + active = 1 + radiation_pulse(get_turf(H), 3, 3, 5, 0) + last_event = world.time + active = null + ..() + +//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. +/datum/species/golem/sand + name = "Sand Golem" + id = "sand golem" + fixed_mut_color = "ffdc8f" + meat = /obj/item/weapon/ore/glass //this is sand + armor = 0 + burnmod = 3 //melts easily + brutemod = 0.25 + info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery." + attack_sound = 'sound/effects/shovel_dig.ogg' + prefix = "Sand" + +/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H) + H.visible_message("[H] turns into a pile of sand!") + for(var/obj/item/W in H) + H.dropItemToGround(W) + for(var/i=1, i <= rand(3,5), i++) + new /obj/item/weapon/ore/glass(get_turf(H)) + qdel(H) + +/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(P.original == H && P.firer == H)) + if(P.flag == "bullet" || P.flag == "bomb") + playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) + H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \ + "The [P.name] sinks harmlessly in [H]'s sandy body!") + return 2 + return 0 + +//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death. +/datum/species/golem/glass + name = "Glass Golem" + id = "glass golem" + fixed_mut_color = "5a96b4aa" //transparent body + meat = /obj/item/weapon/shard + armor = 0 + brutemod = 3 //very fragile + burnmod = 0.25 + info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery." + attack_sound = 'sound/effects/Glassbr2.ogg' + prefix = "Glass" + +/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H) + playsound(H, "shatter", 70, 1) + H.visible_message("[H] shatters!") + for(var/obj/item/W in H) + H.dropItemToGround(W) + for(var/i=1, i <= rand(3,5), i++) + new /obj/item/weapon/shard(get_turf(H)) + qdel(H) + +/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) + if(!(P.original == H && P.firer == H)) //self-shots don't reflect + if(P.flag == "laser" || P.flag == "energy") + H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \ + "The [P.name] gets reflected by [H]'s glass skin!") + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) + var/turf/curloc = get_turf(H) + + // redirect the projectile + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.current = curloc + P.firer = H + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x + P.Angle = null + return -1 + return 0 + +//Teleports when hit or when it wants to +/datum/species/golem/bluespace + name = "Bluespace Golem" + id = "bluespace golem" + fixed_mut_color = "33f" + meat = /obj/item/weapon/ore/bluespace_crystal + info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance." + attack_verb = "bluespace punch" + attack_sound = 'sound/effects/phasein.ogg' + prefix = "Bluespace" + special_names = list("Crystal", "Polycrystal") + + var/datum/action/innate/unstable_teleport/unstable_teleport + var/teleport_cooldown = 100 + var/last_teleport = 0 + +/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H) + H.visible_message("[H] teleports!", "You destabilize and teleport!") + new /obj/effect/particle_effect/sparks(get_turf(H)) + playsound(get_turf(H), "sparks", 50, 1) + do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg') + last_teleport = world.time + +/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + ..() + var/obj/item/I + if(istype(AM, /obj/item)) + I = AM + if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport + return 0 + else + reactive_teleport(H) + +/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) + ..() + if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP) + reactive_teleport(H) + +/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_teleport + teleport_cooldown && user != H) + reactive_teleport(H) + +/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_teleport + teleport_cooldown) + reactive_teleport(H) + +/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species) + ..() + if(ishuman(C)) + unstable_teleport = new + unstable_teleport.Grant(C) + +/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C) + if(unstable_teleport) + unstable_teleport.Remove(C) + ..() + +/datum/action/innate/unstable_teleport + name = "Unstable Teleport" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "jaunt" + var/cooldown = 150 + var/last_teleport = 0 + +/datum/action/innate/unstable_teleport/IsAvailable() + if(..()) + if(world.time > last_teleport + cooldown) + return 1 + return 0 + +/datum/action/innate/unstable_teleport/Activate() + var/mob/living/carbon/human/H = owner + H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...") + playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1) + addtimer(CALLBACK(src, .proc/teleport, H), 15) + +/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H) + H.visible_message("[H] disappears in a shower of sparks!", "You teleport!") + var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread + spark_system.set_up(10, 0, src) + spark_system.attach(H) + spark_system.start() + do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg') + last_teleport = world.time + UpdateButtonIcon() //action icon looks unavailable + sleep(cooldown + 5) + UpdateButtonIcon() //action icon looks available again + + +//honk +/datum/species/golem/bananium + name = "Bananium Golem" + id = "bananium golem" + fixed_mut_color = "ff0" + say_mod = "honks" + punchdamagelow = 0 + punchdamagehigh = 1 + punchstunthreshold = 2 //Harmless and can't stun + meat = /obj/item/weapon/ore/bananium + info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged." + attack_verb = "honk" + attack_sound = 'sound/items/AirHorn2.ogg' + prefix = "Bananium" + + var/last_honk = 0 + var/honkooldown = 0 + var/last_banana = 0 + var/banana_cooldown = 100 + var/active = null + +/datum/species/golem/bananium/random_name(gender,unique,lastname) + var/clown_name = pick(GLOB.clown_names) + var/golem_name = "[uppertext(clown_name)]" + return golem_name + +/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art) + ..() + if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP) + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(world.time > last_banana + banana_cooldown && user != H) + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H) + ..() + if(world.time > last_banana + banana_cooldown) + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) + ..() + var/obj/item/I + if(istype(AM, /obj/item)) + I = AM + if(I.thrownby == H) //No throwing stuff at yourself to make bananas + return 0 + else + new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H)) + last_banana = world.time + +/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H) + if(!active) + if(world.time > last_honk + honkooldown) + active = 1 + playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1) + last_honk = world.time + honkooldown = rand(20, 80) + active = null + ..() + +/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H) + playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0) + +/datum/species/golem/bananium/get_spans() + return list(SPAN_CLOWN) + + +/datum/species/golem/runic + name = "Runic Golem" + id = "runic golem" + limbs_id = "cultgolem" + sexes = FALSE + info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie." + species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors prefix = "Runic" - - var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift - var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze - var/obj/effect/proc_holder/spell/targeted/dominate/dominate - -/datum/species/golem/runic/random_name(gender,unique,lastname) - var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly") - var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor - var/golem_name = "[edgy_first_name] [edgy_last_name]" - return golem_name - -/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - C.faction |= "cult" - phase_shift = new - C.AddSpell(phase_shift) - abyssal_gaze = new - C.AddSpell(abyssal_gaze) - dominate = new - C.AddSpell(dominate) - -/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) - . = ..() - C.faction -= "cult" - if(phase_shift) - C.RemoveSpell(phase_shift) - if(abyssal_gaze) - C.RemoveSpell(abyssal_gaze) - if(dominate) - C.RemoveSpell(dominate) - -/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) - if(chem.id == "holywater") - H.adjustFireLoss(4) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - - if(chem.id == "unholywater") - H.adjustBruteLoss(-4) - H.adjustFireLoss(-4) - H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) - -/datum/species/golem/cloth - name = "Cloth Golem" - id = "cloth golem" - limbs_id = "clothgolem" - sexes = FALSE - info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable." - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER) //no mutcolors, and can burn - armor = 15 //feels no pain, but not too resistant - burnmod = 2 // don't get burned - speedmod = 1 // not as heavy as stone - punchdamagelow = 4 - punchstunthreshold = 7 - punchdamagehigh = 8 // not as heavy as stone - prefix = "Cloth" - -/datum/species/golem/cloth/random_name(gender,unique,lastname) - var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ - "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh - var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" - return golem_name - -/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) - if(H.fire_stacks < 1) - H.adjust_fire_stacks(1) //always prone to burning - ..() - -/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) - if(gibbed) - return - if(H.on_fire) - H.visible_message("[H] burns into ash!") - H.dust(just_ash = TRUE) - return - - H.visible_message("[H] falls apart into a pile of bandages!") - new /obj/structure/cloth_pile(get_turf(H), H) - ..() - -/obj/structure/cloth_pile - name = "pile of bandages" - desc = "It emits a strange aura, as if there was still life within it..." - obj_integrity = 50 - max_integrity = 50 - armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50) - icon = 'icons/obj/items.dmi' - icon_state = "pile_bandages" - resistance_flags = FLAMMABLE - - var/revive_time = 900 - var/mob/living/carbon/human/cloth_golem - -/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) - if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) - H.unequip_everything() - H.forceMove(src) - cloth_golem = H - to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") - addtimer(CALLBACK(src, .proc/revive), revive_time) - else - qdel(src) - -/obj/structure/cloth_pile/Destroy() - if(cloth_golem) - QDEL_NULL(cloth_golem) - return ..() - -/obj/structure/cloth_pile/burn() - visible_message("[src] burns into ash!") - new /obj/effect/decal/cleanable/ash(get_turf(src)) - ..() - -/obj/structure/cloth_pile/proc/revive() - if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime - return - if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE) - QDEL_NULL(cloth_golem) - return - - invisibility = INVISIBILITY_MAXIMUM //disappear before the animation - new /obj/effect/overlay/temp/mummy_animation(get_turf(src)) - if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) - cloth_golem.grab_ghost() //won't pull if it's a suicide - sleep(20) - cloth_golem.forceMove(get_turf(src)) - cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") - cloth_golem = null - qdel(src) - -/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) - . = ..() - - if(resistance_flags & ON_FIRE) - return - - if(P.is_hot()) - visible_message("[src] bursts into flames!") - fire_act() \ No newline at end of file + + var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift + var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze + var/obj/effect/proc_holder/spell/targeted/dominate/dominate + +/datum/species/golem/runic/random_name(gender,unique,lastname) + var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly") + var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor + var/golem_name = "[edgy_first_name] [edgy_last_name]" + return golem_name + +/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.faction |= "cult" + phase_shift = new + C.AddSpell(phase_shift) + abyssal_gaze = new + C.AddSpell(abyssal_gaze) + dominate = new + C.AddSpell(dominate) + +/datum/species/golem/runic/on_species_loss(mob/living/carbon/C) + . = ..() + C.faction -= "cult" + if(phase_shift) + C.RemoveSpell(phase_shift) + if(abyssal_gaze) + C.RemoveSpell(abyssal_gaze) + if(dominate) + C.RemoveSpell(dominate) + +/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) + if(chem.id == "holywater") + H.adjustFireLoss(4) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + + if(chem.id == "unholywater") + H.adjustBruteLoss(-4) + H.adjustFireLoss(-4) + H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + +/datum/species/golem/cloth + name = "Cloth Golem" + id = "cloth golem" + limbs_id = "clothgolem" + sexes = FALSE + info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable." + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors, and can burn + armor = 15 //feels no pain, but not too resistant + burnmod = 2 // don't get burned + speedmod = 1 // not as heavy as stone + punchdamagelow = 4 + punchstunthreshold = 7 + punchdamagehigh = 8 // not as heavy as stone + prefix = "Cloth" + +/datum/species/golem/cloth/random_name(gender,unique,lastname) + var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ + "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh + var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" + return golem_name + +/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H) + if(H.fire_stacks < 1) + H.adjust_fire_stacks(1) //always prone to burning + ..() + +/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H) + if(gibbed) + return + if(H.on_fire) + H.visible_message("[H] burns into ash!") + H.dust(just_ash = TRUE) + return + + H.visible_message("[H] falls apart into a pile of bandages!") + new /obj/structure/cloth_pile(get_turf(H), H) + ..() + +/obj/structure/cloth_pile + name = "pile of bandages" + desc = "It emits a strange aura, as if there was still life within it..." + obj_integrity = 50 + max_integrity = 50 + armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50) + icon = 'icons/obj/items.dmi' + icon_state = "pile_bandages" + resistance_flags = FLAMMABLE + + var/revive_time = 900 + var/mob/living/carbon/human/cloth_golem + +/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) + if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) + H.unequip_everything() + H.forceMove(src) + cloth_golem = H + to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") + addtimer(CALLBACK(src, .proc/revive), revive_time) + else + qdel(src) + +/obj/structure/cloth_pile/Destroy() + if(cloth_golem) + QDEL_NULL(cloth_golem) + return ..() + +/obj/structure/cloth_pile/burn() + visible_message("[src] burns into ash!") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + ..() + +/obj/structure/cloth_pile/proc/revive() + if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime + return + if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE) + QDEL_NULL(cloth_golem) + return + + invisibility = INVISIBILITY_MAXIMUM //disappear before the animation + new /obj/effect/overlay/temp/mummy_animation(get_turf(src)) + if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE)) + cloth_golem.grab_ghost() //won't pull if it's a suicide + sleep(20) + cloth_golem.forceMove(get_turf(src)) + cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!") + cloth_golem = null + qdel(src) + +/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params) + . = ..() + + if(resistance_flags & ON_FIRE) + return + + if(P.is_hot()) + visible_message("[src] bursts into flames!") + fire_act() + +/datum/species/golem/plastic + name = "Plastic" + id = "plastic golem" + prefix = "Plastic" + fixed_mut_color = "fff" + info_text = "As a Plastic Golem, you are capable of ventcrawling, and passing through plastic flaps." + +/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.ventcrawler = VENTCRAWLER_NUDE + +/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) + . = ..() + C.ventcrawler = initial(C.ventcrawler) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 876d2f9e34..8adc1f19f3 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -6,7 +6,7 @@ default_color = "00FF00" species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,FACEHAIR) mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs", "taur") - mutant_organs = list(/obj/item/organ/tongue/lizard) + mutanttongue = /obj/item/organ/tongue/lizard coldmod = 1.5 heatmod = 0.67 default_features = list("mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs", "taur" = "None") @@ -17,6 +17,9 @@ skinned_type = /obj/item/stack/sheet/animalhide/lizard exotic_bloodtype = "L" +/datum/species/lizard/after_equip_job(datum/job/J, mob/living/carbon/human/H) + H.grant_language(/datum/language/draconic) + /datum/species/lizard/random_name(gender,unique,lastname) if(unique) return random_unique_lizard_name(gender) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 6672c69b1e..f372968270 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -6,7 +6,7 @@ meat = /obj/item/stack/sheet/mineral/plasma species_traits = list(NOBLOOD,RESISTCOLD,RADIMMUNE,NOTRANSSTING,VIRUSIMMUNE,NOHUNGER) mutantlungs = /obj/item/organ/lungs/plasmaman - mutant_organs = list(/obj/item/organ/tongue/bone/plasmaman) + mutanttongue = /obj/item/organ/tongue/bone/plasmaman dangerous_existence = 1 //So so much blacklisted = 1 //See above burnmod = 1.5 @@ -66,4 +66,4 @@ if(lastname) randname += " [lastname]" - return randname \ No newline at end of file + return randname diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 573b58159a..239d901e5c 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -13,9 +13,11 @@ name = "Infectious Zombie" id = "memezombies" limbs_id = "zombie" + mutanthands = /obj/item/zombie_hand no_equip = list(slot_wear_mask, slot_head) armor = 20 // 120 damage to KO a zombie, which kills it speedmod = 2 + mutanteyes = /obj/item/organ/eyes/night_vision/zombie /datum/species/zombie/infectious/spec_life(mob/living/carbon/C) . = ..() @@ -27,29 +29,15 @@ /datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() - // Drop items in hands - // If you're a zombie lucky enough to have a NODROP item, then it stays. - for(var/V in C.held_items) - var/obj/item/I = V - if(istype(I)) - if(C.dropItemToGround(I)) - var/obj/item/zombie_hand/zh = new /obj/item/zombie_hand() - C.put_in_hands(zh) - else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand - var/obj/item/zombie_hand/zh = new /obj/item/zombie_hand() - C.put_in_hands(zh) - // Next, deal with the source of this zombie corruption + // Deal with the source of this zombie corruption + // Infection organ needs to be handled separately from mutant_organs + // because it persists through species transitions var/obj/item/organ/zombie_infection/infection infection = C.getorganslot("zombie_infection") if(!infection) - infection = new(C) - -/datum/species/zombie/infectious/on_species_loss(mob/living/carbon/C) - . = ..() - for(var/obj/item/I in C.held_items) - if(istype(I, /obj/item/zombie_hand)) - qdel(I) + infection = new() + infection.Insert(C) // Your skin falls off diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 34017d6728..a05614fe09 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -2,7 +2,7 @@ name = "monkey" voice_name = "monkey" verb_say = "chimpers" - initial_languages = list(/datum/language/monkey) + initial_language_holder = /datum/language_holder/monkey icon = 'icons/mob/monkey.dmi' icon_state = "" gender = NEUTER diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index a8cf291c02..4a432bb66b 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -1,11 +1,3 @@ - -/mob/living/carbon/monkey/get_eye_protection() - var/number = ..() - if(istype(src.wear_mask, /obj/item/clothing/mask)) - var/obj/item/clothing/mask/MFP = src.wear_mask - number += MFP.flash_protect - return number - /mob/living/carbon/monkey/help_shake_act(mob/living/carbon/M) if(health < 0 && ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index 039b40b234..ed1f5f08b5 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -29,14 +29,9 @@ if(I) . |= I.get_held_item_speechspans(src) -/mob/living/carbon/can_speak_in_language(datum/language/dt) - if(HAS_SECONDARY_FLAG(src, OMNITONGUE)) - . = has_language(dt) - else if(has_language(dt)) - var/obj/item/organ/tongue/T = getorganslot("tongue") - if(T) - . = T.can_speak_in_language(dt) - else - . = initial(dt.flags) & TONGUELESS_SPEECH +/mob/living/carbon/could_speak_in_language(datum/language/dt) + var/obj/item/organ/tongue/T = getorganslot("tongue") + if(T) + . = T.could_speak_in_language(dt) else - . = FALSE + . = initial(dt.flags) & TONGUELESS_SPEECH diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 0734670468..4be1dfe851 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -49,8 +49,8 @@ timeofdeath = world.time tod = worldtime2text() var/turf/T = get_turf(src) + var/area/A = get_area(T) if(mind && mind.name && mind.active && (!(T.flags & NO_DEATHRATTLE))) - var/area/A = get_area(T) var/rendered = "[mind.name] has died at [A.name]." deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) if(mind) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fe0f5b3918..926e88787e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -17,8 +17,6 @@ medhud.add_to_hud(src) faction += "\ref[src]" - language_menu = new(src) - /mob/living/prepare_huds() ..() @@ -50,8 +48,6 @@ staticOverlays.len = 0 remove_from_all_data_huds() - QDEL_NULL(language_menu) - return ..() /mob/living/ghostize(can_reenter_corpse = 1) @@ -245,7 +241,7 @@ return 1 /mob/living/proc/InCritical() - return (src.health < 0 && src.health > -95 && stat == UNCONSCIOUS) + return (health < 0 && health > -100 && stat == UNCONSCIOUS) //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually //affects them once clothing is factored in. ~Errorage @@ -450,7 +446,7 @@ if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move. pulledby.stop_pulling() - if (s_active && !(s_active.ClickAccessible(src, depth=STORAGE_VIEW_DEPTH) || s_active.Adjacent(src))) + if (s_active && !(CanReach(s_active,view_only = TRUE))) s_active.close(src) /mob/living/movement_delay(ignorewalk = 0) @@ -815,23 +811,22 @@ /mob/living/proc/owns_soul() if(mind) return mind.soulOwner == mind - return 1 + return TRUE /mob/living/proc/return_soul() hellbound = 0 if(mind) - if(mind.soulOwner.devilinfo)//Not sure how this could happen, but whatever. - mind.soulOwner.devilinfo.remove_soul(mind) + var/datum/antagonist/devil/devilInfo = mind.soulOwner.has_antag_datum(ANTAG_DATUM_DEVIL) + if(devilInfo)//Not sure how this could be null, but let's just try anyway. + devilInfo.remove_soul(mind) mind.soulOwner = mind /mob/living/proc/has_bane(banetype) - if(mind) - if(mind.devilinfo) - return mind.devilinfo.bane == banetype - return 0 + var/datum/antagonist/devil/devilInfo = is_devil(src) + return (banetype == devilInfo.bane) /mob/living/proc/check_weakness(obj/item/weapon, mob/living/attacker) - if(mind && mind.devilinfo) + if(mind && mind.has_antag_datum(ANTAG_DATUM_DEVIL)) return check_devil_bane_multiplier(weapon, attacker) return 1 diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e4129e642d..d15d71c23c 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -306,17 +306,15 @@ reagents.add_reagent("heparin", 5) return FALSE if(client) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, src, null, 0) + makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, src, cultoverride = TRUE) else - switch(rand(1, 10)) + switch(rand(1, 6)) if(1) new /mob/living/simple_animal/hostile/construct/armored/hostile(get_turf(src)) if(2) new /mob/living/simple_animal/hostile/construct/wraith/hostile(get_turf(src)) if(3 to 6) new /mob/living/simple_animal/hostile/construct/builder/hostile(get_turf(src)) - if(6 to 10) - new /mob/living/simple_animal/hostile/construct/harvester/hostile(get_turf(src)) spawn_dust() gib() return TRUE diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 9c4a2c7e90..fbf9c35303 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -74,4 +74,3 @@ var/datum/riding/riding_datum var/datum/language/selected_default_language - var/datum/language_menu/language_menu diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index bb0628e7f3..ab3dc7bb34 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -167,11 +167,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( spans += get_spans() if(language) - var/datum/language/L = GLOB.language_datums[language] - if(!istype(L)) - L = new language - GLOB.language_datums[language] = L - + var/datum/language/L = GLOB.language_datum_instances[language] spans |= L.spans //Log what we've said with an associated timestamp, using the list's len for safety/to prevent overwriting messages @@ -308,13 +304,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return GLOB.department_radio_keys[key_symbol] /mob/living/proc/get_message_language(message) - var/static/list/langlist - if(!langlist) - langlist = subtypesof(/datum/language) - if(copytext(message, 1, 2) == ",") var/key = copytext(message, 2, 3) - for(var/ld in langlist) + for(var/ld in GLOB.all_languages) var/datum/language/LD = ld if(initial(LD.key) == key) return LD @@ -435,17 +427,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list( else . = ..() -/mob/living/get_default_language() - if(selected_default_language) - if(has_language(selected_default_language)) - return selected_default_language - else - selected_default_language = null - - . = ..() - -/mob/living/proc/open_language_menu(mob/user) - language_menu.ui_interact(user) - /mob/living/whisper(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null) say("#[message]", bubble_type, spans, sanitize, language) + +/mob/living/get_language_holder(shadow=TRUE) + if(mind && shadow) + // Mind language holders shadow mob holders. + . = mind.get_language_holder() + if(.) + return . + + . = ..() diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index dce38bd664..56c43211e4 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -28,7 +28,7 @@ //Holopad if(istype(ai.current, /obj/machinery/holopad)) var/obj/machinery/holopad/H = ai.current - H.move_hologram(ai) + H.move_hologram(ai, T) /mob/camera/aiEye/Move() return 0 diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 4080cea4fb..58e2b04d9c 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -164,11 +164,9 @@ #endif -/mob/living/silicon/ai/can_speak_in_language(datum/language/dt) - if(HAS_SECONDARY_FLAG(src, OMNITONGUE)) - . = has_language(dt) - else if(is_servant_of_ratvar(src)) +/mob/living/silicon/ai/could_speak_in_language(datum/language/dt) + if(is_servant_of_ratvar(src)) // Ratvarian AIs can only speak Ratvarian - . = ispath(dt, /datum/language/ratvar) && has_language(dt) + . = ispath(dt, /datum/language/ratvar) else . = ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 14b854d2a2..768ff69166 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1143,7 +1143,7 @@ M.visible_message("Unfortunately, [M] just can't seem to hold onto [src]!") return if(iscarbon(M) && (!riding_datum.equip_buckle_inhands(M, 1))) - M.visible_message("[M] can't climb onto [src] because his hands are full!") + M.visible_message("[M] can't climb onto [src] because [M.p_their()] hands are full!") return . = ..(M, force, check_loc) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index a69fe27da7..096a4ab71e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -6,7 +6,7 @@ verb_ask = "queries" verb_exclaim = "declares" verb_yell = "alarms" - initial_languages = list(/datum/language/common, /datum/language/machine) + initial_language_holder = /datum/language_holder/synthetic see_in_dark = 8 bubble_icon = "machine" weather_immunities = list("ash") diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 09e81582ac..25a2f83266 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -1,926 +1,922 @@ -//Defines for bots are now found in code\__DEFINES\bots.dm - -// AI (i.e. game AI, not the AI player) controlled bots -/mob/living/simple_animal/bot - icon = 'icons/mob/aibots.dmi' - layer = MOB_LAYER - gender = NEUTER - luminosity = 3 - stop_automated_movement = 1 - wander = 0 - healable = 0 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - maxbodytemp = INFINITY - minbodytemp = 0 - has_unlimited_silicon_privilege = 1 - sentience_type = SENTIENCE_ARTIFICIAL - status_flags = NONE //no default canpush - verb_say = "states" - verb_ask = "queries" - verb_exclaim = "declares" - verb_yell = "alarms" - initial_languages = list(/datum/language/common, /datum/language/machine) - bubble_icon = "machine" - - faction = list("neutral", "silicon" , "turret") - - var/obj/machinery/bot_core/bot_core = null - var/bot_core_type = /obj/machinery/bot_core - var/list/users = list() //for dialog updates - var/window_id = "bot_control" - var/window_name = "Protobot 1.0" //Popup title - var/window_width = 0 //0 for default size - var/window_height = 0 - var/obj/item/device/paicard/paicard // Inserted pai card. - var/allow_pai = 1 // Are we even allowed to insert a pai card. - var/bot_name - - var/list/player_access = list() //Additonal access the bots gets when player controlled - var/emagged = 0 - var/list/prev_access = list() - var/on = 1 - var/open = 0//Maint panel - var/locked = 1 - var/hacked = 0 //Used to differentiate between being hacked by silicons and emagged by humans. - var/text_hack = "" //Custom text returned to a silicon upon hacking a bot. - var/text_dehack = "" //Text shown when resetting a bots hacked status to normal. - var/text_dehack_fail = "" //Shown when a silicon tries to reset a bot emagged with the emag item, which cannot be reset. - var/declare_message = "" //What the bot will display to the HUD user. - var/frustration = 0 //Used by some bots for tracking failures to reach their target. - var/base_speed = 2 //The speed at which the bot moves, or the number of times it moves per process() tick. - var/turf/ai_waypoint //The end point of a bot's path, or the target location. - var/list/path = list() //List of turfs through which a bot 'steps' to reach the waypoint. - var/pathset = 0 - var/list/ignore_list = list() //List of unreachable targets for an ignore-list enabled bot to ignore. - var/mode = BOT_IDLE //Standardizes the vars that indicate the bot is busy with its function. - var/tries = 0 //Number of times the bot tried and failed to move. - var/remote_disabled = 0 //If enabled, the AI cannot *Remotely* control a bot. It can still control it through cameras. - var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it. - var/obj/item/device/radio/Radio //The bot's radio, for speaking to people. - var/radio_key = null //which channels can the bot listen to - var/radio_channel = "Common" //The bot's default radio channel - var/auto_patrol = 0// set to make bot automatically patrol - var/turf/patrol_target // this is turf to navigate to (location of beacon) - var/turf/summon_target // The turf of a user summoning a bot. - var/new_destination // pending new destination (waiting for beacon response) - var/destination // destination description tag - var/next_destination // the next destination in the patrol route - var/shuffle = FALSE // If we should shuffle our adjacency checking - - var/blockcount = 0 //number of times retried a blocked path - var/awaiting_beacon = 0 // count of pticks awaiting a beacon response - - var/nearest_beacon // the nearest beacon's tag - var/turf/nearest_beacon_loc // the nearest beacon's location - - var/beacon_freq = 1445 // navigation beacon frequency - var/model = "" //The type of bot it is. - var/bot_type = 0 //The type of bot it is, for radio control. - var/data_hud_type = DATA_HUD_DIAGNOSTIC //The type of data HUD the bot uses. Diagnostic by default. - var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \ - "Beginning Patrol", "Patrolling", "Summoned by PDA", \ - "Cleaning", "Repairing", "Proceeding to work site", "Healing", \ - "Proceeding to AI waypoint", "Navigating to Delivery Location", "Navigating to Home", \ - "Waiting for clear path", "Calculating navigation path", "Pinging beacon network", "Unable to reach destination") - //This holds text for what the bot is mode doing, reported on the remote bot control interface. - - hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD) //Diagnostic HUD views - -/mob/living/simple_animal/bot/proc/get_mode() - if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player. - if(paicard) - return "pAI Controlled" - else - return "Autonomous" - else if(!on) - return "Inactive" - else if(!mode) - return "Idle" - else - return "[mode_name[mode]]" - -/mob/living/simple_animal/bot/proc/turn_on() - if(stat) - return 0 - on = 1 - set_light(initial(light_range)) - update_icon() - diag_hud_set_botstat() - return 1 - -/mob/living/simple_animal/bot/proc/turn_off() - on = 0 - set_light(0) - bot_reset() //Resets an AI's call, should it exist. - update_icon() - -/mob/living/simple_animal/bot/Initialize() - ..() - access_card = new /obj/item/weapon/card/id(src) -//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first. - access_card.access += GLOB.access_robotics - set_custom_texts() - Radio = new/obj/item/device/radio(src) - if(radio_key) - Radio.keyslot = new radio_key - Radio.subspace_transmission = 1 - Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. - Radio.recalculateChannels() - - bot_core = new bot_core_type(src) - - //Adds bot to the diagnostic HUD system - prepare_huds() - var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] - diag_hud.add_to_hud(src) - diag_hud_set_bothealth() - diag_hud_set_botstat() - diag_hud_set_botmode() - - //Gives a HUD view to player bots that use a HUD. - activate_data_hud() - - -/mob/living/simple_animal/bot/update_canmove() - . = ..() - if(!on) - . = 0 - canmove = . - -/mob/living/simple_animal/bot/Destroy() - if(paicard) - ejectpai() - qdel(Radio) - qdel(access_card) - qdel(bot_core) - return ..() - -/mob/living/simple_animal/bot/bee_friendly() - return 1 - -/mob/living/simple_animal/bot/death(gibbed) - explode() - ..() - -/mob/living/simple_animal/bot/proc/explode() - qdel(src) - -/mob/living/simple_animal/bot/emag_act(mob/user) - if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again. - locked = 0 - emagged = 1 - to_chat(user, "You bypass [src]'s controls.") - return - if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging. - emagged = 2 - remote_disabled = 1 //Manually emagging the bot locks out the AI built in panel. - locked = 1 //Access denied forever! - bot_reset() - turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP. - to_chat(src, "(#$*#$^^( OVERRIDE DETECTED") - add_logs(user, src, "emagged") - return - else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet. - to_chat(user, "You need to open maintenance panel first!") - -/mob/living/simple_animal/bot/examine(mob/user) - ..() - if(health < maxHealth) - if(health > maxHealth/3) - to_chat(user, "[src]'s parts look loose.") - else - to_chat(user, "[src]'s parts look very loose!") - else - to_chat(user, "[src] is in pristine condition.") - -/mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(amount>0 && prob(10)) - new /obj/effect/decal/cleanable/oil(loc) - . = ..() - -/mob/living/simple_animal/bot/updatehealth() - ..() - diag_hud_set_bothealth() - -/mob/living/simple_animal/bot/med_hud_set_health() - return //we use a different hud - -/mob/living/simple_animal/bot/med_hud_set_status() - return //we use a different hud - -/mob/living/simple_animal/bot/handle_automated_action() //Master process which handles code common across most bots. - set background = BACKGROUND_ENABLED - diag_hud_set_botmode() - - if(!on || client) - return - - switch(mode) //High-priority overrides are processed first. Bots can do nothing else while under direct command. - if(BOT_RESPONDING) //Called by the AI. - call_mode() - return - if(BOT_SUMMON) //Called by PDA - bot_summon() - return - return 1 //Successful completion. Used to prevent child process() continuing if this one is ended early. - - -/mob/living/simple_animal/bot/attack_hand(mob/living/carbon/human/H) - if(H.a_intent == INTENT_HELP) - interact(H) - else - return ..() - -/mob/living/simple_animal/bot/attack_ai(mob/user) - if(!topic_denied(user)) - interact(user) - else - to_chat(user, "[src]'s interface is not responding!") - -/mob/living/simple_animal/bot/interact(mob/user) - show_controls(user) - -/mob/living/simple_animal/bot/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/screwdriver)) - if(!locked) - open = !open - to_chat(user, "The maintenance panel is now [open ? "opened" : "closed"].") - else - to_chat(user, "The maintenance panel is locked.") - else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) - if(bot_core.allowed(user) && !open && !emagged) - locked = !locked - to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") - else - if(emagged) - to_chat(user, "ERROR") - if(open) - to_chat(user, "Please close the access panel before locking it.") - else - to_chat(user, "Access denied.") - else if(istype(W, /obj/item/device/paicard)) - insertpai(user, W) - else if(istype(W, /obj/item/weapon/hemostat) && paicard) - if(open) - to_chat(user, "Close the access panel before manipulating the personality slot!") - else - to_chat(user, "You attempt to pull [paicard] free...") - if(do_after(user, 30, target = src)) - if (paicard) - user.visible_message("[user] uses [W] to pull [paicard] out of [bot_name]!","You pull [paicard] out of [bot_name] with [W].") - ejectpai(user) - else - user.changeNext_move(CLICK_CD_MELEE) - if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) - if(health >= maxHealth) - to_chat(user, "[src] does not need a repair!") - return - if(!open) - to_chat(user, "Unable to repair with the maintenance panel closed!") - return - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - adjustHealth(-10) - user.visible_message("[user] repairs [src]!","You repair [src].") - else - to_chat(user, "The welder must be on for this task!") - else - if(W.force) //if force is non-zero - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - ..() - -/mob/living/simple_animal/bot/bullet_act(obj/item/projectile/Proj) - if(Proj && (Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - if(prob(75) && Proj.damage > 0) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - return ..() - -/mob/living/simple_animal/bot/emp_act(severity) - var/was_on = on - stat |= EMPED - new /obj/effect/overlay/temp/emp(loc) - if(paicard) - paicard.emp_act(severity) - src.visible_message("[paicard] is flies out of [bot_name]!","You are forcefully ejected from [bot_name]!") - ejectpai(0) - if(on) - turn_off() - spawn(severity*300) - stat &= ~EMPED - if(was_on) - turn_on() - -/mob/living/simple_animal/bot/proc/set_custom_texts() //Superclass for setting hack texts. Appears only if a set is not given to a bot locally. - text_hack = "You hack [name]." - text_dehack = "You reset [name]." - text_dehack_fail = "You fail to reset [name]." - -/mob/living/simple_animal/bot/proc/speak(message,channel) //Pass a message to have the bot say() it. Pass a frequency to say it on the radio. - if((!on) || (!message)) - return - if(channel && Radio.channels[channel])// Use radio if we have channel key - Radio.talk_into(src, message, channel, get_spans(), get_default_language()) - else - say(message) - -/mob/living/simple_animal/bot/get_spans() - return ..() | SPAN_ROBOT - -/mob/living/simple_animal/bot/radio(message, message_mode, list/spans, language) - . = ..() - if(. != 0) - return . - - switch(message_mode) - if(MODE_HEADSET) - Radio.talk_into(src, message, , spans, language) - return REDUCE_RANGE - - if(MODE_DEPARTMENT) - Radio.talk_into(src, message, message_mode, spans, language) - return REDUCE_RANGE - - if(message_mode in GLOB.radiochannels) - Radio.talk_into(src, message, message_mode, spans, language) - return REDUCE_RANGE - return 0 - -//Generalized behavior code, override where needed! - -/* -scan() will search for a given type (such as turfs, human mobs, or objects) in the bot's view range, and return a single result. -Arguments: The object type to be searched (such as "/mob/living/carbon/human"), the old scan result to be ignored, if one exists, -and the view range, which defaults to 7 (full screen) if an override is not passed. -If the bot maintains an ignore list, it is also checked here. - -Example usage: patient = scan(/mob/living/carbon/human, oldpatient, 1) -The proc would return a human next to the bot to be set to the patient var. -Pass the desired type path itself, declaring a temporary var beforehand is not required. -*/ -/mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) - var/turf/T = get_turf(src) - if(!T) - return - var/list/adjacent = T.GetAtmosAdjacentTurfs(1) - if(shuffle) //If we were on the same tile as another bot, let's randomize our choices so we dont both go the same way - adjacent = shuffle(adjacent) - shuffle = FALSE - for(var/scan in adjacent)//Let's see if there's something right next to us first! - if(check_bot(scan)) //Is there another bot there? Then let's just skip it - continue - if(isturf(scan_type)) //If we're lookeing for a turf we can just run the checks directly! - var/final_result = checkscan(scan,scan_type,old_target) - if(final_result) - return final_result - else - var/turf/turfy = scan - for(var/deepscan in turfy.contents)//Check the contents since adjacent is turfs - var/final_result = checkscan(deepscan,scan_type,old_target) - if(final_result) - return final_result - for (var/scan in shuffle(view(scan_range, src))-adjacent) //Search for something in range! - var/final_result = checkscan(scan,scan_type,old_target) - if(final_result) - return final_result - -/mob/living/simple_animal/bot/proc/checkscan(scan, scan_type, old_target) - if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! - return 0 //If not, keep searching! - if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness - return 0 - - var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected. - if(scan_result) - return scan_result - else - return 0 //The current element failed assessment, move on to the next. - return - -/mob/living/simple_animal/bot/proc/check_bot(targ) - var/turf/T = get_turf(targ) - if(T) - for(var/C in T.contents) - if(istype(C,type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother. - return 1 //Let's abort if we find a bot so we dont have to keep rechecking - -//When the scan finds a target, run bot specific processing to select it for the next step. Empty by default. -/mob/living/simple_animal/bot/proc/process_scan(scan_target) - return scan_target - - -/mob/living/simple_animal/bot/proc/add_to_ignore(subject) - if(ignore_list.len < 50) //This will help keep track of them, so the bot is always trying to reach a blocked spot. - ignore_list |= subject - else if(ignore_list.len >= subject) //If the list is full, insert newest, delete oldest. - ignore_list -= ignore_list[1] - ignore_list |= subject - -/* -Movement proc for stepping a bot through a path generated through A-star. -Pass a positive integer as an argument to override a bot's default speed. -*/ -/mob/living/simple_animal/bot/proc/bot_move(dest, move_speed) - - if(!dest || !path || path.len == 0) //A-star failed or a path/destination was not set. - path = list() - return 0 - dest = get_turf(dest) //We must always compare turfs, so get the turf of the dest var if dest was originally something else. - var/turf/last_node = get_turf(path[path.len]) //This is the turf at the end of the path, it should be equal to dest. - if(get_turf(src) == dest) //We have arrived, no need to move again. - return 1 - else if(dest != last_node) //The path should lead us to our given destination. If this is not true, we must stop. - path = list() - return 0 - var/step_count = move_speed ? move_speed : base_speed //If a value is passed into move_speed, use that instead of the default speed var. - - if(step_count >= 1 && tries < BOT_STEP_MAX_RETRIES) - for(var/step_number = 0, step_number < step_count,step_number++) - spawn(BOT_STEP_DELAY*step_number) - bot_step(dest) - else - return 0 - return 1 - - -/mob/living/simple_animal/bot/proc/bot_step(dest) //Step,increase tries if failed - if(!path) - return 0 - if(path.len > 1) - step_towards(src, path[1]) - if(get_turf(src) == path[1]) //Successful move - path -= path[1] - tries = 0 - else - tries++ - return 0 - else if(path.len == 1) - step_to(src, dest) - path = list() - return 1 - - -/mob/living/simple_animal/bot/proc/check_bot_access() - if(mode != BOT_SUMMON && mode != BOT_RESPONDING) - access_card.access = prev_access - -/mob/living/simple_animal/bot/proc/call_bot(caller, turf/waypoint, message=TRUE) - bot_reset() //Reset a bot before setting it to call mode. - var/area/end_area = get_area(waypoint) - - if(client) //Player bots instead get a location command from the AI - to_chat(src, "Priority waypoint set by \icon[caller] [caller]. Proceed to [end_area.name]<\b>.") - - //For giving the bot temporary all-access. - var/obj/item/weapon/card/id/all_access = new /obj/item/weapon/card/id - var/datum/job/captain/All = new/datum/job/captain - all_access.access = All.get_access() - - path = get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access) - calling_ai = caller //Link the AI to the bot! - ai_waypoint = waypoint - - if(path && path.len) //Ensures that a valid path is calculated! - if(!on) - turn_on() //Saves the AI the hassle of having to activate a bot manually. - access_card = all_access //Give the bot all-access while under the AI's command. - if(message) - to_chat(calling_ai, "\icon[src] [name] called to [end_area.name]. [path.len-1] meters to destination.") - pathset = 1 - mode = BOT_RESPONDING - tries = 0 - else - if(message) - to_chat(calling_ai, "Failed to calculate a valid route. Ensure destination is clear of obstructions and within range.") - calling_ai = null - path = list() - -/mob/living/simple_animal/bot/proc/call_mode() //Handles preparing a bot for a call, as well as calling the move proc. -//Handles the bot's movement during a call. - var/success = bot_move(ai_waypoint, 3) - if(!success) - if(calling_ai) - to_chat(calling_ai, "\icon[src] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") - calling_ai = null - bot_reset() - -/mob/living/simple_animal/bot/proc/bot_reset() - if(calling_ai) //Simple notification to the AI if it called a bot. It will not know the cause or identity of the bot. - to_chat(calling_ai, "Call command to a bot has been reset.") - calling_ai = null - path = list() - summon_target = null - pathset = 0 - access_card.access = prev_access - tries = 0 - mode = BOT_IDLE - diag_hud_set_botstat() - diag_hud_set_botmode() - - - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -//Patrol and summon code! -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -/mob/living/simple_animal/bot/proc/bot_patrol() - patrol_step() - spawn(5) - if(mode == BOT_PATROL) - patrol_step() - return - -/mob/living/simple_animal/bot/proc/start_patrol() - - if(tries >= BOT_STEP_MAX_RETRIES) //Bot is trapped, so stop trying to patrol. - auto_patrol = 0 - tries = 0 - speak("Unable to start patrol.") - - return - - if(!auto_patrol) //A bot not set to patrol should not be patrolling. - mode = BOT_IDLE - return - - if(patrol_target) // has patrol target - spawn(0) - calc_path() // Find a route to it - if(path.len == 0) - patrol_target = null - return - mode = BOT_PATROL - else // no patrol target, so need a new one - speak("Engaging patrol mode.") - find_patrol_target() - tries++ - return - -// perform a single patrol step - -/mob/living/simple_animal/bot/proc/patrol_step() - - if(client) // In use by player, don't actually move. - return - - if(loc == patrol_target) // reached target - //Find the next beacon matching the target. - if(!get_next_patrol_target()) - find_patrol_target() //If it fails, look for the nearest one instead. - return - - else if(path.len > 0 && patrol_target) // valid path - var/turf/next = path[1] - if(next == loc) - path -= next - return - - - var/moved = bot_move(patrol_target)//step_towards(src, next) // attempt to move - if(!moved) //Couldn't proceed the next step of the path BOT_STEP_MAX_RETRIES times - spawn(2) - calc_path() - if(path.len == 0) - find_patrol_target() - tries = 0 - - else // no path, so calculate new one - mode = BOT_START_PATROL - -// finds the nearest beacon to self -/mob/living/simple_animal/bot/proc/find_patrol_target() - nearest_beacon = null - new_destination = null - find_nearest_beacon() - if(nearest_beacon) - patrol_target = nearest_beacon_loc - destination = next_destination - else - auto_patrol = 0 - mode = BOT_IDLE - speak("Disengaging patrol mode.") - -/mob/living/simple_animal/bot/proc/get_next_patrol_target() - // search the beacon list for the next target in the list. - for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) - if(NB.location == next_destination) //Does the Beacon location text match the destination? - destination = new_destination //We now know the name of where we want to go. - patrol_target = NB.loc //Get its location and set it as the target. - next_destination = NB.codes["next_patrol"] //Also get the name of the next beacon in line. - return 1 - -/mob/living/simple_animal/bot/proc/find_nearest_beacon() - for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) - var/dist = get_dist(src, NB) - if(nearest_beacon) //Loop though the beacon net to find the true closest beacon. - //Ignore the beacon if were are located on it. - if(dist>1 && dist 1) //Begin the search, save this one for comparison on the next loop. - nearest_beacon = NB.location - nearest_beacon_loc = NB.loc - patrol_target = nearest_beacon_loc - destination = nearest_beacon - -//PDA control. Some bots, especially MULEs, may have more parameters. -/mob/living/simple_animal/bot/proc/bot_control(command, mob/user, turf/user_turf, list/user_access = list()) - if(!on || emagged == 2 || remote_disabled) //Emagged bots do not respect anyone's authority! Bots with their remote controls off cannot get commands. - return 1 //ACCESS DENIED - if(client) - bot_control_message(command,user,user_turf,user_access) - // process control input - switch(command) - if("patroloff") - bot_reset() //HOLD IT!! - auto_patrol = 0 - - if("patrolon") - auto_patrol = 1 - - if("summon") - bot_reset() - summon_target = user_turf - if(user_access.len != 0) - access_card.access = user_access + prev_access //Adds the user's access, if any. - mode = BOT_SUMMON - speak("Responding.", radio_channel) - calc_summon_path() - - if("ejectpai") - ejectpairemote(user) - return - -// -/mob/living/simple_animal/bot/proc/bot_control_message(command,user,user_turf,user_access) - switch(command) - if("patroloff") - to_chat(src, "STOP PATROL") - if("patrolon") - to_chat(src, "START PATROL") - if("summon") - var/area/a = get_area(user_turf) - to_chat(src, "PRIORITY ALERT:[user] in [a.name]!") - if("stop") - to_chat(src, "STOP!") - - if("go") - to_chat(src, "GO!") - - if("home") - to_chat(src, "RETURN HOME!") - if("ejectpai") - return - else - to_chat(src, "Unidentified control sequence recieved:[command]") - -/mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA - summon_step() - -// calculates a path to the current destination -// given an optional turf to avoid -/mob/living/simple_animal/bot/proc/calc_path(turf/avoid) - check_bot_access() - path = get_path_to(src, patrol_target, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid) - -/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid) - check_bot_access() - spawn() - path = get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid) - if(!path.len) //Cannot reach target. Give up and announce the issue. - speak("Summon command failed, destination unreachable.",radio_channel) - bot_reset() - -/mob/living/simple_animal/bot/proc/summon_step() - - if(client) // In use by player, don't actually move. - return - - if(loc == summon_target) // Arrived to summon location. - bot_reset() - return - - else if(path.len > 0 && summon_target) //Proper path acquired! - var/turf/next = path[1] - if(next == loc) - path -= next - return - - var/moved = bot_move(summon_target, 3) // Move attempt - if(!moved) - spawn(2) - calc_summon_path() - tries = 0 - - else // no path, so calculate new one - calc_summon_path() - -/mob/living/simple_animal/bot/Bump(M as mob|obj) //Leave no door unopened! - . = ..() - if((istype(M, /obj/machinery/door/airlock) || istype(M, /obj/machinery/door/window)) && (!isnull(access_card))) - var/obj/machinery/door/D = M - if(D.check_access(access_card)) - D.open() - frustration = 0 - -/mob/living/simple_animal/bot/proc/show_controls(mob/M) - users |= M - var/dat = "" - dat = get_controls(M) - var/datum/browser/popup = new(M,window_id,window_name,350,600) - popup.set_content(dat) - popup.open(use_onclose = 0) - onclose(M,window_id,ref=src) - return - -/mob/living/simple_animal/bot/proc/update_controls() - for(var/mob/M in users) - show_controls(M) - -/mob/living/simple_animal/bot/proc/get_controls(mob/M) - return "PROTOBOT - NOT FOR USE" - -/mob/living/simple_animal/bot/Topic(href, href_list) - //No ..() to prevent strip panel showing up - Todo: make that saner - if(href_list["close"])// HUE HUE - if(usr in users) - users.Remove(usr) - return 1 - - if(topic_denied(usr)) - to_chat(usr, "[src]'s interface is not responding!") - return 1 - add_fingerprint(usr) - - if((href_list["power"]) && (bot_core.allowed(usr) || !locked)) - if(on) - turn_off() - else - turn_on() - - switch(href_list["operation"]) - if("patrol") - auto_patrol = !auto_patrol - bot_reset() - if("remote") - remote_disabled = !remote_disabled - if("hack") - if(emagged != 2) - emagged = 2 - hacked = 1 - locked = 1 - to_chat(usr, "[text_hack]") - bot_reset() - else if(!hacked) - to_chat(usr, "[text_dehack_fail]") - else - emagged = 0 - hacked = 0 - to_chat(usr, "[text_dehack]") - bot_reset() - if("ejectpai") - if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr))) - to_chat(usr, "You eject [paicard] from [bot_name]") - ejectpai(usr) - update_controls() - -/mob/living/simple_animal/bot/proc/update_icon() - icon_state = "[initial(icon_state)][on]" - -// Machinery to simplify topic and access calls -/obj/machinery/bot_core - use_power = 0 - var/mob/living/simple_animal/bot/owner = null - -/obj/machinery/bot_core/Initialize() - ..() - owner = loc - if(!istype(owner)) - qdel(src) - -/mob/living/simple_animal/bot/proc/topic_denied(mob/user) //Access check proc for bot topics! Remember to place in a bot's individual Topic if desired. - if(!user.canUseTopic(src)) - return 1 - // 0 for access, 1 for denied. - if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. - if(!hacked) //Manually emagged by a human - access denied to all. - return 1 - else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. - return 1 - return 0 - -/mob/living/simple_animal/bot/proc/hack(mob/user) - var/hack - if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. - hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
" - hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
" - else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. - hack += "Remote network control radio: [remote_disabled ? "Disconnected" : "Connected"]
" - return hack - -/mob/living/simple_animal/bot/proc/showpai(mob/user) - var/eject = "" - if((!locked || issilicon(usr) || IsAdminGhost(usr))) - if(paicard || allow_pai) - eject += "Personality card status: " - if(paicard) - if(client) - eject += "Active" - else - eject += "Inactive" - else if(!allow_pai || key) - eject += "Unavailable" - else - eject += "Not inserted" - eject += "
" - eject += "
" - return eject - -/mob/living/simple_animal/bot/proc/insertpai(mob/user, obj/item/device/paicard/card) - if(paicard) - to_chat(user, "A [paicard] is already inserted!") - else if(allow_pai && !key) - if(!locked && !open) - if(card.pai && card.pai.mind) - if(!user.drop_item()) - return - card.forceMove(src) - paicard = card - user.visible_message("[user] inserts [card] into [src]!","You insert [card] into [src].") - paicard.pai.mind.transfer_to(src) - to_chat(src, "You sense your form change as you are uploaded into [src].") - bot_name = name - name = paicard.pai.name - faction = user.faction.Copy() - add_logs(user, paicard.pai, "uploaded to [bot_name],") - return 1 - else - to_chat(user, "[card] is inactive.") - else - to_chat(user, "The personality slot is locked.") - else - to_chat(user, "[src] is not compatible with [card]") - -/mob/living/simple_animal/bot/proc/ejectpai(mob/user = null, announce = 1) - if(paicard) - if(mind && paicard.pai) - mind.transfer_to(paicard.pai) - else if(paicard.pai) - paicard.pai.key = key - else - ghostize(0) // The pAI card that just got ejected was dead. - key = null - paicard.forceMove(loc) - if(user) - add_logs(user, paicard.pai, "ejected from [src.bot_name],") - else - add_logs(src, paicard.pai, "ejected") - if(announce) - to_chat(paicard.pai, "You feel your control fade as [paicard] ejects from [bot_name].") - paicard = null - name = bot_name - faction = initial(faction) - -/mob/living/simple_animal/bot/proc/ejectpairemote(mob/user) - if(bot_core.allowed(user) && paicard) - speak("Ejecting personality chip.", radio_channel) - ejectpai(user) - -/mob/living/simple_animal/bot/Login() - . = ..() - access_card.access += player_access - diag_hud_set_botmode() - activate_data_hud() - -/mob/living/simple_animal/bot/Logout() - . = ..() - bot_reset() - -/mob/living/simple_animal/bot/revive(full_heal = 0, admin_revive = 0) - if(..()) - update_icon() - . = 1 - -/mob/living/simple_animal/bot/ghost() - if(stat != DEAD) // Only ghost if we're doing this while alive, the pAI probably isn't dead yet. - ..() - if(paicard && (!client || stat == DEAD)) - ejectpai(0) - -/mob/living/simple_animal/bot/sentience_act() - faction -= "silicon" - -/mob/living/simple_animal/bot/proc/activate_data_hud() -//If a bot has its own HUD (for player bots), provide it. - if(!data_hud_type) - return - var/datum/atom_hud/datahud = GLOB.huds[data_hud_type] - datahud.add_hud_to(src) +//Defines for bots are now found in code\__DEFINES\bots.dm + +// AI (i.e. game AI, not the AI player) controlled bots +/mob/living/simple_animal/bot + icon = 'icons/mob/aibots.dmi' + layer = MOB_LAYER + gender = NEUTER + luminosity = 3 + stop_automated_movement = 1 + wander = 0 + healable = 0 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + maxbodytemp = INFINITY + minbodytemp = 0 + has_unlimited_silicon_privilege = 1 + sentience_type = SENTIENCE_ARTIFICIAL + status_flags = NONE //no default canpush + verb_say = "states" + verb_ask = "queries" + verb_exclaim = "declares" + verb_yell = "alarms" + initial_language_holder = /datum/language_holder/synthetic + bubble_icon = "machine" + + faction = list("neutral", "silicon" , "turret") + + var/obj/machinery/bot_core/bot_core = null + var/bot_core_type = /obj/machinery/bot_core + var/list/users = list() //for dialog updates + var/window_id = "bot_control" + var/window_name = "Protobot 1.0" //Popup title + var/window_width = 0 //0 for default size + var/window_height = 0 + var/obj/item/device/paicard/paicard // Inserted pai card. + var/allow_pai = 1 // Are we even allowed to insert a pai card. + var/bot_name + + var/list/player_access = list() //Additonal access the bots gets when player controlled + var/emagged = 0 + var/list/prev_access = list() + var/on = 1 + var/open = 0//Maint panel + var/locked = 1 + var/hacked = 0 //Used to differentiate between being hacked by silicons and emagged by humans. + var/text_hack = "" //Custom text returned to a silicon upon hacking a bot. + var/text_dehack = "" //Text shown when resetting a bots hacked status to normal. + var/text_dehack_fail = "" //Shown when a silicon tries to reset a bot emagged with the emag item, which cannot be reset. + var/declare_message = "" //What the bot will display to the HUD user. + var/frustration = 0 //Used by some bots for tracking failures to reach their target. + var/base_speed = 2 //The speed at which the bot moves, or the number of times it moves per process() tick. + var/turf/ai_waypoint //The end point of a bot's path, or the target location. + var/list/path = list() //List of turfs through which a bot 'steps' to reach the waypoint. + var/pathset = 0 + var/list/ignore_list = list() //List of unreachable targets for an ignore-list enabled bot to ignore. + var/mode = BOT_IDLE //Standardizes the vars that indicate the bot is busy with its function. + var/tries = 0 //Number of times the bot tried and failed to move. + var/remote_disabled = 0 //If enabled, the AI cannot *Remotely* control a bot. It can still control it through cameras. + var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it. + var/obj/item/device/radio/Radio //The bot's radio, for speaking to people. + var/radio_key = null //which channels can the bot listen to + var/radio_channel = "Common" //The bot's default radio channel + var/auto_patrol = 0// set to make bot automatically patrol + var/turf/patrol_target // this is turf to navigate to (location of beacon) + var/turf/summon_target // The turf of a user summoning a bot. + var/new_destination // pending new destination (waiting for beacon response) + var/destination // destination description tag + var/next_destination // the next destination in the patrol route + var/shuffle = FALSE // If we should shuffle our adjacency checking + + var/blockcount = 0 //number of times retried a blocked path + var/awaiting_beacon = 0 // count of pticks awaiting a beacon response + + var/nearest_beacon // the nearest beacon's tag + var/turf/nearest_beacon_loc // the nearest beacon's location + + var/beacon_freq = 1445 // navigation beacon frequency + var/model = "" //The type of bot it is. + var/bot_type = 0 //The type of bot it is, for radio control. + var/data_hud_type = DATA_HUD_DIAGNOSTIC //The type of data HUD the bot uses. Diagnostic by default. + var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \ + "Beginning Patrol", "Patrolling", "Summoned by PDA", \ + "Cleaning", "Repairing", "Proceeding to work site", "Healing", \ + "Proceeding to AI waypoint", "Navigating to Delivery Location", "Navigating to Home", \ + "Waiting for clear path", "Calculating navigation path", "Pinging beacon network", "Unable to reach destination") + //This holds text for what the bot is mode doing, reported on the remote bot control interface. + + hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD) //Diagnostic HUD views + +/mob/living/simple_animal/bot/proc/get_mode() + if(client) //Player bots do not have modes, thus the override. Also an easy way for PDA users/AI to know when a bot is a player. + if(paicard) + return "pAI Controlled" + else + return "Autonomous" + else if(!on) + return "Inactive" + else if(!mode) + return "Idle" + else + return "[mode_name[mode]]" + +/mob/living/simple_animal/bot/proc/turn_on() + if(stat) + return 0 + on = 1 + set_light(initial(light_range)) + update_icon() + diag_hud_set_botstat() + return 1 + +/mob/living/simple_animal/bot/proc/turn_off() + on = 0 + set_light(0) + bot_reset() //Resets an AI's call, should it exist. + update_icon() + +/mob/living/simple_animal/bot/Initialize() + ..() + access_card = new /obj/item/weapon/card/id(src) +//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first. + access_card.access += GLOB.access_robotics + set_custom_texts() + Radio = new/obj/item/device/radio(src) + if(radio_key) + Radio.keyslot = new radio_key + Radio.subspace_transmission = 1 + Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. + Radio.recalculateChannels() + + bot_core = new bot_core_type(src) + + //Adds bot to the diagnostic HUD system + prepare_huds() + var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] + diag_hud.add_to_hud(src) + diag_hud_set_bothealth() + diag_hud_set_botstat() + diag_hud_set_botmode() + + //Gives a HUD view to player bots that use a HUD. + activate_data_hud() + + +/mob/living/simple_animal/bot/update_canmove() + . = ..() + if(!on) + . = 0 + canmove = . + +/mob/living/simple_animal/bot/Destroy() + if(paicard) + ejectpai() + qdel(Radio) + qdel(access_card) + qdel(bot_core) + return ..() + +/mob/living/simple_animal/bot/bee_friendly() + return 1 + +/mob/living/simple_animal/bot/death(gibbed) + explode() + ..() + +/mob/living/simple_animal/bot/proc/explode() + qdel(src) + +/mob/living/simple_animal/bot/emag_act(mob/user) + if(locked) //First emag application unlocks the bot's interface. Apply a screwdriver to use the emag again. + locked = 0 + emagged = 1 + to_chat(user, "You bypass [src]'s controls.") + return + if(!locked && open) //Bot panel is unlocked by ID or emag, and the panel is screwed open. Ready for emagging. + emagged = 2 + remote_disabled = 1 //Manually emagging the bot locks out the AI built in panel. + locked = 1 //Access denied forever! + bot_reset() + turn_on() //The bot automatically turns on when emagged, unless recently hit with EMP. + to_chat(src, "(#$*#$^^( OVERRIDE DETECTED") + add_logs(user, src, "emagged") + return + else //Bot is unlocked, but the maint panel has not been opened with a screwdriver yet. + to_chat(user, "You need to open maintenance panel first!") + +/mob/living/simple_animal/bot/examine(mob/user) + ..() + if(health < maxHealth) + if(health > maxHealth/3) + to_chat(user, "[src]'s parts look loose.") + else + to_chat(user, "[src]'s parts look very loose!") + else + to_chat(user, "[src] is in pristine condition.") + +/mob/living/simple_animal/bot/adjustHealth(amount, updating_health = TRUE, forced = FALSE) + if(amount>0 && prob(10)) + new /obj/effect/decal/cleanable/oil(loc) + . = ..() + +/mob/living/simple_animal/bot/updatehealth() + ..() + diag_hud_set_bothealth() + +/mob/living/simple_animal/bot/med_hud_set_health() + return //we use a different hud + +/mob/living/simple_animal/bot/med_hud_set_status() + return //we use a different hud + +/mob/living/simple_animal/bot/handle_automated_action() //Master process which handles code common across most bots. + set background = BACKGROUND_ENABLED + diag_hud_set_botmode() + + if(!on || client) + return + + switch(mode) //High-priority overrides are processed first. Bots can do nothing else while under direct command. + if(BOT_RESPONDING) //Called by the AI. + call_mode() + return + if(BOT_SUMMON) //Called by PDA + bot_summon() + return + return 1 //Successful completion. Used to prevent child process() continuing if this one is ended early. + + +/mob/living/simple_animal/bot/attack_hand(mob/living/carbon/human/H) + if(H.a_intent == INTENT_HELP) + interact(H) + else + return ..() + +/mob/living/simple_animal/bot/attack_ai(mob/user) + if(!topic_denied(user)) + interact(user) + else + to_chat(user, "[src]'s interface is not responding!") + +/mob/living/simple_animal/bot/interact(mob/user) + show_controls(user) + +/mob/living/simple_animal/bot/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/screwdriver)) + if(!locked) + open = !open + to_chat(user, "The maintenance panel is now [open ? "opened" : "closed"].") + else + to_chat(user, "The maintenance panel is locked.") + else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) + if(bot_core.allowed(user) && !open && !emagged) + locked = !locked + to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]") + else + if(emagged) + to_chat(user, "ERROR") + if(open) + to_chat(user, "Please close the access panel before locking it.") + else + to_chat(user, "Access denied.") + else if(istype(W, /obj/item/device/paicard)) + insertpai(user, W) + else if(istype(W, /obj/item/weapon/hemostat) && paicard) + if(open) + to_chat(user, "Close the access panel before manipulating the personality slot!") + else + to_chat(user, "You attempt to pull [paicard] free...") + if(do_after(user, 30, target = src)) + if (paicard) + user.visible_message("[user] uses [W] to pull [paicard] out of [bot_name]!","You pull [paicard] out of [bot_name] with [W].") + ejectpai(user) + else + user.changeNext_move(CLICK_CD_MELEE) + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) + if(health >= maxHealth) + to_chat(user, "[src] does not need a repair!") + return + if(!open) + to_chat(user, "Unable to repair with the maintenance panel closed!") + return + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + adjustHealth(-10) + user.visible_message("[user] repairs [src]!","You repair [src].") + else + to_chat(user, "The welder must be on for this task!") + else + if(W.force) //if force is non-zero + do_sparks(5, TRUE, src) + ..() + +/mob/living/simple_animal/bot/bullet_act(obj/item/projectile/Proj) + if(Proj && (Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + if(prob(75) && Proj.damage > 0) + do_sparks(5, TRUE, src) + return ..() + +/mob/living/simple_animal/bot/emp_act(severity) + var/was_on = on + stat |= EMPED + new /obj/effect/overlay/temp/emp(loc) + if(paicard) + paicard.emp_act(severity) + src.visible_message("[paicard] is flies out of [bot_name]!","You are forcefully ejected from [bot_name]!") + ejectpai(0) + if(on) + turn_off() + spawn(severity*300) + stat &= ~EMPED + if(was_on) + turn_on() + +/mob/living/simple_animal/bot/proc/set_custom_texts() //Superclass for setting hack texts. Appears only if a set is not given to a bot locally. + text_hack = "You hack [name]." + text_dehack = "You reset [name]." + text_dehack_fail = "You fail to reset [name]." + +/mob/living/simple_animal/bot/proc/speak(message,channel) //Pass a message to have the bot say() it. Pass a frequency to say it on the radio. + if((!on) || (!message)) + return + if(channel && Radio.channels[channel])// Use radio if we have channel key + Radio.talk_into(src, message, channel, get_spans(), get_default_language()) + else + say(message) + +/mob/living/simple_animal/bot/get_spans() + return ..() | SPAN_ROBOT + +/mob/living/simple_animal/bot/radio(message, message_mode, list/spans, language) + . = ..() + if(. != 0) + return . + + switch(message_mode) + if(MODE_HEADSET) + Radio.talk_into(src, message, , spans, language) + return REDUCE_RANGE + + if(MODE_DEPARTMENT) + Radio.talk_into(src, message, message_mode, spans, language) + return REDUCE_RANGE + + if(message_mode in GLOB.radiochannels) + Radio.talk_into(src, message, message_mode, spans, language) + return REDUCE_RANGE + return 0 + +//Generalized behavior code, override where needed! + +/* +scan() will search for a given type (such as turfs, human mobs, or objects) in the bot's view range, and return a single result. +Arguments: The object type to be searched (such as "/mob/living/carbon/human"), the old scan result to be ignored, if one exists, +and the view range, which defaults to 7 (full screen) if an override is not passed. +If the bot maintains an ignore list, it is also checked here. + +Example usage: patient = scan(/mob/living/carbon/human, oldpatient, 1) +The proc would return a human next to the bot to be set to the patient var. +Pass the desired type path itself, declaring a temporary var beforehand is not required. +*/ +/mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) + var/turf/T = get_turf(src) + if(!T) + return + var/list/adjacent = T.GetAtmosAdjacentTurfs(1) + if(shuffle) //If we were on the same tile as another bot, let's randomize our choices so we dont both go the same way + adjacent = shuffle(adjacent) + shuffle = FALSE + for(var/scan in adjacent)//Let's see if there's something right next to us first! + if(check_bot(scan)) //Is there another bot there? Then let's just skip it + continue + if(isturf(scan_type)) //If we're lookeing for a turf we can just run the checks directly! + var/final_result = checkscan(scan,scan_type,old_target) + if(final_result) + return final_result + else + var/turf/turfy = scan + for(var/deepscan in turfy.contents)//Check the contents since adjacent is turfs + var/final_result = checkscan(deepscan,scan_type,old_target) + if(final_result) + return final_result + for (var/scan in shuffle(view(scan_range, src))-adjacent) //Search for something in range! + var/final_result = checkscan(scan,scan_type,old_target) + if(final_result) + return final_result + +/mob/living/simple_animal/bot/proc/checkscan(scan, scan_type, old_target) + if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! + return 0 //If not, keep searching! + if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness + return 0 + + var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected. + if(scan_result) + return scan_result + else + return 0 //The current element failed assessment, move on to the next. + return + +/mob/living/simple_animal/bot/proc/check_bot(targ) + var/turf/T = get_turf(targ) + if(T) + for(var/C in T.contents) + if(istype(C,type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother. + return 1 //Let's abort if we find a bot so we dont have to keep rechecking + +//When the scan finds a target, run bot specific processing to select it for the next step. Empty by default. +/mob/living/simple_animal/bot/proc/process_scan(scan_target) + return scan_target + + +/mob/living/simple_animal/bot/proc/add_to_ignore(subject) + if(ignore_list.len < 50) //This will help keep track of them, so the bot is always trying to reach a blocked spot. + ignore_list |= subject + else if(ignore_list.len >= subject) //If the list is full, insert newest, delete oldest. + ignore_list -= ignore_list[1] + ignore_list |= subject + +/* +Movement proc for stepping a bot through a path generated through A-star. +Pass a positive integer as an argument to override a bot's default speed. +*/ +/mob/living/simple_animal/bot/proc/bot_move(dest, move_speed) + + if(!dest || !path || path.len == 0) //A-star failed or a path/destination was not set. + path = list() + return 0 + dest = get_turf(dest) //We must always compare turfs, so get the turf of the dest var if dest was originally something else. + var/turf/last_node = get_turf(path[path.len]) //This is the turf at the end of the path, it should be equal to dest. + if(get_turf(src) == dest) //We have arrived, no need to move again. + return 1 + else if(dest != last_node) //The path should lead us to our given destination. If this is not true, we must stop. + path = list() + return 0 + var/step_count = move_speed ? move_speed : base_speed //If a value is passed into move_speed, use that instead of the default speed var. + + if(step_count >= 1 && tries < BOT_STEP_MAX_RETRIES) + for(var/step_number = 0, step_number < step_count,step_number++) + spawn(BOT_STEP_DELAY*step_number) + bot_step(dest) + else + return 0 + return 1 + + +/mob/living/simple_animal/bot/proc/bot_step(dest) //Step,increase tries if failed + if(!path) + return 0 + if(path.len > 1) + step_towards(src, path[1]) + if(get_turf(src) == path[1]) //Successful move + path -= path[1] + tries = 0 + else + tries++ + return 0 + else if(path.len == 1) + step_to(src, dest) + path = list() + return 1 + + +/mob/living/simple_animal/bot/proc/check_bot_access() + if(mode != BOT_SUMMON && mode != BOT_RESPONDING) + access_card.access = prev_access + +/mob/living/simple_animal/bot/proc/call_bot(caller, turf/waypoint, message=TRUE) + bot_reset() //Reset a bot before setting it to call mode. + var/area/end_area = get_area(waypoint) + + if(client) //Player bots instead get a location command from the AI + to_chat(src, "Priority waypoint set by \icon[caller] [caller]. Proceed to [end_area.name]<\b>.") + + //For giving the bot temporary all-access. + var/obj/item/weapon/card/id/all_access = new /obj/item/weapon/card/id + var/datum/job/captain/All = new/datum/job/captain + all_access.access = All.get_access() + + path = get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access) + calling_ai = caller //Link the AI to the bot! + ai_waypoint = waypoint + + if(path && path.len) //Ensures that a valid path is calculated! + if(!on) + turn_on() //Saves the AI the hassle of having to activate a bot manually. + access_card = all_access //Give the bot all-access while under the AI's command. + if(message) + to_chat(calling_ai, "\icon[src] [name] called to [end_area.name]. [path.len-1] meters to destination.") + pathset = 1 + mode = BOT_RESPONDING + tries = 0 + else + if(message) + to_chat(calling_ai, "Failed to calculate a valid route. Ensure destination is clear of obstructions and within range.") + calling_ai = null + path = list() + +/mob/living/simple_animal/bot/proc/call_mode() //Handles preparing a bot for a call, as well as calling the move proc. +//Handles the bot's movement during a call. + var/success = bot_move(ai_waypoint, 3) + if(!success) + if(calling_ai) + to_chat(calling_ai, "\icon[src] [get_turf(src) == ai_waypoint ? "[src] successfully arrived to waypoint." : "[src] failed to reach waypoint."]") + calling_ai = null + bot_reset() + +/mob/living/simple_animal/bot/proc/bot_reset() + if(calling_ai) //Simple notification to the AI if it called a bot. It will not know the cause or identity of the bot. + to_chat(calling_ai, "Call command to a bot has been reset.") + calling_ai = null + path = list() + summon_target = null + pathset = 0 + access_card.access = prev_access + tries = 0 + mode = BOT_IDLE + diag_hud_set_botstat() + diag_hud_set_botmode() + + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//Patrol and summon code! +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +/mob/living/simple_animal/bot/proc/bot_patrol() + patrol_step() + spawn(5) + if(mode == BOT_PATROL) + patrol_step() + return + +/mob/living/simple_animal/bot/proc/start_patrol() + + if(tries >= BOT_STEP_MAX_RETRIES) //Bot is trapped, so stop trying to patrol. + auto_patrol = 0 + tries = 0 + speak("Unable to start patrol.") + + return + + if(!auto_patrol) //A bot not set to patrol should not be patrolling. + mode = BOT_IDLE + return + + if(patrol_target) // has patrol target + spawn(0) + calc_path() // Find a route to it + if(path.len == 0) + patrol_target = null + return + mode = BOT_PATROL + else // no patrol target, so need a new one + speak("Engaging patrol mode.") + find_patrol_target() + tries++ + return + +// perform a single patrol step + +/mob/living/simple_animal/bot/proc/patrol_step() + + if(client) // In use by player, don't actually move. + return + + if(loc == patrol_target) // reached target + //Find the next beacon matching the target. + if(!get_next_patrol_target()) + find_patrol_target() //If it fails, look for the nearest one instead. + return + + else if(path.len > 0 && patrol_target) // valid path + var/turf/next = path[1] + if(next == loc) + path -= next + return + + + var/moved = bot_move(patrol_target)//step_towards(src, next) // attempt to move + if(!moved) //Couldn't proceed the next step of the path BOT_STEP_MAX_RETRIES times + spawn(2) + calc_path() + if(path.len == 0) + find_patrol_target() + tries = 0 + + else // no path, so calculate new one + mode = BOT_START_PATROL + +// finds the nearest beacon to self +/mob/living/simple_animal/bot/proc/find_patrol_target() + nearest_beacon = null + new_destination = null + find_nearest_beacon() + if(nearest_beacon) + patrol_target = nearest_beacon_loc + destination = next_destination + else + auto_patrol = 0 + mode = BOT_IDLE + speak("Disengaging patrol mode.") + +/mob/living/simple_animal/bot/proc/get_next_patrol_target() + // search the beacon list for the next target in the list. + for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) + if(NB.location == next_destination) //Does the Beacon location text match the destination? + destination = new_destination //We now know the name of where we want to go. + patrol_target = NB.loc //Get its location and set it as the target. + next_destination = NB.codes["next_patrol"] //Also get the name of the next beacon in line. + return 1 + +/mob/living/simple_animal/bot/proc/find_nearest_beacon() + for(var/obj/machinery/navbeacon/NB in GLOB.navbeacons["[z]"]) + var/dist = get_dist(src, NB) + if(nearest_beacon) //Loop though the beacon net to find the true closest beacon. + //Ignore the beacon if were are located on it. + if(dist>1 && dist 1) //Begin the search, save this one for comparison on the next loop. + nearest_beacon = NB.location + nearest_beacon_loc = NB.loc + patrol_target = nearest_beacon_loc + destination = nearest_beacon + +//PDA control. Some bots, especially MULEs, may have more parameters. +/mob/living/simple_animal/bot/proc/bot_control(command, mob/user, turf/user_turf, list/user_access = list()) + if(!on || emagged == 2 || remote_disabled) //Emagged bots do not respect anyone's authority! Bots with their remote controls off cannot get commands. + return 1 //ACCESS DENIED + if(client) + bot_control_message(command,user,user_turf,user_access) + // process control input + switch(command) + if("patroloff") + bot_reset() //HOLD IT!! + auto_patrol = 0 + + if("patrolon") + auto_patrol = 1 + + if("summon") + bot_reset() + summon_target = user_turf + if(user_access.len != 0) + access_card.access = user_access + prev_access //Adds the user's access, if any. + mode = BOT_SUMMON + speak("Responding.", radio_channel) + calc_summon_path() + + if("ejectpai") + ejectpairemote(user) + return + +// +/mob/living/simple_animal/bot/proc/bot_control_message(command,user,user_turf,user_access) + switch(command) + if("patroloff") + to_chat(src, "STOP PATROL") + if("patrolon") + to_chat(src, "START PATROL") + if("summon") + var/area/a = get_area(user_turf) + to_chat(src, "PRIORITY ALERT:[user] in [a.name]!") + if("stop") + to_chat(src, "STOP!") + + if("go") + to_chat(src, "GO!") + + if("home") + to_chat(src, "RETURN HOME!") + if("ejectpai") + return + else + to_chat(src, "Unidentified control sequence recieved:[command]") + +/mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA + summon_step() + +// calculates a path to the current destination +// given an optional turf to avoid +/mob/living/simple_animal/bot/proc/calc_path(turf/avoid) + check_bot_access() + path = get_path_to(src, patrol_target, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid) + +/mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid) + check_bot_access() + spawn() + path = get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid) + if(!path.len) //Cannot reach target. Give up and announce the issue. + speak("Summon command failed, destination unreachable.",radio_channel) + bot_reset() + +/mob/living/simple_animal/bot/proc/summon_step() + + if(client) // In use by player, don't actually move. + return + + if(loc == summon_target) // Arrived to summon location. + bot_reset() + return + + else if(path.len > 0 && summon_target) //Proper path acquired! + var/turf/next = path[1] + if(next == loc) + path -= next + return + + var/moved = bot_move(summon_target, 3) // Move attempt + if(!moved) + spawn(2) + calc_summon_path() + tries = 0 + + else // no path, so calculate new one + calc_summon_path() + +/mob/living/simple_animal/bot/Bump(M as mob|obj) //Leave no door unopened! + . = ..() + if((istype(M, /obj/machinery/door/airlock) || istype(M, /obj/machinery/door/window)) && (!isnull(access_card))) + var/obj/machinery/door/D = M + if(D.check_access(access_card)) + D.open() + frustration = 0 + +/mob/living/simple_animal/bot/proc/show_controls(mob/M) + users |= M + var/dat = "" + dat = get_controls(M) + var/datum/browser/popup = new(M,window_id,window_name,350,600) + popup.set_content(dat) + popup.open(use_onclose = 0) + onclose(M,window_id,ref=src) + return + +/mob/living/simple_animal/bot/proc/update_controls() + for(var/mob/M in users) + show_controls(M) + +/mob/living/simple_animal/bot/proc/get_controls(mob/M) + return "PROTOBOT - NOT FOR USE" + +/mob/living/simple_animal/bot/Topic(href, href_list) + //No ..() to prevent strip panel showing up - Todo: make that saner + if(href_list["close"])// HUE HUE + if(usr in users) + users.Remove(usr) + return 1 + + if(topic_denied(usr)) + to_chat(usr, "[src]'s interface is not responding!") + return 1 + add_fingerprint(usr) + + if((href_list["power"]) && (bot_core.allowed(usr) || !locked)) + if(on) + turn_off() + else + turn_on() + + switch(href_list["operation"]) + if("patrol") + auto_patrol = !auto_patrol + bot_reset() + if("remote") + remote_disabled = !remote_disabled + if("hack") + if(emagged != 2) + emagged = 2 + hacked = 1 + locked = 1 + to_chat(usr, "[text_hack]") + bot_reset() + else if(!hacked) + to_chat(usr, "[text_dehack_fail]") + else + emagged = 0 + hacked = 0 + to_chat(usr, "[text_dehack]") + bot_reset() + if("ejectpai") + if(paicard && (!locked || issilicon(usr) || IsAdminGhost(usr))) + to_chat(usr, "You eject [paicard] from [bot_name]") + ejectpai(usr) + update_controls() + +/mob/living/simple_animal/bot/proc/update_icon() + icon_state = "[initial(icon_state)][on]" + +// Machinery to simplify topic and access calls +/obj/machinery/bot_core + use_power = 0 + var/mob/living/simple_animal/bot/owner = null + +/obj/machinery/bot_core/Initialize() + . = ..() + owner = loc + if(!istype(owner)) + qdel(src) + +/mob/living/simple_animal/bot/proc/topic_denied(mob/user) //Access check proc for bot topics! Remember to place in a bot's individual Topic if desired. + if(!user.canUseTopic(src)) + return 1 + // 0 for access, 1 for denied. + if(emagged == 2) //An emagged bot cannot be controlled by humans, silicons can if one hacked it. + if(!hacked) //Manually emagged by a human - access denied to all. + return 1 + else if(!issilicon(user) && !IsAdminGhost(user)) //Bot is hacked, so only silicons and admins are allowed access. + return 1 + return 0 + +/mob/living/simple_animal/bot/proc/hack(mob/user) + var/hack + if(issilicon(user) || IsAdminGhost(user)) //Allows silicons or admins to toggle the emag status of a bot. + hack += "[emagged == 2 ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]
" + hack += "Harm Prevention Safety System: [emagged ? "DANGER" : "Engaged"]
" + else if(!locked) //Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control. + hack += "Remote network control radio: [remote_disabled ? "Disconnected" : "Connected"]
" + return hack + +/mob/living/simple_animal/bot/proc/showpai(mob/user) + var/eject = "" + if((!locked || issilicon(usr) || IsAdminGhost(usr))) + if(paicard || allow_pai) + eject += "Personality card status: " + if(paicard) + if(client) + eject += "Active" + else + eject += "Inactive" + else if(!allow_pai || key) + eject += "Unavailable" + else + eject += "Not inserted" + eject += "
" + eject += "
" + return eject + +/mob/living/simple_animal/bot/proc/insertpai(mob/user, obj/item/device/paicard/card) + if(paicard) + to_chat(user, "A [paicard] is already inserted!") + else if(allow_pai && !key) + if(!locked && !open) + if(card.pai && card.pai.mind) + if(!user.drop_item()) + return + card.forceMove(src) + paicard = card + user.visible_message("[user] inserts [card] into [src]!","You insert [card] into [src].") + paicard.pai.mind.transfer_to(src) + to_chat(src, "You sense your form change as you are uploaded into [src].") + bot_name = name + name = paicard.pai.name + faction = user.faction.Copy() + add_logs(user, paicard.pai, "uploaded to [bot_name],") + return 1 + else + to_chat(user, "[card] is inactive.") + else + to_chat(user, "The personality slot is locked.") + else + to_chat(user, "[src] is not compatible with [card]") + +/mob/living/simple_animal/bot/proc/ejectpai(mob/user = null, announce = 1) + if(paicard) + if(mind && paicard.pai) + mind.transfer_to(paicard.pai) + else if(paicard.pai) + paicard.pai.key = key + else + ghostize(0) // The pAI card that just got ejected was dead. + key = null + paicard.forceMove(loc) + if(user) + add_logs(user, paicard.pai, "ejected from [src.bot_name],") + else + add_logs(src, paicard.pai, "ejected") + if(announce) + to_chat(paicard.pai, "You feel your control fade as [paicard] ejects from [bot_name].") + paicard = null + name = bot_name + faction = initial(faction) + +/mob/living/simple_animal/bot/proc/ejectpairemote(mob/user) + if(bot_core.allowed(user) && paicard) + speak("Ejecting personality chip.", radio_channel) + ejectpai(user) + +/mob/living/simple_animal/bot/Login() + . = ..() + access_card.access += player_access + diag_hud_set_botmode() + activate_data_hud() + +/mob/living/simple_animal/bot/Logout() + . = ..() + bot_reset() + +/mob/living/simple_animal/bot/revive(full_heal = 0, admin_revive = 0) + if(..()) + update_icon() + . = 1 + +/mob/living/simple_animal/bot/ghost() + if(stat != DEAD) // Only ghost if we're doing this while alive, the pAI probably isn't dead yet. + ..() + if(paicard && (!client || stat == DEAD)) + ejectpai(0) + +/mob/living/simple_animal/bot/sentience_act() + faction -= "silicon" + +/mob/living/simple_animal/bot/proc/activate_data_hud() +//If a bot has its own HUD (for player bots), provide it. + if(!data_hud_type) + return + var/datum/atom_hud/datahud = GLOB.huds[data_hud_type] + datahud.add_hud_to(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 4c5c2c14c5..190e6a7db4 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -259,9 +259,7 @@ if(prob(50)) new /obj/item/bodypart/l_arm/robot(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, TRUE, src) ..() /obj/machinery/bot_core/cleanbot diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index e11711f2bd..32db638542 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -390,9 +390,7 @@ Auto Patrol[]"}, if(lasercolor == "r") new /obj/item/clothing/suit/redtag(Tsec) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, TRUE, src) new /obj/effect/decal/cleanable/oil(loc) ..() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index c8208e7a3b..fe2b08e777 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -381,9 +381,7 @@ var/obj/item/stack/tile/plasteel/T = new (Tsec) T.amount = 1 - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, TRUE, src) ..() /obj/machinery/bot_core/floorbot diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index bcf4b86191..5d3738108e 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -530,9 +530,7 @@ if(emagged && prob(25)) playsound(loc, 'sound/voice/minsult.ogg', 50, 0) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, TRUE, src) ..() /mob/living/simple_animal/bot/medbot/proc/declare(crit_patient) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 30c2c4e9a9..bdf4277438 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -719,9 +719,7 @@ cell.update_icon() cell = null - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() + do_sparks(3, TRUE, src) new /obj/effect/decal/cleanable/oil(loc) ..() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index a57b9a9156..cba9e446ec 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -1,423 +1,421 @@ -/mob/living/simple_animal/bot/secbot - name = "\improper Securitron" - desc = "A little security robot. He looks less than thrilled." - icon = 'icons/mob/aibots.dmi' - icon_state = "secbot0" - density = 0 - anchored = 0 - health = 25 - maxHealth = 25 - damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - pass_flags = PASSMOB - - radio_key = /obj/item/device/encryptionkey/secbot //AI Priv + Security - radio_channel = "Security" //Security channel - bot_type = SEC_BOT - model = "Securitron" - bot_core_type = /obj/machinery/bot_core/secbot - var/baton_type = /obj/item/weapon/melee/baton - window_id = "autosec" - window_name = "Automatic Security Unit v1.6" - allow_pai = 0 - data_hud_type = DATA_HUD_SECURITY_ADVANCED - - var/mob/living/carbon/target - var/oldtarget_name - var/threatlevel = 0 - var/target_lastloc //Loc of target when arrested. - var/last_found //There's a delay - var/declare_arrests = 1 //When making an arrest, should it notify everyone on the security channel? - var/idcheck = 0 //If true, arrest people with no IDs - var/weaponscheck = 0 //If true, arrest people for weapons if they lack access - var/check_records = 1 //Does it check security records? - var/arrest_type = 0 //If true, don't handcuff - -/mob/living/simple_animal/bot/secbot/beepsky - name = "Officer Beep O'sky" - desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." - idcheck = 0 - weaponscheck = 0 - auto_patrol = 1 - -/mob/living/simple_animal/bot/secbot/beepsky/jr - name = "Officer Pipsqueak" - desc = "It's Officer Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak." - -/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize() - ..() - resize = 0.8 - update_transform() - - -/mob/living/simple_animal/bot/secbot/beepsky/explode() - var/turf/Tsec = get_turf(src) - new /obj/item/weapon/stock_parts/cell/potato(Tsec) - var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec) - S.reagents.add_reagent("whiskey", 15) - S.on_reagent_change() - ..() - -/mob/living/simple_animal/bot/secbot/pingsky - name = "Officer Pingsky" - desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment." - radio_channel = "AI Private" - -/mob/living/simple_animal/bot/secbot/Initialize() - ..() - icon_state = "secbot[on]" - spawn(3) - var/datum/job/detective/J = new/datum/job/detective - access_card.access += J.get_access() - prev_access = access_card.access - - //SECHUD - var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - secsensor.add_hud_to(src) - -/mob/living/simple_animal/bot/secbot/turn_on() - ..() - icon_state = "secbot[on]" - -/mob/living/simple_animal/bot/secbot/turn_off() - ..() - icon_state = "secbot[on]" - -/mob/living/simple_animal/bot/secbot/bot_reset() - ..() - target = null - oldtarget_name = null - anchored = 0 - walk_to(src,0) - last_found = world.time - -/mob/living/simple_animal/bot/secbot/set_custom_texts() - - text_hack = "You overload [name]'s target identification system." - text_dehack = "You reboot [name] and restore the target identification." - text_dehack_fail = "[name] refuses to accept your authority!" - -/mob/living/simple_animal/bot/secbot/get_controls(mob/user) - var/dat - dat += hack(user) - dat += showpai(user) - dat += text({" -Securitron v1.6 controls

-Status: []
-Behaviour controls are [locked ? "locked" : "unlocked"]
-Maintenance panel panel is [open ? "opened" : "closed"]"}, - -"[on ? "On" : "Off"]" ) - - if(!locked || issilicon(user) || IsAdminGhost(user)) - dat += text({"
-Arrest Unidentifiable Persons: []
-Arrest for Unauthorized Weapons: []
-Arrest for Warrant: []
-Operating Mode: []
-Report Arrests[]
-Auto Patrol: []"}, - -"[idcheck ? "Yes" : "No"]", -"[weaponscheck ? "Yes" : "No"]", -"[check_records ? "Yes" : "No"]", -"[arrest_type ? "Detain" : "Arrest"]", -"[declare_arrests ? "Yes" : "No"]", -"[auto_patrol ? "On" : "Off"]" ) - - return dat - -/mob/living/simple_animal/bot/secbot/Topic(href, href_list) - if(..()) - return 1 - - switch(href_list["operation"]) - if("idcheck") - idcheck = !idcheck - update_controls() - if("weaponscheck") - weaponscheck = !weaponscheck - update_controls() - if("ignorerec") - check_records = !check_records - update_controls() - if("switchmode") - arrest_type = !arrest_type - update_controls() - if("declarearrests") - declare_arrests = !declare_arrests - update_controls() - -/mob/living/simple_animal/bot/secbot/proc/retaliate(mob/living/carbon/human/H) - threatlevel = H.assess_threat(src) - threatlevel += 6 - if(threatlevel >= 4) - target = H - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/attack_hand(mob/living/carbon/human/H) - if((H.a_intent == INTENT_HARM) || (H.a_intent == INTENT_DISARM)) - retaliate(H) - - return ..() - -/mob/living/simple_animal/bot/secbot/attackby(obj/item/weapon/W, mob/user, params) - ..() - if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry. - return - if(!istype(W, /obj/item/weapon/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass. - retaliate(user) - -/mob/living/simple_animal/bot/secbot/emag_act(mob/user) - ..() - if(emagged == 2) - if(user) - to_chat(user, "You short out [src]'s target assessment circuits.") - oldtarget_name = user.name - audible_message("[src] buzzes oddly!") - declare_arrests = 0 - icon_state = "secbot[on]" - -/mob/living/simple_animal/bot/secbot/bullet_act(obj/item/projectile/Proj) - if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) - if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) - if(!Proj.nodamage && Proj.damage < src.health) - retaliate(Proj.firer) - ..() - - -/mob/living/simple_animal/bot/secbot/UnarmedAttack(atom/A) - if(!on) - return - if(iscarbon(A)) - var/mob/living/carbon/C = A - if(!C.stunned || arrest_type) - stun_attack(A) - else if(C.canBeHandcuffed() && !C.handcuffed) - cuff(A) - else - ..() - - -/mob/living/simple_animal/bot/secbot/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0) - if(istype(AM, /obj/item)) - var/obj/item/I = AM - if(I.throwforce < src.health && I.thrownby && ishuman(I.thrownby)) - var/mob/living/carbon/human/H = I.thrownby - retaliate(H) - ..() - - -/mob/living/simple_animal/bot/secbot/proc/cuff(mob/living/carbon/C) - mode = BOT_ARREST - playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) - C.visible_message("[src] is trying to put zipties on [C]!",\ - "[src] is trying to put zipties on you!") - spawn(60) - if( !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing. - return - if(!C.handcuffed) - C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C) - C.update_handcuffed() - playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0) - back_to_idle() - -/mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/C) - playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - icon_state = "secbot-c" - spawn(2) - icon_state = "secbot[on]" - var/threat = 5 - if(ishuman(C)) - C.stuttering = 5 - C.Stun(5) - C.Weaken(5) - var/mob/living/carbon/human/H = C - threat = H.assess_threat(src) - else - C.Weaken(5) - C.stuttering = 5 - C.Stun(5) - threat = C.assess_threat() - add_logs(src,C,"stunned") - if(declare_arrests) - var/area/location = get_area(src) - speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) - C.visible_message("[src] has stunned [C]!",\ - "[src] has stunned you!") - -/mob/living/simple_animal/bot/secbot/handle_automated_action() - if(!..()) - return - - switch(mode) - - if(BOT_IDLE) // idle - - walk_to(src,0) - look_for_perp() // see if any criminals are in range - if(!mode && auto_patrol) // still idle, and set to patrol - mode = BOT_START_PATROL // switch to patrol mode - - if(BOT_HUNT) // hunting for perp - - // if can't reach perp for long enough, go idle - if(frustration >= 8) - walk_to(src,0) - back_to_idle() - return - - if(target) // make sure target exists - if(Adjacent(target) && isturf(target.loc)) // if right next to perp - stun_attack(target) - - mode = BOT_PREP_ARREST - anchored = 1 - target_lastloc = target.loc - return - - else // not next to perp - var/turf/olddist = get_dist(src, target) - walk_to(src, target,1,4) - if((get_dist(src, target)) >= (olddist)) - frustration++ - else - frustration = 0 - else - back_to_idle() - - if(BOT_PREP_ARREST) // preparing to arrest target - - // see if he got away. If he's no no longer adjacent or inside a closet or about to get up, we hunt again. - if( !Adjacent(target) || !isturf(target.loc) || target.weakened < 2 ) - back_to_hunt() - return - - if(iscarbon(target) && target.canBeHandcuffed()) - if(!arrest_type) - if(!target.handcuffed) //he's not cuffed? Try to cuff him! - cuff(target) - else - back_to_idle() - return - else - back_to_idle() - return - - if(BOT_ARREST) - if(!target) - anchored = 0 - mode = BOT_IDLE - last_found = world.time - frustration = 0 - return - - if(target.handcuffed) //no target or target cuffed? back to idle. - back_to_idle() - return - - if(!Adjacent(target) || !isturf(target.loc) || (target.loc != target_lastloc && target.weakened < 2)) //if he's changed loc and about to get up or not adjacent or got into a closet, we prep arrest again. - back_to_hunt() - return - else //Try arresting again if the target escapes. - mode = BOT_PREP_ARREST - anchored = 0 - - if(BOT_START_PATROL) - look_for_perp() - start_patrol() - - if(BOT_PATROL) - look_for_perp() - bot_patrol() - - - return - -/mob/living/simple_animal/bot/secbot/proc/back_to_idle() - anchored = 0 - mode = BOT_IDLE - target = null - last_found = world.time - frustration = 0 - spawn(0) - handle_automated_action() //ensure bot quickly responds - -/mob/living/simple_animal/bot/secbot/proc/back_to_hunt() - anchored = 0 - frustration = 0 - mode = BOT_HUNT - spawn(0) - handle_automated_action() //ensure bot quickly responds -// look for a criminal in view of the bot - -/mob/living/simple_animal/bot/secbot/proc/look_for_perp() - anchored = 0 - for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal - if((C.stat) || (C.handcuffed)) - continue - - if((C.name == oldtarget_name) && (world.time < last_found + 100)) - continue - - threatlevel = C.assess_threat(src) - - if(!threatlevel) - continue - - else if(threatlevel >= 4) - target = C - oldtarget_name = C.name - speak("Level [threatlevel] infraction alert!") - playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, 0) - visible_message("[src] points at [C.name]!") - mode = BOT_HUNT - spawn(0) - handle_automated_action() // ensure bot quickly responds to a perp - break - else - continue -/mob/living/simple_animal/bot/secbot/proc/check_for_weapons(var/obj/item/slot_item) - if(slot_item && slot_item.needs_permit) - return 1 - return 0 - -/mob/living/simple_animal/bot/secbot/explode() - - walk_to(src,0) - visible_message("[src] blows apart!") - var/turf/Tsec = get_turf(src) - - var/obj/item/weapon/secbot_assembly/Sa = new /obj/item/weapon/secbot_assembly(Tsec) - Sa.build_step = 1 - Sa.add_overlay("hs_hole") - Sa.created_name = name - new /obj/item/device/assembly/prox_sensor(Tsec) - new baton_type(Tsec) - - if(prob(50)) - new /obj/item/bodypart/l_arm/robot(Tsec) - - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - - new /obj/effect/decal/cleanable/oil(loc) - ..() - -/mob/living/simple_animal/bot/secbot/attack_alien(var/mob/living/carbon/alien/user as mob) - ..() - if(!isalien(target)) - target = user - mode = BOT_HUNT - -/mob/living/simple_animal/bot/secbot/Crossed(atom/movable/AM) - if(ismob(AM) && target) - var/mob/living/carbon/C = AM - if(!istype(C) || !C || in_range(src, target)) - return - knockOver(C) - return - ..() - -/obj/machinery/bot_core/secbot - req_access = list(GLOB.access_security) +/mob/living/simple_animal/bot/secbot + name = "\improper Securitron" + desc = "A little security robot. He looks less than thrilled." + icon = 'icons/mob/aibots.dmi' + icon_state = "secbot0" + density = 0 + anchored = 0 + health = 25 + maxHealth = 25 + damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + pass_flags = PASSMOB + + radio_key = /obj/item/device/encryptionkey/secbot //AI Priv + Security + radio_channel = "Security" //Security channel + bot_type = SEC_BOT + model = "Securitron" + bot_core_type = /obj/machinery/bot_core/secbot + var/baton_type = /obj/item/weapon/melee/baton + window_id = "autosec" + window_name = "Automatic Security Unit v1.6" + allow_pai = 0 + data_hud_type = DATA_HUD_SECURITY_ADVANCED + + var/mob/living/carbon/target + var/oldtarget_name + var/threatlevel = 0 + var/target_lastloc //Loc of target when arrested. + var/last_found //There's a delay + var/declare_arrests = 1 //When making an arrest, should it notify everyone on the security channel? + var/idcheck = 0 //If true, arrest people with no IDs + var/weaponscheck = 0 //If true, arrest people for weapons if they lack access + var/check_records = 1 //Does it check security records? + var/arrest_type = 0 //If true, don't handcuff + +/mob/living/simple_animal/bot/secbot/beepsky + name = "Officer Beep O'sky" + desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." + idcheck = 0 + weaponscheck = 0 + auto_patrol = 1 + +/mob/living/simple_animal/bot/secbot/beepsky/jr + name = "Officer Pipsqueak" + desc = "It's Officer Beep O'sky's smaller, just-as aggressive cousin, Pipsqueak." + +/mob/living/simple_animal/bot/secbot/beepsky/jr/Initialize() + ..() + resize = 0.8 + update_transform() + + +/mob/living/simple_animal/bot/secbot/beepsky/explode() + var/turf/Tsec = get_turf(src) + new /obj/item/weapon/stock_parts/cell/potato(Tsec) + var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec) + S.reagents.add_reagent("whiskey", 15) + S.on_reagent_change() + ..() + +/mob/living/simple_animal/bot/secbot/pingsky + name = "Officer Pingsky" + desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment." + radio_channel = "AI Private" + +/mob/living/simple_animal/bot/secbot/Initialize() + ..() + icon_state = "secbot[on]" + spawn(3) + var/datum/job/detective/J = new/datum/job/detective + access_card.access += J.get_access() + prev_access = access_card.access + + //SECHUD + var/datum/atom_hud/secsensor = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] + secsensor.add_hud_to(src) + +/mob/living/simple_animal/bot/secbot/turn_on() + ..() + icon_state = "secbot[on]" + +/mob/living/simple_animal/bot/secbot/turn_off() + ..() + icon_state = "secbot[on]" + +/mob/living/simple_animal/bot/secbot/bot_reset() + ..() + target = null + oldtarget_name = null + anchored = 0 + walk_to(src,0) + last_found = world.time + +/mob/living/simple_animal/bot/secbot/set_custom_texts() + + text_hack = "You overload [name]'s target identification system." + text_dehack = "You reboot [name] and restore the target identification." + text_dehack_fail = "[name] refuses to accept your authority!" + +/mob/living/simple_animal/bot/secbot/get_controls(mob/user) + var/dat + dat += hack(user) + dat += showpai(user) + dat += text({" +Securitron v1.6 controls

+Status: []
+Behaviour controls are [locked ? "locked" : "unlocked"]
+Maintenance panel panel is [open ? "opened" : "closed"]"}, + +"[on ? "On" : "Off"]" ) + + if(!locked || issilicon(user) || IsAdminGhost(user)) + dat += text({"
+Arrest Unidentifiable Persons: []
+Arrest for Unauthorized Weapons: []
+Arrest for Warrant: []
+Operating Mode: []
+Report Arrests[]
+Auto Patrol: []"}, + +"[idcheck ? "Yes" : "No"]", +"[weaponscheck ? "Yes" : "No"]", +"[check_records ? "Yes" : "No"]", +"[arrest_type ? "Detain" : "Arrest"]", +"[declare_arrests ? "Yes" : "No"]", +"[auto_patrol ? "On" : "Off"]" ) + + return dat + +/mob/living/simple_animal/bot/secbot/Topic(href, href_list) + if(..()) + return 1 + + switch(href_list["operation"]) + if("idcheck") + idcheck = !idcheck + update_controls() + if("weaponscheck") + weaponscheck = !weaponscheck + update_controls() + if("ignorerec") + check_records = !check_records + update_controls() + if("switchmode") + arrest_type = !arrest_type + update_controls() + if("declarearrests") + declare_arrests = !declare_arrests + update_controls() + +/mob/living/simple_animal/bot/secbot/proc/retaliate(mob/living/carbon/human/H) + threatlevel = H.assess_threat(src) + threatlevel += 6 + if(threatlevel >= 4) + target = H + mode = BOT_HUNT + +/mob/living/simple_animal/bot/secbot/attack_hand(mob/living/carbon/human/H) + if((H.a_intent == INTENT_HARM) || (H.a_intent == INTENT_DISARM)) + retaliate(H) + + return ..() + +/mob/living/simple_animal/bot/secbot/attackby(obj/item/weapon/W, mob/user, params) + ..() + if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry. + return + if(!istype(W, /obj/item/weapon/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass. + retaliate(user) + +/mob/living/simple_animal/bot/secbot/emag_act(mob/user) + ..() + if(emagged == 2) + if(user) + to_chat(user, "You short out [src]'s target assessment circuits.") + oldtarget_name = user.name + audible_message("[src] buzzes oddly!") + declare_arrests = 0 + icon_state = "secbot[on]" + +/mob/living/simple_animal/bot/secbot/bullet_act(obj/item/projectile/Proj) + if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) + if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) + if(!Proj.nodamage && Proj.damage < src.health) + retaliate(Proj.firer) + ..() + + +/mob/living/simple_animal/bot/secbot/UnarmedAttack(atom/A) + if(!on) + return + if(iscarbon(A)) + var/mob/living/carbon/C = A + if(!C.stunned || arrest_type) + stun_attack(A) + else if(C.canBeHandcuffed() && !C.handcuffed) + cuff(A) + else + ..() + + +/mob/living/simple_animal/bot/secbot/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0) + if(istype(AM, /obj/item)) + var/obj/item/I = AM + if(I.throwforce < src.health && I.thrownby && ishuman(I.thrownby)) + var/mob/living/carbon/human/H = I.thrownby + retaliate(H) + ..() + + +/mob/living/simple_animal/bot/secbot/proc/cuff(mob/living/carbon/C) + mode = BOT_ARREST + playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2) + C.visible_message("[src] is trying to put zipties on [C]!",\ + "[src] is trying to put zipties on you!") + spawn(60) + if( !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing. + return + if(!C.handcuffed) + C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C) + C.update_handcuffed() + playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0) + back_to_idle() + +/mob/living/simple_animal/bot/secbot/proc/stun_attack(mob/living/carbon/C) + playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) + icon_state = "secbot-c" + spawn(2) + icon_state = "secbot[on]" + var/threat = 5 + if(ishuman(C)) + C.stuttering = 5 + C.Stun(5) + C.Weaken(5) + var/mob/living/carbon/human/H = C + threat = H.assess_threat(src) + else + C.Weaken(5) + C.stuttering = 5 + C.Stun(5) + threat = C.assess_threat() + add_logs(src,C,"stunned") + if(declare_arrests) + var/area/location = get_area(src) + speak("[arrest_type ? "Detaining" : "Arresting"] level [threat] scumbag [C] in [location].", radio_channel) + C.visible_message("[src] has stunned [C]!",\ + "[src] has stunned you!") + +/mob/living/simple_animal/bot/secbot/handle_automated_action() + if(!..()) + return + + switch(mode) + + if(BOT_IDLE) // idle + + walk_to(src,0) + look_for_perp() // see if any criminals are in range + if(!mode && auto_patrol) // still idle, and set to patrol + mode = BOT_START_PATROL // switch to patrol mode + + if(BOT_HUNT) // hunting for perp + + // if can't reach perp for long enough, go idle + if(frustration >= 8) + walk_to(src,0) + back_to_idle() + return + + if(target) // make sure target exists + if(Adjacent(target) && isturf(target.loc)) // if right next to perp + stun_attack(target) + + mode = BOT_PREP_ARREST + anchored = 1 + target_lastloc = target.loc + return + + else // not next to perp + var/turf/olddist = get_dist(src, target) + walk_to(src, target,1,4) + if((get_dist(src, target)) >= (olddist)) + frustration++ + else + frustration = 0 + else + back_to_idle() + + if(BOT_PREP_ARREST) // preparing to arrest target + + // see if he got away. If he's no no longer adjacent or inside a closet or about to get up, we hunt again. + if( !Adjacent(target) || !isturf(target.loc) || target.weakened < 2 ) + back_to_hunt() + return + + if(iscarbon(target) && target.canBeHandcuffed()) + if(!arrest_type) + if(!target.handcuffed) //he's not cuffed? Try to cuff him! + cuff(target) + else + back_to_idle() + return + else + back_to_idle() + return + + if(BOT_ARREST) + if(!target) + anchored = 0 + mode = BOT_IDLE + last_found = world.time + frustration = 0 + return + + if(target.handcuffed) //no target or target cuffed? back to idle. + back_to_idle() + return + + if(!Adjacent(target) || !isturf(target.loc) || (target.loc != target_lastloc && target.weakened < 2)) //if he's changed loc and about to get up or not adjacent or got into a closet, we prep arrest again. + back_to_hunt() + return + else //Try arresting again if the target escapes. + mode = BOT_PREP_ARREST + anchored = 0 + + if(BOT_START_PATROL) + look_for_perp() + start_patrol() + + if(BOT_PATROL) + look_for_perp() + bot_patrol() + + + return + +/mob/living/simple_animal/bot/secbot/proc/back_to_idle() + anchored = 0 + mode = BOT_IDLE + target = null + last_found = world.time + frustration = 0 + spawn(0) + handle_automated_action() //ensure bot quickly responds + +/mob/living/simple_animal/bot/secbot/proc/back_to_hunt() + anchored = 0 + frustration = 0 + mode = BOT_HUNT + spawn(0) + handle_automated_action() //ensure bot quickly responds +// look for a criminal in view of the bot + +/mob/living/simple_animal/bot/secbot/proc/look_for_perp() + anchored = 0 + for (var/mob/living/carbon/C in view(7,src)) //Let's find us a criminal + if((C.stat) || (C.handcuffed)) + continue + + if((C.name == oldtarget_name) && (world.time < last_found + 100)) + continue + + threatlevel = C.assess_threat(src) + + if(!threatlevel) + continue + + else if(threatlevel >= 4) + target = C + oldtarget_name = C.name + speak("Level [threatlevel] infraction alert!") + playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, 0) + visible_message("[src] points at [C.name]!") + mode = BOT_HUNT + spawn(0) + handle_automated_action() // ensure bot quickly responds to a perp + break + else + continue +/mob/living/simple_animal/bot/secbot/proc/check_for_weapons(var/obj/item/slot_item) + if(slot_item && slot_item.needs_permit) + return 1 + return 0 + +/mob/living/simple_animal/bot/secbot/explode() + + walk_to(src,0) + visible_message("[src] blows apart!") + var/turf/Tsec = get_turf(src) + + var/obj/item/weapon/secbot_assembly/Sa = new /obj/item/weapon/secbot_assembly(Tsec) + Sa.build_step = 1 + Sa.add_overlay("hs_hole") + Sa.created_name = name + new /obj/item/device/assembly/prox_sensor(Tsec) + new baton_type(Tsec) + + if(prob(50)) + new /obj/item/bodypart/l_arm/robot(Tsec) + + do_sparks(3, TRUE, src) + + new /obj/effect/decal/cleanable/oil(loc) + ..() + +/mob/living/simple_animal/bot/secbot/attack_alien(var/mob/living/carbon/alien/user as mob) + ..() + if(!isalien(target)) + target = user + mode = BOT_HUNT + +/mob/living/simple_animal/bot/secbot/Crossed(atom/movable/AM) + if(ismob(AM) && target) + var/mob/living/carbon/C = AM + if(!istype(C) || !C || in_range(src, target)) + return + knockOver(C) + return + ..() + +/obj/machinery/bot_core/secbot + req_access = list(GLOB.access_security) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index b879f1baf6..7c2fcb178b 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -1,279 +1,349 @@ -/mob/living/simple_animal/hostile/construct - name = "Construct" - real_name = "Construct" - desc = "" - gender = NEUTER - speak_emote = list("hisses") - response_help = "thinks better of touching" - response_disarm = "flails at" - response_harm = "punches" - speak_chance = 1 - icon = 'icons/mob/mob.dmi' - speed = 0 - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/weapons/punch1.ogg' +/mob/living/simple_animal/hostile/construct + name = "Construct" + real_name = "Construct" + desc = "" + gender = NEUTER + speak_emote = list("hisses") + response_help = "thinks better of touching" + response_disarm = "flails at" + response_harm = "punches" + speak_chance = 1 + icon = 'icons/mob/mob.dmi' + speed = 0 + a_intent = INTENT_HARM + stop_automated_movement = 1 + status_flags = CANPUSH + attack_sound = 'sound/weapons/punch1.ogg' see_in_dark = 7 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - healable = 0 - faction = list("cult") - movement_type = FLYING - pressure_resistance = 100 - unique_name = 1 - AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/weapon/ectoplasm) - del_on_death = 1 - deathmessage = "collapses in a shattered heap." - var/list/construct_spells = list() - var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." - -/mob/living/simple_animal/hostile/construct/Initialize() + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = INFINITY + healable = 0 + faction = list("cult") + movement_type = FLYING + pressure_resistance = 100 + unique_name = 1 + AIStatus = AI_OFF //normal constructs don't have AI + loot = list(/obj/item/weapon/ectoplasm) + del_on_death = TRUE + initial_language_holder = /datum/language_holder/construct + deathmessage = "collapses in a shattered heap." + var/list/construct_spells = list() + var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." + var/master = null + var/seeking = FALSE + var/can_repair_constructs = FALSE + var/can_repair_self = FALSE + +/mob/living/simple_animal/hostile/construct/Initialize() . = ..() - for(var/spell in construct_spells) - AddSpell(new spell(null)) - -/mob/living/simple_animal/hostile/construct/Login() - ..() - to_chat(src, playstyle_string) - -/mob/living/simple_animal/hostile/construct/examine(mob/user) - var/t_He = p_they(TRUE) - var/t_s = p_s() - var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" - msg += "[desc]\n" - if(health < maxHealth) - msg += "" - if(health >= maxHealth/2) - msg += "[t_He] look[t_s] slightly dented.\n" - else - msg += "[t_He] look[t_s] severely dented!\n" - msg += "" - msg += "*---------*" - - to_chat(user, msg) - -/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) - if(health < maxHealth) - adjustHealth(-5) - if(src != M) - Beam(M,icon_state="sendbeam",time=4) - M.visible_message("[M] repairs some of \the [src]'s dents.", \ - "You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.") - else - M.visible_message("[M] repairs some of [p_their()] own dents.", \ - "You repair some of your own dents, leaving you at [M.health]/[M.maxHealth] health.") - else - if(src != M) - to_chat(M, "You cannot repair [src]'s dents, as [p_they()] [p_have()] none!") - else - to_chat(M, "You cannot repair your own dents, as you have none!") - else if(src != M) - return ..() - -/mob/living/simple_animal/hostile/construct/Process_Spacemove(movement_dir = 0) - return 1 - -/mob/living/simple_animal/hostile/construct/narsie_act() - return - -/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE) - return 0 + update_health_hud() + for(var/spell in construct_spells) + AddSpell(new spell(null)) + +/mob/living/simple_animal/hostile/construct/Login() + ..() + to_chat(src, playstyle_string) + +/mob/living/simple_animal/hostile/construct/examine(mob/user) + var/t_He = p_they(TRUE) + var/t_s = p_s() + var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" + msg += "[desc]\n" + if(health < maxHealth) + msg += "" + if(health >= maxHealth/2) + msg += "[t_He] look[t_s] slightly dented.\n" + else + msg += "[t_He] look[t_s] severely dented!\n" + msg += "" + msg += "*---------*" + + to_chat(user, msg) + +/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M) + if(isconstruct(M)) //is it a construct? + var/mob/living/simple_animal/hostile/construct/C = M + if(!C.can_repair_constructs || (C == src && !C.can_repair_self)) + return + if(health < maxHealth) + adjustHealth(-5) + if(src != M) + Beam(M,icon_state="sendbeam",time=4) + M.visible_message("[M] repairs some of \the [src]'s dents.", \ + "You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.") + else + M.visible_message("[M] repairs some of [p_their()] own dents.", \ + "You repair some of your own dents, leaving you at [M.health]/[M.maxHealth] health.") + else + if(src != M) + to_chat(M, "You cannot repair [src]'s dents, as [p_they()] [p_have()] none!") + else + to_chat(M, "You cannot repair your own dents, as you have none!") + else if(src != M) + return ..() + +/mob/living/simple_animal/hostile/construct/Process_Spacemove(movement_dir = 0) + return 1 + +/mob/living/simple_animal/hostile/construct/narsie_act() + return + +/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE) + return 0 /mob/living/simple_animal/hostile/construct/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() if(updating_health) update_health_hud() - -/////////////////Juggernaut/////////////// -/mob/living/simple_animal/hostile/construct/armored - name = "Juggernaut" - real_name = "Juggernaut" - desc = "A massive, armored construct built to spearhead attacks and soak up enemy fire." - icon_state = "behemoth" - icon_living = "behemoth" - maxHealth = 250 - health = 250 - response_harm = "harmlessly punches" - harm_intent_damage = 0 - obj_damage = 90 - melee_damage_lower = 30 - melee_damage_upper = 30 - attacktext = "smashes their armored gauntlet into" - speed = 3 - environment_smash = 2 - attack_sound = 'sound/weapons/punch3.ogg' - status_flags = 0 - mob_size = MOB_SIZE_LARGE - force_threshold = 11 - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) - playstyle_string = "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \ - create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." - -/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP - -/mob/living/simple_animal/hostile/construct/armored/bullet_act(obj/item/projectile/P) - if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) - var/reflectchance = 80 - round(P.damage/3) - if(prob(reflectchance)) - apply_damage(P.damage * 0.5, P.damage_type) - visible_message("The [P.name] is reflected by [src]'s armored shell!", \ - "The [P.name] is reflected by your armored shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.current = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - - return -1 // complete projectile permutation - - return (..(P)) - - - -////////////////////////Wraith///////////////////////////////////////////// -/mob/living/simple_animal/hostile/construct/wraith - name = "Wraith" - real_name = "Wraith" - desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines." - icon_state = "floating" - icon_living = "floating" - maxHealth = 75 - health = 75 - melee_damage_lower = 25 - melee_damage_upper = 25 - retreat_distance = 2 //AI wraiths will move in and out of combat - attacktext = "slashes" - attack_sound = 'sound/weapons/bladeslice.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) - playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls." - -/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - - - -/////////////////////////////Artificer///////////////////////// -/mob/living/simple_animal/hostile/construct/builder - name = "Artificer" - real_name = "Artificer" - desc = "A bulbous construct dedicated to building and maintaining the Cult of Nar-Sie's armies." - icon_state = "artificer" - icon_living = "artificer" - maxHealth = 50 - health = 50 - response_harm = "viciously beats" - harm_intent_damage = 5 - obj_damage = 60 - melee_damage_lower = 5 - melee_damage_upper = 5 - retreat_distance = 10 - minimum_distance = 10 //AI artificers will flee like fuck - attacktext = "rams" - environment_smash = 2 - attack_sound = 'sound/weapons/punch2.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, - /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ - use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \ - and, most important of all, create new constructs by producing soulstones to capture souls, \ - and shells to place those soulstones into." - -/mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here? - if(isconstruct(A)) //is it a construct? - var/mob/living/simple_animal/hostile/construct/C = A - if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is - return 1 - else - return 0 - else - return 0 - -/mob/living/simple_animal/hostile/construct/builder/CanAttack(atom/the_target) - if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return 0 - if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible - return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs - -/mob/living/simple_animal/hostile/construct/builder/MoveToTarget(var/list/possible_targets) - ..() - if(isliving(target)) - var/mob/living/L = target - if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it - LoseTarget() - return 0 - if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you - retreat_distance = null - minimum_distance = 1 - -/mob/living/simple_animal/hostile/construct/builder/Aggro() - ..() - if(isconstruct(target)) //oh the target is a construct no need to flee - retreat_distance = null - minimum_distance = 1 - -/mob/living/simple_animal/hostile/construct/builder/LoseAggro() - ..() - retreat_distance = initial(retreat_distance) - minimum_distance = initial(minimum_distance) - -/mob/living/simple_animal/hostile/construct/builder/hostile //actually hostile, will move around, hit things, heal other constructs - AIStatus = AI_ON - environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP - -/////////////////////////////Non-cult Artificer///////////////////////// -/mob/living/simple_animal/hostile/construct/builder/noncult - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, - /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - - -/////////////////////////////Harvester///////////////////////// -/mob/living/simple_animal/hostile/construct/harvester - name = "Harvester" - real_name = "Harvester" - desc = "A long, thin construct built to herald Nar-Sie's rise. It'll be all over soon." - icon_state = "harvester" - icon_living = "harvester" - maxHealth = 60 - health = 60 - melee_damage_lower = 1 - melee_damage_upper = 5 - retreat_distance = 2 //AI harvesters will move in and out of combat, like wraiths, but shittier - attacktext = "prods" - environment_smash = 3 - attack_sound = 'sound/weapons/tap.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, - /obj/effect/proc_holder/spell/targeted/smoke/disable) - playstyle_string = "You are a Harvester. You are not strong, but your powers of domination will assist you in your role: \ - Bring those who still cling to this world of illusion back to the Geometer so they may know Truth." - -/mob/living/simple_animal/hostile/construct/harvester/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP +/////////////////Juggernaut/////////////// +/mob/living/simple_animal/hostile/construct/armored + name = "Juggernaut" + real_name = "Juggernaut" + desc = "A massive, armored construct built to spearhead attacks and soak up enemy fire." + icon_state = "behemoth" + icon_living = "behemoth" + maxHealth = 250 + health = 250 + response_harm = "harmlessly punches" + harm_intent_damage = 0 + obj_damage = 90 + melee_damage_lower = 30 + melee_damage_upper = 30 + attacktext = "smashes their armored gauntlet into" + speed = 3 + environment_smash = 2 + attack_sound = 'sound/weapons/punch3.ogg' + status_flags = 0 + mob_size = MOB_SIZE_LARGE + force_threshold = 11 + construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) + playstyle_string = "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \ + create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." + +/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things + AIStatus = AI_ON + environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP + +/mob/living/simple_animal/hostile/construct/armored/bullet_act(obj/item/projectile/P) + if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) + var/reflectchance = 80 - round(P.damage/3) + if(prob(reflectchance)) + apply_damage(P.damage * 0.5, P.damage_type) + visible_message("The [P.name] is reflected by [src]'s armored shell!", \ + "The [P.name] is reflected by your armored shell!") + + // Find a turf near or on the original location to bounce to + if(P.starting) + var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) + var/turf/curloc = get_turf(src) + + // redirect the projectile + P.original = locate(new_x, new_y, P.z) + P.starting = curloc + P.current = curloc + P.firer = src + P.yo = new_y - curloc.y + P.xo = new_x - curloc.x + + return -1 // complete projectile permutation + + return (..(P)) + + + +////////////////////////Wraith///////////////////////////////////////////// +/mob/living/simple_animal/hostile/construct/wraith + name = "Wraith" + real_name = "Wraith" + desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines." + icon_state = "floating" + icon_living = "floating" + maxHealth = 75 + health = 75 + melee_damage_lower = 25 + melee_damage_upper = 25 + retreat_distance = 2 //AI wraiths will move in and out of combat + attacktext = "slashes" + attack_sound = 'sound/weapons/bladeslice.ogg' + construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) + playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls." + +/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things + AIStatus = AI_ON + + + +/////////////////////////////Artificer///////////////////////// +/mob/living/simple_animal/hostile/construct/builder + name = "Artificer" + real_name = "Artificer" + desc = "A bulbous construct dedicated to building and maintaining the Cult of Nar-Sie's armies." + icon_state = "artificer" + icon_living = "artificer" + maxHealth = 50 + health = 50 + response_harm = "viciously beats" + harm_intent_damage = 5 + obj_damage = 60 + melee_damage_lower = 5 + melee_damage_upper = 5 + retreat_distance = 10 + minimum_distance = 10 //AI artificers will flee like fuck + attacktext = "rams" + environment_smash = 2 + attack_sound = 'sound/weapons/punch2.ogg' + construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, + /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, + /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone, + /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, + /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) + playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ + use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \ + and, most important of all, create new constructs by producing soulstones to capture souls, \ + and shells to place those soulstones into." + can_repair_constructs = TRUE + can_repair_self = TRUE + +/mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here? + if(isconstruct(A)) //is it a construct? + var/mob/living/simple_animal/hostile/construct/C = A + if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is + return 1 + else + return 0 + else + return 0 + +/mob/living/simple_animal/hostile/construct/builder/CanAttack(atom/the_target) + if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it + return 0 + if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible + return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs + +/mob/living/simple_animal/hostile/construct/builder/MoveToTarget(var/list/possible_targets) + ..() + if(isliving(target)) + var/mob/living/L = target + if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it + LoseTarget() + return 0 + if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you + retreat_distance = null + minimum_distance = 1 + +/mob/living/simple_animal/hostile/construct/builder/Aggro() + ..() + if(isconstruct(target)) //oh the target is a construct no need to flee + retreat_distance = null + minimum_distance = 1 + +/mob/living/simple_animal/hostile/construct/builder/LoseAggro() + ..() + retreat_distance = initial(retreat_distance) + minimum_distance = initial(minimum_distance) + +/mob/living/simple_animal/hostile/construct/builder/hostile //actually hostile, will move around, hit things, heal other constructs + AIStatus = AI_ON + environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP + +/////////////////////////////Non-cult Artificer///////////////////////// +/mob/living/simple_animal/hostile/construct/builder/noncult + construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, + /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, + /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, + /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, + /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) + + +/////////////////////////////Harvester///////////////////////// +/mob/living/simple_animal/hostile/construct/harvester + name = "Harvester" + real_name = "Harvester" + desc = "A long, thin construct built to herald Nar-Sie's rise. It'll be all over soon." + icon_state = "harvester" + icon_living = "harvester" + maxHealth = 60 + health = 60 + sight = SEE_MOBS + melee_damage_lower = 15 + melee_damage_upper = 20 + attacktext = "butchers" + attack_sound = 'sound/weapons/bladeslice.ogg' + construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion, + /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) + playstyle_string = "You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \ + Bring those who still cling to this world of illusion back to the Geometer so they may know Truth." + can_repair_constructs = TRUE + +/mob/living/simple_animal/hostile/construct/harvester/Bump(atom/AM) + . = ..() + if(istype(AM, /turf/closed/wall/mineral/cult) && AM != loc) //we can go through cult walls + var/atom/movable/stored_pulling = pulling + if(stored_pulling) + stored_pulling.setDir(get_dir(stored_pulling.loc, loc)) + stored_pulling.forceMove(loc) + forceMove(AM) + if(stored_pulling) + start_pulling(stored_pulling, TRUE) //drag anything we're pulling through the wall with us by magic + +/mob/living/simple_animal/hostile/construct/harvester/AttackingTarget() + if(iscarbon(target)) + var/mob/living/carbon/C = target + var/list/parts = list() + var/undismembermerable_limbs = 0 + for(var/X in C.bodyparts) + var/obj/item/bodypart/BP = X + if(BP.body_part != HEAD && BP.body_part != CHEST) + if(BP.dismemberable) + parts += BP + else + undismembermerable_limbs++ + if(!LAZYLEN(parts)) + if(undismembermerable_limbs) //they have limbs we can't remove, and no parts we can, attack! + return ..() + to_chat(src, "\"Bring [C.p_them()] to me.\"") + return FALSE + do_attack_animation(C) + var/obj/item/bodypart/BP = pick(parts) + BP.dismember() + return FALSE + . = ..() + + +///////////////////////Master-Tracker/////////////////////// + +/datum/action/innate/seek_master + name = "Seek your Master" + desc = "You and your master share a soul-link that informs you of their location" + background_icon_state = "bg_demon" + buttontooltipstyle = "cult" + button_icon_state = "cult_mark" + var/tracking = FALSE + var/mob/living/simple_animal/hostile/construct/the_construct + +/datum/action/innate/seek_master/Grant(var/mob/living/C) + the_construct = C + ..() + +/datum/action/innate/seek_master/Activate() + if(!the_construct.master) + to_chat(the_construct, "You have no master to seek!") + the_construct.seeking = FALSE + return + if(tracking) + tracking = FALSE + the_construct.seeking = FALSE + to_chat(the_construct, "You are no longer tracking your master.") + return + else + tracking = TRUE + the_construct.seeking = TRUE + to_chat(the_construct, "You are now tracking your master.") /////////////////////////////ui stuff///////////////////////////// @@ -291,4 +361,4 @@ else if(health > maxHealth*0.2) hud_used.healths.icon_state = "[icon_state]_health5" else - hud_used.healths.icon_state = "[icon_state]_health6" \ No newline at end of file + hud_used.healths.icon_state = "[icon_state]_health6" diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 89dedede13..159aec35af 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -216,7 +216,7 @@ if(change) if(change > 0) if(M && stat != DEAD) - flick_overlay(image('icons/mob/animal.dmi', src, "heart-ani2", ABOVE_MOB_LAYER), list(M.client), 20) + new /obj/effect/overlay/temp/heart(loc) emote("me", 1, "purrs!") else if(M && stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 8cad712bee..2cc4545faa 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -20,6 +20,7 @@ var/obj/item/inventory_head var/obj/item/inventory_mask gold_core_spawnable = 2 + devourable = TRUE /mob/living/simple_animal/crab/Life() ..() diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index c6aa754b6e..eb6feb00be 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -553,7 +553,7 @@ if(change) if(change > 0) if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454 - flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",ABOVE_MOB_LAYER), list(M.client), 20) + new /obj/effect/overlay/temp/heart(loc) emote("me", 1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index e5ba358a25..e98a57d0a6 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -37,8 +37,7 @@ voice_name = "synthesized chirp" speak_emote = list("chirps") bubble_icon = "machine" - initial_languages = list(/datum/language/common, /datum/language/machine, /datum/language/drone) - only_speaks_language = /datum/language/drone + initial_language_holder = /datum/language_holder/drone mob_size = MOB_SIZE_SMALL has_unlimited_silicon_privilege = 1 damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index 7cd6567ecb..1c70ca57e5 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -17,6 +17,7 @@ picked = TRUE //the appearence of syndrones is static, you don't get to change it. health = 30 maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger + initial_language_holder = /datum/language_holder/drone/syndicate faction = list("syndicate") speak_emote = list("hisses") bubble_icon = "syndibot" @@ -110,8 +111,7 @@ verb_exclaim = "proclaims" verb_yell = "harangues" bubble_icon = "clock" - initial_languages = list(/datum/language/common, /datum/language/ratvar) - only_speaks_language = /datum/language/ratvar + initial_language_holder = /datum/language_holder/clockmob light_color = "#E42742" heavy_emp_damage = 0 laws = "0. Purge all untruths and honor Ratvar." diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 50711f25ea..2594700770 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -1,321 +1,322 @@ -//goat -/mob/living/simple_animal/hostile/retaliate/goat - name = "goat" - desc = "Not known for their pleasant disposition." - icon_state = "goat" - icon_living = "goat" - icon_dead = "goat_dead" - speak = list("EHEHEHEHEH","eh?") - speak_emote = list("brays") - emote_hear = list("brays.") - emote_see = list("shakes its head.", "stamps a foot.", "glares around.") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 4) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - faction = list("neutral") - attack_same = 1 - attacktext = "kicks" - attack_sound = 'sound/weapons/punch1.ogg' - health = 40 - maxHealth = 40 - melee_damage_lower = 1 - melee_damage_upper = 2 - environment_smash = 0 - stop_automated_movement_when_pulled = 1 - blood_volume = BLOOD_VOLUME_NORMAL - var/obj/item/udder/udder = null - devourable = TRUE - -/mob/living/simple_animal/hostile/retaliate/goat/Initialize() - udder = new() - ..() -/mob/living/simple_animal/hostile/retaliate/goat/Destroy() - qdel(udder) - udder = null - return ..() - -/mob/living/simple_animal/hostile/retaliate/goat/Life() - . = ..() - if(.) - //chance to go crazy and start wacking stuff - if(!enemies.len && prob(1)) - Retaliate() - - if(enemies.len && prob(10)) - enemies = list() - LoseTarget() - src.visible_message("[src] calms down.") - if(stat == CONSCIOUS) - udder.generateMilk() - var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc - if(SV) - SV.eat(src) - if(!pulledby) - for(var/direction in shuffle(list(1,2,4,8,5,6,9,10))) - var/step = get_step(src, direction) - if(step) - if(locate(/obj/structure/spacevine) in step) - Move(step, get_dir(src, step)) - -/mob/living/simple_animal/hostile/retaliate/goat/Retaliate() - ..() - src.visible_message("[src] gets an evil-looking gleam in [p_their()] eye.") - -/mob/living/simple_animal/hostile/retaliate/goat/Move() - ..() - if(!stat) - var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc - if(SV) - SV.eat(src) - -/mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params) - if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) - udder.milkAnimal(O, user) - return 1 - else - return ..() - -//cow -/mob/living/simple_animal/cow - name = "cow" - desc = "Known for their milk, just don't tip them over." - icon_state = "cow" - icon_living = "cow" - icon_dead = "cow_dead" - icon_gib = "cow_gib" - gender = FEMALE - speak = list("moo?","moo","MOOOOOO") - speak_emote = list("moos","moos hauntingly") - emote_hear = list("brays.") - emote_see = list("shakes its head.") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 6) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - attacktext = "kicks" - attack_sound = 'sound/weapons/punch1.ogg' - health = 50 - maxHealth = 50 - var/obj/item/udder/udder = null - gold_core_spawnable = 2 - blood_volume = BLOOD_VOLUME_NORMAL - devourable = TRUE - -/mob/living/simple_animal/cow/Initialize() - udder = new() - ..() - -/mob/living/simple_animal/cow/Destroy() - qdel(udder) - udder = null - return ..() - -/mob/living/simple_animal/cow/attackby(obj/item/O, mob/user, params) - if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) - udder.milkAnimal(O, user) - return 1 - else - return ..() - -/mob/living/simple_animal/cow/Life() - . = ..() - if(stat == CONSCIOUS) - udder.generateMilk() - -/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M) - if(!stat && M.a_intent == INTENT_DISARM && icon_state != icon_dead) - M.visible_message("[M] tips over [src].", - "You tip over [src].") - to_chat(src, "You are tipped over by [M]!") - Weaken(30) - icon_state = icon_dead - spawn(rand(20,50)) - if(!stat && M) - icon_state = icon_living - var/external - var/internal - switch(pick(1,2,3,4)) - if(1,2,3) - var/text = pick("imploringly.", "pleadingly.", - "with a resigned expression.") - external = "[src] looks at [M] [text]" - internal = "You look at [M] [text]" - if(4) - external = "[src] seems resigned to its fate." - internal = "You resign yourself to your fate." - visible_message("[external]", - "[internal]") - else - ..() - -/mob/living/simple_animal/chick - name = "\improper chick" - desc = "Adorable! They make such a racket though." - icon_state = "chick" - icon_living = "chick" - icon_dead = "chick_dead" - icon_gib = "chick_gib" - gender = FEMALE - speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") - speak_emote = list("cheeps") - emote_hear = list("cheeps.") - emote_see = list("pecks at the ground.","flaps its tiny wings.") - density = 0 - speak_chance = 2 - turns_per_move = 2 - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - attacktext = "kicks" - health = 3 - maxHealth = 3 - ventcrawler = VENTCRAWLER_ALWAYS - var/amount_grown = 0 - pass_flags = PASSTABLE | PASSGRILLE | PASSMOB - mob_size = MOB_SIZE_TINY - gold_core_spawnable = 2 - devourable = TRUE - -/mob/living/simple_animal/chick/Initialize() - ..() - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - -/mob/living/simple_animal/chick/Life() - . =..() - if(!.) - return - if(!stat && !ckey) - amount_grown += rand(1,2) - if(amount_grown >= 100) - new /mob/living/simple_animal/chicken(src.loc) - qdel(src) - -/mob/living/simple_animal/chick/holo/Life() - ..() - amount_grown = 0 - -/mob/living/simple_animal/chicken - name = "\improper chicken" - desc = "Hopefully the eggs are good this season." - gender = FEMALE - icon_state = "chicken_brown" - icon_living = "chicken_brown" - icon_dead = "chicken_brown_dead" - speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") - speak_emote = list("clucks","croons") - emote_hear = list("clucks.") - emote_see = list("pecks at the ground.","flaps its wings viciously.") - density = 0 - speak_chance = 2 - turns_per_move = 3 - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2) - var/egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg - var/food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - attacktext = "kicks" - health = 15 - maxHealth = 15 - ventcrawler = VENTCRAWLER_ALWAYS - var/eggsleft = 0 - var/eggsFertile = TRUE - var/body_color - var/icon_prefix = "chicken" - pass_flags = PASSTABLE | PASSMOB - mob_size = MOB_SIZE_SMALL - var/list/feedMessages = list("It clucks happily.","It clucks happily.") - var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") - var/list/validColors = list("brown","black","white") - gold_core_spawnable = 2 - var/static/chicken_count = 0 - devourable = TRUE - -/mob/living/simple_animal/chicken/Initialize() - ..() - if(!body_color) - body_color = pick(validColors) - icon_state = "[icon_prefix]_[body_color]" - icon_living = "[icon_prefix]_[body_color]" - icon_dead = "[icon_prefix]_[body_color]_dead" - pixel_x = rand(-6, 6) - pixel_y = rand(0, 10) - ++chicken_count - -/mob/living/simple_animal/chicken/Destroy() - --chicken_count - return ..() - -/mob/living/simple_animal/chicken/attackby(obj/item/O, mob/user, params) - if(istype(O, food_type)) //feedin' dem chickens - if(!stat && eggsleft < 8) - var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]" - user.visible_message(feedmsg) - user.drop_item() - qdel(O) - eggsleft += rand(1, 4) - //to_chat(world, eggsleft) - else - to_chat(user, "[name] doesn't seem hungry!") - else - ..() - -/mob/living/simple_animal/chicken/Life() - . =..() - if(!.) - return - if((!stat && prob(3) && eggsleft > 0) && egg_type) - visible_message("[src] [pick(layMessage)]") - eggsleft-- - var/obj/item/E = new egg_type(get_turf(src)) - E.pixel_x = rand(-6,6) - E.pixel_y = rand(-6,6) - if(eggsFertile) - if(chicken_count < MAX_CHICKENS && prob(25)) - START_PROCESSING(SSobj, E) - -/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0 -/obj/item/weapon/reagent_containers/food/snacks/egg/process() - if(isturf(loc)) - amount_grown += rand(1,2) - if(amount_grown >= 100) - visible_message("[src] hatches with a quiet cracking sound.") - new /mob/living/simple_animal/chick(get_turf(src)) - STOP_PROCESSING(SSobj, src) - qdel(src) - else - STOP_PROCESSING(SSobj, src) - - -/obj/item/udder - name = "udder" - -/obj/item/udder/Initialize() - reagents = new(50) - reagents.my_atom = src - reagents.add_reagent("milk", 20) - ..() - -/obj/item/udder/proc/generateMilk() - if(prob(5)) - reagents.add_reagent("milk", rand(5, 10)) - -/obj/item/udder/proc/milkAnimal(obj/O, mob/user) - var/obj/item/weapon/reagent_containers/glass/G = O - if(G.reagents.total_volume >= G.volume) - to_chat(user, "[O] is full.") - return - var/transfered = reagents.trans_to(O, rand(5,10)) - if(transfered) - user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].") - else - to_chat(user, "The udder is dry. Wait a bit longer...") +//goat +/mob/living/simple_animal/hostile/retaliate/goat + name = "goat" + desc = "Not known for their pleasant disposition." + icon_state = "goat" + icon_living = "goat" + icon_dead = "goat_dead" + speak = list("EHEHEHEHEH","eh?") + speak_emote = list("brays") + emote_hear = list("brays.") + emote_see = list("shakes its head.", "stamps a foot.", "glares around.") + speak_chance = 1 + turns_per_move = 5 + see_in_dark = 6 + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 4) + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + faction = list("neutral") + attack_same = 1 + attacktext = "kicks" + attack_sound = 'sound/weapons/punch1.ogg' + health = 40 + maxHealth = 40 + melee_damage_lower = 1 + melee_damage_upper = 2 + environment_smash = 0 + stop_automated_movement_when_pulled = 1 + blood_volume = BLOOD_VOLUME_NORMAL + var/obj/item/udder/udder = null + devourable = TRUE + +/mob/living/simple_animal/hostile/retaliate/goat/Initialize() + udder = new() + . = ..() + +/mob/living/simple_animal/hostile/retaliate/goat/Destroy() + qdel(udder) + udder = null + return ..() + +/mob/living/simple_animal/hostile/retaliate/goat/Life() + . = ..() + if(.) + //chance to go crazy and start wacking stuff + if(!enemies.len && prob(1)) + Retaliate() + + if(enemies.len && prob(10)) + enemies = list() + LoseTarget() + src.visible_message("[src] calms down.") + if(stat == CONSCIOUS) + udder.generateMilk() + var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc + if(SV) + SV.eat(src) + if(!pulledby) + for(var/direction in shuffle(list(1,2,4,8,5,6,9,10))) + var/step = get_step(src, direction) + if(step) + if(locate(/obj/structure/spacevine) in step) + Move(step, get_dir(src, step)) + +/mob/living/simple_animal/hostile/retaliate/goat/Retaliate() + ..() + src.visible_message("[src] gets an evil-looking gleam in [p_their()] eye.") + +/mob/living/simple_animal/hostile/retaliate/goat/Move() + ..() + if(!stat) + var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc + if(SV) + SV.eat(src) + +/mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params) + if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) + udder.milkAnimal(O, user) + return 1 + else + return ..() + +//cow +/mob/living/simple_animal/cow + name = "cow" + desc = "Known for their milk, just don't tip them over." + icon_state = "cow" + icon_living = "cow" + icon_dead = "cow_dead" + icon_gib = "cow_gib" + gender = FEMALE + speak = list("moo?","moo","MOOOOOO") + speak_emote = list("moos","moos hauntingly") + emote_hear = list("brays.") + emote_see = list("shakes its head.") + speak_chance = 1 + turns_per_move = 5 + see_in_dark = 6 + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 6) + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + attacktext = "kicks" + attack_sound = 'sound/weapons/punch1.ogg' + health = 50 + maxHealth = 50 + var/obj/item/udder/udder = null + gold_core_spawnable = 2 + blood_volume = BLOOD_VOLUME_NORMAL + devourable = TRUE + +/mob/living/simple_animal/cow/Initialize() + udder = new() + . = ..() + +/mob/living/simple_animal/cow/Destroy() + qdel(udder) + udder = null + return ..() + +/mob/living/simple_animal/cow/attackby(obj/item/O, mob/user, params) + if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass)) + udder.milkAnimal(O, user) + return 1 + else + return ..() + +/mob/living/simple_animal/cow/Life() + . = ..() + if(stat == CONSCIOUS) + udder.generateMilk() + +/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M) + if(!stat && M.a_intent == INTENT_DISARM && icon_state != icon_dead) + M.visible_message("[M] tips over [src].", + "You tip over [src].") + to_chat(src, "You are tipped over by [M]!") + Weaken(30) + icon_state = icon_dead + spawn(rand(20,50)) + if(!stat && M) + icon_state = icon_living + var/external + var/internal + switch(pick(1,2,3,4)) + if(1,2,3) + var/text = pick("imploringly.", "pleadingly.", + "with a resigned expression.") + external = "[src] looks at [M] [text]" + internal = "You look at [M] [text]" + if(4) + external = "[src] seems resigned to its fate." + internal = "You resign yourself to your fate." + visible_message("[external]", + "[internal]") + else + ..() + +/mob/living/simple_animal/chick + name = "\improper chick" + desc = "Adorable! They make such a racket though." + icon_state = "chick" + icon_living = "chick" + icon_dead = "chick_dead" + icon_gib = "chick_gib" + gender = FEMALE + speak = list("Cherp.","Cherp?","Chirrup.","Cheep!") + speak_emote = list("cheeps") + emote_hear = list("cheeps.") + emote_see = list("pecks at the ground.","flaps its tiny wings.") + density = 0 + speak_chance = 2 + turns_per_move = 2 + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1) + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + attacktext = "kicks" + health = 3 + maxHealth = 3 + ventcrawler = VENTCRAWLER_ALWAYS + var/amount_grown = 0 + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_size = MOB_SIZE_TINY + gold_core_spawnable = 2 + devourable = TRUE + +/mob/living/simple_animal/chick/Initialize() + . = ..() + pixel_x = rand(-6, 6) + pixel_y = rand(0, 10) + +/mob/living/simple_animal/chick/Life() + . =..() + if(!.) + return + if(!stat && !ckey) + amount_grown += rand(1,2) + if(amount_grown >= 100) + new /mob/living/simple_animal/chicken(src.loc) + qdel(src) + +/mob/living/simple_animal/chick/holo/Life() + ..() + amount_grown = 0 + +/mob/living/simple_animal/chicken + name = "\improper chicken" + desc = "Hopefully the eggs are good this season." + gender = FEMALE + icon_state = "chicken_brown" + icon_living = "chicken_brown" + icon_dead = "chicken_brown_dead" + speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.") + speak_emote = list("clucks","croons") + emote_hear = list("clucks.") + emote_see = list("pecks at the ground.","flaps its wings viciously.") + density = 0 + speak_chance = 2 + turns_per_move = 3 + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2) + var/egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg + var/food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + attacktext = "kicks" + health = 15 + maxHealth = 15 + ventcrawler = VENTCRAWLER_ALWAYS + var/eggsleft = 0 + var/eggsFertile = TRUE + var/body_color + var/icon_prefix = "chicken" + pass_flags = PASSTABLE | PASSMOB + mob_size = MOB_SIZE_SMALL + var/list/feedMessages = list("It clucks happily.","It clucks happily.") + var/list/layMessage = list("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.") + var/list/validColors = list("brown","black","white") + gold_core_spawnable = 2 + var/static/chicken_count = 0 + devourable = TRUE + +/mob/living/simple_animal/chicken/Initialize() + . = ..() + if(!body_color) + body_color = pick(validColors) + icon_state = "[icon_prefix]_[body_color]" + icon_living = "[icon_prefix]_[body_color]" + icon_dead = "[icon_prefix]_[body_color]_dead" + pixel_x = rand(-6, 6) + pixel_y = rand(0, 10) + ++chicken_count + +/mob/living/simple_animal/chicken/Destroy() + --chicken_count + return ..() + +/mob/living/simple_animal/chicken/attackby(obj/item/O, mob/user, params) + if(istype(O, food_type)) //feedin' dem chickens + if(!stat && eggsleft < 8) + var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]" + user.visible_message(feedmsg) + user.drop_item() + qdel(O) + eggsleft += rand(1, 4) + //to_chat(world, eggsleft) + else + to_chat(user, "[name] doesn't seem hungry!") + else + ..() + +/mob/living/simple_animal/chicken/Life() + . =..() + if(!.) + return + if((!stat && prob(3) && eggsleft > 0) && egg_type) + visible_message("[src] [pick(layMessage)]") + eggsleft-- + var/obj/item/E = new egg_type(get_turf(src)) + E.pixel_x = rand(-6,6) + E.pixel_y = rand(-6,6) + if(eggsFertile) + if(chicken_count < MAX_CHICKENS && prob(25)) + START_PROCESSING(SSobj, E) + +/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0 +/obj/item/weapon/reagent_containers/food/snacks/egg/process() + if(isturf(loc)) + amount_grown += rand(1,2) + if(amount_grown >= 100) + visible_message("[src] hatches with a quiet cracking sound.") + new /mob/living/simple_animal/chick(get_turf(src)) + STOP_PROCESSING(SSobj, src) + qdel(src) + else + STOP_PROCESSING(SSobj, src) + + +/obj/item/udder + name = "udder" + +/obj/item/udder/Initialize() + reagents = new(50) + reagents.my_atom = src + reagents.add_reagent("milk", 20) + . = ..() + +/obj/item/udder/proc/generateMilk() + if(prob(5)) + reagents.add_reagent("milk", rand(5, 10)) + +/obj/item/udder/proc/milkAnimal(obj/O, mob/user) + var/obj/item/weapon/reagent_containers/glass/G = O + if(G.reagents.total_volume >= G.volume) + to_chat(user, "[O] is full.") + return + var/transfered = reagents.trans_to(O, rand(5,10)) + if(transfered) + user.visible_message("[user] milks [src] using \the [O].", "You milk [src] using \the [O].") + else + to_chat(user, "The udder is dry. Wait a bit longer...") diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index be889a4183..fe6e22bcab 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -414,7 +414,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in guardians if(G) to_chat(src, "You attempt to reset [G.real_name]'s personality...") - var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", "pAI", null, FALSE, 100) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", "pAI", null, FALSE, 100) var/mob/dead/observer/new_stand = null if(candidates.len) new_stand = pick(candidates) @@ -489,7 +489,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians return used = TRUE to_chat(user, "[use_message]") - var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100) + var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100) var/mob/dead/observer/theghost = null if(candidates.len) diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index e7ab6e1b56..51e782b019 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -133,6 +133,7 @@ loc = BB target = null wanted_objects -= typecacheof(/obj/structure/beebox) //so we don't attack beeboxes when not going home + return //no don't attack the goddamm box else . = ..() if(. && beegent && isliving(target)) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 45f46b3828..fc2160399e 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -16,6 +16,7 @@ speed = 0 maxHealth = 25 health = 25 + devourable = TRUE harm_intent_damage = 8 obj_damage = 50 diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index e0eb8aad29..43290b860d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -1,59 +1,57 @@ -/obj/item/projectile/hivebotbullet - damage = 10 - damage_type = BRUTE - -/mob/living/simple_animal/hostile/hivebot - name = "hivebot" - desc = "A small robot." - icon = 'icons/mob/hivebot.dmi' - icon_state = "basic" - icon_living = "basic" - icon_dead = "basic" - gender = NEUTER - health = 15 - maxHealth = 15 - healable = 0 - melee_damage_lower = 2 - melee_damage_upper = 3 - attacktext = "claws" - attack_sound = 'sound/weapons/bladeslice.ogg' - projectilesound = 'sound/weapons/Gunshot.ogg' - projectiletype = /obj/item/projectile/hivebotbullet - faction = list("hivebot") - check_friendly_fire = 1 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - speak_emote = list("states") - gold_core_spawnable = 1 - del_on_death = 1 - loot = list(/obj/effect/decal/cleanable/robot_debris) - -/mob/living/simple_animal/hostile/hivebot/Initialize() - ..() - deathmessage = "[src] blows apart!" - -/mob/living/simple_animal/hostile/hivebot/range - name = "hivebot" - desc = "A smallish robot, this one is armed!" - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - -/mob/living/simple_animal/hostile/hivebot/rapid - ranged = 1 - rapid = 1 - retreat_distance = 5 - minimum_distance = 5 - -/mob/living/simple_animal/hostile/hivebot/strong - name = "strong hivebot" - desc = "A robot, this one is armed and looks tough!" - health = 80 - maxHealth = 80 - ranged = 1 - -/mob/living/simple_animal/hostile/hivebot/death(gibbed) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() +/obj/item/projectile/hivebotbullet + damage = 10 + damage_type = BRUTE + +/mob/living/simple_animal/hostile/hivebot + name = "hivebot" + desc = "A small robot." + icon = 'icons/mob/hivebot.dmi' + icon_state = "basic" + icon_living = "basic" + icon_dead = "basic" + gender = NEUTER + health = 15 + maxHealth = 15 + healable = 0 + melee_damage_lower = 2 + melee_damage_upper = 3 + attacktext = "claws" + attack_sound = 'sound/weapons/bladeslice.ogg' + projectilesound = 'sound/weapons/Gunshot.ogg' + projectiletype = /obj/item/projectile/hivebotbullet + faction = list("hivebot") + check_friendly_fire = 1 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + speak_emote = list("states") + gold_core_spawnable = 1 + del_on_death = 1 + loot = list(/obj/effect/decal/cleanable/robot_debris) + +/mob/living/simple_animal/hostile/hivebot/Initialize() + ..() + deathmessage = "[src] blows apart!" + +/mob/living/simple_animal/hostile/hivebot/range + name = "hivebot" + desc = "A smallish robot, this one is armed!" + ranged = 1 + retreat_distance = 5 + minimum_distance = 5 + +/mob/living/simple_animal/hostile/hivebot/rapid + ranged = 1 + rapid = 1 + retreat_distance = 5 + minimum_distance = 5 + +/mob/living/simple_animal/hostile/hivebot/strong + name = "strong hivebot" + desc = "A robot, this one is armed and looks tough!" + health = 80 + maxHealth = 80 + ranged = 1 + +/mob/living/simple_animal/hostile/hivebot/death(gibbed) + do_sparks(3, TRUE, src) ..(1) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 9bf7a4fa51..994dcb96d3 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -55,7 +55,7 @@ /mob/living/simple_animal/hostile/Initialize() - ..() + . = ..() if(!targets_from) targets_from = src diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm b/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm new file mode 100644 index 0000000000..de1bf0b308 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/jungle_mobs.dm @@ -0,0 +1,85 @@ +/mob/living/simple_animal/hostile/jungle + vision_range = 5 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + faction = list("jungle") + weather_immunities = list("acid") + obj_damage = 30 + environment_smash = 2 + minbodytemp = 0 + maxbodytemp = 450 + response_help = "pokes" + response_disarm = "shoves" + response_harm = "strikes" + status_flags = 0 + a_intent = INTENT_HARM + see_in_dark = 4 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + mob_size = MOB_SIZE_LARGE + + + +//Mega arachnid + +/mob/living/simple_animal/hostile/jungle/mega_arachnid + name = "mega arachnid" + desc = "Though physically imposing, it prefers to ambush its prey, and it will only engage with an already crippled opponent." + melee_damage_lower = 30 + melee_damage_upper = 30 + maxHealth = 300 + health = 300 + speed = 1 + ranged = 1 + pixel_x = -16 + move_to_delay = 10 + aggro_vision_range = 9 + speak_emote = list("chitters") + attack_sound = 'sound/weapons/bladeslice.ogg' + ranged_cooldown_time = 60 + projectiletype = /obj/item/projectile/mega_arachnid + projectilesound = 'sound/weapons/pierce.ogg' + icon = 'icons/mob/jungle/arachnid.dmi' + icon_state = "arachnid" + icon_living = "arachnid" + icon_dead = "dead_purple" + alpha = 50 + +/mob/living/simple_animal/hostile/jungle/mega_arachnid/Life() + ..() + if(target && ranged_cooldown > world.time && iscarbon(target)) + var/mob/living/carbon/C = target + if(!C.legcuffed && C.health < 50) + retreat_distance = 9 + minimum_distance = 9 + alpha = 125 + return + retreat_distance = 0 + minimum_distance = 0 + alpha = 255 + + +/mob/living/simple_animal/hostile/jungle/mega_arachnid/Aggro() + ..() + alpha = 255 + +/mob/living/simple_animal/hostile/jungle/mega_arachnid/LoseAggro() + ..() + alpha = 50 + +/obj/item/projectile/mega_arachnid + name = "flesh snare" + nodamage = 1 + damage = 0 + icon_state = "tentacle_end" + +/obj/item/projectile/mega_arachnid/on_hit(atom/target, blocked = 0) + if(iscarbon(target) && blocked < 100) + var/obj/item/weapon/restraints/legcuffs/beartrap/mega_arachnid/B = new /obj/item/weapon/restraints/legcuffs/beartrap/mega_arachnid(get_turf(target)) + B.Crossed(target) + ..() + +/obj/item/weapon/restraints/legcuffs/beartrap/mega_arachnid + name = "fleshy restraints" + desc = "Used by mega arachnids to immobilize their prey." + flags = DROPDEL + icon_state = "tentacle_end" + icon = 'icons/obj/projectiles.dmi' \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index d822a05886..a390ecae71 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -647,8 +647,7 @@ Difficulty: Very Hard verb_ask = "floats inquisitively" verb_exclaim = "zaps" verb_yell = "bangs" - initial_languages = list(/datum/language/common, /datum/language/slime) - only_speaks_language = /datum/language/slime + initial_language_holder = /datum/language_holder/lightbringer damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) light_range = 4 faction = list("neutral") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm index f3b5866ec6..b9731f7418 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm @@ -40,6 +40,7 @@ /mob/living/simple_animal/hostile/retaliate/ghost/Initialize() . = ..() + set_light(1, 2) if(!random) give_hair() else @@ -60,4 +61,4 @@ ghost_facial_hair = mutable_appearance('icons/mob/human_face.dmi', "facial_[ghost_facial_hair_style]", -HAIR_LAYER) ghost_facial_hair.alpha = 200 ghost_facial_hair.color = ghost_facial_hair_color - add_overlay(ghost_facial_hair) \ No newline at end of file + add_overlay(ghost_facial_hair) diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 8c08263aa7..268a61380b 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -28,7 +28,8 @@ status_flags = CANPUSH movement_type = FLYING loot = list(/obj/item/weapon/ectoplasm) - del_on_death = 1 + del_on_death = TRUE + initial_language_holder = /datum/language_holder/construct /mob/living/simple_animal/shade/death() deathmessage = "lets out a contented sigh as [p_their()] form unwinds." @@ -43,7 +44,10 @@ return TRUE //this doesn't make much sense; you'd thing TRUE would mean it'd process spacemove but it means it doesn't /mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) + if(isconstruct(M)) + var/mob/living/simple_animal/hostile/construct/C = M + if(!C.can_repair_constructs) + return if(health < maxHealth) adjustHealth(-25) Beam(M,icon_state="sendbeam",time=4) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 8db43623dc..831058a284 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -7,9 +7,6 @@ status_flags = CANPUSH - // goats bray, cows go moo, and the fox says Geckers - initial_languages = list(/datum/language/common) - var/icon_living = "" var/icon_dead = "" //icon when the animal is dead. Don't use animated icons for this. var/icon_gib = null //We only try to show a gibbing animation if this exists. @@ -89,7 +86,7 @@ var/tame = 0 /mob/living/simple_animal/Initialize() - ..() + . = ..() GLOB.simple_animals += src handcrafting = new() if(gender == PLURAL) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 8971d33b28..6eb688d38f 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -16,9 +16,9 @@ response_disarm = "shoos" response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") - speak_emote = list("telepathically chirps") + speak_emote = list("blorbles") bubble_icon = "slime" - initial_languages = list(/datum/language/common, /datum/language/slime) + initial_language_holder = /datum/language_holder/slime atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) @@ -31,10 +31,10 @@ see_in_dark = 8 - verb_say = "telepathically chirps" - verb_ask = "telepathically asks" - verb_exclaim = "telepathically cries" - verb_yell = "telephatically cries" + verb_say = "blorbles" + verb_ask = "inquisitively blorbles" + verb_exclaim = "loudly blorbles" + verb_yell = "loudly blorbles" // canstun and canweaken don't affect slimes because they ignore stun and weakened variables // for the sake of cleanliness, though, here they are. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 24b4d228cc..c6680a28f0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -36,7 +36,7 @@ continue var/datum/atom_hud/alternate_appearance/AA = v AA.onNewMob(src) - ..() + . = ..() /atom/proc/prepare_huds() hud_list = list() @@ -331,12 +331,14 @@ changeNext_move(CLICK_CD_GRABBING) if(AM.pulledby) - visible_message("[src] has pulled [AM] from [AM.pulledby]'s grip.") + if(!supress_message) + visible_message("[src] has pulled [AM] from [AM.pulledby]'s grip.") AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once. pulling = AM AM.pulledby = src - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + if(!supress_message) + playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) update_pull_hud_icon() if(ismob(AM)) @@ -351,6 +353,8 @@ /mob/proc/spin(spintime, speed) set waitfor = 0 var/D = dir + if((spintime < 1)||(speed < 1)||!spintime||!speed) + return while(spintime >= speed) sleep(speed) switch(D) @@ -576,6 +580,7 @@ var/datum/map_config/cached = SSmapping.next_map_config if(cached) stat(null, "Next Map: [cached.map_name]") + stat(null, "Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]") stat(null, "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]") stat(null, "Station Time: [worldtime2text()]") stat(null, "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)") @@ -751,7 +756,6 @@ client.move_delay += movement_delay() return 1 - /mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check return 0 @@ -1014,3 +1018,10 @@ if("logging") return debug_variable(var_name, logging, 0, src, FALSE) . = ..() + +/mob/verb/open_language_menu() + set name = "Open Language Menu" + set category = "IC" + + var/datum/language_holder/H = get_language_holder() + H.open_language_menu(usr) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index c574b759cb..5aadc31bb4 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -34,7 +34,7 @@ var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) assets.send(user) - ui = new(user, src, ui_key, "computer_main", "NTOS Main menu", 400, 500, master_ui, state) + ui = new(user, src, ui_key, "ntos_main", "NTOS Main menu", 400, 500, master_ui, state) ui.open() ui.set_autoupdate(state = 1) diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 3935112e7b..4e5e0c24bb 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -16,6 +16,10 @@ var/network_destination = null // Optional string that describes what NTNet server/system this program connects to. Used in default logging. var/available_on_ntnet = 1 // Whether the program can be downloaded from NTNet. Set to 0 to disable. var/available_on_syndinet = 0 // Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to 1 to enable. + var/tgui_id // ID of TG UI interface + var/ui_style // ID of custom TG UI style (optional) + var/ui_x = 575 // Default size of TG UI window, in pixels + var/ui_y = 700 var/ui_header = null // Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /icons/program_icons. Be careful not to use too large images! /datum/computer_file/program/New(obj/item/device/modular_computer/comp = null) @@ -142,13 +146,19 @@ generate_network_log("Connection to [network_destination] closed.") return 1 -// This is called every tick when the program is enabled. Ensure you do parent call if you override it. If parent returns 1 continue with UI initialisation. /datum/computer_file/program/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists. - return computer.ui_interact(user) - return 1 + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui && tgui_id) + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) + assets.send(user) + ui = new(user, src, ui_key, tgui_id, filedesc, ui_x, ui_y, state = state) + + if(ui_style) + ui.set_style(ui_style) + ui.set_autoupdate(state = 1) + ui.open() // CONVENTIONS, READ THIS WHEN CREATING NEW PROGRAM AND OVERRIDING THIS PROC: // Topic calls are automagically forwarded from NanoModule this program contains. diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 96a4b4ec2b..04063aeeca 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -1,8 +1,6 @@ - - /datum/computer_file/program/aidiag filename = "aidiag" - filedesc = "AI Maintenance Utility" + filedesc = "AI Integrity Restorer" program_icon_state = "generic" extended_desc = "This program is capable of reconstructing damaged AI systems. Requires direct AI connection via intellicard slot." size = 12 @@ -10,6 +8,10 @@ usage_flags = PROGRAM_CONSOLE transfer_access = GLOB.access_heads available_on_ntnet = 1 + tgui_id = "ntos_ai_restorer" + ui_x = 600 + ui_y = 400 + var/restoring = FALSE /datum/computer_file/program/aidiag/proc/get_ai(cardcheck) @@ -114,12 +116,6 @@ return data -/datum/computer_file/program/aidiag/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "ai_restorer", "Integrity Restorer", 600, 400, master_ui, state) - ui.open() - /datum/computer_file/program/aidiag/kill_program(forced) restoring = FALSE return ..(forced) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 9bfb9a5e7b..fc050545a5 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -1,15 +1,16 @@ - - - /datum/computer_file/program/alarm_monitor filename = "alarmmonitor" - filedesc = "Alarm Monitoring" + filedesc = "Alarm Monitor" ui_header = "alarm_green.gif" program_icon_state = "alert-green" extended_desc = "This program provides visual interface for station's alarm system." requires_ntnet = 1 network_destination = "alarm monitoring network" size = 5 + tgui_id = "ntos_station_alert" + ui_x = 315 + ui_y = 500 + var/has_alert = 0 var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) var/alarm_z = list(ZLEVEL_STATION,ZLEVEL_LAVALAND) @@ -28,15 +29,6 @@ update_computer_icon() return 1 - - -/datum/computer_file/program/alarm_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "station_alert_prog", "Alarm Monitoring", 300, 500, master_ui, state) - ui.open() - /datum/computer_file/program/alarm_monitor/ui_data(mob/user) var/list/data = get_header_data() @@ -49,7 +41,6 @@ return data /datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source) - if(!(source.z in alarm_z)) return @@ -77,8 +68,6 @@ /datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin) - - var/list/L = alarms[class] var/cleared = 0 for (var/I in L) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index ee1498fd79..9752aafa84 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -7,6 +7,11 @@ requires_ntnet = 1 available_on_ntnet = 0 available_on_syndinet = 1 + tgui_id = "ntos_net_dos" + ui_style = "syndicate" + ui_x = 400 + ui_y = 250 + var/obj/machinery/ntnet_relay/target = null var/dos_speed = 0 var/error = "" @@ -36,18 +41,6 @@ ..() - -/datum/computer_file/program/ntnet_dos/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - ui = new(user, src, ui_key, "ntnet_dos", "DoS Traffic Generator", 400, 250, state = state) - ui.set_style("syndicate") - ui.set_autoupdate(state = 1) - ui.open() - - - /datum/computer_file/program/ntnet_dos/ui_act(action, params) if(..()) return 1 diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index ea6a36b549..8082dc02f4 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -7,6 +7,11 @@ requires_ntnet = 0 available_on_ntnet = 0 available_on_syndinet = 1 + tgui_id = "ntos_revelation" + ui_style = "syndicate" + ui_x = 400 + ui_y = 250 + var/armed = 0 /datum/computer_file/program/revelation/run_program(var/mob/living/user) @@ -58,16 +63,6 @@ temp.armed = armed return temp -/datum/computer_file/program/revelation/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - ui = new(user, src, ui_key, "revelation", "Revelation Virus", 400, 250, state = state) - ui.set_style("syndicate") - ui.set_autoupdate(state = 1) - ui.open() - - /datum/computer_file/program/revelation/ui_data(mob/user) var/list/data = get_header_data() diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index eec36d6c4c..a0879f13ce 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -1,11 +1,15 @@ /datum/computer_file/program/card_mod filename = "cardmod" - filedesc = "ID card modification program" + filedesc = "ID Card Modification" program_icon_state = "id" extended_desc = "Program for programming employee ID cards to access parts of the station." transfer_access = GLOB.access_heads requires_ntnet = 0 size = 8 + tgui_id = "ntos_card" + ui_x = 600 + ui_y = 700 + var/mod_mode = 1 var/is_centcom = 0 var/show_assignments = 0 @@ -72,20 +76,6 @@ return 0 return 0 - -/datum/computer_file/program/card_mod/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - ui = new(user, src, ui_key, "identification_computer", "ID card modification program", 600, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - - /datum/computer_file/program/card_mod/proc/format_jobs(list/jobs) var/obj/item/weapon/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD] var/obj/item/weapon/card/id/id_card = card_slot.stored_card diff --git a/code/modules/modular_computers/file_system/programs/configurator.dm b/code/modules/modular_computers/file_system/programs/configurator.dm index dc8b5ac97d..802f1386c3 100644 --- a/code/modules/modular_computers/file_system/programs/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/configurator.dm @@ -4,7 +4,7 @@ /datum/computer_file/program/computerconfig filename = "compconfig" - filedesc = "Computer Configuration Tool" + filedesc = "Hardware Configuration Tool" extended_desc = "This program allows configuration of computer's hardware" program_icon_state = "generic" unsendable = 1 @@ -12,21 +12,11 @@ size = 4 available_on_ntnet = 0 requires_ntnet = 0 + tgui_id = "ntos_configuration" + var/obj/item/device/modular_computer/movable = null -/datum/computer_file/program/computerconfig/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - ui = new(user, src, ui_key, "laptop_configuration", "NTOS Configuration Utility", 575, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - /datum/computer_file/program/computerconfig/ui_data(mob/user) movable = computer var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = movable.all_components[MC_HDD] diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index 0271b4ad8e..9693c95305 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -1,12 +1,14 @@ /datum/computer_file/program/filemanager filename = "filemanager" - filedesc = "NTOS File Manager" + filedesc = "File Manager" extended_desc = "This program allows management of files." program_icon_state = "generic" size = 8 requires_ntnet = 0 available_on_ntnet = 0 undeletable = 1 + tgui_id = "ntos_file_manager" + var/open_file var/error @@ -176,18 +178,6 @@ t = parse_tags(t) return t -/datum/computer_file/program/filemanager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - ui = new(user, src, ui_key, "file_manager", "NTOS File Manager", 575, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - /datum/computer_file/program/filemanager/ui_data(mob/user) var/list/data = get_header_data() diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index d9255b17ee..6bd5fcae8e 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -1,6 +1,6 @@ /datum/computer_file/program/ntnetdownload filename = "ntndownloader" - filedesc = "NTNet Software Download Tool" + filedesc = "Software Download Tool" program_icon_state = "generic" extended_desc = "This program allows downloads of software from official NT repositories" unsendable = 1 @@ -10,6 +10,8 @@ requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD available_on_ntnet = 0 ui_header = "downloader_finished.gif" + tgui_id = "ntos_net_downloader" + var/datum/computer_file/program/downloaded_file = null var/hacked_download = 0 var/download_completion = 0 //GQ of downloaded data. @@ -103,17 +105,6 @@ return 1 return 0 -/datum/computer_file/program/ntnetdownload/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - ui = new(user, src, ui_key, "ntnet_downloader", "NTNet Download Program", 575, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - /datum/computer_file/program/ntnetdownload/ui_data(mob/user) my_computer = computer diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/ntmonitor.dm index 6661bceac4..fe556faeab 100644 --- a/code/modules/modular_computers/file_system/programs/ntmonitor.dm +++ b/code/modules/modular_computers/file_system/programs/ntmonitor.dm @@ -7,20 +7,7 @@ requires_ntnet = 1 required_access = GLOB.access_network //Network control is a more secure program. available_on_ntnet = 1 - -/datum/computer_file/program/ntnetmonitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - - ui = new(user, src, ui_key, "ntnet_monitor", "NTNet Diagnostics and Monitoring Tool", 575, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - + tgui_id = "ntos_net_monitor" /datum/computer_file/program/ntnetmonitor/ui_act(action, params) if(..()) diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index b4c7884fe7..e742de3a2a 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -1,6 +1,6 @@ /datum/computer_file/program/chatclient filename = "ntnrc_client" - filedesc = "NTNet Relay Chat Client" + filedesc = "Chat Client" program_icon_state = "command" extended_desc = "This program allows communication over NTNRC network" size = 8 @@ -9,6 +9,8 @@ network_destination = "NTNRC server" ui_header = "ntnrc_idle.gif" available_on_ntnet = 1 + tgui_id = "ntos_net_chat" + var/last_message = null // Used to generate the toolbar icon var/username var/datum/ntnet_conversation/channel = null @@ -180,21 +182,6 @@ channel = null ..() -/datum/computer_file/program/chatclient/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - - ui = new(user, src, ui_key, "ntnet_chat", "NTNet Relay Chat Client", 575, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - - /datum/computer_file/program/chatclient/ui_data(mob/user) if(!GLOB.ntnet_global || !GLOB.ntnet_global.chat_channels) return diff --git a/code/modules/modular_computers/file_system/programs/nttransfer.dm b/code/modules/modular_computers/file_system/programs/nttransfer.dm index 0d46755f6b..b2464619d3 100644 --- a/code/modules/modular_computers/file_system/programs/nttransfer.dm +++ b/code/modules/modular_computers/file_system/programs/nttransfer.dm @@ -1,6 +1,6 @@ /datum/computer_file/program/nttransfer filename = "nttransfer" - filedesc = "NTNet P2P Transfer Client" + filedesc = "P2P Transfer Client" extended_desc = "This program allows for simple file transfer via direct peer to peer connection." program_icon_state = "comm_logs" size = 7 @@ -8,6 +8,7 @@ requires_ntnet_feature = NTNET_PEERTOPEER network_destination = "other device via P2P tunnel" available_on_ntnet = 1 + tgui_id = "ntos_net_transfer" var/error = "" // Error screen var/server_password = "" // Optional password to download the file. @@ -82,20 +83,6 @@ remote = null download_completion = 0 - -/datum/computer_file/program/nttransfer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if (!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - - ui = new(user, src, ui_key, "ntnet_transfer", "NTNet P2P Transfer Client", 575, 700, state = state) - ui.open() - ui.set_autoupdate(state = 1) - /datum/computer_file/program/nttransfer/ui_act(action, params) if(..()) return 1 diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index b910325642..f95c290734 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -1,8 +1,6 @@ - - /datum/computer_file/program/power_monitor filename = "powermonitor" - filedesc = "Power Monitoring" + filedesc = "Power Monitor" program_icon_state = "power_monitor" extended_desc = "This program connects to sensors around the station to provide information about electrical systems" ui_header = "power_norm.gif" @@ -11,6 +9,10 @@ requires_ntnet = 0 network_destination = "power monitoring system" size = 9 + tgui_id = "ntos_power_monitor" + ui_x = 1200 + ui_y = 1000 + var/has_alert = 0 var/obj/structure/cable/attached var/list/history = list() @@ -19,8 +21,6 @@ var/next_record = 0 - - /datum/computer_file/program/power_monitor/run_program(mob/living/user) . = ..(user) search() @@ -52,18 +52,6 @@ if(demand.len > record_size) demand.Cut(1, 2) -/datum/computer_file/program/power_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) - assets.send(user) - - - ui = new(user, src, ui_key, "power_monitor_prog", "Power Monitoring", 1200, 1000, master_ui, state) - ui.open() - /datum/computer_file/program/power_monitor/ui_data() var/list/data = get_header_data() data["stored"] = record_size diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 66fc0cf32a..ca2bcd3ba2 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -12,16 +12,20 @@ slot_flags = SLOT_BELT resistance_flags = FLAMMABLE -/obj/item/weapon/clipboard/New() +/obj/item/weapon/clipboard/Initialize() update_icon() - ..() + . = ..() +/obj/item/weapon/clipboard/Destroy() + QDEL_NULL(haspen) + QDEL_NULL(toppaper) //let movable/Destroy handle the rest + return ..() /obj/item/weapon/clipboard/update_icon() cut_overlays() if(toppaper) add_overlay(toppaper.icon_state) - add_overlay(toppaper.overlays) + copy_overlays(toppaper) if(haspen) add_overlay("clipboard_pen") add_overlay("clipboard_over") @@ -115,4 +119,4 @@ //Update everything attack_self(usr) - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 634a2d056d..c084befd92 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -32,12 +32,14 @@ /obj/item/weapon/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user) - var/deconvert = 0 - if(M.mind == target && target.soulOwner != target) + var/deconvert = FALSE + if(M.mind == target && !M.owns_soul()) if(user.mind && (user.mind.assigned_role == "Lawyer")) - deconvert = prob (25) + deconvert = TRUE else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "Centcom Commander")) - deconvert = prob (10) // the HoP doesn't have AS much legal training + deconvert = prob (25) // the HoP doesn't have AS much legal training + else + deconvert = prob (5) if(deconvert) M.visible_message("[user] reminds [M] that [M]'s soul was already purchased by Nanotrasen!") to_chat(M, "You feel that your soul has returned to its rightful owner, Nanotrasen.") @@ -57,6 +59,7 @@ var/contractType = 0 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/datum/mind/owner + var/datum/antagonist/devil/devil_datum icon_state = "paper_onfire" /obj/item/weapon/paper/contract/infernal/power @@ -84,6 +87,10 @@ name = "paper- contract for knowledge" contractType = CONTRACT_KNOWLEDGE +/obj/item/weapon/paper/contract/infernal/friend + name = "paper- contract for a friend" + contractType = CONTRACT_FRIEND + /obj/item/weapon/paper/contract/infernal/unwilling name = "paper- infernal contract" contractType = CONTRACT_UNWILLING @@ -91,11 +98,10 @@ /obj/item/weapon/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner) ..() owner = nOwner + devil_datum = owner.has_antag_datum(ANTAG_DATUM_DEVIL) target = nTarget update_text() -/obj/item/weapon/paper/contract/infernal - /obj/item/weapon/paper/contract/infernal/suicide_act(mob/user) if(signed && (user == target.current) && istype(user,/mob/living/carbon/human/)) var/mob/living/carbon/human/H = user @@ -111,49 +117,56 @@ info = "This shouldn't be seen. Error DEVIL:6" /obj/item/weapon/paper/contract/infernal/power/update_text(signature = "____________", blood = 0) - info = "
Contract for infernal power



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for infernal power



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else info += "[signature]" /obj/item/weapon/paper/contract/infernal/wealth/update_text(signature = "____________", blood = 0) - info = "
Contract for unlimited wealth



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for unlimited wealth



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else info += "[signature]" /obj/item/weapon/paper/contract/infernal/prestige/update_text(signature = "____________", blood = 0) - info = "
Contract for prestige



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for prestige



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else info += "[signature]" /obj/item/weapon/paper/contract/infernal/magic/update_text(signature = "____________", blood = 0) - info = "
Contract for magic



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for magic



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else info += "[signature]" /obj/item/weapon/paper/contract/infernal/revive/update_text(signature = "____________", blood = 0) - info = "
Contract for resurrection



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for resurrection



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else info += "[signature]" /obj/item/weapon/paper/contract/infernal/knowledge/update_text(signature = "____________", blood = 0) - info = "
Contract for knowledge



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for knowledge



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + if(blood) + info += "[signature]" + else + info += "[signature]" + +/obj/item/weapon/paper/contract/infernal/friend/update_text(signature = "____________", blood = 0) + info = "
Contract for a friend



I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for a friend. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else info += "[signature]" /obj/item/weapon/paper/contract/infernal/unwilling/update_text(signature = "____________", blood = 0) - info = "
Contract for slave



I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " + info = "
Contract for slave



I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


Signed, " if(blood) info += "[signature]" else @@ -179,33 +192,40 @@ return ..() /obj/item/weapon/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user, blood = 0) - if(user.IsAdvancedToolUser() && user.is_literate()) - if(user.mind == target) - if(user.mind.soulOwner != owner) - if (contractType == CONTRACT_REVIVE) - to_chat(user, "You are already alive, this contract would do nothing.") - else - if(signed) - to_chat(user, "This contract has already been signed. It may not be signed again.") - else - to_chat(user, "You quickly scrawl your name on the contract") - if(FulfillContract(target.current, blood)<=0) - to_chat(user, "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?") - return 1 - else - to_chat(user, "This devil already owns your soul, you may not sell it to them again.") - else - to_chat(user, "Your signature simply slides off the sheet, it seems this contract is not meant for you to sign.") - else + if(!user.IsAdvancedToolUser() || !user.is_literate()) to_chat(user, "You don't know how to read or write.") - return 0 + return 0 + if(user.mind != target) + to_chat(user, "Your signature simply slides off the sheet, it seems this contract is not meant for you to sign.") + return 0 + if(user.mind.soulOwner == owner) + to_chat(user, "This devil already owns your soul, you may not sell it to them again.") + return 0 + if(signed) + to_chat(user, "This contract has already been signed. It may not be signed again.") + return 0 + if(!user.mind.hasSoul) + to_chat(user, "You do not possess a soul.") + return 0 + if(prob(user.getBrainLoss())) + to_chat(user, "You quickly scrawl 'your name' on the contract.") + signIncorrectly() + return 0 + if (contractType == CONTRACT_REVIVE) + to_chat(user, "You are already alive, this contract would do nothing.") + return 0 + else + to_chat(user, "You quickly scrawl your name on the contract") + if(fulfillContract(target.current, blood)<=0) + to_chat(user, "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?") + return 1 /obj/item/weapon/paper/contract/infernal/revive/attack(mob/M, mob/living/user) if (target == M.mind && M.stat == DEAD && M.mind.soulOwner == M.mind) if (cooldown) - to_chat(user, "Give [M] a chance to think through the contract, don't rush him.") + to_chat(user, "Give [M] a chance to think through the contract, don't rush them.") return 0 cooldown = TRUE var/mob/living/carbon/human/H = M @@ -223,7 +243,7 @@ add_logs(user, H, "infernally revived via contract") user.visible_message("With a sudden blaze, [H] stands back up.") H.fakefire() - FulfillContract(H, 1)//Revival contracts are always signed in blood + fulfillContract(H, 1)//Revival contracts are always signed in blood addtimer(CALLBACK(H, /mob/living/carbon/human.proc/fakefireextinguish), 5, TIMER_UNIQUE) addtimer(CALLBACK(src, "resetcooldown"), 300, TIMER_UNIQUE) else @@ -233,20 +253,26 @@ cooldown = FALSE -/obj/item/weapon/paper/contract/infernal/proc/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0) - signed = 1 +/obj/item/weapon/paper/contract/infernal/proc/fulfillContract(mob/living/carbon/human/user = target.current, blood = FALSE) + signed = TRUE if(user.mind.soulOwner != user.mind) //They already sold their soul to someone else? - user.mind.soulOwner.devilinfo.remove_soul(user.mind) //Then they lose their claim. + var/datum/antagonist/devil/ownerDevilInfo = user.mind.soulOwner.has_antag_datum(ANTAG_DATUM_DEVIL) + ownerDevilInfo.remove_soul(user.mind) //Then they lose their claim. user.mind.soulOwner = owner user.hellbound = contractType user.mind.damnation_type = contractType - owner.devilinfo.add_soul(user.mind) + var/datum/antagonist/devil/devilInfo = owner.has_antag_datum(ANTAG_DATUM_DEVIL) + devilInfo.add_soul(user.mind) update_text(user.real_name, blood) to_chat(user, "A profound emptiness washes over you as you lose ownership of your soul.") to_chat(user, "This does NOT make you an antagonist if you were not already.") - return 1 + return TRUE -/obj/item/weapon/paper/contract/infernal/power/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0) +/obj/item/weapon/paper/contract/infernal/proc/signIncorrectly(mob/living/carbon/human/user = target.current, blood = FALSE) + signed = 1 + update_text("your name", blood) + +/obj/item/weapon/paper/contract/infernal/power/fulfillContract(mob/living/carbon/human/user = target.current, blood = FALSE) if(!user.dna) return -1 user.dna.add_mutation(HULK) @@ -254,13 +280,14 @@ organ.Insert(user) return ..() -/obj/item/weapon/paper/contract/infernal/wealth/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0) +/obj/item/weapon/paper/contract/infernal/wealth/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) if(!istype(user) || !user.mind) // How in the hell could that happen? return -1 user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null)) return ..() -/obj/item/weapon/paper/contract/infernal/prestige/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0) +/obj/item/weapon/paper/contract/infernal/prestige/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) + //Basically turns the signer into the captain, and uploads an ion law making them the captain. var/obj/item/worn = user.wear_id var/obj/item/weapon/card/id/id = null if(worn) @@ -292,16 +319,22 @@ return ..() -/obj/item/weapon/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0) +/obj/item/weapon/paper/contract/infernal/magic/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) if(!istype(user) || !user.mind) return -1 - user.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null)) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless(null)) user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) return ..() -/obj/item/weapon/paper/contract/infernal/knowledge/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0) +/obj/item/weapon/paper/contract/infernal/knowledge/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) if(!istype(user) || !user.mind) return -1 user.dna.add_mutation(XRAY) user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/view_range(null)) return ..() + +/obj/item/weapon/paper/contract/infernal/friend/fulfillContract(mob/living/user = target.current, blood = 0) + if(!istype(user) || !user.mind) + return -1 + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_friend(null)) + return ..() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 4633285488..6c6a088644 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -497,9 +497,7 @@ var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() if (prob(50) && electrocute_mob(usr, N, N, 1, TRUE)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, TRUE, src) return C.use(10) to_chat(user, "You add cables to the APC frame.") @@ -1181,9 +1179,7 @@ /obj/machinery/power/apc/proc/shock(mob/user, prb) if(!prob(prb)) return 0 - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, TRUE, src) if(isalien(user)) return 0 if(electrocute_mob(user, src, src, 1, TRUE)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 653e3296f4..48fc254a8e 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -156,9 +156,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!prob(prb)) return 0 if (electrocute_mob(user, powernet, src, siemens_coeff)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() + do_sparks(5, TRUE, src) return 1 else return 0 diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index dfbf3fe50b..9fe043a4a0 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -28,11 +28,12 @@ /obj/machinery/power/generator/Initialize(mapload) - . = ..() + . = ..() var/obj/machinery/atmospherics/components/binary/circulator/circpath = /obj/machinery/atmospherics/components/binary/circulator cold_circ = locate(circpath) in get_step(src, cold_dir) hot_circ = locate(circpath) in get_step(src, hot_dir) connect_to_network() + SSair.atmos_machinery += src if(cold_circ) switch(cold_dir) @@ -55,6 +56,9 @@ update_icon() +/obj/machinery/power/generator/Destroy() + SSair.atmos_machinery -= src + return ..() /obj/machinery/power/generator/update_icon() @@ -63,21 +67,20 @@ else cut_overlays() - if(lastgenlev != 0) - add_overlay("teg-op[lastgenlev]") + var/L = min(round(lastgenlev/100000),11) + if(L != 0) + add_overlay(image('icons/obj/power.dmi', "teg-op[L]")) - add_overlay("teg-oc[lastcirc]") + add_overlay("teg-oc[lastcirc]") #define GENRATE 800 // generator output coefficient from Q -/obj/machinery/power/generator/process() +/obj/machinery/power/generator/process_atmos() if(!cold_circ || !hot_circ) return - lastgen = 0 - if(powernet) //to_chat(world, "cold_circ and hot_circ pass") @@ -104,7 +107,7 @@ var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) var/heat = energy_transfer*(1-efficiency) - lastgen = energy_transfer*efficiency + lastgen += energy_transfer*efficiency //to_chat(world, "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];") @@ -113,7 +116,7 @@ //to_chat(world, "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]") - add_avail(lastgen) + //add_avail(lastgen) This is done in process now // update icon overlays only if displayed level has changed if(hot_air) @@ -124,15 +127,23 @@ var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 cold_circ_air1.merge(cold_air) - var/genlev = max(0, min( round(11*lastgen / 100000), 11)) + update_icon() + var/circ = "[cold_circ && cold_circ.last_pressure_delta > 0 ? "1" : "0"][hot_circ && hot_circ.last_pressure_delta > 0 ? "1" : "0"]" - if((genlev != lastgenlev) || (circ != lastcirc)) - lastgenlev = genlev + if(circ != lastcirc) lastcirc = circ update_icon() src.updateDialog() +/obj/machinery/power/generator/process() + //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** + var/power_output = round(lastgen / 10) + add_avail(power_output) + lastgenlev = power_output + lastgen -= power_output + ..() + /obj/machinery/power/generator/attack_hand(mob/user) if(..()) user << browse(null, "window=teg") @@ -151,7 +162,13 @@ t += "
" - t += "Output: [round(lastgen)] W" + var/displaygen = lastgenlev + if(displaygen < 1000000) //less than a MW + displaygen /= 1000 + t += "Output: [round(displaygen,0.01)] kW" + else + displaygen /= 1000000 + t += "Output: [round(displaygen,0.01)] MW" t += "
" diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 6ca3c8f620..7a148067d3 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne /obj/machinery/gravity_generator name = "gravitational generator" - desc = "A device which produces a gravaton field when set up." + desc = "A device which produces a graviton field when set up." icon = 'icons/obj/machines/gravity_generator.dmi' anchored = 1 density = 1 @@ -98,7 +98,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne // /obj/machinery/gravity_generator/main/station/Initialize() - . = ..() + . = ..() setup_parts() middle.add_overlay("activated") update_list() @@ -303,17 +303,17 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne use_power = on ? 2 : 1 // Sound the alert if gravity was just enabled or disabled. var/alert = 0 - var/area/area = get_area(src) - if(on && SSticker.IsRoundInProgress()) // If we turned on and the game is live. + var/area/A = get_area(src) + if(on && SSticker.IsRoundInProgress()) // If we turned on and the game is live. if(gravity_in_level() == 0) alert = 1 investigate_log("was brought online and is now producing gravity for this level.", "gravity") - message_admins("The gravity generator was brought online. ([area.name])") + message_admins("The gravity generator was brought online [A][ADMIN_COORDJMP(src)]") else if(gravity_in_level() == 1) alert = 1 investigate_log("was brought offline and there is now no gravity for this level.", "gravity") - message_admins("The gravity generator was brought offline with no backup generator. ([area.name])") + message_admins("The gravity generator was brought offline with no backup generator. [A][ADMIN_COORDJMP(src)]") update_icon() update_list() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index cfe57d0607..9d37173c9f 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -1,493 +1,493 @@ -/obj/machinery/power/emitter - name = "Emitter" - desc = "A heavy duty industrial laser.\nAlt-click to rotate it clockwise." - icon = 'icons/obj/singularity.dmi' - icon_state = "emitter" - var/icon_state_on = "emitter_+a" - anchored = 0 - density = 1 - req_access = list(GLOB.access_engine_equip) - - // The following 3 vars are mostly for the prototype - var/manual = FALSE - var/charge = 0 - var/atom/target = null - - use_power = 0 - idle_power_usage = 10 - active_power_usage = 300 - - var/active = 0 - var/powered = 0 - var/fire_delay = 100 - var/maximum_fire_delay = 100 - var/minimum_fire_delay = 20 - var/last_shot = 0 - var/shot_number = 0 - var/state = 0 - var/locked = 0 - - var/projectile_type = /obj/item/projectile/beam/emitter - - var/projectile_sound = 'sound/weapons/emitter.ogg' - - var/datum/effect_system/spark_spread/sparks - -/obj/machinery/power/emitter/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null) - B.apply_default_parts(src) - RefreshParts() - wires = new /datum/wires/emitter(src) - -/obj/item/weapon/circuitboard/machine/emitter - name = "Emitter (Machine Board)" - build_path = /obj/machinery/power/emitter - origin_tech = "programming=3;powerstorage=4;engineering=4" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/machinery/power/emitter/RefreshParts() - var/max_firedelay = 120 - var/firedelay = 120 - var/min_firedelay = 24 - var/power_usage = 350 - for(var/obj/item/weapon/stock_parts/micro_laser/L in component_parts) - max_firedelay -= 20 * L.rating - min_firedelay -= 4 * L.rating - firedelay -= 20 * L.rating - maximum_fire_delay = max_firedelay - minimum_fire_delay = min_firedelay - fire_delay = firedelay - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - power_usage -= 50 * M.rating - active_power_usage = power_usage - -/obj/machinery/power/emitter/verb/rotate() - set name = "Rotate" - set category = "Object" - set src in oview(1) - - if(usr.stat || !usr.canmove || usr.restrained()) - return - if (src.anchored) - to_chat(usr, "It is fastened to the floor!") - return 0 - src.setDir(turn(src.dir, 270)) - return 1 - -/obj/machinery/power/emitter/AltClick(mob/user) - ..() - if(user.incapacitated()) - to_chat(user, "You can't do that right now!") - return - if(!in_range(src, user)) - return - else - rotate() - -/obj/machinery/power/emitter/Initialize() - . = ..() - if(state == 2 && anchored) - connect_to_network() - - sparks = new +/obj/machinery/power/emitter + name = "Emitter" + desc = "A heavy duty industrial laser.\nAlt-click to rotate it clockwise." + icon = 'icons/obj/singularity.dmi' + icon_state = "emitter" + var/icon_state_on = "emitter_+a" + anchored = 0 + density = 1 + req_access = list(GLOB.access_engine_equip) + + // The following 3 vars are mostly for the prototype + var/manual = FALSE + var/charge = 0 + var/atom/target = null + + use_power = 0 + idle_power_usage = 10 + active_power_usage = 300 + + var/active = 0 + var/powered = 0 + var/fire_delay = 100 + var/maximum_fire_delay = 100 + var/minimum_fire_delay = 20 + var/last_shot = 0 + var/shot_number = 0 + var/state = 0 + var/locked = 0 + + var/projectile_type = /obj/item/projectile/beam/emitter + + var/projectile_sound = 'sound/weapons/emitter.ogg' + + var/datum/effect_system/spark_spread/sparks + +/obj/machinery/power/emitter/New() + ..() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null) + B.apply_default_parts(src) + RefreshParts() + wires = new /datum/wires/emitter(src) + +/obj/item/weapon/circuitboard/machine/emitter + name = "Emitter (Machine Board)" + build_path = /obj/machinery/power/emitter + origin_tech = "programming=3;powerstorage=4;engineering=4" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/machinery/power/emitter/RefreshParts() + var/max_firedelay = 120 + var/firedelay = 120 + var/min_firedelay = 24 + var/power_usage = 350 + for(var/obj/item/weapon/stock_parts/micro_laser/L in component_parts) + max_firedelay -= 20 * L.rating + min_firedelay -= 4 * L.rating + firedelay -= 20 * L.rating + maximum_fire_delay = max_firedelay + minimum_fire_delay = min_firedelay + fire_delay = firedelay + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + power_usage -= 50 * M.rating + active_power_usage = power_usage + +/obj/machinery/power/emitter/verb/rotate() + set name = "Rotate" + set category = "Object" + set src in oview(1) + + if(usr.stat || !usr.canmove || usr.restrained()) + return + if (src.anchored) + to_chat(usr, "It is fastened to the floor!") + return 0 + src.setDir(turn(src.dir, 270)) + return 1 + +/obj/machinery/power/emitter/AltClick(mob/user) + ..() + if(user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!in_range(src, user)) + return + else + rotate() + +/obj/machinery/power/emitter/Initialize() + . = ..() + if(state == 2 && anchored) + connect_to_network() + + sparks = new sparks.attach(src) - sparks.set_up(5, TRUE, src) - -/obj/machinery/power/emitter/Destroy() - if(SSticker && SSticker.IsRoundInProgress()) - message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) - log_game("Emitter deleted at ([x],[y],[z])") - investigate_log("deleted at ([x],[y],[z]) at [get_area(src)]","singulo") - QDEL_NULL(sparks) - return ..() - -/obj/machinery/power/emitter/update_icon() - if (active && powernet && avail(active_power_usage)) - icon_state = icon_state_on - else - icon_state = initial(icon_state) - - -/obj/machinery/power/emitter/attack_hand(mob/user) - src.add_fingerprint(user) - if(state == 2) - if(!powernet) - to_chat(user, "The emitter isn't connected to a wire!") - return 1 - if(!src.locked) - if(src.active==1) - src.active = 0 - to_chat(user, "You turn off \the [src].") - message_admins("Emitter turned off by [key_name_admin(user)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Emitter turned off by [key_name(user)] in ([x],[y],[z])") - investigate_log("turned off by [key_name(user)] at [get_area(src)]","singulo") - else - src.active = 1 - to_chat(user, "You turn on \the [src].") - src.shot_number = 0 - src.fire_delay = maximum_fire_delay - investigate_log("turned on by [key_name(user)] at [get_area(src)]","singulo") - update_icon() - else - to_chat(user, "The controls are locked!") - else - to_chat(user, "The [src] needs to be firmly secured to the floor first!") - return 1 - -/obj/machinery/power/emitter/attack_animal(mob/living/simple_animal/M) - if(ismegafauna(M) && anchored) - state = 0 - anchored = FALSE - M.visible_message("[M] rips [src] free from its moorings!") - else - ..() - if(!anchored) - step(src, get_dir(M, src)) - - -/obj/machinery/power/emitter/emp_act(severity)//Emitters are hardened but still might have issues -// add_load(1000) -/* if((severity == 1)&&prob(1)&&prob(1)) - if(src.active) - src.active = 0 - src.use_power = 1 */ - return 1 - - -/obj/machinery/power/emitter/process() - if(stat & (BROKEN)) - return - if(src.state != 2 || (!powernet && active_power_usage)) - src.active = 0 - update_icon() - return - if(src.active == 1) - if(!active_power_usage || avail(active_power_usage)) - add_load(active_power_usage) - if(!powered) - powered = 1 - update_icon() - investigate_log("regained power and turned on at [get_area(src)]","singulo") - else - if(powered) - powered = 0 - update_icon() - investigate_log("lost power and turned off at [get_area(src)]","singulo") - log_game("Emitter lost power in ([x],[y],[z])") - return - if(charge <=80) - charge+=5 - if(!check_delay() || manual == TRUE) - return FALSE - fire_beam(target) - -/obj/machinery/power/emitter/proc/check_delay() - if((src.last_shot + src.fire_delay) <= world.time) - return TRUE - return FALSE - -/obj/machinery/power/emitter/proc/fire_beam_pulse() - if(!check_delay()) - return FALSE - if(state != 2) - return FALSE - if(avail(active_power_usage)) - add_load(active_power_usage) - fire_beam() - -/obj/machinery/power/emitter/proc/fire_beam(atom/targeted_atom, mob/user) - var/turf/targets_from = get_turf(src) - if(targeted_atom && (targeted_atom == user || targeted_atom == targets_from || targeted_atom == src)) - return - var/obj/item/projectile/P = new projectile_type(targets_from) - playsound(src.loc, projectile_sound, 50, 1) - if(prob(35)) - sparks.start() - switch(dir) - if(NORTH) - P.yo = 20 - P.xo = 0 - if(NORTHEAST) - P.yo = 20 - P.xo = 20 - if(EAST) - P.yo = 0 - P.xo = 20 - if(SOUTHEAST) - P.yo = -20 - P.xo = 20 - if(WEST) - P.yo = 0 - P.xo = -20 - if(SOUTHWEST) - P.yo = -20 - P.xo = -20 - if(NORTHWEST) - P.yo = 20 - P.xo = -20 - else // Any other - P.yo = -20 - P.xo = 0 - if(target) - P.yo = targeted_atom.y - targets_from.y - P.xo = targeted_atom.x - targets_from.x - P.current = targets_from - P.starting = targets_from - P.firer = src - P.original = targeted_atom - if(!manual) - last_shot = world.time - if(shot_number < 3) - fire_delay = 20 - shot_number ++ - else - fire_delay = rand(minimum_fire_delay,maximum_fire_delay) - shot_number = 0 - if(!target) - P.setDir(src.dir) - P.starting = loc - else - if(QDELETED(target)) - target = null - P.fire() - return P - -/obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user, silent) - if(state == EM_WELDED) - if(!silent) - to_chat(user, "[src] is welded to the floor!") - return FAILED_UNFASTEN - return ..() - -/obj/machinery/power/emitter/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) - . = ..() - if(. == SUCCESSFUL_UNFASTEN) - if(anchored) - state = EM_SECURED - else - state = EM_UNSECURED - -/obj/machinery/power/emitter/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/weapon/wrench)) - if(active) - to_chat(user, "Turn \the [src] off first!") - return - default_unfasten_wrench(user, W, 0) - return - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(active) - to_chat(user, "Turn \the [src] off first.") - return - switch(state) - if(EM_UNSECURED) - to_chat(user, "The [src.name] needs to be wrenched to the floor!") - if(EM_SECURED) - if(WT.remove_fuel(0,user)) - playsound(loc, WT.usesound, 50, 1) - user.visible_message("[user.name] starts to weld the [name] to the floor.", \ - "You start to weld \the [src] to the floor...", \ - "You hear welding.") - if(do_after(user,20*W.toolspeed, target = src) && WT.isOn()) - state = EM_WELDED - to_chat(user, "You weld \the [src] to the floor.") - connect_to_network() - if(EM_WELDED) - if(WT.remove_fuel(0,user)) - playsound(loc, WT.usesound, 50, 1) - user.visible_message("[user.name] starts to cut the [name] free from the floor.", \ - "You start to cut \the [src] free from the floor...", \ - "You hear welding.") - if(do_after(user,20*W.toolspeed, target = src) && WT.isOn()) - state = EM_SECURED - to_chat(user, "You cut \the [src] free from the floor.") - disconnect_from_network() - return - - if(W.GetID()) - if(emagged) - to_chat(user, "The lock seems to be broken!") - return - if(allowed(user)) - if(active) - locked = !locked - to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.") - else - to_chat(user, "The controls can only be locked when \the [src] is online!") - else - to_chat(user, "Access denied.") - return - - if(is_wire_tool(W) && panel_open) - wires.interact(user) - return - - if(default_deconstruction_screwdriver(user, "emitter_open", "emitter", W)) - return - - if(exchange_parts(user, W)) - return - - if(default_pry_open(W)) - return - - if(default_deconstruction_crowbar(W)) - return - - return ..() - -/obj/machinery/power/emitter/emag_act(mob/user) - if(!emagged) - locked = 0 - emagged = 1 - if(user) - user.visible_message("[user.name] emags the [src.name].","You short out the lock.") - - -/obj/machinery/power/emitter/prototype - name = "Prototype Emitter" - icon = 'icons/obj/turrets.dmi' - icon_state = "protoemitter" - icon_state_on = "protoemitter_+a" - can_buckle = TRUE - buckle_lying = 0 - var/view_range = 12 - var/datum/action/innate/protoemitter/firing/auto - -//BUCKLE HOOKS - -/obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob,force = 0) - playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) - manual = FALSE - for(var/obj/item/I in buckled_mob.held_items) - if(istype(I, /obj/item/weapon/turret_control)) - qdel(I) - if(istype(buckled_mob)) - buckled_mob.pixel_x = 0 - buckled_mob.pixel_y = 0 - if(buckled_mob.client) - buckled_mob.client.change_view(world.view) - auto.Remove(buckled_mob) - . = ..() - -/obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/M, mob/living/carbon/user) - if(user.incapacitated() || !istype(user)) - return - for(var/atom/movable/A in get_turf(src)) - if(A.density && (A != src && A != M)) - return - M.forceMove(get_turf(src)) - ..() - playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) - M.pixel_y = 14 - layer = 4.1 - if(M.client) - M.client.change_view(view_range) - if(!auto) - auto = new() - auto.Grant(M, src) - -/datum/action/innate/protoemitter - check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS - var/obj/machinery/power/emitter/prototype/PE - var/mob/living/carbon/U - - -/datum/action/innate/protoemitter/Grant(mob/living/carbon/L, obj/machinery/power/emitter/prototype/proto) - PE = proto - U = L - . = ..() - -/datum/action/innate/protoemitter/firing - name = "Switch to Manual Firing" - desc = "The emitter will only fire on your command and at your designated target" - button_icon_state = "mech_zoom_on" - -/datum/action/innate/protoemitter/firing/Activate() - if(PE.manual) - playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1) - PE.manual = FALSE - name = "Switch to Manual Firing" - desc = "The emitter will only fire on your command and at your designated target" - button_icon_state = "mech_zoom_on" - for(var/obj/item/I in U.held_items) - if(istype(I, /obj/item/weapon/turret_control)) - qdel(I) - UpdateButtonIcon() - return - else - playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1) - name = "Switch to Automatic Firing" - desc = "Emitters will switch to periodic firing at your last target" - button_icon_state = "mech_zoom_off" - PE.manual = TRUE - for(var/V in U.held_items) - var/obj/item/I = V - if(istype(I)) - if(U.dropItemToGround(I)) - var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control() - U.put_in_hands(TC) - else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand - var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control() - U.put_in_hands(TC) - UpdateButtonIcon() - - -/obj/item/weapon/turret_control - name = "turret controls" - icon_state = "offhand" - w_class = WEIGHT_CLASS_HUGE - flags = ABSTRACT | NODROP - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON - var/delay = 0 - -/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user) - ..() - var/obj/machinery/power/emitter/E = user.buckled - E.setDir(get_dir(E,targeted_atom)) - user.setDir(E.dir) - switch(E.dir) - if(NORTH) - E.layer = 3.9 - user.pixel_x = 0 - user.pixel_y = -14 - if(NORTHEAST) - E.layer = 3.9 - user.pixel_x = -8 - user.pixel_y = -12 - if(EAST) - E.layer = 4.1 - user.pixel_x = -14 - user.pixel_y = 0 - if(SOUTHEAST) - E.layer = 3.9 - user.pixel_x = -8 - user.pixel_y = 12 - if(SOUTH) - E.layer = 4.1 - user.pixel_x = 0 - user.pixel_y = 14 - if(SOUTHWEST) - E.layer = 3.9 - user.pixel_x = 8 - user.pixel_y = 12 - if(WEST) - E.layer = 4.1 - user.pixel_x = 14 - user.pixel_y = 0 - if(NORTHWEST) - E.layer = 3.9 - user.pixel_x = 8 - user.pixel_y = -12 - - if(E.charge >= 10 && world.time > delay) - E.charge -= 10 - E.target = targeted_atom - E.fire_beam(targeted_atom, user) - delay = world.time + 10 - else if (E.charge < 10) - playsound(get_turf(user),'sound/machines/buzz-sigh.ogg', 50, 1) + sparks.set_up(5, TRUE, src) + +/obj/machinery/power/emitter/Destroy() + if(SSticker && SSticker.IsRoundInProgress()) + message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) + log_game("Emitter deleted at ([x],[y],[z])") + investigate_log("deleted at ([x],[y],[z]) at [get_area(src)]","singulo") + QDEL_NULL(sparks) + return ..() + +/obj/machinery/power/emitter/update_icon() + if (active && powernet && avail(active_power_usage)) + icon_state = icon_state_on + else + icon_state = initial(icon_state) + + +/obj/machinery/power/emitter/attack_hand(mob/user) + src.add_fingerprint(user) + if(state == 2) + if(!powernet) + to_chat(user, "The emitter isn't connected to a wire!") + return 1 + if(!src.locked) + if(src.active==1) + src.active = 0 + to_chat(user, "You turn off \the [src].") + message_admins("Emitter turned off by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("Emitter turned off by [key_name(user)] in [COORD(src)]") + investigate_log("turned off by [key_name(user)] at [get_area(src)]","singulo") + else + src.active = 1 + to_chat(user, "You turn on \the [src].") + src.shot_number = 0 + src.fire_delay = maximum_fire_delay + investigate_log("turned on by [key_name(user)] at [get_area(src)]","singulo") + update_icon() + else + to_chat(user, "The controls are locked!") + else + to_chat(user, "The [src] needs to be firmly secured to the floor first!") + return 1 + +/obj/machinery/power/emitter/attack_animal(mob/living/simple_animal/M) + if(ismegafauna(M) && anchored) + state = 0 + anchored = FALSE + M.visible_message("[M] rips [src] free from its moorings!") + else + ..() + if(!anchored) + step(src, get_dir(M, src)) + + +/obj/machinery/power/emitter/emp_act(severity)//Emitters are hardened but still might have issues +// add_load(1000) +/* if((severity == 1)&&prob(1)&&prob(1)) + if(src.active) + src.active = 0 + src.use_power = 1 */ + return 1 + + +/obj/machinery/power/emitter/process() + if(stat & (BROKEN)) + return + if(src.state != 2 || (!powernet && active_power_usage)) + src.active = 0 + update_icon() + return + if(src.active == 1) + if(!active_power_usage || avail(active_power_usage)) + add_load(active_power_usage) + if(!powered) + powered = 1 + update_icon() + investigate_log("regained power and turned on at [get_area(src)]","singulo") + else + if(powered) + powered = 0 + update_icon() + investigate_log("lost power and turned off at [get_area(src)]","singulo") + log_game("Emitter lost power in ([x],[y],[z])") + return + if(charge <=80) + charge+=5 + if(!check_delay() || manual == TRUE) + return FALSE + fire_beam(target) + +/obj/machinery/power/emitter/proc/check_delay() + if((src.last_shot + src.fire_delay) <= world.time) + return TRUE + return FALSE + +/obj/machinery/power/emitter/proc/fire_beam_pulse() + if(!check_delay()) + return FALSE + if(state != 2) + return FALSE + if(avail(active_power_usage)) + add_load(active_power_usage) + fire_beam() + +/obj/machinery/power/emitter/proc/fire_beam(atom/targeted_atom, mob/user) + var/turf/targets_from = get_turf(src) + if(targeted_atom && (targeted_atom == user || targeted_atom == targets_from || targeted_atom == src)) + return + var/obj/item/projectile/P = new projectile_type(targets_from) + playsound(src.loc, projectile_sound, 50, 1) + if(prob(35)) + sparks.start() + switch(dir) + if(NORTH) + P.yo = 20 + P.xo = 0 + if(NORTHEAST) + P.yo = 20 + P.xo = 20 + if(EAST) + P.yo = 0 + P.xo = 20 + if(SOUTHEAST) + P.yo = -20 + P.xo = 20 + if(WEST) + P.yo = 0 + P.xo = -20 + if(SOUTHWEST) + P.yo = -20 + P.xo = -20 + if(NORTHWEST) + P.yo = 20 + P.xo = -20 + else // Any other + P.yo = -20 + P.xo = 0 + if(target) + P.yo = targeted_atom.y - targets_from.y + P.xo = targeted_atom.x - targets_from.x + P.current = targets_from + P.starting = targets_from + P.firer = src + P.original = targeted_atom + if(!manual) + last_shot = world.time + if(shot_number < 3) + fire_delay = 20 + shot_number ++ + else + fire_delay = rand(minimum_fire_delay,maximum_fire_delay) + shot_number = 0 + if(!target) + P.setDir(src.dir) + P.starting = loc + else + if(QDELETED(target)) + target = null + P.fire() + return P + +/obj/machinery/power/emitter/can_be_unfasten_wrench(mob/user, silent) + if(state == EM_WELDED) + if(!silent) + to_chat(user, "[src] is welded to the floor!") + return FAILED_UNFASTEN + return ..() + +/obj/machinery/power/emitter/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + if(anchored) + state = EM_SECURED + else + state = EM_UNSECURED + +/obj/machinery/power/emitter/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/weapon/wrench)) + if(active) + to_chat(user, "Turn \the [src] off first!") + return + default_unfasten_wrench(user, W, 0) + return + + if(istype(W, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = W + if(active) + to_chat(user, "Turn \the [src] off first.") + return + switch(state) + if(EM_UNSECURED) + to_chat(user, "The [src.name] needs to be wrenched to the floor!") + if(EM_SECURED) + if(WT.remove_fuel(0,user)) + playsound(loc, WT.usesound, 50, 1) + user.visible_message("[user.name] starts to weld the [name] to the floor.", \ + "You start to weld \the [src] to the floor...", \ + "You hear welding.") + if(do_after(user,20*W.toolspeed, target = src) && WT.isOn()) + state = EM_WELDED + to_chat(user, "You weld \the [src] to the floor.") + connect_to_network() + if(EM_WELDED) + if(WT.remove_fuel(0,user)) + playsound(loc, WT.usesound, 50, 1) + user.visible_message("[user.name] starts to cut the [name] free from the floor.", \ + "You start to cut \the [src] free from the floor...", \ + "You hear welding.") + if(do_after(user,20*W.toolspeed, target = src) && WT.isOn()) + state = EM_SECURED + to_chat(user, "You cut \the [src] free from the floor.") + disconnect_from_network() + return + + if(W.GetID()) + if(emagged) + to_chat(user, "The lock seems to be broken!") + return + if(allowed(user)) + if(active) + locked = !locked + to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.") + else + to_chat(user, "The controls can only be locked when \the [src] is online!") + else + to_chat(user, "Access denied.") + return + + if(is_wire_tool(W) && panel_open) + wires.interact(user) + return + + if(default_deconstruction_screwdriver(user, "emitter_open", "emitter", W)) + return + + if(exchange_parts(user, W)) + return + + if(default_pry_open(W)) + return + + if(default_deconstruction_crowbar(W)) + return + + return ..() + +/obj/machinery/power/emitter/emag_act(mob/user) + if(!emagged) + locked = 0 + emagged = 1 + if(user) + user.visible_message("[user.name] emags the [src.name].","You short out the lock.") + + +/obj/machinery/power/emitter/prototype + name = "Prototype Emitter" + icon = 'icons/obj/turrets.dmi' + icon_state = "protoemitter" + icon_state_on = "protoemitter_+a" + can_buckle = TRUE + buckle_lying = 0 + var/view_range = 12 + var/datum/action/innate/protoemitter/firing/auto + +//BUCKLE HOOKS + +/obj/machinery/power/emitter/prototype/unbuckle_mob(mob/living/buckled_mob,force = 0) + playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) + manual = FALSE + for(var/obj/item/I in buckled_mob.held_items) + if(istype(I, /obj/item/weapon/turret_control)) + qdel(I) + if(istype(buckled_mob)) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 0 + if(buckled_mob.client) + buckled_mob.client.change_view(world.view) + auto.Remove(buckled_mob) + . = ..() + +/obj/machinery/power/emitter/prototype/user_buckle_mob(mob/living/M, mob/living/carbon/user) + if(user.incapacitated() || !istype(user)) + return + for(var/atom/movable/A in get_turf(src)) + if(A.density && (A != src && A != M)) + return + M.forceMove(get_turf(src)) + ..() + playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) + M.pixel_y = 14 + layer = 4.1 + if(M.client) + M.client.change_view(view_range) + if(!auto) + auto = new() + auto.Grant(M, src) + +/datum/action/innate/protoemitter + check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS + var/obj/machinery/power/emitter/prototype/PE + var/mob/living/carbon/U + + +/datum/action/innate/protoemitter/Grant(mob/living/carbon/L, obj/machinery/power/emitter/prototype/proto) + PE = proto + U = L + . = ..() + +/datum/action/innate/protoemitter/firing + name = "Switch to Manual Firing" + desc = "The emitter will only fire on your command and at your designated target" + button_icon_state = "mech_zoom_on" + +/datum/action/innate/protoemitter/firing/Activate() + if(PE.manual) + playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1) + PE.manual = FALSE + name = "Switch to Manual Firing" + desc = "The emitter will only fire on your command and at your designated target" + button_icon_state = "mech_zoom_on" + for(var/obj/item/I in U.held_items) + if(istype(I, /obj/item/weapon/turret_control)) + qdel(I) + UpdateButtonIcon() + return + else + playsound(PE,'sound/mecha/mechmove01.ogg', 50, 1) + name = "Switch to Automatic Firing" + desc = "Emitters will switch to periodic firing at your last target" + button_icon_state = "mech_zoom_off" + PE.manual = TRUE + for(var/V in U.held_items) + var/obj/item/I = V + if(istype(I)) + if(U.dropItemToGround(I)) + var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control() + U.put_in_hands(TC) + else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand + var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control() + U.put_in_hands(TC) + UpdateButtonIcon() + + +/obj/item/weapon/turret_control + name = "turret controls" + icon_state = "offhand" + w_class = WEIGHT_CLASS_HUGE + flags = ABSTRACT | NODROP + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON + var/delay = 0 + +/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user) + ..() + var/obj/machinery/power/emitter/E = user.buckled + E.setDir(get_dir(E,targeted_atom)) + user.setDir(E.dir) + switch(E.dir) + if(NORTH) + E.layer = 3.9 + user.pixel_x = 0 + user.pixel_y = -14 + if(NORTHEAST) + E.layer = 3.9 + user.pixel_x = -8 + user.pixel_y = -12 + if(EAST) + E.layer = 4.1 + user.pixel_x = -14 + user.pixel_y = 0 + if(SOUTHEAST) + E.layer = 3.9 + user.pixel_x = -8 + user.pixel_y = 12 + if(SOUTH) + E.layer = 4.1 + user.pixel_x = 0 + user.pixel_y = 14 + if(SOUTHWEST) + E.layer = 3.9 + user.pixel_x = 8 + user.pixel_y = 12 + if(WEST) + E.layer = 4.1 + user.pixel_x = 14 + user.pixel_y = 0 + if(NORTHWEST) + E.layer = 3.9 + user.pixel_x = 8 + user.pixel_y = -12 + + if(E.charge >= 10 && world.time > delay) + E.charge -= 10 + E.target = targeted_atom + E.fire_beam(targeted_atom, user) + delay = world.time + 10 + else if (E.charge < 10) + playsound(get_turf(user),'sound/machines/buzz-sigh.ogg', 50, 1) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 9deebdfe10..1997b6bcbd 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -14,6 +14,7 @@ light_power = 0.7 light_range = 15 light_color = rgb(255, 0, 0) + gender = FEMALE var/clashing = FALSE //If Nar-Sie is fighting Ratvar /obj/singularity/narsie/large @@ -26,8 +27,8 @@ grav_pull = 10 consume_range = 12 //How many tiles out do we eat -/obj/singularity/narsie/large/New() - ..() +/obj/singularity/narsie/large/Initialize() + . = ..() send_to_playing_players("NAR-SIE HAS RISEN") send_to_playing_players(pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg')) @@ -38,13 +39,12 @@ narsie_spawn_animation() - sleep(70) - SSshuttle.emergency.request(null, set_coefficient = 0.1) // Cannot recall + sleep(19) + SSshuttle.emergency.request(null, set_coefficient = 0) //instantly arrives /obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, null, 0, loc_override = src.loc) - new /obj/effect/particle_effect/smoke/sleeping(src.loc) + makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, cultoverride = TRUE, loc_override = src.loc) /obj/singularity/narsie/process() @@ -81,7 +81,8 @@ /obj/singularity/narsie/consume(atom/A) - A.narsie_act() + if(isturf(A)) + A.narsie_act() /obj/singularity/narsie/ex_act() //No throwing bombs at her either. diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 3b36e436ee..136f9162cf 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -117,8 +117,8 @@ strength++ strength_change() - message_admins("PA Control Computer increased to [strength] by [key_name_admin(usr)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer increased to [strength] by [key_name(usr)] in ([x],[y],[z])") + message_admins("PA Control Computer increased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("PA Control Computer increased to [strength] by [key_name(usr)] in [COORD(src)]") investigate_log("increased to [strength] by [key_name(usr)]","singulo") @@ -127,8 +127,8 @@ strength-- strength_change() - message_admins("PA Control Computer decreased to [strength] by [key_name_admin(usr)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer decreased to [strength] by [key_name(usr)] in ([x],[y],[z])") + message_admins("PA Control Computer decreased to [strength] by [ADMIN_LOOKUPFLW(usr)] in [ADMIN_COORDJMP(src)]",0,1) + log_game("PA Control Computer decreased to [strength] by [key_name(usr)] in [COORD(src)]") investigate_log("decreased to [strength] by [key_name(usr)]","singulo") diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 3b0bc3087b..1a308ed471 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -29,12 +29,12 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF dangerous_possession = TRUE -/obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) +/obj/singularity/Initialize(mapload, starting_energy = 50) //CARN: admin-alert for chuckle-fuckery. admin_investigate_setup() src.energy = starting_energy - ..() + . = ..() START_PROCESSING(SSobj, src) GLOB.poi_list |= src GLOB.singularities |= src diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 1e1737661e..ea95b08269 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -170,7 +170,7 @@ //crowbarring it ! var/turf/T = get_turf(src) if(default_deconstruction_crowbar(I)) - message_admins("[src] has been deconstructed by [key_name_admin(user)](?) (FLW) in ([T.x],[T.y],[T.z] - JMP)",0,1) + message_admins("[src] has been deconstructed by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1) log_game("[src] has been deconstructed by [key_name(user)]") investigate_log("SMES deconstructed by [key_name(user)]","singulo") return @@ -256,9 +256,9 @@ input_available = terminal.surplus() if(inputting) - if(input_available > 0 && input_available >= input_level) // if there's power available, try to charge + if(input_available > 0) // if there's power available, try to charge - var/load = min((capacity-charge)/SMESRATE, input_level) // charge at set rate, limited to spare capacity + var/load = min(min((capacity-charge)/SMESRATE, input_level), input_available) // charge at set rate, limited to spare capacity charge += load * SMESRATE // increase the charge @@ -268,7 +268,7 @@ inputting = 0 // stop inputting else - if(input_attempt && input_available > 0 && input_available >= input_level) + if(input_attempt && input_available > 0) inputting = 1 else inputting = 0 diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 4b48d19857..7f4777e300 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -48,9 +48,6 @@ #define FLUX_ANOMALY "flux_anomaly" #define PYRO_ANOMALY "pyro_anomaly" -#define SPEAK(message) radio.talk_into(src, message, null, get_spans(), get_default_language()) - - /obj/machinery/power/supermatter_shard name = "supermatter shard" desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure." @@ -114,6 +111,9 @@ var/config_hallucination_power = 0.1 var/obj/item/device/radio/radio + var/radio_key = /obj/item/device/encryptionkey/headset_eng + var/engineering_channel = "Engineering" + var/common_channel = null //for logging var/has_been_powered = 0 @@ -129,16 +129,20 @@ /obj/machinery/power/supermatter_shard/Initialize() . = ..() + SSair.atmos_machinery += src countdown = new(src) countdown.start() GLOB.poi_list |= src radio = new(src) + radio.keyslot = new radio_key radio.listening = 0 + radio.recalculateChannels() investigate_log("has been created.", "supermatter") /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") + SSair.atmos_machinery -= src QDEL_NULL(radio) GLOB.poi_list -= src QDEL_NULL(countdown) @@ -181,7 +185,7 @@ E.energy = power qdel(src) -/obj/machinery/power/supermatter_shard/process() +/obj/machinery/power/supermatter_shard/process_atmos() var/turf/T = loc if(isnull(T)) // We have a null turf...something is wrong, stop processing this entity. @@ -296,6 +300,7 @@ if(produces_gas) env.merge(removed) + air_update_turf() for(var/mob/living/carbon/human/l in view(src, HALLUCINATION_RANGE(power))) // If they can see it without mesons on. Bad on them. if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) @@ -337,27 +342,27 @@ var/stability = num2text(round((damage / explosion_point) * 100)) if(damage > emergency_point) - SPEAK("[emergency_alert] Instability: [stability]%") + radio.talk_into(src, "[emergency_alert] Instability: [stability]%", common_channel, get_spans(), get_default_language()) lastwarning = REALTIMEOFDAY if(!has_reached_emergency) investigate_log("has reached the emergency point for the first time.", "supermatter") - message_admins("[src] has reached the emergency point (JMP).") + message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].") has_reached_emergency = 1 else if(damage >= damage_archived) // The damage is still going up - SPEAK("[warning_alert] Instability: [stability]%") + radio.talk_into(src, "[warning_alert] Instability: [stability]%", engineering_channel, get_spans(), get_default_language()) lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5) else // Phew, we're safe - SPEAK("[safe_alert] Instability: [stability]%") + radio.talk_into(src, "[safe_alert] Instability: [stability]%", engineering_channel, get_spans(), get_default_language()) lastwarning = REALTIMEOFDAY if(power > POWER_PENALTY_THRESHOLD) - SPEAK("Warning: Hyperstructure has reached dangerous power level.") + radio.talk_into(src, "Warning: Hyperstructure has reached dangerous power level.", engineering_channel, get_spans(), get_default_language()) if(powerloss_inhibitor < 0.5) - SPEAK("DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.") + radio.talk_into(src, "DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", engineering_channel, get_spans(), get_default_language()) if(combined_gas > MOLE_PENALTY_THRESHOLD) - SPEAK("Warning: Critical coolant mass reached.") + radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel, get_spans(), get_default_language()) if(damage > explosion_point) for(var/mob in GLOB.living_mob_list) @@ -388,7 +393,7 @@ power += Proj.damage * config_bullet_energy if(!has_been_powered) investigate_log("has been powered for the first time.", "supermatter") - message_admins("[src] has been powered for the first time (JMP).") + message_admins("[src] has been powered for the first time [ADMIN_JMP(src)].") has_been_powered = 1 else if(takes_damage) damage += Proj.damage * config_bullet_energy @@ -487,7 +492,7 @@ /obj/machinery/power/supermatter_shard/proc/Consume(atom/movable/AM) if(isliving(AM)) var/mob/living/user = AM - message_admins("[src] has consumed [key_name_admin(user)]? (FLW) (JMP).") + message_admins("[src] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].") investigate_log("has consumed [key_name(user)].", "supermatter") user.dust() matter_power += 200 diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index fbb82cb36a..df08899140 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -40,6 +40,11 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp var/energy_to_raise = 32 var/energy_to_lower = -20 +/obj/singularity/energy_ball/Initialize(mapload, starting_energy = 50, is_miniball = FALSE) + . = ..() + if(!is_miniball) + set_light(10, 7, "#EEEEFF") + /obj/singularity/energy_ball/ex_act(severity, target) return @@ -54,6 +59,11 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp . = ..() +/obj/singularity/energy_ball/admin_investigate_setup() + if(istype(loc, /obj/singularity/energy_ball)) + return + ..() + /obj/singularity/energy_ball/process() if(!orbiting) handle_energy() @@ -117,7 +127,7 @@ GLOBAL_LIST_INIT(blacklisted_tesla_types, typecacheof(list(/obj/machinery/atmosp /obj/singularity/energy_ball/proc/new_mini_ball() if(!loc) return - var/obj/singularity/energy_ball/EB = new(loc) + var/obj/singularity/energy_ball/EB = new(loc, 0, TRUE) EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) var/icon/I = icon(icon,icon_state,dir) diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index a6440e32ed..bf695cffed 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -1,236 +1,236 @@ -/obj/item/ammo_casing/energy - name = "energy weapon lens" - desc = "The part of the gun that makes the laser go pew" - caliber = "energy" - projectile_type = /obj/item/projectile/energy - var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. - var/select_name = "energy" - fire_sound = 'sound/weapons/Laser.ogg' - firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy - -/obj/item/ammo_casing/energy/chameleon - e_cost = 0 - var/list/projectile_vars = list() - -/obj/item/ammo_casing/energy/chameleon/ready_proj() - . = ..() - if(!BB) - newshot() - for(var/V in projectile_vars) - if(BB.vars[V]) - BB.vars[V] = projectile_vars[V] - -/obj/item/ammo_casing/energy/laser - projectile_type = /obj/item/projectile/beam/laser - select_name = "kill" - -/obj/item/ammo_casing/energy/lasergun - projectile_type = /obj/item/projectile/beam/laser - e_cost = 83 - select_name = "kill" - -/obj/item/ammo_casing/energy/laser/hos - e_cost = 100 - -/obj/item/ammo_casing/energy/laser/practice - projectile_type = /obj/item/projectile/beam/practice - select_name = "practice" - -/obj/item/ammo_casing/energy/laser/scatter - projectile_type = /obj/item/projectile/beam/scatter - pellets = 5 - variance = 25 - select_name = "scatter" - -/obj/item/ammo_casing/energy/laser/scatter/disabler - projectile_type = /obj/item/projectile/beam/disabler - pellets = 3 - variance = 15 - -/obj/item/ammo_casing/energy/laser/heavy - projectile_type = /obj/item/projectile/beam/laser/heavylaser - select_name = "anti-vehicle" - fire_sound = 'sound/weapons/lasercannonfire.ogg' - -/obj/item/ammo_casing/energy/laser/pulse - projectile_type = /obj/item/projectile/beam/pulse - e_cost = 200 - select_name = "DESTROY" - fire_sound = 'sound/weapons/pulse.ogg' - -/obj/item/ammo_casing/energy/laser/bluetag - projectile_type = /obj/item/projectile/beam/lasertag/bluetag - select_name = "bluetag" - -/obj/item/ammo_casing/energy/laser/redtag - projectile_type = /obj/item/projectile/beam/lasertag/redtag - select_name = "redtag" - -/obj/item/ammo_casing/energy/xray - projectile_type = /obj/item/projectile/beam/xray - e_cost = 50 - fire_sound = 'sound/weapons/laser3.ogg' - -/obj/item/ammo_casing/energy/electrode - projectile_type = /obj/item/projectile/energy/electrode - select_name = "stun" - fire_sound = 'sound/weapons/taser.ogg' - e_cost = 200 - -/obj/item/ammo_casing/energy/electrode/gun - fire_sound = 'sound/weapons/gunshot.ogg' - e_cost = 100 - -/obj/item/ammo_casing/energy/electrode/hos - e_cost = 200 - -/obj/item/ammo_casing/energy/ion - projectile_type = /obj/item/projectile/ion - select_name = "ion" - fire_sound = 'sound/weapons/IonRifle.ogg' - -/obj/item/ammo_casing/energy/declone - projectile_type = /obj/item/projectile/energy/declone - select_name = "declone" - fire_sound = 'sound/weapons/pulse3.ogg' - -/obj/item/ammo_casing/energy/mindflayer - projectile_type = /obj/item/projectile/beam/mindflayer - select_name = "MINDFUCK" - fire_sound = 'sound/weapons/Laser.ogg' - -/obj/item/ammo_casing/energy/flora - fire_sound = 'sound/effects/stealthoff.ogg' - -/obj/item/ammo_casing/energy/flora/yield - projectile_type = /obj/item/projectile/energy/florayield - select_name = "yield" - -/obj/item/ammo_casing/energy/flora/mut - projectile_type = /obj/item/projectile/energy/floramut - select_name = "mutation" - -/obj/item/ammo_casing/energy/temp - projectile_type = /obj/item/projectile/temp - select_name = "freeze" - e_cost = 250 - fire_sound = 'sound/weapons/pulse3.ogg' - -/obj/item/ammo_casing/energy/temp/hot - projectile_type = /obj/item/projectile/temp/hot - select_name = "bake" - -/obj/item/ammo_casing/energy/meteor - projectile_type = /obj/item/projectile/meteor - select_name = "goddamn meteor" - -/obj/item/ammo_casing/energy/disabler - projectile_type = /obj/item/projectile/beam/disabler - select_name = "disable" - e_cost = 50 - fire_sound = 'sound/weapons/taser2.ogg' - -/obj/item/ammo_casing/energy/plasma - projectile_type = /obj/item/projectile/plasma - select_name = "plasma burst" - fire_sound = 'sound/weapons/plasma_cutter.ogg' - delay = 15 - e_cost = 25 - -/obj/item/ammo_casing/energy/plasma/adv - projectile_type = /obj/item/projectile/plasma/adv - delay = 10 - e_cost = 10 - -/obj/item/ammo_casing/energy/wormhole - projectile_type = /obj/item/projectile/beam/wormhole - e_cost = 0 - fire_sound = 'sound/weapons/pulse3.ogg' - var/obj/item/weapon/gun/energy/wormhole_projector/gun = null - select_name = "blue" - -/obj/item/ammo_casing/energy/wormhole/orange - projectile_type = /obj/item/projectile/beam/wormhole/orange - select_name = "orange" - -/obj/item/ammo_casing/energy/bolt - projectile_type = /obj/item/projectile/energy/bolt - select_name = "bolt" - e_cost = 500 - fire_sound = 'sound/weapons/Genhit.ogg' - -/obj/item/ammo_casing/energy/bolt/halloween - projectile_type = /obj/item/projectile/energy/bolt/halloween - -/obj/item/ammo_casing/energy/bolt/large - projectile_type = /obj/item/projectile/energy/bolt/large - select_name = "heavy bolt" - -/obj/item/ammo_casing/energy/net - projectile_type = /obj/item/projectile/energy/net - select_name = "netting" - pellets = 6 - variance = 40 - -/obj/item/ammo_casing/energy/trap - projectile_type = /obj/item/projectile/energy/trap - select_name = "snare" - -/obj/item/ammo_casing/energy/instakill - projectile_type = /obj/item/projectile/beam/instakill - e_cost = 0 - select_name = "DESTROY" - -/obj/item/ammo_casing/energy/instakill/blue - projectile_type = /obj/item/projectile/beam/instakill/blue - -/obj/item/ammo_casing/energy/instakill/red - projectile_type = /obj/item/projectile/beam/instakill/red - -/obj/item/ammo_casing/energy/tesla_revolver - fire_sound = 'sound/magic/lightningbolt.ogg' - e_cost = 200 - select_name = "stun" - projectile_type = /obj/item/projectile/energy/tesla_revolver - -/obj/item/ammo_casing/energy/gravityrepulse - projectile_type = /obj/item/projectile/gravityrepulse - e_cost = 0 - fire_sound = 'sound/weapons/wave.ogg' - select_name = "repulse" - delay = 50 - var/obj/item/weapon/gun/energy/gravity_gun/gun = null - -/obj/item/ammo_casing/energy/gravityrepulse/New(var/obj/item/weapon/gun/energy/gravity_gun/G) - gun = G - -/obj/item/ammo_casing/energy/gravityattract - projectile_type = /obj/item/projectile/gravityattract - e_cost = 0 - fire_sound = 'sound/weapons/wave.ogg' - select_name = "attract" - delay = 50 - var/obj/item/weapon/gun/energy/gravity_gun/gun = null - - -/obj/item/ammo_casing/energy/gravityattract/New(var/obj/item/weapon/gun/energy/gravity_gun/G) - gun = G - -/obj/item/ammo_casing/energy/gravitychaos - projectile_type = /obj/item/projectile/gravitychaos - e_cost = 0 - fire_sound = 'sound/weapons/wave.ogg' - select_name = "chaos" - delay = 50 - var/obj/item/weapon/gun/energy/gravity_gun/gun = null - -/obj/item/ammo_casing/energy/gravitychaos/New(var/obj/item/weapon/gun/energy/gravity_gun/G) - gun = G - -/obj/item/ammo_casing/energy/plasma - projectile_type = /obj/item/projectile/plasma - select_name = "plasma burst" - fire_sound = 'sound/weapons/pulse.ogg' - -/obj/item/ammo_casing/energy/plasma/adv - projectile_type = /obj/item/projectile/plasma/adv +/obj/item/ammo_casing/energy + name = "energy weapon lens" + desc = "The part of the gun that makes the laser go pew" + caliber = "energy" + projectile_type = /obj/item/projectile/energy + var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. + var/select_name = "energy" + fire_sound = 'sound/weapons/Laser.ogg' + firing_effect_type = /obj/effect/overlay/temp/dir_setting/firing_effect/energy + +/obj/item/ammo_casing/energy/chameleon + e_cost = 0 + var/list/projectile_vars = list() + +/obj/item/ammo_casing/energy/chameleon/ready_proj() + . = ..() + if(!BB) + newshot() + for(var/V in projectile_vars) + if(BB.vars[V]) + BB.vars[V] = projectile_vars[V] + +/obj/item/ammo_casing/energy/laser + projectile_type = /obj/item/projectile/beam/laser + select_name = "kill" + +/obj/item/ammo_casing/energy/lasergun + projectile_type = /obj/item/projectile/beam/laser + e_cost = 83 + select_name = "kill" + +/obj/item/ammo_casing/energy/laser/hos + e_cost = 100 + +/obj/item/ammo_casing/energy/laser/practice + projectile_type = /obj/item/projectile/beam/practice + select_name = "practice" + +/obj/item/ammo_casing/energy/laser/scatter + projectile_type = /obj/item/projectile/beam/scatter + pellets = 5 + variance = 25 + select_name = "scatter" + +/obj/item/ammo_casing/energy/laser/scatter/disabler + projectile_type = /obj/item/projectile/beam/disabler + pellets = 3 + variance = 15 + +/obj/item/ammo_casing/energy/laser/heavy + projectile_type = /obj/item/projectile/beam/laser/heavylaser + select_name = "anti-vehicle" + fire_sound = 'sound/weapons/lasercannonfire.ogg' + +/obj/item/ammo_casing/energy/laser/pulse + projectile_type = /obj/item/projectile/beam/pulse + e_cost = 200 + select_name = "DESTROY" + fire_sound = 'sound/weapons/pulse.ogg' + +/obj/item/ammo_casing/energy/laser/bluetag + projectile_type = /obj/item/projectile/beam/lasertag/bluetag + select_name = "bluetag" + +/obj/item/ammo_casing/energy/laser/redtag + projectile_type = /obj/item/projectile/beam/lasertag/redtag + select_name = "redtag" + +/obj/item/ammo_casing/energy/xray + projectile_type = /obj/item/projectile/beam/xray + e_cost = 50 + fire_sound = 'sound/weapons/laser3.ogg' + +/obj/item/ammo_casing/energy/electrode + projectile_type = /obj/item/projectile/energy/electrode + select_name = "stun" + fire_sound = 'sound/weapons/taser.ogg' + e_cost = 200 + +/obj/item/ammo_casing/energy/electrode/gun + fire_sound = 'sound/weapons/gunshot.ogg' + e_cost = 100 + +/obj/item/ammo_casing/energy/electrode/hos + e_cost = 200 + +/obj/item/ammo_casing/energy/ion + projectile_type = /obj/item/projectile/ion + select_name = "ion" + fire_sound = 'sound/weapons/IonRifle.ogg' + +/obj/item/ammo_casing/energy/declone + projectile_type = /obj/item/projectile/energy/declone + select_name = "declone" + fire_sound = 'sound/weapons/pulse3.ogg' + +/obj/item/ammo_casing/energy/mindflayer + projectile_type = /obj/item/projectile/beam/mindflayer + select_name = "MINDFUCK" + fire_sound = 'sound/weapons/Laser.ogg' + +/obj/item/ammo_casing/energy/flora + fire_sound = 'sound/effects/stealthoff.ogg' + +/obj/item/ammo_casing/energy/flora/yield + projectile_type = /obj/item/projectile/energy/florayield + select_name = "yield" + +/obj/item/ammo_casing/energy/flora/mut + projectile_type = /obj/item/projectile/energy/floramut + select_name = "mutation" + +/obj/item/ammo_casing/energy/temp + projectile_type = /obj/item/projectile/temp + select_name = "freeze" + e_cost = 250 + fire_sound = 'sound/weapons/pulse3.ogg' + +/obj/item/ammo_casing/energy/temp/hot + projectile_type = /obj/item/projectile/temp/hot + select_name = "bake" + +/obj/item/ammo_casing/energy/meteor + projectile_type = /obj/item/projectile/meteor + select_name = "goddamn meteor" + +/obj/item/ammo_casing/energy/disabler + projectile_type = /obj/item/projectile/beam/disabler + select_name = "disable" + e_cost = 50 + fire_sound = 'sound/weapons/taser2.ogg' + +/obj/item/ammo_casing/energy/plasma + projectile_type = /obj/item/projectile/plasma + select_name = "plasma burst" + fire_sound = 'sound/weapons/plasma_cutter.ogg' + delay = 15 + e_cost = 25 + +/obj/item/ammo_casing/energy/plasma/adv + projectile_type = /obj/item/projectile/plasma/adv + delay = 10 + e_cost = 10 + +/obj/item/ammo_casing/energy/wormhole + projectile_type = /obj/item/projectile/beam/wormhole + e_cost = 0 + fire_sound = 'sound/weapons/pulse3.ogg' + var/obj/item/weapon/gun/energy/wormhole_projector/gun = null + select_name = "blue" + +/obj/item/ammo_casing/energy/wormhole/orange + projectile_type = /obj/item/projectile/beam/wormhole/orange + select_name = "orange" + +/obj/item/ammo_casing/energy/bolt + projectile_type = /obj/item/projectile/energy/bolt + select_name = "bolt" + e_cost = 500 + fire_sound = 'sound/weapons/Genhit.ogg' + +/obj/item/ammo_casing/energy/bolt/halloween + projectile_type = /obj/item/projectile/energy/bolt/halloween + +/obj/item/ammo_casing/energy/bolt/large + projectile_type = /obj/item/projectile/energy/bolt/large + select_name = "heavy bolt" + +/obj/item/ammo_casing/energy/net + projectile_type = /obj/item/projectile/energy/net + select_name = "netting" + pellets = 6 + variance = 40 + +/obj/item/ammo_casing/energy/trap + projectile_type = /obj/item/projectile/energy/trap + select_name = "snare" + +/obj/item/ammo_casing/energy/instakill + projectile_type = /obj/item/projectile/beam/instakill + e_cost = 0 + select_name = "DESTROY" + +/obj/item/ammo_casing/energy/instakill/blue + projectile_type = /obj/item/projectile/beam/instakill/blue + +/obj/item/ammo_casing/energy/instakill/red + projectile_type = /obj/item/projectile/beam/instakill/red + +/obj/item/ammo_casing/energy/tesla_revolver + fire_sound = 'sound/magic/lightningbolt.ogg' + e_cost = 200 + select_name = "stun" + projectile_type = /obj/item/projectile/energy/tesla/revolver + +/obj/item/ammo_casing/energy/gravityrepulse + projectile_type = /obj/item/projectile/gravityrepulse + e_cost = 0 + fire_sound = 'sound/weapons/wave.ogg' + select_name = "repulse" + delay = 50 + var/obj/item/weapon/gun/energy/gravity_gun/gun = null + +/obj/item/ammo_casing/energy/gravityrepulse/New(var/obj/item/weapon/gun/energy/gravity_gun/G) + gun = G + +/obj/item/ammo_casing/energy/gravityattract + projectile_type = /obj/item/projectile/gravityattract + e_cost = 0 + fire_sound = 'sound/weapons/wave.ogg' + select_name = "attract" + delay = 50 + var/obj/item/weapon/gun/energy/gravity_gun/gun = null + + +/obj/item/ammo_casing/energy/gravityattract/New(var/obj/item/weapon/gun/energy/gravity_gun/G) + gun = G + +/obj/item/ammo_casing/energy/gravitychaos + projectile_type = /obj/item/projectile/gravitychaos + e_cost = 0 + fire_sound = 'sound/weapons/wave.ogg' + select_name = "chaos" + delay = 50 + var/obj/item/weapon/gun/energy/gravity_gun/gun = null + +/obj/item/ammo_casing/energy/gravitychaos/New(var/obj/item/weapon/gun/energy/gravity_gun/G) + gun = G + +/obj/item/ammo_casing/energy/plasma + projectile_type = /obj/item/projectile/plasma + select_name = "plasma burst" + fire_sound = 'sound/weapons/pulse.ogg' + +/obj/item/ammo_casing/energy/plasma/adv + projectile_type = /obj/item/projectile/plasma/adv diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 69a9ca2a8a..951b5aeb62 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -19,15 +19,12 @@ /obj/item/weapon/gun/energy/pulse/prize/New() . = ..() GLOB.poi_list |= src - var/msg = "A pulse rifle prize has been created at ([x],[y],[z] - (\ - \ - JMP)" + var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(src)]" message_admins(msg) log_game(msg) - notify_ghosts("Someone won a pulse rifle as a prize!", source = src, - action = NOTIFY_ORBIT) + notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT) /obj/item/weapon/gun/energy/pulse/prize/Destroy() GLOB.poi_list -= src diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index dceed5b438..3dedaa9ae1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,308 +1,313 @@ -/obj/item/projectile - name = "projectile" - icon = 'icons/obj/projectiles.dmi' - icon_state = "bullet" - density = 0 - anchored = 1 - flags = ABSTRACT - pass_flags = PASSTABLE - mouse_opacity = 0 - hitsound = 'sound/weapons/pierce.ogg' - var/hitsound_wall = "" - - resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/def_zone = "" //Aiming at - var/mob/firer = null//Who shot it - var/suppressed = 0 //Attack message - var/yo = null - var/xo = null - var/current = null - var/atom/original = null // the original target clicked - var/turf/starting = null // the projectile's starting turf - var/list/permutated = list() // we've passed through these atoms, don't try to hit them again - var/paused = FALSE //for suspending the projectile midair - var/p_x = 16 - var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center - var/speed = 0.8 //Amount of deciseconds it takes for projectile to travel - var/Angle = 0 - var/spread = 0 //amount (in degrees) of projectile spread - var/legacy = 0 //legacy projectile system - animate_movement = 0 //Use SLIDE_STEPS in conjunction with legacy - - var/damage = 10 - var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here - var/nodamage = 0 //Determines if the projectile will skip any damage inflictions - var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb - var/projectile_type = /obj/item/projectile - var/range = 50 //This will de-increment every step. When 0, it will delete the projectile. - //Effects - var/stun = 0 - var/weaken = 0 - var/paralyze = 0 - var/irradiate = 0 - var/stutter = 0 - var/slur = 0 - var/eyeblur = 0 - var/drowsy = 0 - var/stamina = 0 - var/jitter = 0 - var/forcedodge = 0 //to pass through everything - var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all. - var/impact_effect_type //what type of impact effect to show when hitting something - var/log_override = FALSE //is this type spammed enough to not log? (KAs) - -/obj/item/projectile/New() - permutated = list() - return ..() - -/obj/item/projectile/proc/Range() - range-- - if(range <= 0 && loc) - on_range() - -/obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range - qdel(src) - -//to get the correct limb (if any) for the projectile hit message -/mob/living/proc/check_limb_hit(hit_zone) - if(has_limbs) - return hit_zone - -/mob/living/carbon/check_limb_hit(hit_zone) - if(get_bodypart(hit_zone)) - return hit_zone - else //when a limb is missing the damage is actually passed to the chest - return "chest" - -/obj/item/projectile/proc/prehit(atom/target) - return - -/obj/item/projectile/proc/on_hit(atom/target, blocked = 0) - var/turf/target_loca = get_turf(target) - if(!isliving(target)) - if(impact_effect_type) - new impact_effect_type(target_loca, target, src) - return 0 - var/mob/living/L = target - if(blocked != 100) // not completely blocked - if(damage && L.blood_volume && damage_type == BRUTE) - var/splatter_dir = dir - if(starting) - splatter_dir = get_dir(starting, target_loca) - if(isalien(L)) - new /obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir) - else - new /obj/effect/overlay/temp/dir_setting/bloodsplatter(target_loca, splatter_dir) - if(prob(33)) - L.add_splatter_floor(target_loca) - else if(impact_effect_type) - new impact_effect_type(target_loca, target, src) - - var/organ_hit_text = "" - var/limb_hit = L.check_limb_hit(def_zone)//to get the correct message info. - if(limb_hit) - organ_hit_text = " in \the [parse_zone(limb_hit)]" - if(suppressed) - playsound(loc, hitsound, 5, 1, -1) - to_chat(L, "You're shot by \a [src][organ_hit_text]!") - else - if(hitsound) - var/volume = vol_by_damage() - playsound(loc, hitsound, volume, 1, -1) - L.visible_message("[L] is hit by \a [src][organ_hit_text]!", \ - "[L] is hit by \a [src][organ_hit_text]!", null, COMBAT_MESSAGE_RANGE) - L.on_hit(src) - - var/reagent_note - if(reagents && reagents.reagent_list) - reagent_note = " REAGENTS:" - for(var/datum/reagent/R in reagents.reagent_list) - reagent_note += R.id + " (" - reagent_note += num2text(R.volume) + ") " - - add_logs(firer, L, "shot", src, reagent_note) - return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter) - -/obj/item/projectile/proc/vol_by_damage() - if(src.damage) - return Clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then clamp the value between 30 and 100 - else - return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume - -/obj/item/projectile/Bump(atom/A, yes) - if(!yes) //prevents double bumps. - return - if(firer) - if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech - loc = A.loc - return 0 - - var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. - def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use. - - if(isturf(A) && hitsound_wall) - var/volume = Clamp(vol_by_damage() + 20, 0, 100) - if(suppressed) - volume = 5 - playsound(loc, hitsound_wall, volume, 1, -1) - - var/turf/target_turf = get_turf(A) - - prehit(A) - var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null - if(permutation == -1 || forcedodge)// the bullet passes through a dense object! - loc = target_turf - if(A) - permutated.Add(A) - return 0 - else - if(A && A.density && !ismob(A) && !(A.flags & ON_BORDER)) //if we hit a dense non-border obj or dense turf then we also hit one of the mobs on that tile. - var/list/mobs_list = list() - for(var/mob/living/L in target_turf) - mobs_list += L - if(mobs_list.len) - var/mob/living/picked_mob = pick(mobs_list) - prehit(picked_mob) - picked_mob.bullet_act(src, def_zone) - qdel(src) - -/obj/item/projectile/Process_Spacemove(var/movement_dir = 0) - return 1 //Bullets don't drift in space - -/obj/item/projectile/proc/fire(setAngle, atom/direct_target) - if(!log_override && firer && original) - add_logs(firer, original, "fired at", src, " [get_area(src)]") - if(direct_target) - prehit(direct_target) - direct_target.bullet_act(src, def_zone) - qdel(src) - return - if(setAngle) - Angle = setAngle - if(!legacy) //new projectiles - set waitfor = 0 - var/next_run = world.time - while(loc) - if(paused) - next_run = world.time - sleep(1) - continue - - if((!( current ) || loc == current)) - current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) - - if(!Angle) - Angle=round(Get_Angle(src,current)) - if(spread) - Angle += (rand() - 0.5) * spread - var/matrix/M = new - M.Turn(Angle) - transform = M - - var/Pixel_x=round((sin(Angle)+16*sin(Angle)*2), 1) //round() is a floor operation when only one argument is supplied, we don't want that here - var/Pixel_y=round((cos(Angle)+16*cos(Angle)*2), 1) - var/pixel_x_offset = pixel_x + Pixel_x - var/pixel_y_offset = pixel_y + Pixel_y - var/new_x = x - var/new_y = y - - while(pixel_x_offset > 16) - pixel_x_offset -= 32 - pixel_x -= 32 - new_x++// x++ - while(pixel_x_offset < -16) - pixel_x_offset += 32 - pixel_x += 32 - new_x-- - - while(pixel_y_offset > 16) - pixel_y_offset -= 32 - pixel_y -= 32 - new_y++ - while(pixel_y_offset < -16) - pixel_y_offset += 32 - pixel_y += 32 - new_y-- - - step_towards(src, locate(new_x, new_y, z)) - next_run += max(world.tick_lag, speed) - var/delay = next_run - world.time - if(delay <= world.tick_lag*2) - pixel_x = pixel_x_offset - pixel_y = pixel_y_offset - else - animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (delay <= 3 ? delay - 1 : delay)), flags = ANIMATION_END_NOW) - - if(original && (original.layer>=2.75) || ismob(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original, 1) - Range() - if (delay > 0) - sleep(delay) - - else //old projectile system - set waitfor = 0 - while(loc) - if(!paused) - if((!( current ) || loc == current)) - current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) - step_towards(src, current) - if(original && (original.layer>=2.75) || ismob(original)) - if(loc == get_turf(original)) - if(!(original in permutated)) - Bump(original, 1) - Range() - sleep(config.run_speed * 0.9) - - -/obj/item/projectile/proc/preparePixelProjectile(atom/target, var/turf/targloc, mob/living/user, params, spread) - var/turf/curloc = get_turf(user) - src.loc = get_turf(user) - src.starting = get_turf(user) - src.current = curloc - src.yo = targloc.y - curloc.y - src.xo = targloc.x - curloc.x - - if(params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - src.p_x = text2num(mouse_control["icon-x"]) - if(mouse_control["icon-y"]) - src.p_y = text2num(mouse_control["icon-y"]) - if(mouse_control["screen-loc"]) - //Split screen-loc up into X+Pixel_X and Y+Pixel_Y - var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",") - - //Split X+Pixel_X up into list(X, Pixel_X) - var/list/screen_loc_X = splittext(screen_loc_params[1],":") - - //Split Y+Pixel_Y up into list(Y, Pixel_Y) - var/list/screen_loc_Y = splittext(screen_loc_params[2],":") - // to_chat(world, "X: [screen_loc_X[1]] PixelX: [screen_loc_X[2]] / Y: [screen_loc_Y[1]] PixelY: [screen_loc_Y[2]]") - var/x = text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32 - var/y = text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32 - - //Calculate the "resolution" of screen based on client's view and world's icon size. This will work if the user can view more tiles than average. - var/screenview = (user.client.view * 2 + 1) * world.icon_size //Refer to http://www.byond.com/docs/ref/info.html#/client/var/view for mad maths - - var/ox = round(screenview/2) //"origin" x - var/oy = round(screenview/2) //"origin" y - // to_chat(world, "Pixel position: [x] [y]") - var/angle = Atan2(y - oy, x - ox) - // to_chat(world, "Angle: [angle]") - src.Angle = angle - if(spread) - src.Angle += spread - - -/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. - ..() - if(isliving(AM) && AM.density && !checkpass(PASSMOB)) - Bump(AM, 1) - -/obj/item/projectile/Destroy() - return ..() - -/obj/item/projectile/experience_pressure_difference() - return +/obj/item/projectile + name = "projectile" + icon = 'icons/obj/projectiles.dmi' + icon_state = "bullet" + density = 0 + anchored = 1 + flags = ABSTRACT + pass_flags = PASSTABLE + mouse_opacity = 0 + hitsound = 'sound/weapons/pierce.ogg' + var/hitsound_wall = "" + + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + var/def_zone = "" //Aiming at + var/mob/firer = null//Who shot it + var/suppressed = 0 //Attack message + var/yo = null + var/xo = null + var/current = null + var/atom/original = null // the original target clicked + var/turf/starting = null // the projectile's starting turf + var/list/permutated = list() // we've passed through these atoms, don't try to hit them again + var/paused = FALSE //for suspending the projectile midair + var/p_x = 16 + var/p_y = 16 // the pixel location of the tile that the player clicked. Default is the center + var/speed = 0.8 //Amount of deciseconds it takes for projectile to travel + var/Angle = 0 + var/spread = 0 //amount (in degrees) of projectile spread + var/legacy = 0 //legacy projectile system + animate_movement = 0 //Use SLIDE_STEPS in conjunction with legacy + + var/damage = 10 + var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here + var/nodamage = 0 //Determines if the projectile will skip any damage inflictions + var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb + var/projectile_type = /obj/item/projectile + var/range = 50 //This will de-increment every step. When 0, it will delete the projectile. + //Effects + var/stun = 0 + var/weaken = 0 + var/paralyze = 0 + var/irradiate = 0 + var/stutter = 0 + var/slur = 0 + var/eyeblur = 0 + var/drowsy = 0 + var/stamina = 0 + var/jitter = 0 + var/forcedodge = 0 //to pass through everything + var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all. + var/impact_effect_type //what type of impact effect to show when hitting something + var/log_override = FALSE //is this type spammed enough to not log? (KAs) + +/obj/item/projectile/New() + permutated = list() + return ..() + +/obj/item/projectile/proc/Range() + range-- + if(range <= 0 && loc) + on_range() + +/obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range + qdel(src) + +//to get the correct limb (if any) for the projectile hit message +/mob/living/proc/check_limb_hit(hit_zone) + if(has_limbs) + return hit_zone + +/mob/living/carbon/check_limb_hit(hit_zone) + if(get_bodypart(hit_zone)) + return hit_zone + else //when a limb is missing the damage is actually passed to the chest + return "chest" + +/obj/item/projectile/proc/prehit(atom/target) + return + +/obj/item/projectile/proc/on_hit(atom/target, blocked = 0) + var/turf/target_loca = get_turf(target) + if(!isliving(target)) + if(impact_effect_type) + new impact_effect_type(target_loca, target, src) + return 0 + var/mob/living/L = target + if(blocked != 100) // not completely blocked + if(damage && L.blood_volume && damage_type == BRUTE) + var/splatter_dir = dir + if(starting) + splatter_dir = get_dir(starting, target_loca) + if(isalien(L)) + new /obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter(target_loca, splatter_dir) + else + new /obj/effect/overlay/temp/dir_setting/bloodsplatter(target_loca, splatter_dir) + if(prob(33)) + L.add_splatter_floor(target_loca) + else if(impact_effect_type) + new impact_effect_type(target_loca, target, src) + + var/organ_hit_text = "" + var/limb_hit = L.check_limb_hit(def_zone)//to get the correct message info. + if(limb_hit) + organ_hit_text = " in \the [parse_zone(limb_hit)]" + if(suppressed) + playsound(loc, hitsound, 5, 1, -1) + to_chat(L, "You're shot by \a [src][organ_hit_text]!") + else + if(hitsound) + var/volume = vol_by_damage() + playsound(loc, hitsound, volume, 1, -1) + L.visible_message("[L] is hit by \a [src][organ_hit_text]!", \ + "[L] is hit by \a [src][organ_hit_text]!", null, COMBAT_MESSAGE_RANGE) + L.on_hit(src) + + var/reagent_note + if(reagents && reagents.reagent_list) + reagent_note = " REAGENTS:" + for(var/datum/reagent/R in reagents.reagent_list) + reagent_note += R.id + " (" + reagent_note += num2text(R.volume) + ") " + + add_logs(firer, L, "shot", src, reagent_note) + return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter) + +/obj/item/projectile/proc/vol_by_damage() + if(src.damage) + return Clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then clamp the value between 30 and 100 + else + return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume + +/obj/item/projectile/Bump(atom/A, yes) + if(!yes) //prevents double bumps. + return + if(firer) + if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech + loc = A.loc + return 0 + + var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. + def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use. + + if(isturf(A) && hitsound_wall) + var/volume = Clamp(vol_by_damage() + 20, 0, 100) + if(suppressed) + volume = 5 + playsound(loc, hitsound_wall, volume, 1, -1) + + var/turf/target_turf = get_turf(A) + + prehit(A) + var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null + if(permutation == -1 || forcedodge)// the bullet passes through a dense object! + loc = target_turf + if(A) + permutated.Add(A) + return 0 + else + if(A && A.density && !ismob(A) && !(A.flags & ON_BORDER)) //if we hit a dense non-border obj or dense turf then we also hit one of the mobs on that tile. + var/list/mobs_list = list() + for(var/mob/living/L in target_turf) + mobs_list += L + if(mobs_list.len) + var/mob/living/picked_mob = pick(mobs_list) + prehit(picked_mob) + picked_mob.bullet_act(src, def_zone) + qdel(src) + +/obj/item/projectile/Process_Spacemove(var/movement_dir = 0) + return 1 //Bullets don't drift in space + +/obj/item/projectile/proc/fire(setAngle, atom/direct_target) + if(!log_override && firer && original) + add_logs(firer, original, "fired at", src, " [get_area(src)]") + if(direct_target) + prehit(direct_target) + direct_target.bullet_act(src, def_zone) + qdel(src) + return + if(setAngle) + Angle = setAngle + var/old_pixel_x = pixel_x + var/old_pixel_y = pixel_y + if(!legacy) //new projectiles + set waitfor = 0 + var/next_run = world.time + while(loc) + if(paused) + next_run = world.time + sleep(1) + continue + + if((!( current ) || loc == current)) + current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) + + if(!Angle) + Angle=round(Get_Angle(src,current)) + if(spread) + Angle += (rand() - 0.5) * spread + var/matrix/M = new + M.Turn(Angle) + transform = M + + var/Pixel_x=round((sin(Angle)+16*sin(Angle)*2), 1) //round() is a floor operation when only one argument is supplied, we don't want that here + var/Pixel_y=round((cos(Angle)+16*cos(Angle)*2), 1) + var/pixel_x_offset = old_pixel_x + Pixel_x + var/pixel_y_offset = old_pixel_y + Pixel_y + var/new_x = x + var/new_y = y + + while(pixel_x_offset > 16) + pixel_x_offset -= 32 + old_pixel_x -= 32 + new_x++// x++ + while(pixel_x_offset < -16) + pixel_x_offset += 32 + old_pixel_x += 32 + new_x-- + while(pixel_y_offset > 16) + pixel_y_offset -= 32 + old_pixel_y -= 32 + new_y++ + while(pixel_y_offset < -16) + pixel_y_offset += 32 + old_pixel_y += 32 + new_y-- + + pixel_x = old_pixel_x + pixel_y = old_pixel_y + step_towards(src, locate(new_x, new_y, z)) + next_run += max(world.tick_lag, speed) + var/delay = next_run - world.time + if(delay <= world.tick_lag*2) + pixel_x = pixel_x_offset + pixel_y = pixel_y_offset + else + animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (delay <= 3 ? delay - 1 : delay)), flags = ANIMATION_END_NOW) + old_pixel_x = pixel_x_offset + old_pixel_y = pixel_y_offset + + if(original && (original.layer>=2.75) || ismob(original)) + if(loc == get_turf(original)) + if(!(original in permutated)) + Bump(original, 1) + Range() + if (delay > 0) + sleep(delay) + + else //old projectile system + set waitfor = 0 + while(loc) + if(!paused) + if((!( current ) || loc == current)) + current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z) + step_towards(src, current) + if(original && (original.layer>=2.75) || ismob(original)) + if(loc == get_turf(original)) + if(!(original in permutated)) + Bump(original, 1) + Range() + sleep(config.run_speed * 0.9) + + +/obj/item/projectile/proc/preparePixelProjectile(atom/target, var/turf/targloc, mob/living/user, params, spread) + var/turf/curloc = get_turf(user) + src.loc = get_turf(user) + src.starting = get_turf(user) + src.current = curloc + src.yo = targloc.y - curloc.y + src.xo = targloc.x - curloc.x + + if(params) + var/list/mouse_control = params2list(params) + if(mouse_control["icon-x"]) + src.p_x = text2num(mouse_control["icon-x"]) + if(mouse_control["icon-y"]) + src.p_y = text2num(mouse_control["icon-y"]) + if(mouse_control["screen-loc"]) + //Split screen-loc up into X+Pixel_X and Y+Pixel_Y + var/list/screen_loc_params = splittext(mouse_control["screen-loc"], ",") + + //Split X+Pixel_X up into list(X, Pixel_X) + var/list/screen_loc_X = splittext(screen_loc_params[1],":") + + //Split Y+Pixel_Y up into list(Y, Pixel_Y) + var/list/screen_loc_Y = splittext(screen_loc_params[2],":") + // to_chat(world, "X: [screen_loc_X[1]] PixelX: [screen_loc_X[2]] / Y: [screen_loc_Y[1]] PixelY: [screen_loc_Y[2]]") + var/x = text2num(screen_loc_X[1]) * 32 + text2num(screen_loc_X[2]) - 32 + var/y = text2num(screen_loc_Y[1]) * 32 + text2num(screen_loc_Y[2]) - 32 + + //Calculate the "resolution" of screen based on client's view and world's icon size. This will work if the user can view more tiles than average. + var/screenview = (user.client.view * 2 + 1) * world.icon_size //Refer to http://www.byond.com/docs/ref/info.html#/client/var/view for mad maths + + var/ox = round(screenview/2) //"origin" x + var/oy = round(screenview/2) //"origin" y + // to_chat(world, "Pixel position: [x] [y]") + var/angle = Atan2(y - oy, x - ox) + // to_chat(world, "Angle: [angle]") + src.Angle = angle + if(spread) + src.Angle += spread + + +/obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. + ..() + if(isliving(AM) && AM.density && !checkpass(PASSMOB)) + Bump(AM, 1) + +/obj/item/projectile/Destroy() + return ..() + +/obj/item/projectile/experience_pressure_difference() + return diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index c1a67f4c81..974ea935f2 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -159,44 +159,34 @@ /obj/item/projectile/energy/bolt/large damage = 20 -/obj/item/projectile/energy/tesla_revolver +/obj/item/projectile/energy/tesla name = "tesla bolt" icon_state = "tesla_projectile" impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser var/chain -/obj/item/projectile/energy/tesla_revolver/fire(setAngle) +/obj/item/projectile/energy/tesla/fire(setAngle) if(firer) chain = firer.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) ..() -/obj/item/projectile/energy/tesla_revolver/on_hit(atom/target) - . = ..() - if(isliving(target)) - tesla_zap(src, 3, 10000) - qdel(src) - -/obj/item/projectile/energy/tesla_revolver/Destroy() +/obj/item/projectile/energy/tesla/Destroy() qdel(chain) return ..() +/obj/item/projectile/energy/tesla/revolver + name = "energy orb" -/obj/item/projectile/energy/tesla_cannon - name = "tesla bolt" - icon_state = "tesla_projectile" - impact_effect_type = /obj/effect/overlay/temp/impact_effect/blue_laser - var/chain +/obj/item/projectile/energy/tesla/revolver/on_hit(atom/target) + . = ..() + if(isliving(target)) + tesla_zap(target, 3, 10000) + qdel(src) -/obj/item/projectile/energy/tesla_cannon/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) - ..() +/obj/item/projectile/energy/tesla/cannon + name = "tesla orb" -/obj/item/projectile/energy/tesla_cannon/on_hit(atom/target) +/obj/item/projectile/energy/tesla/cannon/on_hit(atom/target) . = ..() - tesla_zap(src, 3, 10000, explosive = FALSE, stun_mobs = FALSE) + tesla_zap(target, 3, 10000, explosive = FALSE, stun_mobs = FALSE) qdel(src) - -/obj/item/projectile/energy/tesla_cannon/Destroy() - qdel(chain) - return ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index da1eb90685..99056eb1dc 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -367,3 +367,9 @@ desc = "Creates and dispenses mutagen." dispensable_reagents = list("mutagen") emagged_reagents = list("plasma") + + +/obj/machinery/chem_dispenser/mutagensaltpeter + name = "mutagen and saltpeter dispenser" + desc = "Creates and dispenses mutagen and even saltpeter." + dispensable_reagents = list("mutagen", "saltpetre") diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 2dbc0ff1c2..b929337a13 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -10,7 +10,7 @@ active_power_usage = 100 pass_flags = PASSTABLE resistance_flags = ACID_PROOF - var/operating = 0 + var/operating = FALSE var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 var/list/blend_items = list ( @@ -38,7 +38,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/oat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/rice = list("rice" = -5), - /obj/item/weapon/reagent_containers/food/snacks/donut/New = list("sprinkles" = -2, "sugar" = 1), + /obj/item/weapon/reagent_containers/food/snacks/donut = list("sprinkles" = -2, "sugar" = 1), /obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), /obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), /obj/item/weapon/reagent_containers/food/snacks/egg = list("eggyolk" = -5), @@ -220,9 +220,12 @@ [processing_chamber]
[beaker_contents]
"} - if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Grind the reagents
" - dat += "Juice the reagents

" + if (is_beaker_ready) + if(!is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + dat += "Grind the reagents
" + dat += "Juice the reagents

" + else if (beaker.reagents.total_volume) + dat += "Mix the reagents

" if(holdingitems && holdingitems.len > 0) dat += "Eject the reagents
" if (beaker) @@ -248,6 +251,8 @@ grind() if("juice") juice() + if("mix") + mix() if("eject") eject() if ("detach") @@ -327,11 +332,11 @@ playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1) var/offset = prob(50) ? -2 : 2 animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking - operating = 1 + operating = TRUE updateUsrDialog() spawn(50) pixel_x = initial(pixel_x) //return to its spot after shaking - operating = 0 + operating = FALSE updateUsrDialog() //Snacks @@ -365,11 +370,11 @@ playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) var/offset = prob(50) ? -2 : 2 animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking - operating = 1 + operating = TRUE updateUsrDialog() spawn(60) pixel_x = initial(pixel_x) //return to its spot after shaking - operating = 0 + operating = FALSE updateUsrDialog() //Snacks and Plants @@ -467,3 +472,33 @@ break beaker.reagents.add_reagent(r_id, min(O.reagent_contents[r_id], space)) remove_object(O) + +/obj/machinery/reagentgrinder/proc/mix() + + //For butter and other things that would change upon shaking or mixing + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if (!beaker) + return + playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking + operating = TRUE + updateUsrDialog() + addtimer(CALLBACK(src, /obj/machinery/reagentgrinder/proc/mix_complete), 50) + +/obj/machinery/reagentgrinder/proc/mix_complete() + pixel_x = initial(pixel_x) //return to its spot after shaking + operating = FALSE + updateUsrDialog() + if (beaker.reagents.total_volume) + //Recipe to make Butter + while(beaker.reagents.get_reagent_amount("milk") >= 15) + beaker.reagents.remove_reagent("milk", 15) + new /obj/item/weapon/reagent_containers/food/snacks/butter(src.loc) + //Recipe to make Mayonnaise + if (beaker.reagents.has_reagent("eggyolk")) + var/amount = beaker.reagents.get_reagent_amount("eggyolk") + beaker.reagents.remove_reagent("eggyolk", amount) + beaker.reagents.add_reagent("mayonnaise", amount) \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 23836e866d..31ec27fb79 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -966,7 +966,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Only for the experienced. You think you see sand floating in the glass." /datum/reagent/consumable/ethanol/bananahonk - name = "Banana Mama" + name = "Banana Honk" id = "bananahonk" description = "A drink from Clown Heaven." nutriment_factor = 1 * REAGENTS_METABOLISM diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 442772fea8..550b27cd11 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -29,16 +29,11 @@ var/brute_heal = 1 var/burn_heal = 0 - var/blood_gain = 0.4 /datum/reagent/consumable/nutriment/on_mob_life(mob/living/M) if(prob(50)) M.heal_bodypart_damage(brute_heal,burn_heal, 0) . = 1 - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(C.blood_volume < BLOOD_VOLUME_NORMAL) - C.blood_volume += blood_gain ..() /datum/reagent/consumable/nutriment/on_new(list/supplied_data) @@ -60,7 +55,10 @@ // data for nutriment is one or more (flavour -> ratio) // where all the ratio values adds up to 1 - var/list/taste_amounts = data.Copy() + var/list/taste_amounts = list() + if(data) + taste_amounts = data.Copy() + counterlist_scale(taste_amounts, volume) var/list/other_taste_amounts = newdata.Copy() @@ -79,7 +77,6 @@ brute_heal = 1 burn_heal = 1 - blood_gain = 0.5 /datum/reagent/consumable/nutriment/vitamin/on_mob_life(mob/living/M) if(M.satiety < 600) @@ -513,17 +510,27 @@ /datum/reagent/consumable/honey name = "honey" id = "honey" - description = "Sweet sweet honey, decays into sugar." + description = "Sweet sweet honey, decays into sugar and has natural healing properties." color = "#d3a308" nutriment_factor = 15 * REAGENTS_METABOLISM + metabolization_rate = 1 * REAGENTS_METABOLISM taste_description = "sweetness" /datum/reagent/consumable/honey/on_mob_life(mob/living/M) M.reagents.add_reagent("sugar",3) - if(prob(20)) - M.heal_bodypart_damage(3,1) + if(prob(55)) + M.adjustBruteLoss(-1*REM, 0) + M.adjustFireLoss(-1*REM, 0) + M.adjustOxyLoss(-1*REM, 0) + M.adjustToxLoss(-1*REM, 0) ..() +/datum/reagent/consumable/mayonnaise + name = "Mayonnaise" + id = "mayonnaise" + description = "An white and oily mixture of mixed egg yolks." + color = "#DFDFDF" + taste_description = "mayonnaise" ////Lavaland Flora Reagents//// diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 500147d233..6d38e85ca8 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -347,10 +347,9 @@ /datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) if(method in list(INGEST, VAPOR, INJECT)) - M.Stun(4) - M.Weaken(4) + M.nutrition -= 5 if(show_message) - to_chat(M, "Your stomach agonizingly cramps!") + to_chat(M, "Your stomach feels empty and cramps!") else var/mob/living/carbon/C = M for(var/s in C.surgeries) @@ -962,8 +961,7 @@ /datum/reagent/medicine/antitoxin/on_mob_life(mob/living/M) M.adjustToxLoss(-2*REM, 0) for(var/datum/reagent/toxin/R in M.reagents.reagent_list) - if(R != src) - M.reagents.remove_reagent(R.id,1) + M.reagents.remove_reagent(R.id,1) ..() . = 1 diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index c25a1d050d..f359a1fc37 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -189,7 +189,7 @@ /datum/reagent/water/holywater/on_mob_life(mob/living/M) if(!data) data = 1 data++ - M.jitteriness = max(M.jitteriness-5,0) + M.jitteriness = min(M.jitteriness+4,10) if(data >= 30) // 12 units, 54 seconds @ metabolism 0.4 units & tick rate 1.8 sec if(!M.stuttering) M.stuttering = 1 @@ -212,9 +212,9 @@ SSticker.mode.remove_cultist(M.mind, 1, 1) else if(is_servant_of_ratvar(M)) remove_servant_of_ratvar(M) - holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? M.jitteriness = 0 M.stuttering = 0 + holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? return holder.remove_reagent(id, 0.4) //fixed consumption to prevent balancing going out of whack @@ -658,7 +658,7 @@ taste_mult = 0 // apparently tasteless. /datum/reagent/mercury/on_mob_life(mob/living/M) - if(M.canmove && isspaceturf(M.loc)) + if(M.canmove && !isspaceturf(M.loc)) step(M, pick(GLOB.cardinal)) if(prob(5)) M.emote(pick("twitch","drool","moan")) @@ -738,7 +738,7 @@ taste_description = "metal" /datum/reagent/lithium/on_mob_life(mob/living/M) - if(M.canmove && isspaceturf(M.loc)) + if(M.canmove && !isspaceturf(M.loc)) step(M, pick(GLOB.cardinal)) if(prob(5)) M.emote(pick("twitch","drool","moan")) @@ -1110,8 +1110,9 @@ id = "nitrous_oxide" description = "A potent oxidizer used as fuel in rockets and as an anaesthetic during surgery." reagent_state = LIQUID + metabolization_rate = 1.5 * REAGENTS_METABOLISM color = "#808080" - taste_description = "numbness" + taste_description = "sweetness" /datum/reagent/nitrous_oxide/reaction_obj(obj/O, reac_volume) if((!O) || (!reac_volume)) @@ -1122,7 +1123,19 @@ if(istype(T)) T.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[T20C]") - +/datum/reagent/nitrous_oxide/reaction_mob(mob/M, method=TOUCH, reac_volume) + if(method == VAPOR) + M.drowsyness += max(round(reac_volume, 1), 2) + +/datum/reagent/nitrous_oxide/on_mob_life(mob/living/M) + M.drowsyness += 2 + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.blood_volume = max(H.blood_volume - 2.5, 0) + if(prob(20)) + M.losebreath += 2 + M.confused = min(M.confused + 2, 5) + ..() /////////////////////////Coloured Crayon Powder//////////////////////////// //For colouring in /proc/mix_color_from_reagents @@ -1533,7 +1546,9 @@ /datum/reagent/romerol/on_mob_life(mob/living/carbon/human/H) // Silently add the zombie infection organ to be activated upon death - new /obj/item/organ/zombie_infection(H) + if(!H.getorganslot("zombie_infection")) + var/obj/item/organ/zombie_infection/ZI = new() + ZI.Insert(H) ..() /datum/reagent/growthserum @@ -1568,6 +1583,13 @@ M.update_transform() ..() +/datum/reagent/plastic_polymers + name = "plastic polymers" + id = "plastic_polymers" + description = "the petroleum based components of plastic." + color = "#f7eded" + taste_description = "plastic" + /datum/reagent/glitter name = "generic glitter" id = "glitter" diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 528124f84c..cedec9941b 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -648,6 +648,34 @@ M.losebreath += 5 return ..() +/datum/reagent/toxin/spewium + name = "Spewium" + id = "spewium" + description = "A powerful emetic, causes uncontrollable vomiting. May result in vomiting organs at high doses." + reagent_state = LIQUID + color = "#2f6617" //A sickly green color + metabolization_rate = REAGENTS_METABOLISM + overdose_threshold = 29 + toxpwr = 0 + taste_description = "vomit" + +/datum/reagent/toxin/spewium/on_mob_life(mob/living/M) + .=..() + if(current_cycle >=11 && prob(min(50,current_cycle)) && ishuman(M)) + var/mob/living/carbon/human/H = M + H.vomit(lost_nutrition = 10, blood = prob(10), stun = prob(50), distance = rand(0,4), message = TRUE, toxic = prob(30)) + for(var/datum/reagent/toxin/R in M.reagents.reagent_list) + if(R != src) + H.reagents.remove_reagent(R.id,1) + +/datum/reagent/toxin/spewium/overdose_process(mob/living/M) + . = ..() + if(current_cycle >=33 && prob(15) && ishuman(M)) + var/mob/living/carbon/human/H = M + H.spew_organ() + H.vomit(lost_nutrition = 0, blood = 1, stun = 1, distance = 4) + to_chat(H, "You feel something lumpy come up as you vomit.") + /datum/reagent/toxin/curare name = "Curare" id = "curare" diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 9e0bb2d0e4..c13ff096e4 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -36,12 +36,12 @@ var/atom/A = holder.my_atom var/turf/T = get_turf(A) var/area/my_area = get_area(T) - var/message = "A [reaction_name] reaction has occurred in [my_area.name]. (JMP)" + var/message = "A [reaction_name] reaction has occurred in [my_area.name] [ADMIN_COORDJMP(T)]" message += " (VV)" var/mob/M = get(A, /mob) if(M) - message += " - Carried By: [key_name_admin(M)](?) (FLW)" + message += " - Carried By: [ADMIN_LOOKUPFLW(M)]" else message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 19bb28666d..0bc843a605 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -624,3 +624,14 @@ id = "laughter" results = list("laughter" = 10) // Fuck it. I'm not touching this one. required_reagents = list("sugar" = 1, "banana" = 1) + +/datum/chemical_reaction/plastic_polymers + name = "plastic polymers" + id = "plastic_polymers" + required_reagents = list("oil" = 5, "sodiumchloride" = 2, "ash" = 3) + required_temp = 374 //lazily consistent with soap & other crafted objects generically created with heat. + +/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, created_volume) + var/location = get_turf(holder.my_atom) + for(var/i in 1 to 10) + new /obj/item/stack/sheet/plastic(location) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 805aa936d4..6cfdd80cf5 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -6,6 +6,7 @@ /datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, created_volume) var/turf/T = get_turf(holder.my_atom) + var/area/A = get_area(T) var/inside_msg if(ismob(holder.my_atom)) var/mob/M = holder.my_atom @@ -14,9 +15,9 @@ var/touch_msg = "N/A" if(lastkey) var/mob/toucher = get_mob_by_key(lastkey) - touch_msg = "[key_name_admin(lastkey)]? (FLW)" - message_admins("Reagent explosion reaction occurred at [T.loc.name] (JMP)[inside_msg]. Last Fingerprint: [touch_msg].") - log_game("Reagent explosion reaction occurred at [T.loc.name] ([T.x],[T.y],[T.z]). Last Fingerprint: [lastkey ? lastkey : "N/A"]." ) + touch_msg = "[ADMIN_LOOKUPFLW(toucher)]" + message_admins("Reagent explosion reaction occurred at [A] [ADMIN_COORDJMP(T)][inside_msg]. Last Fingerprint: [touch_msg].") + log_game("Reagent explosion reaction occurred at [A] [COORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"]." ) var/datum/effect_system/reagents_explosion/e = new() e.set_up(modifier + round(created_volume/strengthdiv, 1), T, 0, 0) e.start() diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index a1c4a74795..f06dff50cf 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -437,13 +437,14 @@ /datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder) var/turf/T = get_turf(holder.my_atom) + var/area/A = get_area(T) var/lastkey = holder.my_atom.fingerprintslast var/touch_msg = "N/A" if(lastkey) var/mob/toucher = get_mob_by_key(lastkey) - touch_msg = "[key_name_admin(lastkey)]?(FLW)." - message_admins("Slime Explosion reaction started at [T.loc.name] (JMP). Last Fingerprint: [touch_msg]") - log_game("Slime Explosion reaction started at [T.loc.name] ([T.x],[T.y],[T.z]). Last Fingerprint: [lastkey ? lastkey : "N/A"].") + touch_msg = "[ADMIN_LOOKUPFLW(toucher)]." + message_admins("Slime Explosion reaction started at [A] [ADMIN_COORDJMP(T)]. Last Fingerprint: [touch_msg]") + log_game("Slime Explosion reaction started at [A] [COORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"].") T.visible_message("The slime extract begins to vibrate violently !") addtimer(CALLBACK(src, .proc/boom, holder), 50) var/obj/item/slime_extract/M = holder.my_atom @@ -477,26 +478,15 @@ ..() //Adamantine -/datum/chemical_reaction/slime/slimegolem - name = "Slime Golem" - id = "m_golem" +/datum/chemical_reaction/slime/adamantine + name = "Adamantine" + id = "adamantine" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/adamantine required_other = 1 -/datum/chemical_reaction/slime/slimegolem/on_reaction(datum/reagents/holder) - new /obj/effect/golemrune(get_turf(holder.my_atom)) - ..() - -/datum/chemical_reaction/slime/slimegolem2 - name = "Slime Golem 2" - id = "m_golem2" - required_reagents = list("iron" = 1) - required_container = /obj/item/slime_extract/adamantine - required_other = 1 - -/datum/chemical_reaction/slime/slimegolem2/on_reaction(datum/reagents/holder) - new /obj/item/golem_shell/artificial(get_turf(holder.my_atom)) +/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder) + new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) ..() //Bluespace diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index a92c52abf4..37074b6d12 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -58,6 +58,12 @@ icon_state = "bottle12" list_reagents = list("cyanide" = 30) +/obj/item/weapon/reagent_containers/glass/bottle/spewium + name = "spewium bottle" + desc = "A small bottle of spewium." + icon_state = "bottle12" + list_reagents = list("spewium" = 30) + /obj/item/weapon/reagent_containers/glass/bottle/morphine name = "morphine bottle" desc = "A small bottle of morphine." diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 6ea2673004..1301665320 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -155,6 +155,12 @@ filling.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling) +/obj/item/weapon/reagent_containers/glass/beaker/jar + name = "honey jar" + desc = "A jar for honey. It can hold up to 50 units of sweet delight." + icon = 'icons/obj/chemical.dmi' + icon_state = "vapour" + /obj/item/weapon/reagent_containers/glass/beaker/large name = "large beaker" desc = "A large beaker. Can hold up to 100 units." @@ -292,6 +298,9 @@ amount_per_transfer_from_this = 10 origin_tech = null +/obj/item/weapon/reagent_containers/glass/beaker/waterbottle/empty + list_reagents = list() + /obj/item/weapon/reagent_containers/glass/beaker/waterbottle/large desc = "A fresh commercial-sized bottle of water." icon_state = "largebottle" @@ -300,6 +309,9 @@ volume = 100 amount_per_transfer_from_this = 20 +/obj/item/weapon/reagent_containers/glass/beaker/waterbottle/large/empty + list_reagents = list() + diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 34d422da92..cc38a44ffc 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -48,15 +48,16 @@ user.changeNext_move(CLICK_CD_RANGE*2) user.newtonian_move(get_dir(A, user)) var/turf/T = get_turf(src) + var/area/area = get_area(src) if(reagents.has_reagent("sacid")) - message_admins("[key_name_admin(user)] fired sulphuric acid from \a [src] at ([get_area(src)] ([T.x], [T.y], [T.z])).") - log_game("[key_name(user)] fired sulphuric acid from \a [src] at [get_area(src)] ([T.x], [T.y], [T.z]).") + message_admins("[ADMIN_LOOKUPFLW(user)] fired sulphuric acid from \a [src] at [area] [ADMIN_COORDJMP(T)].") + log_game("[key_name(user)] fired sulphuric acid from \a [src] at [area] ([T.x], [T.y], [T.z]).") if(reagents.has_reagent("facid")) - message_admins("[key_name_admin(user)] fired Fluacid from \a [src] at ([get_area(src)] ([T.x], [T.y], [T.z])).") - log_game("[key_name(user)] fired Fluacid from \a [src] at [get_area(src)] ([T.x], [T.y], [T.z]).") + message_admins("[ADMIN_LOOKUPFLW(user)] fired Fluacid from \a [src] at [area] [ADMIN_COORDJMP(T)].") + log_game("[key_name(user)] fired Fluacid from \a [src] at [area] [COORD(T)].") if(reagents.has_reagent("lube")) - message_admins("[key_name_admin(user)] fired Space lube from \a [src] at ([get_area(src)] ([T.x], [T.y], [T.z])).") - log_game("[key_name(user)] fired Space lube from \a [src] at [get_area(src)] ([T.x], [T.y], [T.z]).") + message_admins("[ADMIN_LOOKUPFLW(user)] fired Space lube from \a [src] at [area] [ADMIN_COORDJMP(T)].") + log_game("[key_name(user)] fired Space lube from \a [src] at [area] [COORD(T)].") return diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 15d8e5e80c..834b79d4dc 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -47,7 +47,7 @@ other types of metals and chemistry for reagents). //////////////////////////////////////// /obj/item/weapon/disk/design_disk - name = "component design disk" + name = "Component Design Disk" desc = "A disk for storing device design data for construction in lathes." icon_state = "datadisk1" materials = list(MAT_METAL=300, MAT_GLASS=100) @@ -62,7 +62,7 @@ other types of metals and chemistry for reagents). blueprints += null /obj/item/weapon/disk/design_disk/adv - name = "advanced component design disk" + name = "Advanced Component Design Disk" desc = "A disk for storing device design data for construction in lathes. This one has extra storage space." materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER = 50) max_blueprints = 5 @@ -587,7 +587,7 @@ other types of metals and chemistry for reagents). category = list("Equipment") /datum/design/diskplantgene - name = "Plant data disk" + name = "Plant Data Disk" desc = "A disk for storing plant genetic data." id = "diskplantgene" req_tech = list("programming" = 4, "biotech" = 3) @@ -595,7 +595,7 @@ other types of metals and chemistry for reagents). materials = list(MAT_METAL=200, MAT_GLASS=100) build_path = /obj/item/weapon/disk/plantgene category = list("Electronics") - + ///////////////////////////////////////// ////////////Janitor Designs////////////// ///////////////////////////////////////// @@ -653,14 +653,3 @@ other types of metals and chemistry for reagents). materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200) build_path = /obj/item/weapon/weldingtool/experimental category = list("Equipment") - - -/datum/design/alienalloy - name = "Alien Alloy" - desc = "A sheet of reverse-engineered alien alloy." - id = "alienalloy" - req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2) - build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000) - build_path = /obj/item/stack/sheet/mineral/abductor - category = list("Stock Parts") diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 9f2fbda1f3..7fbc8309a8 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -11,7 +11,7 @@ category = list("initial","Tools") /datum/design/crowbar - name = "Pocket crowbar" + name = "Pocket Crowbar" id = "crowbar" build_type = AUTOLATHE materials = list(MAT_METAL = 50) @@ -27,7 +27,7 @@ category = list("initial","Tools") /datum/design/extinguisher - name = "Fire extinguisher" + name = "Fire Extinguisher" id = "extinguisher" build_type = AUTOLATHE materials = list(MAT_METAL = 90) @@ -51,7 +51,7 @@ category = list("initial","Tools") /datum/design/tscanner - name = "T-ray scanner" + name = "T-Ray Scanner" id = "tscanner" build_type = AUTOLATHE materials = list(MAT_METAL = 150) @@ -59,7 +59,7 @@ category = list("initial","Tools") /datum/design/weldingtool - name = "Welding tool" + name = "Welding Tool" id = "welding_tool" build_type = AUTOLATHE materials = list(MAT_METAL = 70, MAT_GLASS = 20) @@ -67,7 +67,7 @@ category = list("initial","Tools") /datum/design/mini_weldingtool - name = "Emergency welding tool" + name = "Emergency Welding Tool" id = "mini_welding_tool" build_type = AUTOLATHE materials = list(MAT_METAL = 30, MAT_GLASS = 10) @@ -99,7 +99,7 @@ category = list("initial","Tools") /datum/design/welding_helmet - name = "Welding helmet" + name = "Welding Helmet" id = "welding_helmet" build_type = AUTOLATHE materials = list(MAT_METAL = 1750, MAT_GLASS = 400) @@ -107,7 +107,7 @@ category = list("initial","Tools") /datum/design/cable_coil - name = "Cable coil" + name = "Cable Coil" id = "cable_coil" build_type = AUTOLATHE materials = list(MAT_METAL = 10, MAT_GLASS = 5) @@ -124,7 +124,7 @@ category = list("initial","Tools") /datum/design/console_screen - name = "Console screen" + name = "Console Screen" id = "console_screen" build_type = AUTOLATHE materials = list(MAT_GLASS = 200) @@ -132,7 +132,7 @@ category = list("initial", "Electronics") /datum/design/apc_board - name = "APC module" + name = "APC Module" id = "power control" build_type = AUTOLATHE materials = list(MAT_METAL = 100, MAT_GLASS = 100) @@ -140,7 +140,7 @@ category = list("initial", "Electronics") /datum/design/airlock_board - name = "Airlock electronics" + name = "Airlock Electronics" id = "airlock_board" build_type = AUTOLATHE materials = list(MAT_METAL = 50, MAT_GLASS = 50) @@ -148,7 +148,7 @@ category = list("initial", "Electronics") /datum/design/firelock_board - name = "Firelock circuitry" + name = "Firelock Circuitry" id = "firelock_board" build_type = AUTOLATHE materials = list(MAT_METAL = 50, MAT_GLASS = 50) @@ -156,7 +156,7 @@ category = list("initial", "Electronics") /datum/design/airalarm_electronics - name = "Air alarm electronics" + name = "Air Alarm Electronics" id = "airalarm_electronics" build_type = AUTOLATHE materials = list(MAT_METAL = 50, MAT_GLASS = 50) @@ -164,7 +164,7 @@ category = list("initial", "Electronics") /datum/design/firealarm_electronics - name = "Fire alarm electronics" + name = "Fire Alarm Electronics" id = "firealarm_electronics" build_type = AUTOLATHE materials = list(MAT_METAL = 50, MAT_GLASS = 50) @@ -180,7 +180,7 @@ category = list("initial", "Misc") /datum/design/pipe_painter - name = "Pipe painter" + name = "Pipe Painter" id = "pipe_painter" build_type = AUTOLATHE materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) @@ -188,7 +188,7 @@ category = list("initial", "Misc") /datum/design/airlock_painter - name = "Airlock painter" + name = "Airlock Painter" id = "airlock_painter" build_type = AUTOLATHE materials = list(MAT_METAL = 50, MAT_GLASS = 50) @@ -214,7 +214,7 @@ maxstack = 50 /datum/design/rglass - name = "Reinforced glass" + name = "Reinforced Glass" id = "rglass" build_type = AUTOLATHE materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) @@ -223,7 +223,7 @@ maxstack = 50 /datum/design/rods - name = "Metal rod" + name = "Metal Rod" id = "rods" build_type = AUTOLATHE materials = list(MAT_METAL = 1000) @@ -232,7 +232,7 @@ maxstack = 50 /datum/design/rcd_ammo - name = "Compressed matter cardridge" + name = "Compressed Matter Cartridge" id = "rcd_ammo" build_type = AUTOLATHE materials = list(MAT_METAL = 3000, MAT_GLASS=2000) @@ -240,7 +240,7 @@ category = list("initial","Construction") /datum/design/kitchen_knife - name = "Kitchen knife" + name = "Kitchen Knife" id = "kitchen_knife" build_type = AUTOLATHE materials = list(MAT_METAL = 12000) @@ -272,7 +272,7 @@ category = list("initial","Dinnerware") /datum/design/drinking_glass - name = "Drinking glass" + name = "Drinking Glass" id = "drinking_glass" build_type = AUTOLATHE materials = list(MAT_GLASS = 500) @@ -280,7 +280,7 @@ category = list("initial","Dinnerware") /datum/design/shot_glass - name = "Shot glass" + name = "Shot Glass" id = "shot_glass" build_type = AUTOLATHE materials = list(MAT_GLASS = 100) @@ -304,7 +304,7 @@ category = list("initial","Misc") /datum/design/plant_analyzer - name = "Plant analyzer" + name = "Plant Analyzer" id = "plant_analyzer" build_type = AUTOLATHE materials = list(MAT_METAL = 30, MAT_GLASS = 20) @@ -344,7 +344,7 @@ category = list("initial", "Medical") /datum/design/circular_saw - name = "Circular saw" + name = "Circular Saw" id = "circular_saw" build_type = AUTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) @@ -352,7 +352,7 @@ category = list("initial", "Medical") /datum/design/surgicaldrill - name = "Surgical drill" + name = "Surgical Drill" id = "surgicaldrill" build_type = AUTOLATHE materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) @@ -392,7 +392,7 @@ category = list("initial", "Medical") /datum/design/large_beaker - name = "Large beaker" + name = "Large Beaker" id = "large_beaker" build_type = AUTOLATHE materials = list(MAT_GLASS = 2500) @@ -408,7 +408,7 @@ category = list("initial", "Medical") /datum/design/beanbag_slug - name = "Beanbag slug" + name = "Beanbag Slug" id = "beanbag_slug" build_type = AUTOLATHE materials = list(MAT_METAL = 250) @@ -416,7 +416,7 @@ category = list("initial", "Security") /datum/design/rubbershot - name = "Rubber shot" + name = "Rubber Shot" id = "rubber_shot" build_type = AUTOLATHE materials = list(MAT_METAL = 4000) @@ -424,7 +424,7 @@ category = list("initial", "Security") /datum/design/c38 - name = "Speed loader (.38)" + name = "Speed Loader (.38)" id = "c38" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) @@ -432,7 +432,7 @@ category = list("initial", "Security") /datum/design/recorder - name = "Universal recorder" + name = "Universal Recorder" id = "recorder" build_type = AUTOLATHE materials = list(MAT_METAL = 60, MAT_GLASS = 30) @@ -456,7 +456,7 @@ category = list("initial", "Misc") /datum/design/signaler - name = "Remote signaling device" + name = "Remote Signaling Device" id = "signaler" build_type = AUTOLATHE materials = list(MAT_METAL = 400, MAT_GLASS = 120) @@ -464,7 +464,7 @@ category = list("initial", "T-Comm") /datum/design/radio_headset - name = "Radio headset" + name = "Radio Headset" id = "radio_headset" build_type = AUTOLATHE materials = list(MAT_METAL = 75) @@ -472,7 +472,7 @@ category = list("initial", "T-Comm") /datum/design/bounced_radio - name = "Station bounced radio" + name = "Station Bounced Radio" id = "bounced_radio" build_type = AUTOLATHE materials = list(MAT_METAL = 75, MAT_GLASS = 25) @@ -480,7 +480,7 @@ category = list("initial", "T-Comm") /datum/design/infrared_emitter - name = "Infrared emitter" + name = "Infrared Emitter" id = "infrared_emitter" build_type = AUTOLATHE materials = list(MAT_METAL = 1000, MAT_GLASS = 500) @@ -488,7 +488,7 @@ category = list("initial", "Misc") /datum/design/health_sensor - name = "Health sensor" + name = "Health Sensor" id = "health_sensor" build_type = AUTOLATHE materials = list(MAT_METAL = 800, MAT_GLASS = 200) @@ -504,7 +504,7 @@ category = list("initial", "Misc") /datum/design/voice_analyser - name = "Voice analyser" + name = "Voice Analyser" id = "voice_analyser" build_type = AUTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 50) @@ -512,7 +512,7 @@ category = list("initial", "Misc") /datum/design/light_tube - name = "Light tube" + name = "Light Tube" id = "light_tube" build_type = AUTOLATHE materials = list(MAT_GLASS = 100) @@ -520,7 +520,7 @@ category = list("initial", "Construction") /datum/design/light_bulb - name = "Light bulb" + name = "Light Bulb" id = "light_bulb" build_type = AUTOLATHE materials = list(MAT_GLASS = 100) @@ -528,7 +528,7 @@ category = list("initial", "Construction") /datum/design/camera_assembly - name = "Camera assembly" + name = "Camera Assembly" id = "camera_assembly" build_type = AUTOLATHE materials = list(MAT_METAL = 400, MAT_GLASS = 250) @@ -536,7 +536,7 @@ category = list("initial", "Construction") /datum/design/newscaster_frame - name = "Newscaster frame" + name = "Newscaster Frame" id = "newscaster_frame" build_type = AUTOLATHE materials = list(MAT_METAL = 14000, MAT_GLASS = 8000) @@ -552,7 +552,7 @@ category = list("initial", "Medical") /datum/design/prox_sensor - name = "Proximity sensor" + name = "Proximity Sensor" id = "prox_sensor" build_type = AUTOLATHE materials = list(MAT_METAL = 800, MAT_GLASS = 200) @@ -577,7 +577,7 @@ category = list("hacked", "Weapons and ammo") /datum/design/rcd - name = "Rapid construction device (RCD)" + name = "Rapid Construction Device (RCD)" id = "rcd" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) @@ -585,7 +585,7 @@ category = list("hacked", "Construction") /datum/design/rpd - name = "Rapid pipe dispenser (RPD)" + name = "Rapid Pipe Dispenser (RPD)" id = "rpd" build_type = AUTOLATHE materials = list(MAT_METAL = 75000, MAT_GLASS = 37500) @@ -601,7 +601,7 @@ category = list("hacked", "Tools") /datum/design/large_welding_tool - name = "Industrial welding tool" + name = "Industrial Welding Tool" id = "large_welding_tool" build_type = AUTOLATHE materials = list(MAT_METAL = 70, MAT_GLASS = 60) @@ -625,7 +625,7 @@ category = list("hacked", "Security") /datum/design/shotgun_slug - name = "Shotgun slug" + name = "Shotgun Slug" id = "shotgun_slug" build_type = AUTOLATHE materials = list(MAT_METAL = 4000) @@ -633,7 +633,7 @@ category = list("hacked", "Security") /datum/design/buckshot_shell - name = "Buckshot shell" + name = "Buckshot Shell" id = "buckshot_shell" build_type = AUTOLATHE materials = list(MAT_METAL = 4000) @@ -641,7 +641,7 @@ category = list("hacked", "Security") /datum/design/shotgun_dart - name = "Shotgun dart" + name = "Shotgun Dart" id = "shotgun_dart" build_type = AUTOLATHE materials = list(MAT_METAL = 4000) @@ -649,7 +649,7 @@ category = list("hacked", "Security") /datum/design/incendiary_slug - name = "Incendiary slug" + name = "Incendiary Slug" id = "incendiary_slug" build_type = AUTOLATHE materials = list(MAT_METAL = 4000) @@ -657,7 +657,7 @@ category = list("hacked", "Security") /datum/design/riot_dart - name = "Foam riot dart" + name = "Foam Riot Dart" id = "riot_dart" build_type = AUTOLATHE materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal! @@ -665,7 +665,7 @@ category = list("hacked", "Security") /datum/design/riot_darts - name = "Foam riot dart box" + name = "Foam Riot Dart Box" id = "riot_darts" build_type = AUTOLATHE materials = list(MAT_METAL = 50000) //Comes with 40 darts @@ -673,7 +673,7 @@ category = list("hacked", "Security") /datum/design/a357 - name = "Ammo box (.357)" + name = "Ammo Box (.357)" id = "a357" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) @@ -681,7 +681,7 @@ category = list("hacked", "Security") /datum/design/c10mm - name = "Ammo box (10mm)" + name = "Ammo Box (10mm)" id = "c10mm" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) @@ -689,7 +689,7 @@ category = list("hacked", "Security") /datum/design/c45 - name = "Ammo box (.45)" + name = "Ammo Box (.45)" id = "c45" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) @@ -697,7 +697,7 @@ category = list("hacked", "Security") /datum/design/c9mm - name = "Ammo box (9mm)" + name = "Ammo Box (9mm)" id = "c9mm" build_type = AUTOLATHE materials = list(MAT_METAL = 30000) @@ -705,7 +705,7 @@ category = list("hacked", "Security") /datum/design/cleaver - name = "Butcher's cleaver" + name = "Butcher's Cleaver" id = "cleaver" build_type = AUTOLATHE materials = list(MAT_METAL = 18000) @@ -721,7 +721,7 @@ category = list("initial", "Tools") /datum/design/desttagger - name = "Destination tagger" + name = "Destination Tagger" id = "desttagger" build_type = AUTOLATHE materials = list(MAT_METAL = 250, MAT_GLASS = 125) @@ -729,7 +729,7 @@ category = list("initial", "Electronics") /datum/design/handlabeler - name = "Hand labeler" + name = "Hand Labeler" id = "handlabel" build_type = AUTOLATHE materials = list(MAT_METAL = 150, MAT_GLASS = 125) @@ -737,7 +737,7 @@ category = list("initial", "Electronics") /datum/design/geiger - name = "Geiger counter" + name = "Geiger Counter" id = "geigercounter" build_type = AUTOLATHE materials = list(MAT_METAL = 150, MAT_GLASS = 150) @@ -745,7 +745,7 @@ category = list("initial", "Tools") /datum/design/turret_control_frame - name = "Turret control frame" + name = "Turret Control Frame" id = "turret_control" build_type = AUTOLATHE materials = list(MAT_METAL = 12000) @@ -753,7 +753,7 @@ category = list("initial", "Construction") /datum/design/conveyor_belt - name = "Conveyor belt" + name = "Conveyor Belt" id = "conveyor_belt" build_type = AUTOLATHE materials = list(MAT_METAL = 5000) @@ -761,7 +761,7 @@ category = list("initial", "Construction") /datum/design/conveyor_switch - name = "Conveyor belt switch" + name = "Conveyor Belt Switch" id = "conveyor_switch" build_type = AUTOLATHE materials = list(MAT_METAL = 450, MAT_GLASS = 190) @@ -783,3 +783,12 @@ materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) build_path = /obj/item/device/modular_computer/tablet category = list("initial","Misc") + +/datum/design/slime_scanner + name = "Slime Scanner" + id = "slime_scanner" + build_type = AUTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 200) + build_path = /obj/item/device/slime_scanner + category = list("initial", "Misc") + \ No newline at end of file diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index d293101229..7319e507ae 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -3,7 +3,7 @@ /////////////////////////////////// /datum/design/milk - name = "10 milk" + name = "10 Milk" id = "milk" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 20) @@ -11,7 +11,7 @@ category = list("initial","Food") /datum/design/cream - name = "10 cream" + name = "10 Cream" id = "cream" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 30) @@ -19,7 +19,7 @@ category = list("initial","Food") /datum/design/milk_carton - name = "Milk carton" + name = "Milk Carton" id = "milk_carton" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 100) @@ -27,7 +27,7 @@ category = list("initial","Food") /datum/design/cream_carton - name = "Cream carton" + name = "Cream Carton" id = "cream_carton" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) @@ -35,7 +35,7 @@ category = list("initial","Food") /datum/design/black_pepper - name = "10u black pepper" + name = "10u Black Pepper" id = "black_pepper" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 25) @@ -43,7 +43,7 @@ category = list("initial","Food") /datum/design/pepper_mill - name = "Pepper mill" + name = "Pepper Mill" id = "pepper_mill" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 50) @@ -52,7 +52,7 @@ category = list("initial","Food") /datum/design/monkey_cube - name = "Monkey cube" + name = "Monkey Cube" id = "mcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) @@ -60,7 +60,7 @@ category = list("initial", "Food") /datum/design/ez_nut - name = "E-Z-Nutrient" + name = "E-Z Nutrient" id = "ez_nut" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 10) @@ -108,39 +108,23 @@ category = list("initial", "Botany Chemicals") /datum/design/cloth - name = "Roll of cloth" + name = "Roll of Cloth" id = "cloth" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 50) build_path = /obj/item/stack/sheet/cloth category = list("initial","Leather and Cloth") -/datum/design/wallet - name = "Wallet" - id = "wallet" - build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 100) - build_path = /obj/item/weapon/storage/wallet - category = list("initial","Leather and Cloth") - -/datum/design/botany_gloves - name = "Botanical gloves" - id = "botany_gloves" +/datum/design/leather + name = "Sheet of Leather" + id = "leather" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 150) - build_path = /obj/item/clothing/gloves/botanic_leather - category = list("initial","Leather and Cloth") - -/datum/design/toolbelt - name = "Utility Belt" - id = "toolbelt" - build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 300) - build_path = /obj/item/weapon/storage/belt/utility + build_path = /obj/item/stack/sheet/leather category = list("initial","Leather and Cloth") /datum/design/secbelt - name = "Security belt" + name = "Security Belt" id = "secbelt" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) @@ -148,7 +132,7 @@ category = list("initial","Leather and Cloth") /datum/design/medbelt - name = "Medical belt" + name = "Medical Belt" id = "medbel" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) @@ -156,55 +140,23 @@ category = list("initial","Leather and Cloth") /datum/design/janibelt - name = "Janitorial belt" + name = "Janitorial Belt" id = "janibelt" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) build_path = /obj/item/weapon/storage/belt/janitor category = list("initial","Leather and Cloth") -/datum/design/bandolier - name = "Bandolier belt" - id = "bandolier" - build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 300) - build_path = /obj/item/weapon/storage/belt/bandolier - category = list("initial","Leather and Cloth") - /datum/design/s_holster - name = "Shoulder holster" + name = "Shoulder Holster" id = "s_holster" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 400) build_path = /obj/item/weapon/storage/belt/holster category = list("initial","Leather and Cloth") -/datum/design/leather_satchel - name = "Leather satchel" - id = "leather_satchel" - build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 400) - build_path = /obj/item/weapon/storage/backpack/satchel - category = list("initial","Leather and Cloth") - -/datum/design/leather_jacket - name = "Leather jacket" - id = "leather_jacket" - build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 500) - build_path = /obj/item/clothing/suit/jacket/leather - category = list("initial","Leather and Cloth") - -/datum/design/leather_overcoat - name = "Leather overcoat" - id = "leather_overcoat" - build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 1000) - build_path = /obj/item/clothing/suit/jacket/leather/overcoat - category = list("initial","Leather and Cloth") - /datum/design/rice_hat - name = "Rice hat" + name = "Rice Hat" id = "rice_hat" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) diff --git a/code/modules/research/designs/computer_part_designs.dm b/code/modules/research/designs/computer_part_designs.dm index cd75eada7a..dbdd15817c 100644 --- a/code/modules/research/designs/computer_part_designs.dm +++ b/code/modules/research/designs/computer_part_designs.dm @@ -3,7 +3,7 @@ //////////////////////////////////////// /datum/design/disk/normal - name = "hard disk drive" + name = "Hard Disk Drive" id = "hdd_basic" req_tech = list("programming" = 1, "engineering" = 1) build_type = PROTOLATHE @@ -12,7 +12,7 @@ category = list("Computer Parts") /datum/design/disk/advanced - name = "advanced hard disk drive" + name = "Advanced Hard Disk Drive" id = "hdd_advanced" req_tech = list("programming" = 2, "engineering" = 2) build_type = PROTOLATHE @@ -21,7 +21,7 @@ category = list("Computer Parts") /datum/design/disk/super - name = "super hard disk drive" + name = "Super Hard Disk Drive" id = "hdd_super" req_tech = list("programming" = 3, "engineering" = 3) build_type = PROTOLATHE @@ -30,7 +30,7 @@ category = list("Computer Parts") /datum/design/disk/cluster - name = "cluster hard disk drive" + name = "Cluster Hard Disk Drive" id = "hdd_cluster" req_tech = list("programming" = 4, "engineering" = 4) build_type = PROTOLATHE @@ -39,7 +39,7 @@ category = list("Computer Parts") /datum/design/disk/small - name = "solid state drive" + name = "Solid State Drive" id = "ssd_small" req_tech = list("programming" = 2, "engineering" = 2) build_type = PROTOLATHE @@ -48,7 +48,7 @@ category = list("Computer Parts") /datum/design/disk/micro - name = "micro solid state drive" + name = "Micro Solid State Drive" id = "ssd_micro" req_tech = list("programming" = 1, "engineering" = 1) build_type = PROTOLATHE @@ -59,7 +59,7 @@ // Network cards /datum/design/netcard/basic - name = "network card" + name = "Network Card" id = "netcard_basic" req_tech = list("programming" = 2, "engineering" = 1) build_type = IMPRINTER @@ -69,7 +69,7 @@ category = list("Computer Parts") /datum/design/netcard/advanced - name = "advanced network card" + name = "Advanced Network Card" id = "netcard_advanced" req_tech = list("programming" = 4, "engineering" = 2) build_type = IMPRINTER @@ -79,7 +79,7 @@ category = list("Computer Parts") /datum/design/netcard/wired - name = "wired network card" + name = "Wired Network Card" id = "netcard_wired" req_tech = list("programming" = 5, "engineering" = 3) build_type = IMPRINTER @@ -91,7 +91,7 @@ // Data disks /datum/design/portabledrive/basic - name = "data disk" + name = "Data Disk" id = "portadrive_basic" req_tech = list("programming" = 1) build_type = IMPRINTER @@ -101,7 +101,7 @@ category = list("Computer Parts") /datum/design/portabledrive/advanced - name = "advanced data disk" + name = "Advanced Data Disk" id = "portadrive_advanced" req_tech = list("programming" = 2) build_type = IMPRINTER @@ -111,7 +111,7 @@ category = list("Computer Parts") /datum/design/portabledrive/super - name = "super data disk" + name = "Super Data Disk" id = "portadrive_super" req_tech = list("programming" = 4) build_type = IMPRINTER @@ -123,7 +123,7 @@ // Card slot /datum/design/cardslot - name = "ID card slot" + name = "ID Card Slot" id = "cardslot" req_tech = list("programming" = 2) build_type = PROTOLATHE @@ -133,7 +133,7 @@ // Intellicard slot /datum/design/aislot - name = "Intellicard slot" + name = "Intellicard Slot" id = "aislot" req_tech = list("programming" = 2) build_type = PROTOLATHE @@ -143,7 +143,7 @@ // Mini printer /datum/design/miniprinter - name = "miniprinter" + name = "Miniprinter" id = "miniprinter" req_tech = list("programming" = 2, "engineering" = 2) build_type = PROTOLATHE @@ -154,7 +154,7 @@ // APC Link /datum/design/APClink - name = "area power connector" + name = "Area Power Connector" id = "APClink" req_tech = list("programming" = 2, "powerstorage" = 3, "engineering" = 2) build_type = PROTOLATHE @@ -165,7 +165,7 @@ // Batteries /datum/design/battery/controller - name = "power cell controller" + name = "Power Cell Controller" id = "bat_control" req_tech = list("powerstorage" = 1, "engineering" = 1) build_type = PROTOLATHE @@ -174,7 +174,7 @@ category = list("Computer Parts") /datum/design/battery/normal - name = "battery module" + name = "Battery Module" id = "bat_normal" req_tech = list("powerstorage" = 1, "engineering" = 1) build_type = PROTOLATHE @@ -183,7 +183,7 @@ category = list("Computer Parts") /datum/design/battery/advanced - name = "advanced battery module" + name = "Advanced Battery Module" id = "bat_advanced" req_tech = list("powerstorage" = 2, "engineering" = 2) build_type = PROTOLATHE @@ -192,7 +192,7 @@ category = list("Computer Parts") /datum/design/battery/super - name = "super battery module" + name = "Super Battery Module" id = "bat_super" req_tech = list("powerstorage" = 3, "engineering" = 3) build_type = PROTOLATHE @@ -201,7 +201,7 @@ category = list("Computer Parts") /datum/design/battery/nano - name = "nano battery module" + name = "Nano Battery Module" id = "bat_nano" req_tech = list("powerstorage" = 1, "engineering" = 1) build_type = PROTOLATHE @@ -210,7 +210,7 @@ category = list("Computer Parts") /datum/design/battery/micro - name = "micro battery module" + name = "Micro Battery Module" id = "bat_micro" req_tech = list("powerstorage" = 2, "engineering" = 2) build_type = PROTOLATHE @@ -221,7 +221,7 @@ // Processor unit /datum/design/cpu - name = "processor board" + name = "Processor Board" id = "cpu_normal" req_tech = list("programming" = 3, "engineering" = 2) build_type = IMPRINTER @@ -231,7 +231,7 @@ category = list("Computer Parts") /datum/design/cpu/small - name = "microprocessor" + name = "Microprocessor" id = "cpu_small" req_tech = list("programming" = 2, "engineering" = 2) build_type = IMPRINTER @@ -241,7 +241,7 @@ category = list("Computer Parts") /datum/design/cpu/photonic - name = "photonic processor board" + name = "Photonic Processor Board" id = "pcpu_normal" req_tech = list("programming" = 5, "engineering" = 4) build_type = IMPRINTER @@ -251,7 +251,7 @@ category = list("Computer Parts") /datum/design/cpu/photonic/small - name = "photonic microprocessor" + name = "Photonic Microprocessor" id = "pcpu_small" req_tech = list("programming" = 4, "engineering" = 3) build_type = IMPRINTER diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 56fb705e57..3a35b81e97 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -90,6 +90,22 @@ build_path = /obj/item/weapon/circuitboard/machine/quantumpad category = list ("Teleportation Machinery") +/datum/design/board/launchpad + name = "Machine Design (Bluespace Launchpad Board)" + desc = "The circuit board for a bluespace Launchpad." + id = "launchpad" + req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 2, "engineering" = 3) + build_path = /obj/item/weapon/circuitboard/machine/launchpad + category = list ("Teleportation Machinery") + +/datum/design/board/launchpad_console + name = "Machine Design (Bluespace Launchpad Console Board)" + desc = "The circuit board for a bluespace launchpad Console." + id = "launchpad_console" + req_tech = list("programming" = 4, "bluespace" = 3, "plasmatech" = 3) + build_path = /obj/item/weapon/circuitboard/computer/launchpad_console + category = list ("Teleportation Machinery") + /*/datum/design/board/telepad name = "Machine Design (Telepad Board)" desc = "The circuit board for a telescience telepad." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 002112b717..f72458af4e 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -96,7 +96,7 @@ category = list("Medical Designs") /datum/design/bluespacebodybag - name = "Bluespace body bag" + name = "Bluespace Body Bag" desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." id = "bluespacebodybag" req_tech = list("bluespace" = 5, "materials" = 4, "plasmatech" = 4) @@ -106,7 +106,7 @@ category = list("Medical Designs") /datum/design/plasmarefiller - name = "Plasma-man jumpsuit refill" + name = "Plasma-Man Jumpsuit Refill" desc = "A refill pack for the auto-extinguisher on Plasma-man suits." id = "plasmarefiller" req_tech = list("materials" = 2, "plasmatech" = 3) //Why did this have no plasmatech @@ -191,7 +191,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_breather - name = "Breathing Tube implant" + name = "Breathing Tube Implant" desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." id = "ci-breather" req_tech = list("materials" = 2, "biotech" = 3) @@ -202,7 +202,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_toolset - name = "Toolset Arm implant" + name = "Toolset Arm Implant" desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." id = "ci-toolset" req_tech = list("materials" = 3, "engineering" = 4, "biotech" = 4, "powerstorage" = 4) @@ -213,7 +213,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_medical_hud - name = "Medical HUD implant" + name = "Medical HUD Implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." id = "ci-medhud" req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4) @@ -224,7 +224,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_security_hud - name = "Security HUD implant" + name = "Security HUD Implant" desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." id = "ci-sechud" req_tech = list("materials" = 5, "programming" = 4, "biotech" = 4, "combat" = 3) @@ -235,7 +235,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_xray - name = "X-Ray eyes" + name = "X-Ray Eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" req_tech = list("materials" = 7, "programming" = 5, "biotech" = 7, "magnets" = 5,"plasmatech" = 6) @@ -246,7 +246,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_thermals - name = "Thermal eyes" + name = "Thermal Eyes" desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." id = "ci-thermals" req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "magnets" = 5,"plasmatech" = 4) @@ -257,7 +257,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_antidrop - name = "Anti-Drop implant" + name = "Anti-Drop Implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." id = "ci-antidrop" req_tech = list("materials" = 5, "programming" = 6, "biotech" = 5) @@ -268,7 +268,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_antistun - name = "CNS Rebooter implant" + name = "CNS Rebooter Implant" desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." id = "ci-antistun" req_tech = list("materials" = 6, "programming" = 5, "biotech" = 6) @@ -279,7 +279,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_nutriment - name = "Nutriment pump implant" + name = "Nutriment Pump Implant" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." id = "ci-nutriment" req_tech = list("materials" = 3, "powerstorage" = 4, "biotech" = 3) @@ -290,7 +290,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_nutriment_plus - name = "Nutriment pump implant PLUS" + name = "Nutriment Pump Implant PLUS" desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." id = "ci-nutrimentplus" req_tech = list("materials" = 5, "powerstorage" = 4, "biotech" = 4) @@ -301,7 +301,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_reviver - name = "Reviver implant" + name = "Reviver Implant" desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" id = "ci-reviver" req_tech = list("materials" = 5, "programming" = 4, "biotech" = 5) @@ -312,7 +312,7 @@ category = list("Misc", "Medical Designs") /datum/design/cyberimp_thrusters - name = "Thrusters set implant" + name = "Thrusters Set Implant" desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas." id = "ci-thrusters" req_tech = list("materials" = 5, "biotech" = 5, "magnets" = 4, "engineering" = 7) diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index 2672e0e27a..9367b38da7 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -6,7 +6,7 @@ build_type = SMELTER materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT / 2, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT / 2) build_path = /obj/item/stack/sheet/plasteel - category = list("initial","Alloys") + category = list("initial") /datum/design/plastitanium_alloy @@ -15,4 +15,14 @@ build_type = SMELTER materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT / 2, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT / 2) build_path = /obj/item/stack/sheet/mineral/plastitanium - category = list("initial","Alloys") \ No newline at end of file + category = list("initial") + +/datum/design/alienalloy + name = "Alien Alloy" + desc = "A sheet of reverse-engineered alien alloy." + id = "alienalloy" + req_tech = list("abductor" = 1, "materials" = 7, "plasmatech" = 2) + build_type = PROTOLATHE | SMELTER + materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000) + build_path = /obj/item/stack/sheet/mineral/abductor + category = list("Stock Parts") \ No newline at end of file diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 80863259e8..15704651f6 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -3,7 +3,7 @@ ///////////////////////////////////////// /datum/design/pin_testing - name = "test-range firing pin" + name = "Test-Range Firing Pin" desc = "This safety firing pin allows firearms to be operated within proximity to a firing range." id = "pin_testing" req_tech = list("combat" = 2, "materials" = 2) @@ -13,7 +13,7 @@ category = list("Firing Pins") /datum/design/pin_mindshield - name = "mindshield firing pin" + name = "Mindshield Firing Pin" desc = "This is a security firing pin which only authorizes users who are mindshield-implanted." id = "pin_loyalty" req_tech = list("combat" = 5, "materials" = 6) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d2db7e0fa9..31fa13f094 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -728,6 +728,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(D.build_type & AUTOLATHE) dat += "Autolathe
" if(D.build_type & MECHFAB) dat += "Exosuit Fabricator
" if(D.build_type & BIOGENERATOR) dat += "Biogenerator
" + if(D.build_type & LIMBGROWER) dat += "Limbgrower
" + if(D.build_type & SMELTER) dat += "Smelter
" dat += "Required Materials:
" var/all_mats = D.materials + D.reagents_list for(var/M in all_mats) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index dfd64c3101..827cce162f 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -1,180 +1,180 @@ -/* -General Explination: -The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the -various procs used to manipulate it. It has four variables and seven procs: - -Variables: -- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc -(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech -but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess -with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to -refer to them since it makes it a bit easier to search through them for specific information. -- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this -list, it can't be improved. All the tech in this list are visible to the player. -- possible_designs is functionally identical to possbile_tech except it's for /datum/design. -- known_designs is functionally identical to known_tech except it's for /datum/design - -Procs: -- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in -known_tech and at a high enough level. -- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design. -- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If -it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like -a player made tech?) you can. -- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs. -- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths -and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't -accidentally add "secret" tech to it. -- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When -it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to -the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher). - -The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables: -- Name: Pretty obvious. This is often viewable to the players. -- Desc: Pretty obvious. Also player viewable. -- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it. -- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain -level in specific techs before you can produce them. -- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the -research holder datum. - -*/ -/*************************************************************** -** Master Types ** -** Includes all the helper procs and basic tech processing. ** -***************************************************************/ - -/datum/research //Holder for all the existing, archived, and known tech. Individual to console. - - //Datum/tech go here. - var/list/possible_tech = list() //List of all tech in the game that players have access to (barring special events). - var/list/known_tech = list() //List of locally known tech. - var/list/possible_designs = list() //List of all designs. - var/list/known_designs = list() //List of available designs. - -/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. - for(var/T in subtypesof(/datum/tech)) - possible_tech += new T(src) - for(var/D in subtypesof(/datum/design)) - possible_designs += new D(src) - RefreshResearch() - -//Checks to see if tech has all the required pre-reqs. -//Input: datum/tech; Output: 0/1 (false/true) -/datum/research/proc/TechHasReqs(datum/tech/T) - if(T.req_tech.len == 0) - return TRUE - for(var/req in T.req_tech) - var/datum/tech/known = known_tech[req] - if(!known || known.level < T.req_tech[req]) - return FALSE - return TRUE - -//Checks to see if design has all the required pre-reqs. -//Input: datum/design; Output: 0/1 (false/true) -/datum/research/proc/DesignHasReqs(datum/design/D)//Heavily optimized -Sieve - if(D.req_tech.len == 0) - return TRUE - for(var/req in D.req_tech) - var/datum/tech/known = known_tech[req] - if(!known || known.level < D.req_tech[req]) - return FALSE - return TRUE - -//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed. -//Input: datum/tech; Output: Null -/datum/research/proc/AddTech2Known(datum/tech/T) - if(!T) - return - if(known_tech[T.id]) - var/datum/tech/known = known_tech[T.id] - if(T.level > known.level) - known.level = T.level - return - known_tech[T.id] = T.copy() - -/datum/research/proc/AddDesign2Known(datum/design/D) - if(known_designs[D.id]) - return - known_designs[D.id] = D - -//Refreshes known_tech and known_designs list. -//Input/Output: n/a -/datum/research/proc/RefreshResearch() - for(var/datum/tech/PT in possible_tech) - if(TechHasReqs(PT)) - AddTech2Known(PT) - - for(var/datum/design/PD in possible_designs) - if(DesignHasReqs(PD)) - AddDesign2Known(PD) - - for(var/v in known_tech) - var/datum/tech/T = known_tech[v] - T.level = Clamp(T.level, 0, 20) - return - -//Refreshes the levels of a given tech. -//Input: Tech's ID and Level; Output: null -/datum/research/proc/UpdateTech(ID, level) - var/datum/tech/KT = known_tech[ID] - if(KT && KT.level <= level) - KT.level = max(KT.level + 1, level) - -//Checks if the origin level can raise current tech levels -//Input: Tech's ID and Level; Output: TRUE for yes, FALSE for no -/datum/research/proc/IsTechHigher(ID, level) - var/datum/tech/KT = known_tech[ID] - if(KT) - if(KT.level <= level) - return TRUE - else - return FALSE - -/datum/research/proc/FindDesignByID(id) - return known_designs[id] - - -//Autolathe files -/datum/research/autolathe/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & AUTOLATHE) && ("initial" in D.category)) //autolathe starts without hacked designs - AddDesign2Known(D) - -//Limb Grower files -/datum/research/limbgrower/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & LIMBGROWER) && ("initial" in D.category)) - AddDesign2Known(D) - -/datum/research/autolathe/AddDesign2Known(datum/design/D) - if(!(D.build_type & AUTOLATHE)) - return - ..() - -//Biogenerator files -/datum/research/biogenerator/New() - for(var/T in (subtypesof(/datum/tech))) - possible_tech += new T(src) - for(var/path in subtypesof(/datum/design)) - var/datum/design/D = new path(src) - possible_designs += D - if((D.build_type & BIOGENERATOR) && ("initial" in D.category)) - AddDesign2Known(D) - -/datum/research/biogenerator/AddDesign2Known(datum/design/D) - if(!(D.build_type & BIOGENERATOR)) - return - ..() - +/* +General Explination: +The research datum is the "folder" where all the research information is stored in a R&D console. It's also a holder for all the +various procs used to manipulate it. It has four variables and seven procs: + +Variables: +- possible_tech is a list of all the /datum/tech that can potentially be researched by the player. The RefreshResearch() proc +(explained later) only goes through those when refreshing what you know. Generally, possible_tech contains ALL of the existing tech +but it is possible to add tech to the game that DON'T start in it (example: Xeno tech). Generally speaking, you don't want to mess +with these since they should be the default version of the datums. They're actually stored in a list rather then using typesof to +refer to them since it makes it a bit easier to search through them for specific information. +- know_tech is the companion list to possible_tech. It's the tech you can actually research and improve. Until it's added to this +list, it can't be improved. All the tech in this list are visible to the player. +- possible_designs is functionally identical to possbile_tech except it's for /datum/design. +- known_designs is functionally identical to known_tech except it's for /datum/design + +Procs: +- TechHasReqs: Used by other procs (specifically RefreshResearch) to see whether all of a tech's requirements are currently in +known_tech and at a high enough level. +- DesignHasReqs: Same as TechHasReqs but for /datum/design and known_design. +- AddTech2Known: Adds a /datum/tech to known_tech. It checks to see whether it already has that tech (if so, it just replaces it). If +it doesn't have it, it adds it. Note: It does NOT check possible_tech at all. So if you want to add something strange to it (like +a player made tech?) you can. +- AddDesign2Known: Same as AddTech2Known except for /datum/design and known_designs. +- RefreshResearch: This is the workhorse of the R&D system. It updates the /datum/research holder and adds any unlocked tech paths +and designs you have reached the requirements for. It only checks through possible_tech and possible_designs, however, so it won't +accidentally add "secret" tech to it. +- UpdateTech is used as part of the actual researching process. It takes an ID and finds techs with that same ID in known_tech. When +it finds it, it checks to see whether it can improve it at all. If the known_tech's level is less then or equal to +the inputted level, it increases the known tech's level to the inputted level -1 or know tech's level +1 (whichever is higher). + +The tech datums are the actual "tech trees" that you improve through researching. Each one has five variables: +- Name: Pretty obvious. This is often viewable to the players. +- Desc: Pretty obvious. Also player viewable. +- ID: This is the unique ID of the tech that is used by the various procs to find and/or maniuplate it. +- Level: This is the current level of the tech. All techs start at 1 and have a max of 20. Devices and some techs require a certain +level in specific techs before you can produce them. +- Req_tech: This is a list of the techs required to unlock this tech path. If left blank, it'll automatically be loaded into the +research holder datum. + +*/ +/*************************************************************** +** Master Types ** +** Includes all the helper procs and basic tech processing. ** +***************************************************************/ + +/datum/research //Holder for all the existing, archived, and known tech. Individual to console. + + //Datum/tech go here. + var/list/possible_tech = list() //List of all tech in the game that players have access to (barring special events). + var/list/known_tech = list() //List of locally known tech. + var/list/possible_designs = list() //List of all designs. + var/list/known_designs = list() //List of available designs. + +/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. + for(var/T in subtypesof(/datum/tech)) + possible_tech += new T(src) + for(var/D in subtypesof(/datum/design)) + possible_designs += new D(src) + RefreshResearch() + +//Checks to see if tech has all the required pre-reqs. +//Input: datum/tech; Output: 0/1 (false/true) +/datum/research/proc/TechHasReqs(datum/tech/T) + if(T.req_tech.len == 0) + return TRUE + for(var/req in T.req_tech) + var/datum/tech/known = known_tech[req] + if(!known || known.level < T.req_tech[req]) + return FALSE + return TRUE + +//Checks to see if design has all the required pre-reqs. +//Input: datum/design; Output: 0/1 (false/true) +/datum/research/proc/DesignHasReqs(datum/design/D)//Heavily optimized -Sieve + if(D.req_tech.len == 0) + return TRUE + for(var/req in D.req_tech) + var/datum/tech/known = known_tech[req] + if(!known || known.level < D.req_tech[req]) + return FALSE + return TRUE + +//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed. +//Input: datum/tech; Output: Null +/datum/research/proc/AddTech2Known(datum/tech/T) + if(!T) + return + if(known_tech[T.id]) + var/datum/tech/known = known_tech[T.id] + if(T.level > known.level) + known.level = T.level + return + known_tech[T.id] = T.copy() + +/datum/research/proc/AddDesign2Known(datum/design/D) + if(known_designs[D.id]) + return + known_designs[D.id] = D + +//Refreshes known_tech and known_designs list. +//Input/Output: n/a +/datum/research/proc/RefreshResearch() + for(var/datum/tech/PT in possible_tech) + if(TechHasReqs(PT)) + AddTech2Known(PT) + + for(var/datum/design/PD in possible_designs) + if(DesignHasReqs(PD)) + AddDesign2Known(PD) + + for(var/v in known_tech) + var/datum/tech/T = known_tech[v] + T.level = Clamp(T.level, 0, 20) + return + +//Refreshes the levels of a given tech. +//Input: Tech's ID and Level; Output: null +/datum/research/proc/UpdateTech(ID, level) + var/datum/tech/KT = known_tech[ID] + if(KT && KT.level <= level) + KT.level = max(KT.level + 1, level) + +//Checks if the origin level can raise current tech levels +//Input: Tech's ID and Level; Output: TRUE for yes, FALSE for no +/datum/research/proc/IsTechHigher(ID, level) + var/datum/tech/KT = known_tech[ID] + if(KT) + if(KT.level <= level) + return TRUE + else + return FALSE + +/datum/research/proc/FindDesignByID(id) + return known_designs[id] + + +//Autolathe files +/datum/research/autolathe/New() + for(var/T in (subtypesof(/datum/tech))) + possible_tech += new T(src) + for(var/path in subtypesof(/datum/design)) + var/datum/design/D = new path(src) + possible_designs += D + if((D.build_type & AUTOLATHE) && ("initial" in D.category)) //autolathe starts without hacked designs + AddDesign2Known(D) + +//Limb Grower files +/datum/research/limbgrower/New() + for(var/T in (subtypesof(/datum/tech))) + possible_tech += new T(src) + for(var/path in subtypesof(/datum/design)) + var/datum/design/D = new path(src) + possible_designs += D + if((D.build_type & LIMBGROWER) && ("initial" in D.category)) + AddDesign2Known(D) + +/datum/research/autolathe/AddDesign2Known(datum/design/D) + if(!(D.build_type & AUTOLATHE)) + return + ..() + +//Biogenerator files +/datum/research/biogenerator/New() + for(var/T in (subtypesof(/datum/tech))) + possible_tech += new T(src) + for(var/path in subtypesof(/datum/design)) + var/datum/design/D = new path(src) + possible_designs += D + if((D.build_type & BIOGENERATOR) && ("initial" in D.category)) + AddDesign2Known(D) + +/datum/research/biogenerator/AddDesign2Known(datum/design/D) + if(!(D.build_type & BIOGENERATOR)) + return + ..() + //Smelter files /datum/research/smelter/New() for(var/T in (subtypesof(/datum/tech))) @@ -190,175 +190,175 @@ research holder datum. return ..() - -/*************************************************************** -** Technology Datums ** -** Includes all the various technoliges and what they make. ** -***************************************************************/ - -/datum/tech //Datum of individual technologies. - var/name = "name" //Name of the technology. - var/desc = "description" //General description of what it does and what it makes. - var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. - var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech. - var/rare = 1 //How much CentCom wants to get that tech. Used in supply shuttle tech cost calculation. - var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = # - - -//Trunk Technologies (don't require any other techs and you start knowning them). - -/datum/tech/materials - name = "Materials Research" - desc = "Development of new and improved materials." - id = "materials" - -/datum/tech/engineering - name = "Engineering Research" - desc = "Development of new and improved engineering parts and tools." - id = "engineering" - -/datum/tech/plasmatech - name = "Plasma Research" - desc = "Research into the mysterious substance colloqually known as \"plasma\"." - id = "plasmatech" - rare = 3 - -/datum/tech/powerstorage - name = "Power Manipulation Technology" - desc = "The various technologies behind the storage and generation of electicity." - id = "powerstorage" - -/datum/tech/bluespace - name = "\"Blue-space\" Research" - desc = "Research into the sub-reality known as \"blue-space\"." - id = "bluespace" - rare = 2 - -/datum/tech/biotech - name = "Biological Technology" - desc = "Research into the deeper mysteries of life and organic substances." - id = "biotech" - -/datum/tech/combat - name = "Combat Systems Research" - desc = "The development of offensive and defensive systems." - id = "combat" - -/datum/tech/magnets - name = "Electromagnetic Spectrum Research" - desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." - id = "magnets" - -/datum/tech/programming - name = "Data Theory Research" - desc = "The development of new computer and artificial intelligence and data storage systems." - id = "programming" - -/datum/tech/syndicate - name = "Illegal Technologies Research" - desc = "The study of technologies that violate Nanotrassen regulations." - id = "syndicate" - rare = 4 - - -//Secret Technologies (hidden by default, require rare items to reveal) - -/datum/tech/abductor - name = "Alien Technologies Research" - desc = "The study of technologies used by the advanced alien race known as Abductors." - id = "abductor" - rare = 5 - level = 0 - -/datum/tech/arcane - name = "Arcane Research" - desc = "When sufficiently analyzed, any magic becomes indistinguishable from technology." - id = "arcane" - rare = 5 - level = 0 - -/* -//Branch Techs -/datum/tech/explosives - name = "Explosives Research" - desc = "The creation and application of explosive materials." - id = "explosives" - req_tech = list("materials" = 3) - -/datum/tech/generators - name = "Power Generation Technology" - desc = "Research into more powerful and more reliable sources." - id = "generators" - req_tech = list("powerstorage" = 2) - -/datum/tech/robotics - name = "Robotics Technology" - desc = "The development of advanced automated, autonomous machines." - id = "robotics" - req_tech = list("materials" = 3, "programming" = 3) -*/ - - -/datum/tech/proc/getCost(var/current_level = null) - // Calculates tech disk's supply points sell cost - if(!current_level) - current_level = initial(level) - - if(current_level >= level) - return 0 - - var/cost = 0 - for(var/i=current_level+1, i<=level, i++) - if(i == initial(level)) - continue - cost += i*rare - - return cost - -/datum/tech/proc/copy() - var/datum/tech/T = new type() - T.level = level - return T - -/obj/item/weapon/disk/tech_disk - name = "technology disk" - desc = "A disk for storing technology data for further research." - icon_state = "datadisk0" - materials = list(MAT_METAL=300, MAT_GLASS=100) - var/list/tech_stored = list() - var/max_tech_stored = 1 - + +/*************************************************************** +** Technology Datums ** +** Includes all the various technoliges and what they make. ** +***************************************************************/ + +/datum/tech //Datum of individual technologies. + var/name = "name" //Name of the technology. + var/desc = "description" //General description of what it does and what it makes. + var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. + var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech. + var/rare = 1 //How much CentCom wants to get that tech. Used in supply shuttle tech cost calculation. + var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = # + + +//Trunk Technologies (don't require any other techs and you start knowning them). + +/datum/tech/materials + name = "Materials Research" + desc = "Development of new and improved materials." + id = "materials" + +/datum/tech/engineering + name = "Engineering Research" + desc = "Development of new and improved engineering parts and tools." + id = "engineering" + +/datum/tech/plasmatech + name = "Plasma Research" + desc = "Research into the mysterious substance colloqually known as \"plasma\"." + id = "plasmatech" + rare = 3 + +/datum/tech/powerstorage + name = "Power Manipulation Technology" + desc = "The various technologies behind the storage and generation of electicity." + id = "powerstorage" + +/datum/tech/bluespace + name = "\"Blue-space\" Research" + desc = "Research into the sub-reality known as \"blue-space\"." + id = "bluespace" + rare = 2 + +/datum/tech/biotech + name = "Biological Technology" + desc = "Research into the deeper mysteries of life and organic substances." + id = "biotech" + +/datum/tech/combat + name = "Combat Systems Research" + desc = "The development of offensive and defensive systems." + id = "combat" + +/datum/tech/magnets + name = "Electromagnetic Spectrum Research" + desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." + id = "magnets" + +/datum/tech/programming + name = "Data Theory Research" + desc = "The development of new computer and artificial intelligence and data storage systems." + id = "programming" + +/datum/tech/syndicate + name = "Illegal Technologies Research" + desc = "The study of technologies that violate Nanotrassen regulations." + id = "syndicate" + rare = 4 + + +//Secret Technologies (hidden by default, require rare items to reveal) + +/datum/tech/abductor + name = "Alien Technologies Research" + desc = "The study of technologies used by the advanced alien race known as Abductors." + id = "abductor" + rare = 5 + level = 0 + +/datum/tech/arcane + name = "Arcane Research" + desc = "When sufficiently analyzed, any magic becomes indistinguishable from technology." + id = "arcane" + rare = 5 + level = 0 + +/* +//Branch Techs +/datum/tech/explosives + name = "Explosives Research" + desc = "The creation and application of explosive materials." + id = "explosives" + req_tech = list("materials" = 3) + +/datum/tech/generators + name = "Power Generation Technology" + desc = "Research into more powerful and more reliable sources." + id = "generators" + req_tech = list("powerstorage" = 2) + +/datum/tech/robotics + name = "Robotics Technology" + desc = "The development of advanced automated, autonomous machines." + id = "robotics" + req_tech = list("materials" = 3, "programming" = 3) +*/ + + +/datum/tech/proc/getCost(var/current_level = null) + // Calculates tech disk's supply points sell cost + if(!current_level) + current_level = initial(level) + + if(current_level >= level) + return 0 + + var/cost = 0 + for(var/i=current_level+1, i<=level, i++) + if(i == initial(level)) + continue + cost += i*rare + + return cost + +/datum/tech/proc/copy() + var/datum/tech/T = new type() + T.level = level + return T + +/obj/item/weapon/disk/tech_disk + name = "technology disk" + desc = "A disk for storing technology data for further research." + icon_state = "datadisk0" + materials = list(MAT_METAL=300, MAT_GLASS=100) + var/list/tech_stored = list() + var/max_tech_stored = 1 + /obj/item/weapon/disk/tech_disk/Initialize() . = ..() pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) - for(var/i in 1 to max_tech_stored) - tech_stored += null - - -/obj/item/weapon/disk/tech_disk/adv - name = "advanced technology disk" - desc = "A disk for storing technology data for further research. This one has extra storage space." - materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=50) - max_tech_stored = 5 - -/obj/item/weapon/disk/tech_disk/super_adv - name = "quantum technology disk" - desc = "A disk for storing technology data for further research. This one has extremely large storage space." - materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=100, MAT_GOLD=100) - max_tech_stored = 10 - -/obj/item/weapon/disk/tech_disk/debug - name = "centcomm technology disk" - desc = "A debug item for research" - materials = list() - max_tech_stored = 0 - + for(var/i in 1 to max_tech_stored) + tech_stored += null + + +/obj/item/weapon/disk/tech_disk/adv + name = "advanced technology disk" + desc = "A disk for storing technology data for further research. This one has extra storage space." + materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=50) + max_tech_stored = 5 + +/obj/item/weapon/disk/tech_disk/super_adv + name = "quantum technology disk" + desc = "A disk for storing technology data for further research. This one has extremely large storage space." + materials = list(MAT_METAL=300, MAT_GLASS=100, MAT_SILVER=100, MAT_GOLD=100) + max_tech_stored = 10 + +/obj/item/weapon/disk/tech_disk/debug + name = "centcomm technology disk" + desc = "A debug item for research" + materials = list() + max_tech_stored = 0 + /obj/item/weapon/disk/tech_disk/debug/Initialize() . = ..() - var/list/techs = subtypesof(/datum/tech) - max_tech_stored = techs.len - for(var/V in techs) - var/datum/tech/T = new V() - tech_stored += T - T.level = 8 + var/list/techs = subtypesof(/datum/tech) + max_tech_stored = techs.len + for(var/V in techs) + var/datum/tech/T = new V() + tech_stored += T + T.level = 8 diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index ecc1398137..ccc690350a 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -11,7 +11,7 @@ lootcount = 1 loot = list(/obj/item/seeds/gatfruit = 10, - /obj/item/seeds/cherry = 15, + /obj/item/seeds/cherry/bomb = 10, /obj/item/seeds/berry/glow = 10, /obj/item/seeds/sunflower/moonflower = 8 ) @@ -40,7 +40,7 @@ category = list("Imported") /obj/item/golem_shell - name = "incomplete golem shell" + name = "incomplete free golem shell" icon = 'icons/obj/wizard.dmi' icon_state = "construct" desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish." @@ -103,11 +103,17 @@ if(istype(O, /obj/item/stack/medical/gauze) || istype(O, /obj/item/stack/sheet/cloth)) species = /datum/species/golem/cloth + + if(istype(O, /obj/item/stack/sheet/plastic)) + species = /datum/species/golem/plastic + + if(istype(O, /obj/item/stack/sheet/mineral/adamantine)) + species = /datum/species/golem/adamantine if(species) if(O.use(10)) to_chat(user, "You finish up the golem shell with ten sheets of [O].") - new shell_type(get_turf(src), species, has_owner, user) + new shell_type(get_turf(src), species, user) qdel(src) else to_chat(user, "You need at least ten sheets to finish a golem.") @@ -115,10 +121,9 @@ to_chat(user, "You can't build a golem out of this kind of material.") //made with xenobiology, the golem obeys its creator -/obj/item/golem_shell/artificial - name = "incomplete artificial golem shell" - has_owner = TRUE - +/obj/item/golem_shell/servant + name = "incomplete servant golem shell" + shell_type = /obj/effect/mob_spawn/human/golem/servant ///Syndicate Listening Post /obj/effect/mob_spawn/human/lavaland_syndicate @@ -136,7 +141,7 @@ icon = 'icons/obj/Cryogenic2.dmi' icon_state = "sleeper" has_id = 1 - flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunatley, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. Do not abandon the base without good cause. The base is rigged with explosives should the worst happen, do not let the base fall into enemy hands!
" + flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. Do not abandon the base without good cause. The base is rigged with explosives should the worst happen, do not let the base fall into enemy hands!
" id_access_list = list(GLOB.access_syndicate) /obj/effect/mob_spawn/human/lavaland_syndicate/comms @@ -144,9 +149,6 @@ r_hand = /obj/item/weapon/melee/energy/sword/saber mask = /obj/item/clothing/mask/chameleon suit = /obj/item/clothing/suit/armor/vest - flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. \n +\ - Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. Do not abandon the base, activate the self destruct device if you are compromised. \n +\ - Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail.\n +\ - Remember, an enemy of our enemy is a friend, so also provide support to those that hinder Nanotrasen unless commanded otherwise by HQ. \n +\ - Do not let the base fall into enemy hands!" + flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. Do not abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" pocket2 = /obj/item/weapon/card/id/syndicate/anyone + diff --git a/code/modules/shuttle/elevator.dm b/code/modules/shuttle/elevator.dm new file mode 100644 index 0000000000..12f9c24f9a --- /dev/null +++ b/code/modules/shuttle/elevator.dm @@ -0,0 +1,10 @@ +/obj/docking_port/mobile/elevator + name = "elevator" + id = "elevator" + dwidth = 3 + width = 7 + height = 7 + knockdown = FALSE + +/obj/docking_port/mobile/elevator/request(obj/docking_port/stationary/S) //No transit, no ignition, just a simple up/down platform + dock(S, TRUE) \ No newline at end of file diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index b9d284b280..6344689f0b 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -104,12 +104,8 @@ authorized += ID - message_admins("[key_name_admin(user.client)] \ - (?) \ - (FLW) \ - has authorized early shuttle launch", 0, 1) - log_game("[key_name(user)] has authorized early shuttle launch in \ - ([x],[y],[z])") + message_admins("[ADMIN_LOOKUPFLW(user)] has authorized early shuttle launch", 0, 1) + log_game("[key_name(user)] has authorized early shuttle launch in [COORD(src)]") // Now check if we're on our way . = TRUE process() diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index 2e04fdd9af..8368fd58e5 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -30,4 +30,4 @@ return last_request = world.time to_chat(usr, "Your request has been recieved by Centcom.") - to_chat(GLOB.admins, "FERRY: [key_name_admin(usr)] (?) (FLW) (Move Ferry) is requesting to move the transport ferry to Centcom.") + to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to Centcom.") diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 756fad25b3..b5571164ff 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -3,7 +3,7 @@ return // Called when shuttle attempts to move an atom. -/atom/movable/proc/onShuttleMove(turf/T1, rotation) +/atom/movable/proc/onShuttleMove(turf/T1, rotation, knockdown = TRUE) if(rotation) shuttleRotate(rotation) loc = T1 @@ -47,11 +47,11 @@ else shake_camera(src, 7, 1) -/mob/living/carbon/onShuttleMove() +/mob/living/carbon/onShuttleMove(turf/T1, rotation, knockdown = TRUE) . = ..() if(!.) return - if(!buckled) + if(!buckled && knockdown) Weaken(3) /obj/effect/abstract/proximity_checker/onShuttleMove() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 00ddecb7f8..a5d60b1e8d 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -217,6 +217,8 @@ var/launch_status = NOLAUNCH + var/knockdown = TRUE //Will it knock down mobs when it docks? + // A timid shuttle will not register itself with the shuttle subsystem // All shuttle templates are timid var/timid = FALSE @@ -517,7 +519,7 @@ //move mobile to new location for(var/atom/movable/AM in T0) - if(AM.onShuttleMove(T1, rotation)) + if(AM.onShuttleMove(T1, rotation, knockdown)) moved_atoms += AM if(rotation) @@ -578,10 +580,7 @@ if(M.pulledby) M.pulledby.stop_pulling() M.stop_pulling() - M.visible_message("[M] is hit by \ - a hyperspace ripple!", - "You feel an immense \ - crushing pressure as the space around you ripples.") + M.visible_message("[src] slams into [M]!") if(M.key || M.get_ghost(TRUE)) SSblackbox.add_details("shuttle_gib", "[type]") else @@ -755,4 +754,16 @@ for(var/obj/machinery/door/E in A) //dumb, I know, but playing it on the engines doesn't do it justice playsound(E, s, 100, FALSE, max(width, height) - world.view) +/obj/docking_port/mobile/proc/is_in_shuttle_bounds(atom/A) + var/turf/T = get_turf(A) + if(T.z != z) + return FALSE + var/list/bounds= return_coords() + var/turf/T0 = locate(bounds[1],bounds[2],z) + var/turf/T1 = locate(bounds[3],bounds[4],z) + if(T in block(T0,T1)) + return TRUE + return FALSE + + #undef DOCKING_PORT_HIGHLIGHT diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 78732d82e4..aa28f2402c 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -60,7 +60,6 @@ obj_integrity = 1000 max_integrity = 1000 verb_say = "chants" - initial_languages = list(/datum/language/common) var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE @@ -148,11 +147,11 @@ 3. Don't get messed up in their affairs." status_flags = GODMODE // Please don't punch the barkeeper unique_name = FALSE // disables the (123) number suffix + initial_language_holder = /datum/language_holder/universal /mob/living/simple_animal/drone/snowflake/bardrone/Initialize() . = ..() access_card.access |= GLOB.access_cent_bar - grant_all_languages(omnitongue=TRUE) /mob/living/simple_animal/hostile/alien/maid/barmaid gold_core_spawnable = 0 @@ -163,6 +162,7 @@ unique_name = FALSE AIStatus = AI_OFF stop_automated_movement = TRUE + initial_language_holder = /datum/language_holder/universal /mob/living/simple_animal/hostile/alien/maid/barmaid/Initialize() . = ..() @@ -172,8 +172,6 @@ access_card.access |= GLOB.access_cent_bar access_card.flags |= NODROP - grant_all_languages(omnitongue=TRUE) - /mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() qdel(access_card) . = ..() diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index cc3f2c1ab9..d47a5b268c 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -83,6 +83,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th var/charge_max = 100 //recharge time in deciseconds if charge_type = "recharge" or starting charges if charge_type = "charges" var/charge_counter = 0 //can only cast spells if it equals recharge, ++ each decisecond if charge_type = "recharge" or -- each cast if charge_type = "charges" var/still_recharging_msg = "The spell is still recharging." + var/recharging = TRUE var/holder_var_type = "bruteloss" //only used if charge_type equals to "holder_var" var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used @@ -226,11 +227,13 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th /obj/effect/proc_holder/spell/Initialize() . = ..() action = new(src) + START_PROCESSING(SSfastprocess, src) still_recharging_msg = "[name] is still recharging." charge_counter = charge_max /obj/effect/proc_holder/spell/Destroy() + STOP_PROCESSING(SSfastprocess, src) qdel(action) return ..() @@ -248,20 +251,24 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th /obj/effect/proc_holder/spell/proc/start_recharge() if(action) action.UpdateButtonIcon() - while(charge_counter < charge_max && !QDELETED(src)) - sleep(1) - charge_counter++ + recharging = TRUE if(action) action.UpdateButtonIcon() -/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = 1, mob/user = usr) //if recharge is started is important for the trigger spells +/obj/effect/proc_holder/spell/process() + if(recharging && charge_type == "recharge" && (charge_counter < charge_max)) + charge_counter += 2 //processes 5 times per second instead of 10. + if(charge_counter >= charge_max) + charge_counter = charge_max + recharging = FALSE + +/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = TRUE, mob/user = usr) //if recharge is started is important for the trigger spells before_cast(targets) invocation(user) if(user && user.ckey) user.log_message("cast the spell [name].", INDIVIDUAL_ATTACK_LOG) - spawn(0) - if(charge_type == "recharge" && recharge) - start_recharge() + if(recharge) + recharging = TRUE if(sound) playMagSound() if(prob(critfailchance)) diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index ef40210fd1..cdac152ed2 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -21,6 +21,9 @@ return if(active) msg = "[deactive_msg]" + if(charge_type == "recharge") + var/refund_percent = current_amount/projectile_amount + charge_counter = charge_max * refund_percent remove_ranged_ability(msg) else msg = "[active_msg]Left-click to shoot it at a target!" @@ -36,12 +39,12 @@ /obj/effect/proc_holder/spell/aimed/InterceptClickOn(mob/living/caller, params, atom/target) if(..()) return FALSE - var/ignore = (current_amount <= 0) - if(!cast_check(ignore, ranged_ability_user)) + var/ran_out = (current_amount <= 0) + if(!cast_check(!ran_out, ranged_ability_user)) remove_ranged_ability() return FALSE var/list/targets = list(target) - perform(targets,user = ranged_ability_user) + perform(targets, ran_out, user = ranged_ability_user) return TRUE /obj/effect/proc_holder/spell/aimed/cast(list/targets, mob/living/user) @@ -52,11 +55,14 @@ return FALSE fire_projectile(user, target) user.newtonian_move(get_dir(U, T)) - if(--current_amount <= 0) + if(current_amount <= 0) remove_ranged_ability() //Auto-disable the ability once you run out of bullets. + charge_counter = 0 + start_recharge() return TRUE /obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target) + current_amount-- var/obj/item/projectile/P = new projectile_type(user.loc) P.current = get_turf(user) P.firer = user diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index 05e2011173..b6898afdef 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -9,6 +9,26 @@ cult_req = 1 charge_max = 2500 + +/obj/effect/proc_holder/spell/aoe_turf/area_conversion + name = "Area Conversion" + desc = "This spell instantly converts a small area around you." + + school = "transmutation" + charge_max = 50 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 2 + action_icon_state = "areaconvert" + action_background_icon_state = "bg_cult" + +/obj/effect/proc_holder/spell/aoe_turf/area_conversion/cast(list/targets, mob/user = usr) + playsound(get_turf(user), 'sound/items/welder.ogg', 75, 1) + for(var/turf/T in targets) + T.narsie_act(FALSE, TRUE, 100 - (get_dist(user, T) * 25)) + + /obj/effect/proc_holder/spell/aoe_turf/conjure/floor name = "Summon Cult Floor" desc = "This spell constructs a cult floor" @@ -98,7 +118,7 @@ desc = "This spell allows you to pass through walls" school = "transmutation" - charge_max = 200 + charge_max = 250 clothes_req = 0 invocation = "none" invocation_type = "none" diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 8e8968fb52..85a279b309 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -52,7 +52,7 @@ user.put_in_hands(contract) else var/obj/item/weapon/paper/contract/infernal/contract // = new(user.loc, C.mind, contractType, user.mind) - var/contractTypeName = input(user, "What type of contract?") in list ("Power", "Wealth", "Prestige", "Magic", "Knowledge") + var/contractTypeName = input(user, "What type of contract?") in list ("Power", "Wealth", "Prestige", "Magic", "Knowledge", "Friendship") switch(contractTypeName) if("Power") contract = new /obj/item/weapon/paper/contract/infernal/power(C.loc, C.mind, user.mind) @@ -64,6 +64,8 @@ contract = new /obj/item/weapon/paper/contract/infernal/magic(C.loc, C.mind, user.mind) if("Knowledge") contract = new /obj/item/weapon/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind) + if("Friendship") + contract = new /obj/item/weapon/paper/contract/infernal/friend(C.loc, C.mind, user.mind) C.put_in_hands(contract) else to_chat(user, "[C] seems to not be sentient. You cannot summon a contract for [C.p_them()].") @@ -106,7 +108,7 @@ continuing = 1 else for(var/mob/living/C in orange(2, get_turf(user.loc))) //Can also phase in when nearby a potential buyer. - if (C.mind && C.mind.soulOwner == C.mind) + if (C.owns_soul()) continuing = 1 break if(continuing) diff --git a/code/modules/spells/spell_types/devil_boons.dm b/code/modules/spells/spell_types/devil_boons.dm index b7ef4b03c4..e8fcc73010 100644 --- a/code/modules/spells/spell_types/devil_boons.dm +++ b/code/modules/spells/spell_types/devil_boons.dm @@ -35,10 +35,39 @@ charge_max = 50 cooldown_min = 10 action_icon_state = "camera_jump" - var/ranges = list(7,8,9,10/*,11,12*/) + var/ranges = list(7,8,9,10) /obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr) for(var/mob/C in targets) if(!C.client) continue - C.client.change_view(input("Select view range:", "Range", 4) in ranges) \ No newline at end of file + C.client.change_view(input("Select view range:", "Range", 4) in ranges) + +/obj/effect/proc_holder/spell/targeted/summon_friend + name = "Summon Friend" + desc = "The reward for selling your soul." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + charge_max = 50 + cooldown_min = 10 + action_icon_state = "sacredflame" + var/mob/living/friend + var/obj/effect/mob_spawn/human/demonic_friend/friendShell + +/obj/effect/proc_holder/spell/targeted/summon_friend/cast(list/targets, mob/user = usr) + if(!QDELETED(friend)) + to_chat(friend, "Your master has deemed you a poor friend. Your durance in hell will now resume.") + friend.dust(TRUE) + qdel(friendShell) + return + if(!QDELETED(friendShell)) + qdel(friendShell) + return + for(var/C in targets) + var/mob/living/L = C + friendShell = new /obj/effect/mob_spawn/human/demonic_friend(L.loc, L.mind, src) + +/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless + clothes_req = FALSE diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm index 7ebafe6e24..052c1f1162 100644 --- a/code/modules/spells/spell_types/mind_transfer.dm +++ b/code/modules/spells/spell_types/mind_transfer.dm @@ -62,29 +62,14 @@ Also, you never added distance checking after target is selected. I've went ahea var/mob/caster = user//The wizard/whomever doing the body transferring. //MIND TRANSFER BEGIN - if(caster.mind.special_verbs.len)//If the caster had any special verbs, remove them from the mob verb list. - for(var/V in caster.mind.special_verbs)//Since the caster is using an object spell system, this is mostly moot. - caster.verbs -= V//But a safety nontheless. - - if(victim.mind.special_verbs.len)//Now remove all of the victim's verbs. - for(var/V in victim.mind.special_verbs) - victim.verbs -= V - var/mob/dead/observer/ghost = victim.ghostize(0) caster.mind.transfer_to(victim) - if(victim.mind.special_verbs.len)//To add all the special verbs for the original caster. - for(var/V in caster.mind.special_verbs)//Not too important but could come into play. - caster.verbs += V - ghost.mind.transfer_to(caster) if(ghost.key) caster.key = ghost.key //have to transfer the key since the mind was not active qdel(ghost) - if(caster.mind.special_verbs.len)//If they had any special verbs, we add them here. - for(var/V in caster.mind.special_verbs) - caster.verbs += V //MIND TRANSFER END //Here we paralyze both mobs and knock them out for a time. diff --git a/code/modules/spells/spell_types/rod_form.dm b/code/modules/spells/spell_types/rod_form.dm index 5046da7c34..a3754e6a7d 100644 --- a/code/modules/spells/spell_types/rod_form.dm +++ b/code/modules/spells/spell_types/rod_form.dm @@ -4,7 +4,7 @@ clothes_req = 1 human_req = 0 charge_max = 250 - cooldown_min = 100 + cooldown_min = 200 range = -1 include_user = 1 invocation = "CLANG!" diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 63c840a9b0..c88f722754 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -14,10 +14,10 @@ var/shapeshift_type var/list/current_shapes = list() var/list/current_casters = list() - var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ - /mob/living/simple_animal/pet/dog/corgi,\ - /mob/living/simple_animal/hostile/carp/ranged/chaos,\ - /mob/living/simple_animal/bot/ed209,\ + var/list/possible_shapes = list(/mob/living/simple_animal/mouse, + /mob/living/simple_animal/pet/dog/corgi, + /mob/living/simple_animal/hostile/carp/ranged/chaos, +// /mob/living/simple_animal/bot/ed209, /mob/living/simple_animal/hostile/construct/armored) /obj/effect/proc_holder/spell/targeted/shapeshift/cast(list/targets,mob/user = usr) diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index 66bc198311..b8296a1da5 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -1,347 +1,365 @@ -/obj/effect/proc_holder/spell/targeted/projectile/magic_missile - name = "Magic Missile" - desc = "This spell fires several, slow moving, magic projectiles at nearby targets." - - school = "evocation" - charge_max = 200 - clothes_req = 1 - invocation = "FORTI GY AMA" - invocation_type = "shout" - range = 7 - cooldown_min = 60 //35 deciseconds reduction per rank - - max_targets = 0 - - proj_icon_state = "magicm" - proj_name = "a magic missile" - proj_lingering = 1 - proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile" - - proj_lifespan = 20 - proj_step_delay = 5 - - proj_trail = 1 - proj_trail_lifespan = 5 - proj_trail_icon_state = "magicmd" - - action_icon_state = "magicm" - sound = 'sound/magic/MAGIC_MISSILE.ogg' - -/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile - amt_weakened = 3 - sound = 'sound/magic/MM_Hit.ogg' - -/obj/effect/proc_holder/spell/targeted/genetic/mutate - name = "Mutate" - desc = "This spell causes you to turn into a hulk and gain laser vision for a short while." - - school = "transmutation" - charge_max = 400 - clothes_req = 1 - invocation = "BIRUZ BENNAR" - invocation_type = "shout" - range = -1 - include_user = 1 - - mutations = list(LASEREYES, HULK) - duration = 300 - cooldown_min = 300 //25 deciseconds reduction per rank - - action_icon_state = "mutate" - sound = 'sound/magic/Mutate.ogg' - - -/obj/effect/proc_holder/spell/targeted/smoke - name = "Smoke" - desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." - - school = "conjuration" - charge_max = 120 - clothes_req = 0 - invocation = "none" - invocation_type = "none" - range = -1 - include_user = 1 - cooldown_min = 20 //25 deciseconds reduction per rank - - smoke_spread = 2 - smoke_amt = 4 - - action_icon_state = "smoke" - -/obj/effect/proc_holder/spell/targeted/emplosion/disable_tech - name = "Disable Tech" - desc = "This spell disables all weapons, cameras and most other technology in range." - charge_max = 400 - clothes_req = 1 - invocation = "NEC CANTIO" - invocation_type = "shout" - range = -1 - include_user = 1 - cooldown_min = 200 //50 deciseconds reduction per rank - - emp_heavy = 6 - emp_light = 10 - sound = 'sound/magic/Disable_Tech.ogg' - -/obj/effect/proc_holder/spell/targeted/turf_teleport/blink - name = "Blink" - desc = "This spell randomly teleports you a short distance." - - school = "abjuration" - charge_max = 20 - clothes_req = 1 - invocation = "none" - invocation_type = "none" - range = -1 - include_user = 1 - cooldown_min = 5 //4 deciseconds reduction per rank - - - smoke_spread = 1 - smoke_amt = 0 - - inner_tele_radius = 0 - outer_tele_radius = 6 - - action_icon_state = "blink" - sound1 = 'sound/magic/blink.ogg' - sound2 = 'sound/magic/blink.ogg' - -/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult - name = "quickstep" - - charge_max = 100 - clothes_req = 0 - cult_req = 1 - -/obj/effect/proc_holder/spell/targeted/area_teleport/teleport - name = "Teleport" - desc = "This spell teleports you to a type of area of your selection." - - school = "abjuration" - charge_max = 600 - clothes_req = 1 - invocation = "SCYAR NILA" - invocation_type = "shout" - range = -1 - include_user = 1 - cooldown_min = 200 //100 deciseconds reduction per rank - - smoke_spread = 1 - smoke_amt = 2 - sound1 = 'sound/magic/Teleport_diss.ogg' - sound2 = 'sound/magic/Teleport_app.ogg' - -/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop - name = "Stop Time" - desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen." - charge_max = 500 - clothes_req = 1 - invocation = "TOKI WO TOMARE" - invocation_type = "shout" - range = 0 - cooldown_min = 100 - summon_amt = 1 - action_icon_state = "time" - - summon_type = list(/obj/effect/timestop/wizard) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/carp - name = "Summon Carp" - desc = "This spell conjures a simple carp." - - school = "conjuration" - charge_max = 1200 - clothes_req = 1 - invocation = "NOUK FHUNMM SACP RISSKA" - invocation_type = "shout" - range = 1 - - summon_type = list(/mob/living/simple_animal/hostile/carp) - cast_sound = 'sound/magic/Summon_Karp.ogg' - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct - name = "Artificer" - desc = "This spell conjures a construct which may be controlled by Shades" - - school = "conjuration" - charge_max = 600 - clothes_req = 0 - invocation = "none" - invocation_type = "none" - range = 0 - - summon_type = list(/obj/structure/constructshell) - - action_icon_state = "artificer" - cast_sound = 'sound/magic/SummonItems_generic.ogg' - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/creature - name = "Summon Creature Swarm" - desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" - - school = "conjuration" - charge_max = 1200 - clothes_req = 0 - invocation = "IA IA" - invocation_type = "shout" - summon_amt = 10 - range = 3 - - summon_type = list(/mob/living/simple_animal/hostile/creature) - cast_sound = 'sound/magic/SummonItems_generic.ogg' - -/obj/effect/proc_holder/spell/targeted/trigger/blind - name = "Blind" - desc = "This spell temporarily blinds a single person and does not require wizard garb." - - school = "transmutation" - charge_max = 300 - clothes_req = 0 - invocation = "STI KALY" - invocation_type = "whisper" - message = "Your eyes cry out in pain!" - cooldown_min = 50 //12 deciseconds reduction per rank - - starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind") - - action_icon_state = "blind" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult - name = "Summon Creatures (DANGEROUS)" - cult_req = 1 - charge_max = 5000 - summon_amt = 2 - - - -/obj/effect/proc_holder/spell/targeted/inflict_handler/blind - amt_eye_blind = 10 - amt_eye_blurry = 20 - sound = 'sound/magic/Blind.ogg' - -/obj/effect/proc_holder/spell/targeted/genetic/blind - mutations = list(BLINDMUT) - duration = 300 - sound = 'sound/magic/Blind.ogg' -/obj/effect/proc_holder/spell/aoe_turf/repulse - name = "Repulse" - desc = "This spell throws everything around the user away." - charge_max = 400 - clothes_req = 1 - invocation = "GITTAH WEIGH" - invocation_type = "shout" - range = 5 - cooldown_min = 150 - selection_type = "view" - sound = 'sound/magic/Repulse.ogg' - var/maxthrow = 5 - var/sparkle_path = /obj/effect/overlay/temp/gravpush - - action_icon_state = "repulse" - -/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, var/stun_amt = 2) - var/list/thrownatoms = list() - var/atom/throwtarget - var/distfromcaster - playMagSound() - for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously. - for(var/atom/movable/AM in T) - thrownatoms += AM - - for(var/am in thrownatoms) - var/atom/movable/AM = am - if(AM == user || AM.anchored) - continue - - throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) - distfromcaster = get_dist(user, AM) - if(distfromcaster == 0) - if(isliving(AM)) - var/mob/living/M = AM - M.Weaken(5) - M.adjustBruteLoss(5) - to_chat(M, "You're slammed into the floor by [user]!") - else - new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own - if(isliving(AM)) - var/mob/living/M = AM - M.Weaken(stun_amt) - to_chat(M, "You're thrown back by [user]!") - AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. - -/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! - name = "Tail Sweep" - desc = "Throw back attackers with a sweep of your tail." - sound = 'sound/magic/Tail_swing.ogg' - charge_max = 150 - clothes_req = 0 - range = 2 - cooldown_min = 150 - invocation_type = "none" - sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep - action_icon_state = "tailsweep" - action_background_icon_state = "bg_alien" - -/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr) - if(istype(user, /mob/living/carbon)) - var/mob/living/carbon/C = user - playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1) - C.spin(6,1) - ..(targets, user, 3) - -/obj/effect/proc_holder/spell/targeted/sacred_flame - name = "Sacred Flame" - desc = "Makes everyone around you more flammable, and lights yourself on fire." - charge_max = 60 - clothes_req = 0 - invocation = "FI'RAN DADISKO" - invocation_type = "shout" - max_targets = 0 - range = 6 - include_user = 1 - selection_type = "view" - action_icon_state = "sacredflame" - sound = 'sound/magic/Fireball.ogg' - -/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr) - for(var/mob/living/L in targets) - L.adjust_fire_stacks(20) - if(isliving(user)) - var/mob/living/U = user - U.IgniteMob() - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket - name = "Thrown Lightning" - desc = "Forged from eldrich energies, a packet of pure power, known as a spell packet will appear in your hand, that when thrown will stun the target." - clothes_req = 1 - item_type = /obj/item/spellpacket/lightningbolt - charge_max = 10 - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr) - ..() - for(var/mob/living/carbon/C in targets) - C.throw_mode_on() - -/obj/item/spellpacket/lightningbolt - name = "\improper Lightning bolt Spell Packet" - desc = "Some birdseed wrapped in cloth that somehow crackles with electricity." - icon = 'icons/obj/toy.dmi' - icon_state = "snappop" - w_class = WEIGHT_CLASS_TINY - -/obj/item/spellpacket/lightningbolt/throw_impact(atom/hit_atom) - if(!..()) - if(isliving(hit_atom)) - var/mob/living/M = hit_atom - M.electrocute_act(80, src, illusion = 1) - qdel(src) - -/obj/item/spellpacket/lightningbolt/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) - . = ..() - if(ishuman(thrower)) - var/mob/living/carbon/human/H = thrower - H.say("LIGHTNINGBOLT!!") +/obj/effect/proc_holder/spell/targeted/projectile/magic_missile + name = "Magic Missile" + desc = "This spell fires several, slow moving, magic projectiles at nearby targets." + + school = "evocation" + charge_max = 200 + clothes_req = 1 + invocation = "FORTI GY AMA" + invocation_type = "shout" + range = 7 + cooldown_min = 60 //35 deciseconds reduction per rank + + max_targets = 0 + + proj_icon_state = "magicm" + proj_name = "a magic missile" + proj_lingering = 1 + proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile" + + proj_lifespan = 20 + proj_step_delay = 5 + + proj_trail = 1 + proj_trail_lifespan = 5 + proj_trail_icon_state = "magicmd" + + action_icon_state = "magicm" + sound = 'sound/magic/MAGIC_MISSILE.ogg' + +/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile + amt_weakened = 3 + sound = 'sound/magic/MM_Hit.ogg' + +/obj/effect/proc_holder/spell/targeted/genetic/mutate + name = "Mutate" + desc = "This spell causes you to turn into a hulk and gain laser vision for a short while." + + school = "transmutation" + charge_max = 400 + clothes_req = 1 + invocation = "BIRUZ BENNAR" + invocation_type = "shout" + range = -1 + include_user = 1 + + mutations = list(LASEREYES, HULK) + duration = 300 + cooldown_min = 300 //25 deciseconds reduction per rank + + action_icon_state = "mutate" + sound = 'sound/magic/Mutate.ogg' + + +/obj/effect/proc_holder/spell/targeted/smoke + name = "Smoke" + desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." + + school = "conjuration" + charge_max = 120 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + cooldown_min = 20 //25 deciseconds reduction per rank + + smoke_spread = 2 + smoke_amt = 4 + + action_icon_state = "smoke" + + +/obj/effect/proc_holder/spell/targeted/smoke/lesser //Chaplain smoke book + name = "Smoke" + desc = "This spell spawns a small cloud of choking smoke at your location." + + school = "conjuration" + charge_max = 360 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + + smoke_spread = 1 + smoke_amt = 2 + + action_icon_state = "smoke" + +/obj/effect/proc_holder/spell/targeted/emplosion/disable_tech + name = "Disable Tech" + desc = "This spell disables all weapons, cameras and most other technology in range." + charge_max = 400 + clothes_req = 1 + invocation = "NEC CANTIO" + invocation_type = "shout" + range = -1 + include_user = 1 + cooldown_min = 200 //50 deciseconds reduction per rank + + emp_heavy = 6 + emp_light = 10 + sound = 'sound/magic/Disable_Tech.ogg' + +/obj/effect/proc_holder/spell/targeted/turf_teleport/blink + name = "Blink" + desc = "This spell randomly teleports you a short distance." + + school = "abjuration" + charge_max = 20 + clothes_req = 1 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + cooldown_min = 5 //4 deciseconds reduction per rank + + + smoke_spread = 1 + smoke_amt = 0 + + inner_tele_radius = 0 + outer_tele_radius = 6 + + action_icon_state = "blink" + sound1 = 'sound/magic/blink.ogg' + sound2 = 'sound/magic/blink.ogg' + +/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult + name = "quickstep" + + charge_max = 100 + clothes_req = 0 + cult_req = 1 + +/obj/effect/proc_holder/spell/targeted/area_teleport/teleport + name = "Teleport" + desc = "This spell teleports you to a type of area of your selection." + + school = "abjuration" + charge_max = 600 + clothes_req = 1 + invocation = "SCYAR NILA" + invocation_type = "shout" + range = -1 + include_user = 1 + cooldown_min = 200 //100 deciseconds reduction per rank + + smoke_spread = 1 + smoke_amt = 2 + sound1 = 'sound/magic/Teleport_diss.ogg' + sound2 = 'sound/magic/Teleport_app.ogg' + +/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop + name = "Stop Time" + desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen." + charge_max = 500 + clothes_req = 1 + invocation = "TOKI WO TOMARE" + invocation_type = "shout" + range = 0 + cooldown_min = 100 + summon_amt = 1 + action_icon_state = "time" + + summon_type = list(/obj/effect/timestop/wizard) + +/obj/effect/proc_holder/spell/aoe_turf/conjure/carp + name = "Summon Carp" + desc = "This spell conjures a simple carp." + + school = "conjuration" + charge_max = 1200 + clothes_req = 1 + invocation = "NOUK FHUNMM SACP RISSKA" + invocation_type = "shout" + range = 1 + + summon_type = list(/mob/living/simple_animal/hostile/carp) + cast_sound = 'sound/magic/Summon_Karp.ogg' + + +/obj/effect/proc_holder/spell/aoe_turf/conjure/construct + name = "Artificer" + desc = "This spell conjures a construct which may be controlled by Shades" + + school = "conjuration" + charge_max = 600 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list(/obj/structure/constructshell) + + action_icon_state = "artificer" + cast_sound = 'sound/magic/SummonItems_generic.ogg' + + +/obj/effect/proc_holder/spell/aoe_turf/conjure/creature + name = "Summon Creature Swarm" + desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" + + school = "conjuration" + charge_max = 1200 + clothes_req = 0 + invocation = "IA IA" + invocation_type = "shout" + summon_amt = 10 + range = 3 + + summon_type = list(/mob/living/simple_animal/hostile/creature) + cast_sound = 'sound/magic/SummonItems_generic.ogg' + +/obj/effect/proc_holder/spell/targeted/trigger/blind + name = "Blind" + desc = "This spell temporarily blinds a single person and does not require wizard garb." + + school = "transmutation" + charge_max = 300 + clothes_req = 0 + invocation = "STI KALY" + invocation_type = "whisper" + message = "Your eyes cry out in pain!" + cooldown_min = 50 //12 deciseconds reduction per rank + + starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind") + + action_icon_state = "blind" + +/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult + name = "Summon Creatures (DANGEROUS)" + cult_req = 1 + charge_max = 5000 + summon_amt = 2 + + + +/obj/effect/proc_holder/spell/targeted/inflict_handler/blind + amt_eye_blind = 10 + amt_eye_blurry = 20 + sound = 'sound/magic/Blind.ogg' + +/obj/effect/proc_holder/spell/targeted/genetic/blind + mutations = list(BLINDMUT) + duration = 300 + sound = 'sound/magic/Blind.ogg' +/obj/effect/proc_holder/spell/aoe_turf/repulse + name = "Repulse" + desc = "This spell throws everything around the user away." + charge_max = 400 + clothes_req = 1 + invocation = "GITTAH WEIGH" + invocation_type = "shout" + range = 5 + cooldown_min = 150 + selection_type = "view" + sound = 'sound/magic/Repulse.ogg' + var/maxthrow = 5 + var/sparkle_path = /obj/effect/overlay/temp/gravpush + + action_icon_state = "repulse" + +/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, var/stun_amt = 2) + var/list/thrownatoms = list() + var/atom/throwtarget + var/distfromcaster + playMagSound() + for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously. + for(var/atom/movable/AM in T) + thrownatoms += AM + + for(var/am in thrownatoms) + var/atom/movable/AM = am + if(AM == user || AM.anchored) + continue + + throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) + distfromcaster = get_dist(user, AM) + if(distfromcaster == 0) + if(isliving(AM)) + var/mob/living/M = AM + M.Weaken(5) + M.adjustBruteLoss(5) + to_chat(M, "You're slammed into the floor by [user]!") + else + new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own + if(isliving(AM)) + var/mob/living/M = AM + M.Weaken(stun_amt) + to_chat(M, "You're thrown back by [user]!") + AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. + +/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! + name = "Tail Sweep" + desc = "Throw back attackers with a sweep of your tail." + sound = 'sound/magic/Tail_swing.ogg' + charge_max = 150 + clothes_req = 0 + range = 2 + cooldown_min = 150 + invocation_type = "none" + sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep + action_icon_state = "tailsweep" + action_background_icon_state = "bg_alien" + +/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr) + if(istype(user, /mob/living/carbon)) + var/mob/living/carbon/C = user + playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1) + C.spin(6,1) + ..(targets, user, 3) + +/obj/effect/proc_holder/spell/targeted/sacred_flame + name = "Sacred Flame" + desc = "Makes everyone around you more flammable, and lights yourself on fire." + charge_max = 60 + clothes_req = 0 + invocation = "FI'RAN DADISKO" + invocation_type = "shout" + max_targets = 0 + range = 6 + include_user = 1 + selection_type = "view" + action_icon_state = "sacredflame" + sound = 'sound/magic/Fireball.ogg' + +/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr) + for(var/mob/living/L in targets) + L.adjust_fire_stacks(20) + if(isliving(user)) + var/mob/living/U = user + U.IgniteMob() + +/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket + name = "Thrown Lightning" + desc = "Forged from eldrich energies, a packet of pure power, known as a spell packet will appear in your hand, that when thrown will stun the target." + clothes_req = 1 + item_type = /obj/item/spellpacket/lightningbolt + charge_max = 10 + +/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr) + ..() + for(var/mob/living/carbon/C in targets) + C.throw_mode_on() + +/obj/item/spellpacket/lightningbolt + name = "\improper Lightning bolt Spell Packet" + desc = "Some birdseed wrapped in cloth that somehow crackles with electricity." + icon = 'icons/obj/toy.dmi' + icon_state = "snappop" + w_class = WEIGHT_CLASS_TINY + +/obj/item/spellpacket/lightningbolt/throw_impact(atom/hit_atom) + if(!..()) + if(isliving(hit_atom)) + var/mob/living/M = hit_atom + M.electrocute_act(80, src, illusion = 1) + qdel(src) + +/obj/item/spellpacket/lightningbolt/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback) + . = ..() + if(ishuman(thrower)) + var/mob/living/carbon/human/H = thrower + H.say("LIGHTNINGBOLT!!") diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index de8c2b79ac..585f452de4 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -218,6 +218,14 @@ for(var/X in list(owner.glasses, owner.ears, owner.wear_mask, owner.head)) var/obj/item/I = X owner.dropItemToGround(I, TRUE) + + //Handle dental implants + for(var/datum/action/item_action/hands_free/activate_pill/AP in owner.actions) + AP.Remove(owner) + var/obj/pill = AP.target + if(pill) + pill.forceMove(src) + name = "[owner.real_name]'s head" ..() @@ -254,6 +262,8 @@ if(held_index > C.hand_bodyparts.len) C.hand_bodyparts.len = held_index C.hand_bodyparts[held_index] = src + if(C.dna.species.mutanthands && !is_pseudopart) + C.put_in_hand(new C.dna.species.mutanthands(), held_index) if(C.hud_used) var/obj/screen/inventory/hand/hand = C.hud_used.hand_slots["[held_index]"] if(hand) @@ -269,6 +279,9 @@ qdel(S) break + for(var/obj/item/organ/O in contents) + O.Insert(C) + update_bodypart_damage_state() C.updatehealth() @@ -300,6 +313,14 @@ C.real_name = real_name real_name = "" name = initial(name) + + //Handle dental implants + for(var/obj/item/weapon/reagent_containers/pill/P in src) + for(var/datum/action/item_action/hands_free/activate_pill/AP in P.actions) + P.forceMove(C) + AP.Grant(C) + break + ..() diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 909f83e4d7..dd63506086 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -48,7 +48,10 @@ brain = null update_icon_dropped() else - I.loc = T + if(istype(I, /obj/item/weapon/reagent_containers/pill)) + for(var/datum/action/item_action/hands_free/activate_pill/AP in I.actions) + qdel(AP) + I.forceMove(T) /obj/item/bodypart/head/update_limb(dropping_limb, mob/living/carbon/source) var/mob/living/carbon/C diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index eef88e4a5f..c51a49081c 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -18,10 +18,10 @@ user.drop_item() tool.loc = target - var/datum/action/item_action/hands_free/activate_pill/P = new + var/datum/action/item_action/hands_free/activate_pill/P = new(tool) P.button.name = "Activate [tool.name]" P.target = tool - P.Grant(target) + P.Grant(target) //The pill never actually goes in an inventory slot, so the owner doesn't inherit actions from it user.visible_message("[user] wedges \the [tool] into [target]'s [parse_zone(target_zone)]!", "You wedge [tool] into [target]'s [parse_zone(target_zone)].") return 1 @@ -37,6 +37,5 @@ if(target.reagents.total_volume) target.reagents.reaction(owner, INGEST) target.reagents.trans_to(owner, target.reagents.total_volume) - Remove(owner) qdel(target) return 1 \ No newline at end of file diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 6e3c224924..9d88e491b2 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -106,7 +106,7 @@ "You begin to mend the incision in [target]'s [parse_zone(target_zone)]...") else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) - to_chat(user, "[tool] was biten by someone! It's too damaged to use!") + to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") return -1 /datum/surgery_step/manipulate_organs/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index c91cb219af..fd6a3466bd 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -4,6 +4,7 @@ desc = "There are three parts to the ear. Inner, middle and outer. Only one of these parts should be normally visible." zone = "head" slot = "ears" + gender = PLURAL // `deaf` measures "ticks" of deafness. While > 0, the person is unable // to hear anything. @@ -14,6 +15,8 @@ // without external aid (earmuffs, drugs) var/ear_damage = 0 + var/bang_protect = 0 //Resistance against loud noises + /obj/item/organ/ears/on_life() if(!iscarbon(owner)) return diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 672ac924ad..83b70d33d9 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -4,6 +4,7 @@ desc = "I see you!" zone = "eyes" slot = "eye_sight" + gender = PLURAL var/sight_flags = 0 var/see_in_dark = 2 @@ -63,6 +64,9 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE sight_flags = SEE_MOBS +/obj/item/organ/eyes/night_vision/zombie + name = "undead eyes" + desc = "Somewhat counterintuitively, these half rotten eyes actually have superior vision to those of a living human." ///Robotic diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 97e794b466..78adf8268c 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -125,16 +125,13 @@ if(!getorganslot("tongue")) var/obj/item/organ/tongue/T - if(dna && dna.species) - for(var/tongue_type in dna.species.mutant_organs) - if(ispath(tongue_type, /obj/item/organ/tongue)) - T = new tongue_type() - T.Insert(src) + if(dna && dna.species && dna.species.mutanttongue) + T = new dna.species.mutanttongue() + else + T = new() // if they have no mutant tongues, give them a regular one - if(!T) - T = new() - T.Insert(src) + T.Insert(src) if(!getorganslot("eye_sight")) var/obj/item/organ/eyes/E diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 1ef36f3fe2..5a3555c8f9 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -10,11 +10,12 @@ var/taste_sensitivity = 15 // lower is more sensitive. /obj/item/organ/tongue/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/common, + /datum/language/draconic, /datum/language/monkey, - /datum/language/ratvar + /datum/language/narsie, )) /obj/item/organ/tongue/get_spans() @@ -33,7 +34,7 @@ if(say_mod && M.dna && M.dna.species) M.dna.species.say_mod = initial(M.dna.species.say_mod) -/obj/item/organ/tongue/can_speak_in_language(datum/language/dt) +/obj/item/organ/tongue/could_speak_in_language(datum/language/dt) . = is_type_in_typecache(dt, languages_possible) /obj/item/organ/tongue/lizard @@ -123,10 +124,11 @@ taste_sensitivity = 10 // LIZARDS ARE ALIENS CONFIRMED /obj/item/organ/tongue/alien/Initialize(mapload) - ..() + . = ..() languages_possible = typecacheof(list( /datum/language/xenocommon, /datum/language/common, + /datum/language/draconic, /datum/language/ratvar, /datum/language/monkey)) @@ -175,7 +177,7 @@ /obj/item/organ/tongue/bone/plasmaman/get_spans() return - + /obj/item/organ/tongue/robot name = "robotic voicebox" desc = "A voice synthesizer that can interface with organic lifeforms." @@ -185,16 +187,8 @@ attack_verb = list("beeped", "booped") taste_sensitivity = 25 // not as good as an organic tongue -/obj/item/organ/tongue/robot/Initialize(mapload) - ..() - languages_possible = typecacheof(list( - /datum/language/xenocommon, - /datum/language/common, - /datum/language/ratvar, - /datum/language/monkey, - /datum/language/drone, - /datum/language/machine, - /datum/language/swarmer)) +/obj/item/organ/tongue/robot/can_speak_in_language(datum/language/dt) + . = TRUE // THE MAGIC OF ELECTRONICS /obj/item/organ/tongue/robot/get_spans() return ..() | SPAN_ROBOT diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index a2048c2b71..b4154c8e9c 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -8,6 +8,7 @@ icon_state = "appendix" zone = "mouth" slot = "vocal_cords" + gender = PLURAL var/list/spans = null /obj/item/organ/vocal_cords/proc/can_speak_with() //if there is any limitation to speaking with these cords @@ -19,6 +20,40 @@ /obj/item/organ/vocal_cords/proc/handle_speech(message) //actually say the message owner.say(message, spans = spans, sanitize = FALSE) +/obj/item/organ/adamantine_resonator + name = "adamantine resonator" + desc = "Fragments of adamantine exists in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders." + zone = "head" + slot = "adamantine_resonator" + icon_state = "adamantine_resonator" + +/obj/item/organ/vocal_cords/adamantine + name = "adamantine vocal cords" + desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Adamantine golems use this to broadcast messages to nearby golems." + actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords) + zone = "mouth" + slot = "vocal_cords" + icon_state = "adamantine_cords" + +/datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger() + if(!IsAvailable()) + return + var/message = input(owner, "Resonate a message to all nearby golems.", "Resonate") + if(QDELETED(src) || QDELETED(owner) || !message) + return + owner.say(".x[message]") + +/obj/item/organ/vocal_cords/adamantine/handle_speech(message) + var/msg = "[owner.real_name] resonates, \"[message]\"" + for(var/m in GLOB.player_list) + if(iscarbon(m)) + var/mob/living/carbon/C = m + if(C.getorganslot("adamantine_resonator")) + to_chat(C, msg) + if(isobserver(m)) + var/link = FOLLOW_LINK(m, owner) + to_chat(m, "[link] [msg]") + //Colossus drop, forces the listeners to obey certain commands /obj/item/organ/vocal_cords/colossus name = "divine vocal cords" @@ -146,12 +181,13 @@ for(var/V in listeners) var/mob/living/L = V - if(L.mind && L.mind.devilinfo && findtext(message, L.mind.devilinfo.truename)) - var/start = findtext(message, L.mind.devilinfo.truename) - listeners = list(L) //let's be honest you're never going to find two devils with the same name + var/datum/antagonist/devil/devilinfo = is_devil(L) + if(devilinfo && findtext(message, devilinfo.truename)) + var/start = findtext(message, devilinfo.truename) + listeners = list(L) //Devil names are unique. power_multiplier *= 5 //if you're a devil and god himself addressed you, you fucked up //Cut out the name so it doesn't trigger commands - message = copytext(message, 0, start)+copytext(message, start + length(L.mind.devilinfo.truename), length(message) + 1) + message = copytext(message, 0, start)+copytext(message, start + length(devilinfo.truename), length(message) + 1) break else if(dd_hasprefix(message, L.real_name)) specific_listeners += L //focus on those with the specified name @@ -247,7 +283,7 @@ else if((findtext(message, silence_words))) cooldown = COOLDOWN_STUN for(var/mob/living/carbon/C in listeners) - if(user.mind && (user.mind.assigned_role == "Librarian" || user.mind.assigned_role == "Mime")) + if(user.mind && (user.mind.assigned_role == "Curator" || user.mind.assigned_role == "Mime")) power_multiplier *= 3 C.silent += (10 * power_multiplier) @@ -327,8 +363,9 @@ cooldown = COOLDOWN_MEME for(var/V in listeners) var/mob/living/L = V - if(L.mind && L.mind.devilinfo) - L.say("[L.mind.devilinfo.truename]") + if(is_devil(L)) + var/datum/antagonist/devil/devilinfo = is_devil(L) + L.say("[devilinfo.truename]") else L.say("[L.real_name]") sleep(5) //So the chat flows more naturally diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 53520679c2..4be7b84a6c 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -72,9 +72,9 @@ user.visible_message("[user] successfully replaces [target]'s [parse_zone(target_zone)]!", "You succeed in replacing [target]'s [parse_zone(target_zone)].") return 1 else - target.regenerate_limb(target_zone) - var/obj/item/bodypart/L = target.get_bodypart(target_zone) + var/obj/item/bodypart/L = target.newBodyPart(target_zone, FALSE, FALSE) L.is_pseudopart = TRUE + L.attach_limb(target) user.visible_message("[user] finishes attaching [tool]!", "You attach [tool].") qdel(tool) if(istype(tool, /obj/item/weapon/twohanded/required/chainsaw)) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 90cb344cf5..efd1ec64f2 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -111,17 +111,8 @@ if(contents.len) to_chat(user, "[src] already has something inside it.") return - if(isorgan(I)) - var/obj/item/organ/O = I - if(O.status != ORGAN_ORGANIC) - to_chat(user, "[src] can only hold organic body parts!") - return - else if(isbodypart(I)) - var/obj/item/bodypart/BP = I - if(BP.status != BODYPART_ORGANIC) - to_chat(user, "[src] can only hold organic body parts!") - return - else + if(!isorgan(I) && !isbodypart(I)) + to_chat(user, "[src] can only hold body parts!") return user.visible_message("[user] puts [I] into [src].", "You put [I] inside [src].") @@ -150,4 +141,4 @@ desc = "A container for holding body parts." else to_chat(user, "[src] is empty.") - return \ No newline at end of file + return diff --git a/code/modules/tgui/states/language_menu.dm b/code/modules/tgui/states/language_menu.dm index 4a370e8213..fedc4320e4 100644 --- a/code/modules/tgui/states/language_menu.dm +++ b/code/modules/tgui/states/language_menu.dm @@ -10,5 +10,5 @@ GLOBAL_DATUM_INIT(language_menu_state, /datum/ui_state/language_menu, new) . = UI_INTERACTIVE else if(istype(src_object, /datum/language_menu)) var/datum/language_menu/LM = src_object - if(LM.owner == user) + if(LM.language_holder.get_atom() == user) . = UI_INTERACTIVE diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index d80a8e21b3..cbee8e53f2 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -44,7 +44,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. for(var/i in 1 to 3) var/datum/uplink_item/I = pick_n_take(sale_items) var/datum/uplink_item/A = new I.type - var/discount = pick(4;0.75,2;0.5,1;0.25) + var/discount = A.get_discount() var/list/disclaimer = list("Void where prohibited.", "Not recommended for children.", "Contains small parts.", "Check local laws for legality in region.", "Do not taunt.", "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", "Keep away from fire or flames.", "Product is provided \"as is\" without any implied or expressed warranties.", "As seen on TV.", "For recreational use only.", "Use only as directed.", "16% sales tax will be charged for orders originating within Space Nebraska.") A.limited_stock = 1 I.refundable = FALSE //THIS MAN USES ONE WEIRD TRICK TO GAIN FREE TC, CODERS HATES HIM! @@ -86,6 +86,9 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. var/player_minimum //The minimum crew size needed for this item to be added to uplinks. var/purchase_log_vis = TRUE // Visible in the purchase log? +/datum/uplink_item/proc/get_discount() + return pick(4;0.75,2;0.5,1;0.25) + /datum/uplink_item/proc/spawn_item(turf/loc, obj/item/device/uplink/U) if(item) SSblackbox.add_details("traitor_uplink_items_bought", "[name]|[cost]") @@ -276,12 +279,21 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. /datum/uplink_item/dangerous/sword name = "Energy Sword" desc = "The energy sword is an edged weapon with a blade of pure energy. The sword is small enough to be \ - pocketed when inactive. Activating it produces a loud, distinctive noise. One can combine two \ - energy swords to create a double energy sword, which must be wielded in two hands but is more robust \ - and deflects all energy projectiles." + pocketed when inactive. Activating it produces a loud, distinctive noise." item = /obj/item/weapon/melee/energy/sword/saber cost = 8 +/datum/uplink_item/dangerous/doublesword + name = "Double-Bladed Energy Sword" + desc = "The double-bladed energy sword does slightly more damage than a standard energy sword and will deflect \ + all energy projectiles, but requires two hands to wield." + item = /obj/item/weapon/twohanded/dualsaber + player_minimum = 25 + cost = 16 + +/datum/uplink_item/dangerous/doublesword/get_discount() + return pick(4;0.8,2;0.65,1;0.5) + /datum/uplink_item/dangerous/powerfist name = "Power Fist" desc = "The power-fist is a metal gauntlet with a built-in piston-ram powered by an external gas supply.\ @@ -917,6 +929,15 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 4 include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang) +/datum/uplink_item/device_tools/syndietome + name = "Syndicate Tome" + desc = "Using rare artifacts acquired at great cost, the syndicate has reverse engineered \ + the seemingly magical books of a certain cult. Though lacking the esoteric abilities \ + of the originals, these inferior copies are still quite useful, being able to provide \ + both weal and woe on the battlefield, even if they do occasionally bite off a finger." + item = /obj/item/weapon/storage/book/bible/syndicate + cost = 9 + /datum/uplink_item/device_tools/thermal name = "Thermal Imaging Glasses" desc = "These goggles can be turned to resemble common eyewears throughout the station. \ @@ -957,6 +978,24 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. item = /obj/item/weapon/aiModule/syndicate cost = 14 +/datum/uplink_item/device_tools/briefcase_launchpad + name = "Briefcase Launchpad" + desc = "A briefcase containing a launchpad, a device able to teleport items and people to and from targets up to three tiles away from the briefcase. \ + Also includes a remote control. Touch the briefcase with the remote to link it." + surplus = 0 + item = /obj/item/briefcase_launchpad + cost = 6 + +/datum/uplink_item/device_tools/briefcase_launchpad/buy(mob/user, obj/item/device/uplink/U) + var/obj/item/device/launchpad_remote/L = new(get_turf(user)) //free remote + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.put_in_hands(L)) + to_chat(H, "[L] materializes into your hands!") + else + to_chat(H, "\The [L] materializes onto the floor.") + return ..() + /datum/uplink_item/device_tools/magboots name = "Blood-Red Magboots" desc = "A pair of magnetic boots with a Syndicate paintjob that assist with freer movement in space or on-station \ @@ -1250,7 +1289,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. desc = "Most magic eightballs are toys with dice inside. Although identical in appearance to the harmless toys, this occult device reaches into the spirit world to find its answers. Be warned, that spirits are often capricious or just little assholes. To use, simply speak your question aloud, then begin shaking." item = /obj/item/toy/eightball/haunted cost = 2 - restricted_roles = list("Librarian") + restricted_roles = list("Curator") limited_stock = 1 // please don't spam deadchat // Pointless diff --git a/code/modules/uplink/uplink_item_cit.dm b/code/modules/uplink/uplink_item_cit.dm index c74ad3ba9c..b835a21a8c 100644 --- a/code/modules/uplink/uplink_item_cit.dm +++ b/code/modules/uplink/uplink_item_cit.dm @@ -7,4 +7,15 @@ refundable = TRUE cost = 10 surplus = 20 //Let's not have this be too common + exclude_modes = list(/datum/game_mode/nuclear) + +/datum/uplink_item/stealthy_tools/holoparasite + name="Holoparasite Injector" + desc="It contains an alien nanoswarm of unknown origin.\ + Though capable of near sorcerous feats via use of hardlight holograms and nanomachines.\ + It requires an organic host as a home base and source of fuel." //This is the description of the actual injector. Feel free to change this for uplink purposes// + item = /obj/item/weapon/storage/box/syndie_kit/holoparasite + refundable = TRUE + cost = 10 //I'm working off the borer. Price subject to change + surplus = 20 //Nobody needs a ton of parasites exclude_modes = list(/datum/game_mode/nuclear) \ No newline at end of file diff --git a/code/modules/vore/eating/belly_vr.dm b/code/modules/vore/eating/belly_vr.dm index 54088ad226..d5c484d387 100644 --- a/code/modules/vore/eating/belly_vr.dm +++ b/code/modules/vore/eating/belly_vr.dm @@ -290,7 +290,7 @@ R.visible_message( "[struggle_outer_message]", "[struggle_user_message]") playsound(get_turf(owner),"struggle_sound",75,0,-5,1,channel=51) R.stop_sound_channel(51) - R.playsound_direct("prey_struggle_sound",60) + R.playsound_local("prey_struggle_sound",60) if(escapable && R.a_intent != "help") //If the stomach has escapable enabled and the person is actually trying to kick out to_chat(R, "You attempt to climb out of \the [name].") diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 12dd76a3fd..1438f5b027 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -23,7 +23,7 @@ M.stop_sound_channel(CHANNEL_PRED) playsound(get_turf(owner),"digest_pred",75,0,-6,1,channel=CHANNEL_PRED) M.stop_sound_channel(CHANNEL_PRED) - M.playsound_direct("digest_prey",60) + M.playsound_local("digest_prey",60) //Pref protection! if (!M.digestable) @@ -51,7 +51,7 @@ M.stop_sound_channel(CHANNEL_PRED) playsound(get_turf(owner),"death_pred",50,0,-6,1,channel=CHANNEL_PRED) M.stop_sound_channel(CHANNEL_PRED) - M.playsound_direct("death_prey",60) + M.playsound_local("death_prey",60) digestion_death(M) owner.update_icons() continue @@ -70,7 +70,7 @@ M.stop_sound_channel(CHANNEL_PRED) playsound(get_turf(owner),"digest_pred",50,0,-6,1,channel=CHANNEL_PRED) M.stop_sound_channel(CHANNEL_PRED) - M.playsound_direct("digest_prey",60) + M.playsound_local("digest_prey",60) if(M.stat != DEAD) if(owner.nutrition >= NUTRITION_LEVEL_STARVING && (M.health < M.maxHealth)) diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 1bdbd3fa45..1b93a4f685 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -46,7 +46,8 @@ var/obj/item/organ/zombie_infection/infection infection = target.getorganslot("zombie_infection") if(!infection) - infection = new(target) + infection = new() + infection.Insert(target) /obj/item/zombie_hand/proc/check_feast(mob/living/target, mob/living/user) if(target.stat == DEAD) diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index f254ef6337..3515da0dc6 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -5,7 +5,7 @@ slot = "zombie_infection" icon_state = "blacktumor" origin_tech = "biotech=5" - var/datum/species/old_species + var/datum/species/old_species = /datum/species/human var/living_transformation_time = 3 var/converts_living = FALSE @@ -63,6 +63,7 @@ if(!iszombie(owner)) old_species = owner.dna.species.type + owner.set_species(/datum/species/zombie/infectious) if(!converts_living && owner.stat != DEAD) return @@ -70,7 +71,6 @@ var/stand_up = (owner.stat == DEAD) || (owner.stat == UNCONSCIOUS) owner.grab_ghost() - owner.set_species(/datum/species/zombie/infectious) owner.revive(full_heal = TRUE) owner.visible_message("[owner] suddenly convulses, as [owner.p_they()][stand_up ? " stagger to [owner.p_their()] feet and" : ""] gain a ravenous hunger in [owner.p_their()] eyes!", "You HUNGER!") playsound(owner.loc, 'sound/hallucinations/far_noise.ogg', 50, 1) diff --git a/code/world.dm b/code/world.dm index 9023ac47f3..39d34dfd53 100644 --- a/code/world.dm +++ b/code/world.dm @@ -25,37 +25,52 @@ else external_rsc_urls.Cut(i,i+1) #endif - //logs - var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - GLOB.href_logfile = file("data/logs/[date_string] hrefs.htm") - GLOB.diary = file("data/logs/[date_string].log") - GLOB.diaryofmeanpeople = file("data/logs/[date_string] Attack.log") - GLOB.diary << "\n\nStarting up. [time_stamp()]\n---------------------" - GLOB.diaryofmeanpeople << "\n\nStarting up. [time_stamp()]\n---------------------" - GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently - + GLOB.config_error_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) config = new + GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" + if(config.sql_enabled) + if(SSdbcore.Connect()) + log_world("Database connection established.") + var/datum/DBQuery/query_feedback_create_round = SSdbcore.NewQuery("INSERT INTO [format_table_name("feedback")] SELECT null, Now(), MAX(round_id)+1, \"server_ip\", 0, \"[world.internet_address]:[world.port]\" FROM [format_table_name("feedback")]") + query_feedback_create_round.Execute() + var/datum/DBQuery/query_feedback_max_id = SSdbcore.NewQuery("SELECT MAX(round_id) FROM [format_table_name("feedback")]") + query_feedback_max_id.Execute() + if(query_feedback_max_id.NextRow()) + GLOB.round_id = query_feedback_max_id.item[1] + GLOB.log_directory += "[GLOB.round_id]" + else + log_world("Your server failed to establish a connection with the database.") + if(!GLOB.round_id) + GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" + GLOB.world_game_log = file("[GLOB.log_directory]/game.log") + GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") + GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") + GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") + GLOB.world_game_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" + GLOB.world_attack_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" + GLOB.world_runtime_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" + GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently + if(fexists(GLOB.config_error_log)) + fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") + fdel(GLOB.config_error_log) + + if(GLOB.round_id) + log_game("Round ID: [GLOB.round_id]") + GLOB.revdata.DownloadPRDetails() load_mode() load_motd() load_admins() -//disabled to prevent runtimes until it's fixed -// load_mentors() + load_menu() if(config.usewhitelist) load_whitelist() +//disabled to prevent runtimes until it's fixed +// load_mentors() LoadBans() - investigate_reset() GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 - if(config.sql_enabled) - if(!SSdbcore.Connect()) - log_world("Your server failed to establish a connection with the database.") - else - log_world("Database connection established.") - - GLOB.data_core = new /datum/datacore() Master.Initialize(10, FALSE) @@ -63,7 +78,7 @@ #define IRC_STATUS_THROTTLE 50 /world/Topic(T, addr, master, key) if(config && config.log_world_topic) - GLOB.diary << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" + GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" var/list/input = params2list(T) var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) @@ -136,11 +151,7 @@ if(!key_valid) return "Bad Key" else -#define CHAT_PULLR 64 //defined in preferences.dm, but not available here at compilation time - for(var/client/C in GLOB.clients) - if(C.prefs && (C.prefs.chat_toggles & CHAT_PULLR)) - to_chat(C, "PR: [input["announce"]]") -#undef CHAT_PULLR + AnnouncePR(input["announce"], json_decode(input["payload"])) else if("crossmessage" in input) if(!key_valid) @@ -176,7 +187,27 @@ else if("server_hop" in input) show_server_hop_transfer_screen(input["server_hop"]) +#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round + //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored + +/world/proc/AnnouncePR(announcement, list/payload) + var/static/list/PRcounts = list() //PR id -> number of times announced this round + var/id = "[payload["pull_request"]["id"]]" + if(!PRcounts[id]) + PRcounts[id] = 1 + else + ++PRcounts[id] + if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) + return + +#define CHAT_PULLR 64 //defined in preferences.dm, but not available here at compilation time + for(var/client/C in GLOB.clients) + if(C.prefs && (C.prefs.chat_toggles & CHAT_PULLR)) + C << "PR: [announcement]" +#undef CHAT_PULLR + #define WORLD_REBOOT(X) log_world("World rebooted at [time_stamp()]"); ..(X); return; + /world/Reboot(var/reason, var/feedback_c, var/feedback_r, var/time) if (reason == 1) //special reboot, do none of the normal stuff if (usr) @@ -209,7 +240,6 @@ WORLD_REBOOT(0) #undef WORLD_REBOOT - /world/proc/OnReboot(reason, feedback_c, feedback_r, round_end_sound_sent) SSblackbox.set_details("[feedback_c]","[feedback_r]") log_game("Rebooting World. [reason]") @@ -226,7 +256,7 @@ /world/proc/RoundEndAnimation(round_end_sound_sent) set waitfor = FALSE var/round_end_sound - if(!SSticker && SSticker.round_end_sound) + if(SSticker.round_end_sound) round_end_sound = SSticker.round_end_sound if (!round_end_sound_sent) for(var/thing in GLOB.clients) @@ -252,11 +282,12 @@ world << sound(round_end_sound) /world/proc/load_mode() - var/list/Lines = world.file2list("data/mode.txt") - if(Lines.len) - if(Lines[1]) - GLOB.master_mode = Lines[1] - GLOB.diary << "Saved mode is '[GLOB.master_mode]'" + var/mode = trim(file2text("data/mode.txt")) + if(mode) + GLOB.master_mode = mode + else + GLOB.master_mode = "extended" + log_game("Saved mode is '[GLOB.master_mode]'") /world/proc/save_mode(the_mode) var/F = file("data/mode.txt") @@ -316,6 +347,3 @@ s += ": [jointext(features, ", ")]" status = s - -/world/proc/has_round_started() - return SSticker.HasRoundStarted() \ No newline at end of file diff --git a/config/config.txt b/config/config.txt index 524802219d..68df4c81cf 100644 --- a/config/config.txt +++ b/config/config.txt @@ -80,9 +80,6 @@ LOG_PRAYER ## log lawchanges LOG_LAW -## log all Topic() calls (for use by coders in tracking down Topic issues) -# LOG_HREFS - ## log all world.Topic() calls # LOG_WORLD_TOPIC @@ -263,6 +260,10 @@ EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, f ## Requres database NOTIFY_NEW_PLAYER_AGE 0 +## Notify admins when a player connects if their byond account was created in the last X days +## Requires database +NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1 + ## Notify the irc channel when a new player makes their first connection ## Requres database #IRC_FIRST_CONNECTION_ALERT @@ -281,9 +282,6 @@ PANIC_SERVER_NAME [Put the name here] ## Uncomment to have the changelog file automatically open when a user connects and hasn't seen the latest changelog #AGGRESSIVE_CHANGELOG -## Uncomment to have the game log runtimes to the log folder. (Note: this disables normal output in dd/ds, so it should be left off for testing. -#LOG_RUNTIMES - ## Comment this out if you've used the mass conversion sql proc for notes or want to stop converting notes AUTOCONVERT_NOTES diff --git a/config/game_options.txt b/config/game_options.txt index 356dc1acab..a534dc633e 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -6,10 +6,10 @@ DAMAGE_MULTIPLIER 1 ### REVIVAL ### # whether pod plants work or not -REVIVAL_POD_PLANTS 1 +REVIVAL_POD_PLANTS # whether cloning tubes work or not -REVIVAL_CLONING 1 +REVIVAL_CLONING # amount of time (in hundredths of seconds) for which a brain retains the "spark of life" after the person's death (set to -1 for infinite) REVIVAL_BRAIN_LIFE -1 @@ -166,7 +166,7 @@ MIDROUND_ANTAG ABDUCTION #MIN_POP GANG 20 #MAX_POP GANG -1 -#MIN_POP CULT 24 +#MIN_POP CULT 0 #MAX_POP CULT -1 #MIN_POP CLOCKWORK_CULT 24 diff --git a/config/game_options.txt.rej b/config/game_options.txt.rej new file mode 100644 index 0000000000..bb860ac94d --- /dev/null +++ b/config/game_options.txt.rej @@ -0,0 +1,10 @@ +diff a/config/game_options.txt b/config/game_options.txt (rejected hunks) +@@ -482,7 +482,7 @@ Space_Budget 16 + #Must be at least 30 to not break parallax I recommended at least 55 to be visually/aurally appropriate + ARRIVALS_SHUTTLE_DOCK_WINDOW 55 + +-#Set this to 1 to prevent late join players from spawning if the arrivals shuttle is depressurized ++#Uncomment to prevent late join players from spawning if the arrivals shuttle is depressurized + #ARRIVALS_SHUTTLE_REQUIRE_SAFE_LATEJOIN + + # How many wirechewing rodents you want to spawn on exposed maintenane wires at the start of the round. You may wish to set this to 0 if you're testing powernets. diff --git a/config/jobs.txt b/config/jobs.txt index 3b65a6a9b8..a0c1ffa970 100644 --- a/config/jobs.txt +++ b/config/jobs.txt @@ -22,7 +22,7 @@ Janitor=2,1 Clown=1,1 Mime=1,1 -Librarian=1,1 +Curator=1,1 Lawyer=2,2 Chaplain=1,1 diff --git a/html/changelogs/AutoChangeLog-pr-1001.yml b/html/changelogs/AutoChangeLog-pr-1001.yml new file mode 100644 index 0000000000..2ab2b02d25 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1001.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "Centcom Intelligence reports that the Hidden Syndicate Research Base may have received a shipment of viruses." diff --git a/html/changelogs/AutoChangeLog-pr-1003.yml b/html/changelogs/AutoChangeLog-pr-1003.yml new file mode 100644 index 0000000000..0b918014dd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1003.yml @@ -0,0 +1,4 @@ +author: "fludd12" +delete-after: True +changes: + - rscadd: "You can now add grills to a bonfire, letting you cook things on top of them." diff --git a/html/changelogs/AutoChangeLog-pr-1008.yml b/html/changelogs/AutoChangeLog-pr-1008.yml new file mode 100644 index 0000000000..b99684b56f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1008.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "Centcom Engineering has reviewed the power schematic for the engine room and added an Area Power Controller." diff --git a/html/changelogs/AutoChangeLog-pr-1017.yml b/html/changelogs/AutoChangeLog-pr-1017.yml new file mode 100644 index 0000000000..eadd73f6f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1017.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Syndicate Tomes have been added to traitor uplinks for 9 TC. They let an agent or an operative provide both weal and woe." diff --git a/html/changelogs/AutoChangeLog-pr-1018.yml b/html/changelogs/AutoChangeLog-pr-1018.yml new file mode 100644 index 0000000000..6943a19a42 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1018.yml @@ -0,0 +1,4 @@ +author: "LetterJay" +delete-after: True +changes: + - bugfix: "fixes the hunter hat directional states" diff --git a/html/changelogs/AutoChangeLog-pr-1023.yml b/html/changelogs/AutoChangeLog-pr-1023.yml new file mode 100644 index 0000000000..dc2b6ac6a2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1023.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "revenant respawning will not spam up deadchat so much, and is less likely to break." diff --git a/html/changelogs/AutoChangeLog-pr-1026.yml b/html/changelogs/AutoChangeLog-pr-1026.yml new file mode 100644 index 0000000000..e788e84d3e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1026.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Spacevines can no longer spread on space transit turfs." diff --git a/html/changelogs/AutoChangeLog-pr-608.yml b/html/changelogs/AutoChangeLog-pr-608.yml new file mode 100644 index 0000000000..2d23f1ab00 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-608.yml @@ -0,0 +1,5 @@ +author: "Gun Hog" +delete-after: True +changes: + - rscadd: "The GPS interface has been converted to tgui." + - experiment: "GPS now update automatically or manually, give distance and direction to a signal, and many other improvements!" diff --git a/html/changelogs/AutoChangeLog-pr-642.yml b/html/changelogs/AutoChangeLog-pr-642.yml new file mode 100644 index 0000000000..0d442e470d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-642.yml @@ -0,0 +1,5 @@ +author: "Cobby" +delete-after: True +changes: + - tweak: "The GPS set tag has gone from a limit of 5 characters to 20." + - rscadd: "The GPS can now be personalized in both name and description using a pen." diff --git a/html/changelogs/AutoChangeLog-pr-676.yml b/html/changelogs/AutoChangeLog-pr-676.yml new file mode 100644 index 0000000000..73c6fac766 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-676.yml @@ -0,0 +1,5 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Proselytizers can now charge from Sigils of Transmission at a rate of 1000W per second." + - rscadd: "Sigils of Transmission can be charged with brass at a rate of 250W per sheet." diff --git a/html/changelogs/AutoChangeLog-pr-682.yml b/html/changelogs/AutoChangeLog-pr-682.yml new file mode 100644 index 0000000000..c55c645e6e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-682.yml @@ -0,0 +1,4 @@ +author: "Swindly" +delete-after: True +changes: + - tweak: "Mercury and Lithium make people move when not in space instead of when in space." diff --git a/html/changelogs/AutoChangeLog-pr-696.yml b/html/changelogs/AutoChangeLog-pr-696.yml new file mode 100644 index 0000000000..9f58df768f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-696.yml @@ -0,0 +1,5 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Belligerent now prevents you from running for 7 seconds after every chant." + - rscdel: "However, you no longer remain walking after Belligerent's effect fades." diff --git a/html/changelogs/AutoChangeLog-pr-697.yml b/html/changelogs/AutoChangeLog-pr-697.yml new file mode 100644 index 0000000000..3967efa494 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-697.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Clockcult component generation will automatically focus on components needed to activate the Ark if it exists." diff --git a/html/changelogs/AutoChangeLog-pr-698.yml b/html/changelogs/AutoChangeLog-pr-698.yml new file mode 100644 index 0000000000..40e55644b5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-698.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "You can now make holocalls! Simply stand on a pad, bring up the menu, and select the holopad you wish to call. Remain still until someone answers. When they do, you'll be able to act just like an AI hologram until the call ends" diff --git a/html/changelogs/AutoChangeLog-pr-701.yml b/html/changelogs/AutoChangeLog-pr-701.yml new file mode 100644 index 0000000000..8848bcb450 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-701.yml @@ -0,0 +1,7 @@ +author: "ninjanomnom" +delete-after: True +changes: + - tweak: "TEG displays power in kw or MW now" + - tweak: "TEG power bar only maxes over 1MW now" + - experiment: "Moves TEG to SSair" + - experiment: "Moves SM to SSair" diff --git a/html/changelogs/AutoChangeLog-pr-708.yml b/html/changelogs/AutoChangeLog-pr-708.yml new file mode 100644 index 0000000000..6cb7c07312 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-708.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Squishy plants will now affect walls and other turfs they get squished on" diff --git a/html/changelogs/AutoChangeLog-pr-714.yml b/html/changelogs/AutoChangeLog-pr-714.yml new file mode 100644 index 0000000000..d5e4582f40 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-714.yml @@ -0,0 +1,4 @@ +author: "XDTM" +delete-after: True +changes: + - tweak: "Blood Cult's talisman of Horrors now works at range. It will still give no warning to the victim." diff --git a/html/changelogs/AutoChangeLog-pr-717.yml b/html/changelogs/AutoChangeLog-pr-717.yml new file mode 100644 index 0000000000..fbb98e0039 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-717.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "When talking on the alien hivemind, a person will be identified by +their real name, rather than who they are disguised as." diff --git a/html/changelogs/AutoChangeLog-pr-722.yml b/html/changelogs/AutoChangeLog-pr-722.yml new file mode 100644 index 0000000000..6ade3cd92d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-722.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Investigate logs are now persistent." + - tweak: "Game logs are now stored per-round; use .getserverlog to access previous rounds." + - rscdel: ".giveruntimelog and .getruntimelog removed." diff --git a/html/changelogs/AutoChangeLog-pr-733.yml b/html/changelogs/AutoChangeLog-pr-733.yml new file mode 100644 index 0000000000..ef779f70a1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-733.yml @@ -0,0 +1,4 @@ +author: "BeeSting12" +delete-after: True +changes: + - bugfix: "Omega shuttle now has lighting." diff --git a/html/changelogs/AutoChangeLog-pr-734.yml b/html/changelogs/AutoChangeLog-pr-734.yml new file mode 100644 index 0000000000..53785c45e6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-734.yml @@ -0,0 +1,6 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Restrictions on Lizardpeople using their native language on the +station have been lifted by Centcom, in order to maximise worker +productivity. The language's key is \",o\"." diff --git a/html/changelogs/AutoChangeLog-pr-735.yml b/html/changelogs/AutoChangeLog-pr-735.yml new file mode 100644 index 0000000000..10d910d62b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-735.yml @@ -0,0 +1,7 @@ +author: "Kor, Profakos, Iamgoofball" +delete-after: True +changes: + - rscadd: "The Librarian has been replaced by the Curator." + - rscadd: "Persistent trophy cases have been added to the library on Meta, Delta, and Box. These are only usable by the Curator." + - rscadd: "The Curator now starts with his whip." + - rscadd: "The Curator now has access to his treasure hunter outfit, stashed in his private office." diff --git a/html/changelogs/AutoChangeLog-pr-739.yml b/html/changelogs/AutoChangeLog-pr-739.yml new file mode 100644 index 0000000000..7e7a8cd3a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-739.yml @@ -0,0 +1,6 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Mania Motors now do minor toxin damage over time and will convert those affected if the toxin damage is high enough. +balance: The effects of a Mania Motor continue to apply to targets after they leave its range, though they will fall off extremely quickly." + - rscdel: "Mania Motors no longer cause brain damage." diff --git a/html/changelogs/AutoChangeLog-pr-745.yml b/html/changelogs/AutoChangeLog-pr-745.yml new file mode 100644 index 0000000000..b9aa3fddd2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-745.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "revenants now properly resurrect from ectoplasm, as opposed to ectoplasm merely spawning a new grief ghost" diff --git a/html/changelogs/AutoChangeLog-pr-746.yml b/html/changelogs/AutoChangeLog-pr-746.yml new file mode 100644 index 0000000000..ddeea1d732 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-746.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Turrets can no longer see invisible things, such as unrevealed revenants" diff --git a/html/changelogs/AutoChangeLog-pr-747.yml b/html/changelogs/AutoChangeLog-pr-747.yml new file mode 100644 index 0000000000..583f6b5e56 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-747.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - rscadd: "Point flashlights at mouths to see what's inside them" diff --git a/html/changelogs/AutoChangeLog-pr-748.yml b/html/changelogs/AutoChangeLog-pr-748.yml new file mode 100644 index 0000000000..7ad62adec8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-748.yml @@ -0,0 +1,5 @@ +author: "Moonlighting Mac says" +delete-after: True +changes: + - rscadd: "Courtesy of the art & crafts division, imitation basalt tiles themed on the rough volcanic terrain of lavaland are now available to be made out of sandstone." + - experiment: "The manufacturer even managed to replicate the way that it lights up with volcanic energy, it is the perfect accompaniment to other fake (or real) lava-land tiles or a independent piece." diff --git a/html/changelogs/AutoChangeLog-pr-756.yml b/html/changelogs/AutoChangeLog-pr-756.yml new file mode 100644 index 0000000000..7ef015b31c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-756.yml @@ -0,0 +1,6 @@ +author: "lordpidey" +delete-after: True +changes: + - rscadd: "There is a new traitor poison, spewium. It will cause uncontrollable vomiting, which gets worse the longer it's in your system. An overdose can cause vomiting of organs." + - tweak: "Committing suicide with a gas pump can now shoot out random organs." + - bugfix: "Toxic vomit now shows up as intended." diff --git a/html/changelogs/AutoChangeLog-pr-758.yml b/html/changelogs/AutoChangeLog-pr-758.yml new file mode 100644 index 0000000000..fff062e111 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-758.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Lesser smoke book to Delta and Metastation" + - rscdel: "Normal smoke book from Delta and Metastation" + - tweak: "Civilian smoke book now has a 360 max cooldown (from 120) and halved smoke output." diff --git a/html/changelogs/AutoChangeLog-pr-760.yml b/html/changelogs/AutoChangeLog-pr-760.yml new file mode 100644 index 0000000000..b0296b2330 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-760.yml @@ -0,0 +1,4 @@ +author: "bgobandit" +delete-after: True +changes: + - tweak: "The Syndicate has added basic functionality to their state-of-the-art equipment. Nuke ops can now donate all TCs at once." diff --git a/html/changelogs/AutoChangeLog-pr-763.yml b/html/changelogs/AutoChangeLog-pr-763.yml new file mode 100644 index 0000000000..12fa07ea48 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-763.yml @@ -0,0 +1,4 @@ +author: "Incoming" +delete-after: True +changes: + - tweak: "Display cases now require a key to open, which the curator spawns with" diff --git a/html/changelogs/AutoChangeLog-pr-764.yml b/html/changelogs/AutoChangeLog-pr-764.yml new file mode 100644 index 0000000000..87210fcb7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-764.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Dental implants stay with the head they're in" diff --git a/html/changelogs/AutoChangeLog-pr-771.yml b/html/changelogs/AutoChangeLog-pr-771.yml new file mode 100644 index 0000000000..031ec64151 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-771.yml @@ -0,0 +1,4 @@ +author: "BeeSting12" +delete-after: True +changes: + - bugfix: "Pubbystation no longer has two airlocks stacked on top of each other leading into xenobiology's kill room." diff --git a/html/changelogs/AutoChangeLog-pr-780.yml b/html/changelogs/AutoChangeLog-pr-780.yml new file mode 100644 index 0000000000..bf9411c7a1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-780.yml @@ -0,0 +1,9 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "If you know more than the usual number of languages, you'll now remember them after you get cloned." + - rscdel: "Humans turning into monkeys will not suddenly be able to speak the monkey language, and will continue to understand and speak human." + - rscadd: "Ghosts can now modify their own understood languages with the +language menu." + - rscadd: "Any mob can also open their language menu with the IC->Open Language Menu verb." + - rscadd: "Silicons can now understand Draconic as part of their internal databases." diff --git a/html/changelogs/AutoChangeLog-pr-781.yml b/html/changelogs/AutoChangeLog-pr-781.yml new file mode 100644 index 0000000000..08a5c148ff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-781.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Teslas now give off light" diff --git a/html/changelogs/AutoChangeLog-pr-784.yml b/html/changelogs/AutoChangeLog-pr-784.yml new file mode 100644 index 0000000000..b9cfd4624f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-784.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Golems no longer have underwear, undershorts or socks." diff --git a/html/changelogs/AutoChangeLog-pr-785.yml b/html/changelogs/AutoChangeLog-pr-785.yml new file mode 100644 index 0000000000..608a090249 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-785.yml @@ -0,0 +1,14 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Adamantine golems have special vocal cords that allow them to send +one-way messages to all golems, due to fragments of resonating +adamantine in their heads. Both of these are organs, and can be removed +and put in other species." + - rscadd: "You can use adamantine vocal cords by prefixing your message with +\":x\"." + - rscdel: "Xenobiology is no longer capable of making golem runes with plasma. +Instead, inject plasma into the adamantine slime core to get bars of adamantine +which you can then craft into an incomplete golem shell. Add 10 sheets of +suitable material to finish the shell." + - experiment: "The metal adamantine is also quite valuable when sold via cargo." diff --git a/html/changelogs/AutoChangeLog-pr-792.yml b/html/changelogs/AutoChangeLog-pr-792.yml new file mode 100644 index 0000000000..9d2ccfebde --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-792.yml @@ -0,0 +1,6 @@ +author: "BeeSting12" +delete-after: True +changes: + - rscadd: "Deltastation's chemistry now has a screwdriver." + - bugfix: "Deltastation's morgue no longer has a blue tile." + - bugfix: "Deltastation's chemistry smart fridge is no longer blocked by a disposal unit." diff --git a/html/changelogs/AutoChangeLog-pr-800.yml b/html/changelogs/AutoChangeLog-pr-800.yml new file mode 100644 index 0000000000..798c98c64b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-800.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - tweak: "The lavaland Seed Vault ruin can spawn only once." diff --git a/html/changelogs/AutoChangeLog-pr-801.yml b/html/changelogs/AutoChangeLog-pr-801.yml new file mode 100644 index 0000000000..756cf33927 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-801.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Internal Affairs Agents now obtain the kill objectives of their targets when they die." + - rscadd: "Internal Affairs Agents now have an integrated nanotrasen pinpointer that tracks their target at distances further than ten squares." + - rscadd: "Internal Affairs Agents will now lose any restrictions on collateral damage and gain a \"Die a glorious death\" objective upon becoming the last man standing, and revert if any of their targets are cloned." diff --git a/html/changelogs/AutoChangeLog-pr-803.yml b/html/changelogs/AutoChangeLog-pr-803.yml new file mode 100644 index 0000000000..c3b54164a8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-803.yml @@ -0,0 +1,5 @@ +author: "Robustin" +delete-after: True +changes: + - tweak: "Gang Dominator max time is now 8 minutes down from 15m" + - tweak: "Gang Tagging now reduces the timer by 9 seconds per territory, down from 12 seconds." diff --git a/html/changelogs/AutoChangeLog-pr-805.yml b/html/changelogs/AutoChangeLog-pr-805.yml new file mode 100644 index 0000000000..be4a17ddf7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-805.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Reduction to nutrition when consuming Miner's salve." + - rscdel: "Stun/weaken that bypasses bugged chemical protection when consuming Miner's salve." diff --git a/html/changelogs/AutoChangeLog-pr-806.yml b/html/changelogs/AutoChangeLog-pr-806.yml new file mode 100644 index 0000000000..550cb8c880 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-806.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "It is now possible to make plastic golems, who are made of a material +flexible enough to crawl through vents (while not carrying equipment). They also can pass through plastic flaps." diff --git a/html/changelogs/AutoChangeLog-pr-807.yml b/html/changelogs/AutoChangeLog-pr-807.yml new file mode 100644 index 0000000000..6ac3995026 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-807.yml @@ -0,0 +1,10 @@ +author: "Robustin" +delete-after: True +changes: + - rscadd: "Blood Cultists can now attempt to claim the position of Cult Master with the approval of a majority of their brethren." + - rscadd: "The Cult Master has access to unique blood magic that will aid them in leading the cult to victory:" + - rscadd: "The Cult Master can mark targets, allowing the entire cult to track them down." + - rscadd: "The Cult Master has single-use, noisy, and overt channeled spell that will summon the entire cult to their location." + - rscadd: "All cultists gain a HUD alert that will assist them in completing their objectives." + - rscadd: "Constructs created by soul shards will now be able to track their master." + - rscadd: "Cultists created outside of cult mode will now get a working sacrifice and summon objective and the summon rune will no longer fail outside of cult mode." diff --git a/html/changelogs/AutoChangeLog-pr-809.yml b/html/changelogs/AutoChangeLog-pr-809.yml new file mode 100644 index 0000000000..06fb6139cc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-809.yml @@ -0,0 +1,5 @@ +author: "QualityVan" +delete-after: True +changes: + - rscadd: "Cargo can order restocking units for NanoMed vending machines" + - rscadd: "NanoMed vending machines can be build and unbuilt" diff --git a/html/changelogs/AutoChangeLog-pr-810.yml b/html/changelogs/AutoChangeLog-pr-810.yml new file mode 100644 index 0000000000..e8d5187c86 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-810.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Fixed adamantine vocal cord (F) links not working for observers." diff --git a/html/changelogs/AutoChangeLog-pr-815.yml b/html/changelogs/AutoChangeLog-pr-815.yml new file mode 100644 index 0000000000..6472c7a13d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-815.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "Adjusted the Examine description of the right-most tiles of the Space Station 13 sign to be consistent with the rest of the tiles." diff --git a/html/changelogs/AutoChangeLog-pr-818.yml b/html/changelogs/AutoChangeLog-pr-818.yml new file mode 100644 index 0000000000..6497e1936c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-818.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Cultists of Nar-sie have their own language. The language's key is \",n\"." diff --git a/html/changelogs/AutoChangeLog-pr-824.yml b/html/changelogs/AutoChangeLog-pr-824.yml new file mode 100644 index 0000000000..625034ab7c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-824.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Showers and sinks added to gulag and mining station for hygiene and fire safety." + - rscadd: "Watertanks added to mining station for convenient fire extinguisher refill." diff --git a/html/changelogs/AutoChangeLog-pr-825.yml b/html/changelogs/AutoChangeLog-pr-825.yml new file mode 100644 index 0000000000..ee3a963c30 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-825.yml @@ -0,0 +1,4 @@ +author: "Robustin" +delete-after: True +changes: + - tweak: "c4 planting is now 40% faster" diff --git a/html/changelogs/AutoChangeLog-pr-827.yml b/html/changelogs/AutoChangeLog-pr-827.yml new file mode 100644 index 0000000000..e16167448d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-827.yml @@ -0,0 +1,4 @@ +author: "Jay" +delete-after: True +changes: + - rscadd: "Adds finger snapping emote. Use say *snap" diff --git a/html/changelogs/AutoChangeLog-pr-829.yml b/html/changelogs/AutoChangeLog-pr-829.yml new file mode 100644 index 0000000000..619bc85876 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-829.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "Anywhere there was lava below a tile on the station is now space." diff --git a/html/changelogs/AutoChangeLog-pr-832.yml b/html/changelogs/AutoChangeLog-pr-832.yml new file mode 100644 index 0000000000..bf686c0cef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-832.yml @@ -0,0 +1,7 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Moved to a new system to make top menu items easier to edit." + - tweak: "Moved icon size stuff to a sub menu" + - rscadd: "Added option to change icon scaling mode." + - bugfix: "Byond added fancy shader supported scaling(Point Sampling), this sucks because it's blurry, the default for /tg/station has changed back to the old nearest neighbor scaling." diff --git a/html/changelogs/AutoChangeLog-pr-834.yml b/html/changelogs/AutoChangeLog-pr-834.yml new file mode 100644 index 0000000000..594898ac4b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-834.yml @@ -0,0 +1,6 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Ash walkers now know and speak Draconic by default, but still know +Galactic Common. Remember, Galcom's language key is \",0\" and you can +review your known languages with the Language Menu." diff --git a/html/changelogs/AutoChangeLog-pr-835.yml b/html/changelogs/AutoChangeLog-pr-835.yml new file mode 100644 index 0000000000..5392a02984 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-835.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Removes organic check from mediborg storage container" diff --git a/html/changelogs/AutoChangeLog-pr-837.yml b/html/changelogs/AutoChangeLog-pr-837.yml new file mode 100644 index 0000000000..e322db7212 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-837.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Smartfridges no longer magically gain medicines if deconstructed +and rebuilt." diff --git a/html/changelogs/AutoChangeLog-pr-841.yml b/html/changelogs/AutoChangeLog-pr-841.yml new file mode 100644 index 0000000000..3c27ac83c8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-841.yml @@ -0,0 +1,5 @@ +author: "Moonlighting Mac" +delete-after: True +changes: + - experiment: "Due to budget cuts and oil synthesis replacing expensive processes of digging up haunted primeval ashwalker burial grounds, Nanotransen has taught chemists how to make plastic from chemicals in the hopes that new plastic products can reduce expenditure on metal and glass." + - rscadd: "you can now make plastic sheets from chemistry out of heated up crude oil, ash & sodium chloride" diff --git a/html/changelogs/AutoChangeLog-pr-844.yml b/html/changelogs/AutoChangeLog-pr-844.yml new file mode 100644 index 0000000000..1bf63a4cef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-844.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Fixed being unable to hit museum cases in melee" diff --git a/html/changelogs/AutoChangeLog-pr-848.yml b/html/changelogs/AutoChangeLog-pr-848.yml new file mode 100644 index 0000000000..0c1695adbc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-848.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - tweak: "Highlander no longer breaks your speakers" diff --git a/html/changelogs/AutoChangeLog-pr-849.yml b/html/changelogs/AutoChangeLog-pr-849.yml new file mode 100644 index 0000000000..8aeb9ff295 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-849.yml @@ -0,0 +1,8 @@ +author: "Moonlighting Mac says" +delete-after: True +changes: + - tweak: "After a recent trade fair, employees have took it upon themselves to learn how to craft leather objects out of finished leather sheets, for novices they are pretty good at it! Try it yourself!" + - rscadd: "Muzzles to silence people are now craftable out of leather sheets." + - rscdel: "You can no longer print off designs from a bio-generator that can now be crafted out of leather sheets." + - tweak: "Complete sheets of leather can be printed from the bio-generator for 150 biomass to accommodate for a loss of designs." + - experiment: "Specialist objects from the leather & cloth category bio-generator category were not removed as to encourage interdepartmental interaction & balance." diff --git a/html/changelogs/AutoChangeLog-pr-853.yml b/html/changelogs/AutoChangeLog-pr-853.yml new file mode 100644 index 0000000000..3a3c840669 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-853.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - tweak: "The verb to Assert Leadership over the cult has been replaced with an action button that does the same thing, but is much more visible." diff --git a/html/changelogs/AutoChangeLog-pr-854.yml b/html/changelogs/AutoChangeLog-pr-854.yml new file mode 100644 index 0000000000..c253fbdedd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-854.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - rscadd: "The Slime Scanner is available from the Autolathe." diff --git a/html/changelogs/AutoChangeLog-pr-858.yml b/html/changelogs/AutoChangeLog-pr-858.yml new file mode 100644 index 0000000000..6971f855a0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-858.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Fixes various mobs speaking languages that they were only supposed +to understand." diff --git a/html/changelogs/AutoChangeLog-pr-859.yml b/html/changelogs/AutoChangeLog-pr-859.yml new file mode 100644 index 0000000000..3b9cf89a32 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-859.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Fixes being able to bypass language restrictions by selecting +languages you can't speak as your default language." diff --git a/html/changelogs/AutoChangeLog-pr-860.yml b/html/changelogs/AutoChangeLog-pr-860.yml new file mode 100644 index 0000000000..5fbaa4435a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-860.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - tweak: "The Design Names in the various machines are now capitalized consistently" diff --git a/html/changelogs/AutoChangeLog-pr-862.yml b/html/changelogs/AutoChangeLog-pr-862.yml new file mode 100644 index 0000000000..65ab5ed7f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-862.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - tweak: "Adjusts Meteor Shuttle Name" diff --git a/html/changelogs/AutoChangeLog-pr-877.yml b/html/changelogs/AutoChangeLog-pr-877.yml new file mode 100644 index 0000000000..436a3b32d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-877.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Visible ghosts emit light." diff --git a/html/changelogs/AutoChangeLog-pr-879.yml b/html/changelogs/AutoChangeLog-pr-879.yml new file mode 100644 index 0000000000..a2a1d39356 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-879.yml @@ -0,0 +1,10 @@ +author: "XDTM" +delete-after: True +changes: + - rscadd: "Added bluespace launchpads. They can be built with R&D, and can teleport objects and mobs up to 5 tiles away (8 at max upgrades), from the pad to the target and viceversa." + - rscadd: "To set up a launchpad, a launchpad and a launchpad console must be built. The pad must be opened with a screwdriver, then linked to the console using a multitool. A console can support up to 4 pads." + - rscadd: "Launchpads require some time to charge up teleports, but don't require cooldowns unlike quantum pads. Upgrading launchpads increases the range by 1 per manipulator tier." + - rscadd: "A special variant, the Briefcase Launchpad, has also been added to the traitor uplink for 6 TC." + - rscadd: "Briefcase Launchpads look like briefcases until setup (which requires a few seconds). When setup, the launchpad will be functional, but can still be dragged on the ground. To pick a pad back up, click and drag it to your character's sprite." + - rscadd: "Unlike stationary launchpads, briefcase pads only have 3 tiles of maximum range." + - rscadd: "Briefcase pads are controlled by a remote (that is sent with the briefcase) instead of a console. The remote must be linked to the briefcase by simply hitting it. Each remote can only be linked to one pad, unlike consoles." diff --git a/html/changelogs/AutoChangeLog-pr-880.yml b/html/changelogs/AutoChangeLog-pr-880.yml new file mode 100644 index 0000000000..1b4ddc17a6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-880.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "The Central Command Ferry will now dock at one of the ports in Arrivals" diff --git a/html/changelogs/AutoChangeLog-pr-882.yml b/html/changelogs/AutoChangeLog-pr-882.yml new file mode 100644 index 0000000000..74b564cb7d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-882.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Curator's fedora has a pocket, like all the other fedoras." + - tweak: "Treasure hunter suits can now hold large internal tanks, to ease the exploration of lavaland." + - tweak: "The curator can now access the Auxillary Base and open doors on the mining station." diff --git a/html/changelogs/AutoChangeLog-pr-883.yml b/html/changelogs/AutoChangeLog-pr-883.yml new file mode 100644 index 0000000000..40d333fc28 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-883.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - tweak: "[Meta] The Slime Control Console boundaries have been adjusted around the Kill Room" diff --git a/html/changelogs/AutoChangeLog-pr-884.yml b/html/changelogs/AutoChangeLog-pr-884.yml new file mode 100644 index 0000000000..e2ec253dac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-884.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Lighting now defaults to fully bright until the first update tick for that tile. This makes shuttle movements less immersion breaking." + - experiment: "Rather than remove the light source from the system and then re-adding it on light movements, the system now calculates and applies the difference to each tile. This should speed up lighting updates." diff --git a/html/changelogs/AutoChangeLog-pr-885.yml b/html/changelogs/AutoChangeLog-pr-885.yml new file mode 100644 index 0000000000..d92eda0b51 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-885.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Fixes t-ray mode on engineering goggles not resetting the lighting override properly." diff --git a/html/changelogs/AutoChangeLog-pr-886.yml b/html/changelogs/AutoChangeLog-pr-886.yml new file mode 100644 index 0000000000..e87f6c5843 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-886.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - tweak: "Machine names will be capitalized when they talk on radio" diff --git a/html/changelogs/AutoChangeLog-pr-887.yml b/html/changelogs/AutoChangeLog-pr-887.yml new file mode 100644 index 0000000000..c6d1f301e9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-887.yml @@ -0,0 +1,9 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Modified chances for returning someone's soul using an employment contract. Now everyone has a chance, not just lawyers and HoP." + - rscadd: "Particularly brain damaged people can no longer sign infernal contracts properly." + - tweak: "Infernal contracts for power no longer give fireball, and instead give robeless 'lightning bolt' spell." + - rscadd: "Devils can now sell you a friend, for the cost of your soul." + - tweak: "The codex gigas should now be easier to use, and less finicky." + - rscdel: "The codex gigas no longer sintouches readers." diff --git a/html/changelogs/AutoChangeLog-pr-890.yml b/html/changelogs/AutoChangeLog-pr-890.yml new file mode 100644 index 0000000000..c54b5312a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-890.yml @@ -0,0 +1,5 @@ +author: "Kor" +delete-after: True +changes: + - rscadd: "a new mysterious book has been discovered in lavaland chests!" + - tweak: "weird purple hearts found in lavaland chests have started beating again! what could this mean?" diff --git a/html/changelogs/AutoChangeLog-pr-891.yml b/html/changelogs/AutoChangeLog-pr-891.yml new file mode 100644 index 0000000000..c623a1953f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-891.yml @@ -0,0 +1,5 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "You can now buy double eswords from the uplink for 16 telecrystals. They cannot be bought below 25 players." + - rscdel: "You can no longer use two eswords to construct a double esword." diff --git a/html/changelogs/AutoChangeLog-pr-894.yml b/html/changelogs/AutoChangeLog-pr-894.yml new file mode 100644 index 0000000000..10ccb2a974 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-894.yml @@ -0,0 +1,8 @@ +author: "Joan, Robustin" +delete-after: True +changes: + - rscdel: "Harvesters can no longer break walls, construct walls, convert floors, or emit paralyzing smoke." + - rscadd: "Harvesters now remove the limbs of humans when attacking, can heal OTHER constructs, have thermal vision, and can move through cult walls." + - rscadd: "Harvesters can now convert turfs in a small area around them and can create a wall of force." + - tweak: "Harvesters are now cultists." + - rscadd: "When Nar-Sie is summoned, she will convert all living non-construct cultists to harvesters, who will automatically track her." diff --git a/html/changelogs/AutoChangeLog-pr-895.yml b/html/changelogs/AutoChangeLog-pr-895.yml new file mode 100644 index 0000000000..a1aafb74af --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-895.yml @@ -0,0 +1,4 @@ +author: "Robustin" +delete-after: True +changes: + - tweak: "Dominators now require a significant amount of open (non-walled) space around them in order to operate." diff --git a/html/changelogs/AutoChangeLog-pr-896.yml b/html/changelogs/AutoChangeLog-pr-896.yml new file mode 100644 index 0000000000..f781a678ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-896.yml @@ -0,0 +1,4 @@ +author: "TehZombehz" +delete-after: True +changes: + - rscadd: "Sticks of butter and liquid mayonnaise can now be produced via a new 'mix' function on the grinder. Please eat responsibly." diff --git a/html/changelogs/AutoChangeLog-pr-897.yml b/html/changelogs/AutoChangeLog-pr-897.yml new file mode 100644 index 0000000000..d1df7340c6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-897.yml @@ -0,0 +1,4 @@ +author: "ma44" +delete-after: True +changes: + - tweak: "Doubles the amount of points wooden planks sell for (now 50 points)" diff --git a/html/changelogs/AutoChangeLog-pr-898.yml b/html/changelogs/AutoChangeLog-pr-898.yml new file mode 100644 index 0000000000..f744b5fe7b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-898.yml @@ -0,0 +1,4 @@ +author: "Jay / Cecily" +delete-after: True +changes: + - rscadd: "added a hunter hat to the game. Purely cosmetic, can be found in clothesmate. Icon by Cecily Catherine." diff --git a/html/changelogs/AutoChangeLog-pr-900.yml b/html/changelogs/AutoChangeLog-pr-900.yml new file mode 100644 index 0000000000..e29ab96af8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-900.yml @@ -0,0 +1,4 @@ +author: "bandit" +delete-after: True +changes: + - tweak: "Nanotrasen has enhanced personality matchmaking for its personal AIs. pAI candidates will now see who is requesting a pAI personality." diff --git a/html/changelogs/AutoChangeLog-pr-901.yml b/html/changelogs/AutoChangeLog-pr-901.yml new file mode 100644 index 0000000000..a0f2dd8f40 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-901.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "opening a dangerous canister will only alert admins if it contains meaningful amounts of a dangerous gas. No more being bwoinked because you opened an empty canister that used to have plasma in it." diff --git a/html/changelogs/AutoChangeLog-pr-906.yml b/html/changelogs/AutoChangeLog-pr-906.yml new file mode 100644 index 0000000000..4a0914756d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-906.yml @@ -0,0 +1,8 @@ +author: "optional name here" +delete-after: True +changes: + - bugfix: "Plasma Golems now have the correct updated tip." + - tweak: "Plasma Golems no longer take damage from fire, and take normal instead of increased burn damage from other sources. They will still explode if on fire and hot enough." + - rscadd: "Plasma Golems can now self-ignite with an action button." + - tweak: "Plasma Golems are now warned when they're close to exploding." + - tweak: "Plasma Golems now have a constant chance of exploding after 850K instead of a precise threshold at 900K, making it less predictable." diff --git a/html/changelogs/AutoChangeLog-pr-913.yml b/html/changelogs/AutoChangeLog-pr-913.yml new file mode 100644 index 0000000000..dd72fe0130 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-913.yml @@ -0,0 +1,4 @@ +author: "Cebutris" +delete-after: True +changes: + - rscadd: "The Syndicate has found an abandoned storage facility filled with hundreds of holoparasite injectors. While they aren't giving them to their operatives, sleeper operatives can buy them with their uplinks! Get your holographic murder machine buddy today!" diff --git a/html/changelogs/AutoChangeLog-pr-916.yml b/html/changelogs/AutoChangeLog-pr-916.yml new file mode 100644 index 0000000000..67f833a526 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-916.yml @@ -0,0 +1,7 @@ +author: "Joan" +delete-after: True +changes: + - tweak: "Manifest Spirit will no longer continue to cost the user health if the summoned ghost is put into critical or gibbed." + - rscadd: "Ghosts summoned by Manifest Spirit are outfitted with ghostly armor and a ghostly cult blade that does slightly less damage than a normal cult blade. +balance: Manifest Spirit now consumes 1 health per second per summoned ghost, from 0.333~. +balance: Manifest Spirit can now only summon a maximum of 5 ghosts per rune, and the summoned ghosts cannot use Manifest Spirit to summon more ghosts." diff --git a/html/changelogs/AutoChangeLog-pr-917.yml b/html/changelogs/AutoChangeLog-pr-917.yml new file mode 100644 index 0000000000..3e2ad4b3c9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-917.yml @@ -0,0 +1,5 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Wraiths now refund Phase Shift's cooldown by attacking; 1 second on normal attacks, 5 seconds when putting a target into critical, and a full refund when killing a target. +balance: Increased Phase Shift's cooldown from 20 seconds to 25 seconds." diff --git a/html/changelogs/AutoChangeLog-pr-924.yml b/html/changelogs/AutoChangeLog-pr-924.yml new file mode 100644 index 0000000000..ee644464cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-924.yml @@ -0,0 +1,5 @@ +author: "Swindly" +delete-after: True +changes: + - tweak: "Solid plasma now begins burning at the temperature at which it was ignited. +balance: Snow walls no longer block explosions, are deconstructed faster, and no longer leave girders when deconstructed." diff --git a/html/changelogs/AutoChangeLog-pr-925.yml b/html/changelogs/AutoChangeLog-pr-925.yml new file mode 100644 index 0000000000..0b898015da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-925.yml @@ -0,0 +1,5 @@ +author: "MMMiracles (Cerestation)" +delete-after: True +changes: + - tweak: "Hydroponics has been revamped, adding a few things missing before and adding a bee room in place of the backroom." + - bugfix: "Fixed some other stuff." diff --git a/html/changelogs/AutoChangeLog-pr-926.yml b/html/changelogs/AutoChangeLog-pr-926.yml new file mode 100644 index 0000000000..db2fb26801 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-926.yml @@ -0,0 +1,4 @@ +author: "New Antag Alert sounds" +delete-after: True +changes: + - soundadd: "added sounds that alert players to their antag status" diff --git a/html/changelogs/AutoChangeLog-pr-927.yml b/html/changelogs/AutoChangeLog-pr-927.yml new file mode 100644 index 0000000000..bf908dd5b4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-927.yml @@ -0,0 +1,4 @@ +author: "optional name here" +delete-after: True +changes: + - rscadd: "Zombies can now see in the dark. If you steal their eyes you'll be able to see in the dark as well!" diff --git a/html/changelogs/AutoChangeLog-pr-931.yml b/html/changelogs/AutoChangeLog-pr-931.yml new file mode 100644 index 0000000000..288b87f529 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-931.yml @@ -0,0 +1,5 @@ +author: "Kingofcarrotflowerspt1" +delete-after: True +changes: + - rscadd: "Adds Dakimakuras, more colloquially known as \"anime girl body pillows\"" + - rscadd: "They take up a hand slot and can hold a few items. Many different girls to choose from!" diff --git a/html/changelogs/AutoChangeLog-pr-937.yml b/html/changelogs/AutoChangeLog-pr-937.yml new file mode 100644 index 0000000000..239db4ced6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-937.yml @@ -0,0 +1,5 @@ +author: "Tacolizard Forever: It's hip to fuck bees" +delete-after: True +changes: + - rscadd: "Added a honey jar item. It's not implemented yet. +balance: Honey is now more robust at healing, but don't eat too much or you'll turn into a fatty landwhale." diff --git a/html/changelogs/AutoChangeLog-pr-938.yml b/html/changelogs/AutoChangeLog-pr-938.yml new file mode 100644 index 0000000000..b01da1649c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-938.yml @@ -0,0 +1,4 @@ +author: "TehZombehz" +delete-after: True +changes: + - rscadd: "Butter noodles, butter biscuits, buttered toast, and pigs in a blanket can now be crafted using sticks of butter and other ingredients." diff --git a/html/changelogs/AutoChangeLog-pr-939.yml b/html/changelogs/AutoChangeLog-pr-939.yml new file mode 100644 index 0000000000..237e086fd9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-939.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Servant golems now follow the \"Material Golem (123)\" naming scheme." diff --git a/html/changelogs/AutoChangeLog-pr-940.yml b/html/changelogs/AutoChangeLog-pr-940.yml new file mode 100644 index 0000000000..eb86ebd439 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-940.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Hermit ruin now includes a portable seed extractor." diff --git a/html/changelogs/AutoChangeLog-pr-944.yml b/html/changelogs/AutoChangeLog-pr-944.yml new file mode 100644 index 0000000000..8215cf0463 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-944.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Pizza boxes once again look different when open" diff --git a/html/changelogs/AutoChangeLog-pr-954.yml b/html/changelogs/AutoChangeLog-pr-954.yml new file mode 100644 index 0000000000..1c3a6cc9f8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-954.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Free Golems can purchase Royal Capes of the Liberator at their +mining equipment vendor." diff --git a/html/changelogs/AutoChangeLog-pr-958.yml b/html/changelogs/AutoChangeLog-pr-958.yml new file mode 100644 index 0000000000..c0825f367f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-958.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Goats on the station have developed a taste for glowshrooms, and +will eat them if they encounter any." diff --git a/html/changelogs/AutoChangeLog-pr-962.yml b/html/changelogs/AutoChangeLog-pr-962.yml new file mode 100644 index 0000000000..a5c9db8081 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-962.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Ambrosia Deus can now mutate into Gaia, and Gaia into Deus." + - rscdel: "A single branch of Ambrosia Gaia will not immediately make a hydroponics tray self-sufficient. +balance: A (total) dose of 20u Earthsblood (from Gaia) will make a hydroponics tray self-sufficient." diff --git a/html/changelogs/AutoChangeLog-pr-963.yml b/html/changelogs/AutoChangeLog-pr-963.yml new file mode 100644 index 0000000000..bff7ed64f6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-963.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - tweak: "Glowshrooms now have a less saturated glow." diff --git a/html/changelogs/AutoChangeLog-pr-964.yml b/html/changelogs/AutoChangeLog-pr-964.yml new file mode 100644 index 0000000000..2aee77b88f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-964.yml @@ -0,0 +1,10 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Curator soapstones now successfully leave messages for future +shifts." + - rscdel: "Soapstones can no longer be purchased in cargo." + - rscdel: "The janitor no longer starts with an empty soapstone." + - experiment: "Engraved messages can be left anywhere in the world, but be +wary that the terrain of places like lavaland and space can change shift +to shift." diff --git a/html/changelogs/AutoChangeLog-pr-969.yml b/html/changelogs/AutoChangeLog-pr-969.yml new file mode 100644 index 0000000000..945463a4b1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-969.yml @@ -0,0 +1,4 @@ +author: "McBawbaggings" +delete-after: True +changes: + - tweak: "SMES units will now accept charge from the power network even if the available load is less than the input rate. Credit to Zaers for the original code." diff --git a/html/changelogs/AutoChangeLog-pr-973.yml b/html/changelogs/AutoChangeLog-pr-973.yml new file mode 100644 index 0000000000..b4b175ce05 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-973.yml @@ -0,0 +1,6 @@ +author: "ma44" +delete-after: True +changes: + - tweak: "Seed vault remapped" + - tweak: "The seed vault random seed spawner can now spawn cherry bombs instead of regular cherry seeds" + - rscadd: "BEES to plant vault" diff --git a/html/changelogs/AutoChangeLog-pr-974.yml b/html/changelogs/AutoChangeLog-pr-974.yml new file mode 100644 index 0000000000..7631fb611e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-974.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "The Gravity Generator description now mentions a graviton field as opposed to a gravaton field. What is Gravaty anyway?" diff --git a/html/changelogs/AutoChangeLog-pr-975.yml b/html/changelogs/AutoChangeLog-pr-975.yml new file mode 100644 index 0000000000..ff7c997771 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-975.yml @@ -0,0 +1,5 @@ +author: "Poojawa" +delete-after: True +changes: + - bugfix: "Fixed Cryopod icon states" + - tweak: "Adjusted Wizard spell power costs" diff --git a/html/changelogs/AutoChangeLog-pr-977.yml b/html/changelogs/AutoChangeLog-pr-977.yml new file mode 100644 index 0000000000..cebf4a3b6a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-977.yml @@ -0,0 +1,5 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "Centcom Engineering has reviewed the plans for the Box series station and has addressed some concerns related to some APCs not affecting their designated section. APCs for the Detective's Office, Cargobay, and Gateway, now control those rooms. The Bridge Maintenance APC has been removed from future construction as it serves no purpose and thus is an unnecessary construction cost." + - bugfix: "The pipe from the station to the AI Satellite has been completed." diff --git a/html/changelogs/AutoChangeLog-pr-978.yml b/html/changelogs/AutoChangeLog-pr-978.yml new file mode 100644 index 0000000000..5b20b432d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-978.yml @@ -0,0 +1,4 @@ +author: "McBawbaggings" +delete-after: True +changes: + - bugfix: "Wizards are now at least 30 years old. Apprentices will be in-between ages 17 to 29." diff --git a/html/changelogs/AutoChangeLog-pr-979.yml b/html/changelogs/AutoChangeLog-pr-979.yml new file mode 100644 index 0000000000..badff9914e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-979.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "You can now create water bottles and wet floor signs by using plastic sheets." + - rscadd: "You can create toy swords out of plastic sheets, a piece of cable, and a light bulb." diff --git a/html/changelogs/AutoChangeLog-pr-980.yml b/html/changelogs/AutoChangeLog-pr-980.yml new file mode 100644 index 0000000000..68f9acfedc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-980.yml @@ -0,0 +1,4 @@ +author: "Profakos" +delete-after: True +changes: + - rscadd: "Centcom has decided to upgrade the Ore Redemption machines with a floppy drive, intended for design disks." diff --git a/html/changelogs/AutoChangeLog-pr-984.yml b/html/changelogs/AutoChangeLog-pr-984.yml new file mode 100644 index 0000000000..1ecedd4211 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-984.yml @@ -0,0 +1,4 @@ +author: "Qbopper" +delete-after: True +changes: + - tweak: "The supermatter crystal now sends its warning messages to the engineering channel. (if it's in critical condition the message will be sent to the common radio channel as before)" diff --git a/html/changelogs/AutoChangeLog-pr-989.yml b/html/changelogs/AutoChangeLog-pr-989.yml new file mode 100644 index 0000000000..271c9befbd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-989.yml @@ -0,0 +1,5 @@ +author: "Moonlighting Mac says" +delete-after: True +changes: + - rscadd: "Starthistles now return seeds when they are harvested, amongst having a overhaul of description, alteration of statistics & a mutational path into harebells. These seeds have been supplied into the hydroponics seed vendor." + - imageadd: "Starthistle tray sprites have been restructured & also fixed from a issue of them being broken and not appearing in trays. In addition there are new sprites for its seeds." diff --git a/html/changelogs/AutoChangeLog-pr-995.yml b/html/changelogs/AutoChangeLog-pr-995.yml new file mode 100644 index 0000000000..3bc3335723 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-995.yml @@ -0,0 +1,4 @@ +author: "Penguaro" +delete-after: True +changes: + - bugfix: "There is now Space under the rocks at the Dragoon's Tomb" diff --git a/html/changelogs/AutoChangeLog-pr-996.yml b/html/changelogs/AutoChangeLog-pr-996.yml new file mode 100644 index 0000000000..a907536493 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-996.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Fixed fire alarms not being repairable if the board was broken" diff --git a/html/changelogs/AutoChangeLog-pr-999.yml b/html/changelogs/AutoChangeLog-pr-999.yml new file mode 100644 index 0000000000..6df599bae3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-999.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "People without eyes and ears are no longer susceptible to flashbangs they aren't directly on top of" diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi index 347bccc942..361cfff40c 100644 Binary files a/icons/effects/64x64.dmi and b/icons/effects/64x64.dmi differ diff --git a/icons/effects/clockwork_effects.dmi b/icons/effects/clockwork_effects.dmi index 8bbf24a7ef..b2e15da1d0 100644 Binary files a/icons/effects/clockwork_effects.dmi and b/icons/effects/clockwork_effects.dmi differ diff --git a/icons/effects/cult_target.dmi b/icons/effects/cult_target.dmi new file mode 100644 index 0000000000..650feb3361 Binary files /dev/null and b/icons/effects/cult_target.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index d684794ee8..fe537a8e73 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/emoji.dmi b/icons/emoji.dmi index df89c12c94..9d3e0630a7 100644 Binary files a/icons/emoji.dmi and b/icons/emoji.dmi differ diff --git a/icons/misc/language.dmi b/icons/misc/language.dmi index e961c35191..081bbf1aa3 100644 Binary files a/icons/misc/language.dmi and b/icons/misc/language.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 988ae8bdc8..36bf21cf76 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 39f374fb52..285f936a9e 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index d28ed18c8a..9d63c276bc 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 29c527b123..6d05b89039 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/jungle/arachnid.dmi b/icons/mob/jungle/arachnid.dmi new file mode 100644 index 0000000000..a1db8e351f Binary files /dev/null and b/icons/mob/jungle/arachnid.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 5858925d86..13f16aae59 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/clothing/cit_hats.dmi b/icons/obj/clothing/cit_hats.dmi new file mode 100644 index 0000000000..25a03dc97e Binary files /dev/null and b/icons/obj/clothing/cit_hats.dmi differ diff --git a/icons/obj/daki.dmi b/icons/obj/daki.dmi new file mode 100644 index 0000000000..2b075f959c Binary files /dev/null and b/icons/obj/daki.dmi differ diff --git a/icons/obj/doors/airlocks/station/maintenanceexternal.dmi b/icons/obj/doors/airlocks/station/maintenanceexternal.dmi new file mode 100644 index 0000000000..4323cf944e Binary files /dev/null and b/icons/obj/doors/airlocks/station/maintenanceexternal.dmi differ diff --git a/icons/obj/flora/jungletrees.dmi b/icons/obj/flora/jungletrees.dmi index 461ac0b265..67c7e0f463 100644 Binary files a/icons/obj/flora/jungletrees.dmi and b/icons/obj/flora/jungletrees.dmi differ diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index 2672732597..68c192bec3 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index c4713bd086..e7c0e8d263 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/pizzaspaghetti.dmi b/icons/obj/food/pizzaspaghetti.dmi index 8fb643c03c..245c737865 100644 Binary files a/icons/obj/food/pizzaspaghetti.dmi and b/icons/obj/food/pizzaspaghetti.dmi differ diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index fc2c058594..b0de3ddda2 100644 Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi index e1f308c87b..cceb749121 100644 Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 30c4bd2ce4..34c2c270a8 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/pneumaticCannon.dmi b/icons/obj/pneumaticCannon.dmi index 41de7677b5..86e14e19d6 100644 Binary files a/icons/obj/pneumaticCannon.dmi and b/icons/obj/pneumaticCannon.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index afdd5c3630..19e2cc0e48 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 19d6275d78..78657abe36 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index 34d42f100f..1e60c01131 100644 Binary files a/icons/obj/telescience.dmi and b/icons/obj/telescience.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index d629cfe24d..5a8afeee51 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index f71e135dce..f2176c395d 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/turrets.dmi b/icons/obj/turrets.dmi index 498d340c03..c4077b6601 100644 Binary files a/icons/obj/turrets.dmi and b/icons/obj/turrets.dmi differ diff --git a/icons/obj/vending_restock.dmi b/icons/obj/vending_restock.dmi index aa9f2873f0..eac7b8a266 100644 Binary files a/icons/obj/vending_restock.dmi and b/icons/obj/vending_restock.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index a1cd8fb2f9..28bc9e28d3 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/floors/junglechasm.dmi b/icons/turf/floors/junglechasm.dmi new file mode 100644 index 0000000000..699a3b667c Binary files /dev/null and b/icons/turf/floors/junglechasm.dmi differ diff --git a/interface/menu.dm b/interface/menu.dm new file mode 100644 index 0000000000..4bebd5b202 --- /dev/null +++ b/interface/menu.dm @@ -0,0 +1,203 @@ +/* +/datum/menu/Example/verb/Example() + set name = "" //if this starts with @ the verb is not created and name becomes the command to invoke. + set desc = "" //desc is the text given to this entry in the menu + //You can not use src in these verbs. It will be the menu at compile time, but the client at runtime. +*/ + +GLOBAL_LIST_EMPTY(menulist) + +/world/proc/load_menu() + for (var/typepath in subtypesof(/datum/menu)) + new typepath() + +/datum/menu + var/name + var/list/children + var/datum/menu/myparent + var/list/verblist + var/checkbox = CHECKBOX_NONE //checkbox type. + var/default //default checked type. + //Set to true to append our children to our parent, + //Rather then add us as a node (used for having more then one checkgroups in the same menu) + var/abstract = FALSE + +/datum/menu/New() + var/ourentry = GLOB.menulist[type] + children = list() + verblist = list() + if (ourentry) + if (islist(ourentry)) //some of our childern already loaded + Add_children(ourentry) + else + stack_trace("Menu item double load: [type]") + qdel(src) + return + + GLOB.menulist[type] = src + + Load_verbs(type, typesof("[type]/verb")) + + var/datum/menu/parent = GLOB.menulist[parent_type] + if (!parent) + GLOB.menulist[parent_type] = list(src) + else if (islist(parent)) + parent += src + else + parent.Add_children(list(src)) + +/datum/menu/proc/Set_parent(datum/menu/parent) + myparent = parent + if (abstract) + myparent.Add_children(children) + var/list/verblistoftypes = list() + for(var/thing in verblist) + LAZYADD(verblistoftypes[verblist[thing]], thing) + + for(var/verbparenttype in verblistoftypes) + myparent.Load_verbs(verbparenttype, verblistoftypes[verbparenttype]) + +/datum/menu/proc/Add_children(list/kids) + if (abstract && myparent) + myparent.Add_children(kids) + return + + for(var/thing in kids) + var/datum/menu/menuitem = thing + menuitem.Set_parent(src) + if (!menuitem.abstract) + children += menuitem + +/datum/menu/proc/Load_verbs(verb_parent_type, list/verbs) + if (abstract && myparent) + myparent.Load_verbs(verb_parent_type, verbs) + return + + for (var/verbpath in verbs) + verblist[verbpath] = verb_parent_type + +/datum/menu/proc/Generate_list(client/C) + . = list() + if (length(children)) + for (var/thing in children) + var/datum/menu/child = thing + var/list/childlist = child.Generate_list(C) + if (childlist) + var/childname = "[child]" + if (childname == "[child.type]") + var/list/tree = splittext(childname, "/") + childname = tree[tree.len] + .[child.type] = "parent=[url_encode(type)];name=[url_encode(childname)]" + . += childlist + + + + for (var/thing in verblist) + var/atom/verb/verbpath = thing + if (!verbpath) + stack_trace("Bad VERB in [type] verblist: [english_list(verblist)]") + var/list/entry = list() + entry["parent"] = "[type]" + entry["name"] = verbpath.desc + if (copytext(verbpath.name,1,2) == "@") + entry["command"] = copytext(verbpath.name,2) + else + entry["command"] = replacetext(verbpath.name, " ", "-") + var/datum/menu/verb_true_parent = GLOB.menulist[verblist[verbpath]] + var/true_checkbox = verb_true_parent.checkbox + if (true_checkbox != CHECKBOX_NONE) + var/checkedverb = verb_true_parent.Get_checked(C) + if (true_checkbox == CHECKBOX_GROUP) + if (verbpath == checkedverb) + entry["is-checked"] = TRUE + else + entry["is-checked"] = FALSE + else if (true_checkbox == CHECKBOX_TOGGLE) + entry["is-checked"] = checkedverb + + entry["command"] = ".updatemenuchecked \"[verb_true_parent.type]\" \"[verbpath]\"\n[entry["command"]]" + entry["can-check"] = TRUE + entry["group"] = "[verb_true_parent.type]" + .[verbpath] = list2params(entry) + +/datum/menu/proc/Get_checked(client/C) + return C.prefs.menuoptions[type] || default || FALSE + +/datum/menu/proc/Load_checked(client/C) //Loads the checked menu item into a new client. Used by icon menus to invoke the checked item. + return + +/datum/menu/proc/Set_checked(client/C, verbpath) + if (checkbox == CHECKBOX_GROUP) + C.prefs.menuoptions[type] = verbpath + C.prefs.save_preferences() + else if (checkbox == CHECKBOX_TOGGLE) + var/checked = Get_checked(C) + C.prefs.menuoptions[type] = !checked + C.prefs.save_preferences() + winset(C, "[verbpath]", "is-checked = [!checked]") + +/client/verb/updatemenuchecked(menutype as text, verbpath as text) + set name = ".updatemenuchecked" + menutype = text2path(menutype) + verbpath = text2path(verbpath) + if (!menutype || !verbpath) + return + var/datum/menu/M = GLOB.menulist[menutype] + if (!M) + return + if (!(verbpath in typesof("[menutype]/verb"))) + return + M.Set_checked(src, verbpath) + + +/datum/menu/Icon/Load_checked(client/C) //So we can be lazy, we invoke the "checked" menu item on menu load. + var/atom/verb/verbpath = Get_checked(C) + if (!verbpath || !(verbpath in typesof("[type]/verb"))) + return + if (copytext(verbpath.name,1,2) == "@") + winset(C, null, "command = [copytext(verbpath.name,2)]") + else + winset(C, null, "command = [replacetext(verbpath.name, " ", "-")]") + +/datum/menu/Icon/Size + checkbox = CHECKBOX_GROUP + default = /datum/menu/Icon/Size/verb/iconstretchtofit + +/datum/menu/Icon/Size/verb/iconstretchtofit() + set name = "@.winset \"mapwindow.map.icon-size=0\"" + set desc = "&Auto (stretch-to-fit)" + +/datum/menu/Icon/Size/verb/icon96() + set name = "@.winset \"mapwindow.map.icon-size=96\"" + set desc = "&96x96 (3x)" + +/datum/menu/Icon/Size/verb/icon64() + set name = "@.winset \"mapwindow.map.icon-size=64\"" + set desc = "&64x64 (2x)" + +/datum/menu/Icon/Size/verb/icon48() + set name = "@.winset \"mapwindow.map.icon-size=48\"" + set desc = "&48x48 (1.5x)" + +/datum/menu/Icon/Size/verb/icon32() + set name = "@.winset \"mapwindow.map.icon-size=32\"" + set desc = "&32x32 (1x)" + + +/datum/menu/Icon/Scaling + checkbox = CHECKBOX_GROUP + name = "Scaling Mode" + default = /datum/menu/Icon/Scaling/verb/NN + +/datum/menu/Icon/Scaling/verb/NN() + set name = "@.winset \"mapwindow.map.zoom-mode=distort\"" + set desc = "Nearest Neighbor" + +/datum/menu/Icon/Scaling/verb/PS() + set name = "@.winset \"mapwindow.map.zoom-mode=normal\"" + set desc = "Point Sampling" + +/datum/menu/Icon/Scaling/verb/BL() + set name = "@.winset \"mapwindow.map.zoom-mode=blur\"" + set desc = "Bilinear" + diff --git a/interface/skin.dmf b/interface/skin.dmf index 788ce65b71..02adcb7726 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1,1762 +1,1709 @@ -macro "default" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=hotkeys mapwindow.map.focus=true input.background-color=#e0e0e0\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "SOUTHWEST" - command = ".southwest" - is-disabled = false - elem - name = "NORTHWEST" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "CTRL+1" - command = "a-intent help" - is-disabled = false - elem - name = "CTRL+2" - command = "a-intent disarm" - is-disabled = false - elem - name = "CTRL+3" - command = "a-intent grab" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent harm" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+E" - command = "quick-equip" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+H" - command = "talk-wheel" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+Q" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+R" - command = ".southwest" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "CTRL+NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "CTRL+NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "CTRL+ADD" - command = "Add-View-Range 1" - is-disabled = false - elem - name = "CTRL+SUBTRACT" - command = "Add-View-Range -1" - is_disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Invisimin" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - elem - name = "ALT" - command = "toggle-walk-run" - is-disabled = false - elem - name = "ALT+UP" - command = "toggle-walk-run" - is-disabled = false - -macro "hotkeys" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=default input.focus=true input.background-color=#d3b5b5\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "SOUTHWEST" - command = ".southwest" - is-disabled = false - elem - name = "NORTHWEST" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "1" - command = "a-intent help" - is-disabled = false - elem - name = "CTRL+1" - command = "a-intent help" - is-disabled = false - elem - name = "2" - command = "a-intent disarm" - is-disabled = false - elem - name = "CTRL+2" - command = "a-intent disarm" - is-disabled = false - elem - name = "3" - command = "a-intent grab" - is-disabled = false - elem - name = "CTRL+3" - command = "a-intent grab" - is-disabled = false - elem - name = "4" - command = "a-intent harm" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent harm" - is-disabled = false - elem - name = "A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "B" - command = "resist" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "E" - command = "quick-equip" - is-disabled = false - elem - name = "CTRL+E" - command = "quick-equip" - is-disabled = false - elem - name = "F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "H" - command = "talk-wheel" - is-disabled = false - elem - name = "CTRL+H" - command = "talk-wheel" - is-disabled = false - elem - name = "M" - command = "me" - is-disabled = false - elem - name = "O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "Q" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+Q" - command = ".northwest" - is-disabled = false - elem - name = "R" - command = ".southwest" - is-disabled = false - elem - name = "CTRL+R" - command = ".southwest" - is-disabled = false - elem "s_key" - name = "S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "T" - command = "say" - is-disabled = false - elem "w_key" - name = "W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "CTRL+ADD" - command = "Add-View-Range 1" - is-disabled = false - elem - name = "CTRL+SUBTRACT" - command = "Add-View-Range -1" - is_disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - elem - name = "ALT" - command = "toggle-walk-run" - is-disabled = false - elem - name = "ALT+UP" - command = "toggle-walk-run" - is-disabled = false - -macro "robot-default" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=robot-hotkeys mapwindow.map.focus=true input.background-color=#e0e0e0\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "NORTHWEST" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "CTRL+1" - command = "toggle-module 1" - is-disabled = false - elem - name = "CTRL+2" - command = "toggle-module 2" - is-disabled = false - elem - name = "CTRL+3" - command = "toggle-module 3" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "CTRL+H" - command = "talk-wheel" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+Q" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "CTRL+NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "CTRL+NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Invisimin" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - -macro "robot-hotkeys" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=robot-default input.focus=true input.background-color=#d3b5b5\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "NORTHWEST" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "1" - command = "toggle-module 1" - is-disabled = false - elem - name = "CTRL+1" - command = "toggle-module 1" - is-disabled = false - elem - name = "2" - command = "toggle-module 2" - is-disabled = false - elem - name = "CTRL+2" - command = "toggle-module 2" - is-disabled = false - elem - name = "3" - command = "toggle-module 3" - is-disabled = false - elem - name = "CTRL+3" - command = "toggle-module 3" - is-disabled = false - elem - name = "4" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent left" - is-disabled = false - elem - name = "A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "B" - command = "resist" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "H" - command = "talk-wheel" - is-disabled = false - elem - name = "CTRL+H" - command = "talk-wheel" - is-disabled = false - elem - name = "M" - command = "me" - is-disabled = false - elem - name = "O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "Q" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+Q" - command = "unequip-module" - is-disabled = false - elem "s_key" - name = "S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "T" - command = "say" - is-disabled = false - elem "w_key" - name = "W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Invisimin" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - - -menu "menu" - elem - name = "&File" - command = "" - category = "" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Quick screenshot\tF2" - command = ".screenshot auto" - category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Save screenshot as...\tShift+F2" - command = ".screenshot" - category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "" - command = "" - category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem "reconnectbutton" - name = "&Reconnect" - command = ".reconnect" - category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Quit\tAlt-F4" - command = ".quit" - category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Icons" - command = "" - category = "" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem "auto" - name = "&Auto (stretch-to-fit)" - command = ".winset \"mapwindow.map.icon-size=0\"" - category = "&Icons" - is-checked = true - can-check = true - group = "size" - is-disabled = false - saved-params = "is-checked" - elem "icon96" - name = "&96x96 (3x)" - command = ".winset \"mapwindow.map.icon-size=96\"" - category = "&Icons" - is-checked = false - can-check = true - group = "size" - is-disabled = false - saved-params = "is-checked" - elem "icon64" - name = "&64x64 (2x)" - command = ".winset \"mapwindow.map.icon-size=64\"" - category = "&Icons" - is-checked = false - can-check = true - group = "size" - is-disabled = false - saved-params = "is-checked" - elem "icon48" - name = "&48x48 (1.5x)" - command = ".winset \"mapwindow.map.icon-size=48\"" - category = "&Icons" - is-checked = false - can-check = true - group = "size" - is-disabled = false - saved-params = "is-checked" - elem "icon32" - name = "&32x32" - command = ".winset \"mapwindow.map.icon-size=32\"" - category = "&Icons" - is-checked = false - can-check = true - group = "size" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Help" - command = "" - category = "" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Admin Help\tF1" - command = "adminhelp" - category = "&Help" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - elem - name = "&Hotkeys" - command = "hotkeys-help" - category = "&Help" - is-checked = false - can-check = false - group = "" - is-disabled = false - saved-params = "is-checked" - - -window "mainwindow" - elem "mainwindow" - type = MAIN - pos = 0,0 - size = 640x440 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = false - right-click = false - saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true - is-pane = false - is-minimized = false - is-maximized = false - can-scroll = none - icon = 'icons\\ss13_64.png' - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "macro" - menu = "menu" - on-close = "" - elem "split" - type = CHILD - pos = 3,0 - size = 634x417 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "splitter" - on-size = "" - left = "mapwindow" - right = "infowindow" - is-vert = true - splitter = 50 - show-splitter = true - lock = none - elem "input" - type = INPUT - pos = 5,420 - size = 595x20 - anchor1 = 0,100 - anchor2 = 100,100 - font-family = "" - font-size = 10 - font-style = "" - text-color = #000000 - background-color = #d3b5b5 - is-visible = true - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = false - right-click = false - saved-params = "command" - on-size = "" - command = "" - multi-line = false - is-password = false - no-command = false - elem "say" - type = BUTTON - pos = 600,420 - size = 37x20 - anchor1 = 100,100 - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Chat" - image = "" - command = ".winset \"say.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"" - is-flat = true - stretch = false - is-checked = false - group = "" - button-type = pushbox - elem "asset_cache_browser" - type = BROWSER - pos = 0,0 - size = 200x200 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = false - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "" - on-size = "" - show-history = false - show-url = false - auto-format = true - use-title = false - on-show = "" - on-hide = "" - elem "tooltip" - type = BROWSER - pos = 0,0 - size = 999x999 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = false - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "" - on-size = "" - show-history = false - show-url = false - auto-format = true - use-title = false - on-show = "" - on-hide = "" - -window "mapwindow" - elem "mapwindow" - type = MAIN - pos = 0,0 - size = 640x480 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true - is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" - elem "map" - type = MAP - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "Arial" - font-size = 7 - font-style = "" - text-color = none - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = true - right-click = false - saved-params = "icon-size" - on-size = "" - icon-size = 0 - text-mode = false - letterbox = true - zoom = 0 - on-show = "" - on-hide = "" - style = "" - -window "infowindow" - elem "infowindow" - type = MAIN - pos = 0,0 - size = 640x480 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true - is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" - elem "info" - type = CHILD - pos = 0,30 - size = 640x445 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "splitter" - on-size = "" - left = "statwindow" - right = "outputwindow" - is-vert = false - splitter = 50 - show-splitter = true - lock = none - elem "changelog" - type = BUTTON - pos = 16,5 - size = 104x20 - anchor1 = 3,0 - anchor2 = 19,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Changelog" - image = "" - command = "changelog" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton - elem "rules" - type = BUTTON - pos = 120,5 - size = 100x20 - anchor1 = 19,0 - anchor2 = 34,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Rules" - image = "" - command = "rules" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton - elem "wiki" - type = BUTTON - pos = 220,5 - size = 100x20 - anchor1 = 34,0 - anchor2 = 50,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Wiki" - image = "" - command = "wiki" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton - elem "forum" - type = BUTTON - pos = 320,5 - size = 100x20 - anchor1 = 50,0 - anchor2 = 66,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Forum" - image = "" - command = "forum" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton - elem "github" - type = BUTTON - pos = 420,5 - size = 100x20 - anchor1 = 66,0 - anchor2 = 81,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Github" - image = "" - command = "github" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton - elem "report-issue" - type = BUTTON - pos = 520,5 - size = 100x20 - anchor1 = 81,0 - anchor2 = 97,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "is-checked" - on-size = "" - text = "Report Issue" - image = "" - command = "report-issue" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton - -window "outputwindow" - elem "outputwindow" - type = MAIN - pos = 0,0 - size = 640x480 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true - is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" - elem "output" - type = OUTPUT - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = #ffffff - is-visible = true - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = false - right-click = false - saved-params = "max-lines" - on-size = "" - link-color = #0000ff - visited-color = #ff00ff - style = "" - enable-http-images = false - max-lines = 1000 - image = "" - -window "statwindow" - elem "statwindow" - type = MAIN - pos = 0,0 - size = 640x480 - anchor1 = none - anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false - saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true - is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" - elem "stat" - type = INFO - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = #ffffff - is-visible = true - is-disabled = false - is-transparent = false - is-default = true - border = none - drop-zone = true - right-click = false - saved-params = "" - on-size = "" - highlight-color = #00ff00 - tab-text-color = #000000 - tab-background-color = none - tab-font-family = "" - tab-font-size = 0 - tab-font-style = "" - allow-html = true - multi-line = true - on-show = "" - on-hide = "" - on-tab = "" - prefix-color = none - suffix-color = none - +macro "default" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=hotkeys mapwindow.map.focus=true input.background-color=#e0e0e0\"" + is-disabled = false + elem + name = "CENTER+REP" + command = ".center" + is-disabled = false + elem + name = "NORTHEAST" + command = ".northeast" + is-disabled = false + elem + name = "SOUTHEAST" + command = ".southeast" + is-disabled = false + elem + name = "SOUTHWEST" + command = ".southwest" + is-disabled = false + elem + name = "NORTHWEST" + command = ".northwest" + is-disabled = false + elem + name = "CTRL+WEST" + command = "westface" + is-disabled = false + elem + name = "WEST+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+NORTH" + command = "northface" + is-disabled = false + elem + name = "NORTH+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+EAST" + command = "eastface" + is-disabled = false + elem + name = "EAST+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+SOUTH" + command = "southface" + is-disabled = false + elem + name = "SOUTH+REP" + command = ".movedown" + is-disabled = false + elem + name = "INSERT" + command = "a-intent right" + is-disabled = false + elem + name = "DELETE" + command = "delete-key-pressed" + is-disabled = false + elem + name = "CTRL+1" + command = "a-intent help" + is-disabled = false + elem + name = "CTRL+2" + command = "a-intent disarm" + is-disabled = false + elem + name = "CTRL+3" + command = "a-intent grab" + is-disabled = false + elem + name = "CTRL+4" + command = "a-intent harm" + is-disabled = false + elem + name = "CTRL+A+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+B" + command = "resist" + is-disabled = false + elem + name = "CTRL+D+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+E" + command = "quick-equip" + is-disabled = false + elem + name = "CTRL+F" + command = "a-intent left" + is-disabled = false + elem + name = "CTRL+G" + command = "a-intent right" + is-disabled = false + elem + name = "CTRL+H" + command = "talk-wheel" + is-disabled = false + elem + name = "CTRL+O" + command = "ooc" + is-disabled = false + elem + name = "CTRL+Q" + command = ".northwest" + is-disabled = false + elem + name = "CTRL+R" + command = ".southwest" + is-disabled = false + elem + name = "CTRL+S+REP" + command = ".movedown" + is-disabled = false + elem + name = "CTRL+W+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+X" + command = ".northeast" + is-disabled = false + elem + name = "CTRL+Y" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+NUMPAD1" + command = "body-r-leg" + is-disabled = false + elem + name = "CTRL+NUMPAD2" + command = "body-groin" + is-disabled = false + elem + name = "CTRL+NUMPAD3" + command = "body-l-leg" + is-disabled = false + elem + name = "CTRL+NUMPAD4" + command = "body-r-arm" + is-disabled = false + elem + name = "CTRL+NUMPAD5" + command = "body-chest" + is-disabled = false + elem + name = "CTRL+NUMPAD6" + command = "body-l-arm" + is-disabled = false + elem + name = "CTRL+NUMPAD8" + command = "body-toggle-head" + is-disabled = false + elem + name = "CTRL+ADD" + command = "Add-View-Range 1" + is-disabled = false + elem + name = "CTRL+SUBTRACT" + command = "Add-View-Range -1" + is_disabled = false + elem + name = "F1" + command = "adminhelp" + is-disabled = false + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + is-disabled = false + elem + name = "F2+REP" + command = ".screenshot auto" + is-disabled = false + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + is-disabled = false + elem + name = "F5" + command = "Aghost" + is-disabled = false + elem + name = "F6" + command = "Player-Panel" + is-disabled = false + elem + name = "F7" + command = "Toggle-Build-Mode-Self" + is-disabled = false + elem + name = "CTRL+F7" + command = "Stealth-Mode" + is-disabled = false + elem + name = "F8" + command = "Invisimin" + is-disabled = false + elem + name = "F12" + command = "F12" + is-disabled = false + elem + name = "ALT" + command = "toggle-walk-run" + is-disabled = false + elem + name = "ALT+UP" + command = "toggle-walk-run" + is-disabled = false + +macro "hotkeys" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=default input.focus=true input.background-color=#d3b5b5\"" + is-disabled = false + elem + name = "CENTER+REP" + command = ".center" + is-disabled = false + elem + name = "NORTHEAST" + command = ".northeast" + is-disabled = false + elem + name = "SOUTHEAST" + command = ".southeast" + is-disabled = false + elem + name = "SOUTHWEST" + command = ".southwest" + is-disabled = false + elem + name = "NORTHWEST" + command = ".northwest" + is-disabled = false + elem + name = "CTRL+WEST" + command = "westface" + is-disabled = false + elem + name = "WEST+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+NORTH" + command = "northface" + is-disabled = false + elem + name = "NORTH+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+EAST" + command = "eastface" + is-disabled = false + elem + name = "EAST+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+SOUTH" + command = "southface" + is-disabled = false + elem + name = "SOUTH+REP" + command = ".movedown" + is-disabled = false + elem + name = "INSERT" + command = "a-intent right" + is-disabled = false + elem + name = "DELETE" + command = "delete-key-pressed" + is-disabled = false + elem + name = "1" + command = "a-intent help" + is-disabled = false + elem + name = "CTRL+1" + command = "a-intent help" + is-disabled = false + elem + name = "2" + command = "a-intent disarm" + is-disabled = false + elem + name = "CTRL+2" + command = "a-intent disarm" + is-disabled = false + elem + name = "3" + command = "a-intent grab" + is-disabled = false + elem + name = "CTRL+3" + command = "a-intent grab" + is-disabled = false + elem + name = "4" + command = "a-intent harm" + is-disabled = false + elem + name = "CTRL+4" + command = "a-intent harm" + is-disabled = false + elem + name = "A+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+A+REP" + command = ".moveleft" + is-disabled = false + elem + name = "B" + command = "resist" + is-disabled = false + elem + name = "CTRL+B" + command = "resist" + is-disabled = false + elem + name = "D+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+D+REP" + command = ".moveright" + is-disabled = false + elem + name = "E" + command = "quick-equip" + is-disabled = false + elem + name = "CTRL+E" + command = "quick-equip" + is-disabled = false + elem + name = "F" + command = "a-intent left" + is-disabled = false + elem + name = "CTRL+F" + command = "a-intent left" + is-disabled = false + elem + name = "G" + command = "a-intent right" + is-disabled = false + elem + name = "CTRL+G" + command = "a-intent right" + is-disabled = false + elem + name = "H" + command = "talk-wheel" + is-disabled = false + elem + name = "CTRL+H" + command = "talk-wheel" + is-disabled = false + elem + name = "M" + command = "me" + is-disabled = false + elem + name = "O" + command = "ooc" + is-disabled = false + elem + name = "CTRL+O" + command = "ooc" + is-disabled = false + elem + name = "Q" + command = ".northwest" + is-disabled = false + elem + name = "CTRL+Q" + command = ".northwest" + is-disabled = false + elem + name = "R" + command = ".southwest" + is-disabled = false + elem + name = "CTRL+R" + command = ".southwest" + is-disabled = false + elem "s_key" + name = "S+REP" + command = ".movedown" + is-disabled = false + elem + name = "CTRL+S+REP" + command = ".movedown" + is-disabled = false + elem + name = "T" + command = "say" + is-disabled = false + elem "w_key" + name = "W+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+W+REP" + command = ".moveup" + is-disabled = false + elem + name = "X" + command = ".northeast" + is-disabled = false + elem + name = "CTRL+X" + command = ".northeast" + is-disabled = false + elem + name = "Y" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+Y" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "Z" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "NUMPAD1" + command = "body-r-leg" + is-disabled = false + elem + name = "NUMPAD2" + command = "body-groin" + is-disabled = false + elem + name = "NUMPAD3" + command = "body-l-leg" + is-disabled = false + elem + name = "NUMPAD4" + command = "body-r-arm" + is-disabled = false + elem + name = "NUMPAD5" + command = "body-chest" + is-disabled = false + elem + name = "NUMPAD6" + command = "body-l-arm" + is-disabled = false + elem + name = "NUMPAD8" + command = "body-toggle-head" + is-disabled = false + elem + name = "CTRL+ADD" + command = "Add-View-Range 1" + is-disabled = false + elem + name = "CTRL+SUBTRACT" + command = "Add-View-Range -1" + is_disabled = false + elem + name = "F1" + command = "adminhelp" + is-disabled = false + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + is-disabled = false + elem + name = "F2+REP" + command = ".screenshot auto" + is-disabled = false + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + is-disabled = false + elem + name = "F5" + command = "Aghost" + is-disabled = false + elem + name = "F6" + command = "Player-Panel" + is-disabled = false + elem + name = "F7" + command = "Stealth-Mode" + is-disabled = false + elem + name = "CTRL+F7" + command = "Stealth-Mode" + is-disabled = false + elem + name = "F8" + command = "Toggle-Build-Mode-Self" + is-disabled = false + elem + name = "F12" + command = "F12" + is-disabled = false + elem + name = "ALT" + command = "toggle-walk-run" + is-disabled = false + elem + name = "ALT+UP" + command = "toggle-walk-run" + is-disabled = false + +macro "robot-default" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=robot-hotkeys mapwindow.map.focus=true input.background-color=#e0e0e0\"" + is-disabled = false + elem + name = "CENTER+REP" + command = ".center" + is-disabled = false + elem + name = "NORTHEAST" + command = ".northeast" + is-disabled = false + elem + name = "SOUTHEAST" + command = ".southeast" + is-disabled = false + elem + name = "NORTHWEST" + command = "unequip-module" + is-disabled = false + elem + name = "CTRL+WEST" + command = "westface" + is-disabled = false + elem + name = "WEST+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+NORTH" + command = "northface" + is-disabled = false + elem + name = "NORTH+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+EAST" + command = "eastface" + is-disabled = false + elem + name = "EAST+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+SOUTH" + command = "southface" + is-disabled = false + elem + name = "SOUTH+REP" + command = ".movedown" + is-disabled = false + elem + name = "INSERT" + command = "a-intent right" + is-disabled = false + elem + name = "DELETE" + command = "delete-key-pressed" + is-disabled = false + elem + name = "CTRL+1" + command = "toggle-module 1" + is-disabled = false + elem + name = "CTRL+2" + command = "toggle-module 2" + is-disabled = false + elem + name = "CTRL+3" + command = "toggle-module 3" + is-disabled = false + elem + name = "CTRL+4" + command = "a-intent left" + is-disabled = false + elem + name = "CTRL+A+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+B" + command = "resist" + is-disabled = false + elem + name = "CTRL+H" + command = "talk-wheel" + is-disabled = false + elem + name = "CTRL+O" + command = "ooc" + is-disabled = false + elem + name = "CTRL+D+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+F" + command = "a-intent left" + is-disabled = false + elem + name = "CTRL+G" + command = "a-intent right" + is-disabled = false + elem + name = "CTRL+Q" + command = "unequip-module" + is-disabled = false + elem + name = "CTRL+S+REP" + command = ".movedown" + is-disabled = false + elem + name = "CTRL+W+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+X" + command = ".northeast" + is-disabled = false + elem + name = "CTRL+Y" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+NUMPAD1" + command = "body-r-leg" + is-disabled = false + elem + name = "CTRL+NUMPAD2" + command = "body-groin" + is-disabled = false + elem + name = "CTRL+NUMPAD3" + command = "body-l-leg" + is-disabled = false + elem + name = "CTRL+NUMPAD4" + command = "body-r-arm" + is-disabled = false + elem + name = "CTRL+NUMPAD5" + command = "body-chest" + is-disabled = false + elem + name = "CTRL+NUMPAD6" + command = "body-l-arm" + is-disabled = false + elem + name = "CTRL+NUMPAD8" + command = "body-toggle-head" + is-disabled = false + elem + name = "F1" + command = "adminhelp" + is-disabled = false + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + is-disabled = false + elem + name = "F2+REP" + command = ".screenshot auto" + is-disabled = false + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + is-disabled = false + elem + name = "F5" + command = "Aghost" + is-disabled = false + elem + name = "F6" + command = "Player-Panel" + is-disabled = false + elem + name = "F7" + command = "Toggle-Build-Mode-Self" + is-disabled = false + elem + name = "CTRL+F7" + command = "Stealth-Mode" + is-disabled = false + elem + name = "F8" + command = "Invisimin" + is-disabled = false + elem + name = "F12" + command = "F12" + is-disabled = false + +macro "robot-hotkeys" + elem + name = "TAB" + command = ".winset \"mainwindow.macro=robot-default input.focus=true input.background-color=#d3b5b5\"" + is-disabled = false + elem + name = "CENTER+REP" + command = ".center" + is-disabled = false + elem + name = "NORTHEAST" + command = ".northeast" + is-disabled = false + elem + name = "SOUTHEAST" + command = ".southeast" + is-disabled = false + elem + name = "NORTHWEST" + command = "unequip-module" + is-disabled = false + elem + name = "CTRL+WEST" + command = "westface" + is-disabled = false + elem + name = "WEST+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+NORTH" + command = "northface" + is-disabled = false + elem + name = "NORTH+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+EAST" + command = "eastface" + is-disabled = false + elem + name = "EAST+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+SOUTH" + command = "southface" + is-disabled = false + elem + name = "SOUTH+REP" + command = ".movedown" + is-disabled = false + elem + name = "INSERT" + command = "a-intent right" + is-disabled = false + elem + name = "DELETE" + command = "delete-key-pressed" + is-disabled = false + elem + name = "1" + command = "toggle-module 1" + is-disabled = false + elem + name = "CTRL+1" + command = "toggle-module 1" + is-disabled = false + elem + name = "2" + command = "toggle-module 2" + is-disabled = false + elem + name = "CTRL+2" + command = "toggle-module 2" + is-disabled = false + elem + name = "3" + command = "toggle-module 3" + is-disabled = false + elem + name = "CTRL+3" + command = "toggle-module 3" + is-disabled = false + elem + name = "4" + command = "a-intent left" + is-disabled = false + elem + name = "CTRL+4" + command = "a-intent left" + is-disabled = false + elem + name = "A+REP" + command = ".moveleft" + is-disabled = false + elem + name = "CTRL+A+REP" + command = ".moveleft" + is-disabled = false + elem + name = "B" + command = "resist" + is-disabled = false + elem + name = "CTRL+B" + command = "resist" + is-disabled = false + elem + name = "H" + command = "talk-wheel" + is-disabled = false + elem + name = "CTRL+H" + command = "talk-wheel" + is-disabled = false + elem + name = "M" + command = "me" + is-disabled = false + elem + name = "O" + command = "ooc" + is-disabled = false + elem + name = "CTRL+O" + command = "ooc" + is-disabled = false + elem + name = "D+REP" + command = ".moveright" + is-disabled = false + elem + name = "CTRL+D+REP" + command = ".moveright" + is-disabled = false + elem + name = "F" + command = "a-intent left" + is-disabled = false + elem + name = "CTRL+F" + command = "a-intent left" + is-disabled = false + elem + name = "G" + command = "a-intent right" + is-disabled = false + elem + name = "CTRL+G" + command = "a-intent right" + is-disabled = false + elem + name = "Q" + command = "unequip-module" + is-disabled = false + elem + name = "CTRL+Q" + command = "unequip-module" + is-disabled = false + elem "s_key" + name = "S+REP" + command = ".movedown" + is-disabled = false + elem + name = "CTRL+S+REP" + command = ".movedown" + is-disabled = false + elem + name = "T" + command = "say" + is-disabled = false + elem "w_key" + name = "W+REP" + command = ".moveup" + is-disabled = false + elem + name = "CTRL+W+REP" + command = ".moveup" + is-disabled = false + elem + name = "X" + command = ".northeast" + is-disabled = false + elem + name = "CTRL+X" + command = ".northeast" + is-disabled = false + elem + name = "Y" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+Y" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "Z" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "CTRL+Z" + command = "Activate-Held-Object" + is-disabled = false + elem + name = "NUMPAD1" + command = "body-r-leg" + is-disabled = false + elem + name = "NUMPAD2" + command = "body-groin" + is-disabled = false + elem + name = "NUMPAD3" + command = "body-l-leg" + is-disabled = false + elem + name = "NUMPAD4" + command = "body-r-arm" + is-disabled = false + elem + name = "NUMPAD5" + command = "body-chest" + is-disabled = false + elem + name = "NUMPAD6" + command = "body-l-arm" + is-disabled = false + elem + name = "NUMPAD8" + command = "body-toggle-head" + is-disabled = false + elem + name = "F1" + command = "adminhelp" + is-disabled = false + elem + name = "CTRL+SHIFT+F1+REP" + command = ".options" + is-disabled = false + elem + name = "F2+REP" + command = ".screenshot auto" + is-disabled = false + elem + name = "SHIFT+F2+REP" + command = ".screenshot" + is-disabled = false + elem + name = "F5" + command = "Aghost" + is-disabled = false + elem + name = "F6" + command = "Player-Panel" + is-disabled = false + elem + name = "F7" + command = "Toggle-Build-Mode-Self" + is-disabled = false + elem + name = "CTRL+F7" + command = "Stealth-Mode" + is-disabled = false + elem + name = "F8" + command = "Invisimin" + is-disabled = false + elem + name = "F12" + command = "F12" + is-disabled = false + + +menu "menu" + elem + name = "&File" + command = "" + category = "" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Quick screenshot\tF2" + command = ".screenshot auto" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Save screenshot as...\tShift+F2" + command = ".screenshot" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "" + command = "" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem "reconnectbutton" + name = "&Reconnect" + command = ".reconnect" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Quit\tAlt-F4" + command = ".quit" + category = "&File" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Help" + command = "" + category = "" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Admin Help\tF1" + command = "adminhelp" + category = "&Help" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + elem + name = "&Hotkeys" + command = "hotkeys-help" + category = "&Help" + is-checked = false + can-check = false + group = "" + is-disabled = false + saved-params = "is-checked" + + +window "mainwindow" + elem "mainwindow" + type = MAIN + pos = 0,0 + size = 640x440 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = false + is-minimized = false + is-maximized = false + can-scroll = none + icon = 'icons\\ss13_64.png' + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "macro" + menu = "menu" + on-close = "" + elem "split" + type = CHILD + pos = 3,0 + size = 634x417 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "mapwindow" + right = "infowindow" + is-vert = true + splitter = 50 + show-splitter = true + lock = none + elem "input" + type = INPUT + pos = 5,420 + size = 595x20 + anchor1 = 0,100 + anchor2 = 100,100 + font-family = "" + font-size = 10 + font-style = "" + text-color = #000000 + background-color = #d3b5b5 + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = false + right-click = false + saved-params = "command" + on-size = "" + command = "" + multi-line = false + is-password = false + no-command = false + elem "say" + type = BUTTON + pos = 600,420 + size = 37x20 + anchor1 = 100,100 + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Chat" + image = "" + command = ".winset \"say.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"" + is-flat = true + stretch = false + is-checked = false + group = "" + button-type = pushbox + elem "asset_cache_browser" + type = BROWSER + pos = 0,0 + size = 200x200 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + show-history = false + show-url = false + auto-format = true + use-title = false + on-show = "" + on-hide = "" + elem "tooltip" + type = BROWSER + pos = 0,0 + size = 999x999 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = false + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "" + on-size = "" + show-history = false + show-url = false + auto-format = true + use-title = false + on-show = "" + on-hide = "" + +window "mapwindow" + elem "mapwindow" + type = MAIN + pos = 0,0 + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "map" + type = MAP + pos = 0,0 + size = 640x480 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "Arial" + font-size = 7 + font-style = "" + text-color = none + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = true + right-click = false + saved-params = "icon-size" + on-size = "" + icon-size = 0 + text-mode = false + letterbox = true + zoom = 0 + on-show = "" + on-hide = "" + style = "" + zoom-mode = "distort" + +window "infowindow" + elem "infowindow" + type = MAIN + pos = 0,0 + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "info" + type = CHILD + pos = 0,30 + size = 640x445 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "splitter" + on-size = "" + left = "statwindow" + right = "outputwindow" + is-vert = false + splitter = 50 + show-splitter = true + lock = none + elem "changelog" + type = BUTTON + pos = 16,5 + size = 104x20 + anchor1 = 3,0 + anchor2 = 19,0 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Changelog" + image = "" + command = "changelog" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "rules" + type = BUTTON + pos = 120,5 + size = 100x20 + anchor1 = 19,0 + anchor2 = 34,0 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Rules" + image = "" + command = "rules" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "wiki" + type = BUTTON + pos = 220,5 + size = 100x20 + anchor1 = 34,0 + anchor2 = 50,0 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Wiki" + image = "" + command = "wiki" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "forum" + type = BUTTON + pos = 320,5 + size = 100x20 + anchor1 = 50,0 + anchor2 = 66,0 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Forum" + image = "" + command = "forum" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "github" + type = BUTTON + pos = 420,5 + size = 100x20 + anchor1 = 66,0 + anchor2 = 81,0 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Github" + image = "" + command = "github" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + elem "report-issue" + type = BUTTON + pos = 520,5 + size = 100x20 + anchor1 = 81,0 + anchor2 = 97,0 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "is-checked" + on-size = "" + text = "Report Issue" + image = "" + command = "report-issue" + is-flat = false + stretch = false + is-checked = false + group = "" + button-type = pushbutton + +window "outputwindow" + elem "outputwindow" + type = MAIN + pos = 0,0 + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "output" + type = OUTPUT + pos = 0,0 + size = 640x480 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = false + right-click = false + saved-params = "max-lines" + on-size = "" + link-color = #0000ff + visited-color = #ff00ff + style = "" + enable-http-images = false + max-lines = 1000 + image = "" + +window "statwindow" + elem "statwindow" + type = MAIN + pos = 0,0 + size = 640x480 + anchor1 = none + anchor2 = none + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = none + is-visible = true + is-disabled = false + is-transparent = false + is-default = false + border = none + drop-zone = false + right-click = false + saved-params = "pos;size;is-minimized;is-maximized" + on-size = "" + title = "" + titlebar = true + statusbar = true + can-close = true + can-minimize = true + can-resize = true + is-pane = true + is-minimized = false + is-maximized = false + can-scroll = none + icon = "" + image = "" + image-mode = stretch + keep-aspect = false + transparent-color = none + alpha = 255 + macro = "" + menu = "" + on-close = "" + elem "stat" + type = INFO + pos = 0,0 + size = 640x480 + anchor1 = 0,0 + anchor2 = 100,100 + font-family = "" + font-size = 0 + font-style = "" + text-color = #000000 + background-color = #ffffff + is-visible = true + is-disabled = false + is-transparent = false + is-default = true + border = none + drop-zone = true + right-click = false + saved-params = "" + on-size = "" + highlight-color = #00ff00 + tab-text-color = #000000 + tab-background-color = none + tab-font-family = "" + tab-font-size = 0 + tab-font-style = "" + allow-html = true + multi-line = true + on-show = "" + on-hide = "" + on-tab = "" + prefix-color = none + suffix-color = none + diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index a758818c8c..acecb4874b 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -154,4 +154,5 @@ BIG IMG.icon {width: 32px; height: 32px;} .love {color: #FF69Bf;} .lovebold {color: #FF69Bf; font-weight: bold;} +.resonate {color: #298F85;} "} diff --git a/sound/ambience/antag/ClockCultAlr.ogg b/sound/ambience/antag/ClockCultAlr.ogg new file mode 100644 index 0000000000..dabc828557 Binary files /dev/null and b/sound/ambience/antag/ClockCultAlr.ogg differ diff --git a/sound/ambience/antag/Malf.ogg b/sound/ambience/antag/Malf.ogg new file mode 100644 index 0000000000..cff3fc615f Binary files /dev/null and b/sound/ambience/antag/Malf.ogg differ diff --git a/sound/ambience/antag/Monkey.ogg b/sound/ambience/antag/Monkey.ogg new file mode 100644 index 0000000000..6b2d411056 Binary files /dev/null and b/sound/ambience/antag/Monkey.ogg differ diff --git a/sound/ambience/antag/RagesMages.ogg b/sound/ambience/antag/RagesMages.ogg new file mode 100644 index 0000000000..23d90db6c4 Binary files /dev/null and b/sound/ambience/antag/RagesMages.ogg differ diff --git a/sound/ambience/antag/TatorAlert.ogg b/sound/ambience/antag/TatorAlert.ogg new file mode 100644 index 0000000000..ca0efa0ea0 Binary files /dev/null and b/sound/ambience/antag/TatorAlert.ogg differ diff --git a/sound/ambience/antag/bloodcult.ogg b/sound/ambience/antag/bloodcult.ogg new file mode 100644 index 0000000000..9fa22df51d Binary files /dev/null and b/sound/ambience/antag/bloodcult.ogg differ diff --git a/sound/ambience/antag/ling_aler.ogg b/sound/ambience/antag/ling_aler.ogg new file mode 100644 index 0000000000..1132ccca29 Binary files /dev/null and b/sound/ambience/antag/ling_aler.ogg differ diff --git a/sound/ambience/antag/new_clock.ogg b/sound/ambience/antag/new_clock.ogg new file mode 100644 index 0000000000..5be758c324 Binary files /dev/null and b/sound/ambience/antag/new_clock.ogg differ diff --git a/sound/ambience/antag/ops.ogg b/sound/ambience/antag/ops.ogg new file mode 100644 index 0000000000..7c2774f0a0 Binary files /dev/null and b/sound/ambience/antag/ops.ogg differ diff --git a/sound/effects/snap01.ogg b/sound/effects/snap01.ogg new file mode 100644 index 0000000000..aa7ab9f5bf Binary files /dev/null and b/sound/effects/snap01.ogg differ diff --git a/sound/misc/highlander.ogg b/sound/misc/highlander.ogg index 2116f8a972..01148b55db 100644 Binary files a/sound/misc/highlander.ogg and b/sound/misc/highlander.ogg differ diff --git a/sound/misc/highlander_delayed.ogg b/sound/misc/highlander_delayed.ogg index d1cce70781..2645349662 100644 Binary files a/sound/misc/highlander_delayed.ogg and b/sound/misc/highlander_delayed.ogg differ diff --git a/sound/misc/highlander_only_one.ogg b/sound/misc/highlander_only_one.ogg index 3b69d26ade..6458d10ab6 100644 Binary files a/sound/misc/highlander_only_one.ogg and b/sound/misc/highlander_only_one.ogg differ diff --git a/storage.dmi b/storage.dmi new file mode 100644 index 0000000000..91055cc42c Binary files /dev/null and b/storage.dmi differ diff --git a/config/admin_nicknames.txt b/strings/admin_nicknames.txt similarity index 100% rename from config/admin_nicknames.txt rename to strings/admin_nicknames.txt diff --git a/strings/cas_black.txt b/strings/cas_black.txt index ba078abea4..2e7c6fb407 100644 --- a/strings/cas_black.txt +++ b/strings/cas_black.txt @@ -76,7 +76,7 @@ I'm not a space bigot, I just hate _________. Why is the station so filthy? THE SHUTTLE CANNOT BE CALLED BECAUSE OF ________ ON THE STATION. After murdering dozens, the traitor was finally brought down by _________. -The librarian has read a lot of porn, but never about _____________! +The curator has read a lot of porn, but never about _____________! Oh god! There's ________________ outside escape! The hottest new space couple is ________ and __________. Lord Singulo hungers for _______. diff --git a/strings/cas_white.txt b/strings/cas_white.txt index 506f6f6c65..d36f19ffe9 100644 --- a/strings/cas_white.txt +++ b/strings/cas_white.txt @@ -61,7 +61,7 @@ Lopping off the Captain's johnson and shooting it out a pneumatic cannon. The secret monkey technique. Putting the pAI's doorjack where it don't belong. Chemical sprayers filled with lube. -Librarians. +Curators. Spooky skeletons. Replicating the Milgram experiment with an electropack. Catgirls. diff --git a/strings/ion_laws.json b/strings/ion_laws.json index a4a3e312f7..5a61fc3196 100644 --- a/strings/ion_laws.json +++ b/strings/ion_laws.json @@ -343,7 +343,7 @@ "CLOWNS", "MIMES", "CHAPLAINS", - "LIBRARIANS", + "CURATORS", "HEADS OF CREW", "CAPTAINS AND HEADS", "CYBORGS", diff --git a/config/sillytips.txt b/strings/sillytips.txt similarity index 100% rename from config/sillytips.txt rename to strings/sillytips.txt diff --git a/config/tips.txt b/strings/tips.txt similarity index 100% rename from config/tips.txt rename to strings/tips.txt diff --git a/tgstation.dme b/tgstation.dme index 1f3ef27802..d8b1fc0420 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -47,6 +47,7 @@ #include "code\__DEFINES\maps.dm" #include "code\__DEFINES\math.dm" #include "code\__DEFINES\MC.dm" +#include "code\__DEFINES\menu.dm" #include "code\__DEFINES\misc.dm" #include "code\__DEFINES\mobs.dm" #include "code\__DEFINES\monkeys.dm" @@ -75,7 +76,6 @@ #include "code\__HELPERS\_logging.dm" #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\AStar.dm" -#include "code\__HELPERS\bandetect.dm" #include "code\__HELPERS\cmp.dm" #include "code\__HELPERS\files.dm" #include "code\__HELPERS\flags.dm" @@ -202,6 +202,7 @@ #include "code\controllers\subsystem\inbounds.dm" #include "code\controllers\subsystem\ipintel.dm" #include "code\controllers\subsystem\job.dm" +#include "code\controllers\subsystem\language.dm" #include "code\controllers\subsystem\lighting.dm" #include "code\controllers\subsystem\machines.dm" #include "code\controllers\subsystem\mapping.dm" @@ -244,6 +245,7 @@ #include "code\datums\dog_fashion.dm" #include "code\datums\emotes.dm" #include "code\datums\forced_movement.dm" +#include "code\datums\holocall.dm" #include "code\datums\hud.dm" #include "code\datums\map_config.dm" #include "code\datums\martial.dm" @@ -467,6 +469,7 @@ #include "code\game\gamemodes\cult\cult_structures.dm" #include "code\game\gamemodes\cult\ritual.dm" #include "code\game\gamemodes\cult\runes.dm" +#include "code\game\gamemodes\cult\supply.dm" #include "code\game\gamemodes\cult\talisman.dm" #include "code\game\gamemodes\devil\devil.dm" #include "code\game\gamemodes\devil\devil_game_mode.dm" @@ -552,6 +555,7 @@ #include "code\game\machinery\hologram.dm" #include "code\game\machinery\igniter.dm" #include "code\game\machinery\iv_drip.dm" +#include "code\game\machinery\launch_pad.dm" #include "code\game\machinery\lightswitch.dm" #include "code\game\machinery\limbgrower.dm" #include "code\game\machinery\machinery.dm" @@ -600,6 +604,7 @@ #include "code\game\machinery\computer\crew.dm" #include "code\game\machinery\computer\dna_console.dm" #include "code\game\machinery\computer\gulag_teleporter.dm" +#include "code\game\machinery\computer\launchpad_control.dm" #include "code\game\machinery\computer\law.dm" #include "code\game\machinery\computer\medical.dm" #include "code\game\machinery\computer\message.dm" @@ -805,7 +810,6 @@ #include "code\game\objects\items\weapons\defib.dm" #include "code\game\objects\items\weapons\dice.dm" #include "code\game\objects\items\weapons\dna_injector.dm" -#include "code\game\objects\items\weapons\explosives.dm" #include "code\game\objects\items\weapons\extinguisher.dm" #include "code\game\objects\items\weapons\flamethrower.dm" #include "code\game\objects\items\weapons\gift.dm" @@ -872,6 +876,7 @@ #include "code\game\objects\items\weapons\storage\book.dm" #include "code\game\objects\items\weapons\storage\boxes.dm" #include "code\game\objects\items\weapons\storage\briefcase.dm" +#include "code\game\objects\items\weapons\storage\dakis.dm" #include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\firstaid.dm" #include "code\game\objects\items\weapons\storage\internal.dm" @@ -1000,6 +1005,7 @@ #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_ranks.dm" #include "code\modules\admin\admin_verbs.dm" +#include "code\modules\admin\adminmenu.dm" #include "code\modules\admin\banjob.dm" #include "code\modules\admin\create_mob.dm" #include "code\modules\admin\create_object.dm" @@ -1176,6 +1182,7 @@ #include "code\modules\clothing\gloves\miscellaneous.dm" #include "code\modules\clothing\gloves\vg_gloves.dm" #include "code\modules\clothing\head\beanie.dm" +#include "code\modules\clothing\head\cit_hats.dm" #include "code\modules\clothing\head\collectable.dm" #include "code\modules\clothing\head\hardhat.dm" #include "code\modules\clothing\head\helmet.dm" @@ -1419,12 +1426,15 @@ #include "code\modules\jobs\job_types\security.dm" #include "code\modules\jobs\job_types\silicon.dm" #include "code\modules\language\common.dm" +#include "code\modules\language\draconic.dm" #include "code\modules\language\drone.dm" #include "code\modules\language\language.dm" +#include "code\modules\language\language_holder.dm" #include "code\modules\language\language_menu.dm" #include "code\modules\language\machine.dm" #include "code\modules\language\monkey.dm" -#include "code\modules\language\ratvar.dm" +#include "code\modules\language\narsian.dm" +#include "code\modules\language\ratvarian.dm" #include "code\modules\language\slime.dm" #include "code\modules\language\swarmer.dm" #include "code\modules\language\xenocommon.dm" @@ -1714,6 +1724,7 @@ #include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" +#include "code\modules\mob\living\simple_animal\hostile\jungle_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\killertomato.dm" #include "code\modules\mob\living\simple_animal\hostile\mecha_pilot.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" @@ -2012,6 +2023,7 @@ #include "code\modules\shuttle\arrivals.dm" #include "code\modules\shuttle\assault_pod.dm" #include "code\modules\shuttle\computer.dm" +#include "code\modules\shuttle\elevator.dm" #include "code\modules\shuttle\emergency.dm" #include "code\modules\shuttle\ferry.dm" #include "code\modules\shuttle\manipulator.dm" @@ -2156,6 +2168,7 @@ #include "code\modules\zombie\items.dm" #include "code\modules\zombie\organs.dm" #include "interface\interface.dm" +#include "interface\menu.dm" #include "interface\stylesheet.dm" #include "interface\skin.dmf" // END_INCLUDE diff --git a/tgstation.dme.rej b/tgstation.dme.rej new file mode 100644 index 0000000000..2e9484f3ee --- /dev/null +++ b/tgstation.dme.rej @@ -0,0 +1,16 @@ +diff a/tgstation.dme b/tgstation.dme (rejected hunks) +@@ -677,10 +677,10 @@ + #include "code\game\objects\effects\decals\decal.dm" + #include "code\game\objects\effects\decals\misc.dm" + #include "code\game\objects\effects\decals\remains.dm" +-#include "code\game\objects\effects\decals\Cleanable\aliens.dm" +-#include "code\game\objects\effects\decals\Cleanable\humans.dm" +-#include "code\game\objects\effects\decals\Cleanable\misc.dm" +-#include "code\game\objects\effects\decals\Cleanable\robots.dm" ++#include "code\game\objects\effects\decals\cleanable\aliens.dm" ++#include "code\game\objects\effects\decals\cleanable\humans.dm" ++#include "code\game\objects\effects\decals\cleanable\misc.dm" ++#include "code\game\objects\effects\decals\cleanable\robots.dm" + #include "code\game\objects\effects\effect_system\effect_system.dm" + #include "code\game\objects\effects\effect_system\effects_explosion.dm" + #include "code\game\objects\effects\effect_system\effects_foam.dm" diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index d52500b9d6..03651d3a6b 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb18b25',endColorstr='#ff5f380e',GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input::-moz-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb18b25',endColorstr='#ff5f380e',GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input::-moz-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.css.rej b/tgui/assets/tgui.css.rej new file mode 100644 index 0000000000..bc960c1251 --- /dev/null +++ b/tgui/assets/tgui.css.rej @@ -0,0 +1,6 @@ +diff a/tgui/assets/tgui.css b/tgui/assets/tgui.css (rejected hunks) +@@ -1 +1 @@ +-@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb18b25',endColorstr='#ff5f380e',GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input::-moz-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} +\ No newline at end of file ++@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} +\ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index d2ccdeaee1..d7b7e7f257 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,16 +1,16 @@ -require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o=0;--a){var r=this.tryEntries[a],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var o=b.call(r,"catchLoc"),s=b.call(r,"finallyLoc");if(o&&s){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&b.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),E}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var a=n.completion;if("throw"===a.type){var r=a.arg;d(n)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},E}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(190),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{190:190}],3:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],4:[function(t,e,n){var a=t(84)("unscopables"),r=Array.prototype;void 0==r[a]&&t(32)(r,a,{}),e.exports=function(t){r[a][t]=!0}},{32:32,84:84}],5:[function(t,e,n){var a=t(39);e.exports=function(t){if(!a(t))throw TypeError(t+" is not an object!");return t}},{39:39}],6:[function(t,e,n){"use strict";var a=t(81),r=t(77),i=t(80);e.exports=[].copyWithin||function(t,e){var n=a(this),o=i(n.length),s=r(t,o),p=r(e,o),u=arguments,c=u.length>2?u[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-p,o-s),f=1;for(s>p&&p+l>s&&(f=-1,p+=l-1,s+=l-1);l-- >0;)p in n?n[s]=n[p]:delete n[s],s+=f,p+=f;return n}},{77:77,80:80,81:81}],7:[function(t,e,n){"use strict";var a=t(81),r=t(77),i=t(80);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,p=r(s>1?o[1]:void 0,n),u=s>2?o[2]:void 0,c=void 0===u?n:r(u,n);c>p;)e[p++]=t;return e}},{77:77,80:80,81:81}],8:[function(t,e,n){var a=t(79),r=t(80),i=t(77);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c;return!t&&-1}}},{77:77,79:79,80:80}],9:[function(t,e,n){var a=t(18),r=t(35),i=t(81),o=t(80),s=t(10);e.exports=function(t){var e=1==t,n=2==t,p=3==t,u=4==t,c=6==t,l=5==t||c;return function(f,d,h){for(var m,v,g=i(f),b=r(g),y=a(d,h,3),_=o(b.length),x=0,w=e?s(f,_):n?s(f,0):void 0;_>x;x++)if((l||x in b)&&(m=b[x],v=y(m,x,g),t))if(e)w[x]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(u)return!1;return c?-1:p||u?u:w}}},{10:10,18:18,35:35,80:80,81:81}],10:[function(t,e,n){var a=t(39),r=t(37),i=t(84)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{37:37,39:39,84:84}],11:[function(t,e,n){var a=t(12),r=t(84)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{12:12,84:84}],12:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],13:[function(t,e,n){"use strict";var a=t(47),r=t(32),i=t(61),o=t(18),s=t(70),p=t(19),u=t(28),c=t(43),l=t(45),f=t(83)("id"),d=t(31),h=t(39),m=t(66),v=t(20),g=Object.isExtensible||h,b=v?"_s":"size",y=0,_=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";r(t,f,++y)}return"O"+t[f]},x=function(t,e){var n,a=_(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&u(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=x(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!x(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return p(this[b])}}),c},def:function(t,e,n){var a,r,i=x(t,e);return i?i.v=n:(t._l=i={i:r=_(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:x,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{18:18,19:19,20:20,28:28,31:31,32:32,39:39,43:43,45:45,47:47,61:61,66:66,70:70,83:83}],14:[function(t,e,n){var a=t(28),r=t(11);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{11:11,28:28}],15:[function(t,e,n){"use strict";var a=t(32),r=t(61),i=t(5),o=t(39),s=t(70),p=t(28),u=t(9),c=t(31),l=t(83)("weak"),f=Object.isExtensible||o,d=u(5),h=u(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&p(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{28:28,31:31,32:32,39:39,5:5,61:61,70:70,83:83,9:9}],16:[function(t,e,n){"use strict";var a=t(30),r=t(23),i=t(62),o=t(61),s=t(28),p=t(70),u=t(39),c=t(25),l=t(44),f=t(67);e.exports=function(t,e,n,d,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,_={},x=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!u(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,P=k[b](m?{}:-0,1)!=k,C=c(function(){k.has(1)}),E=l(function(t){new g(t)});E||(g=e(function(e,n){p(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(C||w)&&(x("delete"),x("has"),h&&x("get")),(w||P)&&x(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),_[t]=g,r(r.G+r.W+r.F*(g!=v),_),m||d.setStrong(g,t,h),g}},{23:23,25:25,28:28,30:30,39:39,44:44,61:61,62:62,67:67,70:70}],17:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],18:[function(t,e,n){var a=t(3);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{3:3}],19:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],20:[function(t,e,n){e.exports=!t(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{25:25}],21:[function(t,e,n){var a=t(39),r=t(30).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{30:30,39:39}],22:[function(t,e,n){var a=t(47);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{47:47}],23:[function(t,e,n){var a=t(30),r=t(17),i=t(32),o=t(62),s=t(18),p="prototype",u=function(t,e,n){var c,l,f,d,h=t&u.F,m=t&u.G,v=t&u.S,g=t&u.P,b=t&u.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[p],_=m?r:r[e]||(r[e]={}),x=_[p]||(_[p]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,f=(l?y:n)[c],d=b&&l?s(f,a):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,c,f),_[c]!=f&&i(_,c,d),g&&x[c]!=f&&(x[c]=f)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,e.exports=u},{17:17,18:18,30:30,32:32,62:62}],24:[function(t,e,n){var a=t(84)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{84:84}],25:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],26:[function(t,e,n){"use strict";var a=t(32),r=t(62),i=t(25),o=t(19),s=t(84);e.exports=function(t,e,n){var p=s(t),u=""[t];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,p,u)),a(RegExp.prototype,p,2==e?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}))}},{19:19,25:25,32:32,62:62,84:84}],27:[function(t,e,n){"use strict";var a=t(5);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{5:5}],28:[function(t,e,n){var a=t(18),r=t(41),i=t(36),o=t(5),s=t(80),p=t(85);e.exports=function(t,e,n,u){var c,l,f,d=p(t),h=a(n,u,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)r(f,h,l.value,e)}},{18:18,36:36,41:41,5:5,80:80,85:85}],29:[function(t,e,n){var a=t(79),r=t(47).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{47:47,79:79}],30:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],31:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],32:[function(t,e,n){var a=t(47),r=t(60);e.exports=t(20)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{20:20,47:47,60:60}],33:[function(t,e,n){e.exports=t(30).document&&document.documentElement},{30:30}],34:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],35:[function(t,e,n){var a=t(12);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{12:12}],36:[function(t,e,n){var a=t(46),r=t(84)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{46:46,84:84}],37:[function(t,e,n){var a=t(12);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{12:12}],38:[function(t,e,n){var a=t(39),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{39:39}],39:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],40:[function(t,e,n){var a=t(39),r=t(12),i=t(84)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{12:12,39:39,84:84}],41:[function(t,e,n){var a=t(5);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{5:5}],42:[function(t,e,n){"use strict";var a=t(47),r=t(60),i=t(67),o={};t(32)(o,t(84)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{32:32,47:47,60:60,67:67,84:84}],43:[function(t,e,n){"use strict";var a=t(49),r=t(23),i=t(62),o=t(32),s=t(31),p=t(46),u=t(42),c=t(67),l=t(47).getProto,f=t(84)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,_,x){u(n,e,b);var w,k,P=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},C=e+" Iterator",E=y==v,S=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||P(y);if(O){var M=l(T.call(new t));c(M,C,!0),!a&&s(A,h)&&o(M,f,g),E&&O.name!==v&&(S=!0,T=function(){return O.call(this)})}if(a&&!x||!d&&!S&&A[f]||o(A,f,T),p[e]=T,p[C]=g,y)if(w={values:E?T:P(v),keys:_?T:P(m),entries:E?P("entries"):T},x)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(d||S),e,w);return w}},{23:23,31:31,32:32,42:42,46:46,47:47,49:49,62:62,67:67,84:84}],44:[function(t,e,n){var a=t(84)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){n=!0},i[a]=function(){return o},t(i)}catch(s){}return n}},{84:84}],45:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],46:[function(t,e,n){e.exports={}},{}],47:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],48:[function(t,e,n){var a=t(47),r=t(79);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,p=0;s>p;)if(i[n=o[p++]]===e)return n}},{47:47,79:79}],49:[function(t,e,n){e.exports=!1},{}],50:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],51:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],52:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],53:[function(t,e,n){var a,r,i,o=t(30),s=t(76).set,p=o.MutationObserver||o.WebKitMutationObserver,u=o.process,c=o.Promise,l="process"==t(12)(u),f=function(){var t,e,n;for(l&&(t=u.domain)&&(u.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){u.nextTick(f)};else if(p){var d=1,h=document.createTextNode("");new p(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=c&&c.resolve?function(){c.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&u.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{12:12,30:30,76:76}],54:[function(t,e,n){var a=t(47),r=t(81),i=t(35);e.exports=t(25)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,p=1,u=a.getKeys,c=a.getSymbols,l=a.isEnum;s>p;)for(var f,d=i(o[p++]),h=c?u(d).concat(c(d)):u(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{25:25,35:35,47:47,81:81}],55:[function(t,e,n){var a=t(23),r=t(17),i=t(25);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{17:17,23:23,25:25}],56:[function(t,e,n){var a=t(47),r=t(79),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{47:47,79:79}],57:[function(t,e,n){var a=t(47),r=t(5),i=t(30).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{30:30,47:47,5:5}],58:[function(t,e,n){"use strict";var a=t(59),r=t(34),i=t(3);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,p=!1;e>o;)(n[o]=arguments[o++])===s&&(p=!0);return function(){var a,i=this,o=arguments,u=o.length,c=0,l=0;if(!p&&!u)return r(t,n,i);if(a=n.slice(),p)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;u>l;)a.push(o[l++]);return r(t,a,i)}}},{3:3,34:34,59:59}],59:[function(t,e,n){e.exports=t(30)},{30:30}],60:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],61:[function(t,e,n){var a=t(62);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{62:62}],62:[function(t,e,n){var a=t(30),r=t(32),i=t(83)("src"),o="toString",s=Function[o],p=(""+s).split(o);t(17).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:p.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{17:17,30:30,32:32,83:83}],63:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],64:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],65:[function(t,e,n){var a=t(47).getDesc,r=t(39),i=t(5),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(18)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{18:18,39:39,47:47,5:5}],66:[function(t,e,n){"use strict";var a=t(30),r=t(47),i=t(20),o=t(84)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{20:20,30:30,47:47,84:84}],67:[function(t,e,n){var a=t(47).setDesc,r=t(31),i=t(84)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{31:31,47:47,84:84}],68:[function(t,e,n){var a=t(30),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{30:30}],69:[function(t,e,n){var a=t(5),r=t(3),i=t(84)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{3:3,5:5,84:84}],70:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],71:[function(t,e,n){var a=t(78),r=t(19);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{19:19,78:78}],72:[function(t,e,n){var a=t(40),r=t(19);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{19:19,40:40}],73:[function(t,e,n){var a=t(80),r=t(74),i=t(19);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c)return s;""==u&&(u=" ");var l=c-p,f=r.call(u,Math.ceil(l/u.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{19:19,74:74,80:80}],74:[function(t,e,n){"use strict";var a=t(78),r=t(19);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{19:19,78:78}],75:[function(t,e,n){var a=t(23),r=t(19),i=t(25),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),a(a.P+a.F*i(function(){return!!o[t]()||p[t]()!=p}),"String",n)},f=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{19:19,23:23,25:25}],76:[function(t,e,n){var a,r,i,o=t(18),s=t(34),p=t(33),u=t(21),c=t(30),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},d=function(t){delete v[t]},"process"==t(12)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in u("script")?function(t){p.appendChild(u("script"))[g]=function(){p.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{12:12,18:18,21:21,30:30,33:33,34:34}],77:[function(t,e,n){var a=t(78),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{78:78}],78:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],79:[function(t,e,n){var a=t(35),r=t(19);e.exports=function(t){return a(r(t))}},{19:19,35:35}],80:[function(t,e,n){var a=t(78),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{78:78}],81:[function(t,e,n){var a=t(19);e.exports=function(t){return Object(a(t))}},{19:19}],82:[function(t,e,n){var a=t(39);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{39:39}],83:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],84:[function(t,e,n){var a=t(68)("wks"),r=t(83),i=t(30).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{30:30,68:68,83:83}],85:[function(t,e,n){var a=t(11),r=t(84)("iterator"),i=t(46);e.exports=t(17).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{11:11,17:17,46:46,84:84}],86:[function(t,e,n){"use strict";var a,r=t(47),i=t(23),o=t(20),s=t(60),p=t(33),u=t(21),c=t(31),l=t(12),f=t(34),d=t(25),h=t(5),m=t(3),v=t(39),g=t(81),b=t(79),y=t(78),_=t(77),x=t(80),w=t(35),k=t(83)("__proto__"),P=t(9),C=t(8)(!1),E=Object.prototype,S=Array.prototype,A=S.slice,O=S.join,T=r.setDesc,M=r.getDesc,R=r.setDescs,j={};o||(a=!d(function(){return 7!=T(u("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return M(t,e)}catch(n){}return c(t,e)?s(!E.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=R=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:R});var L="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),N=L.concat("length","prototype"),D=L.length,F=function(){var t,e=u("iframe"),n=D,a=">";for(e.style.display="none",p.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
- + + {{#if data.restoring}} diff --git a/tgui/src/interfaces/identification_computer.ract b/tgui/src/interfaces/ntos_card.ract similarity index 87% rename from tgui/src/interfaces/identification_computer.ract rename to tgui/src/interfaces/ntos_card.ract index d2a08639ac..582737a8a6 100644 --- a/tgui/src/interfaces/identification_computer.ract +++ b/tgui/src/interfaces/ntos_card.ract @@ -1,37 +1,5 @@ -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
+ + {{#if data.have_id_slot}} Access Modification @@ -151,12 +119,14 @@
- + + @@ -210,10 +180,9 @@ {{#if data.centcom_access}} - + diff --git a/tgui/src/interfaces/laptop_configuration.ract b/tgui/src/interfaces/ntos_configuration.ract similarity index 50% rename from tgui/src/interfaces/laptop_configuration.ract rename to tgui/src/interfaces/ntos_configuration.ract index 71a8c2d5b9..30c6a4166c 100644 --- a/tgui/src/interfaces/laptop_configuration.ract +++ b/tgui/src/interfaces/ntos_configuration.ract @@ -1,4 +1,3 @@ - -
-
-
CommandCommand + Captain +
Special - Captain Custom
CentComCentcom {{#each data.centcom_jobs}} - {{display_name}} {{/each}}
- {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
+ + + Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device.
+ + {{data.power_usage}}W + + {{#if data.battery}} Active @@ -64,41 +36,32 @@ Not Available {{/if}} - - - {{data.power_usage}}W - - {{Math.round(adata.disk_used)}}GQ/{{adata.disk_size}}GQ + {{Math.round(adata.disk_used)}}GQ / {{adata.disk_size}}GQ - {{#each data.hardware}} +
{{desc}}
- {{desc}}
- + + {{enabled ? "Enabled" : "Disabled"}} + + - {{enabled ? "Enabled" : "Disabled"}} - - - - {{powerusage}}W - - {{#if !critical}} - - - {{enabled ? "On" : "Off"}} - + {{#if powerusage}} + + {{powerusage}}W {{/if}} -

+
+
{{/each}}
\ No newline at end of file diff --git a/tgui/src/interfaces/file_manager.ract b/tgui/src/interfaces/ntos_file_manager.ract similarity index 71% rename from tgui/src/interfaces/file_manager.ract rename to tgui/src/interfaces/ntos_file_manager.ract index 8f75b5a623..efc3b15cb3 100644 --- a/tgui/src/interfaces/file_manager.ract +++ b/tgui/src/interfaces/ntos_file_manager.ract @@ -1,41 +1,8 @@ + + -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
- {{#if data.error}}

An error has occurred and this program can not continue.

Additional information: {{data.error}}
diff --git a/tgui/src/interfaces/ntos_main.ract b/tgui/src/interfaces/ntos_main.ract new file mode 100644 index 0000000000..fcaf513526 --- /dev/null +++ b/tgui/src/interfaces/ntos_main.ract @@ -0,0 +1,14 @@ + + + + + No program loaded. Please select program from list below. + + {{#each data.programs}} +
+ {{desc}} + + + {{/each}} +
+
\ No newline at end of file diff --git a/tgui/src/interfaces/ntnet_chat.ract b/tgui/src/interfaces/ntos_net_chat.ract similarity index 67% rename from tgui/src/interfaces/ntnet_chat.ract rename to tgui/src/interfaces/ntos_net_chat.ract index 03be35d39d..7ea9055a4c 100644 --- a/tgui/src/interfaces/ntnet_chat.ract +++ b/tgui/src/interfaces/ntos_net_chat.ract @@ -1,38 +1,6 @@ + + -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
{{#if data.adminmode}}

ADMINISTRATIVE MODE

diff --git a/tgui/src/interfaces/ntos_net_dos.ract b/tgui/src/interfaces/ntos_net_dos.ract new file mode 100644 index 0000000000..c9505b4e01 --- /dev/null +++ b/tgui/src/interfaces/ntos_net_dos.ract @@ -0,0 +1,26 @@ + + + + + {{#if data.error}} + ##SYSTEM ERROR: {{data.error}}RESET + {{elseif data.target}} + ##DoS traffic generator active. Tx: {{data.speed}}GQ/s
+ {{#each data.dos_strings}} + {{nums}}
+ {{/each}} + ABORT + {{else}} + ##DoS traffic generator ready. Select target device.
+ {{#if data.focus}} + Targeted device ID: {{data.focus}} + {{else}} + Targeted device ID: None + {{/if}} + EXECUTE
+ Detected devices on network:
+ {{#each data.relays}} + {{id}} + {{/each}} + {{/if}} +
diff --git a/tgui/src/interfaces/ntnet_downloader.ract b/tgui/src/interfaces/ntos_net_downloader.ract similarity index 50% rename from tgui/src/interfaces/ntnet_downloader.ract rename to tgui/src/interfaces/ntos_net_downloader.ract index 4adab772be..884222fe4f 100644 --- a/tgui/src/interfaces/ntnet_downloader.ract +++ b/tgui/src/interfaces/ntos_net_downloader.ract @@ -1,38 +1,5 @@ - -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
+ + Welcome to software download utility. Please select which software you wish to download.
@@ -58,61 +25,62 @@ {{data.downloaddesc}} - {{data.downloadcompletion}}GQ / {{data.downloadsize}}GQ + {{data.downloadsize}}GQ {{data.downloadspeed}} GQ/s - {{Math.round(adata.downloadcompletion)}}/{{adata.downloadsize}} + {{Math.round(adata.downloadcompletion)}}GQ / {{adata.downloadsize}}GQ
{{/if}} {{/if}} {{#if !data.downloadname}} {{#if !data.error}} - - - {{Math.round(adata.disk_used)}}GQ/{{adata.disk_size}}GQ + + + {{Math.round(adata.disk_used)}}GQ / {{adata.disk_size}}GQ - {{#each data.downloadable_programs}} - - {{filename}} ({{size}} GQ) - - - {{filedesc}} - - - {{fileinfo}} - - - {{compatibility}} - - - - DOWNLOAD - - - {{/each}} - {{#if data.hackedavailable}} - - Please note that NanoTrasen does not recommend download of software from non-official servers. - {{#each data.hacked_programs}} + + + {{#each data.downloadable_programs}} + +
{{fileinfo}}
+ {{filename}} ({{size}} GQ) - - {{filedesc}} - - - {{fileinfo}} + + {{compatibility}} - + + DOWNLOAD + +
+
+ {{/each}} +
+ + {{#if data.hackedavailable}} + + Please note that NanoTrasen does not recommend download of software from non-official servers. + {{#each data.hacked_programs}} + +
{{fileinfo}}
+ + + {{filename}} ({{size}} GQ) + + + {{compatibility}} + DOWNLOAD -
+ +
{{/each}}
{{/if}} diff --git a/tgui/src/interfaces/ntnet_monitor.ract b/tgui/src/interfaces/ntos_net_monitor.ract similarity index 72% rename from tgui/src/interfaces/ntnet_monitor.ract rename to tgui/src/interfaces/ntos_net_monitor.ract index 67943650af..0aeaba6c34 100644 --- a/tgui/src/interfaces/ntnet_monitor.ract +++ b/tgui/src/interfaces/ntos_net_monitor.ract @@ -1,40 +1,7 @@ - + + -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
diff --git a/tgui/src/interfaces/ntnet_transfer.ract b/tgui/src/interfaces/ntos_net_transfer.ract similarity index 72% rename from tgui/src/interfaces/ntnet_transfer.ract rename to tgui/src/interfaces/ntos_net_transfer.ract index ff39f009f9..8686952222 100644 --- a/tgui/src/interfaces/ntnet_transfer.ract +++ b/tgui/src/interfaces/ntos_net_transfer.ract @@ -1,41 +1,8 @@ + + -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
- {{#if data.error}}

An error has occurred during operation...

diff --git a/tgui/src/interfaces/power_monitor_prog.ract b/tgui/src/interfaces/ntos_power_monitor.ract similarity index 73% rename from tgui/src/interfaces/power_monitor_prog.ract rename to tgui/src/interfaces/ntos_power_monitor.ract index ba40f27ec0..a026b6a0ab 100644 --- a/tgui/src/interfaces/power_monitor_prog.ract +++ b/tgui/src/interfaces/ntos_power_monitor.ract @@ -39,40 +39,8 @@ } -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
+ + {{#if config.fancy}} diff --git a/tgui/src/interfaces/ntos_revelation.ract b/tgui/src/interfaces/ntos_revelation.ract new file mode 100644 index 0000000000..bae7800348 --- /dev/null +++ b/tgui/src/interfaces/ntos_revelation.ract @@ -0,0 +1,27 @@ + + + + +
+
+ Payload status: +
+
+ {{#if data.armed}} + ARMED + {{else}} + DISARMED + {{/if}} +
+
+ Controls: +
+
+ +
OBFUSCATE PROGRAM NAME +
{{data.armed ? "DISARM" : "ARM"}} + ACTIVATE +
+
+
+
\ No newline at end of file diff --git a/tgui/src/interfaces/ntos_station_alert.ract b/tgui/src/interfaces/ntos_station_alert.ract new file mode 100644 index 0000000000..3b74ee0509 --- /dev/null +++ b/tgui/src/interfaces/ntos_station_alert.ract @@ -0,0 +1,14 @@ + + + +{{#each data.alarms:class}} + +
    + {{#each .}} +
  • {{.}}
  • + {{else}} +
  • System Nominal
  • + {{/each}} +
+
+{{/each}} \ No newline at end of file diff --git a/tgui/src/interfaces/ntosheader.ract b/tgui/src/interfaces/ntosheader.ract new file mode 100644 index 0000000000..4468f1722a --- /dev/null +++ b/tgui/src/interfaces/ntosheader.ract @@ -0,0 +1,30 @@ +
+ + {{#if data.PC_batteryicon && data.PC_showbatteryicon}} +
+ {{/if}} + {{#if data.PC_batterypercent && data.PC_showbatteryicon}} + {{data.PC_batterypercent}} + {{/if}} + {{#if data.PC_ntneticon}} + + {{/if}} + {{#if data.PC_apclinkicon}} + + {{/if}} + {{#if data.PC_stationtime}} + {{data.PC_stationtime}} + {{/if}} + {{#each data.PC_programheaders}} + + {{/each}} +
+
+
+ Shutdown + {{#if data.PC_showexitprogram}} + EXIT PROGRAM + Minimize Program + {{/if}} +
+
\ No newline at end of file diff --git a/tgui/src/interfaces/revelation.ract b/tgui/src/interfaces/revelation.ract deleted file mode 100644 index d4bbd89b40..0000000000 --- a/tgui/src/interfaces/revelation.ract +++ /dev/null @@ -1,60 +0,0 @@ - -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
- - -
-
- Payload status: -
-
- {{#if data.armed}} - ARMED - {{else}} - DISARMED - {{/if}} -
-
- Controls: -
-
- -
OBFUSCATE PROGRAM NAME -
{{data.armed ? "DISARM" : "ARM"}} - ACTIVATE -
-
-
-
\ No newline at end of file diff --git a/tgui/src/interfaces/station_alert_prog.ract b/tgui/src/interfaces/station_alert_prog.ract deleted file mode 100644 index 5ba78cdb91..0000000000 --- a/tgui/src/interfaces/station_alert_prog.ract +++ /dev/null @@ -1,47 +0,0 @@ - -
-
- - {{#if data.PC_batteryicon && data.PC_showbatteryicon}} -
- {{/if}} - {{#if data.PC_batterypercent && data.PC_showbatteryicon}} - {{data.PC_batterypercent}} - {{/if}} - {{#if data.PC_ntneticon}} - - {{/if}} - {{#if data.PC_apclinkicon}} - - {{/if}} - {{#if data.PC_stationtime}} - {{data.PC_stationtime}} - {{/if}} - {{#each data.PC_programheaders}} - - {{/each}} -
-
-
-
- -
Shutdown - {{#if data.PC_showexitprogram}} - EXIT PROGRAM - Minimize Program - {{/if}} -
-
-
- -{{#each data.alarms:class}} - -
    - {{#each .}} -
  • {{.}}
  • - {{else}} -
  • System Nominal
  • - {{/each}} -
-
-{{/each}} \ No newline at end of file diff --git a/tools/travis/build_byond.sh b/tools/travis/build_byond.sh index 54add5c78d..a26fb14509 100755 --- a/tools/travis/build_byond.sh +++ b/tools/travis/build_byond.sh @@ -9,7 +9,7 @@ if [ "$BUILD_TOOLS" = false ]; then echo "step_[xy] variables detected in maps, please remove them." exit 1 fi; - if grep '/turf\s*[,\){]' _maps/**/*.dmm; then + if grep '\W\/turf\s*[,\){]' _maps/**/*.dmm; then echo "base /turf path use detected in maps, please replace with proper paths." exit 1 fi; diff --git a/useless.txt b/useless.txt deleted file mode 100644 index a266fc16c1..0000000000 --- a/useless.txt +++ /dev/null @@ -1 +0,0 @@ -no, really \ No newline at end of file