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/tgstation_schema.sql b/SQL/tgstation_schema.sql index 0d0817bf1f..73e2d465f3 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -1,373 +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` ( - `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', +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 */; + 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/_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 1edf7431b1..0df3264dce 100644 --- a/_maps/map_files/Cerestation/cerestation.dmm +++ b/_maps/map_files/Cerestation/cerestation.dmm @@ -1073,23 +1073,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 +1274,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 +1285,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 +1295,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 +1305,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 +1339,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 +1361,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 +1375,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 +1404,7 @@ dir = 5 }, /area/shuttle/syndicate) -"acZ" = ( +"acY" = ( /obj/structure/table, /obj/item/weapon/stock_parts/cell/high{ pixel_x = -3; @@ -1419,7 +1413,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 +1423,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 +1443,7 @@ }, /turf/open/floor/plasteel/black, /area/shuttle/syndicate) -"add" = ( +"adc" = ( /obj/structure/table, /obj/item/weapon/weldingtool/largetank{ pixel_y = 3 @@ -1457,35 +1451,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 +1469,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 +1481,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 +1489,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 +1497,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 +1507,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 +1521,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 +1539,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 +1570,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 +1586,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 +1596,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 +1609,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 +1619,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 +1645,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 +1657,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 +1673,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 +1689,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 +1735,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 +1753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"adU" = ( +"adK" = ( /obj/machinery/announcement_system, /obj/machinery/light{ dir = 1 @@ -1857,7 +1762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"adV" = ( +"adL" = ( /obj/machinery/camera{ c_tag = "AI Hallway"; dir = 5; @@ -1868,7 +1773,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 +1785,7 @@ dir = 5 }, /area/shuttle/syndicate) -"adX" = ( +"adN" = ( /obj/machinery/door/window{ dir = 8; name = "Tool Storage"; @@ -1888,16 +1793,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 +1813,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; @@ -1927,7 +1832,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aec" = ( +"adS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -1935,7 +1840,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, @@ -1956,7 +1861,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aee" = ( +"adU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -1964,12 +1869,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 }, @@ -1978,36 +1883,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; @@ -2018,7 +1923,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aen" = ( +"aed" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -2026,7 +1931,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aeo" = ( +"aee" = ( /obj/machinery/computer/telecomms/server{ network = "tcommsat" }, @@ -2034,7 +1939,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aep" = ( +"aef" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2047,19 +1952,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 }, @@ -2070,7 +1975,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aet" = ( +"aej" = ( /obj/machinery/door/window{ dir = 1; name = "Surgery"; @@ -2080,7 +1985,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aeu" = ( +"aek" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -2088,7 +1993,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aev" = ( +"ael" = ( /obj/structure/table, /obj/structure/window/reinforced{ dir = 8 @@ -2106,7 +2011,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aew" = ( +"aem" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular{ pixel_x = 3; @@ -2121,7 +2026,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aex" = ( +"aen" = ( /obj/structure/table, /obj/item/device/sbeacondrop/bomb{ pixel_y = 5 @@ -2129,7 +2034,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; @@ -2140,33 +2045,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; @@ -2185,12 +2076,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; @@ -2232,7 +2123,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aeF" = ( +"aeu" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -2240,26 +2131,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; @@ -2269,7 +2160,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeK" = ( +"aez" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2280,7 +2171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"aeL" = ( +"aeA" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -2290,12 +2181,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{ @@ -2305,7 +2196,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"aeO" = ( +"aeD" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -2322,7 +2213,7 @@ dir = 5 }, /area/ai_monitored/turret_protected/ai) -"aeP" = ( +"aeE" = ( /obj/structure/table, /obj/item/weapon/surgicaldrill, /obj/item/weapon/circular_saw, @@ -2334,7 +2225,7 @@ dir = 5 }, /area/shuttle/syndicate) -"aeQ" = ( +"aeF" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -2348,12 +2239,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; @@ -2362,24 +2253,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 }, @@ -2389,32 +2269,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; @@ -2430,7 +2285,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"aeZ" = ( +"aeL" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/bulletproof{ pixel_x = -3; @@ -2467,7 +2322,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" @@ -2476,7 +2331,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afb" = ( +"aeN" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -2485,18 +2340,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; @@ -2507,7 +2362,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" @@ -2516,7 +2371,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"afg" = ( +"aeS" = ( /obj/structure/table, /obj/item/weapon/cautery, /obj/item/weapon/scalpel, @@ -2524,14 +2379,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, @@ -2539,21 +2394,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 @@ -2566,13 +2421,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 @@ -2580,7 +2435,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 @@ -2588,17 +2443,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; @@ -2614,7 +2469,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, @@ -2629,13 +2484,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 @@ -2644,12 +2499,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 }, @@ -2664,7 +2519,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afy" = ( +"afk" = ( /obj/structure/disposaloutlet{ icon_state = "outlet"; dir = 1 @@ -2675,7 +2530,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"afz" = ( +"afl" = ( /obj/machinery/power/terminal{ dir = 4 }, @@ -2689,7 +2544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afA" = ( +"afm" = ( /obj/machinery/power/smes{ charge = 5e+006 }, @@ -2700,7 +2555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afB" = ( +"afn" = ( /obj/machinery/telecomms/hub/preset, /obj/structure/cable{ d1 = 4; @@ -2712,7 +2567,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afC" = ( +"afo" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -2733,7 +2588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"afD" = ( +"afp" = ( /obj/machinery/door/airlock/glass_engineering{ cyclelinkeddir = 4; name = "Server Room"; @@ -2750,7 +2605,7 @@ dir = 5 }, /area/tcommsat/computer) -"afE" = ( +"afq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2762,7 +2617,7 @@ dir = 5 }, /area/tcommsat/computer) -"afF" = ( +"afr" = ( /obj/machinery/door/airlock/glass_engineering{ cyclelinkeddir = 8; name = "Server Room"; @@ -2779,7 +2634,7 @@ dir = 5 }, /area/tcommsat/computer) -"afG" = ( +"afs" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -2792,36 +2647,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; @@ -2847,7 +2702,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"afN" = ( +"afz" = ( /obj/structure/rack, /obj/item/weapon/storage/box/teargas{ pixel_x = -3; @@ -2869,7 +2724,7 @@ dir = 8 }, /area/ai_monitored/security/armory) -"afO" = ( +"afA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -2877,7 +2732,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"afP" = ( +"afB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -2889,7 +2744,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; @@ -2899,17 +2754,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 }, @@ -2924,20 +2779,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{ @@ -2946,13 +2801,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; @@ -2970,7 +2825,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"afZ" = ( +"afL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -2978,7 +2833,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aga" = ( +"afM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -2991,7 +2846,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{ @@ -3001,7 +2856,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{ @@ -3011,7 +2866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agd" = ( +"afP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -3019,7 +2874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"age" = ( +"afQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -3030,7 +2885,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agf" = ( +"afR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -3046,7 +2901,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"; @@ -3059,7 +2914,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; @@ -3071,7 +2926,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agi" = ( +"afU" = ( /obj/machinery/light{ dir = 1 }, @@ -3081,7 +2936,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"agj" = ( +"afV" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-09" }, @@ -3091,14 +2946,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 @@ -3108,7 +2963,7 @@ icon_state = "diagonalWall3" }, /area/shuttle/syndicate) -"agm" = ( +"afY" = ( /turf/open/space, /obj/machinery/porta_turret/syndicate{ dir = 10 @@ -3117,14 +2972,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 @@ -3132,12 +2987,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 @@ -3146,25 +3001,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; @@ -3177,13 +3032,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{ @@ -3193,7 +3048,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"; @@ -3204,18 +3059,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 }, @@ -3230,7 +3085,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agC" = ( +"ago" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/cobweb, /obj/structure/reagent_dispensers/fueltank, @@ -3240,7 +3095,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agD" = ( +"agp" = ( /obj/machinery/light/small{ dir = 1 }, @@ -3251,7 +3106,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agE" = ( +"agq" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -3264,7 +3119,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agF" = ( +"agr" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3280,7 +3135,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agG" = ( +"ags" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3293,7 +3148,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agH" = ( +"agt" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3306,7 +3161,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agI" = ( +"agu" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3319,7 +3174,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agJ" = ( +"agv" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3332,7 +3187,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agK" = ( +"agw" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3347,7 +3202,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agL" = ( +"agx" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -3364,7 +3219,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agM" = ( +"agy" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -3377,7 +3232,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agN" = ( +"agz" = ( /obj/machinery/light/small{ dir = 1 }, @@ -3388,7 +3243,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agO" = ( +"agA" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -3401,7 +3256,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agP" = ( +"agB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3411,7 +3266,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agQ" = ( +"agC" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -3422,7 +3277,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agR" = ( +"agD" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -3433,7 +3288,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agS" = ( +"agE" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -3446,7 +3301,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agT" = ( +"agF" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -3457,7 +3312,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"agU" = ( +"agG" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/conveyor/auto{ dir = 6; @@ -3470,19 +3325,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; @@ -3492,7 +3347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agY" = ( +"agK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3504,7 +3359,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"agZ" = ( +"agL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3518,7 +3373,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aha" = ( +"agM" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -3537,7 +3392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahb" = ( +"agN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -3551,7 +3406,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahc" = ( +"agO" = ( /obj/machinery/door/airlock/engineering{ name = "Telecommunications"; req_access_txt = "61" @@ -3569,7 +3424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahd" = ( +"agP" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -3587,7 +3442,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahe" = ( +"agQ" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -3603,7 +3458,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 @@ -3614,7 +3469,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahg" = ( +"agS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -3636,7 +3491,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahh" = ( +"agT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -3646,7 +3501,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahi" = ( +"agU" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -3661,7 +3516,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ahj" = ( +"agV" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -3678,18 +3533,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" }, @@ -3697,7 +3552,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, @@ -3709,7 +3564,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" @@ -3726,7 +3581,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" @@ -3738,7 +3593,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"ahq" = ( +"ahc" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -3748,7 +3603,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ahr" = ( +"ahd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -3760,7 +3615,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahs" = ( +"ahe" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -3771,7 +3626,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aht" = ( +"ahf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3781,7 +3636,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahu" = ( +"ahg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3792,7 +3647,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahv" = ( +"ahh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -3803,7 +3658,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahw" = ( +"ahi" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -3814,7 +3669,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahx" = ( +"ahj" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -3826,7 +3681,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahy" = ( +"ahk" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" @@ -3837,7 +3692,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahz" = ( +"ahl" = ( /obj/structure/disposalpipe/junction, /obj/effect/landmark/blobstart, /turf/open/floor/plasteel/floorgrime{ @@ -3846,7 +3701,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahA" = ( +"ahm" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -3857,7 +3712,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahB" = ( +"ahn" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -3868,7 +3723,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahC" = ( +"aho" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -3881,7 +3736,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahD" = ( +"ahp" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -3892,7 +3747,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahE" = ( +"ahq" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -3904,7 +3759,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahF" = ( +"ahr" = ( /obj/machinery/light/small{ dir = 8 }, @@ -3915,7 +3770,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahG" = ( +"ahs" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -3923,7 +3778,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahH" = ( +"aht" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -3931,7 +3786,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ahI" = ( +"ahu" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 1 @@ -3942,37 +3797,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 @@ -3981,7 +3836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"ahP" = ( +"ahB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -3992,7 +3847,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" @@ -4010,7 +3865,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" @@ -4022,39 +3877,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{ @@ -4069,22 +3924,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{ @@ -4097,12 +3941,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; @@ -4112,7 +3956,7 @@ /area/mine/unexplored{ name = "Asteroid" }) -"aic" = ( +"ahN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -4125,7 +3969,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"; @@ -4133,24 +3977,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 }, @@ -4165,7 +3997,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aii" = ( +"ahR" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4176,7 +4008,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aij" = ( +"ahS" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4188,7 +4020,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aik" = ( +"ahT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4199,7 +4031,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ail" = ( +"ahU" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4215,7 +4047,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aim" = ( +"ahV" = ( /obj/structure/closet/emcloset, /obj/structure/sign/poster/random{ name = "random contraband poster"; @@ -4227,12 +4059,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 }, @@ -4240,31 +4072,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" }, @@ -4272,14 +4104,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{ @@ -4291,7 +4123,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aiw" = ( +"aif" = ( /obj/machinery/power/apc{ dir = 2; name = "Telecoms Control Room APC"; @@ -4302,7 +4134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aix" = ( +"aig" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -4316,7 +4148,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/computer) -"aiy" = ( +"aih" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -4335,7 +4167,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aiz" = ( +"aii" = ( /obj/machinery/light/small{ dir = 1 }, @@ -4350,7 +4182,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 @@ -4361,7 +4193,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 @@ -4373,16 +4205,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 @@ -4391,7 +4223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiE" = ( +"ain" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -4400,15 +4232,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 }, @@ -4416,14 +4248,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"; @@ -4437,7 +4269,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" @@ -4446,7 +4278,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" @@ -4463,7 +4295,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" @@ -4475,7 +4307,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, @@ -4497,7 +4329,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, @@ -4509,7 +4341,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aiO" = ( +"aix" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -4519,7 +4351,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"aiP" = ( +"aiy" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -4529,20 +4361,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"aiQ" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"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 @@ -4550,7 +4374,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiT" = ( +"aiB" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -4563,7 +4387,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{ @@ -4572,7 +4396,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiV" = ( +"aiD" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -4584,7 +4408,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiW" = ( +"aiE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4594,7 +4418,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aiX" = ( +"aiF" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -4605,18 +4429,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 @@ -4627,7 +4451,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajb" = ( +"aiJ" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -4639,7 +4463,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajc" = ( +"aiK" = ( /obj/machinery/conveyor/auto{ dir = 6; icon_state = "conveyor0"; @@ -4651,7 +4475,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajd" = ( +"aiL" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -4661,19 +4485,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; @@ -4692,7 +4516,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajh" = ( +"aiP" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -4703,7 +4527,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aji" = ( +"aiQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -4713,10 +4537,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" @@ -4725,7 +4549,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ajl" = ( +"aiT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -4733,7 +4557,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ajm" = ( +"aiU" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -4742,12 +4566,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{ @@ -4756,7 +4580,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 @@ -4764,7 +4588,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajq" = ( +"aiY" = ( /obj/machinery/light/small{ dir = 1 }, @@ -4776,7 +4600,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajr" = ( +"aiZ" = ( /obj/structure/table, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -4784,7 +4608,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, @@ -4794,13 +4618,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 }, @@ -4811,65 +4635,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; @@ -4884,7 +4698,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; @@ -4897,7 +4711,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"; @@ -4905,7 +4719,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajG" = ( +"ajn" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -4923,7 +4737,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajH" = ( +"ajo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -4933,7 +4747,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajI" = ( +"ajp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -4943,7 +4757,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"ajJ" = ( +"ajq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -4951,12 +4765,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ajK" = ( +"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, @@ -4966,7 +4780,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajM" = ( +"ajt" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; @@ -4978,20 +4792,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 }, @@ -5000,7 +4814,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajQ" = ( +"ajx" = ( /obj/machinery/light/small{ dir = 4 }, @@ -5011,7 +4825,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajR" = ( +"ajy" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -5024,7 +4838,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ajS" = ( +"ajz" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -5035,7 +4849,7 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"ajT" = ( +"ajA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5043,7 +4857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ajU" = ( +"ajB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5051,7 +4865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/tcommsat/server) -"ajV" = ( +"ajC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5061,7 +4875,7 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"ajW" = ( +"ajD" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5071,7 +4885,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajX" = ( +"ajE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5081,7 +4895,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajY" = ( +"ajF" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -5095,7 +4909,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"ajZ" = ( +"ajG" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -5109,7 +4923,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aka" = ( +"ajH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5119,7 +4933,7 @@ /area/mine/unexplored{ name = "AI Asteroid" }) -"akb" = ( +"ajI" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -5130,14 +4944,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" @@ -5146,7 +4960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ake" = ( +"ajL" = ( /obj/machinery/conveyor{ dir = 5; icon_state = "conveyor0"; @@ -5157,7 +4971,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akf" = ( +"ajM" = ( /obj/machinery/conveyor{ dir = 8; id = "CargoWaste" @@ -5166,7 +4980,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akg" = ( +"ajN" = ( /obj/machinery/conveyor{ dir = 8; id = "CargoWaste" @@ -5178,7 +4992,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akh" = ( +"ajO" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -5189,7 +5003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"aki" = ( +"ajP" = ( /obj/structure/disposalpipe/wrapsortjunction{ icon_state = "pipe-j1s"; dir = 8 @@ -5198,7 +5012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akj" = ( +"ajQ" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -5207,7 +5021,7 @@ }, /turf/open/floor/plating/airless, /area/quartermaster/sorting) -"akk" = ( +"ajR" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -5216,7 +5030,7 @@ }, /turf/open/floor/plating/airless, /area/space) -"akl" = ( +"ajS" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5225,7 +5039,7 @@ }, /turf/open/floor/plating, /area/space) -"akm" = ( +"ajT" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5236,7 +5050,7 @@ /obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/space) -"akn" = ( +"ajU" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -5244,7 +5058,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 @@ -5252,39 +5066,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"; @@ -5294,7 +5102,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akv" = ( +"akb" = ( /obj/machinery/light{ dir = 8 }, @@ -5302,12 +5110,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; @@ -5319,7 +5127,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"; @@ -5327,7 +5135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akz" = ( +"akf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -5339,7 +5147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akA" = ( +"akg" = ( /obj/structure/closet/secure_closet/brig, /obj/machinery/light{ dir = 4; @@ -5349,7 +5157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akB" = ( +"akh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -5365,7 +5173,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"akC" = ( +"aki" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 1; @@ -5376,7 +5184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"akD" = ( +"akj" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -5385,7 +5193,7 @@ name = "ditch" }, /area/security/transfer) -"akE" = ( +"akk" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; @@ -5397,19 +5205,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" @@ -5420,21 +5228,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" @@ -5456,11 +5264,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 }, @@ -5473,13 +5277,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 }, @@ -5499,7 +5307,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akN" = ( +"akt" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5512,7 +5320,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"akO" = ( +"aku" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -5525,24 +5333,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" @@ -5559,12 +5367,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"; @@ -5575,7 +5383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akT" = ( +"akz" = ( /obj/machinery/conveyor{ dir = 4; id = "CargoWaste" @@ -5585,7 +5393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akU" = ( +"akA" = ( /obj/machinery/conveyor{ dir = 4; id = "CargoWaste" @@ -5594,7 +5402,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akV" = ( +"akB" = ( /obj/machinery/mineral/stacking_machine{ input_dir = 8; output_dir = 2 @@ -5603,7 +5411,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"akW" = ( +"akC" = ( /obj/machinery/mineral/stacking_unit_console{ dir = 2; machinedir = 8 @@ -5612,21 +5420,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 }, @@ -5636,7 +5444,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alb" = ( +"akH" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 4 @@ -5647,7 +5455,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 @@ -5655,7 +5463,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ald" = ( +"akJ" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 8 @@ -5666,7 +5474,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{ @@ -5675,7 +5483,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alf" = ( +"akL" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -5684,46 +5492,46 @@ 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; @@ -5739,7 +5547,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alm" = ( +"akS" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -5758,13 +5566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aln" = ( -/obj/structure/mineral_door/iron{ - name = "Transfer Center" - }, -/turf/open/floor/plating/asteroid, -/area/security/transfer) -"alo" = ( +"akT" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -5773,7 +5575,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alp" = ( +"akU" = ( /obj/structure/curtain, /obj/machinery/shower{ pixel_y = 24 @@ -5782,7 +5584,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alq" = ( +"akV" = ( /obj/structure/curtain, /obj/machinery/shower{ pixel_y = 24 @@ -5792,7 +5594,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 @@ -5803,7 +5605,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"als" = ( +"akX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -5817,7 +5619,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"; @@ -5827,7 +5629,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"alu" = ( +"akZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -5837,7 +5639,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 @@ -5848,7 +5650,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{ @@ -5857,12 +5659,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 }, @@ -5870,7 +5672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alz" = ( +"ale" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -5879,7 +5681,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alA" = ( +"alf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -5890,7 +5692,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 @@ -5899,7 +5701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"alC" = ( +"alh" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -5907,40 +5709,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"; @@ -5952,7 +5754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alK" = ( +"alp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -5963,7 +5765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"alL" = ( +"alq" = ( /obj/machinery/light/small{ dir = 8 }, @@ -5975,7 +5777,7 @@ name = "ditch" }, /area/security/transfer) -"alM" = ( +"alr" = ( /obj/item/weapon/shovel, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -5984,7 +5786,7 @@ name = "ditch" }, /area/security/transfer) -"alN" = ( +"als" = ( /obj/item/weapon/ore/glass, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -5993,7 +5795,7 @@ name = "ditch" }, /area/security/transfer) -"alO" = ( +"alt" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -6001,7 +5803,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alP" = ( +"alu" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/emergency, /obj/item/weapon/shovel, @@ -6012,7 +5814,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 @@ -6020,7 +5822,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alR" = ( +"alw" = ( /obj/machinery/light/small{ dir = 1 }, @@ -6028,7 +5830,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 @@ -6036,7 +5838,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{ @@ -6045,7 +5847,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"alU" = ( +"alz" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin, /obj/item/weapon/stamp/captain, @@ -6053,7 +5855,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{ @@ -6063,7 +5865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alW" = ( +"alB" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -6074,7 +5876,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"alX" = ( +"alC" = ( /obj/item/weapon/storage/secure/safe{ pixel_y = 32 }, @@ -6082,12 +5884,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; @@ -6101,13 +5903,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 }, @@ -6117,21 +5919,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 @@ -6139,13 +5941,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 @@ -6154,7 +5956,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amh" = ( +"alM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6162,7 +5964,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ami" = ( +"alN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6176,7 +5978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amj" = ( +"alO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -6184,7 +5986,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; @@ -6194,7 +5996,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"aml" = ( +"alQ" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -6205,7 +6007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"amm" = ( +"alR" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 4"; @@ -6217,7 +6019,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amn" = ( +"alS" = ( /obj/machinery/flasher{ id = "Cell 4"; pixel_x = 0; @@ -6227,7 +6029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amo" = ( +"alT" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -6236,7 +6038,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{ @@ -6250,7 +6052,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amq" = ( +"alV" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -6289,7 +6091,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 @@ -6303,7 +6105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ams" = ( +"alX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6316,7 +6118,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amt" = ( +"alY" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -6334,7 +6136,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amu" = ( +"alZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -6352,7 +6154,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amv" = ( +"ama" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -6367,7 +6169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amw" = ( +"amb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -6383,7 +6185,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amx" = ( +"amc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -6401,7 +6203,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amy" = ( +"amd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -6414,7 +6216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amz" = ( +"ame" = ( /obj/machinery/firealarm{ pixel_y = 24 }, @@ -6430,7 +6232,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amA" = ( +"amf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -6446,7 +6248,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amB" = ( +"amg" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -6465,7 +6267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amC" = ( +"amh" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -6479,7 +6281,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; @@ -6489,7 +6291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amE" = ( +"amj" = ( /obj/machinery/flasher{ id = "Cell 8"; pixel_x = 0; @@ -6499,7 +6301,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"amF" = ( +"amk" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 8"; @@ -6513,7 +6315,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"; @@ -6521,7 +6323,7 @@ name = "ditch" }, /area/security/transfer) -"amH" = ( +"amm" = ( /obj/machinery/light/small{ dir = 8 }, @@ -6536,7 +6338,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amI" = ( +"amn" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -6548,7 +6350,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amJ" = ( +"amo" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -6564,7 +6366,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amK" = ( +"amp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6579,7 +6381,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amL" = ( +"amq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6595,7 +6397,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amM" = ( +"amr" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -6611,7 +6413,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"amN" = ( +"ams" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -6627,14 +6429,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 }, @@ -6642,18 +6444,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" }, @@ -6661,18 +6463,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" }, @@ -6680,7 +6482,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"amW" = ( +"amB" = ( /obj/machinery/button/door{ id = "bc"; name = "Privacy Bolts"; @@ -6698,14 +6500,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"; @@ -6721,7 +6523,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; @@ -6740,7 +6542,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"; @@ -6755,7 +6557,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 @@ -6763,7 +6565,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anc" = ( +"amH" = ( /obj/machinery/light{ dir = 4 }, @@ -6773,12 +6575,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" @@ -6787,7 +6589,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, @@ -6798,7 +6600,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"ang" = ( +"amL" = ( /obj/structure/table, /obj/item/device/destTagger, /obj/item/stack/packageWrap, @@ -6807,37 +6609,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 }, @@ -6846,12 +6648,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"; @@ -6863,7 +6665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"anp" = ( +"amU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -6874,25 +6676,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"; @@ -6900,7 +6702,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"; @@ -6912,13 +6714,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 }, @@ -6927,7 +6729,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; @@ -6936,7 +6738,7 @@ name = "ditch" }, /area/security/transfer) -"any" = ( +"and" = ( /obj/structure/disposalpipe/sortjunction{ name = "disposal pipe - Custodials"; sortType = 22 @@ -6947,7 +6749,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anz" = ( +"ane" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -6963,7 +6765,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anA" = ( +"anf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -6979,7 +6781,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anB" = ( +"ang" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -7000,7 +6802,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anC" = ( +"anh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -7012,7 +6814,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"anD" = ( +"ani" = ( /obj/machinery/power/apc{ dir = 4; name = "Captain's Private Quarters APC"; @@ -7032,7 +6834,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, @@ -7040,7 +6842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anF" = ( +"ank" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -7048,14 +6850,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 @@ -7064,7 +6866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"anI" = ( +"ann" = ( /obj/docking_port/stationary/random{ dir = 1; id = "pod_lavaland1"; @@ -7072,7 +6874,7 @@ }, /turf/open/space, /area/space) -"anJ" = ( +"ano" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -7089,7 +6891,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anK" = ( +"anp" = ( /obj/machinery/ai_status_display{ pixel_x = 32 }, @@ -7099,7 +6901,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anL" = ( +"anq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -7110,7 +6912,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"anM" = ( +"anr" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -7126,19 +6928,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" @@ -7148,7 +6950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"anQ" = ( +"anv" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -7157,22 +6959,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 @@ -7181,7 +6968,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"anU" = ( +"anx" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -7190,18 +6977,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, @@ -7209,7 +6996,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; @@ -7219,7 +7006,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, @@ -7227,7 +7014,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" @@ -7236,7 +7023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aob" = ( +"anE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -7247,7 +7034,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{ @@ -7261,7 +7048,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aod" = ( +"anG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7280,7 +7067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aoe" = ( +"anH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -7290,17 +7077,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, @@ -7316,7 +7103,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" @@ -7335,7 +7122,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" @@ -7349,7 +7136,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, @@ -7365,7 +7152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aol" = ( +"anO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -7375,7 +7162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aom" = ( +"anP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7394,7 +7181,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{ @@ -7408,7 +7195,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aoo" = ( +"anR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -7418,7 +7205,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" @@ -7427,7 +7214,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 @@ -7435,7 +7222,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aor" = ( +"anU" = ( /obj/machinery/light/small{ dir = 1 }, @@ -7448,18 +7235,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" @@ -7470,18 +7246,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 @@ -7492,7 +7257,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aow" = ( +"anX" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7508,7 +7273,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aox" = ( +"anY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -7521,7 +7286,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoy" = ( +"anZ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -7529,13 +7294,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 }, @@ -7543,7 +7308,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{ @@ -7554,7 +7319,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoC" = ( +"aod" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -7562,7 +7327,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 @@ -7571,7 +7336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoE" = ( +"aof" = ( /obj/machinery/light/small{ dir = 1 }, @@ -7583,7 +7348,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoF" = ( +"aog" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -7599,7 +7364,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" @@ -7614,7 +7379,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoH" = ( +"aoi" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -7627,7 +7392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aoI" = ( +"aoj" = ( /obj/machinery/light{ dir = 1 }, @@ -7637,7 +7402,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{ @@ -7647,30 +7412,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 @@ -7688,7 +7453,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 @@ -7700,7 +7465,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"aoQ" = ( +"aor" = ( /obj/machinery/light/small{ dir = 8 }, @@ -7708,7 +7473,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoR" = ( +"aos" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -7720,7 +7485,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoS" = ( +"aot" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -7737,7 +7502,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aoT" = ( +"aou" = ( /obj/machinery/power/apc{ dir = 4; name = "Cargo APC"; @@ -7757,12 +7522,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 }, @@ -7771,13 +7536,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 @@ -7786,7 +7551,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, @@ -7794,10 +7559,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" @@ -7806,7 +7571,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apb" = ( +"aoC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -7814,7 +7579,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apc" = ( +"aoD" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -7823,7 +7588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apd" = ( +"aoE" = ( /obj/machinery/light{ dir = 1 }, @@ -7831,7 +7596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"ape" = ( +"aoF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -7839,7 +7604,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"apf" = ( +"aoG" = ( /obj/machinery/door/poddoor/shutters{ id = "MiningWarehouse" }, @@ -7847,7 +7612,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apg" = ( +"aoH" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -7855,26 +7620,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"; @@ -7891,7 +7656,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apl" = ( +"aoM" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -7900,7 +7665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apm" = ( +"aoN" = ( /obj/machinery/power/apc{ dir = 8; name = "Brig Control APC"; @@ -7915,7 +7680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"apn" = ( +"aoO" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -7930,12 +7695,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; @@ -7961,7 +7726,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"apq" = ( +"aoR" = ( /obj/machinery/light{ dir = 8 }, @@ -7969,7 +7734,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"; @@ -7977,24 +7742,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; @@ -8015,7 +7763,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"apu" = ( +"aoU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -8027,12 +7775,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; @@ -8046,32 +7794,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; @@ -8081,13 +7829,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; @@ -8098,19 +7846,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 }, @@ -8118,18 +7866,18 @@ 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 }, @@ -8149,7 +7897,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) -"apK" = ( +"apk" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -8166,7 +7914,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apL" = ( +"apl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -8178,7 +7926,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apM" = ( +"apm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -8190,7 +7938,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"apN" = ( +"apn" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -8201,13 +7949,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; @@ -8220,22 +7968,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 @@ -8248,7 +7996,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apU" = ( +"apu" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; opened = 1 @@ -8257,13 +8005,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 }, @@ -8272,7 +8020,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"apX" = ( +"apx" = ( /obj/machinery/power/apc{ dir = 4; name = "Cell Block APC"; @@ -8289,7 +8037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apY" = ( +"apy" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 3"; @@ -8301,7 +8049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"apZ" = ( +"apz" = ( /obj/machinery/flasher{ id = "Cell 3"; pixel_x = 0; @@ -8311,7 +8059,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqa" = ( +"apA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8329,7 +8077,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqb" = ( +"apB" = ( /obj/structure/table, /obj/machinery/firealarm{ dir = 8; @@ -8345,7 +8093,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqc" = ( +"apC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8355,7 +8103,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqd" = ( +"apD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -8363,7 +8111,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; @@ -8373,7 +8121,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqf" = ( +"apF" = ( /obj/structure/table, /obj/machinery/recharger, /obj/machinery/newscaster/security_unit{ @@ -8383,7 +8131,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aqg" = ( +"apG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8401,7 +8149,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqh" = ( +"apH" = ( /obj/machinery/flasher{ id = "Cell 7"; pixel_x = 0; @@ -8411,7 +8159,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqi" = ( +"apI" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 7"; @@ -8424,7 +8172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aqj" = ( +"apJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8437,7 +8185,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqk" = ( +"apK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -8451,7 +8199,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aql" = ( +"apL" = ( /obj/machinery/power/apc{ dir = 2; name = "Dorm APC"; @@ -8467,7 +8215,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 @@ -8475,7 +8223,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqn" = ( +"apN" = ( /obj/machinery/light/small{ dir = 1 }, @@ -8483,21 +8231,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 }, @@ -8510,7 +8258,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, @@ -8518,7 +8266,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 @@ -8530,7 +8278,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqt" = ( +"apT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -8538,7 +8286,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqu" = ( +"apU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -8546,7 +8294,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqv" = ( +"apV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8554,7 +8302,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, @@ -8562,7 +8310,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, @@ -8570,14 +8318,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; @@ -8589,7 +8337,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqA" = ( +"aqa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -8597,7 +8345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqB" = ( +"aqb" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -8609,7 +8357,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{ @@ -8619,14 +8367,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 }, @@ -8634,7 +8382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aqF" = ( +"aqf" = ( /obj/structure/chair{ dir = 1 }, @@ -8646,7 +8394,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 @@ -8654,13 +8402,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 @@ -8672,7 +8420,7 @@ }, /turf/open/space, /area/space) -"aqJ" = ( +"aqj" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -8682,7 +8430,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 @@ -8690,7 +8438,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 @@ -8698,14 +8446,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; @@ -8718,7 +8466,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aqO" = ( +"aqo" = ( /obj/machinery/camera{ c_tag = "Cargo Western Loading Bay 2"; dir = 5; @@ -8729,13 +8477,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 }, @@ -8743,7 +8491,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aqR" = ( +"aqr" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" }, @@ -8751,7 +8499,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 @@ -8760,7 +8508,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"aqT" = ( +"aqt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8768,13 +8516,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"; @@ -8786,7 +8534,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, @@ -8802,22 +8550,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; @@ -8828,13 +8567,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 }, @@ -8842,13 +8581,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"; @@ -8860,12 +8599,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 @@ -8874,12 +8613,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, @@ -8887,7 +8626,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; @@ -8897,7 +8636,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, @@ -8905,7 +8644,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, @@ -8913,7 +8652,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; @@ -8925,7 +8664,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"arm" = ( +"aqL" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -8935,7 +8674,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"arn" = ( +"aqM" = ( /obj/machinery/computer/arcade, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -8944,7 +8683,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"aro" = ( +"aqN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -8952,7 +8691,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"arp" = ( +"aqO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -8961,7 +8700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"arq" = ( +"aqP" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -8970,7 +8709,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; @@ -8981,20 +8720,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" }, @@ -9008,7 +8747,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, @@ -9018,44 +8757,16 @@ /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/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"ary" = ( +"aqW" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"arz" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"arA" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Engineering Bridge" - }) -"arB" = ( +"aqX" = ( /obj/machinery/camera{ c_tag = "Core-Command-Cargo Bridge 4"; dir = 8; @@ -9065,12 +8776,12 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"arC" = ( +"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; @@ -9082,21 +8793,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" @@ -9105,7 +8816,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arH" = ( +"ard" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9118,7 +8829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arI" = ( +"are" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9127,7 +8838,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"arJ" = ( +"arf" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -9138,14 +8849,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"; @@ -9155,25 +8866,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; @@ -9192,14 +8903,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"; @@ -9211,12 +8922,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" @@ -9225,7 +8936,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"arU" = ( +"arq" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -9236,7 +8947,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, @@ -9262,7 +8973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arW" = ( +"ars" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -9273,7 +8984,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arX" = ( +"art" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -9283,7 +8994,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arY" = ( +"aru" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -9304,7 +9015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"arZ" = ( +"arv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -9315,7 +9026,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"asa" = ( +"arw" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 1; @@ -9348,7 +9059,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" @@ -9357,7 +9068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"asc" = ( +"ary" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -9373,7 +9084,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"asd" = ( +"arz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -9389,7 +9100,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ase" = ( +"arA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9397,7 +9108,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"asf" = ( +"arB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9410,7 +9121,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"asg" = ( +"arC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -9421,7 +9132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ash" = ( +"arD" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -9438,7 +9149,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"asi" = ( +"arE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9446,7 +9157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asj" = ( +"arF" = ( /obj/machinery/light_switch{ pixel_x = -25 }, @@ -9460,7 +9171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"ask" = ( +"arG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9471,7 +9182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asl" = ( +"arH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9482,7 +9193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asm" = ( +"arI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9498,7 +9209,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"asn" = ( +"arJ" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -9516,14 +9227,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 }, @@ -9531,7 +9242,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 @@ -9540,7 +9251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"asr" = ( +"arN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -9548,7 +9259,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, @@ -9556,7 +9267,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, @@ -9564,12 +9275,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" @@ -9578,20 +9289,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 }, @@ -9599,7 +9310,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; @@ -9614,7 +9325,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"asA" = ( +"arW" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -9625,7 +9336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asB" = ( +"arX" = ( /obj/machinery/conveyor_switch{ id = "QMLoad" }, @@ -9633,7 +9344,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asC" = ( +"arY" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Supply Dock Airlock"; @@ -9647,7 +9358,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asD" = ( +"arZ" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Supply Dock Airlock"; @@ -9661,7 +9372,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" @@ -9672,7 +9383,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"asF" = ( +"asb" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Supply Dock Airlock"; @@ -9682,7 +9393,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; @@ -9692,7 +9403,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 @@ -9701,7 +9412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"asI" = ( +"ase" = ( /obj/machinery/door/poddoor/shutters{ id = "MiningWarehouse" }, @@ -9710,7 +9421,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"asJ" = ( +"asf" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" }, @@ -9719,27 +9430,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 @@ -9749,14 +9460,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"; @@ -9773,7 +9484,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, @@ -9786,13 +9497,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 }, @@ -9800,13 +9511,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{ @@ -9815,24 +9526,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{ @@ -9841,7 +9535,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"asY" = ( +"ast" = ( /obj/structure/closet, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/sign/poster/random{ @@ -9857,7 +9551,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"asZ" = ( +"asu" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -9870,44 +9564,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" }, @@ -9918,12 +9605,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 }, @@ -9931,7 +9618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"atj" = ( +"asD" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -9940,7 +9627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"atk" = ( +"asE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -9954,7 +9641,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"atl" = ( +"asF" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/cmo, /obj/machinery/airalarm{ @@ -9972,7 +9659,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"atm" = ( +"asG" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -9982,7 +9669,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{ @@ -9991,7 +9678,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{ @@ -10000,20 +9687,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; @@ -10023,13 +9710,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 }, @@ -10038,18 +9725,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{ @@ -10058,7 +9745,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{ @@ -10067,7 +9754,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"aty" = ( +"asS" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -10077,7 +9764,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"atz" = ( +"asT" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/ce, /obj/machinery/airalarm{ @@ -10095,7 +9782,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"; @@ -10117,7 +9804,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; @@ -10129,18 +9816,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 @@ -10152,7 +9839,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"atF" = ( +"asZ" = ( /obj/machinery/holopad, /obj/machinery/button/door{ dir = 2; @@ -10171,7 +9858,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"atG" = ( +"ata" = ( /obj/machinery/button/door{ dir = 2; id = "QMLoaddoor2"; @@ -10187,14 +9874,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 @@ -10207,13 +9894,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 @@ -10225,13 +9912,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, @@ -10246,7 +9933,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, @@ -10254,7 +9941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"atO" = ( +"ati" = ( /obj/structure/table, /obj/machinery/light{ icon_state = "tube1"; @@ -10262,11 +9949,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; @@ -10274,12 +9961,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 @@ -10288,25 +9975,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"; @@ -10318,7 +10005,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"atX" = ( +"atr" = ( /obj/machinery/flasher{ id = "Cell 2"; pixel_x = 0; @@ -10328,7 +10015,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, @@ -10346,7 +10033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"atZ" = ( +"att" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -10357,7 +10044,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aua" = ( +"atu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10370,7 +10057,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aub" = ( +"atv" = ( /obj/structure/table, /obj/machinery/light, /obj/machinery/recharger, @@ -10378,7 +10065,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"auc" = ( +"atw" = ( /obj/machinery/flasher{ id = "Cell 6"; pixel_x = 0; @@ -10388,7 +10075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aud" = ( +"atx" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 6"; @@ -10401,7 +10088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aue" = ( +"aty" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -10413,7 +10100,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 @@ -10421,7 +10108,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aug" = ( +"atA" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -10430,7 +10117,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"auh" = ( +"atB" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -10443,21 +10130,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 }, @@ -10465,7 +10152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aul" = ( +"atF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10473,7 +10160,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aum" = ( +"atG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10484,7 +10171,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; @@ -10497,7 +10184,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"; @@ -10505,7 +10192,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"; @@ -10513,7 +10200,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" @@ -10533,7 +10220,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"aur" = ( +"atL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10552,7 +10239,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aus" = ( +"atM" = ( /obj/machinery/light/small{ dir = 4 }, @@ -10562,7 +10249,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aut" = ( +"atN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -10572,14 +10259,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 }, @@ -10589,7 +10276,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{ @@ -10598,13 +10285,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; @@ -10615,13 +10302,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{ @@ -10630,7 +10317,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"auB" = ( +"atV" = ( /obj/structure/chair{ dir = 1 }, @@ -10640,14 +10327,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 }, @@ -10660,7 +10347,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"auE" = ( +"atY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10673,14 +10360,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 }, @@ -10688,7 +10375,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"auH" = ( +"aub" = ( /obj/machinery/door/poddoor/shutters{ id = "CargoWarehouse" }, @@ -10696,7 +10383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"auI" = ( +"auc" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -10704,7 +10391,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"auJ" = ( +"aud" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; name = "Supply Dock Airlock"; @@ -10718,7 +10405,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"auK" = ( +"aue" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Supply Dock Airlock"; @@ -10732,7 +10419,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" @@ -10743,7 +10430,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"auM" = ( +"aug" = ( /obj/machinery/door/airlock/shuttle{ name = "Supply Shuttle Airlock"; req_access_txt = "31" @@ -10762,7 +10449,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"auN" = ( +"auh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ dir = 4; @@ -10772,13 +10459,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") }, @@ -10786,7 +10473,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, @@ -10795,7 +10482,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, @@ -10804,28 +10491,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" @@ -10834,7 +10521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"auX" = ( +"aur" = ( /obj/machinery/computer/security{ name = "Labor Camp Monitoring"; network = list("Labor") @@ -10847,7 +10534,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"auY" = ( +"aus" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10861,7 +10548,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 @@ -10869,13 +10556,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"; @@ -10887,7 +10574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"avc" = ( +"auw" = ( /obj/structure/closet/secure_closet/warden{ pixel_x = 0 }, @@ -10901,7 +10588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"avd" = ( +"aux" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10912,7 +10599,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{ @@ -10922,7 +10609,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"; @@ -10934,7 +10621,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 @@ -10942,7 +10629,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 @@ -10950,7 +10637,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avi" = ( +"auC" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -10959,7 +10646,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avj" = ( +"auD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -10975,7 +10662,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avk" = ( +"auE" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -10989,7 +10676,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"avl" = ( +"auF" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -10998,21 +10685,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"; @@ -11023,7 +10710,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{ @@ -11036,7 +10723,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{ @@ -11048,7 +10735,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{ @@ -11060,7 +10747,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_female) -"avs" = ( +"auM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -11078,7 +10765,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"avt" = ( +"auN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11088,7 +10775,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"avu" = ( +"auO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11098,7 +10785,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 @@ -11110,7 +10797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avw" = ( +"auQ" = ( /obj/structure/table/wood, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -11125,7 +10812,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avx" = ( +"auR" = ( /obj/structure/table/wood, /obj/machinery/vending/wallmed{ pixel_y = 32 @@ -11137,7 +10824,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avy" = ( +"auS" = ( /obj/structure/noticeboard{ pixel_y = 32 }, @@ -11147,7 +10834,7 @@ tag = "icon-darkblue (NORTHEAST)" }, /area/bridge) -"avz" = ( +"auT" = ( /obj/machinery/light/small{ dir = 1 }, @@ -11164,7 +10851,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; @@ -11174,7 +10861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avB" = ( +"auV" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -11183,7 +10870,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"; @@ -11195,7 +10882,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avD" = ( +"auX" = ( /obj/machinery/light/small{ dir = 1 }, @@ -11213,7 +10900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avE" = ( +"auY" = ( /obj/machinery/requests_console{ announcementConsole = 1; department = "Bridge"; @@ -11226,7 +10913,7 @@ dir = 9 }, /area/bridge) -"avF" = ( +"auZ" = ( /obj/machinery/camera{ c_tag = "Bridge Main 1" }, @@ -11237,7 +10924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avG" = ( +"ava" = ( /obj/structure/sign/pods{ pixel_y = 32 }, @@ -11248,7 +10935,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avH" = ( +"avb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -11259,7 +10946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"avI" = ( +"avc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11269,7 +10956,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"avJ" = ( +"avd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11279,7 +10966,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"avK" = ( +"ave" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -11297,7 +10984,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"avL" = ( +"avf" = ( /obj/machinery/power/apc{ dir = 4; name = "Cargo Warehouse APC"; @@ -11322,7 +11009,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avM" = ( +"avg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -11330,7 +11017,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avN" = ( +"avh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11341,7 +11028,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avO" = ( +"avi" = ( /obj/machinery/door/poddoor/shutters{ id = "CargoWarehouse" }, @@ -11352,7 +11039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"avP" = ( +"avj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11363,7 +11050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avQ" = ( +"avk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11373,14 +11060,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 }, @@ -11392,7 +11079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avT" = ( +"avn" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -11405,7 +11092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"avU" = ( +"avo" = ( /obj/machinery/conveyor{ dir = 4; id = "QMLoad" @@ -11416,7 +11103,7 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"avV" = ( +"avp" = ( /obj/structure/closet/secure_closet/miner, /obj/machinery/light{ icon_state = "tube1"; @@ -11426,19 +11113,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"; @@ -11448,7 +11135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"avZ" = ( +"avt" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Mining Dock Airlock"; @@ -11460,14 +11147,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; @@ -11491,15 +11178,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"; @@ -11508,7 +11195,7 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/space) -"awf" = ( +"avz" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -11517,7 +11204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"awg" = ( +"avA" = ( /obj/structure/chair{ dir = 1 }, @@ -11525,7 +11212,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{ @@ -11537,7 +11224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"awi" = ( +"avC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -11554,7 +11241,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awj" = ( +"avD" = ( /obj/machinery/door/airlock/maintenance{ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" @@ -11565,7 +11252,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awk" = ( +"avE" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -11576,12 +11263,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 @@ -11590,7 +11277,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 @@ -11599,7 +11286,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" @@ -11608,7 +11295,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" @@ -11633,7 +11320,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" @@ -11648,7 +11335,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, @@ -11665,7 +11352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"aws" = ( +"avM" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -11675,7 +11362,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" @@ -11684,7 +11371,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" @@ -11695,7 +11382,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awv" = ( +"avP" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -11713,52 +11400,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" @@ -11777,7 +11464,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"awE" = ( +"avY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -11798,7 +11485,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"awF" = ( +"avZ" = ( /obj/machinery/power/apc{ dir = 4; name = "Chief Medical Officer's Private Quarters APC"; @@ -11824,7 +11511,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 @@ -11832,7 +11519,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" @@ -11849,7 +11536,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; @@ -11861,7 +11548,7 @@ /area/medical/cmo{ name = "Chief Medical Officer's Private Quarters" }) -"awJ" = ( +"awd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11871,7 +11558,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" @@ -11885,25 +11572,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 @@ -11913,25 +11600,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; @@ -11942,14 +11629,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" @@ -11963,7 +11650,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awV" = ( +"awp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11973,7 +11660,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; @@ -11986,7 +11673,7 @@ /area/crew_quarters/chief{ name = "Chief Engineer's Private Quarters" }) -"awX" = ( +"awr" = ( /obj/structure/closet{ icon_door = "yellow"; name = "Chief Engineer's Uniform" @@ -12001,7 +11688,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 @@ -12009,31 +11696,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" @@ -12042,19 +11717,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; @@ -12062,13 +11737,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; @@ -12077,18 +11752,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{ @@ -12104,7 +11779,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axl" = ( +"awE" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12112,12 +11787,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 }, @@ -12125,7 +11800,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, @@ -12133,7 +11808,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"axp" = ( +"awI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12149,7 +11824,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axq" = ( +"awJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -12159,7 +11834,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axr" = ( +"awK" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -12168,19 +11843,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"; @@ -12197,7 +11872,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axv" = ( +"awO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -12208,7 +11883,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axw" = ( +"awP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12216,7 +11891,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axx" = ( +"awQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12225,7 +11900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axy" = ( +"awR" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12236,7 +11911,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 @@ -12245,7 +11920,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axA" = ( +"awT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12254,7 +11929,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axB" = ( +"awU" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -12265,7 +11940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axC" = ( +"awV" = ( /obj/machinery/door_timer{ id = "Cell 6"; name = "Cell 6"; @@ -12282,7 +11957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"axD" = ( +"awW" = ( /obj/machinery/light/small{ dir = 1 }, @@ -12294,7 +11969,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 @@ -12305,7 +11980,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"axF" = ( +"awY" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -12314,7 +11989,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"axG" = ( +"awZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -12322,18 +11997,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 }, @@ -12343,13 +12018,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 @@ -12360,26 +12035,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"; @@ -12390,7 +12065,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"axQ" = ( +"axj" = ( /obj/machinery/button/door{ id = "CargoWarehouse"; name = "Cargo Warehouse Shutters"; @@ -12400,7 +12075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axR" = ( +"axk" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; dir = 8; @@ -12416,11 +12091,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; @@ -12435,7 +12110,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axU" = ( +"axn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -12444,7 +12119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axV" = ( +"axo" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -12452,7 +12127,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"axW" = ( +"axp" = ( /obj/machinery/airalarm{ dir = 4; pixel_x = -23; @@ -12465,7 +12140,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"; @@ -12478,22 +12153,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"; @@ -12503,7 +12178,7 @@ }, /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) -"ayd" = ( +"axw" = ( /obj/machinery/mineral/labor_claim_console{ machinedir = 2; pixel_x = 30; @@ -12511,14 +12186,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"; @@ -12528,10 +12203,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"; @@ -12541,7 +12216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayi" = ( +"axB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12554,7 +12229,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayj" = ( +"axC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -12562,7 +12237,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayk" = ( +"axD" = ( /obj/machinery/door/airlock/security{ name = "Labor Shuttle"; req_access = null; @@ -12575,7 +12250,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"ayl" = ( +"axE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12591,14 +12266,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 @@ -12607,7 +12282,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"ayo" = ( +"axH" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -12616,7 +12291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"ayp" = ( +"axI" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 1"; @@ -12628,7 +12303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayq" = ( +"axJ" = ( /obj/machinery/flasher{ id = "Cell 1"; pixel_x = 0; @@ -12638,7 +12313,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayr" = ( +"axK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12659,7 +12334,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ays" = ( +"axL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12673,7 +12348,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayt" = ( +"axM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12686,7 +12361,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayu" = ( +"axN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12719,7 +12394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayv" = ( +"axO" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12737,7 +12412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayw" = ( +"axP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12754,7 +12429,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayx" = ( +"axQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -12775,7 +12450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayy" = ( +"axR" = ( /obj/machinery/flasher{ id = "Cell 5"; pixel_x = 0; @@ -12785,7 +12460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayz" = ( +"axS" = ( /obj/structure/bed, /obj/machinery/camera{ c_tag = "Brig Cell 5"; @@ -12799,7 +12474,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"ayA" = ( +"axT" = ( /obj/machinery/power/apc{ dir = 2; name = "Vault APC"; @@ -12818,7 +12493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"ayB" = ( +"axU" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12831,7 +12506,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayC" = ( +"axV" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -12849,7 +12524,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayD" = ( +"axW" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12867,7 +12542,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" @@ -12883,7 +12558,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayF" = ( +"axY" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -12898,7 +12573,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayG" = ( +"axZ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -12911,7 +12586,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"ayH" = ( +"aya" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -12920,14 +12595,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 }, @@ -12935,7 +12610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayK" = ( +"ayd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -12946,7 +12621,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayL" = ( +"aye" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -12955,7 +12630,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"ayM" = ( +"ayf" = ( /obj/machinery/light/small{ dir = 1 }, @@ -12963,14 +12638,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, @@ -12978,21 +12653,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{ @@ -13010,7 +12685,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"ayS" = ( +"ayl" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -13020,7 +12695,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{ @@ -13029,7 +12704,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, @@ -13039,14 +12714,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 }, @@ -13055,7 +12730,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"ayX" = ( +"ayq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -13063,7 +12738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"ayY" = ( +"ayr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -13073,7 +12748,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" @@ -13082,7 +12757,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, @@ -13094,14 +12769,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, @@ -13112,7 +12787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azd" = ( +"ayw" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -13121,7 +12796,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aze" = ( +"ayx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13129,7 +12804,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"azf" = ( +"ayy" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -13137,14 +12812,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{ @@ -13153,7 +12828,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{ @@ -13162,7 +12837,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azj" = ( +"ayC" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -13172,7 +12847,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"azk" = ( +"ayD" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/rd, /obj/machinery/airalarm{ @@ -13190,14 +12865,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{ @@ -13206,7 +12881,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azn" = ( +"ayG" = ( /obj/structure/closet, /obj/machinery/light/small{ dir = 1 @@ -13218,7 +12893,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azo" = ( +"ayH" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /turf/open/floor/plating{ @@ -13227,7 +12902,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azp" = ( +"ayI" = ( /obj/machinery/power/apc{ dir = 8; name = "Fore Asteroid Maintenance APC"; @@ -13249,7 +12924,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azq" = ( +"ayJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13267,13 +12942,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 @@ -13288,23 +12963,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; @@ -13315,14 +12981,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; @@ -13333,7 +12999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azy" = ( +"ayQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -13341,7 +13007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azz" = ( +"ayR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13353,7 +13019,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azA" = ( +"ayS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13364,7 +13030,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azB" = ( +"ayT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13376,7 +13042,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"azC" = ( +"ayU" = ( /obj/machinery/door/airlock/mining{ req_access_txt = "48" }, @@ -13390,7 +13056,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azD" = ( +"ayV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13402,7 +13068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azE" = ( +"ayW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13410,7 +13076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azF" = ( +"ayX" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -13418,7 +13084,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/miningdock) -"azG" = ( +"ayY" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -13432,7 +13098,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; @@ -13440,21 +13106,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 @@ -13466,7 +13132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"azL" = ( +"azd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13474,7 +13140,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, @@ -13485,7 +13151,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"azN" = ( +"azf" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13502,7 +13168,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"azO" = ( +"azg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -13518,27 +13184,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"; @@ -13550,7 +13216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"azT" = ( +"azl" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13560,13 +13226,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"; @@ -13585,7 +13251,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{ @@ -13595,7 +13261,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"; @@ -13607,12 +13273,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; @@ -13625,7 +13291,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAa" = ( +"azs" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -13641,7 +13307,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" @@ -13657,7 +13323,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAc" = ( +"azu" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -13673,7 +13339,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAd" = ( +"azv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -13703,7 +13369,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAe" = ( +"azw" = ( /obj/structure/disposalpipe/segment, /obj/structure/sign/map/left/ceres{ pixel_x = -32 @@ -13712,14 +13378,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 @@ -13729,7 +13395,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 @@ -13738,7 +13404,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAi" = ( +"azA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -13746,7 +13412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aAj" = ( +"azB" = ( /obj/machinery/light{ dir = 4 }, @@ -13755,12 +13421,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, @@ -13768,7 +13434,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, @@ -13776,7 +13442,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, @@ -13784,7 +13450,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 @@ -13798,7 +13464,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAp" = ( +"azH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13808,7 +13474,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAq" = ( +"azI" = ( /obj/structure/chair{ dir = 1 }, @@ -13821,7 +13487,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{ @@ -13833,7 +13499,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aAs" = ( +"azK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13843,7 +13509,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 @@ -13852,7 +13518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAu" = ( +"azM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13861,7 +13527,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAv" = ( +"azN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13872,7 +13538,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAw" = ( +"azO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13885,7 +13551,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aAx" = ( +"azP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13897,7 +13563,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)"; @@ -13906,13 +13572,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 }, @@ -13922,7 +13588,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{ @@ -13934,7 +13600,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAC" = ( +"azU" = ( /obj/structure/chair{ dir = 1 }, @@ -13947,7 +13613,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAD" = ( +"azV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -13957,7 +13623,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAE" = ( +"azW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -13972,7 +13638,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"; @@ -13999,7 +13665,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aAG" = ( +"azY" = ( /obj/structure/chair{ dir = 1 }, @@ -14009,7 +13675,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aAH" = ( +"azZ" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; @@ -14019,7 +13685,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/storage) -"aAI" = ( +"aAa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -14027,7 +13693,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" @@ -14039,13 +13705,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 }, @@ -14053,13 +13719,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; @@ -14074,23 +13740,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; @@ -14105,7 +13771,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"; @@ -14120,7 +13786,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aAT" = ( +"aAl" = ( /obj/machinery/disposal/bin, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -14132,12 +13798,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 @@ -14146,17 +13812,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; @@ -14164,18 +13830,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" @@ -14184,7 +13850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aBb" = ( +"aAt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14207,7 +13873,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBc" = ( +"aAu" = ( /obj/machinery/power/apc{ dir = 4; name = "Security Equipment APC"; @@ -14223,7 +13889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aBd" = ( +"aAv" = ( /obj/structure/table, /obj/machinery/recharger, /obj/machinery/camera{ @@ -14235,7 +13901,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, @@ -14243,7 +13909,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" @@ -14252,7 +13918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBg" = ( +"aAy" = ( /obj/machinery/door_timer{ id = "Cell 1"; name = "Cell 1"; @@ -14276,7 +13942,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBh" = ( +"aAz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -14284,14 +13950,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, @@ -14307,7 +13973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBk" = ( +"aAC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14331,7 +13997,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBl" = ( +"aAD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -14346,7 +14012,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, @@ -14362,7 +14028,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBn" = ( +"aAF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -14370,7 +14036,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aBo" = ( +"aAG" = ( /obj/machinery/door_timer{ id = "Cell 5"; name = "Cell 5"; @@ -14394,7 +14060,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" @@ -14403,19 +14069,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 }, @@ -14423,19 +14089,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 }, @@ -14446,7 +14112,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBw" = ( +"aAO" = ( /obj/structure/chair{ dir = 8 }, @@ -14454,7 +14120,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aBx" = ( +"aAP" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -14467,14 +14133,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; @@ -14487,7 +14153,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBA" = ( +"aAS" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -14499,7 +14165,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBB" = ( +"aAT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -14516,7 +14182,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBC" = ( +"aAU" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -14528,14 +14194,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 }, @@ -14543,7 +14209,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 @@ -14552,7 +14218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aBG" = ( +"aAY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14560,7 +14226,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBH" = ( +"aAZ" = ( /obj/machinery/light_switch{ pixel_x = -25 }, @@ -14573,7 +14239,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBI" = ( +"aBa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14583,7 +14249,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBJ" = ( +"aBb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14593,7 +14259,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBK" = ( +"aBc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14608,7 +14274,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aBL" = ( +"aBd" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -14625,7 +14291,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"; @@ -14640,14 +14306,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 }, @@ -14656,14 +14322,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 }, @@ -14672,7 +14338,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 @@ -14681,14 +14347,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"; @@ -14703,7 +14369,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aBU" = ( +"aBm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14719,7 +14385,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBV" = ( +"aBn" = ( /obj/structure/closet/crate, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, @@ -14729,7 +14395,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aBW" = ( +"aBo" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -14738,7 +14404,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{ @@ -14748,7 +14414,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, @@ -14757,7 +14423,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, @@ -14768,7 +14434,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCa" = ( +"aBs" = ( /obj/structure/chair{ dir = 8 }, @@ -14778,7 +14444,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aCb" = ( +"aBt" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -14786,7 +14452,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aCc" = ( +"aBu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14800,7 +14466,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 @@ -14808,14 +14474,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, @@ -14841,7 +14507,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"aCg" = ( +"aBy" = ( /obj/structure/sign/map/left/ceres{ pixel_x = -32 }, @@ -14849,7 +14515,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, @@ -14857,7 +14523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCi" = ( +"aBA" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -14865,7 +14531,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; @@ -14875,7 +14541,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, @@ -14883,7 +14549,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; @@ -14893,7 +14559,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; @@ -14903,7 +14569,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aCn" = ( +"aBF" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -14914,13 +14580,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; @@ -14934,7 +14600,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCq" = ( +"aBI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -14948,7 +14614,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCr" = ( +"aBJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -14960,7 +14626,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aCs" = ( +"aBK" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -14969,7 +14635,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aCt" = ( +"aBL" = ( /obj/structure/chair/stool, /obj/structure/disposalpipe/segment{ dir = 4 @@ -14978,7 +14644,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; @@ -14988,7 +14654,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aCv" = ( +"aBN" = ( /obj/machinery/door/airlock{ name = "Male Sleeping Quarters" }, @@ -14998,12 +14664,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 }, @@ -15011,7 +14677,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aCy" = ( +"aBQ" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -15020,7 +14686,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 @@ -15028,7 +14694,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 @@ -15036,7 +14702,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; @@ -15048,7 +14714,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCC" = ( +"aBU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15058,7 +14724,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" @@ -15072,7 +14738,7 @@ /area/security/hos{ name = "Head of Security's Private Quarters" }) -"aCE" = ( +"aBW" = ( /obj/machinery/camera{ c_tag = "Bridge Main 2"; dir = 1; @@ -15083,7 +14749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aCF" = ( +"aBX" = ( /obj/machinery/computer/crew, /obj/machinery/firealarm{ dir = 1; @@ -15093,13 +14759,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, @@ -15107,49 +14773,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" @@ -15163,7 +14829,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCQ" = ( +"aCi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15173,7 +14839,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; @@ -15186,7 +14852,7 @@ /area/crew_quarters/hor{ name = "Research Director's Private Quarters" }) -"aCS" = ( +"aCk" = ( /obj/structure/closet{ icon_door = "pink"; name = "Research Director's Uniform" @@ -15203,7 +14869,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 @@ -15211,7 +14877,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; @@ -15221,15 +14887,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 }, @@ -15237,7 +14895,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCX" = ( +"aCo" = ( /obj/machinery/light{ dir = 1 }, @@ -15248,7 +14906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCY" = ( +"aCp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15263,7 +14921,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aCZ" = ( +"aCq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15277,7 +14935,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDa" = ( +"aCr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -15285,7 +14943,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDb" = ( +"aCs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15294,7 +14952,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDc" = ( +"aCt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -15307,7 +14965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aDd" = ( +"aCu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -15315,20 +14973,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"; @@ -15348,11 +15006,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" @@ -15376,7 +15034,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/labor) -"aDj" = ( +"aCA" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Labor Camp Shuttle Airlock"; @@ -15385,7 +15043,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" @@ -15394,13 +15052,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"; @@ -15414,7 +15072,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aDn" = ( +"aCE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15430,7 +15088,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDo" = ( +"aCF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/button/door{ id = "GulagCivExit"; @@ -15444,7 +15102,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDp" = ( +"aCG" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_x = -32 }, @@ -15460,13 +15118,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 }, @@ -15474,7 +15132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDs" = ( +"aCJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15484,7 +15142,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, @@ -15503,7 +15161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aDu" = ( +"aCL" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -15513,7 +15171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDv" = ( +"aCM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15523,7 +15181,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDw" = ( +"aCN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15539,7 +15197,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDx" = ( +"aCO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -15553,14 +15211,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; @@ -15573,7 +15231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDA" = ( +"aCR" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -15587,7 +15245,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDB" = ( +"aCS" = ( /obj/machinery/camera{ c_tag = "Brig Hall East" }, @@ -15601,7 +15259,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDC" = ( +"aCT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15612,7 +15270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDD" = ( +"aCU" = ( /obj/machinery/door/airlock/security{ name = "Courtroom"; req_access = null; @@ -15625,7 +15283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aDE" = ( +"aCV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15633,7 +15291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDF" = ( +"aCW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15644,7 +15302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDG" = ( +"aCX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -15652,35 +15310,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"; @@ -15690,7 +15348,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aDN" = ( +"aDe" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -15706,7 +15364,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDO" = ( +"aDf" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -15723,7 +15381,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aDP" = ( +"aDg" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -15733,7 +15391,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 @@ -15742,7 +15400,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDR" = ( +"aDi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15750,7 +15408,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aDS" = ( +"aDj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15770,7 +15428,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 @@ -15780,13 +15438,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 }, @@ -15794,7 +15452,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/sleep_male) -"aDW" = ( +"aDn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -15805,7 +15463,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; @@ -15818,7 +15476,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"; @@ -15826,7 +15484,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"; @@ -15834,12 +15492,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 @@ -15847,12 +15505,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 @@ -15861,7 +15519,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEe" = ( +"aDv" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -15877,7 +15535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEf" = ( +"aDw" = ( /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; name = "Bridge"; @@ -15894,7 +15552,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEg" = ( +"aDx" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -15911,7 +15569,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEh" = ( +"aDy" = ( /obj/machinery/door/airlock/glass_command{ cyclelinkeddir = null; name = "Bridge"; @@ -15928,7 +15586,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aEi" = ( +"aDz" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -15937,7 +15595,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEj" = ( +"aDA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -15950,7 +15608,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEk" = ( +"aDB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -15963,7 +15621,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEl" = ( +"aDC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -15971,21 +15629,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 }, @@ -15993,7 +15637,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEo" = ( +"aDE" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -16001,7 +15645,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEp" = ( +"aDF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16013,7 +15657,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEq" = ( +"aDG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16024,7 +15668,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 @@ -16039,7 +15683,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEs" = ( +"aDI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16050,7 +15694,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEt" = ( +"aDJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16067,7 +15711,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEu" = ( +"aDK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -16080,7 +15724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEv" = ( +"aDL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -16094,7 +15738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aEw" = ( +"aDM" = ( /obj/structure/shuttle/engine/heater, /obj/structure/window/reinforced{ dir = 1; @@ -16102,7 +15746,7 @@ }, /turf/open/floor/plating/airless, /area/shuttle/labor) -"aEx" = ( +"aDN" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/sign/securearea{ @@ -16118,7 +15762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aEy" = ( +"aDO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16140,7 +15784,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEz" = ( +"aDP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16161,7 +15805,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aEA" = ( +"aDQ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16182,7 +15826,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEB" = ( +"aDR" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16199,7 +15843,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEC" = ( +"aDS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16217,7 +15861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aED" = ( +"aDT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16230,7 +15874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEE" = ( +"aDU" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16244,7 +15888,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" @@ -16271,7 +15915,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aEG" = ( +"aDW" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16285,7 +15929,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEH" = ( +"aDX" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16305,7 +15949,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEI" = ( +"aDY" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16318,7 +15962,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEJ" = ( +"aDZ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16336,7 +15980,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEK" = ( +"aEa" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16354,7 +15998,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEL" = ( +"aEb" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16370,7 +16014,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEM" = ( +"aEc" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16388,7 +16032,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEN" = ( +"aEd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16408,7 +16052,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aEO" = ( +"aEe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -16422,30 +16066,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; @@ -16462,7 +16083,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aER" = ( +"aEg" = ( /obj/machinery/power/apc{ dir = 4; name = "Brig APC"; @@ -16483,12 +16104,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 }, @@ -16498,7 +16119,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)"; @@ -16507,25 +16128,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)"; @@ -16534,7 +16155,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aEZ" = ( +"aEo" = ( /obj/structure/chair{ dir = 8 }, @@ -16545,7 +16166,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aFa" = ( +"aEp" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -16559,7 +16180,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFb" = ( +"aEq" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -16572,7 +16193,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFc" = ( +"aEr" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -16596,7 +16217,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"; @@ -16615,7 +16236,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFe" = ( +"aEt" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, /turf/open/floor/plating{ @@ -16624,19 +16245,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{ @@ -16649,7 +16270,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{ @@ -16661,7 +16282,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{ @@ -16673,20 +16294,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"; @@ -16704,14 +16325,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"; @@ -16731,7 +16352,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"; @@ -16739,7 +16360,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFq" = ( +"aEF" = ( /obj/machinery/camera{ c_tag = "Bridge Midway 1" }, @@ -16755,7 +16376,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFr" = ( +"aEG" = ( /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/device/destTagger, @@ -16766,7 +16387,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{ @@ -16776,7 +16397,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFt" = ( +"aEI" = ( /obj/structure/table, /obj/machinery/recharger, /turf/open/floor/plasteel/darkblue/side{ @@ -16786,7 +16407,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFu" = ( +"aEJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16799,7 +16420,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFv" = ( +"aEK" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -16808,7 +16429,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFw" = ( +"aEL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16827,7 +16448,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 @@ -16839,7 +16460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFy" = ( +"aEN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -16858,7 +16479,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFz" = ( +"aEO" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular{ pixel_x = 0 @@ -16881,7 +16502,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{ @@ -16897,7 +16518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFB" = ( +"aEQ" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -16912,7 +16533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aFC" = ( +"aER" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -16927,14 +16548,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{ @@ -16943,7 +16564,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFF" = ( +"aEU" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, /turf/open/floor/carpet{ @@ -16952,7 +16573,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 @@ -16960,7 +16581,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aFH" = ( +"aEW" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/qm, /obj/machinery/airalarm{ @@ -16978,14 +16599,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"; @@ -16996,7 +16617,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"; @@ -17006,7 +16627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aFL" = ( +"aFa" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -17017,7 +16638,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, @@ -17025,20 +16646,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, @@ -17052,11 +16673,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 @@ -17066,7 +16687,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFS" = ( +"aFh" = ( /obj/machinery/camera{ c_tag = "Labor Shuttle Dock South"; dir = 1 @@ -17079,7 +16700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFT" = ( +"aFi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -17095,7 +16716,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFU" = ( +"aFj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17103,7 +16724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aFV" = ( +"aFk" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17124,7 +16745,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{ @@ -17138,7 +16759,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aFX" = ( +"aFm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17146,7 +16767,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 @@ -17158,7 +16779,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, @@ -17166,7 +16787,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 @@ -17175,7 +16796,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aGb" = ( +"aFq" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -17188,7 +16809,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, @@ -17204,7 +16825,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"aGd" = ( +"aFs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17216,7 +16837,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGe" = ( +"aFt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17233,7 +16854,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGf" = ( +"aFu" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -17244,7 +16865,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGg" = ( +"aFv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17261,7 +16882,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)"; @@ -17270,7 +16891,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 @@ -17282,7 +16903,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGj" = ( +"aFy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17293,7 +16914,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGk" = ( +"aFz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17306,7 +16927,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGl" = ( +"aFA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17322,7 +16943,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)"; @@ -17331,7 +16952,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGn" = ( +"aFC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17344,7 +16965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGo" = ( +"aFD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17353,7 +16974,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGp" = ( +"aFE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -17369,12 +16990,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 }, @@ -17382,7 +17003,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"; @@ -17390,20 +17011,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 @@ -17414,7 +17022,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGv" = ( +"aFJ" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -17423,7 +17031,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aGw" = ( +"aFK" = ( /obj/structure/chair{ dir = 4 }, @@ -17431,7 +17039,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{ @@ -17440,7 +17048,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)"; @@ -17449,7 +17057,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"; @@ -17457,7 +17065,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"; @@ -17465,7 +17073,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)"; @@ -17474,7 +17082,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)"; @@ -17483,7 +17091,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aGD" = ( +"aFR" = ( /obj/structure/chair{ dir = 8 }, @@ -17491,18 +17099,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, @@ -17510,20 +17118,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"; @@ -17534,21 +17142,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" @@ -17557,7 +17165,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGN" = ( +"aGb" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -17568,7 +17176,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGO" = ( +"aGc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -17578,7 +17186,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGP" = ( +"aGd" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -17598,7 +17206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aGQ" = ( +"aGe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17613,7 +17221,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" @@ -17627,7 +17235,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGS" = ( +"aGg" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -17644,7 +17252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGT" = ( +"aGh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17660,7 +17268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGU" = ( +"aGi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17681,7 +17289,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGV" = ( +"aGj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17695,7 +17303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGW" = ( +"aGk" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -17718,7 +17326,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGX" = ( +"aGl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -17731,7 +17339,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGY" = ( +"aGm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -17744,7 +17352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aGZ" = ( +"aGn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17754,7 +17362,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{ @@ -17766,7 +17374,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHb" = ( +"aGp" = ( /obj/structure/chair{ dir = 8 }, @@ -17779,7 +17387,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHc" = ( +"aGq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17789,7 +17397,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHd" = ( +"aGr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -17808,7 +17416,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aHe" = ( +"aGs" = ( /obj/machinery/power/apc{ dir = 8; name = "Quartermaster's Private Quarters APC"; @@ -17835,7 +17443,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 @@ -17851,33 +17459,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; @@ -17892,7 +17500,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHk" = ( +"aGy" = ( /obj/machinery/autolathe, /obj/machinery/light{ dir = 1 @@ -17904,7 +17512,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHl" = ( +"aGz" = ( /obj/structure/table, /obj/item/device/multitool, /obj/machinery/camera{ @@ -17924,7 +17532,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHm" = ( +"aGA" = ( /obj/structure/table, /obj/item/weapon/folder, /obj/item/weapon/stamp/denied{ @@ -17943,7 +17551,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aHn" = ( +"aGB" = ( /obj/structure/table, /obj/item/weapon/storage/firstaid/regular, /obj/structure/noticeboard{ @@ -17953,7 +17561,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{ @@ -17966,12 +17574,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, @@ -17979,7 +17587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aHr" = ( +"aGF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -17995,12 +17603,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, @@ -18013,7 +17621,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" @@ -18031,7 +17639,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, @@ -18044,7 +17652,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aHw" = ( +"aGK" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -18053,12 +17661,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, @@ -18076,7 +17684,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHz" = ( +"aGN" = ( /obj/machinery/door/airlock{ name = "Law Office"; req_access_txt = "38" @@ -18100,7 +17708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aHA" = ( +"aGO" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18117,31 +17725,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"; @@ -18153,35 +17749,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 @@ -18192,7 +17760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aHI" = ( +"aGT" = ( /obj/machinery/camera{ c_tag = "Courtroom Main South"; dir = 1 @@ -18203,7 +17771,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"; @@ -18211,18 +17779,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"; @@ -18230,7 +17798,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aHN" = ( +"aGY" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -18245,18 +17813,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" }, @@ -18266,7 +17834,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aHR" = ( +"aHc" = ( /obj/machinery/door/airlock/glass{ name = "Dormitories" }, @@ -18275,24 +17843,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 @@ -18301,7 +17869,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHW" = ( +"aHh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18313,7 +17881,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHX" = ( +"aHi" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -18321,7 +17889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aHY" = ( +"aHj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -18331,7 +17899,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" @@ -18345,7 +17913,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIa" = ( +"aHl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -18355,7 +17923,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIb" = ( +"aHm" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -18366,7 +17934,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIc" = ( +"aHn" = ( /obj/machinery/light_switch{ pixel_y = -25 }, @@ -18381,7 +17949,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aId" = ( +"aHo" = ( /obj/structure/closet{ icon_door = "orange"; name = "Quartermaster's Uniform" @@ -18396,7 +17964,7 @@ /area/quartermaster/qm{ name = "Quartermaster's Private Quarters" }) -"aIe" = ( +"aHp" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -18409,7 +17977,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aIf" = ( +"aHq" = ( /obj/machinery/power/apc{ dir = 2; name = "Gravity Generator APC"; @@ -18419,7 +17987,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{ @@ -18430,7 +17998,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; @@ -18440,7 +18008,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 @@ -18449,7 +18017,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, @@ -18460,7 +18028,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 @@ -18472,7 +18040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIl" = ( +"aHw" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -18486,7 +18054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIm" = ( +"aHx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18496,7 +18064,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; @@ -18512,7 +18080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aIo" = ( +"aHz" = ( /obj/structure/cable/orange{ d2 = 4; icon_state = "0-4" @@ -18528,7 +18096,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/processing) -"aIp" = ( +"aHA" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -18549,14 +18117,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 @@ -18565,13 +18133,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, @@ -18579,19 +18147,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; @@ -18602,7 +18170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIx" = ( +"aHI" = ( /obj/machinery/button/door{ id = "lawyerinterior"; name = "Privacy Shutters"; @@ -18613,7 +18181,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIy" = ( +"aHJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -18623,7 +18191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aIz" = ( +"aHK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18638,7 +18206,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; @@ -18654,7 +18222,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"; @@ -18668,7 +18236,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIC" = ( +"aHN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -18678,7 +18246,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"; @@ -18686,27 +18254,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, @@ -18718,7 +18266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aIG" = ( +"aHQ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -18728,7 +18276,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)"; @@ -18737,14 +18285,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"; @@ -18752,7 +18300,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, @@ -18760,7 +18308,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, @@ -18769,7 +18317,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" @@ -18779,7 +18327,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aIN" = ( +"aHX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -18788,7 +18336,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aIO" = ( +"aHY" = ( /obj/machinery/light/small{ dir = 8 }, @@ -18796,7 +18344,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aIP" = ( +"aHZ" = ( /obj/machinery/door/airlock{ id_tag = "b3" }, @@ -18804,7 +18352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aIQ" = ( +"aIa" = ( /obj/structure/urinal{ pixel_x = 32 }, @@ -18812,13 +18360,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"; @@ -18828,7 +18376,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 @@ -18837,7 +18385,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIU" = ( +"aIe" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -18851,7 +18399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aIV" = ( +"aIf" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -18860,18 +18408,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, @@ -18879,7 +18427,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aIZ" = ( +"aIj" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -18891,7 +18439,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 @@ -18903,7 +18451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJb" = ( +"aIl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18911,7 +18459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJc" = ( +"aIm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18928,7 +18476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJd" = ( +"aIn" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -18941,7 +18489,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 @@ -18956,7 +18504,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJf" = ( +"aIp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18968,7 +18516,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"; @@ -18985,7 +18533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aJh" = ( +"aIr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -18993,7 +18541,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"; @@ -19006,7 +18554,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJj" = ( +"aIt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -19014,7 +18562,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJk" = ( +"aIu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -19023,7 +18571,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJl" = ( +"aIv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -19037,7 +18585,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aJm" = ( +"aIw" = ( /obj/machinery/camera{ c_tag = "Bridge Midway 2"; dir = 1; @@ -19048,7 +18596,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"; @@ -19058,19 +18606,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, @@ -19079,7 +18615,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aJq" = ( +"aIz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -19089,13 +18625,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" @@ -19104,19 +18640,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"; @@ -19128,7 +18664,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJw" = ( +"aIF" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -19153,7 +18689,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aJx" = ( +"aIG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -19171,7 +18707,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJy" = ( +"aIH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -19187,7 +18723,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJz" = ( +"aII" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -19203,7 +18739,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJA" = ( +"aIJ" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -19223,7 +18759,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJB" = ( +"aIK" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -19233,12 +18769,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 }, @@ -19247,7 +18783,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, @@ -19256,7 +18792,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aJF" = ( +"aIO" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, @@ -19265,7 +18801,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)"; @@ -19276,7 +18812,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, @@ -19289,19 +18825,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{ @@ -19313,7 +18849,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, @@ -19321,21 +18857,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, @@ -19348,7 +18870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aJO" = ( +"aIW" = ( /obj/structure/chair{ dir = 1 }, @@ -19363,7 +18885,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJP" = ( +"aIX" = ( /obj/structure/chair{ dir = 1 }, @@ -19373,7 +18895,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJQ" = ( +"aIY" = ( /obj/structure/chair{ dir = 1 }, @@ -19382,13 +18904,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 }, @@ -19398,7 +18920,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aJT" = ( +"aJb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -19412,7 +18934,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aJU" = ( +"aJc" = ( /obj/machinery/button/door{ id = "b3"; name = "Privacy Bolts"; @@ -19424,7 +18946,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; @@ -19434,18 +18956,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{ @@ -19457,7 +18973,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"; @@ -19465,24 +18981,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 }, @@ -19490,7 +19006,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; @@ -19503,7 +19019,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKf" = ( +"aJm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19515,7 +19031,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKg" = ( +"aJn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19527,7 +19043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKh" = ( +"aJo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19538,7 +19054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKi" = ( +"aJp" = ( /obj/machinery/light{ dir = 1 }, @@ -19552,7 +19068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aKj" = ( +"aJq" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -19564,13 +19080,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; @@ -19581,13 +19097,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" @@ -19609,14 +19125,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 @@ -19627,7 +19143,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aKq" = ( +"aJx" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -19636,7 +19152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKr" = ( +"aJy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19644,7 +19160,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 @@ -19653,7 +19169,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{ @@ -19663,7 +19179,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 @@ -19673,7 +19189,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{ @@ -19683,7 +19199,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 @@ -19692,7 +19208,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aKx" = ( +"aJE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19701,7 +19217,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, @@ -19712,18 +19228,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; @@ -19745,14 +19261,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{ @@ -19762,7 +19278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKD" = ( +"aJK" = ( /obj/machinery/camera{ c_tag = "Cargo Security Checkpoint"; dir = 8; @@ -19775,7 +19291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"aKE" = ( +"aJL" = ( /obj/machinery/light/small{ dir = 4 }, @@ -19787,13 +19303,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, @@ -19801,7 +19317,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, @@ -19818,14 +19334,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, @@ -19833,12 +19349,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"; @@ -19850,7 +19366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aKM" = ( +"aJT" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -19864,14 +19380,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 @@ -19880,18 +19396,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; @@ -19907,7 +19412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aKR" = ( +"aJX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -19918,13 +19423,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"; @@ -19932,34 +19437,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 }, @@ -19971,7 +19449,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aKX" = ( +"aKb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -19979,7 +19457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aKY" = ( +"aKc" = ( /obj/structure/table, /obj/structure/bedsheetbin, /obj/machinery/light{ @@ -19993,7 +19471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aKZ" = ( +"aKd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20001,7 +19479,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLa" = ( +"aKe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20010,7 +19488,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLb" = ( +"aKf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20021,7 +19499,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; @@ -20031,7 +19509,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLd" = ( +"aKh" = ( /obj/structure/closet/wardrobe/mixed, /obj/machinery/light{ dir = 4 @@ -20040,20 +19518,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 }, @@ -20062,12 +19540,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 @@ -20076,7 +19554,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 @@ -20085,7 +19563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aLk" = ( +"aKo" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -20093,7 +19571,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, @@ -20115,17 +19593,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, @@ -20135,7 +19613,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLp" = ( +"aKt" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -20154,7 +19632,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLq" = ( +"aKu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -20173,7 +19651,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLr" = ( +"aKv" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -20188,7 +19666,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aLs" = ( +"aKw" = ( /obj/machinery/door/airlock/glass_mining{ name = "Cargo Office"; req_access_txt = "0"; @@ -20200,14 +19678,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"; @@ -20217,7 +19695,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)"; @@ -20228,7 +19706,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aLw" = ( +"aKA" = ( /obj/structure/table/wood, /obj/item/device/tape/random, /obj/item/device/tape/random{ @@ -20242,13 +19720,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, @@ -20256,7 +19734,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, @@ -20264,7 +19742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLA" = ( +"aKE" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -20276,7 +19754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aLB" = ( +"aKF" = ( /obj/machinery/light{ dir = 8 }, @@ -20284,7 +19762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLC" = ( +"aKG" = ( /obj/structure/table/wood, /obj/item/weapon/folder/red{ pixel_x = 8; @@ -20299,7 +19777,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLD" = ( +"aKH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -20309,7 +19787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aLE" = ( +"aKI" = ( /obj/machinery/photocopier, /obj/machinery/light{ dir = 4; @@ -20320,31 +19798,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 }, @@ -20361,7 +19815,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLI" = ( +"aKK" = ( /obj/machinery/door/airlock{ id_tag = "b2" }, @@ -20369,7 +19823,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 @@ -20378,7 +19832,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLK" = ( +"aKM" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -20396,7 +19850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLL" = ( +"aKN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20404,7 +19858,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aLM" = ( +"aKO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -20412,7 +19866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLN" = ( +"aKP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -20420,7 +19874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aLO" = ( +"aKQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -20429,7 +19883,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"; @@ -20440,20 +19894,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 @@ -20462,7 +19916,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; @@ -20472,7 +19926,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"; @@ -20485,13 +19939,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, @@ -20499,13 +19953,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"; @@ -20531,7 +19985,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" @@ -20542,7 +19996,7 @@ tag = "icon-darkblue (WEST)" }, /area/bridge) -"aMa" = ( +"aLc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -20552,7 +20006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMb" = ( +"aLd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -20563,7 +20017,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMc" = ( +"aLe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -20584,7 +20038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMd" = ( +"aLf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -20595,7 +20049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMe" = ( +"aLg" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -20605,7 +20059,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aMf" = ( +"aLh" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -20621,14 +20075,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; @@ -20637,50 +20093,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; @@ -20689,8 +20120,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 @@ -20699,25 +20132,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 }, @@ -20736,7 +20169,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aMr" = ( +"aLr" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -20744,7 +20177,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aMs" = ( +"aLs" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -20766,7 +20199,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aMt" = ( +"aLt" = ( /obj/structure/chair{ dir = 4 }, @@ -20780,7 +20213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMu" = ( +"aLu" = ( /obj/machinery/light{ dir = 1 }, @@ -20794,7 +20227,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; @@ -20807,7 +20240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMw" = ( +"aLw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20821,7 +20254,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMx" = ( +"aLx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20836,7 +20269,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; @@ -20852,7 +20285,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 @@ -20864,7 +20297,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMA" = ( +"aLA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -20876,7 +20309,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aMB" = ( +"aLB" = ( /obj/machinery/computer/cargo/request, /obj/structure/disposalpipe/segment{ dir = 2; @@ -20889,7 +20322,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 @@ -20897,7 +20330,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aMD" = ( +"aLD" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -20924,28 +20357,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; @@ -20960,8 +20384,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; @@ -20975,8 +20401,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, @@ -20984,7 +20412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aMI" = ( +"aLI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -20992,7 +20420,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aMJ" = ( +"aLJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -21000,7 +20428,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; @@ -21010,13 +20438,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; @@ -21028,7 +20450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aMN" = ( +"aLM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -21042,33 +20464,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 }, @@ -21077,7 +20473,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMR" = ( +"aLO" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -21088,7 +20484,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMS" = ( +"aLP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -21100,7 +20496,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMT" = ( +"aLQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -21109,7 +20505,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aMU" = ( +"aLR" = ( /obj/machinery/camera{ c_tag = "Courtroom Jury East"; dir = 9; @@ -21120,15 +20516,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" }, @@ -21136,7 +20524,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 @@ -21145,7 +20533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aMY" = ( +"aLU" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-22" }, @@ -21156,7 +20544,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)"; @@ -21167,7 +20555,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"; @@ -21178,7 +20566,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, @@ -21189,7 +20577,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; @@ -21204,7 +20592,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aNd" = ( +"aLZ" = ( /obj/machinery/light{ dir = 8 }, @@ -21214,7 +20602,7 @@ tag = "icon-darkblue (WEST)" }, /area/bridge) -"aNe" = ( +"aMa" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -21223,7 +20611,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNf" = ( +"aMb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -21232,7 +20620,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNg" = ( +"aMc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -21246,7 +20634,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNh" = ( +"aMd" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -21254,7 +20642,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"aNi" = ( +"aMe" = ( /obj/machinery/light{ dir = 4 }, @@ -21264,14 +20652,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; @@ -21280,8 +20670,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; @@ -21291,8 +20683,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; @@ -21307,8 +20701,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 @@ -21320,19 +20716,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"; @@ -21345,7 +20743,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"; @@ -21369,7 +20767,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{ @@ -21378,7 +20776,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aNt" = ( +"aMp" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -21400,19 +20798,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 @@ -21425,7 +20823,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, @@ -21435,7 +20833,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNx" = ( +"aMt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -21452,7 +20850,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNy" = ( +"aMu" = ( /obj/machinery/power/apc{ dir = 4; name = "Fore Asteroid Maintenance APC"; @@ -21474,7 +20872,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 @@ -21482,7 +20880,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNA" = ( +"aMw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -21495,7 +20893,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNB" = ( +"aMx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -21511,7 +20909,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" @@ -21527,7 +20925,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aND" = ( +"aMz" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -21544,8 +20942,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"; @@ -21559,22 +20959,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 @@ -21583,7 +20978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/detectives_office) -"aNI" = ( +"aMD" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -21592,7 +20987,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; @@ -21603,13 +20998,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 @@ -21618,7 +21013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNM" = ( +"aMH" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -21631,7 +21026,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNN" = ( +"aMI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -21645,7 +21040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNO" = ( +"aMJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -21661,7 +21056,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNP" = ( +"aMK" = ( /obj/structure/closet/lawcloset, /obj/machinery/firealarm{ dir = 1; @@ -21671,7 +21066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aNQ" = ( +"aML" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -21680,7 +21075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aNR" = ( +"aMM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -21690,7 +21085,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{ @@ -21698,7 +21093,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aNT" = ( +"aMO" = ( /obj/machinery/light, /obj/structure/table, /obj/machinery/firealarm{ @@ -21710,21 +21105,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 @@ -21734,7 +21129,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aNX" = ( +"aMS" = ( /obj/machinery/light/small, /obj/structure/closet/emcloset, /turf/open/floor/plating{ @@ -21743,7 +21138,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aNY" = ( +"aMT" = ( /obj/machinery/light/small{ dir = 8 }, @@ -21760,7 +21155,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aNZ" = ( +"aMU" = ( /obj/machinery/door/airlock{ id_tag = "b1" }, @@ -21768,7 +21163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/toilet) -"aOa" = ( +"aMV" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -21784,7 +21179,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"; @@ -21796,13 +21191,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" }, @@ -21810,7 +21205,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOe" = ( +"aMZ" = ( /obj/machinery/light/small{ dir = 8 }, @@ -21826,7 +21221,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"; @@ -21834,7 +21229,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aOg" = ( +"aNb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -21849,7 +21244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aOh" = ( +"aNc" = ( /obj/machinery/camera{ c_tag = "Bridge Midway 3"; dir = 1; @@ -21862,7 +21257,7 @@ tag = "icon-darkblue (WEST)" }, /area/bridge) -"aOi" = ( +"aNd" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -21873,17 +21268,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; @@ -21898,18 +21283,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; @@ -21929,8 +21306,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" @@ -21939,8 +21318,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; @@ -21953,7 +21334,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOp" = ( +"aNi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -21970,7 +21351,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOq" = ( +"aNj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -21984,7 +21365,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOr" = ( +"aNk" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -22001,7 +21382,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 @@ -22017,7 +21398,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aOt" = ( +"aNm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -22034,7 +21415,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 @@ -22046,14 +21427,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 }, @@ -22066,7 +21447,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOx" = ( +"aNq" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -22078,7 +21459,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOy" = ( +"aNr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -22091,7 +21472,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOz" = ( +"aNs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -22105,7 +21486,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOA" = ( +"aNt" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -22121,7 +21502,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aOB" = ( +"aNu" = ( /obj/structure/table, /obj/item/device/multitool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -22133,15 +21514,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{ @@ -22157,7 +21538,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{ @@ -22166,7 +21547,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOF" = ( +"aNy" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -22174,7 +21555,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOG" = ( +"aNz" = ( /obj/machinery/light/small{ dir = 1 }, @@ -22184,7 +21565,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOH" = ( +"aNA" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating{ @@ -22193,7 +21574,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOI" = ( +"aNB" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -22204,7 +21585,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" @@ -22215,7 +21596,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOK" = ( +"aND" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -22227,8 +21608,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; @@ -22243,8 +21626,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 @@ -22253,7 +21638,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, @@ -22269,7 +21654,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aOO" = ( +"aNH" = ( /obj/machinery/door/airlock{ name = "Law Office"; req_access_txt = "38" @@ -22288,7 +21673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"aOP" = ( +"aNI" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -22304,7 +21689,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" @@ -22318,7 +21703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"aOR" = ( +"aNK" = ( /obj/machinery/door/airlock/glass{ name = "Brig Lobby" }, @@ -22326,18 +21711,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, @@ -22345,7 +21719,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/courtroom) -"aOU" = ( +"aNM" = ( /obj/machinery/door/airlock/glass{ name = "Courtroom" }, @@ -22354,7 +21728,7 @@ dir = 5 }, /area/crew_quarters/courtroom) -"aOV" = ( +"aNN" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22363,7 +21737,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"; @@ -22380,7 +21754,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aOX" = ( +"aNP" = ( /obj/machinery/door/airlock/glass{ name = "Locker Room" }, @@ -22390,7 +21764,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, @@ -22399,7 +21773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/locker) -"aOZ" = ( +"aNR" = ( /obj/machinery/door/airlock/glass{ name = "Locker Room" }, @@ -22407,25 +21781,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" }, @@ -22436,7 +21810,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, @@ -22447,7 +21821,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aPf" = ( +"aNX" = ( /obj/machinery/door/poddoor/preopen{ id = "hopexternal" }, @@ -22458,7 +21832,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/heads) -"aPg" = ( +"aNY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -22468,7 +21842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPh" = ( +"aNZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -22481,8 +21855,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" @@ -22495,21 +21871,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; @@ -22517,11 +21882,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 @@ -22530,7 +21899,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{ @@ -22549,7 +21918,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"aPn" = ( +"aOe" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -22569,41 +21938,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"aPo" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = 0 - }, -/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/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"aPp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/structure/grille, -/turf/open/space, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"aPq" = ( +"aOf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -22611,21 +21946,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"aPr" = ( -/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" - }) -"aPs" = ( +"aOg" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22635,7 +21956,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aPt" = ( +"aOh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -22652,7 +21973,7 @@ /area/teleporter{ name = "Cargo Quantum Pad" }) -"aPu" = ( +"aOi" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -22663,25 +21984,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{ @@ -22690,7 +22000,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, @@ -22698,12 +22008,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, @@ -22711,7 +22021,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aPz" = ( +"aOm" = ( /obj/structure/chair{ dir = 8 }, @@ -22729,7 +22039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aPA" = ( +"aOn" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -22738,7 +22048,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 @@ -22746,7 +22056,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPC" = ( +"aOp" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -22759,7 +22069,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPD" = ( +"aOq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22771,7 +22081,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPE" = ( +"aOr" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22784,7 +22094,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPF" = ( +"aOs" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -22798,7 +22108,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aPG" = ( +"aOt" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -22812,17 +22122,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; @@ -22836,8 +22136,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; @@ -22847,7 +22149,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; @@ -22865,7 +22167,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPL" = ( +"aOx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -22878,7 +22180,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPM" = ( +"aOy" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -22894,7 +22196,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; @@ -22915,7 +22217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPO" = ( +"aOA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -22931,7 +22233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPP" = ( +"aOB" = ( /obj/machinery/light{ dir = 1 }, @@ -22950,7 +22252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPQ" = ( +"aOC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22966,7 +22268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPR" = ( +"aOD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -22986,7 +22288,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPS" = ( +"aOE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23002,7 +22304,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPT" = ( +"aOF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23021,23 +22323,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 }, @@ -23058,7 +22344,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 @@ -23082,7 +22368,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPX" = ( +"aOI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23101,7 +22387,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aPY" = ( +"aOJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23117,7 +22403,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)"; @@ -23126,7 +22412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQa" = ( +"aOL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23137,7 +22423,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQb" = ( +"aOM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23145,7 +22431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQc" = ( +"aON" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23164,7 +22450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQd" = ( +"aOO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23181,7 +22467,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQe" = ( +"aOP" = ( /obj/machinery/light{ dir = 1 }, @@ -23195,7 +22481,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQf" = ( +"aOQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -23206,7 +22492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQg" = ( +"aOR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23221,7 +22507,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQh" = ( +"aOS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23235,7 +22521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQi" = ( +"aOT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23254,7 +22540,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"; @@ -23264,7 +22550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQk" = ( +"aOV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23277,7 +22563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQl" = ( +"aOW" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23288,7 +22574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQm" = ( +"aOX" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -23305,7 +22591,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQn" = ( +"aOY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23327,7 +22613,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQo" = ( +"aOZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23346,7 +22632,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQp" = ( +"aPa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23365,7 +22651,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQq" = ( +"aPb" = ( /obj/machinery/light{ dir = 1 }, @@ -23382,7 +22668,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQr" = ( +"aPc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23393,7 +22679,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQs" = ( +"aPd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -23412,7 +22698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQt" = ( +"aPe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -23431,7 +22717,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQu" = ( +"aPf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23451,7 +22737,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQv" = ( +"aPg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23473,7 +22759,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQw" = ( +"aPh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23487,7 +22773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQx" = ( +"aPi" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -23508,7 +22794,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQy" = ( +"aPj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23524,7 +22810,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQz" = ( +"aPk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23543,7 +22829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQA" = ( +"aPl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23562,7 +22848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQB" = ( +"aPm" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23578,7 +22864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQC" = ( +"aPn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23604,7 +22890,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQD" = ( +"aPo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -23625,7 +22911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQE" = ( +"aPp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -23641,7 +22927,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQF" = ( +"aPq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -23658,7 +22944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQG" = ( +"aPr" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -23674,7 +22960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQH" = ( +"aPs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -23690,7 +22976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQI" = ( +"aPt" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23709,7 +22995,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQJ" = ( +"aPu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -23725,7 +23011,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQK" = ( +"aPv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -23742,7 +23028,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQL" = ( +"aPw" = ( /obj/machinery/light{ dir = 1 }, @@ -23753,7 +23039,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 @@ -23768,7 +23054,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"; @@ -23776,7 +23062,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; @@ -23789,7 +23075,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)"; @@ -23802,7 +23088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQQ" = ( +"aPB" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -23813,7 +23099,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)"; @@ -23822,42 +23108,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQS" = ( +"aPD" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"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" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"aQW" = ( +"aPE" = ( /obj/machinery/door/airlock/glass, /obj/structure/cable/orange{ d1 = 4; @@ -23871,20 +23127,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQX" = ( -/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) -"aQY" = ( +"aPF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -23901,7 +23144,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aQZ" = ( +"aPG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -23917,7 +23160,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 @@ -23940,7 +23183,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRb" = ( +"aPI" = ( /obj/machinery/light{ dir = 1 }, @@ -23959,7 +23202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRc" = ( +"aPJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -23980,7 +23223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRd" = ( +"aPK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -23996,7 +23239,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRe" = ( +"aPL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24017,7 +23260,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRf" = ( +"aPM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24028,7 +23271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRg" = ( +"aPN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24041,7 +23284,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRh" = ( +"aPO" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -24054,7 +23297,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRi" = ( +"aPP" = ( /obj/structure/chair{ dir = 8 }, @@ -24075,7 +23318,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 @@ -24083,7 +23326,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRk" = ( +"aPR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -24096,7 +23339,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRl" = ( +"aPS" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -24113,7 +23356,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRm" = ( +"aPT" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -24125,7 +23368,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aRn" = ( +"aPU" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = 1; @@ -24134,8 +23377,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; @@ -24147,8 +23392,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" @@ -24162,8 +23409,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; @@ -24174,7 +23423,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRr" = ( +"aPY" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24188,7 +23437,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRs" = ( +"aPZ" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -24203,7 +23452,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRt" = ( +"aQa" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24213,7 +23462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRu" = ( +"aQb" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24228,7 +23477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRv" = ( +"aQc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24239,7 +23488,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRw" = ( +"aQd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24253,7 +23502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRx" = ( +"aQe" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24264,7 +23513,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRy" = ( +"aQf" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24277,7 +23526,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRz" = ( +"aQg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -24295,7 +23544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRA" = ( +"aQh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -24310,7 +23559,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 @@ -24324,7 +23573,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRC" = ( +"aQj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -24335,12 +23584,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 }, @@ -24348,19 +23597,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" @@ -24369,7 +23618,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; @@ -24379,7 +23628,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 @@ -24388,7 +23637,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 @@ -24400,20 +23649,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; @@ -24424,7 +23673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRO" = ( +"aQv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24435,13 +23684,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; @@ -24451,7 +23700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRR" = ( +"aQy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -24459,7 +23708,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 @@ -24468,7 +23717,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRT" = ( +"aQA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -24478,19 +23727,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; @@ -24506,7 +23755,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aRX" = ( +"aQE" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -24523,7 +23772,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aRY" = ( +"aQF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24533,7 +23782,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aRZ" = ( +"aQG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24544,7 +23793,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aSa" = ( +"aQH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24558,7 +23807,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" @@ -24574,7 +23823,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSc" = ( +"aQJ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -24593,7 +23842,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 @@ -24601,7 +23850,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 @@ -24609,7 +23858,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 @@ -24617,7 +23866,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aSg" = ( +"aQN" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plasteel/floorgrime{ @@ -24626,15 +23875,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 @@ -24643,7 +23894,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSj" = ( +"aQQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -24655,7 +23906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSk" = ( +"aQR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -24668,7 +23919,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSl" = ( +"aQS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24676,7 +23927,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 @@ -24685,7 +23936,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSn" = ( +"aQU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24693,7 +23944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSo" = ( +"aQV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24701,7 +23952,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSp" = ( +"aQW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24727,7 +23978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSq" = ( +"aQX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -24735,7 +23986,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSr" = ( +"aQY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24748,7 +23999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSs" = ( +"aQZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24757,20 +24008,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 }, @@ -24782,7 +24033,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 @@ -24797,7 +24048,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSx" = ( +"aRe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24809,7 +24060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSy" = ( +"aRf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24827,7 +24078,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSz" = ( +"aRg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24836,7 +24087,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSA" = ( +"aRh" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -24855,7 +24106,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSB" = ( +"aRi" = ( /obj/machinery/airalarm{ dir = 1; pixel_y = -22 @@ -24867,7 +24118,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSC" = ( +"aRj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24883,7 +24134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSD" = ( +"aRk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24909,7 +24160,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"; @@ -24920,7 +24171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSF" = ( +"aRm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24935,7 +24186,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; @@ -24954,7 +24205,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 @@ -24969,7 +24220,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSI" = ( +"aRp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -24983,7 +24234,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSJ" = ( +"aRq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -25001,7 +24252,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSK" = ( +"aRr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -25019,7 +24270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSL" = ( +"aRs" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -25032,7 +24283,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSM" = ( +"aRt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -25040,29 +24291,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" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"aSR" = ( +"aRx" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -25070,7 +24316,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"; @@ -25078,7 +24324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aST" = ( +"aRz" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -25089,14 +24335,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; @@ -25109,7 +24355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSW" = ( +"aRC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -25119,7 +24365,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; @@ -25131,7 +24377,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 @@ -25148,7 +24394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aSZ" = ( +"aRF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25160,7 +24406,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTa" = ( +"aRG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25170,7 +24416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTb" = ( +"aRH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25184,7 +24430,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTc" = ( +"aRI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25199,7 +24445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTd" = ( +"aRJ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -25226,7 +24472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTe" = ( +"aRK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -25242,7 +24488,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTf" = ( +"aRL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -25259,7 +24505,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 @@ -25277,7 +24523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"aTh" = ( +"aRN" = ( /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -25286,7 +24532,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{ @@ -25295,7 +24541,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 @@ -25303,19 +24549,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" @@ -25324,14 +24570,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, @@ -25342,7 +24588,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTo" = ( +"aRU" = ( /obj/machinery/door/airlock/glass{ name = "Security Quantum Pad" }, @@ -25358,7 +24604,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTp" = ( +"aRV" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -25369,24 +24615,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" @@ -25402,7 +24648,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aTu" = ( +"aSa" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25410,7 +24656,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 @@ -25419,7 +24665,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; @@ -25437,7 +24683,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 @@ -25446,7 +24692,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, @@ -25457,7 +24703,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"; @@ -25470,25 +24716,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" }, @@ -25496,7 +24742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTC" = ( +"aSi" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -25510,7 +24756,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"aTD" = ( +"aSj" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -25524,20 +24770,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"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/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"aTF" = ( +"aSk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/atmos{ name = "Cargo Atmospherics Checkpoint"; @@ -25547,7 +24780,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{ @@ -25557,7 +24790,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTH" = ( +"aSm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -25568,7 +24801,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 @@ -25580,12 +24813,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 @@ -25594,16 +24827,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{ @@ -25616,7 +24840,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTN" = ( +"aSr" = ( /obj/machinery/door/airlock/maintenance{ id_tag = "GulagCivExit2"; name = "Fore Asteroid Maintenance Access"; @@ -25628,7 +24852,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTO" = ( +"aSs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -25636,7 +24860,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTP" = ( +"aSt" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -25649,7 +24873,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aTQ" = ( +"aSu" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -25669,7 +24893,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{ @@ -25681,7 +24905,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{ @@ -25691,7 +24915,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{ @@ -25701,7 +24925,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{ @@ -25719,7 +24943,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTV" = ( +"aSz" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -25732,7 +24956,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTW" = ( +"aSA" = ( /obj/structure/noticeboard{ dir = 8; pixel_x = 27; @@ -25750,7 +24974,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aTX" = ( +"aSB" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -25771,7 +24995,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTY" = ( +"aSC" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -25787,7 +25011,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aTZ" = ( +"aSD" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -25804,7 +25028,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUa" = ( +"aSE" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -25815,7 +25039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUb" = ( +"aSF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -25826,12 +25050,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"; @@ -25841,7 +25065,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUe" = ( +"aSI" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -25851,7 +25075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUf" = ( +"aSJ" = ( /obj/vehicle/janicart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -25863,7 +25087,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{ @@ -25879,7 +25103,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUh" = ( +"aSL" = ( /obj/structure/table, /obj/machinery/light{ dir = 1 @@ -25895,7 +25119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUi" = ( +"aSM" = ( /obj/machinery/light_switch{ pixel_y = 25 }, @@ -25906,7 +25130,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{ @@ -25918,12 +25142,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"; @@ -25933,7 +25157,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 @@ -25945,7 +25169,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{ @@ -25953,7 +25177,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, @@ -25964,7 +25188,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"; @@ -25977,7 +25201,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUq" = ( +"aSU" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -25985,7 +25209,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 @@ -25997,7 +25221,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 @@ -26008,7 +25232,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 @@ -26018,7 +25242,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUu" = ( +"aSY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -26026,7 +25250,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUv" = ( +"aSZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -26043,13 +25267,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 }, @@ -26060,7 +25284,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUy" = ( +"aTc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26068,7 +25292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUz" = ( +"aTd" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -26079,7 +25303,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUA" = ( +"aTe" = ( /obj/machinery/light/small{ dir = 1 }, @@ -26091,7 +25315,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; @@ -26099,14 +25323,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 }, @@ -26119,7 +25343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUE" = ( +"aTi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26131,7 +25355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUF" = ( +"aTj" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -26142,7 +25366,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"; @@ -26155,7 +25379,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUH" = ( +"aTl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -26166,7 +25390,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUI" = ( +"aTm" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -26174,7 +25398,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUJ" = ( +"aTn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -26185,7 +25409,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"; @@ -26198,7 +25422,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUL" = ( +"aTp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -26207,7 +25431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUM" = ( +"aTq" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26223,7 +25447,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"; @@ -26238,7 +25462,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 @@ -26247,7 +25471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUP" = ( +"aTt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26263,7 +25487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUQ" = ( +"aTu" = ( /obj/machinery/button/door{ id = "GulagCivExit2"; name = "Gulag Door Exit"; @@ -26280,7 +25504,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aUR" = ( +"aTv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -26290,7 +25514,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aUS" = ( +"aTw" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -26306,7 +25530,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aUT" = ( +"aTx" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -26321,7 +25545,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aUU" = ( +"aTy" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -26342,21 +25566,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, @@ -26364,7 +25588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUY" = ( +"aTC" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -26373,7 +25597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aUZ" = ( +"aTD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9; pixel_y = 0 @@ -26390,7 +25614,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVa" = ( +"aTE" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -26403,7 +25627,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; @@ -26418,7 +25642,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/nuke_storage) -"aVc" = ( +"aTG" = ( /obj/machinery/light/small{ dir = 4 }, @@ -26432,7 +25656,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 }, @@ -26448,7 +25672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVe" = ( +"aTI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -26456,7 +25680,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVf" = ( +"aTJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -26464,14 +25688,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; @@ -26482,13 +25706,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 }, @@ -26509,7 +25733,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVk" = ( +"aTO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -26517,7 +25741,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVl" = ( +"aTP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -26525,7 +25749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVm" = ( +"aTQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26541,7 +25765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVn" = ( +"aTR" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -26550,7 +25774,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVo" = ( +"aTS" = ( /obj/machinery/light/small, /obj/item/device/assembly/mousetrap/armed, /turf/open/floor/plating{ @@ -26559,7 +25783,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aVp" = ( +"aTT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -26574,7 +25798,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVq" = ( +"aTU" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -26582,7 +25806,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVr" = ( +"aTV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -26593,7 +25817,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVs" = ( +"aTW" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -26604,7 +25828,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVt" = ( +"aTX" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -26619,19 +25843,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, @@ -26639,7 +25863,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVx" = ( +"aUb" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -26648,12 +25872,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 }, @@ -26669,7 +25893,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 }, @@ -26684,7 +25908,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVB" = ( +"aUf" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -26695,7 +25919,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{ @@ -26705,7 +25929,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, @@ -26716,7 +25940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVE" = ( +"aUi" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -26725,7 +25949,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVF" = ( +"aUj" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -26736,7 +25960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVG" = ( +"aUk" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -26746,7 +25970,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVH" = ( +"aUl" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -26754,7 +25978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVI" = ( +"aUm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -26767,7 +25991,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; @@ -26779,7 +26003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVK" = ( +"aUo" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -26788,7 +26012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aVL" = ( +"aUp" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -26802,7 +26026,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 @@ -26810,7 +26034,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVN" = ( +"aUr" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -26830,7 +26054,7 @@ /area/teleporter{ name = "Security Quantum Pad" }) -"aVO" = ( +"aUs" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/cable/orange{ d1 = 2; @@ -26843,13 +26067,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; @@ -26867,7 +26091,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, @@ -26885,7 +26109,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, @@ -26896,13 +26120,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 @@ -26911,7 +26135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVV" = ( +"aUz" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -26920,7 +26144,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"aVW" = ( +"aUA" = ( /obj/structure/janitorialcart, /obj/structure/disposalpipe/segment{ dir = 8; @@ -26930,13 +26154,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; @@ -26944,13 +26168,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 }, @@ -26962,13 +26186,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 }, @@ -26979,7 +26203,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWd" = ( +"aUH" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -26990,7 +26214,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; @@ -27000,13 +26224,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, @@ -27014,7 +26238,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWh" = ( +"aUL" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -27027,7 +26251,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aWi" = ( +"aUM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 2; @@ -27042,7 +26266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWj" = ( +"aUN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -27053,7 +26277,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWk" = ( +"aUO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -27072,7 +26296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWl" = ( +"aUP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -27086,8 +26310,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; @@ -27102,24 +26328,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; @@ -27137,7 +26367,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, @@ -27148,21 +26378,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; @@ -27178,7 +26408,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWu" = ( +"aUY" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/disposalpipe/segment{ @@ -27188,23 +26418,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 }, @@ -27212,7 +26442,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'"; @@ -27226,7 +26456,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"; @@ -27239,7 +26469,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWC" = ( +"aVg" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -27250,7 +26480,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWD" = ( +"aVh" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -27268,7 +26498,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWE" = ( +"aVi" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -27285,32 +26515,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 }, @@ -27323,7 +26528,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWH" = ( +"aVk" = ( /obj/machinery/power/smes, /obj/structure/cable/orange{ d2 = 4; @@ -27335,7 +26540,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWI" = ( +"aVl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -27347,7 +26552,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWJ" = ( +"aVm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -27367,7 +26572,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWK" = ( +"aVn" = ( /obj/structure/closet/crate{ name = "Gold Crate" }, @@ -27388,14 +26593,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, @@ -27407,7 +26608,7 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"aWO" = ( +"aVq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -27416,7 +26617,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWP" = ( +"aVr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -27431,7 +26632,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWQ" = ( +"aVs" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -27445,7 +26646,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, @@ -27463,7 +26664,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{ @@ -27476,17 +26677,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; @@ -27500,7 +26706,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWV" = ( +"aVx" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -27517,7 +26723,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWW" = ( +"aVy" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -27529,7 +26735,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWX" = ( +"aVz" = ( /obj/structure/cable/orange, /obj/machinery/power/apc{ dir = 4; @@ -27543,7 +26749,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aWY" = ( +"aVA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -27552,7 +26758,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aWZ" = ( +"aVB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -27567,21 +26773,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" @@ -27597,7 +26803,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXd" = ( +"aVF" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -27609,13 +26815,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; @@ -27629,8 +26829,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 @@ -27638,7 +26840,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 @@ -27646,7 +26848,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aXi" = ( +"aVJ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -27655,7 +26857,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"aXj" = ( +"aVK" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -27668,7 +26870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXk" = ( +"aVL" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -27684,7 +26886,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXl" = ( +"aVM" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -27701,7 +26903,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{ @@ -27710,11 +26912,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 @@ -27743,11 +26945,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{ @@ -27756,7 +26958,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; @@ -27767,7 +26969,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXs" = ( +"aVT" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -27782,7 +26984,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXt" = ( +"aVU" = ( /obj/machinery/power/smes, /obj/structure/cable/orange{ d2 = 4; @@ -27794,7 +26996,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXu" = ( +"aVV" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -27806,7 +27008,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXv" = ( +"aVW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -27826,7 +27028,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXw" = ( +"aVX" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -27842,11 +27044,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; @@ -27856,11 +27054,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; @@ -27877,7 +27079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXz" = ( +"aWa" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -27886,8 +27088,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"; @@ -27903,8 +27107,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; @@ -27913,7 +27119,7 @@ }, /turf/open/space, /area/space) -"aXC" = ( +"aWd" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -27933,7 +27139,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"aXD" = ( +"aWe" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -27947,7 +27153,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"aXE" = ( +"aWf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -27957,7 +27163,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXF" = ( +"aWg" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Solar Maintenance"; @@ -27975,7 +27181,7 @@ /area/maintenance/portsolar{ name = "Command Asteroid Solar Maintenance" }) -"aXG" = ( +"aWh" = ( /obj/machinery/camera{ c_tag = "Vault"; dir = 5; @@ -27983,11 +27189,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; @@ -28004,7 +27210,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"aXJ" = ( +"aWk" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -28026,7 +27232,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"aXK" = ( +"aWl" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28038,7 +27244,7 @@ }, /turf/open/space, /area/space) -"aXL" = ( +"aWm" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -28055,7 +27261,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXM" = ( +"aWn" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -28067,7 +27273,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXN" = ( +"aWo" = ( /obj/structure/cable/orange, /obj/machinery/power/apc{ dir = 4; @@ -28081,7 +27287,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aXO" = ( +"aWp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28092,7 +27298,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)"; @@ -28106,7 +27312,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aXQ" = ( +"aWr" = ( /obj/machinery/light/small{ dir = 1 }, @@ -28116,12 +27322,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; @@ -28141,7 +27347,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"aXT" = ( +"aWu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28153,25 +27359,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; @@ -28186,7 +27392,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"aXY" = ( +"aWz" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -28207,7 +27413,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"aXZ" = ( +"aWA" = ( /obj/machinery/power/solar_control{ id = "foresolar"; name = "Fore Asteroid Solar Control"; @@ -28223,7 +27429,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYa" = ( +"aWB" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -28240,20 +27446,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"; @@ -28266,7 +27472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYe" = ( +"aWF" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -28277,7 +27483,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYf" = ( +"aWG" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28296,7 +27502,7 @@ }, /turf/open/space, /area/space) -"aYg" = ( +"aWH" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -28307,7 +27513,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYh" = ( +"aWI" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -28316,7 +27522,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, @@ -28326,7 +27532,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYj" = ( +"aWK" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "Solar Maintenance"; @@ -28344,7 +27550,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYk" = ( +"aWL" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -28358,7 +27564,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYl" = ( +"aWM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -28375,7 +27581,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; @@ -28385,7 +27591,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYn" = ( +"aWO" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28394,7 +27600,7 @@ }, /turf/open/space, /area/space) -"aYo" = ( +"aWP" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -28405,7 +27611,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYp" = ( +"aWQ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -28419,7 +27625,7 @@ }, /turf/open/space, /area/space) -"aYq" = ( +"aWR" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -28430,7 +27636,7 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/space) -"aYr" = ( +"aWS" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28442,7 +27648,7 @@ /area/maintenance/portsolar{ name = "Fore Asteroid Solar Maintenance" }) -"aYs" = ( +"aWT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -28457,7 +27663,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYt" = ( +"aWU" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -28470,7 +27676,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYu" = ( +"aWV" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -28489,7 +27695,7 @@ }, /turf/open/space, /area/space) -"aYv" = ( +"aWW" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -28503,7 +27709,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"aYw" = ( +"aWX" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28515,7 +27721,7 @@ }, /turf/open/space, /area/space) -"aYx" = ( +"aWY" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -28537,7 +27743,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"aYy" = ( +"aWZ" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -28551,7 +27757,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"aYz" = ( +"aXa" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -28571,7 +27777,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"aYA" = ( +"aXb" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28580,21 +27786,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; @@ -28608,7 +27814,7 @@ }, /turf/open/space, /area/space) -"aYE" = ( +"aXf" = ( /obj/structure/lattice/catwalk, /obj/machinery/power/tracker, /obj/structure/cable{ @@ -28617,7 +27823,7 @@ }, /turf/open/space, /area/space) -"aYF" = ( +"aXg" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -28626,7 +27832,7 @@ }, /turf/open/space, /area/space) -"aYG" = ( +"aXh" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28636,7 +27842,7 @@ }, /turf/open/space, /area/space) -"aYH" = ( +"aXi" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -28645,18 +27851,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; @@ -28675,19 +27870,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" @@ -28695,7 +27878,7 @@ /obj/machinery/power/tracker, /turf/open/space, /area/space) -"aYM" = ( +"aXl" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 4; @@ -28720,12 +27903,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)"; @@ -28736,12 +27919,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; @@ -28760,13 +27943,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 }, @@ -28775,12 +27958,12 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYT" = ( +"aXs" = ( /turf/closed/mineral/random/labormineral, /area/mine/unexplored{ name = "Civilian Asteroid" }) -"aYU" = ( +"aXt" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" @@ -28789,7 +27972,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"aYV" = ( +"aXu" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -28799,7 +27982,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aYW" = ( +"aXv" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (SOUTHEAST)"; icon_state = "conveyor0"; @@ -28809,21 +27992,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; @@ -28837,7 +28020,7 @@ }, /turf/open/space, /area/space) -"aZa" = ( +"aXz" = ( /obj/machinery/light/small{ dir = 8 }, @@ -28850,7 +28033,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZb" = ( +"aXA" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (SOUTHWEST)"; icon_state = "conveyor0"; @@ -28860,14 +28043,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, @@ -28877,19 +28060,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 }, @@ -28900,7 +28083,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZh" = ( +"aXG" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -28908,7 +28091,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZi" = ( +"aXH" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -28919,7 +28102,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZj" = ( +"aXI" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -28928,7 +28111,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZk" = ( +"aXJ" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 8 @@ -28940,7 +28123,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZl" = ( +"aXK" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -28948,24 +28131,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 @@ -28973,7 +28156,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZq" = ( +"aXP" = ( /obj/machinery/hydroponics/soil, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -28981,7 +28164,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 @@ -28989,7 +28172,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZs" = ( +"aXR" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light{ dir = 1 @@ -29000,12 +28183,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"; @@ -29021,7 +28204,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZv" = ( +"aXU" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -29029,7 +28212,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZw" = ( +"aXV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -29040,7 +28223,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZx" = ( +"aXW" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -29049,7 +28232,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZy" = ( +"aXX" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 8 @@ -29060,25 +28243,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 @@ -29086,7 +28269,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZD" = ( +"aYc" = ( /obj/structure/table/wood, /obj/item/seeds/apple, /obj/item/seeds/cherry, @@ -29099,7 +28282,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZE" = ( +"aYd" = ( /obj/structure/table/wood, /obj/item/weapon/cultivator, /obj/item/weapon/shovel/spade, @@ -29111,7 +28294,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 @@ -29119,7 +28302,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZG" = ( +"aYf" = ( /obj/machinery/hydroponics/soil, /obj/machinery/airalarm{ dir = 8; @@ -29137,19 +28320,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 }, @@ -29157,7 +28340,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZK" = ( +"aYj" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -29166,7 +28349,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZL" = ( +"aYk" = ( /obj/machinery/light/small{ dir = 1 }, @@ -29174,7 +28357,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"aZM" = ( +"aYl" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -29194,7 +28377,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"aZN" = ( +"aYm" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -29204,7 +28387,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZO" = ( +"aYn" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/camera{ c_tag = "Rehabilitation Dome North"; @@ -29216,7 +28399,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZP" = ( +"aYo" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/machinery/light{ dir = 1 @@ -29227,14 +28410,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 @@ -29245,7 +28428,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZS" = ( +"aYr" = ( /obj/machinery/hydroponics/soil, /obj/machinery/firealarm{ dir = 4; @@ -29258,7 +28441,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"aZT" = ( +"aYs" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -29275,7 +28458,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"aZU" = ( +"aYt" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -29297,7 +28480,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"aZV" = ( +"aYu" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -29309,23 +28492,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 }, @@ -29338,7 +28521,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"; @@ -29346,13 +28529,13 @@ 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" @@ -29361,13 +28544,13 @@ 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 }, @@ -29376,7 +28559,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baf" = ( +"aYE" = ( /obj/structure/flora/ausbushes/fullgrass, /mob/living/simple_animal/butterfly, /turf/open/floor/grass{ @@ -29385,7 +28568,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 @@ -29393,7 +28576,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 @@ -29401,7 +28584,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 @@ -29409,7 +28592,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 @@ -29417,7 +28600,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bak" = ( +"aYJ" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/sign/nosmoking_2{ pixel_x = 32 @@ -29428,12 +28611,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 }, @@ -29442,7 +28625,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)"; @@ -29451,13 +28634,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)"; @@ -29466,7 +28649,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baq" = ( +"aYP" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -29481,7 +28664,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 @@ -29493,7 +28676,7 @@ }, /turf/open/space, /area/space) -"bas" = ( +"aYR" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -29515,21 +28698,21 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"bat" = ( +"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; @@ -29543,7 +28726,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baw" = ( +"aYV" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -29554,12 +28737,12 @@ 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; @@ -29570,7 +28753,7 @@ 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" @@ -29581,7 +28764,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baA" = ( +"aYZ" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -29603,7 +28786,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baB" = ( +"aZa" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29622,7 +28805,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baC" = ( +"aZb" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29645,7 +28828,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baD" = ( +"aZc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29665,7 +28848,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baE" = ( +"aZd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29685,7 +28868,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baF" = ( +"aZe" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -29704,7 +28887,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"baG" = ( +"aZf" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/light{ icon_state = "tube1"; @@ -29716,14 +28899,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 @@ -29731,7 +28914,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 @@ -29739,7 +28922,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 @@ -29747,7 +28930,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baL" = ( +"aZk" = ( /obj/structure/flora/ausbushes/reedbush, /mob/living/simple_animal/butterfly, /turf/open/floor/grass{ @@ -29756,7 +28939,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"baM" = ( +"aZl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -29766,7 +28949,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"; @@ -29774,12 +28957,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"; @@ -29787,7 +28970,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"baQ" = ( +"aZp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -29803,7 +28986,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{ @@ -29813,12 +28996,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)"; @@ -29827,13 +29010,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)"; @@ -29842,12 +29025,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 }, @@ -29860,7 +29043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"baY" = ( +"aZx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -29876,7 +29059,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; @@ -29890,7 +29073,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bba" = ( +"aZz" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -29909,7 +29092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bbb" = ( +"aZA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29932,7 +29115,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbc" = ( +"aZB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29955,7 +29138,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbd" = ( +"aZC" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -29975,7 +29158,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbe" = ( +"aZD" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -29995,7 +29178,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 @@ -30003,13 +29186,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; @@ -30028,7 +29211,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbi" = ( +"aZH" = ( /obj/machinery/light/small{ dir = 4 }, @@ -30036,7 +29219,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 @@ -30044,7 +29227,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbk" = ( +"aZJ" = ( /obj/structure/sink/puddle, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -30052,7 +29235,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{ @@ -30061,10 +29244,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 }, @@ -30079,24 +29262,24 @@ 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 }, @@ -30111,12 +29294,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"; @@ -30124,13 +29307,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" @@ -30143,17 +29326,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; @@ -30171,7 +29354,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bby" = ( +"aZX" = ( /obj/machinery/light{ dir = 8 }, @@ -30182,13 +29365,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; @@ -30199,12 +29382,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" @@ -30213,13 +29396,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 @@ -30227,7 +29410,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbF" = ( +"bae" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -30251,7 +29434,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bbG" = ( +"baf" = ( /obj/machinery/power/apc{ dir = 1; name = "Port Asteroid Maintence APC"; @@ -30269,7 +29452,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; @@ -30282,7 +29465,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bbI" = ( +"bah" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/machinery/light, /turf/open/floor/grass{ @@ -30291,17 +29474,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"; @@ -30314,13 +29497,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; @@ -30334,7 +29517,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbO" = ( +"ban" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -30347,7 +29530,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bbP" = ( +"bao" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -30371,13 +29554,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 }, @@ -30391,7 +29574,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"; @@ -30399,7 +29582,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 @@ -30408,7 +29591,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bbU" = ( +"bat" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -30419,29 +29602,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; @@ -30452,11 +29635,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"; @@ -30469,7 +29652,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bca" = ( +"baz" = ( /obj/machinery/power/apc{ dir = 1; name = "Bar APC"; @@ -30484,7 +29667,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcb" = ( +"baA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30495,7 +29678,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcc" = ( +"baB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30507,7 +29690,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcd" = ( +"baC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30517,7 +29700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bce" = ( +"baD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30536,7 +29719,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcf" = ( +"baE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -30550,7 +29733,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcg" = ( +"baF" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -30565,12 +29748,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" @@ -30579,7 +29762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcj" = ( +"baI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30594,7 +29777,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 @@ -30602,7 +29785,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcl" = ( +"baK" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ @@ -30616,7 +29799,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcm" = ( +"baL" = ( /obj/machinery/power/apc{ dir = 8; name = "Rehabilitation Dome APC"; @@ -30633,23 +29816,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 }, @@ -30671,7 +29854,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcr" = ( +"baQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30688,7 +29871,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcs" = ( +"baR" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -30698,7 +29881,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"; @@ -30713,12 +29896,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; @@ -30733,7 +29916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bcw" = ( +"baV" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -30749,7 +29932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bcx" = ( +"baW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -30762,18 +29945,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; @@ -30783,7 +29955,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bcA" = ( +"baY" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -30792,7 +29964,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"; @@ -30800,7 +29972,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bcC" = ( +"bba" = ( /obj/machinery/camera{ c_tag = "Bar Backroom"; dir = 5; @@ -30810,12 +29982,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 }, @@ -30823,7 +29995,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 @@ -30832,7 +30004,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcG" = ( +"bbe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -30840,7 +30012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bcH" = ( +"bbf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -30853,14 +30025,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 }, @@ -30868,13 +30040,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" }, @@ -30882,7 +30054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bcM" = ( +"bbk" = ( /obj/machinery/power/apc{ dir = 1; name = "Kitchen APC"; @@ -30897,12 +30069,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"; @@ -30915,7 +30087,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcP" = ( +"bbn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -30925,7 +30097,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcQ" = ( +"bbo" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -30938,7 +30110,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcR" = ( +"bbp" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -30952,7 +30124,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcS" = ( +"bbq" = ( /obj/machinery/light{ dir = 1 }, @@ -30969,7 +30141,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bcT" = ( +"bbr" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -30979,13 +30151,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 }, @@ -30995,13 +30167,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; @@ -31013,7 +30185,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, @@ -31021,7 +30193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bcZ" = ( +"bbx" = ( /obj/structure/table, /obj/item/stack/sheet/rglass{ amount = 20 @@ -31030,7 +30202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bda" = ( +"bby" = ( /obj/machinery/camera{ c_tag = "EVA Equipment"; dir = 6; @@ -31040,13 +30212,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 }, @@ -31054,7 +30226,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)"; @@ -31063,21 +30235,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, @@ -31085,7 +30243,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, @@ -31093,7 +30251,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, @@ -31102,13 +30260,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; @@ -31119,13 +30277,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; @@ -31136,7 +30294,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdm" = ( +"bbJ" = ( /mob/living/simple_animal/hostile/retaliate/goat{ name = "Pete" }, @@ -31144,7 +30302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bdn" = ( +"bbK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -31158,7 +30316,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bdo" = ( +"bbL" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31174,7 +30332,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdp" = ( +"bbM" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -31184,7 +30342,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bdq" = ( +"bbN" = ( /obj/machinery/door/airlock/glass{ name = "Rehabilitation Dome" }, @@ -31194,14 +30352,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"; @@ -31221,7 +30379,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bdt" = ( +"bbQ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -31237,7 +30395,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 @@ -31252,22 +30410,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 }, @@ -31281,7 +30439,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdx" = ( +"bbU" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -31292,7 +30450,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdy" = ( +"bbV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -31309,11 +30467,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 }, @@ -31324,11 +30478,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 }, @@ -31345,7 +30503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdB" = ( +"bbY" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -31360,7 +30518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bdC" = ( +"bbZ" = ( /obj/structure/table, /obj/item/stack/sheet/plasteel/fifty{ amount = 20 @@ -31369,12 +30527,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 }, @@ -31382,7 +30540,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 @@ -31391,13 +30549,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 }, @@ -31410,7 +30568,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdI" = ( +"bcf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -31424,7 +30582,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdJ" = ( +"bcg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -31445,7 +30603,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bdK" = ( +"bch" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -31454,13 +30612,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{ @@ -31469,7 +30627,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bdN" = ( +"bck" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plating{ @@ -31478,26 +30636,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"; @@ -31513,7 +30652,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" @@ -31523,32 +30662,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{ @@ -31561,7 +30687,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{ @@ -31572,7 +30698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bdV" = ( +"bcq" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -31588,14 +30714,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"; @@ -31610,7 +30736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bdY" = ( +"bct" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -31618,13 +30744,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; @@ -31636,7 +30762,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"beb" = ( +"bcw" = ( /obj/machinery/gibber, /obj/machinery/light/small{ dir = 4 @@ -31645,13 +30771,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"; @@ -31663,14 +30789,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"; @@ -31680,7 +30806,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beg" = ( +"bcB" = ( /turf/open/floor/plasteel/neutral/corner{ tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; @@ -31690,7 +30816,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beh" = ( +"bcC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/firealarm{ dir = 4; @@ -31705,7 +30831,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{ @@ -31719,7 +30845,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 @@ -31734,7 +30860,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 @@ -31747,7 +30873,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bel" = ( +"bcG" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31760,50 +30886,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; @@ -31814,7 +30940,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; @@ -31824,7 +30950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bev" = ( +"bcQ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -31832,7 +30958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bew" = ( +"bcR" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small{ dir = 8 @@ -31841,7 +30967,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; @@ -31852,12 +30978,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"; @@ -31872,7 +30998,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"beA" = ( +"bcV" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -31885,7 +31011,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"beB" = ( +"bcW" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -31897,14 +31023,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; @@ -31916,7 +31042,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"beE" = ( +"bcZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -31931,7 +31057,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, @@ -31942,7 +31068,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{ @@ -31956,21 +31082,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{ @@ -31980,7 +31106,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"; @@ -31992,7 +31118,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; @@ -32007,13 +31133,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; @@ -32024,13 +31150,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 @@ -32041,7 +31167,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beQ" = ( +"bdl" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -32052,7 +31178,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beR" = ( +"bdm" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -32063,7 +31189,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beS" = ( +"bdn" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -32074,7 +31200,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beT" = ( +"bdo" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -32089,7 +31215,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beU" = ( +"bdp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -32103,7 +31229,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beV" = ( +"bdq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -32113,7 +31239,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beW" = ( +"bdr" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHEAST)"; icon_state = "neutral"; @@ -32123,7 +31249,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"beX" = ( +"bds" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -32140,7 +31266,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{ @@ -32155,7 +31281,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, @@ -32174,7 +31300,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfa" = ( +"bdv" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -32183,7 +31309,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)"; @@ -32192,7 +31318,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 @@ -32206,33 +31332,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; @@ -32244,7 +31370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bfg" = ( +"bdB" = ( /obj/structure/rack, /obj/structure/window/reinforced{ dir = 8 @@ -32254,24 +31380,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; @@ -32286,32 +31417,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, @@ -32319,7 +31435,7 @@ 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{ @@ -32336,7 +31452,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{ @@ -32346,7 +31462,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, @@ -32360,12 +31476,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; @@ -32378,7 +31489,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bfr" = ( +"bdL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -32390,46 +31501,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; @@ -32445,22 +31517,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; @@ -32474,7 +31546,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfx" = ( +"bdP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -32486,7 +31558,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfy" = ( +"bdQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -32506,7 +31578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bfz" = ( +"bdR" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -32515,7 +31587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfA" = ( +"bdS" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -32524,7 +31596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfB" = ( +"bdT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -32532,7 +31604,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; @@ -32543,13 +31615,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; @@ -32560,7 +31626,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bfF" = ( +"bdW" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -32573,32 +31639,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{ @@ -32607,7 +31673,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfL" = ( +"bec" = ( /obj/structure/table/wood, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -32615,7 +31681,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfM" = ( +"bed" = ( /obj/structure/chair/stool, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -32623,7 +31689,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfN" = ( +"bee" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -32634,7 +31700,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfO" = ( +"bef" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -32649,7 +31715,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfP" = ( +"beg" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -32660,7 +31726,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bfQ" = ( +"beh" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (SOUTHWEST)"; icon_state = "neutral"; @@ -32668,7 +31734,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"; @@ -32676,7 +31742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfS" = ( +"bej" = ( /obj/machinery/light{ dir = 1 }, @@ -32687,7 +31753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfT" = ( +"bek" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -32698,7 +31764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfU" = ( +"bel" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -32711,7 +31777,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfV" = ( +"bem" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -32729,7 +31795,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfW" = ( +"ben" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -32747,7 +31813,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfX" = ( +"beo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -32758,7 +31824,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfY" = ( +"bep" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -32769,7 +31835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bfZ" = ( +"beq" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -32784,7 +31850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bga" = ( +"ber" = ( /obj/machinery/light{ dir = 1 }, @@ -32798,7 +31864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgb" = ( +"bes" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -32809,12 +31875,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 @@ -32826,7 +31892,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"; @@ -32836,7 +31902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgf" = ( +"bew" = ( /obj/structure/cable{ icon_state = "0-2"; d2 = 2 @@ -32847,13 +31913,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; @@ -32864,7 +31941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgi" = ( +"bez" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -32880,7 +31957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bgj" = ( +"beA" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -32897,20 +31974,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; @@ -32922,48 +31999,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{ @@ -32972,14 +32049,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, @@ -32988,14 +32065,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"; @@ -33010,13 +32087,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"; @@ -33031,7 +32108,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{ @@ -33040,7 +32117,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgC" = ( +"beT" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/light{ dir = 4; @@ -33052,7 +32129,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{ @@ -33064,7 +32141,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgE" = ( +"beV" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -33079,7 +32156,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bgF" = ( +"beW" = ( /turf/open/floor/plasteel/neutral/side{ tag = "icon-neutral (NORTHEAST)"; icon_state = "neutral"; @@ -33087,19 +32164,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 }, @@ -33119,7 +32196,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgJ" = ( +"bfa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -33134,7 +32211,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgK" = ( +"bfb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -33148,7 +32225,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgL" = ( +"bfc" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -33166,7 +32243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgM" = ( +"bfd" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33180,7 +32257,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgN" = ( +"bfe" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33194,7 +32271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgO" = ( +"bff" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -33214,7 +32291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgP" = ( +"bfg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33225,7 +32302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bgQ" = ( +"bfh" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -33237,7 +32314,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)"; @@ -33246,7 +32323,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgS" = ( +"bfj" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -33260,7 +32337,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)"; @@ -33269,7 +32346,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bgU" = ( +"bfl" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -33282,7 +32359,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)"; @@ -33291,22 +32368,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; @@ -33316,22 +32394,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" @@ -33340,7 +32418,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bha" = ( +"bfr" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -33348,25 +32426,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 }, @@ -33374,25 +32452,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 }, @@ -33400,7 +32478,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bhj" = ( +"bfA" = ( /obj/structure/window{ tag = "icon-window (EAST)"; icon_state = "window"; @@ -33413,7 +32491,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bhk" = ( +"bfB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33427,7 +32505,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bhl" = ( +"bfC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33435,7 +32513,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bhm" = ( +"bfD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -33445,7 +32523,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; @@ -33457,7 +32535,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, @@ -33466,7 +32544,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, @@ -33474,13 +32552,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 }, @@ -33488,7 +32566,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; @@ -33508,7 +32586,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, @@ -33517,7 +32595,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhu" = ( +"bfL" = ( /obj/structure/table, /obj/structure/table, /obj/machinery/reagentgrinder, @@ -33530,7 +32608,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhv" = ( +"bfM" = ( /obj/machinery/processor, /obj/machinery/camera{ c_tag = "Kitchen" @@ -33539,7 +32617,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; @@ -33550,7 +32628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhx" = ( +"bfO" = ( /obj/structure/sink/kitchen{ pixel_y = 32 }, @@ -33558,7 +32636,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhy" = ( +"bfP" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, @@ -33566,7 +32644,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bhz" = ( +"bfQ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -33582,7 +32660,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bhA" = ( +"bfR" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/camera{ c_tag = "Rehabilitation Dome South 2"; @@ -33594,7 +32672,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhB" = ( +"bfS" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/airalarm{ dir = 1; @@ -33607,7 +32685,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhC" = ( +"bfT" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/machinery/firealarm{ dir = 1; @@ -33620,7 +32698,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhD" = ( +"bfU" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/sign/nosmoking_2{ pixel_y = -32 @@ -33631,7 +32709,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhE" = ( +"bfV" = ( /obj/machinery/light, /turf/open/floor/grass{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -33639,7 +32717,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhF" = ( +"bfW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -33656,7 +32734,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhG" = ( +"bfX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33676,7 +32754,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhH" = ( +"bfY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33688,7 +32766,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhI" = ( +"bfZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -33708,7 +32786,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"bhJ" = ( +"bga" = ( /obj/structure/sign/securearea{ pixel_x = 32; pixel_y = -32 @@ -33718,7 +32796,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; @@ -33731,7 +32809,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)"; @@ -33744,14 +32822,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; @@ -33761,7 +32839,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhO" = ( +"bgf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -33775,12 +32853,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)"; @@ -33791,7 +32869,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhR" = ( +"bgi" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -33803,7 +32881,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhS" = ( +"bgj" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -33827,7 +32905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhT" = ( +"bgk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33844,7 +32922,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bhU" = ( +"bgl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33862,7 +32940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhV" = ( +"bgm" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33878,7 +32956,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhW" = ( +"bgn" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33897,7 +32975,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhX" = ( +"bgo" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -33908,7 +32986,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhY" = ( +"bgp" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -33928,7 +33006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"bhZ" = ( +"bgq" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -33946,13 +33024,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 }, @@ -33962,7 +33040,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bic" = ( +"bgt" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -33982,7 +33060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bid" = ( +"bgu" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -34002,7 +33080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bie" = ( +"bgv" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -34026,7 +33104,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bif" = ( +"bgw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -34048,7 +33126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"big" = ( +"bgx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34067,7 +33145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bih" = ( +"bgy" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34092,7 +33170,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bii" = ( +"bgz" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34114,7 +33192,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bij" = ( +"bgA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34135,7 +33213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bik" = ( +"bgB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34155,7 +33233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bil" = ( +"bgC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34165,7 +33243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bim" = ( +"bgD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34179,7 +33257,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" @@ -34193,7 +33271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bio" = ( +"bgF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34206,7 +33284,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bip" = ( +"bgG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34218,7 +33296,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"biq" = ( +"bgH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34235,7 +33313,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bir" = ( +"bgI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -34248,7 +33326,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bis" = ( +"bgJ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -34260,18 +33338,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"; @@ -34281,7 +33354,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 @@ -34291,7 +33364,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bix" = ( +"bgN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34304,7 +33377,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"biy" = ( +"bgO" = ( /obj/machinery/camera{ c_tag = "Bar"; dir = 5; @@ -34318,7 +33391,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biz" = ( +"bgP" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -34328,7 +33401,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 @@ -34338,7 +33411,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biB" = ( +"bgR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -34346,7 +33419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biC" = ( +"bgS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -34357,7 +33430,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; @@ -34376,7 +33449,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"biE" = ( +"bgU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -34396,7 +33469,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biF" = ( +"bgV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -34413,7 +33486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biG" = ( +"bgW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -34429,7 +33502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biH" = ( +"bgX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -34445,7 +33518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biI" = ( +"bgY" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -34453,7 +33526,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biJ" = ( +"bgZ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -34465,7 +33538,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"biK" = ( +"bha" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34484,7 +33557,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"biL" = ( +"bhb" = ( /obj/machinery/door/airlock/atmos{ name = "Service Atmospherics Checkpoint"; req_access_txt = "24" @@ -34495,7 +33568,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)"; @@ -34504,7 +33577,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)"; @@ -34513,12 +33586,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; @@ -34534,7 +33607,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"biQ" = ( +"bhg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -34550,7 +33623,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"biR" = ( +"bhh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -34561,13 +33634,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 }, @@ -34575,7 +33648,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; @@ -34586,7 +33659,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/storage/eva) -"biV" = ( +"bhl" = ( /obj/machinery/camera{ c_tag = "EVA Storage"; dir = 9; @@ -34599,13 +33672,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"; @@ -34613,7 +33686,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"biY" = ( +"bho" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34625,7 +33698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"biZ" = ( +"bhp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -34635,7 +33708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bja" = ( +"bhq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -34646,7 +33719,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; @@ -34662,7 +33735,7 @@ 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; @@ -34679,7 +33752,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjd" = ( +"bht" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -34694,7 +33767,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bje" = ( +"bhu" = ( /obj/machinery/light/small{ dir = 8 }, @@ -34704,19 +33777,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"; @@ -34732,7 +33799,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{ @@ -34741,7 +33808,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bjj" = ( +"bhy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -34752,7 +33819,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bjk" = ( +"bhz" = ( /obj/structure/rack, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -34763,7 +33830,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bjl" = ( +"bhA" = ( /obj/structure/window{ tag = "icon-window (EAST)"; icon_state = "window"; @@ -34779,7 +33846,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"bjm" = ( +"bhB" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -34788,7 +33855,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; @@ -34800,7 +33867,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bjo" = ( +"bhD" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -34808,52 +33875,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{ @@ -34864,18 +33916,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; @@ -34897,7 +33949,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bjz" = ( +"bhN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -34907,7 +33959,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bjA" = ( +"bhO" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/clothing/glasses/meson, @@ -34920,33 +33972,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"; @@ -34960,7 +34012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bjG" = ( +"bhU" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -34971,7 +34023,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)"; @@ -34980,7 +34032,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bjI" = ( +"bhW" = ( /obj/structure/table, /obj/item/stack/rods{ amount = 50 @@ -34993,21 +34045,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; @@ -35017,7 +34069,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{ @@ -35027,13 +34079,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 }, @@ -35041,7 +34093,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjP" = ( +"bid" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35049,7 +34101,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjQ" = ( +"bie" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35063,13 +34115,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 @@ -35078,7 +34130,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjT" = ( +"bih" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35092,7 +34144,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjU" = ( +"bii" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35104,7 +34156,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bjV" = ( +"bij" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -35115,12 +34167,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" @@ -35129,12 +34181,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; @@ -35146,7 +34198,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 @@ -35154,7 +34206,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkb" = ( +"bip" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -35166,20 +34218,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"; @@ -35195,7 +34234,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bke" = ( +"bir" = ( /obj/machinery/light{ dir = 8 }, @@ -35208,7 +34247,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkf" = ( +"bis" = ( /obj/structure/chair{ dir = 4 }, @@ -35217,7 +34256,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkg" = ( +"bit" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -35227,7 +34266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkh" = ( +"biu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35239,7 +34278,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bki" = ( +"biv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35250,7 +34289,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkj" = ( +"biw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -35263,7 +34302,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 @@ -35275,7 +34314,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bkl" = ( +"biy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -35288,7 +34327,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 @@ -35301,13 +34340,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; @@ -35317,21 +34356,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{ @@ -35342,7 +34381,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 @@ -35367,7 +34406,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkt" = ( +"biG" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -35378,7 +34417,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bku" = ( +"biH" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -35392,49 +34431,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 @@ -35443,26 +34482,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 @@ -35475,14 +34514,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 @@ -35491,7 +34530,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, @@ -35499,7 +34538,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkK" = ( +"biX" = ( /obj/structure/chair{ dir = 8 }, @@ -35507,7 +34546,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkL" = ( +"biY" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -35516,7 +34555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bkM" = ( +"biZ" = ( /obj/structure/chair{ dir = 8 }, @@ -35527,14 +34566,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 @@ -35543,18 +34575,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; @@ -35566,7 +34598,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bkS" = ( +"bje" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -35579,7 +34611,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bkT" = ( +"bjf" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -35596,7 +34628,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkU" = ( +"bjg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -35611,7 +34643,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkV" = ( +"bjh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35627,7 +34659,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkW" = ( +"bji" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35646,7 +34678,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkX" = ( +"bjj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35665,7 +34697,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkY" = ( +"bjk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35685,7 +34717,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bkZ" = ( +"bjl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35702,7 +34734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bla" = ( +"bjm" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35717,7 +34749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"blb" = ( +"bjn" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -35737,7 +34769,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, @@ -35745,32 +34777,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; @@ -35780,7 +34812,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{ @@ -35790,7 +34822,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, @@ -35798,21 +34830,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; @@ -35829,7 +34861,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bln" = ( +"bjz" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -35839,7 +34871,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blo" = ( +"bjA" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -35857,7 +34889,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blp" = ( +"bjB" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, @@ -35869,24 +34901,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 }, @@ -35898,14 +34930,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{ @@ -35925,7 +34957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"blw" = ( +"bjI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -35943,7 +34975,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, @@ -35955,7 +34987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bly" = ( +"bjK" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -35967,12 +34999,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 @@ -35981,14 +35008,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; @@ -36009,7 +35036,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"blD" = ( +"bjO" = ( /obj/structure/bed, /obj/item/weapon/bedsheet, /obj/machinery/airalarm{ @@ -36021,7 +35048,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"blE" = ( +"bjP" = ( /obj/machinery/light/small{ dir = 1 }, @@ -36033,13 +35060,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{ @@ -36049,7 +35076,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, @@ -36058,12 +35085,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 @@ -36072,7 +35099,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, @@ -36080,13 +35107,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 }, @@ -36097,34 +35124,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; @@ -36137,7 +35148,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"blS" = ( +"bkb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -36145,7 +35156,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"blT" = ( +"bkc" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -36156,7 +35167,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blU" = ( +"bkd" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -36177,7 +35188,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blV" = ( +"bke" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36193,7 +35204,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blW" = ( +"bkf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36208,7 +35219,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blX" = ( +"bkg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36226,7 +35237,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blY" = ( +"bkh" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -36245,7 +35256,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"blZ" = ( +"bki" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36261,7 +35272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bma" = ( +"bkj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36280,7 +35291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmb" = ( +"bkk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36297,7 +35308,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmc" = ( +"bkl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36311,7 +35322,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmd" = ( +"bkm" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36321,7 +35332,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bme" = ( +"bkn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36335,7 +35346,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmf" = ( +"bko" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36347,7 +35358,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmg" = ( +"bkp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36364,7 +35375,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmh" = ( +"bkq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -36377,7 +35388,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmi" = ( +"bkr" = ( /obj/structure/table/wood, /obj/structure/cable/orange{ d1 = 4; @@ -36388,7 +35399,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; @@ -36402,7 +35413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmk" = ( +"bkt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -36412,20 +35423,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; @@ -36436,7 +35447,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 @@ -36456,7 +35467,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{ @@ -36465,7 +35476,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmq" = ( +"bkz" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ icon_state = "connector_map"; dir = 8 @@ -36480,7 +35491,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmr" = ( +"bkA" = ( /obj/machinery/light/small{ dir = 4 }, @@ -36488,12 +35499,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; @@ -36512,7 +35523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmu" = ( +"bkD" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36523,7 +35534,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmv" = ( +"bkE" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -36542,7 +35553,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmw" = ( +"bkF" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -36555,7 +35566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bmx" = ( +"bkG" = ( /obj/machinery/light/small{ dir = 8 }, @@ -36563,18 +35574,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; @@ -36584,12 +35595,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; @@ -36599,7 +35605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bmD" = ( +"bkL" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -36608,7 +35614,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bmE" = ( +"bkM" = ( /obj/machinery/vending/wallmed{ pixel_x = 24 }, @@ -36616,20 +35622,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, @@ -36637,13 +35643,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 }, @@ -36656,23 +35662,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; @@ -36688,7 +35684,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bmN" = ( +"bkU" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -36699,12 +35695,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; @@ -36714,7 +35710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmQ" = ( +"bkX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -36728,7 +35724,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bmR" = ( +"bkY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36740,7 +35736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmS" = ( +"bkZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36748,7 +35744,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmT" = ( +"bla" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36757,7 +35753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bmU" = ( +"blb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -36766,13 +35762,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 }, @@ -36780,20 +35776,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; @@ -36814,13 +35810,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; @@ -36836,7 +35836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnb" = ( +"bli" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36850,7 +35850,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnc" = ( +"blj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -36867,26 +35867,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; @@ -36904,7 +35904,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnf" = ( +"blm" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -36917,7 +35917,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bng" = ( +"bln" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -36928,7 +35928,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnh" = ( +"blo" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -36938,7 +35938,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bni" = ( +"blp" = ( /obj/machinery/light, /obj/structure/cable{ d1 = 4; @@ -36950,7 +35950,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bnj" = ( +"blq" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -36960,7 +35960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bnk" = ( +"blr" = ( /obj/machinery/computer/station_alert, /obj/machinery/requests_console{ announcementConsole = 1; @@ -36974,13 +35974,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; @@ -36993,7 +35993,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnn" = ( +"blu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -37012,7 +36012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bno" = ( +"blv" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37032,17 +36032,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 }, @@ -37050,11 +36046,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; @@ -37074,7 +36074,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnr" = ( +"bly" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37091,7 +36091,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bns" = ( +"blz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37109,7 +36109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnt" = ( +"blA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37123,7 +36123,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnu" = ( +"blB" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -37147,7 +36147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bnv" = ( +"blC" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -37169,7 +36169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnw" = ( +"blD" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37183,7 +36183,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnx" = ( +"blE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37203,7 +36203,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bny" = ( +"blF" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37216,7 +36216,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" }, @@ -37224,7 +36224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnz" = ( +"blG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -37242,7 +36242,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnA" = ( +"blH" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -37265,7 +36265,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnB" = ( +"blI" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -37282,7 +36282,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bnC" = ( +"blJ" = ( /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -37297,7 +36297,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"bnD" = ( +"blK" = ( /obj/machinery/button/door{ id = "medp1"; name = "Privacy Shutters"; @@ -37307,13 +36307,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; @@ -37323,7 +36323,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/patients_rooms) -"bnG" = ( +"blN" = ( /obj/machinery/button/door{ id = "medp2"; name = "Privacy Shutters"; @@ -37333,27 +36333,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 }, @@ -37366,7 +36366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bnL" = ( +"blS" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -37375,7 +36375,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, @@ -37383,7 +36383,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" @@ -37393,7 +36393,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, @@ -37402,30 +36402,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; @@ -37435,7 +36425,7 @@ /area/mine/unexplored{ name = "Civilian Asteroid" }) -"bnT" = ( +"blZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -37448,7 +36438,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bnU" = ( +"bma" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -37457,7 +36447,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnV" = ( +"bmb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37465,7 +36455,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnW" = ( +"bmc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37474,7 +36464,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bnX" = ( +"bmd" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -37484,7 +36474,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; @@ -37496,7 +36486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bnZ" = ( +"bmf" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -37505,7 +36495,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"boa" = ( +"bmg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -37514,7 +36504,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bob" = ( +"bmh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -37522,19 +36512,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; @@ -37551,7 +36541,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 @@ -37565,7 +36555,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"bog" = ( +"bmm" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -37574,7 +36564,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"boh" = ( +"bmn" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -37588,7 +36578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"boi" = ( +"bmo" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37596,7 +36586,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/kitchen) -"boj" = ( +"bmp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37617,7 +36607,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bok" = ( +"bmq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37636,7 +36626,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bol" = ( +"bmr" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37654,7 +36644,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bom" = ( +"bms" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37675,7 +36665,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bon" = ( +"bmt" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37687,7 +36677,7 @@ }, /turf/open/space, /area/space) -"boo" = ( +"bmu" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37700,7 +36690,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"bop" = ( +"bmv" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37717,7 +36707,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boq" = ( +"bmw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37733,7 +36723,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bor" = ( +"bmx" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -37750,7 +36740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bos" = ( +"bmy" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -37771,7 +36761,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bot" = ( +"bmz" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -37784,7 +36774,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"; @@ -37798,7 +36788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bov" = ( +"bmB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -37809,7 +36799,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bow" = ( +"bmC" = ( /obj/structure/reflector/single{ anchored = 1; dir = 4; @@ -37820,7 +36810,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"box" = ( +"bmD" = ( /obj/structure/reflector/box{ anchored = 1 }, @@ -37828,7 +36818,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"boy" = ( +"bmE" = ( /obj/structure/reflector/single{ anchored = 1; dir = 1; @@ -37839,7 +36829,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{ @@ -37849,7 +36839,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boA" = ( +"bmG" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -37862,7 +36852,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boB" = ( +"bmH" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -37871,7 +36861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boC" = ( +"bmI" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -37879,7 +36869,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boD" = ( +"bmJ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -37895,7 +36885,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boE" = ( +"bmK" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -37915,7 +36905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boF" = ( +"bmL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -37934,7 +36924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boG" = ( +"bmM" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -37954,7 +36944,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"boH" = ( +"bmN" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37970,7 +36960,7 @@ }, /turf/open/space, /area/space) -"boI" = ( +"bmO" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 2; @@ -37986,7 +36976,7 @@ }, /turf/open/space, /area/space) -"boJ" = ( +"bmP" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ dir = 4 @@ -38001,7 +36991,7 @@ }, /turf/open/space, /area/space) -"boK" = ( +"bmQ" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -38021,7 +37011,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boL" = ( +"bmR" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -38039,7 +37029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boM" = ( +"bmS" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -38059,7 +37049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boN" = ( +"bmT" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -38076,7 +37066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boO" = ( +"bmU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38085,7 +37075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"boP" = ( +"bmV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -38095,16 +37085,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; @@ -38116,21 +37097,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 }, @@ -38138,13 +37105,13 @@ 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; @@ -38162,13 +37129,13 @@ 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, @@ -38179,7 +37146,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" @@ -38189,7 +37156,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, @@ -38201,7 +37168,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, @@ -38212,7 +37179,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" @@ -38222,7 +37189,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, @@ -38234,13 +37201,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; @@ -38257,13 +37224,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 @@ -38272,7 +37239,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, @@ -38298,7 +37265,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; @@ -38308,31 +37275,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 }, @@ -38340,7 +37289,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpo" = ( +"bnp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38353,7 +37302,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpp" = ( +"bnq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38361,7 +37310,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpq" = ( +"bnr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38375,7 +37324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bpr" = ( +"bns" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -38383,7 +37332,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bps" = ( +"bnt" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -38393,14 +37342,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" @@ -38411,7 +37360,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bpv" = ( +"bnw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -38419,7 +37368,7 @@ /area/mine/unexplored{ name = "Medical Asteroid" }) -"bpw" = ( +"bnx" = ( /obj/structure/disposaloutlet{ dir = 4 }, @@ -38430,7 +37379,7 @@ /area/mine/unexplored{ name = "Medical Asteroid" }) -"bpx" = ( +"bny" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -38439,7 +37388,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"; @@ -38450,7 +37399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpz" = ( +"bnA" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -38460,7 +37409,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpA" = ( +"bnB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -38478,7 +37427,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpB" = ( +"bnC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38491,7 +37440,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpC" = ( +"bnD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38508,7 +37457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpD" = ( +"bnE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -38528,7 +37477,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bpE" = ( +"bnF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -38545,7 +37494,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bpF" = ( +"bnG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -38566,7 +37515,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bpG" = ( +"bnH" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -38583,7 +37532,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bpH" = ( +"bnI" = ( /obj/machinery/door/airlock/glass{ name = "Bar" }, @@ -38594,7 +37543,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/bar) -"bpI" = ( +"bnJ" = ( /obj/machinery/door/airlock/glass{ name = "Bar" }, @@ -38603,13 +37552,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 @@ -38618,7 +37567,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 @@ -38626,7 +37575,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bpM" = ( +"bnN" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38645,7 +37594,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"bpN" = ( +"bnO" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38665,7 +37614,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"bpO" = ( +"bnP" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38684,7 +37633,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"bpP" = ( +"bnQ" = ( /obj/machinery/light{ dir = 4 }, @@ -38696,7 +37645,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"; @@ -38704,7 +37653,7 @@ }, /turf/closed/wall/r_wall, /area/engine/supermatter) -"bpR" = ( +"bnS" = ( /obj/machinery/door/airlock/glass_engineering{ name = "Laser Room"; req_access_txt = "10" @@ -38719,7 +37668,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, @@ -38727,7 +37676,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" @@ -38736,7 +37685,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bpU" = ( +"bnV" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -38750,7 +37699,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{ @@ -38773,7 +37722,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"bpW" = ( +"bnX" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38796,7 +37745,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"bpX" = ( +"bnY" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/cable{ @@ -38819,7 +37768,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"bpY" = ( +"bnZ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -38829,7 +37778,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; @@ -38839,7 +37788,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bqa" = ( +"bob" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -38855,12 +37804,12 @@ 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, @@ -38872,7 +37821,7 @@ 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; @@ -38889,12 +37838,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; @@ -38907,7 +37856,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)"; @@ -38916,7 +37865,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)"; @@ -38925,7 +37874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bqi" = ( +"boj" = ( /obj/machinery/power/apc{ dir = 1; name = "Morgue APC"; @@ -38943,7 +37892,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"; @@ -38951,13 +37900,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" @@ -38967,7 +37916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bqm" = ( +"bon" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = ""; name = "Surgery Observation"; @@ -38978,7 +37927,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/surgery) -"bqn" = ( +"boo" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -38989,15 +37938,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 }, @@ -39005,7 +37946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqq" = ( +"boq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39014,7 +37955,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqr" = ( +"bor" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -39023,13 +37964,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 }, @@ -39041,7 +37976,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" @@ -39056,7 +37991,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqv" = ( +"bou" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39067,7 +38002,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; @@ -39080,7 +38015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqx" = ( +"bow" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -39088,7 +38023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqy" = ( +"box" = ( /obj/structure/table, /obj/machinery/reagentgrinder, /obj/machinery/light{ @@ -39102,7 +38037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqz" = ( +"boy" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -39110,7 +38045,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bqA" = ( +"boz" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -39125,24 +38060,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" @@ -39153,14 +38071,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 @@ -39170,7 +38088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bqG" = ( +"boD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -39180,24 +38098,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; @@ -39207,7 +38125,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqL" = ( +"boI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -39233,7 +38151,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 @@ -39257,7 +38175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqN" = ( +"boK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39270,7 +38188,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqO" = ( +"boL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39288,7 +38206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqP" = ( +"boM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -39305,7 +38223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqQ" = ( +"boN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39313,7 +38231,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqR" = ( +"boO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39327,7 +38245,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqS" = ( +"boP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -39338,7 +38256,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqT" = ( +"boQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -39349,7 +38267,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"; @@ -39357,7 +38275,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 @@ -39372,7 +38290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqW" = ( +"boT" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -39387,7 +38305,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqX" = ( +"boU" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -39399,7 +38317,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bqY" = ( +"boV" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -39414,7 +38332,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 @@ -39426,7 +38344,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bra" = ( +"boX" = ( /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 1" }, @@ -39437,7 +38355,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 @@ -39452,7 +38370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brc" = ( +"boZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -39463,7 +38381,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brd" = ( +"bpa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -39474,7 +38392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bre" = ( +"bpb" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -39503,7 +38421,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brf" = ( +"bpc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39518,7 +38436,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brg" = ( +"bpd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39536,7 +38454,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brh" = ( +"bpe" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39548,7 +38466,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bri" = ( +"bpf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -39560,7 +38478,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brj" = ( +"bpg" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -39572,7 +38490,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"brk" = ( +"bph" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -39581,7 +38499,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"brl" = ( +"bpi" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -39593,13 +38511,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; @@ -39614,7 +38532,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bro" = ( +"bpl" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -39643,7 +38561,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brp" = ( +"bpm" = ( /obj/machinery/camera{ c_tag = "Engineering Asteroid Hallway 6" }, @@ -39655,7 +38573,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 @@ -39670,7 +38588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brr" = ( +"bpo" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -39681,7 +38599,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"brs" = ( +"bpp" = ( /obj/machinery/light{ dir = 1 }, @@ -39692,7 +38610,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 @@ -39707,7 +38625,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; @@ -39720,7 +38638,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; @@ -39738,7 +38656,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" @@ -39755,7 +38673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brx" = ( +"bpu" = ( /obj/structure/table, /obj/machinery/airalarm{ frequency = 1439; @@ -39776,7 +38694,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bry" = ( +"bpv" = ( /obj/machinery/recharger, /obj/structure/table, /obj/machinery/light{ @@ -39791,7 +38709,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 @@ -39810,7 +38728,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"brA" = ( +"bpx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39822,7 +38740,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, @@ -39837,7 +38755,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)"; @@ -39846,7 +38764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brD" = ( +"bpA" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -39864,7 +38782,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brE" = ( +"bpB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -39872,7 +38790,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brF" = ( +"bpC" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -39887,7 +38805,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brG" = ( +"bpD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39901,7 +38819,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brH" = ( +"bpE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39912,7 +38830,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brI" = ( +"bpF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39930,7 +38848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brJ" = ( +"bpG" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39943,7 +38861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brK" = ( +"bpH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39959,7 +38877,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brL" = ( +"bpI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -39977,7 +38895,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brM" = ( +"bpJ" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -39988,7 +38906,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 @@ -39997,7 +38915,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brO" = ( +"bpL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -40008,7 +38926,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"brP" = ( +"bpM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -40016,24 +38934,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{ @@ -40046,7 +38964,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, @@ -40054,7 +38972,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, @@ -40078,15 +38996,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"; @@ -40094,19 +39012,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"; @@ -40114,20 +39032,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 }, @@ -40143,7 +39061,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bsf" = ( +"bqc" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/mechanical, /obj/structure/sign/poster/random{ @@ -40155,14 +39073,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; @@ -40176,7 +39094,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; @@ -40186,7 +39104,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; @@ -40201,7 +39119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsk" = ( +"bqh" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -40217,7 +39135,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bsl" = ( +"bqi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -40225,7 +39143,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)"; @@ -40236,7 +39154,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; @@ -40251,7 +39169,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 @@ -40260,7 +39178,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 @@ -40272,7 +39190,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 @@ -40284,13 +39202,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 }, @@ -40298,7 +39216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bst" = ( +"bqq" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -40313,7 +39231,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)"; @@ -40327,7 +39245,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bsv" = ( +"bqs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -40350,7 +39268,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsw" = ( +"bqt" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -40360,7 +39278,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsx" = ( +"bqu" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40374,7 +39292,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsy" = ( +"bqv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -40385,7 +39303,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsz" = ( +"bqw" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40399,7 +39317,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsA" = ( +"bqx" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -40418,7 +39336,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsB" = ( +"bqy" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -40431,7 +39349,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsC" = ( +"bqz" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40445,7 +39363,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsD" = ( +"bqA" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/trinary/filter/flipped{ dir = 8; @@ -40459,7 +39377,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsE" = ( +"bqB" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -40471,7 +39389,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bsF" = ( +"bqC" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -40483,13 +39401,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; @@ -40498,7 +39416,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{ @@ -40514,7 +39432,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 @@ -40529,7 +39447,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 @@ -40544,7 +39462,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 @@ -40553,7 +39471,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"; @@ -40563,7 +39481,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; @@ -40575,7 +39493,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 @@ -40597,7 +39515,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsP" = ( +"bqM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40610,7 +39528,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsQ" = ( +"bqN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40624,7 +39542,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsR" = ( +"bqO" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40644,7 +39562,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" @@ -40671,7 +39589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"bsT" = ( +"bqQ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40684,7 +39602,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsU" = ( +"bqR" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -40701,7 +39619,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsV" = ( +"bqS" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -40715,13 +39633,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 }, @@ -40729,7 +39647,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 @@ -40738,7 +39656,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bsZ" = ( +"bqW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40753,13 +39671,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 }, @@ -40767,7 +39685,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btc" = ( +"bqZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40784,7 +39702,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btd" = ( +"bra" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -40798,7 +39716,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bte" = ( +"brb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40807,7 +39725,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btf" = ( +"brc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -40815,7 +39733,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"btg" = ( +"brd" = ( /obj/structure/table, /obj/item/stack/packageWrap, /obj/machinery/light{ @@ -40826,7 +39744,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)"; @@ -40835,7 +39753,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bti" = ( +"brf" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -40846,7 +39764,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btj" = ( +"brg" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -40857,7 +39775,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btk" = ( +"brh" = ( /obj/structure/closet/l3closet/virology, /obj/machinery/light{ dir = 1 @@ -40869,7 +39787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"btl" = ( +"bri" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -40878,7 +39796,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; @@ -40901,14 +39819,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)"; @@ -40917,7 +39835,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" @@ -40928,12 +39846,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" @@ -40942,7 +39860,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bts" = ( +"brp" = ( /obj/machinery/door/airlock/shuttle{ name = "Escape Pod Airlock" }, @@ -40954,7 +39872,7 @@ }, /turf/open/floor/plating, /area/shuttle/pod_3) -"btt" = ( +"brq" = ( /obj/structure/chair{ dir = 4 }, @@ -40963,7 +39881,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_3) -"btu" = ( +"brr" = ( /obj/structure/chair{ dir = 4 }, @@ -40985,12 +39903,12 @@ }, /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_lavaland3"; @@ -40998,25 +39916,25 @@ }, /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 @@ -41025,7 +39943,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"btB" = ( +"bry" = ( /obj/structure/table, /obj/item/weapon/wrench, /obj/item/weapon/screwdriver, @@ -41033,7 +39951,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"btC" = ( +"brz" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -41041,7 +39959,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"btD" = ( +"brA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -41051,13 +39969,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 @@ -41090,7 +40008,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 @@ -41109,7 +40027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btH" = ( +"brE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -41117,14 +40035,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 @@ -41134,14 +40052,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 @@ -41150,7 +40060,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 @@ -41162,7 +40072,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btM" = ( +"brI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -41173,7 +40083,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btN" = ( +"brJ" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -41188,7 +40098,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btO" = ( +"brK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -41198,7 +40108,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 @@ -41215,7 +40125,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btQ" = ( +"brM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -41231,7 +40141,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 @@ -41242,7 +40152,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btS" = ( +"brO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -41252,7 +40162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"btT" = ( +"brP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ dir = 1; @@ -41264,7 +40174,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"; @@ -41272,26 +40182,7 @@ 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/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"btX" = ( +"brR" = ( /obj/machinery/door/airlock/glass, /obj/structure/cable{ d1 = 4; @@ -41305,7 +40196,7 @@ 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; @@ -41323,7 +40214,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"btZ" = ( +"brT" = ( /obj/machinery/light, /obj/structure/cable{ d1 = 4; @@ -41337,7 +40228,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bua" = ( +"brU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -41353,7 +40244,7 @@ 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 @@ -41376,7 +40267,7 @@ 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; @@ -41390,7 +40281,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bud" = ( +"brX" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -41404,7 +40295,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bue" = ( +"brY" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41423,7 +40314,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buf" = ( +"brZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -41434,7 +40325,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bug" = ( +"bsa" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -41449,7 +40340,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"buh" = ( +"bsb" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -41463,14 +40354,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 }, @@ -41480,7 +40371,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"buk" = ( +"bse" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -41489,7 +40380,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bul" = ( +"bsf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -41501,7 +40392,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bum" = ( +"bsg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41522,7 +40413,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bun" = ( +"bsh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -41539,7 +40430,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buo" = ( +"bsi" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -41556,7 +40447,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bup" = ( +"bsj" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -41579,7 +40470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buq" = ( +"bsk" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -41602,7 +40493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bur" = ( +"bsl" = ( /obj/machinery/light, /obj/structure/cable{ d1 = 4; @@ -41614,7 +40505,7 @@ 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; @@ -41630,7 +40521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"but" = ( +"bsn" = ( /obj/machinery/door/airlock/glass, /obj/structure/cable{ d1 = 4; @@ -41642,18 +40533,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"buu" = ( -/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" - }) -"buv" = ( +"bso" = ( /obj/machinery/door/airlock/glass, /turf/open/floor/plasteel/neutral/corner{ icon_state = "neutralcorner"; @@ -41661,14 +40541,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 @@ -41679,7 +40559,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 @@ -41693,7 +40573,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; @@ -41717,7 +40597,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; @@ -41733,7 +40613,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"; @@ -41747,7 +40627,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buC" = ( +"bsv" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -41756,12 +40636,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 @@ -41770,7 +40650,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"buF" = ( +"bsy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -41782,7 +40662,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, @@ -41791,41 +40671,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; @@ -41838,7 +40719,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buN" = ( +"bsG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -41846,7 +40727,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buO" = ( +"bsH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -41854,7 +40735,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buP" = ( +"bsI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41865,7 +40746,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"buQ" = ( +"bsJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41873,7 +40754,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buR" = ( +"bsK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41890,7 +40771,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buS" = ( +"bsL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41901,7 +40782,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buT" = ( +"bsM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41912,7 +40793,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"buU" = ( +"bsN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -41920,7 +40801,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 @@ -41939,13 +40820,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; @@ -41955,7 +40836,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, @@ -41973,27 +40854,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 }, @@ -42001,7 +40874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bvd" = ( +"bsV" = ( /obj/machinery/gateway{ dir = 1 }, @@ -42009,7 +40882,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bve" = ( +"bsW" = ( /obj/machinery/gateway{ dir = 5 }, @@ -42017,19 +40890,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; @@ -42043,7 +40916,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bvi" = ( +"bta" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical{ pixel_x = 1; @@ -42059,21 +40932,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; @@ -42085,12 +40958,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"; @@ -42098,47 +40971,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" @@ -42150,21 +41030,10 @@ /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, -/obj/structure/window/reinforced, -/turf/open/floor/plating/asteroid/airless, -/area/construction/hallway{ - name = "Service-Engineering Bridge" +/area/maintenance/port{ + name = "Port Asteroid Maintenance" }) -"bvv" = ( +"btm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42172,7 +41041,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"bvw" = ( +"btn" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42186,17 +41055,17 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"bvx" = ( -/obj/machinery/door/airlock/maintenance{ +"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; @@ -42208,7 +41077,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvz" = ( +"btq" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, @@ -42217,7 +41086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvA" = ( +"btr" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -42225,7 +41094,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvB" = ( +"bts" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -42245,7 +41114,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvC" = ( +"btt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -42263,7 +41132,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvD" = ( +"btu" = ( /obj/effect/turf_decal/stripes/end{ tag = "icon-warn_end (EAST)"; icon_state = "warn_end"; @@ -42282,7 +41151,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvE" = ( +"btv" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -42295,7 +41164,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvF" = ( +"btw" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -42307,7 +41176,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvG" = ( +"btx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -42318,13 +41187,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 @@ -42334,7 +41203,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvJ" = ( +"btA" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -42345,7 +41214,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvK" = ( +"btB" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -42358,7 +41227,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvL" = ( +"btC" = ( /obj/effect/turf_decal/stripes/end{ tag = "icon-warn_end (WEST)"; icon_state = "warn_end"; @@ -42377,7 +41246,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvM" = ( +"btD" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -42394,7 +41263,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvN" = ( +"btE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -42408,7 +41277,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bvO" = ( +"btF" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, @@ -42416,7 +41285,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 @@ -42431,7 +41300,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bvQ" = ( +"btH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -42443,7 +41312,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvR" = ( +"btI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -42459,7 +41328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bvS" = ( +"btJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -42470,7 +41339,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" @@ -42488,7 +41357,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bvU" = ( +"btL" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "12" @@ -42499,7 +41368,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bvV" = ( +"btM" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42517,7 +41386,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"bvW" = ( +"btN" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42534,7 +41403,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"bvX" = ( +"btO" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -42552,7 +41421,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"bvY" = ( +"btP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -42567,7 +41436,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; @@ -42581,38 +41450,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 @@ -42621,7 +41459,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, @@ -42629,7 +41467,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwe" = ( +"btT" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -42638,7 +41476,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 @@ -42647,7 +41485,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwg" = ( +"btV" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -42656,12 +41494,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; @@ -42672,7 +41510,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwj" = ( +"btY" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -42680,7 +41518,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; @@ -42690,13 +41528,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 }, @@ -42705,7 +41543,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwn" = ( +"buc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -42716,7 +41554,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"; @@ -42735,7 +41573,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bwp" = ( +"bue" = ( /obj/machinery/door/airlock/virology{ autoclose = 0; frequency = 1449; @@ -42752,7 +41590,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"; @@ -42771,7 +41609,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"; @@ -42790,7 +41628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bws" = ( +"buh" = ( /obj/machinery/door/airlock/virology{ autoclose = 0; frequency = 1449; @@ -42807,7 +41645,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"; @@ -42827,7 +41665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwu" = ( +"buj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -42835,7 +41673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bwv" = ( +"buk" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -2; @@ -42852,18 +41690,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 }, @@ -42871,13 +41709,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 }, @@ -42885,7 +41723,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 @@ -42894,13 +41732,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" @@ -42915,7 +41753,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bwE" = ( +"but" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -42929,7 +41767,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bwF" = ( +"buu" = ( /obj/structure/table, /obj/machinery/power/apc{ dir = 8; @@ -42946,7 +41784,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bwG" = ( +"buv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -42957,7 +41795,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bwH" = ( +"buw" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -42966,14 +41804,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 @@ -42989,80 +41827,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 }, @@ -43075,15 +41895,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 }, @@ -43095,24 +41915,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 }, @@ -43127,8 +41948,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 }, @@ -43145,8 +41968,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 }, @@ -43156,23 +41981,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 }, @@ -43183,7 +42002,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxa" = ( +"buN" = ( /obj/machinery/light/small{ dir = 1 }, @@ -43194,7 +42013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxb" = ( +"buO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -43202,7 +42021,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxc" = ( +"buP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -43213,7 +42032,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxd" = ( +"buQ" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -43224,7 +42043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxe" = ( +"buR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -43241,7 +42060,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"; @@ -43249,7 +42068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxg" = ( +"buT" = ( /obj/structure/closet/firecloset, /obj/machinery/light/small{ dir = 8 @@ -43258,13 +42077,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 }, @@ -43282,7 +42101,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxj" = ( +"buW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -43302,7 +42121,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxk" = ( +"buX" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -43313,14 +42132,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{ @@ -43332,7 +42151,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxn" = ( +"bva" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -43346,7 +42165,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxo" = ( +"bvb" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -43366,7 +42185,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bxp" = ( +"bvc" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 @@ -43375,7 +42194,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bxq" = ( +"bvd" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 }, @@ -43386,14 +42205,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; @@ -43411,7 +42230,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxt" = ( +"bvg" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -43424,7 +42243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"bxu" = ( +"bvh" = ( /obj/machinery/light/small{ dir = 1 }, @@ -43434,7 +42253,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxv" = ( +"bvi" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -43456,7 +42275,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxw" = ( +"bvj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43478,7 +42297,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxx" = ( +"bvk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43501,7 +42320,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxy" = ( +"bvl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43514,7 +42333,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxz" = ( +"bvm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -43530,7 +42349,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxA" = ( +"bvn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43547,7 +42366,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bxB" = ( +"bvo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -43558,7 +42377,7 @@ }, /turf/open/space, /area/space) -"bxC" = ( +"bvp" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -43569,7 +42388,7 @@ }, /turf/open/space, /area/space) -"bxD" = ( +"bvq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43579,7 +42398,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"bxE" = ( +"bvr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43595,7 +42414,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxF" = ( +"bvs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43609,7 +42428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxG" = ( +"bvt" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -43623,7 +42442,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"; @@ -43639,7 +42458,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxI" = ( +"bvv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -43653,7 +42472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxJ" = ( +"bvw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -43664,7 +42483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bxK" = ( +"bvx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -43675,7 +42494,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, @@ -43683,7 +42502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bxM" = ( +"bvz" = ( /obj/structure/chair{ dir = 4 }, @@ -43691,13 +42510,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; @@ -43707,14 +42526,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 @@ -43723,48 +42542,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" @@ -43773,13 +42563,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 }, @@ -43788,7 +42578,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" @@ -43797,7 +42587,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{ @@ -43807,17 +42597,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" @@ -43827,7 +42617,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"byd" = ( +"bvO" = ( /obj/machinery/power/apc{ dir = 8; name = "Virology APC"; @@ -43847,7 +42637,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bye" = ( +"bvP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -43860,7 +42650,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"byf" = ( +"bvQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -43877,7 +42667,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"byg" = ( +"bvR" = ( /obj/machinery/gateway{ dir = 10 }, @@ -43885,7 +42675,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byh" = ( +"bvS" = ( /obj/machinery/gateway, /obj/structure/cable/orange{ d2 = 2; @@ -43895,7 +42685,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byi" = ( +"bvT" = ( /obj/machinery/gateway{ dir = 6 }, @@ -43903,7 +42693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"byj" = ( +"bvU" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -43917,7 +42707,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, @@ -43925,7 +42715,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"byl" = ( +"bvW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -43933,7 +42723,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, @@ -43941,7 +42731,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"byn" = ( +"bvY" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -43957,10 +42747,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)"; @@ -43969,93 +42759,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" @@ -44076,7 +42830,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"; @@ -44089,12 +42843,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, @@ -44107,7 +42861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byD" = ( +"bwl" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -44129,7 +42883,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, @@ -44141,7 +42895,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{ @@ -44154,7 +42908,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"byG" = ( +"bwo" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -44170,7 +42924,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byH" = ( +"bwp" = ( /obj/machinery/power/rad_collector{ anchored = 1 }, @@ -44184,7 +42938,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byI" = ( +"bwq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -44206,7 +42960,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"byJ" = ( +"bwr" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -44220,13 +42974,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 }, @@ -44234,7 +42988,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, @@ -44248,7 +43002,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"byN" = ( +"bwv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -44271,7 +43025,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 @@ -44279,19 +43033,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"; @@ -44306,14 +43060,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 }, @@ -44326,7 +43080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byU" = ( +"bwC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -44334,7 +43088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byV" = ( +"bwD" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -44342,7 +43096,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"; @@ -44355,7 +43109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byX" = ( +"bwF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -44370,7 +43124,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"byY" = ( +"bwG" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -44384,7 +43138,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; @@ -44396,13 +43150,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"; @@ -44410,7 +43164,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzc" = ( +"bwK" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -44419,7 +43173,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzd" = ( +"bwL" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = null; name = "Medbay"; @@ -44429,7 +43183,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"; @@ -44445,7 +43199,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, @@ -44457,7 +43211,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzg" = ( +"bwO" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -44467,7 +43221,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzh" = ( +"bwP" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, @@ -44476,7 +43230,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 @@ -44491,7 +43245,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzj" = ( +"bwR" = ( /obj/machinery/power/apc{ dir = 8; name = "Medbay APC"; @@ -44512,7 +43266,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{ @@ -44522,7 +43276,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bzl" = ( +"bwT" = ( /obj/machinery/shower{ dir = 4 }, @@ -44533,7 +43287,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bzm" = ( +"bwU" = ( /obj/structure/mirror{ pixel_y = 32 }, @@ -44544,7 +43298,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; @@ -44559,7 +43313,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bzo" = ( +"bwW" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -44574,7 +43328,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 @@ -44584,7 +43338,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"bzq" = ( +"bwY" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -44593,13 +43347,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; @@ -44609,7 +43363,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; @@ -44620,7 +43374,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzu" = ( +"bxc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -44635,7 +43389,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzv" = ( +"bxd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -44645,7 +43399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/awaymission/research/interior/gateway) -"bzw" = ( +"bxe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -44656,7 +43410,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 @@ -44664,7 +43418,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{ @@ -44672,20 +43426,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"; @@ -44698,91 +43452,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" @@ -44791,16 +43555,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; @@ -44819,7 +43574,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bzN" = ( +"bxu" = ( /obj/machinery/power/apc{ dir = 8; name = "Engineering Foyer APC"; @@ -44841,7 +43596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzO" = ( +"bxv" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -44863,7 +43618,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzP" = ( +"bxw" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -44877,7 +43632,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" @@ -44889,7 +43644,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bzR" = ( +"bxy" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -44910,14 +43665,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; @@ -44929,7 +43684,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bzU" = ( +"bxB" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ icon_state = "intact"; dir = 6 @@ -44937,13 +43692,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 }, @@ -44964,7 +43719,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bzX" = ( +"bxE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -44977,13 +43732,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"; @@ -44997,7 +43752,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAa" = ( +"bxH" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -45012,7 +43767,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAb" = ( +"bxI" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -45030,7 +43785,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAc" = ( +"bxJ" = ( /obj/machinery/power/apc{ dir = 4; name = "Engineering Foyer APC"; @@ -45050,12 +43805,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{ @@ -45064,13 +43819,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, @@ -45081,7 +43836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAh" = ( +"bxO" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -45090,7 +43845,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAi" = ( +"bxP" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -45101,7 +43856,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAj" = ( +"bxQ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -45111,7 +43866,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bAk" = ( +"bxR" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -45119,7 +43874,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{ @@ -45128,14 +43883,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"; @@ -45155,7 +43910,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, @@ -45163,13 +43918,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 }, @@ -45177,7 +43932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAr" = ( +"bxY" = ( /obj/structure/bed/roller, /obj/machinery/light{ icon_state = "tube1"; @@ -45191,7 +43946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bAs" = ( +"bxZ" = ( /obj/machinery/shower{ dir = 4 }, @@ -45202,17 +43957,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; @@ -45229,33 +43984,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, @@ -45263,7 +44018,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{ @@ -45276,13 +44031,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; @@ -45294,79 +44049,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 }, @@ -45383,7 +44138,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 }, @@ -45393,43 +44162,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; @@ -45440,13 +44195,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 }, @@ -45454,7 +44209,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bAU" = ( +"byA" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -45469,7 +44224,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, @@ -45477,7 +44232,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; @@ -45489,14 +44244,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"; @@ -45507,7 +44262,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, @@ -45516,7 +44271,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/supermatter) -"bBa" = ( +"byG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -45531,11 +44286,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 }, @@ -45548,14 +44303,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 }, @@ -45563,12 +44318,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 }, @@ -45576,7 +44331,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bBh" = ( +"byN" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -45591,7 +44346,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bBi" = ( +"byO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45599,7 +44354,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 @@ -45614,7 +44369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bBk" = ( +"byQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45626,7 +44381,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBl" = ( +"byR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45636,14 +44391,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 }, @@ -45654,7 +44409,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; @@ -45666,14 +44421,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; @@ -45686,7 +44441,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, @@ -45700,13 +44455,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 @@ -45720,7 +44475,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBu" = ( +"bza" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -45737,7 +44492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bBv" = ( +"bzb" = ( /obj/machinery/shower{ dir = 4 }, @@ -45747,7 +44502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bBw" = ( +"bzc" = ( /obj/structure/chair{ dir = 4 }, @@ -45756,7 +44511,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; @@ -45779,7 +44534,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{ @@ -45790,7 +44545,7 @@ dir = 5 }, /area/storage/primary) -"bBz" = ( +"bzf" = ( /obj/effect/turf_decal/delivery, /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/vault{ @@ -45798,7 +44553,7 @@ dir = 5 }, /area/storage/primary) -"bBA" = ( +"bzg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -45806,7 +44561,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bBB" = ( +"bzh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -45814,7 +44569,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bBC" = ( +"bzi" = ( /obj/machinery/door/airlock/glass{ name = "Primary Tool Storage" }, @@ -45826,7 +44581,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bBD" = ( +"bzj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -45834,67 +44589,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" @@ -45903,7 +44651,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bBL" = ( +"bzr" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45911,22 +44659,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" }, @@ -45936,7 +44675,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bBP" = ( +"bzu" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -45946,7 +44685,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)"; @@ -45957,7 +44696,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bBR" = ( +"bzw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -45973,7 +44712,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)"; @@ -45984,7 +44723,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{ @@ -46004,7 +44743,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"; @@ -46014,7 +44753,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 @@ -46023,7 +44762,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 @@ -46032,11 +44771,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"; @@ -46047,14 +44786,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, @@ -46072,7 +44811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bCb" = ( +"bzG" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -46084,12 +44823,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{ @@ -46109,7 +44848,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 @@ -46121,7 +44860,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 @@ -46137,7 +44876,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"; @@ -46158,7 +44897,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, @@ -46166,7 +44905,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"; @@ -46178,7 +44917,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCj" = ( +"bzO" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -46186,7 +44925,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCk" = ( +"bzP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -46203,7 +44942,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bCl" = ( +"bzQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -46218,7 +44957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCm" = ( +"bzR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -46229,7 +44968,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCn" = ( +"bzS" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -46240,7 +44979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCo" = ( +"bzT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -46252,7 +44991,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCp" = ( +"bzU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -46263,7 +45002,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCq" = ( +"bzV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -46277,7 +45016,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCr" = ( +"bzW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -46291,7 +45030,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCs" = ( +"bzX" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = "medmain"; name = "Medbay"; @@ -46307,7 +45046,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCt" = ( +"bzY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -46320,7 +45059,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; @@ -46330,7 +45069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bCv" = ( +"bAa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -46338,7 +45077,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; @@ -46348,14 +45087,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)"; @@ -46364,7 +45103,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, @@ -46372,7 +45111,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, @@ -46380,7 +45119,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 @@ -46389,7 +45128,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bCC" = ( +"bAh" = ( /obj/machinery/clonepod, /obj/machinery/light{ icon_state = "tube1"; @@ -46407,7 +45146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bCD" = ( +"bAi" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/light/small{ brightness = 3; @@ -46419,7 +45158,7 @@ dir = 5 }, /area/medical/morgue) -"bCE" = ( +"bAj" = ( /obj/machinery/light/small{ dir = 8 }, @@ -46433,7 +45172,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCF" = ( +"bAk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -46443,7 +45182,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCG" = ( +"bAl" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -46454,7 +45193,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCH" = ( +"bAm" = ( /obj/machinery/light/small{ dir = 1 }, @@ -46467,7 +45206,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCI" = ( +"bAn" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -46477,7 +45216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/primary) -"bCJ" = ( +"bAo" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -46489,112 +45228,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"; @@ -46616,7 +45308,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCW" = ( +"bAw" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -46628,7 +45320,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCX" = ( +"bAx" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -46646,7 +45338,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCY" = ( +"bAy" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -46658,7 +45350,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bCZ" = ( +"bAz" = ( /obj/machinery/light/small{ dir = 8 }, @@ -46669,19 +45361,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 }, @@ -46689,7 +45381,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDd" = ( +"bAD" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -46700,7 +45392,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDe" = ( +"bAE" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -46716,7 +45408,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bDf" = ( +"bAF" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -46726,7 +45418,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"; @@ -46736,7 +45428,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDh" = ( +"bAH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -46753,7 +45445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDi" = ( +"bAI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -46770,7 +45462,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{ @@ -46780,13 +45472,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 }, @@ -46805,7 +45497,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDm" = ( +"bAM" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -46829,7 +45521,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDn" = ( +"bAN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46847,7 +45539,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDo" = ( +"bAO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46867,7 +45559,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDp" = ( +"bAP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46888,7 +45580,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDq" = ( +"bAQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46909,7 +45601,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDr" = ( +"bAR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46928,7 +45620,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDs" = ( +"bAS" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46938,7 +45630,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDt" = ( +"bAT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -46954,7 +45646,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDu" = ( +"bAU" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -46969,7 +45661,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDv" = ( +"bAV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -46984,7 +45676,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bDw" = ( +"bAW" = ( /obj/structure/table, /obj/machinery/microwave, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -46998,7 +45690,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 @@ -47008,7 +45700,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDy" = ( +"bAY" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -47030,7 +45722,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bDz" = ( +"bAZ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -47043,7 +45735,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{ @@ -47069,7 +45761,7 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating/airless, /area/security/checkpoint/engineering) -"bDB" = ( +"bBb" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -47082,7 +45774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bDC" = ( +"bBc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -47094,7 +45786,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bDD" = ( +"bBd" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -47106,7 +45798,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bDE" = ( +"bBe" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -47117,7 +45809,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" @@ -47126,7 +45818,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bDG" = ( +"bBg" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -47140,7 +45832,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bDH" = ( +"bBh" = ( /obj/structure/chair{ dir = 4 }, @@ -47152,7 +45844,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDI" = ( +"bBi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -47161,7 +45853,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDJ" = ( +"bBj" = ( /obj/machinery/camera{ c_tag = "Medbay Lobby"; dir = 1; @@ -47172,7 +45864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDK" = ( +"bBk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -47180,7 +45872,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDL" = ( +"bBl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -47193,7 +45885,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDM" = ( +"bBm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -47205,7 +45897,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDN" = ( +"bBn" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = "medmain"; name = "Medbay"; @@ -47218,7 +45910,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDO" = ( +"bBo" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -47226,26 +45918,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 }, @@ -47254,7 +45946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDT" = ( +"bBt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -47269,7 +45961,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDU" = ( +"bBu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -47282,7 +45974,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDV" = ( +"bBv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -47301,7 +45993,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bDW" = ( +"bBw" = ( /obj/machinery/door/airlock/glass_medical{ id_tag = "cloningmain"; name = "Genetics"; @@ -47323,7 +46015,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bDX" = ( +"bBx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -47341,7 +46033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bDY" = ( +"bBy" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -47362,7 +46054,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 @@ -47383,7 +46075,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEa" = ( +"bBA" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -47395,7 +46087,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bEb" = ( +"bBB" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -47407,7 +46099,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bEc" = ( +"bBC" = ( /obj/structure/disposaloutlet{ icon_state = "outlet"; dir = 1 @@ -47415,7 +46107,7 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/plating/airless, /area/space) -"bEd" = ( +"bBD" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -47431,7 +46123,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bEe" = ( +"bBE" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -47447,52 +46139,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"; @@ -47504,7 +46175,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bEk" = ( +"bBJ" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (EAST)"; icon_state = "intact"; @@ -47516,7 +46187,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bEl" = ( +"bBK" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; @@ -47528,13 +46199,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; @@ -47549,7 +46220,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{ @@ -47559,7 +46230,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; @@ -47569,7 +46240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bEq" = ( +"bBP" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -47579,7 +46250,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEr" = ( +"bBQ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ icon_state = "1-4"; @@ -47591,7 +46262,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEs" = ( +"bBR" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -47606,7 +46277,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEt" = ( +"bBS" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -47618,7 +46289,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEu" = ( +"bBT" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -47636,7 +46307,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEv" = ( +"bBU" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -47653,7 +46324,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEw" = ( +"bBV" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/cable/yellow{ d1 = 4; @@ -47666,7 +46337,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEx" = ( +"bBW" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ d1 = 1; @@ -47678,7 +46349,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEy" = ( +"bBX" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -47692,7 +46363,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bEz" = ( +"bBY" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -47701,7 +46372,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, @@ -47719,7 +46390,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEB" = ( +"bCa" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -47728,7 +46399,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bEC" = ( +"bCb" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -47743,14 +46414,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; @@ -47762,7 +46433,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bEF" = ( +"bCe" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -47773,13 +46444,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{ @@ -47802,7 +46473,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bEI" = ( +"bCh" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -47811,7 +46482,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; @@ -47829,22 +46500,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, @@ -47852,13 +46524,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"; @@ -47870,21 +46542,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 }, @@ -47893,7 +46565,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bES" = ( +"bCr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -47901,7 +46573,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bET" = ( +"bCs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -47912,7 +46584,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, @@ -47923,7 +46595,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 @@ -47932,7 +46604,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEW" = ( +"bCv" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -47944,7 +46616,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"bEX" = ( +"bCw" = ( /obj/machinery/button/door{ id = "cloningmain"; name = "Cloning Door"; @@ -47968,7 +46640,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; @@ -47990,17 +46662,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 }, @@ -48014,7 +46686,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bFc" = ( +"bCB" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -48025,128 +46697,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; @@ -48158,13 +46743,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 }, @@ -48172,22 +46757,22 @@ /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, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bFr" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +"bCL" = ( /obj/structure/rack, /turf/open/floor/plating/astplate{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -48195,13 +46780,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; @@ -48215,7 +46800,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFu" = ( +"bCO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -48223,7 +46808,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)"; @@ -48232,7 +46817,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"; @@ -48242,26 +46827,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 }, @@ -48271,7 +46856,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFB" = ( +"bCV" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/radiation, /turf/open/floor/engine{ @@ -48279,7 +46864,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFC" = ( +"bCW" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/light, /turf/open/floor/engine{ @@ -48287,14 +46872,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; @@ -48313,7 +46898,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFF" = ( +"bCZ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/yellow{ d1 = 1; @@ -48325,7 +46910,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFG" = ( +"bDa" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -48335,7 +46920,7 @@ name = "reinforced floor" }, /area/engine/supermatter) -"bFH" = ( +"bDb" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; @@ -48343,13 +46928,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, @@ -48360,7 +46945,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFK" = ( +"bDe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48373,7 +46958,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFL" = ( +"bDf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -48383,7 +46968,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bFM" = ( +"bDg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48401,7 +46986,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFN" = ( +"bDh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -48411,7 +46996,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFO" = ( +"bDi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -48419,7 +47004,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bFP" = ( +"bDj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -48435,14 +47020,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; @@ -48459,7 +47044,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)"; @@ -48468,7 +47053,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFT" = ( +"bDn" = ( /obj/structure/chair/office/light{ dir = 1 }, @@ -48480,7 +47065,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; @@ -48495,7 +47080,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"; @@ -48503,7 +47088,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)"; @@ -48512,7 +47097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFX" = ( +"bDr" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -48525,7 +47110,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bFY" = ( +"bDs" = ( /obj/structure/chair{ dir = 4 }, @@ -48536,7 +47121,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"; @@ -48546,7 +47131,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; @@ -48559,7 +47144,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; @@ -48569,7 +47154,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGc" = ( +"bDw" = ( /obj/machinery/light{ dir = 1 }, @@ -48577,7 +47162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGd" = ( +"bDx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48586,7 +47171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGe" = ( +"bDy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48599,7 +47184,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGf" = ( +"bDz" = ( /obj/machinery/light{ dir = 1 }, @@ -48610,7 +47195,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bGg" = ( +"bDA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -48619,7 +47204,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, @@ -48627,7 +47212,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, @@ -48636,7 +47221,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"; @@ -48653,12 +47238,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; @@ -48673,11 +47258,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{ @@ -48686,13 +47271,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 @@ -48703,7 +47288,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bGq" = ( +"bDK" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -48712,7 +47297,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bGr" = ( +"bDL" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -48726,84 +47311,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, @@ -48813,60 +47401,37 @@ 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 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, +"bDX" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospehrics Maintenance"; req_access_txt = "12;24" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGH" = ( +"bDY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48875,7 +47440,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGI" = ( +"bDZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -48883,7 +47448,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGJ" = ( +"bEa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -48891,7 +47456,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bGK" = ( +"bEb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ dir = 8 @@ -48900,7 +47465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGL" = ( +"bEc" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -48912,12 +47477,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 @@ -48929,7 +47494,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGO" = ( +"bEf" = ( /obj/machinery/light{ dir = 1 }, @@ -48938,7 +47503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGP" = ( +"bEg" = ( /obj/machinery/power/apc{ dir = 1; name = "Engineering APC"; @@ -48954,20 +47519,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" @@ -48979,7 +47544,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{ @@ -49001,7 +47566,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" @@ -49018,13 +47583,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 @@ -49033,7 +47598,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bGX" = ( +"bEo" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -49047,7 +47612,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGY" = ( +"bEp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -49060,7 +47625,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bGZ" = ( +"bEq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49071,7 +47636,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{ @@ -49091,7 +47656,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 @@ -49106,7 +47671,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bHc" = ( +"bEt" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -49120,7 +47685,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"bHd" = ( +"bEu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -49134,13 +47699,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; @@ -49151,7 +47716,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)"; @@ -49160,24 +47725,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"; @@ -49185,7 +47750,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; @@ -49198,7 +47763,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"; @@ -49208,7 +47773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHn" = ( +"bEE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49216,7 +47781,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHo" = ( +"bEF" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -49228,7 +47793,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHp" = ( +"bEG" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -32 }, @@ -49240,7 +47805,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bHq" = ( +"bEH" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -49249,7 +47814,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{ @@ -49259,7 +47824,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHs" = ( +"bEJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -49271,7 +47836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHt" = ( +"bEK" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -49284,7 +47849,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bHu" = ( +"bEL" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -49292,12 +47857,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; @@ -49314,11 +47879,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 }, @@ -49326,7 +47891,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bHz" = ( +"bEQ" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/item/weapon/electronics/airlock, @@ -49336,12 +47901,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" @@ -49352,7 +47917,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bHC" = ( +"bET" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -49361,7 +47926,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{ @@ -49375,7 +47940,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 @@ -49385,7 +47950,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{ @@ -49402,7 +47967,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bHG" = ( +"bEX" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j1s"; @@ -49413,14 +47978,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hydroponics) -"bHH" = ( +"bEY" = ( /obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister/air, /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{ @@ -49428,7 +47994,7 @@ dir = 5 }, /area/atmos) -"bHJ" = ( +"bFa" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -49436,7 +48002,7 @@ dir = 5 }, /area/atmos) -"bHK" = ( +"bFb" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -49444,42 +48010,46 @@ dir = 5 }, /area/atmos) -"bHL" = ( +"bFc" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 }, +/obj/item/weapon/twohanded/required/kirbyplants{ + tag = "icon-plant-21"; + icon_state = "plant-21" + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHM" = ( +"bFd" = ( /obj/structure/closet/firecloset/full, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +"bFe" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bHO" = ( -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/rods{ - amount = 50 - }, /obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHP" = ( +"bFf" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods{ + amount = 50 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bFg" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, /obj/machinery/power/apc{ @@ -49497,15 +48067,20 @@ 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, +/obj/machinery/airalarm{ + frequency = 1439; + locked = 0; + pixel_y = 23 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHR" = ( +"bFi" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, @@ -49515,7 +48090,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)"; @@ -49524,7 +48099,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bHT" = ( +"bFk" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -49534,7 +48109,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)"; @@ -49543,7 +48118,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHV" = ( +"bFm" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -49558,7 +48133,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHW" = ( +"bFn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49566,7 +48141,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bHX" = ( +"bFo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49577,7 +48152,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, @@ -49588,7 +48163,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bHZ" = ( +"bFq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49596,7 +48171,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIa" = ( +"bFr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49610,13 +48185,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 }, @@ -49631,7 +48206,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, @@ -49642,7 +48217,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, @@ -49653,7 +48228,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIf" = ( +"bFw" = ( /obj/structure/table, /obj/item/stack/rods{ amount = 50 @@ -49668,7 +48243,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIg" = ( +"bFx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49681,7 +48256,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{ @@ -49701,7 +48276,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIi" = ( +"bFz" = ( /obj/structure/table, /obj/item/stack/sheet/rglass{ amount = 50 @@ -49718,7 +48293,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, @@ -49734,7 +48309,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIk" = ( +"bFB" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -49746,7 +48321,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIl" = ( +"bFC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -49758,7 +48333,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bIm" = ( +"bFD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -49773,7 +48348,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, @@ -49787,7 +48362,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; @@ -49800,7 +48375,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bIp" = ( +"bFG" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -49813,7 +48388,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)"; @@ -49822,7 +48397,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, @@ -49837,7 +48412,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, @@ -49849,7 +48424,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{ @@ -49866,7 +48441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bIu" = ( +"bFL" = ( /obj/machinery/requests_console{ department = "Chemistry"; departmentType = 2; @@ -49884,7 +48459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIv" = ( +"bFM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -49893,7 +48468,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIw" = ( +"bFN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49901,7 +48476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIx" = ( +"bFO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49910,7 +48485,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIy" = ( +"bFP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49922,7 +48497,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIz" = ( +"bFQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49933,7 +48508,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIA" = ( +"bFR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49947,7 +48522,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"; @@ -49963,7 +48538,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bIC" = ( +"bFT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -49978,7 +48553,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"bID" = ( +"bFU" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -49990,12 +48565,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 @@ -50004,13 +48579,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 }, @@ -50026,7 +48601,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)"; @@ -50035,7 +48610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bIJ" = ( +"bGa" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -50044,13 +48619,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 @@ -50058,7 +48633,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, @@ -50068,7 +48643,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIN" = ( +"bGe" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -50079,7 +48654,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIO" = ( +"bGf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50089,7 +48664,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIP" = ( +"bGg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50100,7 +48675,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIQ" = ( +"bGh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50110,7 +48685,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIR" = ( +"bGi" = ( /obj/structure/disposaloutlet{ dir = 4 }, @@ -50121,7 +48696,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bIS" = ( +"bGj" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 }, @@ -50130,7 +48705,7 @@ }, /turf/open/floor/plating/airless, /area/space) -"bIT" = ( +"bGk" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50138,14 +48713,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"; @@ -50158,12 +48733,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; @@ -50173,13 +48748,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)"; @@ -50191,7 +48766,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJa" = ( +"bGr" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -50208,7 +48783,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" @@ -50218,7 +48793,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJc" = ( +"bGt" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = 0; @@ -50239,7 +48814,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bJd" = ( +"bGu" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -50250,12 +48825,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" }, @@ -50266,7 +48841,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJg" = ( +"bGx" = ( /obj/structure/table/wood, /obj/item/device/taperecorder{ pixel_y = 0 @@ -50279,7 +48854,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJh" = ( +"bGy" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -50295,7 +48870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJi" = ( +"bGz" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -50305,7 +48880,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJj" = ( +"bGA" = ( /obj/structure/table/wood, /obj/structure/window/reinforced{ dir = 8 @@ -50314,7 +48889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJk" = ( +"bGB" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -50327,7 +48902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bJl" = ( +"bGC" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 24 }, @@ -50345,14 +48920,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 @@ -50360,7 +48935,7 @@ /area/library{ name = "Lounge" }) -"bJo" = ( +"bGF" = ( /obj/structure/chair/comfy/black{ dir = 4 }, @@ -50373,7 +48948,7 @@ /area/library{ name = "Lounge" }) -"bJp" = ( +"bGG" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, @@ -50383,7 +48958,7 @@ /area/library{ name = "Lounge" }) -"bJq" = ( +"bGH" = ( /obj/structure/fireplace, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -50391,14 +48966,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 }, @@ -50411,7 +48986,7 @@ /area/library{ name = "Lounge" }) -"bJt" = ( +"bGK" = ( /obj/structure/rack, /obj/item/weapon/grown/log, /obj/item/weapon/grown/log, @@ -50429,7 +49004,7 @@ /area/library{ name = "Lounge" }) -"bJu" = ( +"bGL" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -50437,7 +49012,7 @@ /area/library{ name = "Lounge" }) -"bJv" = ( +"bGM" = ( /obj/machinery/portable_atmospherics/canister/water_vapor, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -50445,7 +49020,7 @@ dir = 5 }, /area/atmos) -"bJw" = ( +"bGN" = ( /obj/machinery/camera{ c_tag = "Atmospherics North-West"; dir = 4; @@ -50456,39 +49031,47 @@ 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; icon_state = "1-2"; pixel_y = 0 }, +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJB" = ( +"bGS" = ( /obj/structure/chair/office/dark{ dir = 4 }, /obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 8 + }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; icon_state = "yellow"; @@ -50496,20 +49079,29 @@ 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{ id = "atmodesk" }, /obj/machinery/door/window/eastright{ + name = "Atmospherics Desk"; req_access_txt = "24" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 8 + }, /turf/open/floor/plasteel/yellow{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bJD" = ( +"bGU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 8 + }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -50517,7 +49109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJE" = ( +"bGV" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -50529,18 +49121,16 @@ icon_state = "1-2"; pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJF" = ( +"bGW" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50557,7 +49147,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJG" = ( +"bGX" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50578,7 +49168,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJH" = ( +"bGY" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "Engine Room"; @@ -50600,7 +49190,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJI" = ( +"bGZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50620,7 +49210,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJJ" = ( +"bHa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50644,7 +49234,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJK" = ( +"bHb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50658,7 +49248,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJL" = ( +"bHc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -50677,22 +49267,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 }, @@ -50716,7 +49291,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJO" = ( +"bHe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -50731,7 +49306,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJP" = ( +"bHf" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -50755,7 +49330,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJQ" = ( +"bHg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50772,7 +49347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJR" = ( +"bHh" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -50791,7 +49366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJS" = ( +"bHi" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -50807,7 +49382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJT" = ( +"bHj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -50827,7 +49402,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJU" = ( +"bHk" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "Engine Room"; @@ -50852,7 +49427,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bJV" = ( +"bHl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50873,7 +49448,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJW" = ( +"bHm" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -50891,7 +49466,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJX" = ( +"bHn" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -50909,7 +49484,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bJY" = ( +"bHo" = ( /obj/machinery/vending/cigarette, /obj/machinery/light{ dir = 4 @@ -50924,12 +49499,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 @@ -50938,14 +49513,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 @@ -50954,7 +49529,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKd" = ( +"bHt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -50962,7 +49537,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKe" = ( +"bHu" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -50976,7 +49551,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKf" = ( +"bHv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -50984,7 +49559,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bKg" = ( +"bHw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -50995,19 +49570,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, @@ -51020,7 +49595,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; @@ -51040,7 +49615,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{ @@ -51056,7 +49631,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; @@ -51076,7 +49651,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; @@ -51098,14 +49673,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; @@ -51117,7 +49692,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKq" = ( +"bHG" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -51126,7 +49701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKr" = ( +"bHH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -51139,7 +49714,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKs" = ( +"bHI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -51154,7 +49729,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)"; @@ -51163,7 +49738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bKu" = ( +"bHK" = ( /obj/machinery/light/small{ dir = 8 }, @@ -51171,7 +49746,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKv" = ( +"bHL" = ( /obj/structure/disposalpipe/junction{ tag = "icon-pipe-j2 (WEST)"; icon_state = "pipe-j2"; @@ -51183,7 +49758,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKw" = ( +"bHM" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -51197,14 +49772,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 @@ -51215,7 +49790,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bKz" = ( +"bHP" = ( /obj/structure/weightlifter, /obj/structure/extinguisher_cabinet{ pixel_x = -24 @@ -51224,18 +49799,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 }, @@ -51243,7 +49818,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKD" = ( +"bHT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51252,7 +49827,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bKE" = ( +"bHU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51262,7 +49837,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKF" = ( +"bHV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51271,7 +49846,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, @@ -51280,7 +49855,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKH" = ( +"bHX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51293,7 +49868,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bKI" = ( +"bHY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51301,7 +49876,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 @@ -51312,7 +49887,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bKK" = ( +"bIa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -51320,7 +49895,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)"; @@ -51331,7 +49906,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKM" = ( +"bIc" = ( /obj/structure/chair/comfy/brown{ dir = 1 }, @@ -51339,7 +49914,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, @@ -51347,12 +49922,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"; @@ -51365,7 +49940,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bKQ" = ( +"bIg" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -51384,27 +49959,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 @@ -51412,7 +49974,7 @@ /area/library{ name = "Lounge" }) -"bKU" = ( +"bIj" = ( /obj/structure/chair/comfy/black{ tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; @@ -51424,7 +49986,7 @@ /area/library{ name = "Lounge" }) -"bKV" = ( +"bIk" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 28 }, @@ -51434,20 +49996,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, @@ -51457,7 +50006,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bKY" = ( +"bIm" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -51467,13 +50016,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"; @@ -51484,7 +50033,7 @@ dir = 5 }, /area/atmos) -"bLb" = ( +"bIp" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -51494,7 +50043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLc" = ( +"bIq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -51504,7 +50053,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLd" = ( +"bIr" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -51514,7 +50063,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bLe" = ( +"bIs" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -51532,13 +50081,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{ @@ -51548,7 +50097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLh" = ( +"bIv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51560,7 +50109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLi" = ( +"bIw" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, @@ -51569,7 +50118,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLj" = ( +"bIx" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -51581,7 +50130,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"; @@ -51589,20 +50138,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; @@ -51614,12 +50163,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; @@ -51631,7 +50180,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLq" = ( +"bIE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -51642,7 +50191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLr" = ( +"bIF" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ d1 = 1; @@ -51653,7 +50202,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; @@ -51667,7 +50216,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"; @@ -51675,7 +50224,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bLu" = ( +"bII" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -51687,7 +50236,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLv" = ( +"bIJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -51695,7 +50244,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLw" = ( +"bIK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51708,7 +50257,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, @@ -51720,7 +50269,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"bLy" = ( +"bIM" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -51730,12 +50279,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 }, @@ -51745,7 +50294,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bLB" = ( +"bIP" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -51760,13 +50309,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, @@ -51777,7 +50326,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, @@ -51786,7 +50335,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{ @@ -51806,7 +50355,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/chemistry) -"bLG" = ( +"bIU" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -51815,14 +50364,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{ @@ -51834,7 +50383,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, @@ -51849,13 +50398,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, @@ -51864,7 +50413,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"; @@ -51876,7 +50425,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, @@ -51884,7 +50433,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bLO" = ( +"bJc" = ( /obj/structure/table, /obj/structure/bedsheetbin{ pixel_x = 2 @@ -51898,18 +50447,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"; @@ -51922,18 +50471,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; @@ -51947,7 +50496,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"; @@ -51955,7 +50504,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" @@ -51965,12 +50514,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, @@ -51980,7 +50524,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bLZ" = ( +"bJm" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -51993,7 +50537,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bMa" = ( +"bJn" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -52008,7 +50552,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 @@ -52016,7 +50560,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bMc" = ( +"bJp" = ( /obj/structure/table, /obj/item/weapon/storage/fancy/cigarettes, /obj/effect/spawner/lootdrop/maintenance, @@ -52024,7 +50568,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{ @@ -52033,7 +50577,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bMe" = ( +"bJr" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = -32; @@ -52043,26 +50587,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; @@ -52074,7 +50618,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bMj" = ( +"bJw" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -52082,7 +50626,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)"; @@ -52091,23 +50635,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 }, @@ -52115,7 +50659,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMp" = ( +"bJC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52128,7 +50672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bMq" = ( +"bJD" = ( /obj/machinery/door/airlock/glass{ name = "Library" }, @@ -52142,7 +50686,7 @@ /area/library{ name = "Lounge" }) -"bMr" = ( +"bJE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52152,7 +50696,7 @@ /area/library{ name = "Lounge" }) -"bMs" = ( +"bJF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -52162,7 +50706,7 @@ /area/library{ name = "Lounge" }) -"bMt" = ( +"bJG" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -52177,7 +50721,7 @@ /area/library{ name = "Lounge" }) -"bMu" = ( +"bJH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -52190,7 +50734,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bMv" = ( +"bJI" = ( /obj/effect/turf_decal/delivery, /obj/machinery/camera{ c_tag = "Atmospherics Storage"; @@ -52198,12 +50742,13 @@ icon_state = "camera"; network = list("SS13","CE") }, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel/vault{ baseturf = /turf/open/floor/plating/asteroid/airless; dir = 5 }, /area/atmos) -"bMw" = ( +"bJJ" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -52211,7 +50756,7 @@ dir = 5 }, /area/atmos) -"bMx" = ( +"bJK" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -52219,7 +50764,7 @@ dir = 5 }, /area/atmos) -"bMy" = ( +"bJL" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ @@ -52227,23 +50772,26 @@ dir = 5 }, /area/atmos) -"bMz" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 +"bJM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bMA" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 +"bJN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bMB" = ( +"bJO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -52251,13 +50799,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; @@ -52276,7 +50824,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bME" = ( +"bJR" = ( /obj/machinery/camera{ c_tag = "Engineering West"; dir = 4; @@ -52291,14 +50839,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; @@ -52319,7 +50867,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{ @@ -52330,7 +50878,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMI" = ( +"bJV" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -52339,7 +50887,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bMJ" = ( +"bJW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -52351,13 +50899,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{ @@ -52370,13 +50912,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, @@ -52385,7 +50927,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{ @@ -52401,7 +50943,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; @@ -52417,13 +50959,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 }, @@ -52434,7 +50976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bMS" = ( +"bKe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -52443,7 +50985,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 @@ -52453,7 +50995,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMU" = ( +"bKg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -52461,7 +51003,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMV" = ( +"bKh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -52471,13 +51013,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" @@ -52486,7 +51022,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMY" = ( +"bKj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52495,7 +51031,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bMZ" = ( +"bKk" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -52514,7 +51050,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"; @@ -52524,7 +51060,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bNb" = ( +"bKm" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -52533,7 +51069,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bNc" = ( +"bKn" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -52551,7 +51087,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bNd" = ( +"bKo" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small{ dir = 8 @@ -52566,7 +51102,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNe" = ( +"bKp" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -52578,7 +51114,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNf" = ( +"bKq" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -52592,13 +51128,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"; @@ -52609,14 +51145,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"; @@ -52624,7 +51160,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{ @@ -52633,7 +51169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bNl" = ( +"bKw" = ( /obj/machinery/door/airlock/glass{ name = "Fitness Area" }, @@ -52642,7 +51178,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" @@ -52651,13 +51187,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 }, @@ -52670,7 +51206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bNp" = ( +"bKA" = ( /obj/machinery/door/airlock/glass{ name = "Library" }, @@ -52689,7 +51225,7 @@ /area/library{ name = "Lounge" }) -"bNq" = ( +"bKB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -52704,7 +51240,7 @@ /area/library{ name = "Lounge" }) -"bNr" = ( +"bKC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -52719,7 +51255,7 @@ /area/library{ name = "Lounge" }) -"bNs" = ( +"bKD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -52731,7 +51267,7 @@ /area/library{ name = "Lounge" }) -"bNt" = ( +"bKE" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 4; @@ -52744,60 +51280,42 @@ /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" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -24 - }, -/turf/open/floor/plasteel/yellow/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bNw" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ +"bKF" = ( +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel/yellow/corner{ dir = 8 }, -/turf/open/floor/plasteel/yellow/side{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, /area/atmos) -"bNx" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ +"bKG" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ icon_state = "intact"; - dir = 10 + dir = 8 }, -/turf/open/floor/plasteel/yellow/corner{ - tag = "icon-yellowcorner (WEST)"; - icon_state = "yellowcorner"; - dir = 8; +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNy" = ( +"bKH" = ( +/obj/effect/landmark/lightsout, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 10; + icon_state = "intact"; + tag = "icon-intact (SOUTHEAST)" + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"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" @@ -52806,7 +51324,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNA" = ( +"bKK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -52819,11 +51337,13 @@ icon_state = "camera"; network = list("SS13","CE") }, +/obj/structure/closet/secure_closet/atmospherics, +/obj/item/weapon/pickaxe/mini, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNB" = ( +"bKL" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -52832,7 +51352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bNC" = ( +"bKM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -52840,7 +51360,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bND" = ( +"bKN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -52855,7 +51375,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 @@ -52864,13 +51384,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 }, @@ -52884,7 +51404,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bNH" = ( +"bKR" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52893,13 +51413,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 }, @@ -52907,26 +51427,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; @@ -52938,7 +51445,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 @@ -52952,7 +51459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNO" = ( +"bKX" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -52963,7 +51470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNP" = ( +"bKY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -52971,7 +51478,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bNQ" = ( +"bKZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -52985,19 +51492,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 }, @@ -53005,28 +51512,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 }, @@ -53039,7 +51542,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bNX" = ( +"bLg" = ( /obj/machinery/power/apc{ dir = 1; name = "Chemistry APC"; @@ -53055,24 +51558,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 }, @@ -53084,7 +51581,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOc" = ( +"bLk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53095,7 +51592,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOd" = ( +"bLl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53107,7 +51604,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOe" = ( +"bLm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53119,7 +51616,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bOf" = ( +"bLn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53131,7 +51628,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; @@ -53150,7 +51647,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; @@ -53160,7 +51657,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{ @@ -53171,7 +51668,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, @@ -53191,7 +51688,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOk" = ( +"bLs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -53202,7 +51699,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)"; @@ -53211,7 +51708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bOm" = ( +"bLu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -53227,7 +51724,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOn" = ( +"bLv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53237,7 +51734,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOo" = ( +"bLw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53246,7 +51743,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOp" = ( +"bLx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53257,21 +51754,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" @@ -53285,7 +51780,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOs" = ( +"bLA" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -53296,7 +51791,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOt" = ( +"bLB" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -53310,7 +51805,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOu" = ( +"bLC" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -53319,7 +51814,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bOv" = ( +"bLD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -53337,7 +51832,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bOw" = ( +"bLE" = ( /obj/machinery/power/apc{ dir = 4; name = "Fitness APC"; @@ -53357,7 +51852,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOx" = ( +"bLF" = ( /obj/machinery/light{ dir = 8 }, @@ -53368,13 +51863,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 }, @@ -53382,7 +51877,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOA" = ( +"bLI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -53390,7 +51885,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOB" = ( +"bLJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -53399,7 +51894,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, @@ -53410,7 +51905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bOD" = ( +"bLL" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -53423,7 +51918,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 @@ -53435,7 +51930,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bOF" = ( +"bLN" = ( /obj/machinery/light{ dir = 1 }, @@ -53444,13 +51939,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 }, @@ -53460,7 +51955,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 @@ -53468,7 +51963,7 @@ /area/library{ name = "Lounge" }) -"bOJ" = ( +"bLR" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/assistant, /turf/open/floor/wood{ @@ -53477,7 +51972,7 @@ /area/library{ name = "Lounge" }) -"bOK" = ( +"bLS" = ( /obj/structure/chair/office/dark, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -53485,7 +51980,7 @@ /area/library{ name = "Lounge" }) -"bOL" = ( +"bLT" = ( /obj/item/weapon/twohanded/required/kirbyplants{ icon_state = "plant-22" }, @@ -53495,37 +51990,39 @@ /area/library{ name = "Lounge" }) -"bOM" = ( +"bLU" = ( /obj/structure/grille, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bON" = ( -/obj/machinery/pipedispenser/disposal/transit_tube, +"bLV" = ( +/obj/machinery/door/window/eastright{ + dir = 1; + name = "Interior Pipe Access"; + req_access_txt = "24" + }, /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" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, +"bLX" = ( /obj/machinery/atmospherics/components/binary/pump{ - dir = 2; - name = "Waste To Filter"; - on = 1 + dir = 1; + name = "Mix To Engine"; + on = 0; + target_pressure = 101 }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless +/turf/open/floor/plasteel/yellow/corner{ + dir = 8 }, /area/atmos) -"bOQ" = ( +"bLY" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Canister To Waste"; @@ -53539,7 +52036,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOR" = ( +"bLZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -53553,11 +52050,13 @@ pixel_x = 30; pixel_y = 0 }, +/obj/structure/closet/secure_closet/atmospherics, +/obj/item/weapon/pickaxe/mini, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bOS" = ( +"bMa" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -53572,14 +52071,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; @@ -53592,7 +52091,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 @@ -53601,7 +52100,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)"; @@ -53610,7 +52109,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, @@ -53625,7 +52124,7 @@ 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, @@ -53645,7 +52144,7 @@ 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, @@ -53673,7 +52172,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bPa" = ( +"bMi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -53681,7 +52180,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, @@ -53697,11 +52196,11 @@ 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 }, @@ -53723,7 +52222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPe" = ( +"bMm" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -53739,7 +52238,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPf" = ( +"bMn" = ( /obj/machinery/light, /obj/structure/rack, /obj/item/weapon/pickaxe/mini, @@ -53755,7 +52254,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, @@ -53778,7 +52277,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, @@ -53791,7 +52290,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, @@ -53806,7 +52305,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPj" = ( +"bMr" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -53819,7 +52318,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)"; @@ -53828,7 +52327,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"bPl" = ( +"bMt" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -53843,7 +52342,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; @@ -53855,7 +52354,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPn" = ( +"bMv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53869,7 +52368,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPo" = ( +"bMw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53888,7 +52387,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPp" = ( +"bMx" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -53911,7 +52410,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPq" = ( +"bMy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -53928,7 +52427,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPr" = ( +"bMz" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -53947,7 +52446,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/gravity_generator) -"bPs" = ( +"bMA" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -53965,13 +52464,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 }, @@ -53986,22 +52485,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 }, @@ -54015,7 +52514,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPx" = ( +"bMF" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -54024,7 +52523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPy" = ( +"bMG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -54040,11 +52539,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 }, @@ -54057,13 +52552,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 }, @@ -54081,10 +52578,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 }, @@ -54092,7 +52587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bPC" = ( +"bMK" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -54102,22 +52597,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 }, @@ -54130,7 +52611,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPF" = ( +"bMM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -54145,7 +52626,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPG" = ( +"bMN" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -54161,7 +52642,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPH" = ( +"bMO" = ( /obj/structure/table, /obj/item/weapon/storage/box/beakers{ pixel_x = 2; @@ -54184,7 +52665,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; @@ -54207,7 +52688,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, @@ -54215,7 +52696,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, @@ -54225,7 +52706,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; @@ -54238,7 +52719,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"bPM" = ( +"bMT" = ( /obj/structure/closet/l3closet, /obj/machinery/camera{ c_tag = "Medbay Storage"; @@ -54250,13 +52731,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 @@ -54265,7 +52746,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" @@ -54280,7 +52761,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bPQ" = ( +"bMX" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -54291,7 +52772,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPR" = ( +"bMY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -54307,7 +52788,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPS" = ( +"bMZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -54318,7 +52799,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPT" = ( +"bNa" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -54332,7 +52813,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPU" = ( +"bNb" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -54343,7 +52824,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPV" = ( +"bNc" = ( /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -54358,7 +52839,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bPW" = ( +"bNd" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -54371,20 +52852,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"; @@ -54392,7 +52866,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)"; @@ -54401,7 +52875,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"; @@ -54409,39 +52883,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{ @@ -54450,7 +52924,7 @@ /area/library{ name = "Lounge" }) -"bQi" = ( +"bNo" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, /turf/open/floor/wood{ @@ -54459,7 +52933,7 @@ /area/library{ name = "Lounge" }) -"bQj" = ( +"bNp" = ( /obj/structure/table/wood, /obj/item/weapon/folder/blue, /turf/open/floor/wood{ @@ -54468,7 +52942,7 @@ /area/library{ name = "Lounge" }) -"bQk" = ( +"bNq" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -54481,7 +52955,7 @@ /area/library{ name = "Lounge" }) -"bQl" = ( +"bNr" = ( /obj/machinery/camera{ c_tag = "Library East"; dir = 9; @@ -54493,7 +52967,7 @@ /area/library{ name = "Lounge" }) -"bQm" = ( +"bNs" = ( /obj/machinery/power/apc{ dir = 8; name = "Lounge APC"; @@ -54517,10 +52991,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; @@ -54528,7 +53002,7 @@ }, /turf/open/floor/engine/n2, /area/atmos) -"bQp" = ( +"bNv" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/green/visible{ @@ -54538,7 +53012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQq" = ( +"bNw" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -54546,7 +53020,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQr" = ( +"bNx" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; filter_type = "n2"; @@ -54560,7 +53034,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)"; @@ -54569,7 +53043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQt" = ( +"bNz" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Atmos To Chamber"; @@ -54580,13 +53054,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; @@ -54597,11 +53071,13 @@ dir = 4; icon_state = "tube1" }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQw" = ( +"bNC" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -54617,7 +53093,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bQx" = ( +"bND" = ( /obj/machinery/computer/card/minor/ce, /obj/machinery/button/door{ id = "engiestoragesmes"; @@ -54644,14 +53120,14 @@ 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; @@ -54662,7 +53138,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bQA" = ( +"bNG" = ( /obj/machinery/door/airlock/engineering{ cyclelinkeddir = null; name = "SMES Room"; @@ -54680,12 +53156,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{ @@ -54697,7 +53173,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{ @@ -54714,7 +53190,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{ @@ -54742,7 +53218,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, @@ -54761,7 +53237,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bQG" = ( +"bNM" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -54770,19 +53246,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 }, @@ -54792,7 +53268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bQK" = ( +"bNQ" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -54801,7 +53277,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bQL" = ( +"bNR" = ( /obj/structure/table, /obj/machinery/light/small{ dir = 4 @@ -54810,7 +53286,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 @@ -54818,7 +53294,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQN" = ( +"bNT" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -54832,7 +53308,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQO" = ( +"bNU" = ( /obj/machinery/door/airlock/maintenance{ name = "Medical Storage"; req_access_txt = "45" @@ -54842,20 +53318,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"; @@ -54871,7 +53334,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics) -"bQR" = ( +"bNW" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -54892,7 +53355,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQS" = ( +"bNX" = ( /obj/machinery/light/small{ dir = 1 }, @@ -54902,7 +53365,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 @@ -54910,7 +53373,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQU" = ( +"bNZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -54923,7 +53386,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQV" = ( +"bOa" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -54935,7 +53398,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQW" = ( +"bOb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -54944,7 +53407,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQX" = ( +"bOc" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 1 @@ -54955,7 +53418,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bQY" = ( +"bOd" = ( /obj/machinery/light/small{ dir = 4 }, @@ -54971,7 +53434,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bQZ" = ( +"bOe" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -54983,7 +53446,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bRa" = ( +"bOf" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -54992,7 +53455,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bRb" = ( +"bOg" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -55002,7 +53465,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"; @@ -55013,21 +53476,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; @@ -55038,7 +53501,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bRg" = ( +"bOl" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -55051,7 +53514,7 @@ /area/library{ name = "Lounge" }) -"bRh" = ( +"bOm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -55064,7 +53527,7 @@ /area/library{ name = "Lounge" }) -"bRi" = ( +"bOn" = ( /obj/structure/table/wood, /obj/item/weapon/storage/pill_bottle/dice, /turf/open/floor/wood{ @@ -55073,7 +53536,7 @@ /area/library{ name = "Lounge" }) -"bRj" = ( +"bOo" = ( /obj/structure/table/wood, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -55081,7 +53544,7 @@ /area/library{ name = "Lounge" }) -"bRk" = ( +"bOp" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck/cas, /obj/item/toy/cards/deck/cas/black, @@ -55091,7 +53554,7 @@ /area/library{ name = "Lounge" }) -"bRl" = ( +"bOq" = ( /obj/machinery/photocopier, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -55099,46 +53562,31 @@ /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" = ( -/obj/machinery/computer/atmos_control/tank{ - frequency = 1441; - input_tag = "n2_in"; - name = "Nitrogen Supply Control"; - output_tag = "n2_out"; - sensors = list("n2_sensor" = "Tank") - }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bRr" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - icon_state = "intact"; - dir = 5 - }, +"bOv" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/meter, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -55146,97 +53594,116 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRs" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible, +"bOw" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/machinery/meter, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRt" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +"bOx" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10; + pixel_x = 0; + initialize_directions = 10 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRu" = ( +"bOy" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bOz" = ( /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, +/obj/structure/chair/stool/bar, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRv" = ( +"bOA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ +/obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/table, +/obj/item/weapon/storage/fancy/cigarettes, +/obj/item/weapon/lighter/greyscale, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRw" = ( +"bOB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/stool/bar, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRx" = ( +"bOC" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - icon_state = "intact"; - dir = 10 - }, /obj/structure/sign/atmosplaque{ pixel_y = 32 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRy" = ( +"bOD" = ( /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/visible, /obj/structure/disposalpipe/segment{ - dir = 1; + dir = 8; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bRz" = ( +"bOE" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -55245,13 +53712,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; @@ -55271,7 +53738,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRC" = ( +"bOH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55299,7 +53766,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRD" = ( +"bOI" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55316,7 +53783,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRE" = ( +"bOJ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55334,7 +53801,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRF" = ( +"bOK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55349,7 +53816,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRG" = ( +"bOL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55364,7 +53831,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRH" = ( +"bOM" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -55384,7 +53851,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"; @@ -55403,7 +53870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRJ" = ( +"bOO" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ d1 = 4; @@ -55419,7 +53886,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRK" = ( +"bOP" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ d1 = 4; @@ -55438,7 +53905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bRL" = ( +"bOQ" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable{ d1 = 4; @@ -55457,7 +53924,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; @@ -55479,7 +53946,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; @@ -55489,7 +53956,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{ @@ -55504,7 +53971,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{ @@ -55516,7 +53983,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{ @@ -55526,7 +53993,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; @@ -55544,19 +54011,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; @@ -55572,7 +54035,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRU" = ( +"bOZ" = ( /obj/machinery/power/apc{ dir = 1; name = "Medbay Storage APC"; @@ -55588,7 +54051,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 @@ -55599,7 +54062,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 @@ -55607,7 +54070,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRX" = ( +"bPc" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -55623,7 +54086,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRY" = ( +"bPd" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -55634,7 +54097,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bRZ" = ( +"bPe" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -55642,14 +54105,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 }, @@ -55657,18 +54113,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 }, @@ -55676,7 +54132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSf" = ( +"bPj" = ( /obj/structure/chair{ dir = 8 }, @@ -55684,7 +54140,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSg" = ( +"bPk" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -55693,7 +54149,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bSh" = ( +"bPl" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, @@ -55706,7 +54162,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bSi" = ( +"bPm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55714,7 +54170,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; @@ -55729,7 +54185,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bSk" = ( +"bPo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55745,7 +54201,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSl" = ( +"bPp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -55753,7 +54209,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 @@ -55762,7 +54218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSn" = ( +"bPr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -55779,7 +54235,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bSo" = ( +"bPs" = ( /obj/structure/sign/poster/random{ name = "random official poster"; pixel_x = 0; @@ -55792,7 +54248,7 @@ /area/library{ name = "Lounge" }) -"bSp" = ( +"bPt" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -55802,7 +54258,7 @@ /area/library{ name = "Lounge" }) -"bSq" = ( +"bPu" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -55813,7 +54269,7 @@ /area/library{ name = "Lounge" }) -"bSr" = ( +"bPv" = ( /obj/machinery/light, /obj/machinery/bookbinder, /turf/open/floor/wood{ @@ -55822,7 +54278,7 @@ /area/library{ name = "Lounge" }) -"bSs" = ( +"bPw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -55834,7 +54290,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bSt" = ( +"bPx" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -55846,7 +54302,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bSu" = ( +"bPy" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -55854,7 +54310,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bSv" = ( +"bPz" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; external_pressure_bound = 0; @@ -55869,7 +54325,7 @@ }, /turf/open/floor/engine/n2, /area/atmos) -"bSw" = ( +"bPA" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -55879,7 +54335,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSx" = ( +"bPB" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, @@ -55887,15 +54343,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSy" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bSz" = ( +"bPC" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -55903,13 +54351,23 @@ on = 1 }, /obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/red, +/area/atmos) +"bPD" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/turf/open/floor/plasteel/black{ +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSA" = ( +"bPE" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -55920,7 +54378,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSB" = ( +"bPF" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 10; initialize_directions = 10 @@ -55930,7 +54388,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"; @@ -55938,14 +54396,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"; @@ -55953,13 +54411,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 @@ -55968,13 +54426,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSH" = ( -/obj/structure/disposalpipe/segment, +"bPL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bSI" = ( +"bPM" = ( /obj/machinery/light/small{ dir = 4 }, @@ -55983,14 +54443,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; @@ -56005,7 +54465,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSL" = ( +"bPP" = ( /obj/machinery/suit_storage_unit/ce, /obj/machinery/airalarm{ dir = 1; @@ -56016,7 +54476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bSM" = ( +"bPQ" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable{ d1 = 4; @@ -56028,7 +54488,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" @@ -56047,7 +54507,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{ @@ -56057,7 +54517,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; @@ -56069,12 +54529,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" @@ -56083,7 +54543,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSS" = ( +"bPW" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56091,7 +54551,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bST" = ( +"bPX" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 4; @@ -56106,7 +54566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSU" = ( +"bPY" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -56124,7 +54584,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSV" = ( +"bPZ" = ( /obj/machinery/power/terminal{ icon_state = "term"; dir = 1 @@ -56137,7 +54597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSW" = ( +"bQa" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -56151,7 +54611,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"; @@ -56166,7 +54626,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bSY" = ( +"bQc" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -56176,12 +54636,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; @@ -56197,7 +54657,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTb" = ( +"bQf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56212,7 +54672,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTc" = ( +"bQg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56228,7 +54688,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTd" = ( +"bQh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56244,7 +54704,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTe" = ( +"bQi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56259,7 +54719,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTf" = ( +"bQj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56280,7 +54740,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTg" = ( +"bQk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56296,7 +54756,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTh" = ( +"bQl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56314,7 +54774,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTi" = ( +"bQm" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56332,7 +54792,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTj" = ( +"bQn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56352,7 +54812,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTk" = ( +"bQo" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -56368,7 +54828,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTl" = ( +"bQp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -56389,7 +54849,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTm" = ( +"bQq" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -56398,7 +54858,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bTn" = ( +"bQr" = ( /obj/machinery/newscaster{ pixel_x = -28; pixel_y = 4 @@ -56410,7 +54870,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bTo" = ( +"bQs" = ( /obj/structure/chair{ dir = 8 }, @@ -56419,7 +54879,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bTp" = ( +"bQt" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -56428,7 +54888,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; @@ -56438,7 +54898,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bTr" = ( +"bQv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56451,7 +54911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTs" = ( +"bQw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -56459,13 +54919,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 }, @@ -56474,7 +54934,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTv" = ( +"bQz" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -56489,7 +54949,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bTw" = ( +"bQA" = ( /obj/machinery/door/morgue{ name = "Explicit Section" }, @@ -56499,7 +54959,7 @@ /area/library{ name = "Lounge" }) -"bTx" = ( +"bQB" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -56510,7 +54970,7 @@ /area/library{ name = "Lounge" }) -"bTy" = ( +"bQC" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -56521,14 +54981,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 }, @@ -56545,7 +55005,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; @@ -56558,11 +55018,11 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTC" = ( +"bQG" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ - icon_state = "intact"; - dir = 10 + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -56570,23 +55030,22 @@ 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" = ( -/obj/structure/closet/secure_closet/atmospherics, -/obj/item/weapon/pickaxe/mini, -/turf/open/floor/plasteel/yellow/side{ - tag = "icon-yellow (EAST)"; - icon_state = "yellow"; - dir = 4; +"bQI" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "North Canister to Waste" + }, +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTF" = ( +"bQJ" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -56594,18 +55053,16 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTG" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - tag = "icon-connector_map (EAST)"; - icon_state = "connector_map"; - dir = 4 +"bQK" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 }, -/obj/machinery/portable_atmospherics/canister, -/turf/open/floor/plasteel/delivery{ +/obj/machinery/meter, +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTH" = ( +"bQL" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 10 @@ -56614,7 +55071,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTI" = ( +"bQM" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Canister To Waste"; @@ -56625,28 +55082,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bTJ" = ( +"bQN" = ( /obj/structure/fireaxecabinet{ pixel_x = 32 }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ 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 }, @@ -56654,7 +55108,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bTN" = ( +"bQR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -56662,7 +55116,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"bTO" = ( +"bQS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -56670,7 +55124,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, @@ -56684,7 +55138,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; @@ -56696,8 +55150,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 }, @@ -56705,15 +55158,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; @@ -56723,7 +55168,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 @@ -56732,7 +55177,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTV" = ( +"bQY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -56744,7 +55189,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTW" = ( +"bQZ" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -56763,7 +55208,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTX" = ( +"bRa" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56771,7 +55216,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTY" = ( +"bRb" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56791,7 +55236,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bTZ" = ( +"bRc" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -56802,7 +55247,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, @@ -56810,7 +55255,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bUb" = ( +"bRe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light/small{ dir = 4 @@ -56821,7 +55266,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)"; @@ -56834,7 +55279,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; @@ -56848,10 +55293,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" @@ -56865,7 +55308,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bUf" = ( +"bRi" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -56876,7 +55319,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 @@ -56884,7 +55327,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bUh" = ( +"bRk" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/light/small{ dir = 8 @@ -56895,7 +55338,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bUi" = ( +"bRl" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -56904,7 +55347,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bUj" = ( +"bRm" = ( /obj/structure/table, /obj/item/weapon/storage/box/cups, /turf/open/floor/plasteel/vault{ @@ -56912,7 +55355,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bUk" = ( +"bRn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -56922,7 +55365,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bUl" = ( +"bRo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -56933,20 +55376,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 @@ -56955,14 +55398,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"; @@ -56974,7 +55417,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; @@ -56989,7 +55432,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bUs" = ( +"bRv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56998,7 +55441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUt" = ( +"bRw" = ( /obj/machinery/light{ dir = 8 }, @@ -57013,7 +55456,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUu" = ( +"bRx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57021,7 +55464,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" @@ -57033,7 +55476,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUw" = ( +"bRz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -57049,7 +55492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUx" = ( +"bRA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -57060,7 +55503,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUy" = ( +"bRB" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -57069,7 +55512,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bUz" = ( +"bRC" = ( /obj/machinery/light/small{ dir = 8 }, @@ -57079,7 +55522,7 @@ /area/library{ name = "Lounge" }) -"bUA" = ( +"bRD" = ( /obj/machinery/light/small{ dir = 4 }, @@ -57089,7 +55532,7 @@ /area/library{ name = "Lounge" }) -"bUB" = ( +"bRE" = ( /obj/machinery/light/small{ dir = 4 }, @@ -57098,12 +55541,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; @@ -57113,7 +55556,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUE" = ( +"bRH" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; filter_type = "o2"; @@ -57127,14 +55570,15 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUF" = ( -/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible, -/obj/machinery/meter, +"bRI" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUG" = ( +"bRJ" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, @@ -57142,36 +55586,32 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUH" = ( +"bRK" = ( /obj/machinery/light{ dir = 1 }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bRL" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ tag = "icon-connector_map (EAST)"; icon_state = "connector_map"; dir = 4 }, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUI" = ( +"bRM" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, /obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - tag = "icon-intact (WEST)"; - icon_state = "intact"; - dir = 8 - }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bUJ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - tag = "icon-intact (WEST)"; - icon_state = "intact"; - dir = 8 - }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; icon_state = "yellow"; @@ -57179,7 +55619,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUK" = ( +"bRN" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 10; initialize_directions = 10 @@ -57191,8 +55631,9 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUL" = ( +"bRO" = ( /obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -57200,27 +55641,25 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUM" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - tag = "icon-intact (SOUTHEAST)"; - icon_state = "intact"; +"bRP" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 6 }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUN" = ( +"bRQ" = ( /obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Waste to Filter"; + dir = 4; + name = "Filter to Waste"; on = 1 }, /turf/open/floor/plasteel{ 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"; @@ -57231,7 +55670,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bUP" = ( +"bRS" = ( /obj/machinery/meter{ frequency = 1441; id_tag = "waste_meter"; @@ -57247,13 +55686,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; @@ -57267,7 +55706,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"; @@ -57284,7 +55723,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"; @@ -57296,13 +55735,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{ @@ -57318,19 +55757,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)"; @@ -57344,7 +55783,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)"; @@ -57353,13 +55792,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)"; @@ -57368,7 +55807,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVc" = ( +"bSf" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -57379,7 +55818,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; @@ -57390,7 +55829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"bVe" = ( +"bSh" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -57403,10 +55842,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; @@ -57419,7 +55856,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bVg" = ( +"bSj" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -57428,7 +55865,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVh" = ( +"bSk" = ( /obj/structure/chair, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57436,14 +55873,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, @@ -57452,7 +55889,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVk" = ( +"bSn" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -57468,7 +55905,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVl" = ( +"bSo" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -57484,7 +55921,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVm" = ( +"bSp" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light{ dir = 8 @@ -57494,7 +55931,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bVn" = ( +"bSq" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -57503,7 +55940,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bVo" = ( +"bSr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -57513,7 +55950,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bVp" = ( +"bSs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -57524,7 +55961,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 @@ -57533,42 +55970,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 @@ -57576,7 +56013,7 @@ /area/library{ name = "Lounge" }) -"bVy" = ( +"bSB" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/grimy{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -57584,7 +56021,7 @@ /area/library{ name = "Lounge" }) -"bVz" = ( +"bSC" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = 32; @@ -57596,13 +56033,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 }, @@ -57610,13 +56047,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" @@ -57625,7 +56062,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVE" = ( +"bSH" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "o2_in"; @@ -57638,33 +56075,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVF" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 9 +"bSI" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 }, -/turf/open/floor/plasteel{ +/turf/open/floor/plasteel/delivery{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVG" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - icon_state = "intact"; - dir = 5 - }, -/turf/open/floor/plasteel{ +"bSJ" = ( +/obj/machinery/pipedispenser/disposal, +/turf/open/floor/plasteel/yellow/corner{ 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 }, @@ -57672,20 +56097,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVJ" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +"bSL" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Pure To Canisters"; + on = 0 }, -/obj/machinery/meter, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVK" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix To Canisters"; - on = 0 +"bSM" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -57694,7 +56118,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVL" = ( +"bSN" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -57707,17 +56131,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVM" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 2; - name = "Mix to Filter"; - on = 1 - }, +"bSO" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible, +/obj/machinery/meter, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVN" = ( +"bSP" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 1; min_temperature = 80; @@ -57728,7 +56149,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bVO" = ( +"bSQ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Distro to Waste"; @@ -57738,13 +56159,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" @@ -57761,7 +56182,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bVR" = ( +"bST" = ( /obj/machinery/door/poddoor{ id = "engiestoragesmes"; name = "Engineering SMES Storage" @@ -57770,7 +56191,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bVS" = ( +"bSU" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -57779,13 +56200,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 @@ -57796,7 +56217,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; @@ -57806,7 +56227,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{ @@ -57815,7 +56236,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 @@ -57823,7 +56244,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVY" = ( +"bTa" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille/broken, /turf/open/floor/plating/astplate{ @@ -57832,7 +56253,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bVZ" = ( +"bTb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -57849,7 +56270,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bWa" = ( +"bTc" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -57859,7 +56280,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWb" = ( +"bTd" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57869,7 +56290,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWc" = ( +"bTe" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57881,7 +56302,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWd" = ( +"bTf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57899,7 +56320,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWe" = ( +"bTg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57909,7 +56330,7 @@ dir = 5 }, /area/crew_quarters/fitness) -"bWf" = ( +"bTh" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -57924,7 +56345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWg" = ( +"bTi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -57935,32 +56356,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 @@ -57971,13 +56386,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 @@ -57985,7 +56400,7 @@ /area/library{ name = "Lounge" }) -"bWo" = ( +"bTp" = ( /obj/machinery/camera{ c_tag = "Library Explicits"; dir = 9; @@ -57997,13 +56412,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; @@ -58020,7 +56435,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{ @@ -58031,7 +56446,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; @@ -58045,7 +56460,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 @@ -58057,7 +56472,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWu" = ( +"bTv" = ( /obj/machinery/atmospherics/components/trinary/mixer{ dir = 2; name = "air mixer"; @@ -58072,7 +56487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWv" = ( +"bTw" = ( /obj/machinery/camera{ c_tag = "Atmospherics South"; dir = 4; @@ -58086,7 +56501,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWw" = ( +"bTx" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Mix To Canisters"; @@ -58096,7 +56511,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWx" = ( +"bTy" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ icon_state = "intact"; dir = 10 @@ -58108,7 +56523,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, @@ -58117,12 +56532,8 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWz" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - tag = "icon-intact (NORTHEAST)"; - icon_state = "intact"; - dir = 5 - }, +"bTA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -58130,7 +56541,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWA" = ( +"bTB" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 4; on = 1 @@ -58139,7 +56550,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWB" = ( +"bTC" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/visible, /obj/machinery/meter{ frequency = 1441; @@ -58150,7 +56561,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWC" = ( +"bTD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -58158,7 +56569,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWD" = ( +"bTE" = ( /obj/machinery/light/small{ dir = 8 }, @@ -58177,7 +56588,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bWE" = ( +"bTF" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -58185,7 +56596,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engine_smes) -"bWF" = ( +"bTG" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -58193,7 +56604,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"; @@ -58207,7 +56618,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 @@ -58226,16 +56637,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{ @@ -58244,7 +56655,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 @@ -58252,7 +56663,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 @@ -58260,21 +56671,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" }, @@ -58285,7 +56696,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 @@ -58293,7 +56704,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bWR" = ( +"bTS" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -58302,7 +56713,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWS" = ( +"bTT" = ( /obj/machinery/door/airlock/glass{ name = "Holodeck Arena" }, @@ -58310,7 +56721,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bWT" = ( +"bTU" = ( /obj/machinery/door/airlock{ name = "Private Study" }, @@ -58318,7 +56729,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{ @@ -58327,7 +56738,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bWV" = ( +"bTW" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, @@ -58335,7 +56746,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; @@ -58349,7 +56760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWX" = ( +"bTY" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, @@ -58360,15 +56771,22 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWY" = ( +"bTZ" = ( /obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bWZ" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 8 +"bUa" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (EAST)"; @@ -58377,7 +56795,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXa" = ( +"bUb" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -58389,7 +56807,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXb" = ( +"bUc" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Pure to Mix"; @@ -58402,7 +56820,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"; @@ -58412,7 +56830,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXd" = ( +"bUe" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 8 }, @@ -58420,7 +56838,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXe" = ( +"bUf" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix to Distro"; @@ -58430,7 +56848,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"; @@ -58446,23 +56864,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 }, @@ -58472,7 +56890,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, @@ -58480,7 +56898,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bXl" = ( +"bUm" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -58495,7 +56913,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bXm" = ( +"bUn" = ( /obj/machinery/light/small{ dir = 8 }, @@ -58507,7 +56925,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXn" = ( +"bUo" = ( /obj/structure/barricade/wooden, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -58518,7 +56936,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXo" = ( +"bUp" = ( /obj/structure/girder, /obj/structure/grille, /obj/structure/barricade/wooden, @@ -58528,7 +56946,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXp" = ( +"bUq" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 8 @@ -58540,7 +56958,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bXq" = ( +"bUr" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -58552,7 +56970,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 @@ -58560,7 +56978,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 @@ -58568,7 +56986,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bXt" = ( +"bUu" = ( /obj/structure/sink{ dir = 4; icon_state = "sink"; @@ -58585,7 +57003,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bXu" = ( +"bUv" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -58594,7 +57012,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXv" = ( +"bUw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58602,7 +57020,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; @@ -58616,7 +57034,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXx" = ( +"bUy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58630,7 +57048,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXy" = ( +"bUz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58650,7 +57068,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXz" = ( +"bUA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58661,7 +57079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXA" = ( +"bUB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58678,7 +57096,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bXB" = ( +"bUC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -58691,7 +57109,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" @@ -58701,7 +57119,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; @@ -58713,7 +57131,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bXE" = ( +"bUF" = ( /obj/machinery/newscaster{ pixel_x = -28; pixel_y = 4 @@ -58722,7 +57140,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{ @@ -58734,12 +57152,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; @@ -58749,7 +57167,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXI" = ( +"bUJ" = ( /obj/machinery/meter{ name = "Mixed Air Tank In" }, @@ -58761,7 +57179,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"; @@ -58771,21 +57189,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXK" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, +"bUL" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8 }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/yellow{ +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; 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)"; @@ -58799,25 +57217,21 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXM" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - tag = "icon-intact (NORTHWEST)"; - icon_state = "intact"; - dir = 9 +"bUN" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 }, -/turf/open/floor/plasteel/yellow/side{ +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXN" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 6 - }, -/turf/open/floor/plasteel/yellow/side{ +"bUO" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXO" = ( +"bUP" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 1 }, @@ -58825,7 +57239,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXP" = ( +"bUQ" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, @@ -58833,7 +57247,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXQ" = ( +"bUR" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, @@ -58844,7 +57258,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXR" = ( +"bUS" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, @@ -58855,7 +57269,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"; @@ -58866,7 +57280,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bXT" = ( +"bUU" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "Air to Distro"; @@ -58877,17 +57291,21 @@ dir = 4; icon_state = "tube1" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 4 + }, /turf/open/floor/plasteel{ 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 @@ -58896,40 +57314,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; @@ -58941,14 +57359,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 }, @@ -58956,7 +57374,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 @@ -58965,7 +57383,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYg" = ( +"bVh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -58973,7 +57391,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYh" = ( +"bVi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -58981,7 +57399,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, @@ -58989,7 +57407,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, @@ -58997,7 +57415,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"bYk" = ( +"bVl" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -59008,7 +57426,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/library) -"bYl" = ( +"bVm" = ( /obj/structure/table/wood, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -59019,12 +57437,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" @@ -59033,7 +57451,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYo" = ( +"bVp" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -59042,7 +57460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYp" = ( +"bVq" = ( /obj/machinery/light/small{ dir = 8 }, @@ -59050,13 +57468,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" @@ -59065,37 +57483,27 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYs" = ( -/obj/machinery/computer/atmos_control/tank{ - frequency = 1441; - input_tag = "air_in"; - name = "Mixed Air Supply Control"; - output_tag = "air_out"; - sensors = list("air_sensor" = "Tank") - }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - tag = "icon-intact (NORTHEAST)"; - icon_state = "intact"; - dir = 5 - }, -/turf/open/floor/plasteel/vault{ - baseturf = /turf/open/floor/plating/asteroid/airless; - dir = 5 - }, -/area/atmos) -"bYt" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - tag = "icon-intact (WEST)"; - icon_state = "intact"; +"bVt" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/structure/window/reinforced, -/turf/open/floor/plasteel/yellow{ +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYu" = ( +"bVu" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bVv" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 4; filter_type = "co2"; @@ -59113,7 +57521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYv" = ( +"bVw" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "co2_in"; @@ -59129,7 +57537,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYw" = ( +"bVx" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59146,19 +57554,16 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYx" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ +"bVy" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, -/obj/structure/window/reinforced{ - dir = 1; - layer = 2.9 - }, -/turf/open/floor/plasteel/black{ +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/yellow/side{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYy" = ( +"bVz" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 4; filter_type = "plasma"; @@ -59173,7 +57578,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYz" = ( +"bVA" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59188,7 +57593,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYA" = ( +"bVB" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59205,7 +57610,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYB" = ( +"bVC" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; filter_type = "n2"; @@ -59220,7 +57625,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYC" = ( +"bVD" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59235,7 +57640,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYD" = ( +"bVE" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59248,7 +57653,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYE" = ( +"bVF" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59260,7 +57665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYF" = ( +"bVG" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, @@ -59276,13 +57681,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; @@ -59292,7 +57697,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bYI" = ( +"bVJ" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1; initialize_directions = 11 @@ -59302,7 +57707,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"; @@ -59312,7 +57717,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 @@ -59320,7 +57725,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"bYL" = ( +"bVM" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -59341,7 +57746,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"bYM" = ( +"bVN" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -59363,7 +57768,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"bYN" = ( +"bVO" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 @@ -59375,7 +57780,7 @@ }, /turf/open/space, /area/space) -"bYO" = ( +"bVP" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -59390,7 +57795,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"bYP" = ( +"bVQ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -59406,7 +57811,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"bYQ" = ( +"bVR" = ( /obj/machinery/power/apc{ dir = 4; name = "Fitness Bathroom APC"; @@ -59428,7 +57833,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bYR" = ( +"bVS" = ( /obj/machinery/camera{ c_tag = "Fitness Bathrooms"; dir = 4; @@ -59448,7 +57853,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bYS" = ( +"bVT" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -59458,20 +57863,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, @@ -59486,7 +57891,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bYW" = ( +"bVX" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -59496,12 +57901,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)"; @@ -59511,7 +57916,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bYZ" = ( +"bWa" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 24 }, @@ -59519,13 +57924,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; @@ -59541,7 +57946,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZc" = ( +"bWd" = ( /obj/machinery/meter{ name = "Mixed Air Tank Out" }, @@ -59553,76 +57958,130 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZd" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 1; - initialize_directions = 11 +"bWe" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10; + initialize_directions = 10 }, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZe" = ( +"bWf" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + tag = "icon-intact (NORTHEAST)"; + icon_state = "intact"; + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/plasteel/barber, +/area/atmos) +"bWg" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/obj/structure/window/reinforced, /obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Air to Pure"; + on = 0 + }, +/turf/open/floor/plasteel/barber, +/area/atmos) +"bWh" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/eastright{ + dir = 1; + name = "Interior Pipe Access"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"bWi" = ( +/obj/machinery/atmospherics/components/trinary/filter{ dir = 4; - name = "Air to Pure" + filter_type = "co2"; + name = "co2 filter"; + on = 1 }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/vault{ + initial_gas_mix = "n2=100;TEMP=80"; + temperature = 80 }, /area/atmos) -"bZf" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - tag = "icon-intact (WEST)"; - icon_state = "intact"; - dir = 8 +"bWj" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "co2_in"; + name = "Carbon Dioxide Supply Control"; + output_tag = "co2_out"; + sensors = list("co2_sensor" = "Tank") }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/vault{ + dir = 5; + initial_gas_mix = "n2=500;TEMP=80"; + temperature = 80 }, /area/atmos) -"bZg" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible, -/obj/machinery/meter, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless +"bWk" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "CO2 to Pure"; + on = 0 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/vault{ + initial_gas_mix = "n2=100;TEMP=80"; + temperature = 80 }, /area/atmos) -"bZh" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - tag = "icon-intact (WEST)"; - icon_state = "intact"; - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless +"bWl" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4; + filter_type = "plasma"; + name = "plasma filter"; + on = 1 }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/purple, /area/atmos) -"bZi" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - tag = "icon-intact (NORTHWEST)"; - icon_state = "intact"; - dir = 9 +"bWm" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Unfiltered to Mix"; + on = 1 }, -/area/atmos) -"bZj" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bZk" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/atmos) -"bZl" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/yellow/side{ tag = "icon-yellow (WEST)"; icon_state = "yellow"; @@ -59630,15 +58089,20 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZm" = ( +"bWn" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (NORTHWEST)"; + icon_state = "intact"; + dir = 9 + }, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZn" = ( +"bWo" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -59654,7 +58118,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"bZo" = ( +"bWp" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -59674,7 +58138,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"bZp" = ( +"bWq" = ( /obj/machinery/light{ dir = 8 }, @@ -59687,7 +58151,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bZq" = ( +"bWr" = ( /obj/machinery/door/airlock{ id_tag = "fb1" }, @@ -59698,7 +58162,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"bZr" = ( +"bWs" = ( /obj/machinery/light/small, /obj/structure/toilet{ icon_state = "toilet00"; @@ -59717,13 +58181,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{ @@ -59736,7 +58200,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"bZu" = ( +"bWv" = ( /obj/machinery/camera{ c_tag = "Chapel West"; dir = 5; @@ -59749,7 +58213,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZv" = ( +"bWw" = ( /obj/machinery/light{ dir = 1 }, @@ -59760,7 +58224,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"; @@ -59768,7 +58232,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"; @@ -59776,16 +58240,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 }, @@ -59793,7 +58248,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZA" = ( +"bWA" = ( /obj/structure/chair{ dir = 4 }, @@ -59801,7 +58256,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZB" = ( +"bWB" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -59810,7 +58265,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"bZC" = ( +"bWC" = ( /obj/machinery/light{ dir = 1 }, @@ -59821,12 +58276,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 }, @@ -59834,7 +58289,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"; @@ -59843,12 +58298,11 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/pipedispenser/disposal, /turf/open/floor/plasteel/black{ 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 @@ -59857,7 +58311,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZH" = ( +"bWH" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -59865,7 +58319,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 @@ -59874,21 +58328,19 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZJ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, +"bWJ" = ( /obj/machinery/camera{ c_tag = "Atmoshperic Tanks 1"; dir = 1; icon_state = "camera"; network = list("SS13","CE") }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZK" = ( +"bWK" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, @@ -59897,7 +58349,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 @@ -59907,7 +58359,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, @@ -59916,7 +58368,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 @@ -59928,7 +58380,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZO" = ( +"bWO" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; input_tag = "mix_in"; @@ -59943,7 +58395,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 @@ -59952,7 +58404,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)"; @@ -59963,7 +58415,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"bZR" = ( +"bWR" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 }, @@ -59971,17 +58423,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 @@ -59991,7 +58443,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"; @@ -60004,7 +58456,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, @@ -60013,7 +58465,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"; @@ -60021,30 +58473,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 }, @@ -60054,7 +58506,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 @@ -60062,7 +58514,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cae" = ( +"bXe" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -60072,7 +58524,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caf" = ( +"bXf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -60087,7 +58539,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cag" = ( +"bXg" = ( /obj/machinery/meter, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/green/visible, @@ -60095,7 +58547,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, @@ -60103,17 +58555,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 @@ -60121,7 +58563,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cak" = ( +"bXj" = ( /obj/structure/table, /obj/item/weapon/storage/toolbox/electrical, /turf/open/floor/plating{ @@ -60130,7 +58572,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cal" = ( +"bXk" = ( /obj/structure/table, /obj/machinery/light/small{ dir = 1 @@ -60141,18 +58583,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; @@ -60165,7 +58607,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 @@ -60176,7 +58618,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"caq" = ( +"bXp" = ( /obj/machinery/door/airlock{ id_tag = "fb2" }, @@ -60189,7 +58631,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"car" = ( +"bXq" = ( /obj/machinery/light/small, /obj/structure/toilet{ icon_state = "toilet00"; @@ -60207,7 +58649,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cas" = ( +"bXr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; @@ -60218,7 +58660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cat" = ( +"bXs" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -60232,7 +58674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cau" = ( +"bXt" = ( /obj/machinery/door/airlock/glass{ name = "Chapel" }, @@ -60242,7 +58684,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cav" = ( +"bXu" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -60250,19 +58692,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; @@ -60272,7 +58714,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"caz" = ( +"bXy" = ( /obj/machinery/power/apc{ dir = 8; name = "Chapel APC"; @@ -60294,7 +58736,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; @@ -60305,7 +58747,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caB" = ( +"bXA" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "co2_sensor" @@ -60314,7 +58756,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; @@ -60331,7 +58773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caD" = ( +"bXC" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -60342,7 +58784,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caE" = ( +"bXD" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "tox_sensor" @@ -60351,7 +58793,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; @@ -60369,7 +58811,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caG" = ( +"bXF" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -60380,7 +58822,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caH" = ( +"bXG" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "n2o_sensor" @@ -60389,7 +58831,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; @@ -60406,7 +58848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caJ" = ( +"bXI" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1; frequency = 1441; @@ -60417,7 +58859,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/atmos) -"caK" = ( +"bXJ" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "mix_sensor" @@ -60426,7 +58868,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; @@ -60443,14 +58885,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, @@ -60460,14 +58902,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 @@ -60478,7 +58920,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"caQ" = ( +"bXP" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ d1 = 1; @@ -60487,7 +58929,7 @@ }, /turf/open/space, /area/space) -"caR" = ( +"bXQ" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -60500,7 +58942,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caS" = ( +"bXR" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -60511,7 +58953,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caT" = ( +"bXS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -60521,7 +58963,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caU" = ( +"bXT" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -60532,7 +58974,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caV" = ( +"bXU" = ( /obj/effect/turf_decal/stripes/end, /obj/structure/cable/orange{ d2 = 8; @@ -60548,7 +58990,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caW" = ( +"bXV" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (NORTHEAST)"; icon_state = "conveyor0"; @@ -60558,7 +59000,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caX" = ( +"bXW" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -60569,7 +59011,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"caY" = ( +"bXX" = ( /obj/machinery/door/airlock{ name = "Shower Room" }, @@ -60579,7 +59021,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 @@ -60587,7 +59029,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cba" = ( +"bXZ" = ( /obj/machinery/door/airlock/glass{ name = "Holodeck Arena" }, @@ -60595,7 +59037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbb" = ( +"bYa" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -60604,13 +59046,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 @@ -60625,7 +59067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cbe" = ( +"bYd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -60638,7 +59080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbf" = ( +"bYe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -60646,7 +59088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbg" = ( +"bYf" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -60654,40 +59096,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 }, @@ -60695,19 +59137,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 }, @@ -60718,14 +59160,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 }, @@ -60735,13 +59177,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 }, @@ -60749,7 +59191,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbv" = ( +"bYu" = ( /obj/machinery/light/small{ dir = 4 }, @@ -60763,7 +59205,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, @@ -60773,7 +59215,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cbx" = ( +"bYw" = ( /obj/machinery/shower{ dir = 4 }, @@ -60783,7 +59225,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 @@ -60791,7 +59233,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"cbz" = ( +"bYy" = ( /obj/machinery/shower{ dir = 8 }, @@ -60801,14 +59243,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 }, @@ -60816,7 +59258,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbC" = ( +"bYB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60826,7 +59268,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cbD" = ( +"bYC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60838,7 +59280,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 @@ -60847,7 +59289,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; @@ -60862,7 +59304,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, @@ -60874,7 +59316,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbH" = ( +"bYG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60889,7 +59331,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbI" = ( +"bYH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60900,7 +59342,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbJ" = ( +"bYI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60908,7 +59350,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbK" = ( +"bYJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60919,7 +59361,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbL" = ( +"bYK" = ( /obj/structure/chair{ dir = 4 }, @@ -60930,7 +59372,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbM" = ( +"bYL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60939,7 +59381,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cbN" = ( +"bYM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -60947,38 +59389,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{ @@ -60987,7 +59429,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 @@ -60995,7 +59437,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 @@ -61003,7 +59445,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cbW" = ( +"bYV" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ dir = 4 @@ -61012,7 +59454,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbX" = ( +"bYW" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -61023,7 +59465,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbY" = ( +"bYX" = ( /obj/machinery/conveyor/auto{ dir = 10; icon_state = "conveyor0"; @@ -61034,7 +59476,7 @@ /area/maintenance/disposal{ name = "Eastern External Waste Belt" }) -"cbZ" = ( +"bYY" = ( /obj/structure/rack, /obj/item/weapon/pickaxe/emergency, /obj/effect/spawner/lootdrop/maintenance, @@ -61045,7 +59487,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 @@ -61053,7 +59495,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccb" = ( +"bZa" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -61064,7 +59506,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccc" = ( +"bZb" = ( /obj/structure/table, /obj/item/weapon/paper{ desc = ""; @@ -61075,7 +59517,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; @@ -61086,7 +59528,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; @@ -61096,7 +59538,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ccf" = ( +"bZe" = ( /obj/machinery/door/airlock/glass{ name = "Holodeck Arena" }, @@ -61108,7 +59550,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 @@ -61117,7 +59559,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cch" = ( +"bZg" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 4 @@ -61126,7 +59568,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cci" = ( +"bZh" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -61145,7 +59587,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccj" = ( +"bZi" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -61157,19 +59599,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)"; @@ -61178,7 +59620,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccn" = ( +"bZm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -61193,14 +59635,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 @@ -61214,19 +59656,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 @@ -61234,7 +59676,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{ @@ -61243,20 +59685,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" @@ -61265,7 +59707,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccx" = ( +"bZw" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -61283,7 +59725,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccy" = ( +"bZx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61291,7 +59733,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccz" = ( +"bZy" = ( /obj/machinery/door/morgue{ name = "Confession Room" }, @@ -61302,7 +59744,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccA" = ( +"bZz" = ( /obj/machinery/door/morgue{ name = "Confession Room"; req_access_txt = "22" @@ -61314,7 +59756,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccB" = ( +"bZA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61322,7 +59764,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 @@ -61331,7 +59773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccD" = ( +"bZC" = ( /obj/structure/disposalpipe/sortjunction{ dir = 8; icon_state = "pipe-j2s"; @@ -61342,7 +59784,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"; @@ -61355,7 +59797,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccF" = ( +"bZE" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -61364,7 +59806,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 @@ -61372,7 +59814,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 @@ -61380,7 +59822,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ccI" = ( +"bZH" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -61389,7 +59831,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 @@ -61397,7 +59839,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccK" = ( +"bZJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1 @@ -61408,7 +59850,7 @@ /area/crew_quarters/toilet{ name = "Fitness Toilets" }) -"ccL" = ( +"bZK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -61419,7 +59861,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ccM" = ( +"bZL" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -61429,10 +59871,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 }, @@ -61441,14 +59883,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 }, @@ -61457,7 +59899,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"ccR" = ( +"bZQ" = ( /obj/machinery/door/morgue{ name = "Confession Room"; req_access_txt = "22" @@ -61466,7 +59908,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"; @@ -61476,7 +59918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccT" = ( +"bZS" = ( /obj/machinery/light_switch{ pixel_y = 24 }, @@ -61485,13 +59927,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)"; @@ -61501,12 +59943,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" @@ -61515,7 +59957,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ccY" = ( +"bZX" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -61527,7 +59969,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" @@ -61539,7 +59981,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/main) -"cda" = ( +"bZZ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -61548,7 +59990,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; @@ -61557,7 +59999,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" @@ -61565,7 +60007,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdd" = ( +"cac" = ( /obj/item/chair/stool, /obj/structure/sign/poster/random{ name = "random contraband poster"; @@ -61579,7 +60021,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{ @@ -61589,14 +60031,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" }, @@ -61606,7 +60048,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdh" = ( +"cag" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -61615,7 +60057,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdi" = ( +"cah" = ( /obj/structure/sign/mining{ pixel_y = -32 }, @@ -61630,12 +60072,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cdj" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"cdk" = ( +"cai" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 2 @@ -61646,7 +60083,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdl" = ( +"caj" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61656,7 +60093,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdm" = ( +"cak" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61666,7 +60103,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdn" = ( +"cal" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61678,7 +60115,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdo" = ( +"cam" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61689,7 +60126,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdp" = ( +"can" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -61701,7 +60138,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdq" = ( +"cao" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -61717,12 +60154,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"; @@ -61733,13 +60170,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 }, @@ -61748,7 +60185,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdv" = ( +"cat" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61756,7 +60193,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; @@ -61766,13 +60203,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 @@ -61780,7 +60217,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{ @@ -61790,7 +60227,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdA" = ( +"cay" = ( /obj/structure/light_construct{ dir = 4 }, @@ -61802,7 +60239,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdB" = ( +"caz" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -61813,7 +60250,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"cdC" = ( +"caA" = ( /obj/machinery/light/small{ dir = 1 }, @@ -61823,7 +60260,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdD" = ( +"caB" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -61836,7 +60273,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdE" = ( +"caC" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -61853,7 +60290,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdF" = ( +"caD" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -61861,7 +60298,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 @@ -61869,7 +60306,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdH" = ( +"caF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ dir = 4; @@ -61879,7 +60316,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cdI" = ( +"caG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -61898,11 +60335,7 @@ 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 }, @@ -61913,11 +60346,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 }, @@ -61936,20 +60373,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, @@ -61957,7 +60394,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, @@ -61966,13 +60403,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; @@ -61987,7 +60424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cdR" = ( +"caP" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -62004,7 +60441,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{ @@ -62013,7 +60450,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cdT" = ( +"caR" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /turf/open/floor/plating{ @@ -62022,7 +60459,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdU" = ( +"caS" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -62035,7 +60472,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 @@ -62043,7 +60480,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 @@ -62051,7 +60488,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cdX" = ( +"caV" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -62061,25 +60498,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; @@ -62090,13 +60527,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 @@ -62105,7 +60542,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, @@ -62113,13 +60550,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 @@ -62129,7 +60566,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceh" = ( +"cbf" = ( /obj/machinery/newscaster{ pixel_x = 32 }, @@ -62137,7 +60574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cei" = ( +"cbg" = ( /obj/structure/closet/coffin, /obj/machinery/camera{ c_tag = "Chapel Coffins"; @@ -62148,7 +60585,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 @@ -62156,7 +60593,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cek" = ( +"cbi" = ( /obj/structure/sign/poster/random{ name = "random contraband poster"; pixel_x = 0; @@ -62170,7 +60607,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cel" = ( +"cbj" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -62183,7 +60620,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cem" = ( +"cbk" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" @@ -62194,7 +60631,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cen" = ( +"cbl" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 4 @@ -62206,7 +60643,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceo" = ( +"cbm" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -62219,7 +60656,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cep" = ( +"cbn" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" @@ -62233,7 +60670,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceq" = ( +"cbo" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -62247,7 +60684,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cer" = ( +"cbp" = ( /obj/machinery/light/small, /obj/structure/disposalpipe/segment{ dir = 4 @@ -62258,7 +60695,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ces" = ( +"cbq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -62269,26 +60706,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" @@ -62297,7 +60734,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cex" = ( +"cbv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -62306,19 +60743,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; @@ -62335,7 +60772,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceB" = ( +"cbz" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -62348,7 +60785,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceC" = ( +"cbA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -62363,7 +60800,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ceD" = ( +"cbB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -62376,7 +60813,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"ceE" = ( +"cbC" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -62388,7 +60825,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 @@ -62396,7 +60833,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceG" = ( +"cbE" = ( /obj/item/chair, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62404,7 +60841,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceH" = ( +"cbF" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -62417,7 +60854,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceI" = ( +"cbG" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 4 @@ -62429,7 +60866,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"ceJ" = ( +"cbH" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -62441,7 +60878,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 @@ -62449,13 +60886,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 @@ -62468,7 +60905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceN" = ( +"cbL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -62489,7 +60926,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; @@ -62505,7 +60942,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceP" = ( +"cbN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -62523,7 +60960,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceQ" = ( +"cbO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -62541,7 +60978,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceR" = ( +"cbP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -62561,7 +60998,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceS" = ( +"cbQ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -62569,7 +61006,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"ceT" = ( +"cbR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -62584,7 +61021,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"ceU" = ( +"cbS" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -62599,7 +61036,7 @@ 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, @@ -62615,7 +61052,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" @@ -62627,13 +61064,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" @@ -62642,7 +61079,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"ceZ" = ( +"cbX" = ( /obj/structure/cable/orange, /obj/machinery/power/apc{ dir = 2; @@ -62656,7 +61093,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 @@ -62664,7 +61101,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"; @@ -62678,7 +61115,7 @@ /area/crew_quarters/bar{ name = "Gambler's Den" }) -"cfc" = ( +"cca" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -62690,7 +61127,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfd" = ( +"ccb" = ( /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; @@ -62703,7 +61140,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfe" = ( +"ccc" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -62715,7 +61152,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cff" = ( +"ccd" = ( /obj/machinery/light/small, /obj/structure/closet/toolcloset, /turf/open/floor/plating{ @@ -62724,7 +61161,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfg" = ( +"cce" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -62732,7 +61169,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfh" = ( +"ccf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -62741,7 +61178,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cfi" = ( +"ccg" = ( /obj/machinery/light{ dir = 8 }, @@ -62751,7 +61188,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfj" = ( +"cch" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -62765,7 +61202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfk" = ( +"cci" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -62777,7 +61214,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfl" = ( +"ccj" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -62786,7 +61223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfm" = ( +"cck" = ( /obj/structure/bodycontainer/crematorium{ id = "creamed" }, @@ -62794,12 +61231,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; @@ -62814,7 +61251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfp" = ( +"ccn" = ( /obj/structure/plasticflaps, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; @@ -62826,7 +61263,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cfq" = ( +"cco" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -62839,7 +61276,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfr" = ( +"ccp" = ( /obj/structure/disposalpipe/segment, /obj/structure/closet/firecloset/full, /turf/open/floor/plasteel/floorgrime{ @@ -62848,7 +61285,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 @@ -62856,7 +61293,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 @@ -62864,7 +61301,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfu" = ( +"ccs" = ( /obj/structure/bed, /obj/item/weapon/bedsheet/clown, /turf/open/floor/plating{ @@ -62873,7 +61310,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, @@ -62887,7 +61324,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfw" = ( +"ccu" = ( /obj/structure/mineral_door/wood{ name = "Secret Clown HQ" }, @@ -62897,7 +61334,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfx" = ( +"ccv" = ( /obj/machinery/light/small{ dir = 4 }, @@ -62907,7 +61344,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/fitness) -"cfy" = ( +"ccw" = ( /obj/structure/sign/map/left/ceres{ pixel_x = -32 }, @@ -62917,7 +61354,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfz" = ( +"ccx" = ( /obj/machinery/light/small{ dir = 8 }, @@ -62932,7 +61369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cfA" = ( +"ccy" = ( /obj/machinery/button/crematorium{ id = "creamed"; pixel_x = -24 @@ -62941,20 +61378,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" }, @@ -62972,14 +61409,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" }, @@ -62989,7 +61426,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 @@ -62997,7 +61434,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cfH" = ( +"ccF" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -63006,24 +61443,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 }, @@ -63032,7 +61469,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cfM" = ( +"ccK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -63042,7 +61479,7 @@ /area/mine/unexplored{ name = "Civilian Asteroid" }) -"cfN" = ( +"ccL" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -63060,7 +61497,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cfO" = ( +"ccM" = ( /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; name = "reinforced floor" @@ -63068,13 +61505,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cfP" = ( -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/hallway/primary/port) -"cfQ" = ( +"ccN" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -63089,7 +61520,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cfR" = ( +"ccO" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -63111,7 +61542,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cfS" = ( +"ccP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -63126,7 +61557,7 @@ /area/mine/unexplored{ name = "Civilian Asteroid" }) -"cfT" = ( +"ccQ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -63137,7 +61568,7 @@ }, /turf/open/space, /area/space) -"cfU" = ( +"ccR" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -63158,7 +61589,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"cfV" = ( +"ccS" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -63180,7 +61611,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"cfW" = ( +"ccT" = ( /obj/structure/table, /obj/item/toy/figure/clown, /turf/open/floor/plating{ @@ -63189,7 +61620,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" }, @@ -63204,7 +61635,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{ @@ -63213,7 +61644,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 @@ -63224,7 +61655,7 @@ /area/crew_quarters/theatre{ name = "Top Secret Clown HQ" }) -"cga" = ( +"ccX" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -63240,7 +61671,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cgb" = ( +"ccY" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -63260,7 +61691,7 @@ /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{ @@ -63272,7 +61703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgd" = ( +"cda" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ d1 = 1; @@ -63282,17 +61713,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 }, @@ -63303,7 +61730,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgh" = ( +"cdd" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 2 }, @@ -63317,23 +61744,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; @@ -63348,19 +61775,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"; @@ -63372,7 +61799,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cgp" = ( +"cdl" = ( /obj/machinery/light{ dir = 8 }, @@ -63383,7 +61810,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cgq" = ( +"cdm" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -63391,7 +61818,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgr" = ( +"cdn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -63399,7 +61826,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"; @@ -63413,7 +61840,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgt" = ( +"cdp" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 1 }, @@ -63427,29 +61854,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 }, @@ -63465,7 +61887,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 @@ -63478,7 +61900,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgA" = ( +"cdv" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -63490,7 +61912,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgB" = ( +"cdw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -63501,7 +61923,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 @@ -63509,7 +61931,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, @@ -63519,19 +61941,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 }, @@ -63546,7 +61968,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgH" = ( +"cdC" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -63554,7 +61976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgI" = ( +"cdD" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -63563,7 +61985,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cgJ" = ( +"cdE" = ( /obj/item/device/radio/intercom{ broadcasting = 0; name = "Station Intercom (General)"; @@ -63577,7 +61999,7 @@ 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{ @@ -63586,58 +62008,50 @@ /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/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" - }) -"cgU" = ( +"cdO" = ( /obj/machinery/light/small{ dir = 8 }, @@ -63648,13 +62062,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cgV" = ( -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/hallway/primary/aft) -"cgW" = ( +"cdP" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Service-Research Bridge"; @@ -63668,20 +62076,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"cgX" = ( -/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" - }) -"cgY" = ( +"cdQ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -63693,13 +62088,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 }, @@ -63711,40 +62106,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/disposalpipe/segment, -/turf/open/floor/engine{ - baseturf = /turf/open/floor/plating/asteroid/airless; - name = "reinforced floor" - }, -/area/construction/hallway{ - name = "Service-Science Bridge" - }) -"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"; @@ -63758,7 +62144,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, @@ -63771,10 +62157,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 }, @@ -63789,7 +62175,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chk" = ( +"ceb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -63804,7 +62190,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chl" = ( +"cec" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -63818,29 +62204,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, @@ -63850,21 +62222,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; @@ -63883,7 +62255,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cht" = ( +"cej" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63894,7 +62266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"chu" = ( +"cek" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -63913,11 +62285,7 @@ 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; @@ -63927,11 +62295,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; @@ -63950,41 +62322,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" }, @@ -64009,7 +62366,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chE" = ( +"ceq" = ( /obj/machinery/power/terminal{ dir = 4 }, @@ -64027,7 +62384,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chF" = ( +"cer" = ( /obj/machinery/power/smes, /obj/structure/cable/orange{ d2 = 2; @@ -64046,7 +62403,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chG" = ( +"ces" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -64060,35 +62417,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; @@ -64103,7 +62447,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"chO" = ( +"cew" = ( /obj/structure/cable{ icon_state = "0-2"; pixel_y = 1; @@ -64123,7 +62467,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"chP" = ( +"cex" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -64138,7 +62482,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"chQ" = ( +"cey" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -64157,7 +62501,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chR" = ( +"cez" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -64170,7 +62514,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chS" = ( +"ceA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -64189,7 +62533,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chT" = ( +"ceB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -64207,7 +62551,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chU" = ( +"ceC" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -64219,7 +62563,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chV" = ( +"ceD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -64231,7 +62575,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"chW" = ( +"ceE" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -64249,12 +62593,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 @@ -64263,49 +62607,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 }, @@ -64316,7 +62658,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cig" = ( +"ceM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -64324,20 +62666,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 }, @@ -64345,7 +62674,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cij" = ( +"ceO" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -64359,7 +62688,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"cik" = ( +"ceP" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -64388,7 +62717,7 @@ }, /turf/open/floor/plasteel, /area/storage/tech) -"cil" = ( +"ceQ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -64401,24 +62730,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"; @@ -64431,7 +62760,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"ciq" = ( +"ceV" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -64444,7 +62773,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"cir" = ( +"ceW" = ( /obj/machinery/power/apc{ dir = 4; name = "Aft Asteroid Solar APC"; @@ -64471,7 +62800,7 @@ /area/maintenance/portsolar{ name = "Aft Asteroid Solar Maintenance" }) -"cis" = ( +"ceX" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -64489,7 +62818,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cit" = ( +"ceY" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; opened = 1 @@ -64499,7 +62828,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ciu" = ( +"ceZ" = ( /obj/structure/chair, /turf/open/floor/plasteel/red/side{ tag = "icon-red (NORTHWEST)"; @@ -64508,7 +62837,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"; @@ -64516,7 +62845,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciw" = ( +"cfb" = ( /obj/structure/chair, /obj/machinery/light{ dir = 1 @@ -64527,7 +62856,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"; @@ -64540,7 +62869,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ciy" = ( +"cfd" = ( /obj/structure/chair, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -64553,7 +62882,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)"; @@ -64562,7 +62891,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, @@ -64570,14 +62899,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 }, @@ -64587,7 +62917,7 @@ /area/mine/unexplored{ name = "Research Asteroid" }) -"ciD" = ( +"cfi" = ( /obj/structure/window/reinforced{ dir = 4; pixel_x = 0 @@ -64605,7 +62935,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"ciE" = ( +"cfj" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -64627,7 +62957,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"ciF" = ( +"cfk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -64642,7 +62972,7 @@ /area/mine/unexplored{ name = "Research Asteroid" }) -"ciG" = ( +"cfl" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -64650,12 +62980,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 }, @@ -64663,7 +62993,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ciJ" = ( +"cfo" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -64677,7 +63007,7 @@ /obj/structure/grille, /turf/open/floor/plating, /area/storage/tech) -"ciK" = ( +"cfp" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -64698,7 +63028,7 @@ /obj/machinery/light/small, /turf/open/floor/plasteel, /area/storage/tech) -"ciL" = ( +"cfq" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -64717,7 +63047,7 @@ }, /turf/open/floor/plasteel, /area/storage/tech) -"ciM" = ( +"cfr" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -64738,7 +63068,7 @@ /obj/machinery/light/small, /turf/open/floor/plasteel, /area/storage/tech) -"ciN" = ( +"cfs" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -64752,14 +63082,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 }, @@ -64770,12 +63100,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" @@ -64792,20 +63122,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 }, @@ -64813,7 +63143,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; @@ -64824,62 +63154,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 @@ -64887,12 +63196,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)"; @@ -64901,13 +63210,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{ @@ -64917,7 +63226,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; @@ -64930,12 +63239,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" @@ -64950,7 +63259,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, @@ -64960,7 +63269,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjo" = ( +"cfQ" = ( /obj/structure/ore_box, /obj/effect/turf_decal/delivery, /obj/machinery/light/small{ @@ -64972,7 +63281,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjp" = ( +"cfR" = ( /obj/structure/rack, /obj/item/weapon/pickaxe, /obj/item/weapon/pickaxe, @@ -64984,7 +63293,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjq" = ( +"cfS" = ( /obj/machinery/light/small{ dir = 4 }, @@ -64994,11 +63303,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; @@ -65013,7 +63322,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjt" = ( +"cfV" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -65025,7 +63334,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cju" = ( +"cfW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -65036,7 +63345,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cjv" = ( +"cfX" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -65044,19 +63353,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 }, @@ -65064,44 +63373,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 }, @@ -65110,7 +63412,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"; @@ -65118,12 +63420,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"; @@ -65131,7 +63433,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cjI" = ( +"cgj" = ( /obj/machinery/light/small{ dir = 8 }, @@ -65139,7 +63441,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjJ" = ( +"cgk" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -65155,7 +63457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cjK" = ( +"cgl" = ( /obj/machinery/power/apc{ dir = 1; name = "Tech Storage APC"; @@ -65169,10 +63471,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 }, @@ -65185,7 +63487,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjN" = ( +"cgo" = ( /obj/structure/cable{ icon_state = "0-4"; d2 = 4 @@ -65199,7 +63501,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjO" = ( +"cgp" = ( /obj/machinery/power/apc{ dir = 1; name = "Mining Storage APC"; @@ -65215,7 +63517,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{ @@ -65224,7 +63526,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cjQ" = ( +"cgr" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -65235,12 +63537,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, @@ -65250,7 +63552,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cjT" = ( +"cgu" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -65262,47 +63564,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"; @@ -65310,7 +63612,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckb" = ( +"cgC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -65318,7 +63620,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckc" = ( +"cgD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -65326,7 +63628,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"ckd" = ( +"cgE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -65334,14 +63636,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"; @@ -65351,39 +63653,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 }, @@ -65393,7 +63708,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckn" = ( +"cgN" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -65409,7 +63724,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; @@ -65425,7 +63740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckp" = ( +"cgP" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -65434,7 +63749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"ckq" = ( +"cgQ" = ( /obj/docking_port/mobile/auxillary_base{ dheight = 4; dir = 4; @@ -65445,11 +63760,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 @@ -65458,7 +63774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cks" = ( +"cgS" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -65467,7 +63783,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, @@ -65477,7 +63793,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cku" = ( +"cgU" = ( /obj/structure/table, /obj/item/clothing/glasses/meson, /obj/item/weapon/paper{ @@ -65490,7 +63806,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 @@ -65498,14 +63814,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 @@ -65513,7 +63829,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"cky" = ( +"cgY" = ( /obj/structure/sign/mining{ pixel_y = 32 }, @@ -65524,7 +63840,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"ckz" = ( +"cgZ" = ( /obj/machinery/light/small{ dir = 4 }, @@ -65532,10 +63848,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 }, @@ -65554,7 +63870,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckB" = ( +"chb" = ( /obj/machinery/light/small{ dir = 1 }, @@ -65564,7 +63880,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckC" = ( +"chc" = ( /obj/machinery/computer/station_alert, /obj/structure/cable/orange{ d2 = 2; @@ -65576,7 +63892,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckD" = ( +"chd" = ( /obj/machinery/camera{ c_tag = "Arrivals SMES"; dir = 6; @@ -65588,7 +63904,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"ckE" = ( +"che" = ( /obj/structure/table, /obj/machinery/cell_charger, /turf/open/floor/plating{ @@ -65597,13 +63913,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 }, @@ -65611,13 +63927,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, @@ -65626,7 +63942,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" @@ -65636,18 +63952,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 }, @@ -65656,7 +63964,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckN" = ( +"chm" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -65665,7 +63973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckO" = ( +"chn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -65676,7 +63984,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; @@ -65686,7 +63994,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ckQ" = ( +"chp" = ( /obj/machinery/light/small{ dir = 8 }, @@ -65701,7 +64009,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, @@ -65714,7 +64022,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, @@ -65723,7 +64031,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, @@ -65735,7 +64043,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckU" = ( +"cht" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -65746,7 +64054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckV" = ( +"chu" = ( /obj/structure/table, /obj/machinery/cell_charger{ pixel_y = 5 @@ -65759,7 +64067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckW" = ( +"chv" = ( /obj/structure/table, /obj/item/stack/cable_coil{ pixel_x = -3; @@ -65774,7 +64082,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckX" = ( +"chw" = ( /obj/structure/table, /obj/item/weapon/screwdriver{ pixel_y = 16 @@ -65784,7 +64092,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"ckY" = ( +"chx" = ( /obj/structure/table, /obj/item/weapon/aiModule/reset, /obj/machinery/light{ @@ -65795,7 +64103,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 }, @@ -65803,13 +64111,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 }, @@ -65817,13 +64125,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 @@ -65832,7 +64140,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 @@ -65849,7 +64157,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"clf" = ( +"chE" = ( /obj/machinery/light/small, /obj/structure/table, /turf/open/floor/plating{ @@ -65858,7 +64166,7 @@ /area/quartermaster/miningdock{ name = "Abandoned Mining Storage" }) -"clg" = ( +"chF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -65870,7 +64178,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clh" = ( +"chG" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -65882,7 +64190,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cli" = ( +"chH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -65904,7 +64212,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clj" = ( +"chI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65916,7 +64224,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clk" = ( +"chJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -65928,14 +64236,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; @@ -65948,7 +64256,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cln" = ( +"chM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65960,7 +64268,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clo" = ( +"chN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -65973,7 +64281,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clp" = ( +"chO" = ( /obj/machinery/power/apc{ dir = 2; name = "Auxillary Construction APC"; @@ -65997,7 +64305,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"clq" = ( +"chP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -66010,13 +64318,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; @@ -66029,7 +64337,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)"; @@ -66038,7 +64346,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"; @@ -66046,13 +64354,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 }, @@ -66060,7 +64368,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clx" = ( +"chW" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -66068,40 +64376,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 @@ -66110,7 +64418,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, @@ -66118,7 +64426,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"; @@ -66131,13 +64439,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"; @@ -66151,7 +64459,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"clG" = ( +"cie" = ( /obj/machinery/light{ dir = 4 }, @@ -66162,7 +64470,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; @@ -66177,7 +64485,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, @@ -66194,12 +64502,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; @@ -66211,7 +64519,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, @@ -66222,7 +64530,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{ @@ -66232,17 +64540,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{ @@ -66255,7 +64563,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; @@ -66267,7 +64575,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clR" = ( +"cip" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/orange, /turf/open/floor/plasteel/floorgrime{ @@ -66276,7 +64584,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clS" = ( +"ciq" = ( /obj/machinery/power/terminal{ tag = "icon-term (WEST)"; icon_state = "term"; @@ -66295,7 +64603,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clT" = ( +"cir" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -66308,7 +64616,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clU" = ( +"cis" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -66321,7 +64629,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"clV" = ( +"cit" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -66332,12 +64640,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 }, @@ -66348,7 +64656,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"clY" = ( +"ciw" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -66357,42 +64665,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)"; @@ -66401,7 +64692,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmf" = ( +"ciB" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -66419,7 +64710,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmg" = ( +"ciC" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -66435,7 +64726,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, @@ -66446,7 +64737,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, @@ -66457,7 +64748,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, @@ -66478,7 +64769,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; @@ -66488,7 +64779,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, @@ -66496,7 +64787,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmm" = ( +"ciI" = ( /obj/structure/table, /obj/item/device/flashlight{ pixel_x = 1; @@ -66512,7 +64803,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmn" = ( +"ciJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -66528,7 +64819,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 }, @@ -66536,13 +64827,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 }, @@ -66550,7 +64841,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; @@ -66560,7 +64851,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; @@ -66574,7 +64865,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmt" = ( +"ciP" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -66587,7 +64878,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmu" = ( +"ciQ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -66599,7 +64890,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmv" = ( +"ciR" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -66611,7 +64902,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmw" = ( +"ciS" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -66623,7 +64914,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmx" = ( +"ciT" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -66635,7 +64926,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" @@ -66651,7 +64942,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cmz" = ( +"ciV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -66663,45 +64954,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 }, @@ -66716,7 +65007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"cmH" = ( +"cjd" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -66724,25 +65015,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 @@ -66754,7 +65045,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmM" = ( +"cji" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -66775,7 +65066,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmN" = ( +"cjj" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -66783,7 +65074,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 @@ -66795,7 +65086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cmP" = ( +"cjl" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -66803,13 +65094,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 @@ -66818,7 +65109,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"cmS" = ( +"cjo" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -66835,7 +65126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmT" = ( +"cjp" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -66855,7 +65146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cmU" = ( +"cjq" = ( /obj/machinery/porta_turret/ai{ dir = 4 }, @@ -66863,39 +65154,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 @@ -66906,7 +65197,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnb" = ( +"cjx" = ( /obj/machinery/light/small{ dir = 8 }, @@ -66916,7 +65207,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnc" = ( +"cjy" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -66932,7 +65223,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnd" = ( +"cjz" = ( /obj/machinery/light/small{ dir = 1 }, @@ -66947,7 +65238,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cne" = ( +"cjA" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -66966,7 +65257,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cnf" = ( +"cjB" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -66976,7 +65267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cng" = ( +"cjC" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -66989,7 +65280,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnh" = ( +"cjD" = ( /obj/machinery/light/small{ dir = 8 }, @@ -66997,7 +65288,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cni" = ( +"cjE" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -67005,13 +65296,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 }, @@ -67019,7 +65310,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; @@ -67029,7 +65320,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"cnm" = ( +"cjI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -67046,7 +65337,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnn" = ( +"cjJ" = ( /obj/machinery/power/apc{ dir = 4; name = "Departures APC"; @@ -67066,7 +65357,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{ @@ -67075,7 +65366,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"cnp" = ( +"cjL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light/small{ dir = 4 @@ -67084,7 +65375,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{ @@ -67098,7 +65389,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 @@ -67108,7 +65399,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 @@ -67121,7 +65412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnt" = ( +"cjP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -67134,7 +65425,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cnu" = ( +"cjQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -67142,7 +65433,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 @@ -67158,7 +65449,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, @@ -67166,7 +65457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cnx" = ( +"cjT" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 1; name = "Construction Zone"; @@ -67178,7 +65469,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cny" = ( +"cjU" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -67202,13 +65493,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 @@ -67227,7 +65518,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, @@ -67251,7 +65542,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, @@ -67276,7 +65567,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 }, @@ -67286,7 +65577,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnE" = ( +"cka" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67305,7 +65596,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnF" = ( +"ckb" = ( /obj/machinery/power/apc{ dir = 1; name = "Research Quantum Pad APC"; @@ -67325,7 +65616,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnG" = ( +"ckc" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -67335,7 +65626,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cnH" = ( +"ckd" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -67345,7 +65636,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnI" = ( +"cke" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -67364,7 +65655,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnJ" = ( +"ckf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67383,7 +65674,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnK" = ( +"ckg" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -67396,7 +65687,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cnL" = ( +"ckh" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -67408,7 +65699,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnM" = ( +"cki" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -67421,7 +65712,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnN" = ( +"ckj" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -67438,7 +65729,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnO" = ( +"ckk" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -67450,7 +65741,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnP" = ( +"ckl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -67463,7 +65754,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnQ" = ( +"ckm" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -67477,7 +65768,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cnR" = ( +"ckn" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -67497,7 +65788,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, @@ -67509,7 +65800,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; @@ -67520,31 +65811,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 }, @@ -67566,13 +65857,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 }, @@ -67583,19 +65874,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 }, @@ -67606,7 +65897,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cod" = ( +"ckz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -67622,7 +65913,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"coe" = ( +"ckA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -67641,7 +65932,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"; @@ -67659,14 +65950,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 @@ -67679,7 +65970,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 @@ -67688,7 +65979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coj" = ( +"ckF" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67696,7 +65987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cok" = ( +"ckG" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -67709,7 +66000,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"col" = ( +"ckH" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67722,7 +66013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"com" = ( +"ckI" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67742,7 +66033,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"con" = ( +"ckJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -67756,7 +66047,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coo" = ( +"ckK" = ( /obj/structure/rack{ dir = 4 }, @@ -67787,7 +66078,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"cop" = ( +"ckL" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -67805,7 +66096,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"coq" = ( +"ckM" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -67814,7 +66105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/storage/tech) -"cor" = ( +"ckN" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -67834,13 +66125,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; @@ -67850,7 +66141,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; @@ -67866,7 +66157,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 }, @@ -67889,7 +66180,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cow" = ( +"ckS" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67897,7 +66188,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cox" = ( +"ckT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -67912,7 +66203,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"coy" = ( +"ckU" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -67930,7 +66221,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"coz" = ( +"ckV" = ( /obj/machinery/quantumpad, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -67938,7 +66229,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"coA" = ( +"ckW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -67960,14 +66251,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; @@ -67984,7 +66275,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coD" = ( +"ckZ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -67996,7 +66287,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coE" = ( +"cla" = ( /obj/machinery/power/apc{ dir = 2; name = "Teleporter APC"; @@ -68020,7 +66311,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"coF" = ( +"clb" = ( /obj/machinery/light/small{ dir = 1 }, @@ -68036,24 +66327,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" @@ -68070,7 +66344,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coI" = ( +"cld" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -68084,7 +66358,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" @@ -68095,7 +66369,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coK" = ( +"clf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -68105,7 +66379,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"coL" = ( +"clg" = ( /obj/machinery/light/small{ dir = 4 }, @@ -68120,19 +66394,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 @@ -68146,27 +66420,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; @@ -68180,7 +66434,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)"; @@ -68189,7 +66443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coT" = ( +"clm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -68200,7 +66454,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coU" = ( +"cln" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -68208,7 +66462,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coV" = ( +"clo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -68221,7 +66475,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coW" = ( +"clp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -68229,7 +66483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/mining_construction) -"coX" = ( +"clq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -68237,7 +66491,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; @@ -68247,12 +66501,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, @@ -68266,13 +66520,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 @@ -68293,11 +66547,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; @@ -68313,11 +66567,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 }, @@ -68337,7 +66591,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 @@ -68345,7 +66599,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpi" = ( +"clB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -68368,7 +66622,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpj" = ( +"clC" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; @@ -68392,7 +66646,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 @@ -68400,7 +66654,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpl" = ( +"clE" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -68422,31 +66676,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; @@ -68461,7 +66696,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpp" = ( +"clH" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -68477,7 +66712,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpq" = ( +"clI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68491,7 +66726,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cpr" = ( +"clJ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68507,7 +66742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cps" = ( +"clK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -68522,25 +66757,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; @@ -68553,7 +66781,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)"; @@ -68562,19 +66790,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 @@ -68586,7 +66814,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; @@ -68597,14 +66825,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, @@ -68615,7 +66843,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{ @@ -68626,7 +66854,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, @@ -68637,7 +66865,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"; @@ -68647,7 +66875,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, @@ -68657,7 +66885,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"; @@ -68671,7 +66899,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai_upload) -"cpJ" = ( +"cma" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -68681,7 +66909,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 @@ -68690,7 +66918,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)"; @@ -68707,7 +66935,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpM" = ( +"cmd" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -68720,7 +66948,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpN" = ( +"cme" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -68733,7 +66961,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpO" = ( +"cmf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -68743,7 +66971,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpP" = ( +"cmg" = ( /obj/machinery/light/small, /obj/structure/fans/tiny, /turf/open/floor/plating{ @@ -68752,7 +66980,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpQ" = ( +"cmh" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -68762,7 +66990,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cpR" = ( +"cmi" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 4 }, @@ -68772,7 +67000,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpS" = ( +"cmj" = ( /obj/machinery/light/small, /obj/structure/fans/tiny, /turf/open/floor/plating{ @@ -68781,7 +67009,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpT" = ( +"cmk" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -68791,7 +67019,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpU" = ( +"cml" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -68805,7 +67033,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpV" = ( +"cmm" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -68818,7 +67046,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cpW" = ( +"cmn" = ( /obj/structure/table, /obj/item/device/multitool, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -68830,7 +67058,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 @@ -68838,7 +67066,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cpY" = ( +"cmp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -68851,20 +67079,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 }, @@ -68877,7 +67105,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqc" = ( +"cmt" = ( /obj/machinery/light{ dir = 1 }, @@ -68885,7 +67113,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cqd" = ( +"cmu" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -68898,19 +67126,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 }, @@ -68925,7 +67153,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; @@ -68936,26 +67164,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 }, @@ -68963,7 +67179,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; @@ -68973,22 +67189,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"; @@ -68996,7 +67200,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"; @@ -69009,7 +67213,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"; @@ -69026,19 +67230,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" @@ -69053,34 +67257,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, @@ -69088,7 +67292,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cqB" = ( +"cmP" = ( /obj/machinery/door/airlock/glass{ name = "Research Quantum Pad" }, @@ -69104,7 +67308,7 @@ /area/teleporter{ name = "Research Quantum Pad" }) -"cqC" = ( +"cmQ" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/structure/grille, @@ -69115,12 +67319,12 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"cqD" = ( +"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, @@ -69131,7 +67335,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cqF" = ( +"cmT" = ( /obj/machinery/door/airlock/glass{ name = "Docking Quantum Pad" }, @@ -69147,7 +67351,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cqG" = ( +"cmU" = ( /obj/structure/grille, /obj/machinery/door/firedoor, /obj/structure/window/fulltile, @@ -69158,7 +67362,7 @@ /area/teleporter{ name = "Docking Quantum Pad" }) -"cqH" = ( +"cmV" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -69169,7 +67373,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cqI" = ( +"cmW" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "12" @@ -69185,13 +67389,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 }, @@ -69199,19 +67403,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"; @@ -69219,14 +67423,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 @@ -69237,7 +67441,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"; @@ -69255,7 +67459,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 @@ -69266,7 +67470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqS" = ( +"cng" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_y = 32 }, @@ -69282,7 +67486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqT" = ( +"cnh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -69298,7 +67502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cqU" = ( +"cni" = ( /obj/machinery/door/airlock/security{ name = "Security Checkpoint"; req_access = null; @@ -69311,7 +67515,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 @@ -69323,7 +67527,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqW" = ( +"cnk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -69331,7 +67535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cqX" = ( +"cnl" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -69344,13 +67548,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{ @@ -69358,24 +67562,7 @@ 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_lavaland2"; @@ -69383,14 +67570,14 @@ }, /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; @@ -69405,7 +67592,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) -"crg" = ( +"cnr" = ( /obj/item/weapon/storage/pod{ pixel_x = 6; pixel_y = -28 @@ -69422,7 +67609,7 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) -"crh" = ( +"cns" = ( /obj/machinery/door/airlock/titanium{ name = "Escape Pod Airlock" }, @@ -69434,7 +67621,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" @@ -69443,7 +67630,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" @@ -69452,7 +67639,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crk" = ( +"cnv" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -69479,7 +67666,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crl" = ( +"cnw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69496,7 +67683,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crm" = ( +"cnx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69516,7 +67703,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crn" = ( +"cny" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69536,7 +67723,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cro" = ( +"cnz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69560,7 +67747,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crp" = ( +"cnA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69582,7 +67769,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crq" = ( +"cnB" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -69599,7 +67786,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crr" = ( +"cnC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69619,7 +67806,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crs" = ( +"cnD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69642,7 +67829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crt" = ( +"cnE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69657,7 +67844,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cru" = ( +"cnF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69677,7 +67864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crv" = ( +"cnG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69694,7 +67881,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crw" = ( +"cnH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69715,7 +67902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crx" = ( +"cnI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69732,7 +67919,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cry" = ( +"cnJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69753,7 +67940,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; @@ -69767,7 +67954,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crA" = ( +"cnL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69786,7 +67973,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crB" = ( +"cnM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69805,7 +67992,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crC" = ( +"cnN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69821,7 +68008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crD" = ( +"cnO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69842,7 +68029,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crE" = ( +"cnP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69863,7 +68050,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crF" = ( +"cnQ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69877,7 +68064,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crG" = ( +"cnR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69896,7 +68083,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crH" = ( +"cnS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -69915,7 +68102,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crI" = ( +"cnT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -69934,7 +68121,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crJ" = ( +"cnU" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 4; @@ -69954,7 +68141,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"crK" = ( +"cnV" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -69966,7 +68153,7 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"crL" = ( +"cnW" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -69983,7 +68170,7 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"crM" = ( +"cnX" = ( /obj/structure/sign/directions/evac{ dir = 4; icon_state = "direction_evac"; @@ -70004,7 +68191,7 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"crN" = ( +"cnY" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -70015,7 +68202,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)"; @@ -70024,7 +68211,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"; @@ -70032,7 +68219,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crQ" = ( +"cob" = ( /obj/machinery/light{ dir = 1 }, @@ -70043,7 +68230,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"; @@ -70063,7 +68250,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crS" = ( +"cod" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -70073,7 +68260,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crT" = ( +"coe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -70086,7 +68273,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crU" = ( +"cof" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -70109,7 +68296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crV" = ( +"cog" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -70125,7 +68312,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crW" = ( +"coh" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -70141,7 +68328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crX" = ( +"coi" = ( /obj/machinery/light{ dir = 1 }, @@ -70163,7 +68350,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crY" = ( +"coj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -70179,7 +68366,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"crZ" = ( +"cok" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -70195,7 +68382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csa" = ( +"col" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -70209,32 +68396,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)"; @@ -70247,7 +68434,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csg" = ( +"cor" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -70258,7 +68445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csh" = ( +"cos" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70266,7 +68453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csi" = ( +"cot" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -70274,13 +68461,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{ @@ -70288,7 +68475,7 @@ icon_state = "wood-broken" }, /area/security/vacantoffice) -"csl" = ( +"cow" = ( /obj/machinery/light/small{ dir = 4 }, @@ -70296,7 +68483,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/vacantoffice) -"csm" = ( +"cox" = ( /obj/machinery/light/small{ dir = 8 }, @@ -70311,7 +68498,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"csn" = ( +"coy" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -70323,42 +68510,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 @@ -70370,7 +68529,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 @@ -70379,7 +68538,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 @@ -70391,13 +68550,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; @@ -70407,19 +68566,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; @@ -70429,13 +68588,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 }, @@ -70443,19 +68602,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 @@ -70467,7 +68626,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"csF" = ( +"coN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -70475,7 +68634,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; @@ -70485,12 +68644,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)"; @@ -70499,7 +68658,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, @@ -70513,7 +68672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"csK" = ( +"coS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -70521,7 +68680,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" @@ -70532,7 +68691,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csM" = ( +"coU" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -70542,7 +68701,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"csN" = ( +"coV" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -70556,7 +68715,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 @@ -70565,12 +68724,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, @@ -70578,7 +68737,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{ @@ -70587,19 +68746,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" @@ -70617,10 +68776,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; @@ -70633,7 +68790,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"csW" = ( +"cpe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -70641,7 +68798,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/exit) -"csX" = ( +"cpf" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -70651,20 +68808,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 }, @@ -70675,7 +68831,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctc" = ( +"cpj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70686,7 +68842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctd" = ( +"cpk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70702,7 +68858,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cte" = ( +"cpl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70712,7 +68868,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctf" = ( +"cpm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70723,7 +68879,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctg" = ( +"cpn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70741,7 +68897,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cth" = ( +"cpo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70753,7 +68909,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cti" = ( +"cpp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70768,7 +68924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctj" = ( +"cpq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70783,7 +68939,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctk" = ( +"cpr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -70791,7 +68947,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctl" = ( +"cps" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70800,7 +68956,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)"; @@ -70809,7 +68965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctn" = ( +"cpu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70820,7 +68976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cto" = ( +"cpv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70834,7 +68990,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctp" = ( +"cpw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70845,7 +69001,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctq" = ( +"cpx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70860,7 +69016,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"; @@ -70868,7 +69024,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cts" = ( +"cpz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -70882,7 +69038,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 @@ -70893,7 +69049,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctu" = ( +"cpB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -70903,14 +69059,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 @@ -70924,7 +69080,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctx" = ( +"cpE" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -70941,7 +69097,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cty" = ( +"cpF" = ( /obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4; @@ -70959,7 +69115,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctz" = ( +"cpG" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -70976,7 +69132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"ctA" = ( +"cpH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -70996,7 +69152,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"ctB" = ( +"cpI" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -71013,15 +69169,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"ctC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"ctD" = ( +"cpJ" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -71032,7 +69180,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctE" = ( +"cpK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -71045,7 +69193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctF" = ( +"cpL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71058,7 +69206,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 @@ -71069,7 +69217,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctH" = ( +"cpN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71086,7 +69234,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 @@ -71106,7 +69254,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctJ" = ( +"cpP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71115,7 +69263,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctK" = ( +"cpQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -71126,7 +69274,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"ctL" = ( +"cpR" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -71138,7 +69286,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 @@ -71147,7 +69295,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"ctN" = ( +"cpT" = ( /obj/machinery/door/airlock/command{ name = "Teleport Access"; req_access_txt = "17" @@ -71160,14 +69308,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{ @@ -71178,7 +69326,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"ctQ" = ( +"cpW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -71191,7 +69339,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"; @@ -71201,22 +69349,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{ @@ -71234,30 +69373,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" }, @@ -71265,7 +69404,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, @@ -71280,7 +69419,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{ @@ -71298,7 +69437,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 @@ -71306,7 +69445,7 @@ /area/medical/research{ name = "Research Division" }) -"cud" = ( +"cqi" = ( /obj/machinery/door/airlock/research{ cyclelinkeddir = 2; name = "Research Division Access"; @@ -71326,19 +69465,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, @@ -71356,7 +69495,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{ @@ -71377,7 +69516,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{ @@ -71398,7 +69537,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" @@ -71414,8 +69553,10 @@ /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 }, @@ -71427,7 +69568,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"cul" = ( +"cqq" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -71436,19 +69577,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 }, @@ -71456,7 +69597,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cup" = ( +"cqu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71470,7 +69611,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuq" = ( +"cqv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71481,7 +69622,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cur" = ( +"cqw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71497,7 +69638,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cus" = ( +"cqx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71509,7 +69650,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)"; @@ -71518,7 +69659,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuu" = ( +"cqz" = ( /obj/machinery/light{ dir = 1 }, @@ -71532,7 +69673,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)"; @@ -71541,7 +69682,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuw" = ( +"cqB" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -71552,7 +69693,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cux" = ( +"cqC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -71573,7 +69714,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 @@ -71588,7 +69729,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuz" = ( +"cqE" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -71624,7 +69765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuA" = ( +"cqF" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -71633,7 +69774,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuB" = ( +"cqG" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -71656,7 +69797,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 @@ -71674,7 +69815,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuD" = ( +"cqI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71688,7 +69829,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuE" = ( +"cqJ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -71699,7 +69840,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuF" = ( +"cqK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71710,7 +69851,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuG" = ( +"cqL" = ( /obj/machinery/light{ dir = 1 }, @@ -71724,7 +69865,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)"; @@ -71733,7 +69874,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuI" = ( +"cqN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71749,7 +69890,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuJ" = ( +"cqO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71761,7 +69902,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuK" = ( +"cqP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71777,7 +69918,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuL" = ( +"cqQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71786,7 +69927,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuM" = ( +"cqR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -71794,7 +69935,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cuN" = ( +"cqS" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -71802,16 +69943,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" @@ -71820,7 +69956,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuR" = ( +"cqV" = ( /obj/structure/sign/vacuum{ pixel_y = 32 }, @@ -71828,7 +69964,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuS" = ( +"cqW" = ( /obj/machinery/sparker{ dir = 2; id = "mixingsparker"; @@ -71847,7 +69983,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuT" = ( +"cqX" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -71855,7 +69991,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"; @@ -71870,7 +70006,7 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cuV" = ( +"cqZ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -71892,7 +70028,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" @@ -71901,7 +70037,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cuX" = ( +"crb" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 }, @@ -71912,13 +70048,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)"; @@ -71928,13 +70064,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 }, @@ -71944,12 +70080,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"; @@ -71965,13 +70101,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 }, @@ -71983,7 +70119,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvg" = ( +"crk" = ( /obj/machinery/button/door{ id = "RoboticsShutters"; name = "Robotics Privacy Shutters"; @@ -71998,7 +70134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvh" = ( +"crl" = ( /obj/machinery/requests_console{ department = "Robotics"; departmentType = 2; @@ -72009,7 +70145,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cvi" = ( +"crm" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -72019,13 +70155,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 }, @@ -72045,7 +70181,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 @@ -72056,7 +70192,7 @@ /area/medical/research{ name = "Research Division" }) -"cvm" = ( +"crq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -72069,7 +70205,7 @@ /area/medical/research{ name = "Research Division" }) -"cvn" = ( +"crr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -72087,7 +70223,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvo" = ( +"crs" = ( /obj/machinery/button/door{ id = "RnDShutters"; name = "Research Privacy Shutters"; @@ -72104,7 +70240,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvp" = ( +"crt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -72115,7 +70251,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvq" = ( +"cru" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -72126,7 +70262,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"; @@ -72134,7 +70270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cvs" = ( +"crw" = ( /obj/structure/chair/office/light{ dir = 1 }, @@ -72145,7 +70281,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, @@ -72162,24 +70298,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; @@ -72197,8 +70339,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"; @@ -72220,7 +70364,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cvy" = ( +"crB" = ( /obj/effect/turf_decal/stripes/asteroid/line{ icon_state = "ast_warn"; dir = 1 @@ -72231,7 +70375,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cvz" = ( +"crC" = ( /obj/structure/rack, /obj/item/weapon/storage/bag/ore, /obj/item/weapon/pickaxe/emergency, @@ -72239,19 +70383,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 @@ -72260,13 +70404,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" @@ -72275,7 +70419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvF" = ( +"crI" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ dir = 4 @@ -72287,7 +70431,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvG" = ( +"crJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -72299,7 +70443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvH" = ( +"crK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72316,7 +70460,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 @@ -72333,7 +70477,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 @@ -72351,7 +70495,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvK" = ( +"crN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -72362,7 +70506,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 @@ -72374,7 +70518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvM" = ( +"crP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -72386,7 +70530,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; @@ -72397,7 +70541,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cvO" = ( +"crR" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ on = 1 }, @@ -72405,7 +70549,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 @@ -72418,18 +70562,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; @@ -72446,13 +70590,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; @@ -72469,7 +70613,7 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cvV" = ( +"crY" = ( /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; @@ -72477,12 +70621,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 @@ -72498,12 +70642,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 }, @@ -72512,7 +70656,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwa" = ( +"csd" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -72521,7 +70665,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwb" = ( +"cse" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -72529,7 +70673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwc" = ( +"csf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -72537,7 +70681,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwd" = ( +"csg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -72545,7 +70689,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwe" = ( +"csh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -72555,13 +70699,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 @@ -72569,7 +70713,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 @@ -72577,7 +70721,7 @@ /area/medical/research{ name = "Research Division" }) -"cwi" = ( +"csl" = ( /obj/machinery/light/small{ dir = 4 }, @@ -72587,7 +70731,7 @@ /area/medical/research{ name = "Research Division" }) -"cwj" = ( +"csm" = ( /obj/machinery/r_n_d/destructive_analyzer, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -72596,7 +70740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cwk" = ( +"csn" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -72604,7 +70748,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 @@ -72613,7 +70757,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; @@ -72631,12 +70775,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 @@ -72655,13 +70799,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; @@ -72670,8 +70816,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; @@ -72683,8 +70831,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" @@ -72700,7 +70850,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cwt" = ( +"csw" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -72721,7 +70871,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cwu" = ( +"csx" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -72729,7 +70879,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwv" = ( +"csy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -72737,7 +70887,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 @@ -72746,13 +70896,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 }, @@ -72764,7 +70914,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwz" = ( +"csC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -72773,7 +70923,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 @@ -72785,7 +70935,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwB" = ( +"csE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -72798,7 +70948,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwC" = ( +"csF" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -72815,7 +70965,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; @@ -72826,7 +70976,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; @@ -72837,7 +70987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwF" = ( +"csI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -72858,7 +71008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwG" = ( +"csJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72874,7 +71024,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 @@ -72888,7 +71038,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwI" = ( +"csL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72909,7 +71059,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 @@ -72933,7 +71083,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwK" = ( +"csN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -72950,7 +71100,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwL" = ( +"csO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -72967,7 +71117,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 @@ -72976,7 +71126,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwN" = ( +"csQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -72984,7 +71134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cwO" = ( +"csR" = ( /obj/machinery/sparker{ dir = 2; id = "mixingsparker"; @@ -72999,7 +71149,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cwP" = ( +"csS" = ( /obj/structure/sign/fire{ pixel_y = -32 }, @@ -73012,7 +71162,7 @@ name = "reinforced floor" }, /area/toxins/mixing) -"cwQ" = ( +"csT" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -73036,7 +71186,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" @@ -73045,22 +71195,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 }, @@ -73072,7 +71222,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwW" = ( +"csZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73080,7 +71230,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwX" = ( +"cta" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73089,7 +71239,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 @@ -73098,7 +71248,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cwZ" = ( +"ctc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73109,7 +71259,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, @@ -73132,7 +71282,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxb" = ( +"cte" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -73140,7 +71290,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxc" = ( +"ctf" = ( /obj/structure/table, /obj/item/device/mmi, /obj/item/device/mmi, @@ -73149,7 +71299,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{ @@ -73158,7 +71308,7 @@ /area/medical/research{ name = "Research Division" }) -"cxe" = ( +"cth" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -73168,7 +71318,7 @@ /area/medical/research{ name = "Research Division" }) -"cxf" = ( +"cti" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -73181,7 +71331,7 @@ /area/medical/research{ name = "Research Division" }) -"cxg" = ( +"ctj" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -73197,7 +71347,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxh" = ( +"ctk" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -73206,7 +71356,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxi" = ( +"ctl" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -73214,19 +71364,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, @@ -73247,47 +71397,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{ @@ -73301,7 +71428,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{ @@ -73315,14 +71442,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{ @@ -73337,7 +71464,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{ @@ -73357,7 +71484,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxu" = ( +"ctw" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -73366,7 +71493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxv" = ( +"ctx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -73377,7 +71504,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxw" = ( +"cty" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -73394,7 +71521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cxx" = ( +"ctz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -73402,26 +71529,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 @@ -73431,7 +71552,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxC" = ( +"ctD" = ( /obj/structure/table, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -73445,7 +71566,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, @@ -73458,7 +71579,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, @@ -73468,7 +71589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cxF" = ( +"ctG" = ( /obj/machinery/door/airlock/research{ cyclelinkeddir = 1; name = "Research Division Access"; @@ -73481,20 +71602,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{ @@ -73504,7 +71625,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, @@ -73513,7 +71634,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxK" = ( +"ctL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -73521,7 +71642,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; @@ -73531,7 +71652,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, @@ -73556,7 +71677,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cxN" = ( +"ctO" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -73571,8 +71692,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; @@ -73586,8 +71709,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; @@ -73604,8 +71729,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"; @@ -73613,7 +71740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cxR" = ( +"ctS" = ( /obj/machinery/light/small{ dir = 1 }, @@ -73624,7 +71751,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cxS" = ( +"ctT" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ dir = 8 @@ -73636,14 +71763,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 @@ -73652,7 +71779,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 @@ -73661,7 +71788,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 @@ -73671,7 +71798,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 @@ -73686,7 +71813,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cxY" = ( +"ctZ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 }, @@ -73698,7 +71825,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; @@ -73711,7 +71838,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{ @@ -73721,7 +71848,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"; @@ -73729,13 +71856,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"; @@ -73750,7 +71877,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"; @@ -73761,13 +71888,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 }, @@ -73790,13 +71917,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, @@ -73806,7 +71933,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{ @@ -73821,13 +71948,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)"; @@ -73838,7 +71965,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cym" = ( +"cun" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -73850,7 +71977,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyn" = ( +"cuo" = ( /obj/machinery/power/apc{ cell_type = 5000; dir = 2; @@ -73868,13 +71995,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 @@ -73883,7 +72010,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cyq" = ( +"cur" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -73893,7 +72020,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)"; @@ -73904,7 +72031,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)"; @@ -73915,7 +72042,7 @@ /area/medical/research{ name = "Research Division" }) -"cyt" = ( +"cuu" = ( /turf/open/floor/plasteel/whitepurple/corner{ tag = "icon-whitepurplecorner (NORTH)"; icon_state = "whitepurplecorner"; @@ -73925,7 +72052,7 @@ /area/medical/research{ name = "Research Division" }) -"cyu" = ( +"cuv" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -73934,7 +72061,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyv" = ( +"cuw" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -73943,7 +72070,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyw" = ( +"cux" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -73957,7 +72084,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyx" = ( +"cuy" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -73966,24 +72093,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, @@ -73991,7 +72118,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/lab) -"cyC" = ( +"cuD" = ( /obj/machinery/power/apc{ dir = 8; name = "Research and Development APC"; @@ -74006,8 +72133,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 }, @@ -74018,58 +72147,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 }, @@ -74086,7 +72210,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 @@ -74096,13 +72220,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 @@ -74114,7 +72238,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, @@ -74122,7 +72246,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, @@ -74131,7 +72255,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" @@ -74147,14 +72271,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{ @@ -74164,14 +72288,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{ @@ -74181,18 +72305,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 }, @@ -74200,12 +72324,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 }, @@ -74213,23 +72337,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 }, @@ -74240,7 +72364,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 @@ -74249,7 +72373,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)"; @@ -74258,7 +72382,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czk" = ( +"cvk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74269,7 +72393,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czl" = ( +"cvl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74281,7 +72405,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, @@ -74292,7 +72416,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"czn" = ( +"cvn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74308,7 +72432,7 @@ /area/medical/research{ name = "Research Division" }) -"czo" = ( +"cvo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74318,7 +72442,7 @@ /area/medical/research{ name = "Research Division" }) -"czp" = ( +"cvp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74331,7 +72455,7 @@ /area/medical/research{ name = "Research Division" }) -"czq" = ( +"cvq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74344,7 +72468,7 @@ /area/medical/research{ name = "Research Division" }) -"czr" = ( +"cvr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74358,7 +72482,7 @@ /area/medical/research{ name = "Research Division" }) -"czs" = ( +"cvs" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -74371,7 +72495,7 @@ /area/medical/research{ name = "Research Division" }) -"czt" = ( +"cvt" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -74388,7 +72512,7 @@ /area/medical/research{ name = "Research Division" }) -"czu" = ( +"cvu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74401,7 +72525,7 @@ /area/medical/research{ name = "Research Division" }) -"czv" = ( +"cvv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74416,7 +72540,7 @@ /area/medical/research{ name = "Research Division" }) -"czw" = ( +"cvw" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -74427,7 +72551,7 @@ /area/medical/research{ name = "Research Division" }) -"czx" = ( +"cvx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74441,7 +72565,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 @@ -74449,7 +72573,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 @@ -74461,7 +72585,7 @@ /area/medical/research{ name = "Research Division" }) -"czA" = ( +"cvA" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -74476,7 +72600,7 @@ /area/medical/research{ name = "Research Division" }) -"czB" = ( +"cvB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -74487,7 +72611,7 @@ /area/medical/research{ name = "Research Division" }) -"czC" = ( +"cvC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -74501,7 +72625,7 @@ /area/medical/research{ name = "Research Division" }) -"czD" = ( +"cvD" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -74515,7 +72639,7 @@ /area/medical/research{ name = "Research Division" }) -"czE" = ( +"cvE" = ( /obj/machinery/shower{ pixel_y = 24 }, @@ -74529,7 +72653,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 @@ -74537,14 +72661,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{ @@ -74559,7 +72683,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czI" = ( +"cvI" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod1"; name = "containment door 1" @@ -74581,7 +72705,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, @@ -74597,7 +72721,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{ @@ -74612,7 +72736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czL" = ( +"cvL" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod2"; name = "containment door 2" @@ -74634,7 +72758,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, @@ -74650,7 +72774,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{ @@ -74665,7 +72789,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czO" = ( +"cvO" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod3"; name = "containment door 3" @@ -74687,7 +72811,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, @@ -74703,7 +72827,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{ @@ -74718,7 +72842,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"czR" = ( +"cvR" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod4"; name = "containment door 4" @@ -74740,7 +72864,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, @@ -74756,12 +72880,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" @@ -74770,32 +72894,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; @@ -74817,7 +72941,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAa" = ( +"cwa" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 8 @@ -74835,7 +72959,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 @@ -74874,7 +72998,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAc" = ( +"cwc" = ( /obj/structure/chair/stool, /obj/structure/cable/orange{ d1 = 4; @@ -74891,7 +73015,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{ @@ -74912,7 +73036,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAe" = ( +"cwe" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74928,7 +73052,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAf" = ( +"cwf" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -74947,7 +73071,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" @@ -74967,7 +73091,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAh" = ( +"cwh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -74988,7 +73112,7 @@ /area/medical/research{ name = "Research Division" }) -"cAi" = ( +"cwi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -75006,7 +73130,7 @@ /area/medical/research{ name = "Research Division" }) -"cAj" = ( +"cwj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75024,7 +73148,7 @@ /area/medical/research{ name = "Research Division" }) -"cAk" = ( +"cwk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75045,7 +73169,7 @@ /area/medical/research{ name = "Research Division" }) -"cAl" = ( +"cwl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75064,7 +73188,7 @@ /area/medical/research{ name = "Research Division" }) -"cAm" = ( +"cwm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -75088,7 +73212,7 @@ /area/medical/research{ name = "Research Division" }) -"cAn" = ( +"cwn" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -75106,7 +73230,7 @@ /area/medical/research{ name = "Research Division" }) -"cAo" = ( +"cwo" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -75125,7 +73249,7 @@ /area/medical/research{ name = "Research Division" }) -"cAp" = ( +"cwp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -75144,7 +73268,7 @@ /area/medical/research{ name = "Research Division" }) -"cAq" = ( +"cwq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75162,7 +73286,7 @@ /area/medical/research{ name = "Research Division" }) -"cAr" = ( +"cwr" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/orange{ d1 = 4; @@ -75179,7 +73303,7 @@ /area/medical/research{ name = "Research Division" }) -"cAs" = ( +"cws" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75203,7 +73327,7 @@ /area/medical/research{ name = "Research Division" }) -"cAt" = ( +"cwt" = ( /obj/machinery/door/firedoor, /obj/structure/cable/orange{ d1 = 4; @@ -75222,7 +73346,7 @@ /area/medical/research{ name = "Research Division" }) -"cAu" = ( +"cwu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75241,7 +73365,7 @@ /area/medical/research{ name = "Research Division" }) -"cAv" = ( +"cwv" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75257,7 +73381,7 @@ /area/medical/research{ name = "Research Division" }) -"cAw" = ( +"cww" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75275,7 +73399,7 @@ /area/medical/research{ name = "Research Division" }) -"cAx" = ( +"cwx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -75296,7 +73420,7 @@ /area/medical/research{ name = "Research Division" }) -"cAy" = ( +"cwy" = ( /obj/machinery/door/airlock/glass_research{ name = "Decontamination Center"; req_access_txt = "55" @@ -75318,7 +73442,7 @@ /area/medical/research{ name = "Research Division" }) -"cAz" = ( +"cwz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -75337,7 +73461,7 @@ /area/medical/research{ name = "Research Division" }) -"cAA" = ( +"cwA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -75347,7 +73471,7 @@ /area/medical/research{ name = "Research Division" }) -"cAB" = ( +"cwB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -75360,7 +73484,7 @@ /area/medical/research{ name = "Research Division" }) -"cAC" = ( +"cwC" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -75378,7 +73502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAD" = ( +"cwD" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75394,7 +73518,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAE" = ( +"cwE" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -75411,7 +73535,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAF" = ( +"cwF" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -75429,7 +73553,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAG" = ( +"cwG" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -75447,7 +73571,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAH" = ( +"cwH" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -75465,7 +73589,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cAI" = ( +"cwI" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -75474,7 +73598,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{ @@ -75486,18 +73610,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; @@ -75515,13 +73639,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 @@ -75535,7 +73659,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; @@ -75553,7 +73677,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 @@ -75566,7 +73690,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; @@ -75584,7 +73708,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 @@ -75604,7 +73728,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; @@ -75617,7 +73741,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cAU" = ( +"cwU" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75632,13 +73756,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 @@ -75666,7 +73790,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAX" = ( +"cwX" = ( /obj/item/device/transfer_valve{ pixel_x = -5 }, @@ -75690,7 +73814,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAY" = ( +"cwY" = ( /obj/item/device/assembly/timer{ pixel_x = 5; pixel_y = 4 @@ -75712,7 +73836,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cAZ" = ( +"cwZ" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -75721,13 +73845,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)"; @@ -75736,7 +73860,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, @@ -75744,7 +73868,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"; @@ -75754,7 +73878,7 @@ /area/medical/research{ name = "Research Division" }) -"cBe" = ( +"cxe" = ( /obj/structure/sign/bluecross_2{ pixel_x = -32; pixel_y = -32 @@ -75765,7 +73889,7 @@ /area/medical/research{ name = "Research Division" }) -"cBf" = ( +"cxf" = ( /obj/machinery/power/apc{ cell_type = 5000; dir = 2; @@ -75779,7 +73903,7 @@ /area/medical/research{ name = "Research Division" }) -"cBg" = ( +"cxg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -75798,7 +73922,7 @@ /area/medical/research{ name = "Research Division" }) -"cBh" = ( +"cxh" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -75808,14 +73932,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)"; @@ -75826,7 +73950,7 @@ /area/medical/research{ name = "Research Division" }) -"cBk" = ( +"cxk" = ( /obj/machinery/light, /turf/open/floor/plasteel/white{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -75834,7 +73958,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 @@ -75842,7 +73966,7 @@ /area/medical/research{ name = "Research Division" }) -"cBm" = ( +"cxm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/orange{ d1 = 1; @@ -75855,7 +73979,7 @@ /area/medical/research{ name = "Research Division" }) -"cBn" = ( +"cxn" = ( /obj/machinery/camera{ c_tag = "Research Eastern Wing"; dir = 1; @@ -75868,7 +73992,7 @@ /area/medical/research{ name = "Research Division" }) -"cBo" = ( +"cxo" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -75882,7 +74006,7 @@ /area/medical/research{ name = "Research Division" }) -"cBp" = ( +"cxp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -75892,7 +74016,7 @@ /area/medical/research{ name = "Research Division" }) -"cBq" = ( +"cxq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -75905,7 +74029,7 @@ /area/medical/research{ name = "Research Division" }) -"cBr" = ( +"cxr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -75915,7 +74039,7 @@ /area/medical/research{ name = "Research Division" }) -"cBs" = ( +"cxs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75936,7 +74060,7 @@ /area/medical/research{ name = "Research Division" }) -"cBt" = ( +"cxt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -75946,7 +74070,7 @@ /area/medical/research{ name = "Research Division" }) -"cBu" = ( +"cxu" = ( /obj/machinery/door/airlock/glass_research{ name = "Xenobiology"; req_access_txt = "55" @@ -75958,7 +74082,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBv" = ( +"cxv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -75966,7 +74090,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBw" = ( +"cxw" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -75979,7 +74103,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBx" = ( +"cxx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -75987,7 +74111,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBy" = ( +"cxy" = ( /obj/structure/sign/electricshock{ pixel_y = 32 }, @@ -76001,12 +74125,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; @@ -76016,7 +74140,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBB" = ( +"cxB" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -76026,7 +74150,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBC" = ( +"cxC" = ( /obj/machinery/light{ dir = 1 }, @@ -76037,7 +74161,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBD" = ( +"cxD" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 2; on = 1 @@ -76046,7 +74170,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)"; @@ -76055,7 +74179,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cBF" = ( +"cxF" = ( /obj/structure/chair{ dir = 4 }, @@ -76063,13 +74187,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; @@ -76082,7 +74206,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cBI" = ( +"cxI" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -76095,32 +74219,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 @@ -76133,24 +74257,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; @@ -76160,12 +74267,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{ @@ -76177,19 +74284,19 @@ /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, @@ -76200,7 +74307,7 @@ 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, @@ -76212,7 +74319,7 @@ 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" @@ -76221,7 +74328,7 @@ 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, @@ -76233,7 +74340,7 @@ 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, @@ -76241,7 +74348,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, @@ -76250,7 +74357,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" @@ -76265,12 +74372,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 @@ -76295,7 +74402,7 @@ /area/medical/research{ name = "Research Division" }) -"cCe" = ( +"cyd" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76311,7 +74418,7 @@ /area/medical/research{ name = "Research Division" }) -"cCf" = ( +"cye" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76332,7 +74439,7 @@ /area/medical/research{ name = "Research Division" }) -"cCg" = ( +"cyf" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -76350,7 +74457,7 @@ /area/medical/research{ name = "Research Division" }) -"cCh" = ( +"cyg" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76363,7 +74470,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCi" = ( +"cyh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76386,7 +74493,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCj" = ( +"cyi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76400,7 +74507,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCk" = ( +"cyj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -76414,7 +74521,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCl" = ( +"cyk" = ( /obj/machinery/monkey_recycler, /obj/structure/cable/orange{ d1 = 4; @@ -76428,8 +74535,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; @@ -76442,7 +74549,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" @@ -76459,21 +74566,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; @@ -76492,7 +74585,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCq" = ( +"cyo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -76500,7 +74593,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCr" = ( +"cyp" = ( /obj/structure/table, /obj/item/weapon/extinguisher, /obj/item/weapon/extinguisher, @@ -76512,7 +74605,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCs" = ( +"cyq" = ( /obj/machinery/power/apc{ dir = 8; name = "Xenobiology APC"; @@ -76531,7 +74624,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cCt" = ( +"cyr" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -76548,44 +74641,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 }, @@ -76595,7 +74688,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 @@ -76603,7 +74696,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cCD" = ( +"cyB" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -76630,7 +74723,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cCE" = ( +"cyC" = ( /obj/machinery/power/apc{ dir = 1; name = "Toxins Lab APC"; @@ -76646,18 +74739,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, @@ -76665,7 +74758,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cCI" = ( +"cyG" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -76675,12 +74768,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{ @@ -76692,7 +74785,7 @@ /area/medical/research{ name = "Research Division" }) -"cCL" = ( +"cyJ" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (EAST)"; @@ -76703,7 +74796,7 @@ /area/medical/research{ name = "Research Division" }) -"cCM" = ( +"cyK" = ( /obj/structure/table, /obj/item/weapon/cartridge/signal/toxins, /obj/item/weapon/cartridge/signal/toxins{ @@ -76718,14 +74811,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 @@ -76734,19 +74827,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{ @@ -76756,7 +74849,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{ @@ -76770,7 +74863,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"; @@ -76778,14 +74871,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; @@ -76809,14 +74902,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 }, @@ -76829,7 +74922,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cCY" = ( +"cyW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -76837,7 +74930,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cCZ" = ( +"cyX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -76847,7 +74940,7 @@ /area/medical/research{ name = "Research Division" }) -"cDa" = ( +"cyY" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -76870,7 +74963,7 @@ /area/medical/research{ name = "Research Division" }) -"cDb" = ( +"cyZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -76880,7 +74973,7 @@ /area/medical/research{ name = "Research Division" }) -"cDc" = ( +"cza" = ( /obj/machinery/door/airlock/glass_research{ name = "Xenobiology"; req_access_txt = "55" @@ -76889,7 +74982,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDd" = ( +"czb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -76900,7 +74993,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDe" = ( +"czc" = ( /obj/machinery/light, /obj/structure/sign/electricshock{ pixel_y = -32 @@ -76909,7 +75002,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDf" = ( +"czd" = ( /obj/structure/sign/electricshock{ pixel_y = -32 }, @@ -76917,7 +75010,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDg" = ( +"cze" = ( /obj/structure/sign/electricshock{ pixel_y = -32 }, @@ -76931,7 +75024,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 @@ -76946,7 +75039,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; @@ -76965,7 +75058,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cDj" = ( +"czh" = ( /obj/structure/chair{ dir = 4 }, @@ -76975,19 +75068,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 }, @@ -76997,7 +75090,7 @@ }, /turf/open/floor/plasteel/shuttle, /area/shuttle/arrival) -"cDn" = ( +"czl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 1; on = 1; @@ -77017,7 +75110,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 @@ -77038,47 +75131,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; @@ -77091,7 +75169,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cDw" = ( +"czt" = ( /obj/machinery/light/small{ dir = 8 }, @@ -77099,7 +75177,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" @@ -77108,19 +75186,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" @@ -77129,7 +75207,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{ @@ -77148,7 +75226,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, @@ -77160,7 +75238,7 @@ /area/medical/research{ name = "Research Division" }) -"cDD" = ( +"czA" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel/whitepurple/side{ tag = "icon-whitepurple (SOUTHEAST)"; @@ -77171,18 +75249,18 @@ /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 @@ -77194,7 +75272,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/science) -"cDH" = ( +"czE" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -77204,12 +75282,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"; @@ -77226,14 +75304,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; @@ -77249,7 +75327,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cDM" = ( +"czJ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -77259,7 +75337,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cDN" = ( +"czK" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -77276,7 +75354,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" @@ -77298,7 +75376,7 @@ /area/medical/research{ name = "Research Division" }) -"cDP" = ( +"czM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -77317,7 +75395,7 @@ /area/medical/research{ name = "Research Division" }) -"cDQ" = ( +"czN" = ( /obj/structure/sign/xenobio{ pixel_x = 32 }, @@ -77327,7 +75405,7 @@ /area/medical/research{ name = "Research Division" }) -"cDR" = ( +"czO" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -77341,7 +75419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDS" = ( +"czP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -77354,7 +75432,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDT" = ( +"czQ" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -77365,7 +75443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDU" = ( +"czR" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -77379,7 +75457,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDV" = ( +"czS" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -77393,7 +75471,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDW" = ( +"czT" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -77407,14 +75485,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, @@ -77424,7 +75502,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cDZ" = ( +"czW" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -77432,7 +75510,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEa" = ( +"czX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -77441,7 +75519,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 @@ -77459,7 +75537,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cEc" = ( +"czZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -77476,11 +75554,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; @@ -77504,13 +75582,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; @@ -77521,25 +75599,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; @@ -77550,7 +75628,7 @@ }, /turf/open/floor/plasteel/white, /area/crew_quarters/hor) -"cEl" = ( +"cAi" = ( /obj/machinery/computer/secure_data, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -77564,7 +75642,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 @@ -77579,7 +75657,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 @@ -77588,8 +75666,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; @@ -77600,11 +75677,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; @@ -77617,21 +75695,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; @@ -77641,12 +75719,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{ @@ -77656,22 +75734,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{ @@ -77686,7 +75749,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEx" = ( +"cAt" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod5"; name = "containment door 5" @@ -77708,7 +75771,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, @@ -77724,7 +75787,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{ @@ -77739,7 +75802,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEA" = ( +"cAw" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod6"; name = "containment door 6" @@ -77761,7 +75824,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, @@ -77777,7 +75840,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{ @@ -77792,7 +75855,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cED" = ( +"cAz" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod7"; name = "containment door 7" @@ -77814,7 +75877,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, @@ -77830,7 +75893,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{ @@ -77841,7 +75904,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEG" = ( +"cAC" = ( /obj/machinery/door/poddoor/preopen{ id = "XenoPod8"; name = "containment door 8" @@ -77863,7 +75926,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, @@ -77875,7 +75938,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, @@ -77883,7 +75946,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"; @@ -77896,7 +75959,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/xenobiology) -"cEK" = ( +"cAG" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -77908,7 +75971,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cEL" = ( +"cAH" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -77922,29 +75985,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; @@ -77959,7 +76022,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, @@ -77967,7 +76030,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cES" = ( +"cAO" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -77977,12 +76040,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 @@ -77991,7 +76054,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cEV" = ( +"cAR" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -78010,14 +76073,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, @@ -78026,7 +76089,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)"; @@ -78035,14 +76098,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 @@ -78052,7 +76115,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFb" = ( +"cAX" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -78068,7 +76131,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFc" = ( +"cAY" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -78083,7 +76146,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFd" = ( +"cAZ" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78098,22 +76161,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; @@ -78135,7 +76183,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFg" = ( +"cBb" = ( /obj/machinery/power/apc{ dir = 1; name = "RnD Server APC"; @@ -78159,7 +76207,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/server) -"cFh" = ( +"cBc" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -78176,7 +76224,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFi" = ( +"cBd" = ( /obj/machinery/light_switch{ pixel_y = -23 }, @@ -78185,7 +76233,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"; @@ -78197,7 +76245,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cFk" = ( +"cBf" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -78205,12 +76253,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) }, @@ -78222,7 +76270,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFn" = ( +"cBi" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -78230,7 +76278,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, @@ -78238,7 +76286,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFp" = ( +"cBk" = ( /obj/machinery/airalarm{ dir = 8; icon_state = "alarm0"; @@ -78255,7 +76303,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 @@ -78272,7 +76320,7 @@ name = "Killroom Floor" }, /area/toxins/xenobiology) -"cFr" = ( +"cBm" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 @@ -78283,7 +76331,7 @@ name = "Killroom Floor" }, /area/toxins/xenobiology) -"cFs" = ( +"cBn" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 8; layer = 2.4; @@ -78295,18 +76343,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 @@ -78314,7 +76351,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFv" = ( +"cBp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -78330,7 +76367,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFw" = ( +"cBq" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -78347,7 +76384,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFx" = ( +"cBr" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -78363,7 +76400,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{ @@ -78373,19 +76410,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, @@ -78393,13 +76424,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 }, @@ -78410,13 +76441,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 @@ -78429,7 +76460,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFG" = ( +"cBz" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -78447,7 +76478,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{ @@ -78456,7 +76487,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 @@ -78464,7 +76495,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFJ" = ( +"cBC" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -78489,7 +76520,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cFK" = ( +"cBD" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -78500,7 +76531,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{ @@ -78519,7 +76550,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{ @@ -78532,7 +76563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFN" = ( +"cBG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -78549,7 +76580,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cFO" = ( +"cBH" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ dir = 8 @@ -78558,7 +76589,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; @@ -78570,7 +76601,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFQ" = ( +"cBJ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/machinery/light/small{ dir = 1 @@ -78581,7 +76612,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cFR" = ( +"cBK" = ( /obj/structure/closet/emcloset, /obj/machinery/camera{ c_tag = "Docking Asteroid Hall 14"; @@ -78592,7 +76623,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 @@ -78604,7 +76635,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFT" = ( +"cBM" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -78616,7 +76647,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFU" = ( +"cBN" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -78630,7 +76661,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"; @@ -78641,7 +76672,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFW" = ( +"cBP" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -78658,7 +76689,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cFX" = ( +"cBQ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -78672,10 +76703,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 @@ -78685,14 +76716,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; @@ -78711,7 +76742,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGc" = ( +"cBV" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78725,7 +76756,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGd" = ( +"cBW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -78735,7 +76766,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGe" = ( +"cBX" = ( /obj/machinery/autolathe, /obj/structure/window/reinforced{ dir = 1; @@ -78751,7 +76782,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGf" = ( +"cBY" = ( /obj/structure/plasticflaps, /obj/structure/disposalpipe/segment{ dir = 4; @@ -78761,14 +76792,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; @@ -78783,7 +76814,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGi" = ( +"cCb" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78798,13 +76829,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 }, @@ -78812,7 +76843,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGl" = ( +"cCe" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -78820,11 +76851,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 }, @@ -78833,7 +76864,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGo" = ( +"cCh" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -78846,7 +76877,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGp" = ( +"cCi" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78856,7 +76887,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" @@ -78870,7 +76901,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGr" = ( +"cCk" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -78884,7 +76915,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGs" = ( +"cCl" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -78894,18 +76925,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; @@ -78918,7 +76949,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cGw" = ( +"cCp" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/orange{ @@ -78931,7 +76962,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGx" = ( +"cCq" = ( /obj/structure/window/reinforced{ dir = 1; layer = 2.9 @@ -78944,7 +76975,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 @@ -78954,7 +76985,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGz" = ( +"cCs" = ( /obj/machinery/light{ dir = 4; icon_state = "tube1" @@ -78966,22 +76997,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; @@ -78991,7 +77013,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cGD" = ( +"cCv" = ( /obj/machinery/light/small{ dir = 1 }, @@ -79004,11 +77026,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 @@ -79017,7 +77039,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGG" = ( +"cCy" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -79031,7 +77053,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGH" = ( +"cCz" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, @@ -79039,7 +77061,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{ @@ -79055,7 +77077,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 @@ -79067,7 +77089,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"; @@ -79077,7 +77099,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 @@ -79086,24 +77108,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; @@ -79113,16 +77135,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)"; @@ -79133,29 +77155,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) }, @@ -79164,7 +77177,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)"; @@ -79175,7 +77188,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGY" = ( +"cCP" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -79184,7 +77197,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cGZ" = ( +"cCQ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ dir = 8 @@ -79193,7 +77206,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHa" = ( +"cCR" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -79202,7 +77215,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHb" = ( +"cCS" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -79215,7 +77228,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 @@ -79223,13 +77236,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; @@ -79246,12 +77259,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 @@ -79261,13 +77274,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; @@ -79281,7 +77294,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHj" = ( +"cDa" = ( /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; req_access_txt = "47" @@ -79290,7 +77303,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, @@ -79300,7 +77313,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHl" = ( +"cDc" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -79309,10 +77322,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 }, @@ -79325,13 +77338,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 }, @@ -79340,12 +77353,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; @@ -79361,7 +77374,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHs" = ( +"cDj" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -79380,7 +77393,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHt" = ( +"cDk" = ( /obj/machinery/power/apc{ dir = 1; name = "Testing Lab APC"; @@ -79404,7 +77417,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cHu" = ( +"cDl" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -79420,7 +77433,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHv" = ( +"cDm" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -79436,7 +77449,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHw" = ( +"cDn" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating{ @@ -79445,7 +77458,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHx" = ( +"cDo" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/poppy, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -79455,7 +77468,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHy" = ( +"cDp" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 1; @@ -79466,7 +77479,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cHz" = ( +"cDq" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79479,7 +77492,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cHA" = ( +"cDr" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ d1 = 4; @@ -79488,7 +77501,7 @@ }, /turf/open/space, /area/space) -"cHB" = ( +"cDs" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ d1 = 2; @@ -79497,12 +77510,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"; @@ -79518,7 +77531,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHE" = ( +"cDv" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -79530,7 +77543,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHF" = ( +"cDw" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -79539,7 +77552,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHG" = ( +"cDx" = ( /obj/machinery/conveyor/auto, /obj/machinery/light/small{ dir = 8 @@ -79548,7 +77561,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, @@ -79559,7 +77572,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHI" = ( +"cDz" = ( /obj/effect/turf_decal/stripes/end, /obj/structure/cable/orange{ d2 = 2; @@ -79575,7 +77588,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{ @@ -79584,7 +77597,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHK" = ( +"cDB" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -79599,7 +77612,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHL" = ( +"cDC" = ( /obj/structure/closet, /obj/item/seeds/random, /obj/item/seeds/chili, @@ -79609,7 +77622,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 @@ -79617,7 +77630,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHN" = ( +"cDE" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light/small{ dir = 4 @@ -79628,7 +77641,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHO" = ( +"cDF" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79641,7 +77654,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHP" = ( +"cDG" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -79652,7 +77665,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHQ" = ( +"cDH" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -79662,7 +77675,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHR" = ( +"cDI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -79672,7 +77685,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHS" = ( +"cDJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -79680,7 +77693,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cHT" = ( +"cDK" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 1 @@ -79692,13 +77705,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 }, @@ -79706,7 +77719,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cHW" = ( +"cDN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -79716,13 +77729,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"; @@ -79734,7 +77747,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cHZ" = ( +"cDQ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ name = "Aft Asteroid Maintenance"; @@ -79751,7 +77764,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIa" = ( +"cDR" = ( /obj/structure/girder, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79759,7 +77772,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIb" = ( +"cDS" = ( /obj/structure/table, /obj/item/weapon/cultivator, /obj/item/seeds/banana, @@ -79769,7 +77782,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIc" = ( +"cDT" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -79777,7 +77790,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 @@ -79785,21 +77798,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 }, @@ -79807,7 +77820,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIh" = ( +"cDY" = ( /obj/machinery/conveyor/auto{ icon_state = "conveyor0"; dir = 1 @@ -79816,7 +77829,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIi" = ( +"cDZ" = ( /obj/machinery/conveyor/auto{ dir = 9; icon_state = "conveyor0"; @@ -79826,7 +77839,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIj" = ( +"cEa" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (SOUTHEAST)"; icon_state = "conveyor0"; @@ -79836,7 +77849,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIk" = ( +"cEb" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -79849,7 +77862,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIl" = ( +"cEc" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable/orange{ d1 = 4; @@ -79860,7 +77873,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIm" = ( +"cEd" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79873,7 +77886,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIn" = ( +"cEe" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -79884,7 +77897,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIo" = ( +"cEf" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -79899,7 +77912,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIp" = ( +"cEg" = ( /obj/machinery/light/small, /obj/structure/cable/orange{ d1 = 4; @@ -79912,7 +77925,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIq" = ( +"cEh" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -79924,7 +77937,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIr" = ( +"cEi" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -79942,7 +77955,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIs" = ( +"cEj" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -79961,7 +77974,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIt" = ( +"cEk" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -79977,7 +77990,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, @@ -79988,7 +78001,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIv" = ( +"cEm" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /turf/open/floor/plating{ @@ -79997,20 +78010,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"; @@ -80020,7 +78033,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIz" = ( +"cEq" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -80030,7 +78043,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIA" = ( +"cEr" = ( /obj/machinery/conveyor/auto{ dir = 10; icon_state = "conveyor0"; @@ -80041,7 +78054,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIB" = ( +"cEs" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -80057,14 +78070,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, @@ -80074,7 +78087,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIE" = ( +"cEv" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -80086,7 +78099,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIF" = ( +"cEw" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 1 @@ -80097,7 +78110,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 @@ -80105,19 +78118,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; @@ -80128,7 +78141,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIK" = ( +"cEB" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -80139,7 +78152,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIL" = ( +"cEC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80147,7 +78160,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIM" = ( +"cED" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -80158,7 +78171,7 @@ /area/maintenance/disposal{ name = "South-Western External Waste Belt" }) -"cIN" = ( +"cEE" = ( /obj/structure/disposalpipe/trunk{ dir = 4 }, @@ -80169,7 +78182,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIO" = ( +"cEF" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80179,7 +78192,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIP" = ( +"cEG" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80192,7 +78205,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIQ" = ( +"cEH" = ( /obj/structure/disposalpipe/junction{ dir = 4; icon_state = "pipe-j2" @@ -80203,7 +78216,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIR" = ( +"cEI" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; icon_state = "pipe-j2s"; @@ -80216,7 +78229,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIS" = ( +"cEJ" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; icon_state = "pipe-j2s"; @@ -80229,7 +78242,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIT" = ( +"cEK" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80239,7 +78252,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIU" = ( +"cEL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80252,7 +78265,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIV" = ( +"cEM" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80262,7 +78275,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIW" = ( +"cEN" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -80273,7 +78286,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cIX" = ( +"cEO" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 }, @@ -80284,7 +78297,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIY" = ( +"cEP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80292,7 +78305,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cIZ" = ( +"cEQ" = ( /obj/structure/disposaloutlet{ dir = 4 }, @@ -80303,7 +78316,7 @@ /area/maintenance/disposal{ name = "South-Eastern External Waste Belt" }) -"cJa" = ( +"cER" = ( /obj/machinery/conveyor/auto{ tag = "icon-conveyor0 (EAST)"; icon_state = "conveyor0"; @@ -80314,14 +78327,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{ @@ -80330,7 +78343,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJd" = ( +"cEU" = ( /obj/structure/chair{ dir = 8 }, @@ -80340,7 +78353,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{ @@ -80349,7 +78362,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 @@ -80357,7 +78370,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 @@ -80365,7 +78378,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"cJh" = ( +"cEY" = ( /obj/docking_port/stationary{ dheight = 9; dir = 2; @@ -80378,55 +78391,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{ @@ -80435,7 +78412,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJr" = ( +"cFc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80447,7 +78424,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"cJs" = ( +"cFd" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -80456,20 +78433,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 @@ -80478,7 +78455,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"cJw" = ( +"cFh" = ( /obj/machinery/newscaster/security_unit{ pixel_x = 32 }, @@ -80486,7 +78463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/captain) -"cJx" = ( +"cFi" = ( /obj/machinery/light/small{ dir = 8 }, @@ -80501,7 +78478,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJy" = ( +"cFj" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -80510,7 +78487,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJz" = ( +"cFk" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -80519,7 +78496,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJA" = ( +"cFl" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -80534,7 +78511,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cJB" = ( +"cFm" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -80544,7 +78521,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"; @@ -80556,7 +78533,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"; @@ -80567,7 +78544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/main) -"cJE" = ( +"cFp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80578,34 +78555,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 @@ -80614,19 +78576,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; @@ -80639,25 +78595,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 }, @@ -80665,40 +78615,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 @@ -80707,7 +78642,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 @@ -80716,18 +78651,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, @@ -80743,7 +78673,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cKb" = ( +"cFF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80764,7 +78694,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cKc" = ( +"cFG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -80785,7 +78715,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cKd" = ( +"cFH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -80800,13 +78730,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 @@ -80814,24 +78744,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 @@ -80839,7 +78763,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKk" = ( +"cFN" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -80850,7 +78774,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKl" = ( +"cFO" = ( /obj/machinery/hydroponics/soil, /obj/structure/sign/poster/random{ name = "random official poster"; @@ -80863,7 +78787,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKm" = ( +"cFP" = ( /obj/machinery/hydroponics/soil, /obj/machinery/newscaster{ pixel_y = -32 @@ -80874,25 +78798,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"; @@ -80902,13 +78826,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"; @@ -80922,7 +78840,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKt" = ( +"cFV" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/machinery/newscaster{ pixel_x = 28 @@ -80933,7 +78851,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cKu" = ( +"cFW" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=EngineeringMiddle2"; location = "EngineeringWest3"; @@ -80943,32 +78861,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; @@ -80985,7 +78884,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"; @@ -80995,68 +78894,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"; @@ -81066,10 +78924,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 }, @@ -81081,62 +78936,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 @@ -81146,7 +78971,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{ @@ -81157,7 +78982,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cKY" = ( +"cGm" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; @@ -81174,7 +78999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay2) -"cKZ" = ( +"cGn" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -81183,14 +79008,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 }, @@ -81198,7 +79023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cLc" = ( +"cGq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -81212,40 +79037,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"; @@ -81265,7 +79076,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/chapel/office) -"cLj" = ( +"cGv" = ( /obj/machinery/door/window/westleft{ req_access_txt = "22" }, @@ -81273,15 +79084,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" }, @@ -81289,14 +79092,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; @@ -81316,19 +79119,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 }, @@ -81342,19 +79145,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"; @@ -81364,7 +79155,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"; @@ -81374,7 +79165,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLv" = ( +"cGE" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -81382,19 +79173,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 }, @@ -81408,7 +79193,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"; @@ -81419,7 +79204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLA" = ( +"cGI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -81438,25 +79223,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 @@ -81465,22 +79238,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 }, @@ -81497,7 +79266,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cLJ" = ( +"cGO" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -81508,25 +79277,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; @@ -81538,7 +79289,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cLN" = ( +"cGQ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -81547,18 +79298,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 }, @@ -81567,7 +79307,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/warden) -"cLR" = ( +"cGS" = ( /obj/structure/chair/office/light{ dir = 8 }, @@ -81576,89 +79316,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 }, @@ -81668,27 +79358,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; @@ -81699,7 +79369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/lawoffice) -"cMk" = ( +"cHa" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -81712,7 +79382,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 @@ -81728,13 +79398,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 @@ -81746,7 +79416,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cMo" = ( +"cHe" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/assistant, /turf/open/floor/grass{ @@ -81755,13 +79425,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; @@ -81775,7 +79445,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/medbay) -"cMr" = ( +"cHh" = ( /obj/structure/chair{ dir = 4 }, @@ -81784,35 +79454,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 @@ -81823,7 +79471,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{ @@ -81841,7 +79489,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 @@ -81852,7 +79500,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cMz" = ( +"cHm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -81867,14 +79515,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"; @@ -81887,32 +79535,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" = ( -/obj/effect/landmark/start/atmospheric_technician, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/airless +"cHs" = ( +/obj/machinery/pipedispenser/disposal/transit_tube, +/turf/open/floor/plasteel/yellow/corner{ + dir = 4 }, /area/atmos) -"cMG" = ( +"cHt" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -81924,35 +79572,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 }, @@ -81961,28 +79588,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 @@ -81990,7 +79596,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, @@ -82000,35 +79606,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 }, @@ -82038,7 +79616,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, @@ -82048,44 +79626,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" @@ -82096,70 +79637,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 }, @@ -82171,7 +79649,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{ @@ -82182,7 +79660,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cNo" = ( +"cHD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -82207,7 +79685,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 @@ -82220,7 +79698,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cNq" = ( +"cHF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82239,7 +79717,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 @@ -82258,7 +79736,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cNs" = ( +"cHH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -82267,7 +79745,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/assembly/robotics) -"cNt" = ( +"cHI" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -82281,19 +79759,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 }, @@ -82306,7 +79778,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNx" = ( +"cHL" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -82324,7 +79796,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNy" = ( +"cHM" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -82338,39 +79810,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 }, @@ -82379,7 +79819,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"; @@ -82387,7 +79827,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cND" = ( +"cHP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -82397,7 +79837,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"; @@ -82405,7 +79845,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNF" = ( +"cHR" = ( /obj/machinery/door/airlock/glass_security{ cyclelinkeddir = 2; id_tag = "innerbrig"; @@ -82426,7 +79866,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; @@ -82450,7 +79890,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, @@ -82462,7 +79902,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{ @@ -82471,7 +79911,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, @@ -82484,7 +79924,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNK" = ( +"cHW" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -82503,40 +79943,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, @@ -82548,19 +79955,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 @@ -82572,12 +79967,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; @@ -82590,7 +79985,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; @@ -82604,7 +79999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cNT" = ( +"cIc" = ( /obj/machinery/airalarm{ dir = 4; pixel_x = -23; @@ -82615,7 +80010,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!"; @@ -82632,7 +80027,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/supply) -"cNV" = ( +"cIe" = ( /obj/machinery/light/small{ dir = 8 }, @@ -82640,12 +80035,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 }, @@ -82658,7 +80048,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; @@ -82673,13 +80063,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 }, @@ -82687,13 +80077,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 }, @@ -82707,7 +80097,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; @@ -82723,7 +80113,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOe" = ( +"cIm" = ( /obj/structure/chair{ dir = 8 }, @@ -82739,7 +80129,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{ @@ -82748,7 +80138,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOg" = ( +"cIo" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -82759,7 +80149,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; @@ -82772,14 +80162,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; @@ -82792,7 +80182,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/brig) -"cOk" = ( +"cIs" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 4; on = 1 @@ -82803,7 +80193,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{ @@ -82812,7 +80202,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, @@ -82838,7 +80228,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, @@ -82854,13 +80244,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, @@ -82868,7 +80258,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, @@ -82877,15 +80267,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; @@ -82898,7 +80280,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOt" = ( +"cIA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82914,7 +80296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOu" = ( +"cIB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -82933,23 +80315,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 }, @@ -82966,7 +80332,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOx" = ( +"cID" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -82987,7 +80353,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOy" = ( +"cIE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -83004,7 +80370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOz" = ( +"cIF" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -83020,7 +80386,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOA" = ( +"cIG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -83031,7 +80397,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOB" = ( +"cIH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -83046,7 +80412,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOC" = ( +"cII" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -83057,7 +80423,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cOD" = ( +"cIJ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -83071,7 +80437,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cOE" = ( +"cIK" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -83080,7 +80446,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cOF" = ( +"cIL" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83088,31 +80454,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 @@ -83124,63 +80466,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" @@ -83197,7 +80483,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" @@ -83209,23 +80495,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" @@ -83234,7 +80504,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cOW" = ( +"cIQ" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -83243,163 +80513,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 }, @@ -83409,7 +80523,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cPr" = ( +"cIS" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -83418,7 +80532,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"cPs" = ( +"cIT" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -83427,7 +80541,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/janitor) -"cPt" = ( +"cIU" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83435,65 +80549,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" @@ -83502,72 +80558,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/construction/hallway{ name = "Command-Engineering Bridge" }) -"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" = ( +"cIY" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/neutral/corner{ @@ -83577,215 +80581,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" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/space) -"cPT" = ( +"cIZ" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/engine, /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"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" = ( +"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 @@ -83794,7 +80603,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQA" = ( +"cJc" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83811,7 +80620,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQB" = ( +"cJd" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -83820,7 +80629,7 @@ 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{ @@ -83833,7 +80642,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cQD" = ( +"cJf" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -83842,7 +80651,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQE" = ( +"cJg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83853,7 +80662,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQF" = ( +"cJh" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -83862,25 +80671,13 @@ 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" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQI" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/central) -"cQJ" = ( +"cJj" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" @@ -83892,76 +80689,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" @@ -83972,7 +80700,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cQV" = ( +"cJl" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83982,7 +80710,7 @@ /area/crew_quarters{ name = "Rehabilitation Dome" }) -"cQW" = ( +"cJm" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -83990,7 +80718,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cQX" = ( +"cJn" = ( /obj/machinery/status_display{ density = 0; layer = 4 @@ -84002,39 +80730,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" @@ -84043,7 +80739,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cRd" = ( +"cJp" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -84052,67 +80748,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 }, @@ -84120,15 +80756,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" @@ -84137,31 +80765,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 @@ -84169,143 +80779,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; @@ -84316,7 +80796,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cRM" = ( +"cJw" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84324,277 +80804,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"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" = ( +"cJx" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -84606,7 +80816,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSs" = ( +"cJy" = ( /obj/structure/sign/map/left/ceres{ pixel_y = 32 }, @@ -84621,7 +80831,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSt" = ( +"cJz" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -84630,16 +80840,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 }, @@ -84647,47 +80848,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 @@ -84696,7 +80857,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"cSC" = ( +"cJC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84704,103 +80865,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"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" = ( +"cJD" = ( /obj/machinery/door/airlock/glass, /obj/structure/disposalpipe/segment{ dir = 4 @@ -84809,7 +80874,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; @@ -84824,7 +80889,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"cSV" = ( +"cJF" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -84833,23 +80898,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; @@ -84861,7 +80921,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cTa" = ( +"cJJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -84872,39 +80932,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 @@ -84913,19 +80965,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, @@ -84937,7 +80977,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, @@ -84954,41 +80994,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, @@ -85002,7 +81008,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/medical) -"cTm" = ( +"cJQ" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -85011,7 +81017,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/break_room) -"cTn" = ( +"cJR" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -85020,19 +81026,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" @@ -85041,7 +81041,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTr" = ( +"cJU" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85049,23 +81049,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" @@ -85074,43 +81058,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 }, @@ -85130,7 +81088,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint/engineering) -"cTA" = ( +"cJY" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -85139,25 +81097,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 @@ -85167,73 +81107,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 }, @@ -85242,37 +81128,7 @@ 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" @@ -85287,7 +81143,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"cTW" = ( +"cKe" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" @@ -85296,7 +81152,7 @@ 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{ @@ -85309,7 +81165,7 @@ 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)"; @@ -85318,7 +81174,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cTZ" = ( +"cKh" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -85327,38 +81183,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"; @@ -85381,16 +81219,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; @@ -85403,13 +81233,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" @@ -85418,7 +81242,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cUk" = ( +"cKn" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85426,7 +81250,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" @@ -85443,7 +81267,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/checkpoint2) -"cUm" = ( +"cKp" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -85452,7 +81276,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"cUn" = ( +"cKq" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85460,31 +81284,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 @@ -85496,22 +81296,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 }, @@ -85529,25 +81320,13 @@ 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" = ( +"cKv" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85561,294 +81340,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"cUz" = ( -/obj/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/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" = ( +"cKw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -85860,7 +81352,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVp" = ( +"cKx" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85868,7 +81360,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVq" = ( +"cKy" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85876,7 +81368,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 @@ -85888,7 +81380,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/secondary/entry) -"cVs" = ( +"cKA" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85896,23 +81388,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" @@ -85921,7 +81397,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/teleporter) -"cVw" = ( +"cKC" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j1"; dir = 1 @@ -85930,7 +81406,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 @@ -85941,7 +81417,7 @@ /area/medical/research{ name = "Research Division" }) -"cVy" = ( +"cKE" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85951,7 +81427,7 @@ /area/medical/research{ name = "Research Division" }) -"cVz" = ( +"cKF" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -85959,107 +81435,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" @@ -86073,87 +81449,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 @@ -86162,55 +81458,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" @@ -86219,37 +81467,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 @@ -86257,7 +81481,7 @@ /area/medical/research{ name = "Research Division" }) -"cWl" = ( +"cKL" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -86266,7 +81490,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, @@ -86278,25 +81502,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" @@ -86305,7 +81517,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"cWr" = ( +"cKP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -86313,7 +81525,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cWs" = ( +"cKQ" = ( /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -86332,7 +81544,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/misc_lab) -"cWt" = ( +"cKR" = ( /obj/machinery/door/airlock{ name = "Bathroom" }, @@ -86340,7 +81552,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"cWu" = ( +"cKS" = ( /obj/structure/toilet{ dir = 4 }, @@ -86348,7 +81560,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"cWv" = ( +"cKT" = ( /obj/machinery/light/small{ dir = 4 }, @@ -86356,25 +81568,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 }, @@ -86382,13 +81594,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"; @@ -86399,13 +81611,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 }, @@ -86414,13 +81620,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 }, @@ -86430,13 +81630,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 }, @@ -86444,94 +81644,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, @@ -86539,38 +81666,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 }, @@ -86587,118 +81683,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 }, @@ -86706,15 +81697,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 }, @@ -86733,7 +81716,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cXZ" = ( +"cLm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -86744,7 +81727,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cYa" = ( +"cLn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -86757,7 +81740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/mixing) -"cYb" = ( +"cLo" = ( /obj/structure/closet/l3closet/scientist{ pixel_x = -2 }, @@ -86765,7 +81748,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" @@ -86780,11 +81763,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 }, @@ -86794,7 +81777,7 @@ /area/ai_monitored/turret_protected/AIsatextFP{ name = "AI Satellite Service" }) -"cYf" = ( +"cLs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -86807,7 +81790,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYg" = ( +"cLt" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -86816,7 +81799,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYh" = ( +"cLu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -86826,17 +81809,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{ @@ -86845,7 +81818,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYk" = ( +"cLw" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -86853,7 +81826,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 @@ -86861,7 +81834,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYm" = ( +"cLy" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -86871,7 +81844,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYn" = ( +"cLz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -86883,7 +81856,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYo" = ( +"cLA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -86895,31 +81868,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 }, @@ -86930,16 +81879,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; @@ -86955,7 +81895,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYu" = ( +"cLD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -86970,79 +81910,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; @@ -87054,7 +81922,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYB" = ( +"cLF" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -87062,7 +81930,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYC" = ( +"cLG" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -87070,7 +81938,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYD" = ( +"cLH" = ( /obj/machinery/airalarm{ dir = 4; icon_state = "alarm0"; @@ -87080,7 +81948,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/office) -"cYE" = ( +"cLI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87094,66 +81962,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; @@ -87169,29 +81978,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; @@ -87204,62 +81991,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 }, @@ -87269,39 +82001,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; @@ -87314,7 +82014,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYX" = ( +"cLN" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87328,7 +82028,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cYY" = ( +"cLO" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87341,7 +82041,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 @@ -87349,42 +82049,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 }, @@ -87395,7 +82060,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZe" = ( +"cLR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/airalarm{ dir = 8; @@ -87406,28 +82071,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 }, @@ -87437,9 +82081,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 @@ -87447,40 +82089,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; @@ -87493,80 +82102,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; @@ -87578,7 +82120,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZv" = ( +"cLX" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -87591,23 +82133,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; @@ -87619,21 +82145,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 @@ -87641,7 +82159,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 @@ -87649,19 +82167,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; @@ -87678,7 +82184,7 @@ 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; @@ -87695,7 +82201,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/bridge) -"cZG" = ( +"cMe" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -87708,7 +82214,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{ @@ -87717,7 +82223,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"cZI" = ( +"cMg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -87737,42 +82243,12 @@ 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, @@ -87783,7 +82259,7 @@ 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"; @@ -87793,7 +82269,7 @@ 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{ @@ -87803,76 +82279,55 @@ 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 @@ -87883,24 +82338,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" @@ -87920,22 +82358,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, @@ -87944,7 +82377,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"dah" = ( +"cMv" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -87956,13 +82389,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; @@ -87971,37 +82404,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, @@ -88011,7 +82420,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"dan" = ( +"cMz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -88028,12 +82437,7 @@ /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"; @@ -88041,13 +82445,13 @@ 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 }, @@ -88056,18 +82460,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; @@ -88077,23 +82481,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 }, @@ -88103,7 +82497,7 @@ /area/maintenance/fore{ name = "Fore Asteroid Maintenance" }) -"daw" = ( +"cMG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -88120,16 +82514,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; @@ -88142,12 +82527,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)"; @@ -88156,7 +82536,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daB" = ( +"cMJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump{ dir = 1; on = 1 @@ -88171,18 +82551,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" @@ -88194,7 +82574,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/qm) -"daF" = ( +"cMN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -88207,7 +82587,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, @@ -88217,62 +82597,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; @@ -88285,15 +82610,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 }, @@ -88303,63 +82620,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; @@ -88373,7 +82652,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!"; @@ -88386,17 +82665,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; @@ -88409,113 +82695,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 @@ -88523,38 +82703,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 }, @@ -88567,46 +82716,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 }, @@ -88620,72 +82730,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; @@ -88696,20 +82741,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 }, @@ -88723,7 +82755,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 @@ -88737,71 +82769,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 }, @@ -88814,54 +82782,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{ @@ -88879,7 +82800,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dbQ" = ( +"cNe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -88888,8 +82809,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; @@ -88901,7 +82824,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 @@ -88909,7 +82832,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbT" = ( +"cNh" = ( /obj/structure/girder, /obj/structure/grille, /turf/open/floor/plating/astplate{ @@ -88918,7 +82841,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 @@ -88926,7 +82849,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbV" = ( +"cNj" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -88935,7 +82858,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbW" = ( +"cNk" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -88943,7 +82866,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbX" = ( +"cNl" = ( /obj/machinery/camera{ c_tag = "Service SMES"; dir = 6; @@ -88962,7 +82885,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbY" = ( +"cNm" = ( /obj/machinery/power/apc{ dir = 1; name = "Port Asteroid Maintence APC"; @@ -88985,7 +82908,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dbZ" = ( +"cNn" = ( /obj/machinery/light/small{ dir = 8 }, @@ -88995,7 +82918,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dca" = ( +"cNo" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -89007,7 +82930,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcb" = ( +"cNp" = ( /obj/machinery/light/small{ dir = 1 }, @@ -89016,7 +82939,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcc" = ( +"cNq" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89032,7 +82955,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcd" = ( +"cNr" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89048,7 +82971,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dce" = ( +"cNs" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89060,7 +82983,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcf" = ( +"cNt" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89073,7 +82996,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcg" = ( +"cNu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89091,7 +83014,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dch" = ( +"cNv" = ( /obj/machinery/light/small{ dir = 4 }, @@ -89112,7 +83035,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dci" = ( +"cNw" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -89120,7 +83043,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcj" = ( +"cNx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89133,7 +83056,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dck" = ( +"cNy" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -89145,7 +83068,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcl" = ( +"cNz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89160,7 +83083,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcm" = ( +"cNA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89176,7 +83099,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcn" = ( +"cNB" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -89188,15 +83111,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; @@ -89208,7 +83132,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcq" = ( +"cNE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89220,19 +83144,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; @@ -89244,7 +83156,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dct" = ( +"cNG" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -89257,7 +83169,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcu" = ( +"cNH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -89270,7 +83182,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcv" = ( +"cNI" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -89294,28 +83206,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; @@ -89331,7 +83238,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcB" = ( +"cNM" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -89345,48 +83252,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; @@ -89399,7 +83271,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dcL" = ( +"cNP" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -89412,7 +83284,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{ @@ -89427,7 +83299,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcN" = ( +"cNR" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -89437,13 +83309,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, @@ -89456,7 +83328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcQ" = ( +"cNU" = ( /obj/machinery/light_switch{ pixel_y = 28 }, @@ -89467,12 +83339,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" }, @@ -89480,7 +83352,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"; @@ -89488,7 +83360,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcU" = ( +"cNY" = ( /obj/structure/chair/wood, /obj/machinery/light/small{ dir = 1 @@ -89497,7 +83369,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"dcV" = ( +"cNZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1 }, @@ -89505,13 +83377,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 @@ -89522,7 +83394,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"dcY" = ( +"cOc" = ( /obj/machinery/light/small{ dir = 1 }, @@ -89531,36 +83403,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, @@ -89573,13 +83423,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 @@ -89588,7 +83438,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddf" = ( +"cOh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -89596,7 +83446,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"; @@ -89615,13 +83465,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 @@ -89630,7 +83480,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{ @@ -89640,7 +83490,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"; @@ -89651,16 +83501,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"; @@ -89678,7 +83519,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, @@ -89689,7 +83530,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddo" = ( +"cOp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89699,23 +83540,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 }, @@ -89723,13 +83554,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; @@ -89743,20 +83568,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" @@ -89765,7 +83577,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 @@ -89774,18 +83586,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" @@ -89794,12 +83606,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 @@ -89808,19 +83615,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 @@ -89829,13 +83630,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" }, @@ -89843,20 +83638,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 @@ -89864,7 +83653,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddK" = ( +"cOE" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -89877,37 +83666,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; @@ -89918,47 +83677,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 }, @@ -89968,7 +83687,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"ddU" = ( +"cOH" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -89981,20 +83700,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 @@ -90008,7 +83714,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, @@ -90019,7 +83725,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, @@ -90034,7 +83740,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ddZ" = ( +"cOL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -90042,7 +83748,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 @@ -90051,14 +83757,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 @@ -90067,7 +83773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/theatre) -"ded" = ( +"cOP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -90075,16 +83781,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"; @@ -90101,7 +83798,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{ @@ -90111,7 +83808,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"; @@ -90125,15 +83822,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, @@ -90144,7 +83833,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 @@ -90153,7 +83842,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" @@ -90162,37 +83851,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 @@ -90201,37 +83872,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 }, @@ -90239,7 +83885,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dey" = ( +"cPb" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -90248,7 +83894,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dez" = ( +"cPc" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -90260,19 +83906,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; @@ -90285,31 +83919,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; @@ -90329,19 +83939,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; @@ -90354,7 +83952,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deH" = ( +"cPg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -90369,7 +83967,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 @@ -90378,7 +83976,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"deJ" = ( +"cPi" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -90389,13 +83987,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 }, @@ -90403,7 +84001,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deM" = ( +"cPl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -90416,7 +84014,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deN" = ( +"cPm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -90424,7 +84022,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"deO" = ( +"cPn" = ( /obj/machinery/light/small{ dir = 4 }, @@ -90433,7 +84031,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"deP" = ( +"cPo" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -90446,7 +84044,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deQ" = ( +"cPp" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -90459,20 +84057,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" @@ -90489,7 +84074,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"deT" = ( +"cPr" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -90504,42 +84089,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 @@ -90548,19 +84103,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, @@ -90568,27 +84123,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 @@ -90596,12 +84143,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; @@ -90615,7 +84157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfh" = ( +"cPB" = ( /obj/structure/chair/office/light{ dir = 4 }, @@ -90623,14 +84165,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 }, @@ -90639,7 +84181,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{ @@ -90651,7 +84193,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/cmo) -"dfl" = ( +"cPF" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1 @@ -90660,7 +84202,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfm" = ( +"cPG" = ( /obj/machinery/light/small{ dir = 1 }, @@ -90671,7 +84213,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 @@ -90680,7 +84222,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, @@ -90691,7 +84233,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfp" = ( +"cPJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -90699,7 +84241,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfq" = ( +"cPK" = ( /obj/machinery/light{ dir = 1 }, @@ -90707,7 +84249,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfr" = ( +"cPL" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -90716,15 +84258,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; @@ -90737,20 +84271,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; @@ -90762,7 +84296,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{ @@ -90774,24 +84308,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 }, @@ -90801,7 +84330,7 @@ /area/mine/unexplored{ name = "Medical Asteroid" }) -"dfC" = ( +"cPU" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor, @@ -90812,12 +84341,7 @@ 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 @@ -90826,7 +84350,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 @@ -90835,7 +84359,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, @@ -90846,7 +84370,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfH" = ( +"cPY" = ( /obj/structure/sink{ icon_state = "sink"; dir = 8; @@ -90860,7 +84384,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/virology) -"dfI" = ( +"cPZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -90870,15 +84394,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 }, @@ -90889,43 +84405,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; @@ -90935,14 +84415,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 }, @@ -90952,28 +84432,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 @@ -90981,14 +84440,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"; @@ -91001,7 +84453,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dfX" = ( +"cQg" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 8; on = 1; @@ -91011,7 +84463,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dfY" = ( +"cQh" = ( /obj/structure/table, /obj/item/weapon/folder, /obj/machinery/camera{ @@ -91024,7 +84476,7 @@ dir = 5 }, /area/medical/morgue) -"dfZ" = ( +"cQi" = ( /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" @@ -91042,42 +84494,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 @@ -91085,14 +84502,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 }, @@ -91100,7 +84510,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"dgh" = ( +"cQl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -91108,7 +84518,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{ @@ -91116,15 +84526,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; @@ -91141,28 +84543,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 }, @@ -91172,13 +84553,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; @@ -91193,36 +84574,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; @@ -91232,7 +84584,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgu" = ( +"cQs" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -91242,57 +84594,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" @@ -91303,27 +84605,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 @@ -91331,7 +84620,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgE" = ( +"cQw" = ( /obj/structure/closet, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -91339,7 +84628,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgF" = ( +"cQx" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -91357,7 +84646,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/genetics_cloning) -"dgG" = ( +"cQy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -91365,7 +84654,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dgH" = ( +"cQz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -91373,15 +84662,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; @@ -91391,77 +84672,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)"; @@ -91474,7 +84685,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgQ" = ( +"cQC" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -91483,7 +84694,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dgR" = ( +"cQD" = ( /obj/structure/bodycontainer/morgue, /obj/machinery/camera{ c_tag = "Morgue South"; @@ -91497,7 +84708,7 @@ dir = 5 }, /area/medical/morgue) -"dgS" = ( +"cQE" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -91507,47 +84718,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, @@ -91556,15 +84727,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" @@ -91578,7 +84741,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/medical/morgue) -"dhb" = ( +"cQH" = ( /obj/machinery/light{ dir = 1 }, @@ -91587,13 +84750,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 }, @@ -91602,7 +84765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhe" = ( +"cQK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -91616,14 +84779,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 }, @@ -91634,15 +84790,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; @@ -91656,7 +84804,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 @@ -91664,7 +84812,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhk" = ( +"cQO" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -91676,42 +84824,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 @@ -91720,14 +84840,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 @@ -91735,7 +84848,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhs" = ( +"cQS" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -91745,7 +84858,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dht" = ( +"cQT" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -91755,7 +84868,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dhu" = ( +"cQU" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -91765,7 +84878,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhv" = ( +"cQV" = ( /obj/structure/sign/enginesafety{ pixel_y = -32 }, @@ -91777,7 +84890,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhw" = ( +"cQW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -91798,7 +84911,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/engine/engineering) -"dhx" = ( +"cQX" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -91807,14 +84920,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 }, @@ -91822,15 +84935,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; @@ -91843,24 +84948,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; @@ -91880,10 +84977,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" @@ -91892,14 +84986,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, @@ -91907,15 +85001,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; @@ -91928,7 +85014,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 @@ -91936,7 +85022,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dhN" = ( +"cRj" = ( /obj/machinery/light/small{ dir = 4 }, @@ -91946,32 +85032,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, @@ -91980,7 +85046,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 @@ -92002,17 +85068,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{ @@ -92021,7 +85077,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhX" = ( +"cRo" = ( /obj/machinery/light/small{ dir = 1 }, @@ -92032,7 +85088,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dhY" = ( +"cRp" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -92046,7 +85102,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 @@ -92054,19 +85110,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 }, @@ -92074,7 +85124,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{ @@ -92084,7 +85134,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"die" = ( +"cRu" = ( /obj/structure/chair{ dir = 8 }, @@ -92098,7 +85148,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 @@ -92107,7 +85157,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dig" = ( +"cRw" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -92116,24 +85166,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 @@ -92141,14 +85174,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 @@ -92156,28 +85182,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 }, @@ -92188,38 +85193,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; @@ -92231,7 +85205,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"diw" = ( +"cRB" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -92244,10 +85218,7 @@ 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 }, @@ -92256,7 +85227,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diz" = ( +"cRD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -92271,155 +85242,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" @@ -92430,14 +85253,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{ @@ -92446,29 +85262,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 @@ -92476,20 +85270,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 @@ -92497,7 +85278,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 @@ -92505,7 +85286,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"diU" = ( +"cRJ" = ( /obj/structure/grille, /turf/open/floor/plating{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -92513,15 +85294,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{ @@ -92530,7 +85303,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diX" = ( +"cRL" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating{ @@ -92539,7 +85312,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"diY" = ( +"cRM" = ( /obj/structure/girder, /obj/item/stack/rods, /turf/open/floor/plating{ @@ -92548,13 +85321,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{ @@ -92563,7 +85336,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djb" = ( +"cRP" = ( /obj/structure/grille/broken, /obj/item/stack/rods, /turf/open/floor/plating{ @@ -92572,23 +85345,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{ @@ -92597,23 +85354,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 @@ -92621,7 +85362,7 @@ /area/maintenance/port{ name = "Port Asteroid Maintenance" }) -"dji" = ( +"cRS" = ( /obj/machinery/door/airlock/glass_external{ cyclelinkeddir = 8 }, @@ -92631,16 +85372,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 @@ -92648,7 +85380,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 @@ -92656,7 +85388,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 @@ -92664,47 +85396,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{ @@ -92713,23 +85405,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 @@ -92737,7 +85413,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djw" = ( +"cRY" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -92746,7 +85422,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 @@ -92754,69 +85430,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 @@ -92824,7 +85438,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 @@ -92832,64 +85446,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{ @@ -92898,7 +85455,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"djP" = ( +"cSd" = ( /obj/structure/table, /obj/item/clothing/mask/muzzle, /obj/item/clothing/glasses/sunglasses/blindfold, @@ -92908,15 +85465,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 }, @@ -92931,31 +85480,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/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"djV" = ( +"cSf" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, @@ -92963,400 +85488,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 @@ -93364,7 +85503,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkH" = ( +"cSi" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -93376,7 +85515,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkI" = ( +"cSj" = ( /obj/machinery/camera{ c_tag = "Aux Base Construction North"; dir = 1; @@ -93387,7 +85526,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"dkJ" = ( +"cSk" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -93399,7 +85538,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkK" = ( +"cSl" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -93412,7 +85551,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkL" = ( +"cSm" = ( /obj/machinery/light/small{ dir = 4 }, @@ -93422,7 +85561,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkM" = ( +"cSn" = ( /obj/machinery/light/small{ dir = 1 }, @@ -93432,7 +85571,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 @@ -93440,15 +85579,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 }, @@ -93458,7 +85589,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 @@ -93466,7 +85597,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkR" = ( +"cSr" = ( /obj/machinery/camera{ c_tag = "Aux Base Construction South"; dir = 6; @@ -93476,7 +85607,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/shuttle/auxillary_base) -"dkS" = ( +"cSs" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -93488,19 +85619,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; @@ -93513,7 +85632,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dkV" = ( +"cSu" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93526,32 +85645,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 @@ -93559,19 +85653,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{ @@ -93580,19 +85662,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, @@ -93600,19 +85670,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, @@ -93622,7 +85680,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlf" = ( +"cSz" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 4; @@ -93634,19 +85692,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; @@ -93659,32 +85705,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 @@ -93692,15 +85713,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; @@ -93713,7 +85726,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dln" = ( +"cSD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -93727,19 +85740,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; @@ -93751,7 +85752,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlq" = ( +"cSF" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -93767,7 +85768,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlr" = ( +"cSG" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -93780,14 +85781,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; @@ -93800,7 +85801,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlu" = ( +"cSJ" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -93813,7 +85814,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 @@ -93821,27 +85822,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 @@ -93849,40 +85830,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, @@ -93890,26 +85845,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{ @@ -93918,7 +85860,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlG" = ( +"cSQ" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating{ @@ -93927,7 +85869,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlH" = ( +"cSR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -93936,36 +85878,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; @@ -93975,7 +85891,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dlM" = ( +"cST" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -93985,21 +85901,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{ @@ -94016,26 +85932,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{ @@ -94046,14 +85950,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{ @@ -94065,14 +85962,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"; @@ -94082,7 +85972,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlX" = ( +"cTb" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -94092,7 +85982,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlY" = ( +"cTc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; @@ -94109,7 +85999,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dlZ" = ( +"cTd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -94117,7 +86007,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dma" = ( +"cTe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -94125,15 +86015,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 }, @@ -94141,7 +86023,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dmd" = ( +"cTg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -94154,7 +86036,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/toxins/storage) -"dme" = ( +"cTh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -94167,20 +86049,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 }, @@ -94197,73 +86066,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"; @@ -94285,7 +86111,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmt" = ( +"cTo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -94293,13 +86119,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; @@ -94313,7 +86139,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmw" = ( +"cTr" = ( /obj/structure/girder, /obj/item/stack/sheet/metal, /turf/open/floor/plating/astplate{ @@ -94322,7 +86148,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmx" = ( +"cTs" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -94336,18 +86162,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; @@ -94363,19 +86184,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"; @@ -94388,7 +86204,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/hor) -"dmE" = ( +"cTx" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -94396,13 +86212,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 @@ -94415,19 +86231,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 }, @@ -94442,7 +86246,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmJ" = ( +"cTB" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94458,7 +86262,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmK" = ( +"cTC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94473,7 +86277,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dmL" = ( +"cTD" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94489,12 +86293,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"; @@ -94508,7 +86307,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{ @@ -94516,12 +86315,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 @@ -94529,42 +86328,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 }, @@ -94574,7 +86338,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 @@ -94582,7 +86346,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dna" = ( +"cTK" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -94597,7 +86361,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnb" = ( +"cTL" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille, /turf/open/floor/plating{ @@ -94606,7 +86370,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnc" = ( +"cTM" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -94623,7 +86387,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnd" = ( +"cTN" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -94639,14 +86403,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; @@ -94659,7 +86416,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dng" = ( +"cTP" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94672,7 +86429,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnh" = ( +"cTQ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ d1 = 1; @@ -94685,28 +86442,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; @@ -94720,30 +86456,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{ @@ -94752,28 +86465,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 @@ -94784,7 +86476,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnr" = ( +"cTU" = ( /obj/structure/table, /obj/item/weapon/wrench, /turf/open/floor/plating{ @@ -94793,7 +86485,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dns" = ( +"cTV" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -94809,7 +86501,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnt" = ( +"cTW" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -94825,7 +86517,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnu" = ( +"cTX" = ( /obj/machinery/light/small{ dir = 8 }, @@ -94836,7 +86528,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnv" = ( +"cTY" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating/astplate{ @@ -94845,7 +86537,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 @@ -94853,16 +86545,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 @@ -94870,7 +86553,7 @@ /area/maintenance/aft{ name = "Aft Asteroid Maintenance" }) -"dnz" = ( +"cUb" = ( /obj/machinery/airalarm{ dir = 1; icon_state = "alarm0"; @@ -94880,7 +86563,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/turret_protected/ai) -"dnA" = ( +"cUc" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -94890,7 +86573,7 @@ }, /turf/open/space, /area/space) -"dnB" = ( +"cUd" = ( /obj/structure/disposalpipe/junction{ icon_state = "pipe-j2"; dir = 8 @@ -94898,7 +86581,7 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space) -"dnC" = ( +"cUe" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -94908,7 +86591,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 @@ -94916,7 +86599,7 @@ /area/mine/unexplored{ name = "Cargo Asteroid" }) -"dnE" = ( +"cUg" = ( /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -94925,7 +86608,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/quartermaster/sorting) -"dnF" = ( +"cUh" = ( /obj/machinery/disposal/deliveryChute{ dir = 4 }, @@ -94940,31 +86623,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; @@ -94977,7 +86636,7 @@ /area/maintenance/starboard{ name = "Starboard Asteroid Maintenance" }) -"dnK" = ( +"cUj" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -94992,31 +86651,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 @@ -95024,56 +86678,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, @@ -95084,14 +86703,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 }, @@ -95102,74 +86714,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"; @@ -95183,43 +86735,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 @@ -95227,21 +86743,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 }, @@ -95261,19 +86763,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..." @@ -95292,14 +86787,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..." }, @@ -95309,7 +86797,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doy" = ( +"cUz" = ( /obj/structure/chair{ dir = 4 }, @@ -95319,7 +86807,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doz" = ( +"cUA" = ( /obj/structure/table, /obj/item/weapon/pen, /turf/open/floor/plating{ @@ -95328,26 +86816,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 }, @@ -95357,7 +86826,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doE" = ( +"cUC" = ( /obj/structure/table, /obj/structure/sign/map/right{ pixel_y = -32 @@ -95368,7 +86837,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doF" = ( +"cUD" = ( /obj/structure/table, /obj/item/weapon/paper_bin{ pixel_x = -3; @@ -95380,7 +86849,7 @@ /area/derelict/secret{ valid_territory = 0 }) -"doG" = ( +"cUE" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime{ @@ -95389,63 +86858,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"; @@ -95459,40 +86878,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 @@ -95501,13 +86901,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 @@ -95516,17 +86916,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"; @@ -95537,7 +86932,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dpa" = ( +"cUO" = ( /obj/machinery/light/small{ dir = 4 }, @@ -95545,79 +86940,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"; @@ -95629,7 +86958,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpj" = ( +"cUR" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ tag = "icon-manifold (NORTH)"; icon_state = "manifold"; @@ -95641,7 +86970,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)"; @@ -95654,7 +86983,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 @@ -95662,15 +86991,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{ @@ -95679,7 +87000,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{ @@ -95688,7 +87009,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpp" = ( +"cUW" = ( /obj/machinery/door/airlock/maintenance{ name = "Central Asteroid Maintenance"; req_access_txt = "12" @@ -95700,7 +87021,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpq" = ( +"cUX" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -95711,7 +87032,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 @@ -95719,23 +87040,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{ @@ -95744,48 +87049,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; @@ -95798,93 +87062,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"; @@ -95896,7 +87074,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpK" = ( +"cVc" = ( /obj/machinery/light/small{ dir = 8 }, @@ -95912,7 +87090,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpL" = ( +"cVd" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; @@ -95924,7 +87102,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)"; @@ -95937,81 +87115,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)"; @@ -96024,7 +87128,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpU" = ( +"cVg" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -96036,7 +87140,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dpV" = ( +"cVh" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -96048,19 +87152,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; @@ -96073,43 +87165,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"; @@ -96121,91 +87177,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; @@ -96223,7 +87195,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqk" = ( +"cVl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -96236,20 +87208,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; @@ -96263,33 +87222,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; @@ -96301,35 +87234,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" @@ -96345,27 +87260,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" @@ -96382,7 +87277,7 @@ /area/maintenance/maintcentral{ name = "Central Asteroid Maintenance" }) -"dqA" = ( +"cVs" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -96398,115 +87293,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; @@ -96517,7 +87319,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" @@ -96526,7 +87328,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqM" = ( +"cVw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -96544,14 +87346,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 }, @@ -96563,7 +87365,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqP" = ( +"cVz" = ( /obj/machinery/power/smes{ capacity = 9e+006; charge = 10000 @@ -96576,17 +87378,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 }, @@ -96594,16 +87386,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 }, @@ -96622,7 +87405,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqV" = ( +"cVC" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 }, @@ -96636,7 +87419,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dqW" = ( +"cVD" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96652,7 +87435,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; @@ -96676,17 +87459,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"; @@ -96702,7 +87475,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drb" = ( +"cVG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -96713,7 +87486,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drc" = ( +"cVH" = ( /obj/machinery/atmospherics/components/binary/valve{ name = "Mix to Space" }, @@ -96726,13 +87499,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; @@ -96742,7 +87515,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"; @@ -96752,17 +87525,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; @@ -96773,7 +87536,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drj" = ( +"cVM" = ( /obj/machinery/computer/turbine_computer{ id = "incineratorturbine" }, @@ -96785,14 +87548,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"; @@ -96813,7 +87576,7 @@ }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/incinerator) -"drm" = ( +"cVP" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96825,7 +87588,7 @@ }, /turf/open/floor/plasteel/floorgrime, /area/maintenance/incinerator) -"drn" = ( +"cVQ" = ( /obj/machinery/doorButtons/airlock_controller{ idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; @@ -96847,22 +87610,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, @@ -96870,12 +87618,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 }, @@ -96883,7 +87631,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dru" = ( +"cVU" = ( /obj/machinery/door/airlock/glass{ autoclose = 0; frequency = 1449; @@ -96901,18 +87649,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; @@ -96921,12 +87664,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 @@ -96948,7 +87686,7 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drA" = ( +"cVY" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -96956,7 +87694,7 @@ }, /turf/open/floor/engine, /area/maintenance/incinerator) -"drB" = ( +"cVZ" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; on = 1 @@ -96980,30 +87718,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; @@ -97021,23 +87741,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" @@ -97046,7 +87750,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; @@ -97056,7 +87760,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"drM" = ( +"cWe" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -97072,7 +87776,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; @@ -97086,21 +87790,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; @@ -97115,21 +87808,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 }, @@ -97138,23 +87817,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" @@ -97163,14 +87839,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/maintenance/incinerator) -"dsc" = ( -/obj/structure/sign/fire{ - pixel_x = 0; - pixel_y = 0 - }, -/turf/closed/wall/r_wall, -/area/maintenance/incinerator) -"dsd" = ( +"cWm" = ( /obj/machinery/power/apc{ dir = 1; name = "Armory APC"; @@ -97193,7 +87862,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dse" = ( +"cWn" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -97211,7 +87880,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dsf" = ( +"cWo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -97224,7 +87893,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dsg" = ( +"cWp" = ( /obj/structure/closet/secure_closet{ name = "contraband locker"; req_access_txt = "3" @@ -97236,7 +87905,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/ai_monitored/security/armory) -"dsh" = ( +"cWq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ on = 1; scrub_N2O = 0; @@ -97246,7 +87915,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsi" = ( +"cWr" = ( /obj/machinery/light/small{ dir = 1 }, @@ -97254,12 +87923,12 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsj" = ( +"cWs" = ( /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsk" = ( +"cWt" = ( /obj/machinery/airalarm{ frequency = 1439; locked = 0; @@ -97269,7 +87938,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsl" = ( +"cWu" = ( /obj/machinery/camera{ c_tag = "Security Interrogation"; dir = 9; @@ -97281,13 +87950,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsm" = ( +"cWv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsn" = ( +"cWw" = ( /obj/structure/chair{ dir = 4 }, @@ -97295,14 +87964,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dso" = ( +"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) -"dsp" = ( +"cWy" = ( /obj/structure/chair{ dir = 8 }, @@ -97310,12 +87979,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsq" = ( -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"dsr" = ( +"cWz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -97323,7 +87987,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dss" = ( +"cWA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -97331,33 +87995,14 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dst" = ( +"cWB" = ( /obj/structure/table/wood, /obj/item/device/taperecorder, /turf/open/floor/plasteel/black{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsu" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"dsv" = ( -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"dsw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"dsx" = ( +"cWC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -97365,15 +88010,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsy" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/black{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/security/prison) -"dsz" = ( +"cWD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -97382,13 +88019,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsA" = ( +"cWE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsB" = ( +"cWF" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -97405,7 +88042,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsC" = ( +"cWG" = ( /obj/machinery/power/apc{ dir = 1; name = "Security Transfer Range APC"; @@ -97420,7 +88057,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsD" = ( +"cWH" = ( /obj/structure/cable/orange{ d1 = 2; d2 = 8; @@ -97430,7 +88067,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsE" = ( +"cWI" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -97449,7 +88086,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsF" = ( +"cWJ" = ( /obj/structure/mineral_door/iron{ name = "Transfer Center" }, @@ -97462,7 +88099,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsG" = ( +"cWK" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -97479,7 +88116,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsH" = ( +"cWL" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 2; @@ -97495,7 +88132,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/prison) -"dsI" = ( +"cWM" = ( /obj/machinery/door/airlock/security{ name = "Inmate Transfer Facility"; req_access_txt = "2" @@ -97509,7 +88146,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsJ" = ( +"cWN" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -97519,17 +88156,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsK" = ( -/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) -"dsL" = ( +"cWO" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -97542,7 +88169,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsM" = ( +"cWP" = ( /obj/structure/cable/orange{ d1 = 1; d2 = 8; @@ -97552,7 +88179,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/security/transfer) -"dsN" = ( +"cWQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -97569,7 +88196,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dsO" = ( +"cWR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -97591,7 +88218,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dsP" = ( +"cWS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -97609,54 +88236,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/crew_quarters/chief) -"dsQ" = ( -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 4"; - dir = 8; - network = list("SS13") - }, -/turf/open/space, -/area/space) -"dsR" = ( -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 1"; - dir = 8; - network = list("SS13") - }, -/turf/open/space, -/area/space) -"dsS" = ( -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 2"; - network = list("SS13") - }, -/turf/open/space, -/area/space) -"dsT" = ( -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge 3"; - network = list("SS13") - }, -/turf/open/space, -/area/space) -"dsU" = ( -/obj/machinery/camera{ - c_tag = "Core-Command-Cargo Bridge Ceneter"; - dir = 1 - }, -/turf/open/space, -/area/space) -"dsV" = ( +"cWT" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Command-Service Bridge" }) -"dsW" = ( +"cWU" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dsX" = ( +"cWV" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -97664,7 +88254,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dsY" = ( +"cWW" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 4 @@ -97673,18 +88263,18 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dsZ" = ( +"cWX" = ( /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Command-Service Bridge" }) -"dta" = ( +"cWY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dtb" = ( +"cWZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "1-2" @@ -97693,35 +88283,12 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dtc" = ( +"cXa" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dtd" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dte" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtf" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dth" = ( +"cXb" = ( /obj/machinery/camera{ c_tag = "Command-Service Bridge"; dir = 4; @@ -97731,7 +88298,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dti" = ( +"cXc" = ( /obj/machinery/light/small{ dir = 4 }, @@ -97739,18 +88306,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dtj" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Engineering Bridge" - }) -"dtl" = ( +"cXd" = ( /obj/machinery/camera{ c_tag = "Command-Engineering Bridge"; dir = 8; @@ -97760,36 +88316,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dtm" = ( -/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" - }) -"dtn" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dto" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtp" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtq" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtr" = ( +"cXe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "1-2" @@ -97798,7 +88325,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dts" = ( +"cXf" = ( /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ dir = 8; @@ -97813,12 +88340,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dtt" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtu" = ( +"cXg" = ( /obj/machinery/light{ dir = 4 }, @@ -97826,20 +88348,12 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dtv" = ( +"cXh" = ( /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dtw" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtx" = ( +"cXi" = ( /obj/machinery/power/apc{ dir = 8; name = "Command-Service Bridge APC"; @@ -97853,7 +88367,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dty" = ( +"cXj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -97864,7 +88378,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dtz" = ( +"cXk" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -97877,46 +88391,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dtA" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Engineering Bridge" - }) -"dtC" = ( -/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" - }) -"dtD" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtE" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtF" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtG" = ( +"cXl" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -97924,61 +88399,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dtH" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtI" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtJ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtK" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtL" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtM" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtN" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtO" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtP" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtQ" = ( +"cXm" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -97990,36 +88411,7 @@ /area/construction/hallway{ name = "Command-Service Bridge" }) -"dtR" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dtS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Command-Engineering Bridge" - }) -"dtT" = ( -/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" - }) -"dtU" = ( -/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" - }) -"dtV" = ( +"cXn" = ( /obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Medbay-Cargo Bridge"; @@ -98033,89 +88425,7 @@ /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dtW" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtX" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtY" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dtZ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dua" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dub" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"duc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dud" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"due" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"duf" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Service Bridge" - }) -"dug" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"duh" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"dui" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"duj" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Medical-Cargo Bridge" - }) -"duk" = ( +"cXo" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -98123,7 +88433,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/port) -"dul" = ( +"cXp" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -98133,7 +88443,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dum" = ( +"cXq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -98147,77 +88457,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dun" = ( -/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" - }) -"duo" = ( -/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" - }) -"dup" = ( -/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" - }) -"duq" = ( -/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" - }) -"dur" = ( -/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" - }) -"dus" = ( +"cXr" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -98233,39 +88473,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"dut" = ( -/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" - }) -"duu" = ( -/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" - }) -"duv" = ( +"cXs" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -98276,18 +88484,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"duw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dux" = ( +"cXt" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -98298,40 +88495,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"duy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duB" = ( +"cXu" = ( /obj/machinery/light{ dir = 1 }, @@ -98339,7 +88503,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"duC" = ( +"cXv" = ( /obj/machinery/light/small{ dir = 1 }, @@ -98347,180 +88511,12 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"duD" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Engineering-Medical Bridge" - }) -"duE" = ( +"cXw" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"duF" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duG" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duH" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duI" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duJ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duK" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duL" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duM" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duN" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duO" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duP" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duQ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duR" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duS" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duT" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duU" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duV" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duW" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duX" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duY" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"duZ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dva" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvb" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvc" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvd" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dve" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvf" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvg" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvh" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvi" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvj" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvk" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvl" = ( +"cXx" = ( /obj/machinery/camera{ c_tag = "Service-Engineering Bridge 1"; dir = 1 @@ -98529,7 +88525,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dvm" = ( +"cXy" = ( /obj/machinery/power/apc{ dir = 2; name = "Service-Engineering Bridge APC"; @@ -98542,7 +88538,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dvn" = ( +"cXz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -98553,29 +88549,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dvo" = ( -/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" - }) -"dvp" = ( -/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" - }) -"dvq" = ( +"cXA" = ( /obj/machinery/camera{ c_tag = "Service-Engineering Bridge 2"; dir = 1 @@ -98590,7 +88564,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dvr" = ( +"cXB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -98603,33 +88577,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"dvs" = ( -/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) -"dvt" = ( -/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) -"dvu" = ( +"cXC" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -98640,29 +88588,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"dvv" = ( -/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) -"dvw" = ( -/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) -"dvx" = ( +"cXD" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -98673,29 +88599,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"dvy" = ( -/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" - }) -"dvz" = ( -/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" - }) -"dvA" = ( +"cXE" = ( /obj/machinery/camera{ c_tag = "Medbay-Engineering Bridge"; dir = 1 @@ -98710,7 +88614,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"dvB" = ( +"cXF" = ( /obj/machinery/power/apc{ dir = 2; name = "Engineering-Medical Bridge APC"; @@ -98724,7 +88628,7 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"dvC" = ( +"cXG" = ( /obj/machinery/camera{ c_tag = "Medbay-Engineering Bridge 2"; dir = 1 @@ -98733,21 +88637,14 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"dvD" = ( +"cXH" = ( /turf/closed/wall{ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dvE" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/construction/hallway{ - name = "Service-Engineering Bridge" - }) -"dvF" = ( +"cXI" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -98761,287 +88658,7 @@ /area/construction/hallway{ name = "Service-Engineering Bridge" }) -"dvG" = ( -/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" - }) -"dvH" = ( -/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" - }) -"dvI" = ( -/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" - }) -"dvJ" = ( -/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" - }) -"dvK" = ( -/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" - }) -"dvL" = ( -/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" - }) -"dvM" = ( -/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" - }) -"dvN" = ( -/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" - }) -"dvO" = ( -/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" - }) -"dvP" = ( -/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" - }) -"dvQ" = ( -/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" - }) -"dvR" = ( -/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" - }) -"dvS" = ( -/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" - }) -"dvT" = ( -/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" - }) -"dvU" = ( -/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" - }) -"dvV" = ( -/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" - }) -"dvW" = ( -/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" - }) -"dvX" = ( -/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" - }) -"dvY" = ( -/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" - }) -"dvZ" = ( -/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" - }) -"dwa" = ( +"cXJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99052,96 +88669,19 @@ /area/construction/hallway{ name = "Engineering-Medical Bridge" }) -"dwb" = ( -/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" - }) -"dwc" = ( -/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" - }) -"dwd" = ( +"cXK" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwe" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwf" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwg" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwh" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwi" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwj" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwk" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwl" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwm" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwn" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwo" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwp" = ( +"cXL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwq" = ( +"cXM" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -99150,12 +88690,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwr" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dws" = ( +"cXN" = ( /obj/machinery/camera{ c_tag = "Docking-Medbay Bridge"; dir = 8; @@ -99165,7 +88700,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwt" = ( +"cXO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -99176,24 +88711,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwu" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwv" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dww" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwx" = ( +"cXP" = ( /obj/machinery/light/small{ brightness = 3; dir = 8 @@ -99202,7 +88720,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwy" = ( +"cXQ" = ( /obj/machinery/power/apc{ dir = 4; name = "Docking-Medical Bridge APC"; @@ -99217,18 +88735,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwz" = ( -/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" - }) -"dwA" = ( +"cXR" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -99236,39 +88743,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwB" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwC" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwD" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwE" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Docking-Medical Bridge" - }) -"dwF" = ( +"cXS" = ( /obj/machinery/camera{ c_tag = "Docking-Medbay Bridge 2"; dir = 8; @@ -99281,18 +88756,7 @@ /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dwG" = ( -/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" - }) -"dwH" = ( +"cXT" = ( /obj/machinery/door/airlock/glass, /obj/structure/cable{ icon_state = "1-2" @@ -99301,7 +88765,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dwI" = ( +"cXU" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -99309,31 +88773,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dwJ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"dwK" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"dwL" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, -/area/hallway/primary/starboard) -"dwM" = ( +"cXV" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -99346,7 +88786,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dwN" = ( +"cXW" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -99357,72 +88797,17 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/starboard) -"dwO" = ( +"cXX" = ( /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dwP" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwQ" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwR" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwS" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwT" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwU" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwV" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwW" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwX" = ( +"cXY" = ( /turf/open/floor/engine, /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dwY" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dwZ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxa" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxb" = ( +"cXZ" = ( /obj/machinery/light{ dir = 1 }, @@ -99430,27 +88815,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dxc" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxd" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxe" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxf" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxg" = ( +"cYa" = ( /obj/machinery/light/small{ dir = 1 }, @@ -99458,428 +88823,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dxh" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxi" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxj" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxk" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxl" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxm" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxn" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxo" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxp" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxq" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxr" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxs" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxt" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxu" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxv" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxw" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxx" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxy" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxz" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxA" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxB" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxC" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxD" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxE" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxF" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxG" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxH" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxI" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxJ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxK" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxL" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxM" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxN" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxO" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxP" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxQ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxR" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxS" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxT" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxU" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxV" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxW" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxX" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxY" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dxZ" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dya" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyb" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyc" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyd" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dye" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyf" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyg" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyh" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyi" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyj" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyk" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyl" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dym" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyn" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyo" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyp" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyq" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyr" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dys" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyt" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyu" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyv" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyw" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyx" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyy" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyz" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyA" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyB" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyC" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyD" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyE" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyF" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyG" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyH" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyI" = ( -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyJ" = ( +"cYb" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -99891,7 +88835,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"dyK" = ( +"cYc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -99904,20 +88848,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/aft) -"dyL" = ( -/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) -"dyM" = ( +"cYd" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99937,7 +88868,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dyN" = ( +"cYe" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99957,7 +88888,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dyO" = ( +"cYf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -99965,55 +88896,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dyP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyV" = ( +"cYg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -100027,39 +88910,7 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dyW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dyZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dza" = ( +"cYh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -100073,69 +88924,16 @@ /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dzb" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzc" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzd" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dze" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzf" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzg" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzh" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzi" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzj" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Science-Docking Bridge" - }) -"dzk" = ( +"cYi" = ( /obj/structure/lattice, /turf/open/space/basic, /area/space) -"dzl" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) -"dzm" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) -"dzn" = ( +"cYj" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/space, /area/space) -"dzo" = ( +"cYk" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -100157,7 +88955,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzp" = ( +"cYl" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 8 @@ -100172,7 +88970,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzq" = ( +"cYm" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced{ dir = 4; @@ -100193,94 +88991,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzr" = ( -/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" - }) -"dzs" = ( -/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" - }) -"dzt" = ( -/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" - }) -"dzu" = ( -/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" - }) -"dzv" = ( -/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" - }) -"dzw" = ( +"cYn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ d1 = 1; @@ -100291,7 +89002,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzx" = ( +"cYo" = ( /obj/machinery/light/small{ dir = 8 }, @@ -100299,132 +89010,13 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzy" = ( +"cYp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzz" = ( -/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" - }) -"dzA" = ( -/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" - }) -"dzB" = ( -/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" - }) -"dzC" = ( -/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" - }) -"dzD" = ( -/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" - }) -"dzE" = ( -/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" - }) -"dzF" = ( -/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" - }) -"dzG" = ( +"cYq" = ( /obj/machinery/light{ dir = 8 }, @@ -100432,140 +89024,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dzI" = ( -/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" - }) -"dzJ" = ( -/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" - }) -"dzK" = ( -/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" - }) -"dzL" = ( -/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" - }) -"dzM" = ( -/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" - }) -"dzN" = ( -/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" - }) -"dzO" = ( -/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" - }) -"dzP" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dzQ" = ( +"cYr" = ( /obj/machinery/camera{ c_tag = "Core-Command-Cargo Bridge 1"; dir = 8; @@ -100575,290 +89034,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dzR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dzS" = ( -/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" - }) -"dzT" = ( -/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" - }) -"dzU" = ( -/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" - }) -"dzV" = ( -/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" - }) -"dzW" = ( -/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" - }) -"dzX" = ( -/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" - }) -"dzY" = ( -/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" - }) -"dzZ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAa" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAb" = ( -/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" - }) -"dAc" = ( -/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" - }) -"dAd" = ( -/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" - }) -"dAe" = ( -/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" - }) -"dAf" = ( -/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" - }) -"dAg" = ( -/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" - }) -"dAh" = ( -/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" - }) -"dAi" = ( -/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" - }) -"dAj" = ( +"cYs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -100872,21 +89048,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAk" = ( -/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/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAl" = ( +"cYt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -100899,15 +89061,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAm" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAn" = ( +"cYu" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -100921,49 +89075,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAo" = ( -/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" - }) -"dAp" = ( -/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" - }) -"dAq" = ( -/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" - }) -"dAr" = ( +"cYv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -100971,99 +89083,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAs" = ( -/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" - }) -"dAt" = ( -/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" - }) -"dAu" = ( -/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" - }) -"dAv" = ( -/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" - }) -"dAw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAx" = ( -/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" - }) -"dAy" = ( -/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" - }) -"dAz" = ( +"cYw" = ( /obj/structure/lattice/catwalk, /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -101077,7 +89097,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAA" = ( +"cYx" = ( /obj/machinery/camera{ c_tag = "Core-Command-Cargo Bridge 2"; network = list("SS13") @@ -101086,7 +89106,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAB" = ( +"cYy" = ( /obj/machinery/camera{ c_tag = "Core-Command-Cargo Bridge 3"; network = list("SS13") @@ -101095,7 +89115,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAC" = ( +"cYz" = ( /obj/machinery/power/apc{ dir = 1; name = "Cargo-AI-Command Bridge APC"; @@ -101109,7 +89129,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAD" = ( +"cYA" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -101119,37 +89139,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAE" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAF" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAG" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAH" = ( +"cYB" = ( /obj/machinery/camera{ c_tag = "Core-Command-Cargo Bridge 3"; network = list("SS13") @@ -101163,87 +89153,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAI" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAJ" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAK" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAL" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAM" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAN" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAO" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAP" = ( -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAQ" = ( +"cYC" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; @@ -101256,20 +89166,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dAR" = ( -/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) -"dAS" = ( +"cYD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -101290,79 +89187,30 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/fore) -"dAT" = ( +"cYE" = ( /obj/effect/landmark/lightsout, /turf/open/floor/engine, /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAU" = ( +"cYF" = ( /obj/machinery/light, /turf/open/floor/engine, /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAV" = ( +"cYG" = ( /obj/machinery/light/small, /turf/open/floor/engine, /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dAW" = ( -/obj/machinery/light, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAX" = ( -/obj/machinery/light, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAY" = ( -/obj/machinery/light/small, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dAZ" = ( -/obj/machinery/light, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dBa" = ( +"cYH" = ( /turf/closed/wall/r_wall, /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dBb" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dBc" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dBd" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dBe" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dBf" = ( -/turf/closed/wall/r_wall, -/area/construction/hallway{ - name = "Cargo-AI-Command Bridge" - }) -"dBg" = ( +"cYI" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -101376,7 +89224,7 @@ /area/construction/hallway{ name = "Cargo-AI-Command Bridge" }) -"dBh" = ( +"cYJ" = ( /obj/machinery/light{ icon_state = "tube1"; dir = 8 @@ -101385,7 +89233,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dBi" = ( +"cYK" = ( /obj/machinery/light/small{ brightness = 3; dir = 8 @@ -101394,22 +89242,13 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dBj" = ( +"cYL" = ( /obj/effect/landmark/lightsout, /turf/open/floor/engine, /area/construction/hallway{ name = "Command-Service Bridge" }) -"dBk" = ( -/obj/machinery/light/small{ - brightness = 3; - dir = 8 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Engineering Bridge" - }) -"dBl" = ( +"cYM" = ( /obj/machinery/power/apc{ dir = 4; name = "Command-Engineering Bridge APC"; @@ -101425,7 +89264,7 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dBm" = ( +"cYN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -101436,88 +89275,13 @@ /area/construction/hallway{ name = "Command-Engineering Bridge" }) -"dBn" = ( +"cYO" = ( /obj/effect/landmark/lightsout, /turf/open/floor/engine, /area/construction/hallway{ name = "Medical-Cargo Bridge" }) -"dBo" = ( -/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" - }) -"dBp" = ( -/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" - }) -"dBq" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/turf/open/floor/engine, -/area/construction/hallway{ - name = "Command-Engineering Bridge" - }) -"dBr" = ( -/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" - }) -"dBs" = ( -/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" - }) -"dBt" = ( -/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" - }) -"dBu" = ( -/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" - }) -"dBv" = ( +"cYP" = ( /obj/machinery/door/airlock/glass, /obj/structure/cable{ d1 = 1; @@ -101532,7 +89296,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"dBw" = ( +"cYQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -101546,35 +89310,7 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"dBx" = ( -/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) -"dBy" = ( -/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) -"dBz" = ( +"cYR" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -101587,13 +89323,13 @@ baseturf = /turf/open/floor/plating/asteroid/airless }, /area/hallway/primary/central) -"dBA" = ( +"cYS" = ( /obj/effect/landmark/lightsout, /turf/open/floor/engine, /area/construction/hallway{ name = "Docking-Medical Bridge" }) -"dBB" = ( +"cYT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall{ baseturf = /turf/open/floor/plating/asteroid/airless @@ -101601,7 +89337,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"dBC" = ( +"cYU" = ( /obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ dir = 4; @@ -101617,7 +89353,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"dBD" = ( +"cYV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ d1 = 1; @@ -101630,7 +89366,7 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"dBE" = ( +"cYW" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/engine{ baseturf = /turf/open/floor/plating/asteroid/airless; @@ -101639,22 +89375,13 @@ /area/construction/hallway{ name = "Service-Science Bridge" }) -"dBF" = ( -/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" - }) -"dBG" = ( +"cYX" = ( /obj/effect/landmark/lightsout, /turf/open/floor/engine, /area/construction/hallway{ name = "Science-Docking Bridge" }) -"dBH" = ( +"cYY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -101667,6 +89394,3384 @@ 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" + }) +"deK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"deL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + icon_state = "intact"; + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"deM" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"deN" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"deO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/structure/closet/secure_closet/atmospherics, +/obj/item/weapon/pickaxe/mini, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"deP" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 4; + frequency = 1441; + id = "n2_in" + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/mineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/mineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/mineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/mineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/mineral/random/labormineral, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/maintenance/maintcentral{ + name = "Central Asteroid Maintenance" + }) +"deY" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/scrubber/huge, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"deZ" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"dfa" = ( +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"dfb" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + baseturf = /turf/open/floor/plating/asteroid/airless; + dir = 5 + }, +/area/atmos) +"dfc" = ( +/obj/machinery/atmospherics/components/binary/valve/digital{ + dir = 4; + name = "Waste Release" + }, +/turf/open/floor/plasteel/yellow/side{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfd" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (SOUTHWEST)"; + icon_state = "yellow"; + dir = 10; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfe" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 2; + filter_type = "n2"; + name = "nitogren filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/red, +/area/atmos) +"dff" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfg" = ( +/obj/structure/sign/nosmoking_2, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfh" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "n2_in"; + name = "Nitrogen Supply Control"; + output_tag = "n2_out"; + sensors = list("n2_sensor" = "Tank") + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/red, +/area/atmos) +"dfi" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfk" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "N2 to Pure" + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/eastright{ + name = "Interior Pipe Access"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfl" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfm" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/crew_quarters/chief) +"dfn" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 2; + filter_type = "o2"; + name = "oxygen filter"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/blue, +/area/atmos) +"dfo" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfp" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfq" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfs" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "o2_in"; + name = "Oxygen Supply Control"; + output_tag = "o2_out"; + sensors = list("o2_sensor" = "Tank") + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/blue, +/area/atmos) +"dft" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4 + }, +/area/atmos) +"dfu" = ( +/obj/machinery/pipedispenser, +/obj/machinery/light, +/turf/open/floor/plasteel/yellow/corner{ + tag = "icon-yellowcorner (WEST)"; + icon_state = "yellowcorner"; + dir = 8 + }, +/area/atmos) +"dfv" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfw" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfx" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 6 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfy" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "O2 to Airmix"; + on = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/blue, +/area/atmos) +"dfz" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/camera{ + c_tag = "Atmospherics Distro"; + dir = 9; + icon_state = "camera"; + network = list("SS13","CE") + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4 + }, +/area/atmos) +"dfA" = ( +/obj/structure/sign/poster/official/safety_internals, +/turf/closed/wall, +/area/atmos) +"dfB" = ( +/obj/machinery/camera{ + c_tag = "Atmospherics South"; + dir = 4; + icon_state = "camera"; + network = list("SS13","CE") + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfC" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + icon_state = "intact"; + dir = 4 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfD" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfE" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4; + initialize_directions = 11 + }, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfF" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "O2 to Pure" + }, +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/window/eastright{ + name = "Interior Pipe Access"; + req_access_txt = "24" + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfG" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "South Canister To Waste"; + on = 0; + target_pressure = 101 + }, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4 + }, +/area/atmos) +"dfH" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/yellow/corner{ + dir = 1 + }, +/area/atmos) +"dfI" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfJ" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfK" = ( +/obj/machinery/portable_atmospherics/canister, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/plasteel/delivery{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfL" = ( +/obj/effect/landmark/start/atmospheric_technician, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfM" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfN" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (WEST)"; + icon_state = "yellow"; + dir = 8; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 8; + on = 1; + scrub_Toxins = 0 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfP" = ( +/obj/machinery/status_display{ + density = 0; + layer = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + tag = "icon-intact (WEST)"; + icon_state = "intact"; + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/barber, +/area/atmos) +"dfR" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfS" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfT" = ( +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 8 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel/yellow/side{ + tag = "icon-yellow (EAST)"; + icon_state = "yellow"; + dir = 4; + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfV" = ( +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "air_in"; + name = "Mixed Air Supply Control"; + output_tag = "air_out"; + sensors = list("air_sensor" = "Tank") + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plasteel/barber, +/area/atmos) +"dfW" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/airalarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfX" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/window/eastright{ + dir = 1; + name = "Interior Pipe Access"; + req_access_txt = "24" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Air to South Canister"; + on = 0 + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dfY" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "tox_in"; + name = "Plasma Supply Control"; + output_tag = "tox_out"; + sensors = list("tox_sensor" = "Tank") + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/purple, +/area/atmos) +"dfZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Plasma to Pure"; + on = 0 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/purple, +/area/atmos) +"dga" = ( +/obj/machinery/atmospherics/components/trinary/filter{ + dir = 4; + filter_type = "n2"; + name = "nitogren filter"; + on = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/escape{ + dir = 10 + }, +/area/atmos) +"dgb" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/computer/atmos_control/tank{ + frequency = 1441; + input_tag = "n2o_in"; + name = "Nitrous Oxide Supply Control"; + output_tag = "n2o_out"; + sensors = list("n2o_sensor" = "Tank") + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/escape, +/area/atmos) +"dgc" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "N2O to Pure"; + on = 0 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/escape{ + dir = 6 + }, +/area/atmos) +"dgd" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) +"dge" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/asteroid/airless + }, +/area/atmos) (1,1,1) = {" aaa @@ -104205,8 +95310,8 @@ aaa aaa aaa aaa -aad aaa +aad aaa aaa aaa @@ -104560,6 +95665,7 @@ aaa aaa aaa aaa +aaa aac aac aac @@ -104632,7 +95738,6 @@ aaa aaa aaa aaa -aaa aac aac aad @@ -104889,6 +95994,7 @@ aaa aaa aaa aaa +aaa aac aac aad @@ -104936,7 +96042,6 @@ aaa aaa aaa aaa -aaa aad aaa aaa @@ -105396,6 +96501,7 @@ aaa aaa aaa aaa +aaa aad aaa aaa @@ -105492,7 +96598,6 @@ aaa aaa aaa aaa -aaa aad aad aad @@ -105752,14 +96857,14 @@ aaa aaa aaa aaa -aad -aad -aad -aad -aab -aab -aab aaa +aad +aad +aad +aad +aab +aab +aab aaa aaa aaa @@ -105814,7 +96919,7 @@ aai aai aai aai -aer +aeh aai aai aai @@ -106067,15 +97172,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 @@ -106216,6 +97321,7 @@ aaa aaa aaa aaa +aaa aag aaa aaa @@ -106292,7 +97398,6 @@ aaa aaa aaa aaa -aaa "} (19,1,1) = {" aaa @@ -106324,15 +97429,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 @@ -106549,7 +97655,6 @@ aaa aaa aaa aaa -aaa "} (20,1,1) = {" aaa @@ -106581,15 +97686,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 @@ -106712,13 +97817,13 @@ aaa aaa aaa aaa -aZm -aZm -cdT -cdT -cdT -aZm -aZm +aXL +aXL +caR +caR +caR +aXL +aXL aaa aaa aaa @@ -106838,15 +97943,15 @@ aan aan aan aai -acX -acV -acV -acV -aev +acW +acU +acU +acU +ael aai aai aai -agl +afX aaa aaa aaa @@ -106887,12 +97992,12 @@ aaa aad aab aab -dnS -dnZ -dnN -dnS -dou -dnN +cUo +cUr +cUm +cUo +cUw +cUm aac aac aac @@ -106969,13 +98074,13 @@ aaa aaa aaa aaa -aZm -bdM -beC -bUi -ceF -cfc -aZm +aXL +bcj +bcX +bRl +cbD +cca +aXL aaa aaa aaa @@ -107095,13 +98200,13 @@ acq aan aan aai -acY -acV -acV -acV -aew +acX +acU +acU +acU +aem aai -afj +aeV aaa aaa aaa @@ -107143,14 +98248,14 @@ aaa aaa aab aad -dnM -dnS -doa -dnP -doa -dov -dnN -dnN +cUl +cUo +cUs +cUn +cUs +cUx +cUm +cUm aac aac aad @@ -107224,17 +98329,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 @@ -107285,13 +98390,13 @@ aaa aaa aaa aaa -cGR -cGR -cGR -cGR -cGR -cGR -cGR +cCJ +cCJ +cCJ +cCJ +cCJ +cCJ +cCJ aaa aaa aaa @@ -107350,12 +98455,12 @@ aai aai aai acE -acM +acL aai aai -adn -adC -adW +adk +adw +adM aai aai aai @@ -107400,14 +98505,14 @@ aaa aad aad aad -dnN -dnS -dnZ -dnV -dop -doa -doD -dnS +cUm +cUo +cUr +cUp +cUu +cUs +cUB +cUo aac aac aad @@ -107426,7 +98531,7 @@ aba abr abr abV -bat +aYS aaa aaa aaa @@ -107481,17 +98586,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 @@ -107542,14 +98647,14 @@ aaa aaa aaa aaa -cGS -cHh -cHp -cHG -cHU -cIi -cHq -cGR +cCK +cCY +cDg +cDx +cDL +cDZ +cDh +cCJ aaa aaa aaa @@ -107608,15 +98713,15 @@ aan acr aan aan -acQ +acP aan aan aan aan aaB -aeR -afk -afH +aeG +aeW +aft aaa aaa aaa @@ -107657,14 +98762,14 @@ aac aac aad aad -dnM -dnV -dnP -doj -dnV -dox -doE -dnS +cUl +cUp +cUn +cUt +cUp +cUy +cUC +cUo aac aad aad @@ -107738,17 +98843,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 @@ -107777,14 +98882,14 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -107799,14 +98904,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 @@ -107870,10 +98976,9 @@ aan aan aan aan -aeS -afk -afI -aaa +aeH +aeW +afu aaa aaa aaa @@ -107914,14 +99019,14 @@ aac aac aad aad -dnP -dnV -dnV -dnP -doa -doy -doF -dnP +cUn +cUp +cUp +cUn +cUs +cUz +cUD +cUn aac aad aab @@ -107995,17 +99100,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 @@ -108034,14 +99139,14 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -108058,13 +99163,13 @@ aaa aaa abC aaa -cGR -cHI -cHW -cIk -cIB -cGR -cGR +cCJ +cDz +cDN +cEb +cEs +cCJ +cCJ aaa aaa aaa @@ -108128,9 +99233,9 @@ acG aan aan aaB -aeR -afk -afJ +aeG +aeW +afv aaa aaa aaa @@ -108171,14 +99276,14 @@ aaa aad aac aac -dnN -dnX -dnV -dnV -dos -doz -doG -dnN +cUm +cUq +cUp +cUp +cUv +cUA +cUE +cUm aac aad aab @@ -108250,19 +99355,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 @@ -108290,14 +99395,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 @@ -108309,19 +99415,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 @@ -108382,8 +99487,8 @@ acr aai aai aai -adD -adX +adx +adN aai aai aai @@ -108428,14 +99533,14 @@ aaa aad aac aac -dnN -dnN -dnM -dnS -dnS -dnM -dnN -dnS +cUm +cUm +cUl +cUo +cUo +cUl +cUm +cUo aad aad aab @@ -108507,24 +99612,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 @@ -108547,14 +99652,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 @@ -108563,22 +99669,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 @@ -108637,12 +99742,12 @@ aan aan aan aai -acZ +acY aan aan aan -aex -aeT +aen +aeI aai aaa aaa @@ -108752,36 +99857,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 @@ -108804,14 +99909,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 @@ -108820,22 +99926,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 @@ -108894,15 +99999,15 @@ aan aan aan aai -ada +acZ aan aan aan -aey +aeo aai aai aai -agm +afY aaa aaa aaa @@ -109005,40 +100110,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 @@ -109062,37 +100167,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 @@ -109151,15 +100256,15 @@ aan acG aan aai -adb +ada aan aan aan aan aan -afl -afk -afH +aeX +aeW +aft aaa aaa aaa @@ -109242,16 +100347,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 @@ -109262,45 +100367,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 @@ -109319,34 +100424,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 @@ -109408,15 +100513,15 @@ aai aai aai aai -adc +adb ace aan aan aan aan -afm -afk -afI +aeY +aeW +afu aaa aaa aaa @@ -109499,66 +100604,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 @@ -109587,23 +100692,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 @@ -109663,17 +100768,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 @@ -109748,74 +100853,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 @@ -109844,23 +100949,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 @@ -110004,76 +101109,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 @@ -110096,20 +101201,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 @@ -110117,7 +101222,7 @@ aaa aaa aaa abC -cHA +cDr abC aaa abC @@ -110205,15 +101310,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 @@ -110248,95 +101353,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 @@ -110353,28 +101458,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 @@ -110462,15 +101567,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 @@ -110505,94 +101610,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 @@ -110610,28 +101715,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 @@ -110719,28 +101824,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 @@ -110762,99 +101867,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 @@ -110866,29 +101971,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 @@ -110976,28 +102081,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 @@ -111019,99 +102124,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 @@ -111122,30 +102227,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 @@ -111233,30 +102338,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 @@ -111271,104 +102376,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 @@ -111379,30 +102484,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 @@ -111490,30 +102595,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 @@ -111528,105 +102633,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 @@ -111637,29 +102742,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 @@ -111748,29 +102853,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 @@ -111785,138 +102890,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 @@ -112002,30 +103107,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 @@ -112044,136 +103149,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 @@ -112259,33 +103364,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 @@ -112305,132 +103410,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 @@ -112515,32 +103620,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 @@ -112561,133 +103666,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 @@ -112771,33 +103876,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 @@ -112818,133 +103923,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 @@ -113017,45 +104122,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 @@ -113074,134 +104179,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 @@ -113274,45 +104379,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 @@ -113320,7 +104425,7 @@ abE aaa aaa aaa -cKF +cGc aaa aaa aaa @@ -113329,137 +104434,137 @@ 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 @@ -113531,46 +104636,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 @@ -113586,139 +104691,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 @@ -113788,46 +104893,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 @@ -113841,143 +104946,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 @@ -114045,49 +105150,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 @@ -114102,139 +105207,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 @@ -114301,47 +105406,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 @@ -114359,139 +105464,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 @@ -114535,11 +105640,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -114558,49 +105663,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 @@ -114619,136 +105724,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 @@ -114792,11 +105897,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -114815,197 +105920,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 @@ -115049,11 +106154,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -115069,52 +106174,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 @@ -115133,136 +106238,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 @@ -115306,11 +106411,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -115326,54 +106431,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 @@ -115392,134 +106497,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 @@ -115563,11 +106668,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -115582,201 +106687,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 @@ -115820,11 +106925,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC aaa @@ -115839,199 +106944,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 -dsX -aXS -aXS -aXS -dsX -aXS -aXS -dsX -aXS -aXS -aXS -dsX -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 -dBB -cga -cga -dBB -cga -cga -dBB -cga -cga -cga -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 @@ -116077,11 +107182,11 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa abC abE @@ -116096,197 +107201,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 -dsV -dsV -dsV -dsV -dsV -dsV -dsV -dth -dsV -dsV -dtx -dsV -dsV -dsV -dsV -dsV -dsV -dsV -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 -cfO -cfO -cgp -cfO -cfO -cfO -cfO -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 @@ -116354,196 +107459,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 -dsV -dsV -dsV -dsV -dsV -dsV -dsV -dsV -dBj -dsV -dty -dsV -dsV -dsV -dsV -dsV -dsV -dsV -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 -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -cfO -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 @@ -116603,204 +107708,204 @@ abE abW acH acH -acO -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 -dsV -dsV -dsV -dsY -dsV -dsV -dsV -dti -dsV -dsV -dtz -dtG -dtG -dtG -dtQ -dtG -dtG -dtG -bac -duk -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 -dBC -dBE -dBE -cgW -dBE -dBE -dBE -dBE -dBE -dBE -dBE -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 @@ -116860,211 +107965,211 @@ abE abW acH acH -acO -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 -dsZ -aXD -aXD -aXD -dsZ -aXD -aXD -dsZ -aXD -aXD -aXD -dsZ -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 +ddI +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 -dBD -cgb -cgb -dBD -cgb -cgb -dBD -cgb -cgb -cgb -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 @@ -117117,59 +108222,59 @@ abE abW acH acH -acO -acO -adF -aea -aeB -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 @@ -117190,138 +108295,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 @@ -117374,59 +108479,59 @@ abW abW abW abW -acO -acO -dsd -aec -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 @@ -117447,138 +108552,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 @@ -117622,7 +108727,7 @@ aaa aaa aaa aaa -cKF +cGc aaa aaa abE @@ -117631,59 +108736,59 @@ abW abW abW abW -acO -acO -dse -aec -aeD -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 @@ -117703,139 +108808,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 +dem +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 @@ -117879,7 +108984,7 @@ aaa aaa aaa aaa -cKF +cGc aaa aaa abE @@ -117888,59 +108993,59 @@ abE abW abW abW -acO -acO -adI -dsf -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 @@ -117958,141 +109063,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 +dem +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 @@ -118136,7 +109241,7 @@ aaa aaa aaa aaa -cKF +cGc aaa aaa abE @@ -118145,54 +109250,54 @@ abE abW abW abW -acO -acO -adJ -aee -aeF -aeD -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 @@ -118215,141 +109320,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 @@ -118393,7 +109498,7 @@ aaa aaa aaa aaa -cKF +cGc aaa aaa abE @@ -118402,54 +109507,54 @@ abE abW abW abW -acO -acO -adK -aef -aef -aee -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 @@ -118472,134 +109577,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 @@ -118659,54 +109764,54 @@ abE abW abW abW -acO -acO -adM -aef -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 @@ -118729,134 +109834,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 +ddv +dea +bAq +ddo +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 @@ -118916,54 +110021,54 @@ abE abW abW abW -acO -acO -adM -aeg -aeG -dsg -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 @@ -118986,134 +110091,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 +ddB +ddv +dea +dej +ddo +dey +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 @@ -119173,63 +110278,63 @@ abE abW abW abW -acO -acO -doV -acO -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 @@ -119243,134 +110348,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 +ddY +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 @@ -119430,65 +110535,65 @@ abE abW abW acH -acO -acO -acO -acO -acO -acO -acO -acO -acO -afr -afr -afr -dsr -dsm -akB -all -alK -amA -ant -apr -apr -aol -apr -apr -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 @@ -119500,134 +110605,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 +ddo +ddv +ddB +ddv +dea +bwc +ddo +dey +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 @@ -119696,195 +110801,195 @@ abW abW abW abW -afr -dsh -dsm -dss -ajJ -akt -alm -dsA -amB -dsB -aqg -anp -dsE -dsG -dsH -anp -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 +ddn +ddv +ddB +ddv +dea +bwc +ddo +dey +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 @@ -119953,195 +111058,195 @@ abW abW abW abW -afr -dsi -dsn -dsn -dsx -afr -amC -anu -aon -alH -amC -ard -aon -alH -dsI -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 +ddY +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 @@ -120210,195 +111315,195 @@ acH acH abW abW -afr -dsj -dso -dst -dsx -afr -amD -ann -aoo -alH -amD -ann -aoo -alH -dsJ -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 +ddr +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 @@ -120467,51 +111572,51 @@ acH acH abW abW -afr -dsk -dsp -dsp -dsz -afr -amE -anv -ann -alH -aqh -ann -ann -alH -dsJ -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 +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 @@ -120521,141 +111626,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 @@ -120724,61 +111829,61 @@ acH acH abW abW -afr -dsl -dsj -dsj -ahq -afr -amF -anw -aop -alH -aqi -anw -asb -alH -aiP -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 +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 @@ -120786,76 +111891,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 +ddV +bAu +ddG +ddV +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 @@ -120865,54 +111970,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 @@ -120981,138 +112086,138 @@ acH acH acH abW -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -afr -dsL -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 +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 +ddG +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 @@ -121124,52 +112229,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 @@ -121244,131 +112349,131 @@ abW abW abW abW -agy -agy -agy -agy -agy -agy -agA -agA -aiP -agy -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 +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 +ddG +del +ddV +deC +ddV +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 @@ -121381,52 +112486,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 @@ -121501,131 +112606,131 @@ acH acH acH acH -agy -aig -agy -agz -dsC -agz -aiO -ajI -dsM -agy -adZ -adZ -adZ -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 +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 @@ -121639,51 +112744,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 @@ -121758,45 +112863,45 @@ acH acH acH acH -agy -alL -akD -amG -aiP -agz -dsF -agy -agy -agy -adZ -adZ -adZ -adZ -adZ -azY -aBs -aCi -aDG -aEV -aGy -aHK -aIL -aJP -aJP -aJP -aMQ -aNT -aLm -aPQ -aRt -aSl -cOF -aez -afq -anC -afq -aez -adZ +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 @@ -121806,7 +112911,7 @@ abC abC abC abC -arw +aqV abC abC abC @@ -121815,75 +112920,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 @@ -121898,49 +113003,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 @@ -122002,7 +113107,7 @@ abC abC abC abC -ads +adm abW abW abW @@ -122015,132 +113120,132 @@ acH acH acH acH -agy -alM -amG -anx -dsD -ajI -akC -agz -afS -afS -afS -afV -afV -axD -afS -cJJ -aBt -aCj -aDH -aDI -aGz -aHL -aIK -aJQ -aJQ -cMf -aMR -aNU -aLm -aPX -aRt -aSx -cOF -aez -aez -anC -afq -aez -adZ +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 @@ -122156,48 +113261,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 @@ -122272,132 +113377,132 @@ acH acH acH abW -agy -alN -alN -amG -amG -agA -afR -afR -afV -asX -aue -avg -afS -akp -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 +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 -duE -duE -dvD -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 @@ -122410,51 +113515,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 @@ -122529,132 +113634,132 @@ acH acH acH acH -afR -afR -afR -afR -aiR -ajK -afR +afD +afD +afD +afD +aiz +ajr +afD acH -afV -aym -auf -aym -afS -akp -cYo -cJK -aBt -aCl -aDJ -aDI -aGA -aHL -aIK -aJQ -aJQ -aJQ -aMS -aJR -aOU -aPY -aRA -aSy -cOR +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 -duE -duE -dvD -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 @@ -122666,52 +113771,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 @@ -122794,37 +113899,37 @@ acH abW abW acH -afV -asY -aym -cYZ -akH -axE -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 +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 @@ -122834,7 +113939,7 @@ abC abC abC abC -arw +aqV abC abC abC @@ -122844,131 +113949,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 -duE -duE -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 @@ -123036,100 +114141,100 @@ aaa aaa aaa abW -adZ -adZ -adZ -afV -adZ -adZ -adZ -adZ -adZ -aez -aez -aez -aez -aez -aez -afV -afV -afV -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 -dum -duv -duE -duE -bvv -arw +aqV +cXq +cXs +cXw +cXw +ddm +dds aaa -aYP -aYP +aXo +aXo aaa aaa aaa @@ -123141,91 +114246,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 @@ -123292,50 +114397,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 @@ -123343,20 +114448,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 @@ -123364,12 +114469,12 @@ aaa aaa aaa aaa -aZc -aYP -aYP -aYP -aYP -aYP +aXB +aXo +aXo +aXo +aXo +aXo aaa aaa aaa @@ -123377,13 +114482,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -123392,97 +114497,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 @@ -123549,49 +114654,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 @@ -123600,20 +114705,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 @@ -123623,10 +114728,10 @@ aaa aaa abC aaa -aYP -aYP -aYP -aYP +aXo +aXo +aXo +aXo aaa aaa aaa @@ -123634,112 +114739,112 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -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 @@ -123806,49 +114911,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 @@ -123862,7 +114967,7 @@ abC abC abC abC -arw +aqV abC abC abC @@ -123891,13 +114996,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -123906,7 +115011,7 @@ aaa aaa abC aaa -aaa +cGc aaa aaa aaa @@ -123924,79 +115029,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 @@ -124063,71 +115168,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 @@ -124148,13 +115253,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -124181,79 +115286,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 @@ -124320,71 +115425,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 @@ -124405,13 +115510,13 @@ abC aaa aaa aaa -arw -dum -duv -duE -dvl -bvv -arw +aqV +cXq +cXs +cXw +cXx +btm +aqV aaa aaa aaa @@ -124438,12 +115543,12 @@ abC aaa aaa abC -arw +aqV abC -aYP -aYP -aYP -bjB +aXo +aXo +aXo +bhP aaa aaa aaa @@ -124453,64 +115558,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 @@ -124578,70 +115683,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 @@ -124662,13 +115767,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -124677,7 +115782,7 @@ aad aaa abC aaa -aaa +aag aaa aad aac @@ -124695,7 +115800,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -124710,64 +115815,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 @@ -124836,68 +115941,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 @@ -124919,13 +116024,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -124952,7 +116057,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -124967,64 +116072,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 @@ -125092,56 +116197,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 @@ -125153,7 +116258,7 @@ aaa aaa abC aaa -aXn +aVO aaa aaa aaa @@ -125176,13 +116281,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -125209,7 +116314,7 @@ abC aaa aaa abC -arw +aqV abC aaa aag @@ -125224,64 +116329,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 @@ -125349,58 +116454,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 @@ -125408,8 +116513,8 @@ abC aaa aaa aaa -aXn -aXn +aVO +aVO aaa aaa aaa @@ -125433,13 +116538,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aac @@ -125466,7 +116571,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -125481,64 +116586,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 @@ -125606,51 +116711,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 @@ -125659,11 +116764,11 @@ aaa aaa aaa aaa -aXn -aXn -aXn -aXn -aXn +aVO +aVO +aVO +aVO +aVO aaa aaa aaa @@ -125690,13 +116795,13 @@ abC aaa aaa aaa -arw -dum -dux -duE -duE -bvv -arw +aqV +cXq +cXt +cXw +cXw +btm +aqV aaa aaa aaa @@ -125723,7 +116828,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -125738,64 +116843,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 @@ -125863,51 +116968,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 @@ -125947,13 +117052,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -125980,7 +117085,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -125995,64 +117100,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 @@ -126120,51 +117225,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 @@ -126204,13 +117309,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -126223,9 +117328,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +deP +abC +abC abC aaa aaa @@ -126237,7 +117342,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -126252,64 +117357,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 @@ -126377,51 +117482,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 @@ -126461,13 +117566,13 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -duE -dvF -arw +aqV +bnO +cJw +cXw +cXw +cXI +aqV aaa aaa aaa @@ -126479,14 +117584,14 @@ aaa aaa aaa aaa -aZt -aZt -aZt -aZf -aZI -aZf -aZf -aZf +aXS +deQ +aXS +aXE +aYh +aXE +aXE +aXE aaa aaa aaa @@ -126494,7 +117599,7 @@ abC aaa aaa abC -arw +aqV abC aaa aaa @@ -126509,64 +117614,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 @@ -126634,46 +117739,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 @@ -126718,13 +117823,13 @@ abC aaa aaa aaa -arw -dum -dux -duE -dvm -bvv -arw +aqV +cXq +cXt +cXw +cXy +btm +aqV aaa aaa aaa @@ -126734,24 +117839,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 +deR +aXS +aXS +aXS +aXE +aXE +aXE +aXE +aXE +aXE +aYh +aXS +aXS +aXE +aXE abC aaa aaa @@ -126766,63 +117871,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 @@ -126891,46 +117996,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 @@ -126968,50 +118073,50 @@ aaa aaa aaa aaa -cKF +cGc aaa aaa abC aaa aaa aaa -arw -bpN -cRM -duE -dvn -dvF -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 +deS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXE +aXE +aXE +aXS +aXS +aXS aaa aaa aaa @@ -127023,63 +118128,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 @@ -127148,193 +118253,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 -duE -dvn -dvF -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 +deT +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 @@ -127405,57 +118510,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 @@ -127489,45 +118594,45 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -dvn -dvF -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 +deU +bxK +bxK +bwA +cHu +bwA +bzs +aYg +aYg +aXS +aXS +aXS +aXS +bwA +bXe +bwA +aXS +aXS +aXS +aXS aaa aaa aaa @@ -127537,6 +118642,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 @@ -127547,77 +118708,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 @@ -127662,57 +118767,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 @@ -127746,125 +118851,110 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -dvn -dvF -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 -csz -dyJ -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 +deV +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 @@ -127875,6 +118965,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -127920,56 +119025,56 @@ 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 +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 +aTF +aUc +aUC +aVa +aVo +aVa +aVQ +aWi +aWx +aSO abC aaa aaa @@ -128003,125 +119108,110 @@ abC aaa aaa aaa -arw -dum -duv -duE -dvq -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 -aaa -aaa -aaa -aaa -aaa -aad -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 +aqV +cXq +cXs +cXw +cXA +btm +aqV aaa aaa +aXE +aXS +bxK +bwA +bCI +bwy +cQI +bwA +cHu +cHu +deW +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 @@ -128132,6 +119222,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -128176,57 +119281,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 @@ -128260,48 +119365,48 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -dvn -dvF -arw +aqV +bnO +cJw +cXw +cXz +cXI +aqV aaa aaa -aZt -bAd -bAd -byQ -bEj -dpl -dpl -dpn -dpo -dpp -dpq -dpr -dpr -dpr -dpu -dpr -dpr -dpu -dpr -dpr -dpr -dpr -dpu -dpu -caf -bBN -bBN -aZt -aZt -aZt -aZt -aZt -aZt +aXS +bxK +bxK +bwy +bBI +cUT +cUT +cUU +cUV +cUW +deX +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 @@ -128321,49 +119426,49 @@ aaa aaa aaa aaa -cgN -ciO -cjp -cjN -ckv -ciO -cgR -cgN -cmY -cnG -cnG -cmY -cpO -cmY -cjF -cjG -dyK -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 @@ -128374,21 +119479,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 @@ -128433,57 +119538,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 @@ -128517,48 +119622,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 +bDZ +bDV +bxK +cHu +bwA +bxK +cRH +cRK cRM -duE -dvn -dvF -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 @@ -128578,48 +119683,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 -dyK -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 @@ -128631,21 +119736,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 @@ -128690,57 +119795,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 @@ -128774,48 +119879,48 @@ abC aaa aaa aaa -arw -bpN -cRM -duE -dvn -dvF -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 +deY +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 @@ -128836,47 +119941,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 @@ -128888,21 +119993,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 @@ -128947,46 +120052,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 @@ -129021,59 +120126,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 -duE -dvn -dvF -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 -dpJ -dpL -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 +deZ +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 @@ -129093,47 +120198,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 @@ -129145,21 +120250,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 @@ -129204,51 +120309,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 @@ -129275,66 +120380,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 -dum -duv -duE -dvn -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 +dfa +bLU +bNt +bOs +bNt +bLU +bRF +bSF +bRF +bLU +bUH +bVr +bUH +bLU +bwA +cQe +cVb +cVd +bwA bYq -bXG -bOM -byS -dfU -dpJ -dpL -byS -cbr -dgD -cdB -bLA -cdB -aZf -arw -arw -arw +cQv +caz +bIO +caz +aXE +aqV +aqV +aqV abC abC abC @@ -129346,51 +120451,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 -dwX -dwX -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 @@ -129402,21 +120507,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 @@ -129467,40 +120572,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 @@ -129529,66 +120634,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 -duE -dvn -dvF -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 -dpp -dpq -dpL -cMH -cMH -byS -aZI +aqV +bnO +cJw +cXw +cXz +cXI +aqV +aXE +aXS +aYg +bxK +cHu +bwy +bBJ +bDV +bFb +bFb +bIn +bJL +dfb +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 @@ -129606,48 +120711,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 -dwX -dwX -cUy -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 @@ -129659,21 +120764,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 @@ -129725,39 +120830,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 @@ -129784,68 +120889,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 -duE -dvn -dvF -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 +bDZ +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 @@ -129864,43 +120969,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 -dwX -dwX -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 @@ -129916,21 +121021,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 @@ -129983,38 +121088,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 @@ -130040,69 +121145,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 -duE -dvn -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 -dqb -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 +cQB +bxK +bDV +bFc +bGN +bGO +deM +dfc +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 @@ -130124,38 +121229,38 @@ aaa aaa aaa aaa -cgN -cgN -cgN -cgN -cgN +cdI +cdI +cdI +cdI +cdI aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -130173,21 +121278,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 @@ -130240,38 +121345,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 @@ -130297,69 +121402,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 -dqb -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 +cUQ +bCJ +bDW +bFd +bGP +bGP +bGP +bKF +dfd +dfe +dfh +bPC +dfk +dfn +dfs +dfy +dfF +dfQ +dfV +bWf +bUK +bDV +cHw +bYq +cQv +cHA +cQT +cVj +cSc +bwA +aYg +aXS +aXS +aXS aaa aaa aaa @@ -130387,47 +121494,30 @@ aaa aaa aaa aaa +aqV +cXX +cXZ +cXY +cYd +cXX aaa aaa -arw -dwO -dxb -dwX -dyM -dwO -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 @@ -130445,6 +121535,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -130497,38 +121602,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 @@ -130554,69 +121659,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 -dvr -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 -dqb -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 +cUR +bCK +bDX +bFe +bGQ +bGQ +deN +bKG +bLX +bNy +bOv +bPD +bTY +bNy +bNy +bTu +bTY +bUL +bVt +bWg +dge +bDV +cHx +cHz +bYq +cHu +bxK +cVj +cSd +cRU +aYg +aXS +aXS +aXS aaa aaa aaa @@ -130644,46 +121751,29 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -arw -cqC -dwX -dwX -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 @@ -130702,6 +121792,21 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -130753,44 +121858,44 @@ 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 +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 +aSe abE abE abE abE -akG +akm abC abC abC @@ -130810,71 +121915,73 @@ 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 -dvr -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 -dqb -bAe -cMH -aZH -aZt -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 +bBJ +bCL +bDZ +bFf +bGO +bGO +bJM +bKH +bQM +dff +bOw +bPF +bQH +bQH +bQH +bTv +bQH +bVK +bVu +bWh +bUK +bLU +bLU +bLU +bLU +bLU +bwA +cVj +bxL +cHu +aYg +aXS +aXS +aXS +aXS aaa aaa aaa @@ -130901,17 +122008,15 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -arw -cqC -dwX -dwX -cUy -cuk -aaa -aaa -aXR +aWs aaa aaa aaa @@ -131010,39 +122115,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 @@ -131067,73 +122172,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 -dqb -dqr -dqr -dqs -dqs -dqr -dqr -aaa +byu +aYK +bAC +bBJ +bxK +bDZ +bFg +bGR +bIp +bJN +bGO +bGO +bGO +bOx +dfi +dfl +dfo +dft +dfz +dfG +bUN +bVu +bWi +bWG +bXg +bXz +bYh +bYh +bLU +cQj +cVj +cVo +cVo +cVp +cVp +cVo +cVo +aXS aaa aaa aaa @@ -131160,21 +122265,15 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -cUy -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa aaa aaa @@ -131191,6 +122290,12 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131267,39 +122372,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 @@ -131324,72 +122429,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 -dqb -dqs -dqK -dqS -dra -dri -dqr +baO +bli +baO +cJn +boX +aZn +brT +aYK +buO +baO +baO +byv +bzt +bAD +bBJ +bwA +bDZ +bFh +deK +bIq +bJN +bKJ +bGO +bGO +bGO +bNA +bGO +bQI +dfu +bPH +dfH +bUO +bVu +bWj +bWH +bOu +bXA +bYi +bYO +bLU +cQe +cVj +cVp +cVu +cVA +cVF +cVL +cVo aaa aaa aaa @@ -131417,15 +122522,15 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -cUy -cuk +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa -aXR +aWs aaa aaa aaa @@ -131442,12 +122547,12 @@ aaa aaa aaa aaa -aaa -aac -aad -aad -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131524,39 +122629,39 @@ 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 +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 +aSe abE abE abE @@ -131580,79 +122685,79 @@ 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 +aXC +aYb +aXQ +aYp +aZj +aYp +aYp +aYb +aYF +baJ +baJ +bdq +bee +beU +bfW +aXD +aXS +aYK baO -dvr -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 -dqb -dqr -dqL -dqL -drb -drj -drr -drx -drD -drD -drD -drD -drZ +baO +bli +bbw +cJm +aZm +aZn +cXB +aYK +buN +baO +baO +byv +bzt +bAE +bBK +cHu +bDZ +bFi +deL +bIr +deO +bKK +bLZ +bNB +bOz +bGO +bGO +dfp +dfv +bQJ +dfI +bUO +bUP +bWk +bWI +bXh +bXB +bYh +bYh +bLU +bYq +cVj +cVo +cVv +cVv +cVG +cVM +cVR +cVW +cWa +cWa +cWa +cWa +cWj aaa aaa aaa @@ -131674,15 +122779,15 @@ aaa aaa aaa aaa -arw -dwO -dxg -dwX -ctA -dwO +aqV +cXX +cYa +cXY +cpH +cXX abC abC -aXR +aWs aaa aaa aaa @@ -131696,16 +122801,16 @@ aaa aaa aaa aaa -aaa -aaa -aad -aaa -aad -aac -aac -aab -aaa -aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -131781,39 +122886,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 @@ -131837,79 +122942,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 -drs -drs -drK -drO -arw -arw +baO +bli +baN +cJm +aZm +aZn +brU +bto +buP +baO +cPN +baN +aYK +bAF +bwj +bwj +bDZ +bFj +bGS +bIs +bDZ +bDV +bDV +dfg +bOA +bGO +bGO +bQK +dfw +bQJ +dfJ +dfR +bVy +dfX +bWJ +bLU +bLU +bLU +bLU +bLU +cRP +cVk +cVq +cVw +cVB +cVH +cVN +cVS +cVS +cVS +cWc +cWg +aqV +aqV aaa aaa aaa @@ -131931,38 +123036,38 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -132037,40 +123142,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 @@ -132094,79 +123199,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 -dqr -dqN -dqV -drd -drl -drt -drz -drt -drL -drO -drO -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 +bJP +bKL +bMa +bDV +bOB +bGO +bGO +bRI +bSI +bQJ +dfK +bUO +bUQ +bWl +bWG +bXg +bXC +bYj +bYj +bLU +bYq +cVl +cVo +cVx +cVC +cVI +cVO +cVT +cVX +cVT +cWd +cWg +cWg +cWk aaa aaa aaa @@ -132188,38 +123293,38 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -132294,40 +123399,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 @@ -132350,80 +123455,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 -dqk -dqs -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 +bGO +bGO +bQI +bSJ +dfA +cHs +bQI +bUQ +dfY +bWH +bOu +bXD +bYk +bYP +bLU +bYq +cVl +cVp +cVy +cVD +cVJ +cVP +cVU +cVY +cWb +cWe +cWh +cWi +cWl aaa aaa aaa @@ -132445,38 +123550,38 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -132551,40 +123656,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 @@ -132607,80 +123712,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 -dqs -dqP -dqX -drf -drn -drv -drB -drv -drN -drO -drO -dsa +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 +dfj +bGO +dfq +bOy +dfB +dfL +dfS +bUP +dfZ +bWI +bXh +bXE +bYj +bYj +bLU +bYq +cVm +cVp +cVz +cVE +cVK +cVQ +cVV +cVZ +cVV +cWf +cWg +cWg +cWk aaa aaa aaa @@ -132702,38 +123807,38 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -132808,40 +123913,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 @@ -132864,80 +123969,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 -dqk -dqr -dqr -dqr -dqs -dqr -drs -drs -drs -drO -drO -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 +bGO +bPL +bQN +dfr +bPK +dfC +bGO +bGO +bUQ +bWh +bWK +bLU +bLU +bLU +bLU +bLU +bYq +cVl +cVo +cVo +cVo +cVp +cVo +cVS +cVS +cVS +cWg +cWg +aqV +aqV aaa aaa aaa @@ -132959,38 +124064,38 @@ aaa aaa aaa aaa -arw -dwO -dxb -dwX -cUy -dwO -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 @@ -133067,38 +124172,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 @@ -133121,131 +124226,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 -dqk -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 -dwX -dwX -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 +dfx +dfD +bTZ +bGO +bUQ +dga +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 @@ -133264,6 +124321,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 @@ -133324,43 +124429,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 @@ -133378,77 +124483,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 +bTx +bSL +bJN +bGO +bUQ +dgb +bWH +bOu +bXG +bYm +bYQ +bLU +cSa +cVn +cSe +cHu +aYg +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -133473,38 +124578,38 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -133583,36 +124688,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 @@ -133635,74 +124740,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 +dfT +bUR +dgc +bWI +bXh +bXH +bYl +bYl +bLU +bxK +cQC +cVr +bzs +aYg +aXS +aXS +aXS +aXS aaa aaa aaa @@ -133729,30 +124835,29 @@ aaa aaa aaa aaa -aaa -arw -cqC -dwX -dwX -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 @@ -133840,36 +124945,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 @@ -133892,75 +124997,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 +dfM +bUb +bTz +dgd +bWM +bLU +bLU +bLU +bLU +bLU +bYq +cRJ +cVs +bwA +aYg +aXS +aXS +aXS +aXS aaa aaa aaa @@ -133987,29 +125092,29 @@ aaa aaa aaa aaa -arw -dwO -dxg -dwX -dyN -dwO -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 @@ -134097,42 +125202,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 +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 +cIL +aKq +aKq +aKq +aKq +aKq +aKq aaa aaa aaa @@ -134150,73 +125255,73 @@ 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 -dqk -bBN -aZH -aZt -aZt -aZt +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 +dfm +bRO +bQG +bTA +dfN +bUc +bUS +bWm +bWN +bXg +bXI +bYn +bYn +bLU +cSb +bxK +cVl +bzs +aYg +aXS +aXS +aXS aaa aaa aaa @@ -134244,29 +125349,29 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -cUy -cqC -aaa -aaa -aXR -aaa -aaa -aaa -aac -aac -aac -aab -aab -aac -aac -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 @@ -134350,46 +125455,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 @@ -134407,88 +125512,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 -dsN -bUM -bVM -bRs -bXc -bXS -bYG -bJx -bZO -bRp -caK -cbo -cbS -bOM -bAd -byS -dqk -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 +bGO +dfO +bUd +bUT +bVH +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 @@ -134498,28 +125606,29 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cKv +cqp aaa aaa +aWs aaa -arw -cqC -dwX -dwX -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 @@ -134539,11 +125648,7 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -cJh +cEY aaa aaa aaa @@ -134611,44 +125716,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 @@ -134665,87 +125770,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 -dsO -bUN -bJx -bTH -bXd -bSF -bYH -bSF -bZP -cah -caL -cbo -cbo -bOM -bAd -cMH -dqk -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 +bQL +bPJ +bUe +bPJ +bPJ +bVI +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 @@ -134758,29 +125863,29 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -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 @@ -134869,140 +125974,141 @@ 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 +aKq +aPl +aQk +aQS +cIL +aSU +aTJ +aTJ +aUG 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 +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 -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 -dsP -bUO -bVN -bWA -bXe -bJx -bYI -bTD -bZQ -bOM -bOM -bOM -bOM -bOM -bAd -bAd -dqk -bBN -aZH -aZH -aZH +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 +dfU +bGO +bVJ +bWQ +bLU +bLU +bLU +bLU +bLU +bxK +bxK +cVl +bzs +aYg +aYg +aYg aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cZo +cZu +cZm +cZm +cZm +cZJ +cZs +cZs +cZJ +cZm +cZm +cZm +cGc +cGc aaa aaa aaa @@ -135014,30 +126120,29 @@ aaa aaa aaa aaa -aaa -arw -dwO -dxb -dwX -ctB -dwO +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 @@ -135125,188 +126230,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 -dta -aXX -aXX -aXX -dta -aXX -aXX -dta -aXX -aXX -aXX -dta -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 -dqk -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 -dwX -dBG -dyO -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aKq +aPm +aQk +aQS +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 +dfW +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 @@ -135372,9 +126477,9 @@ aaa aaa aaa aaa -afV -agR -afV +afH +agD +afH aaa aaa aaa @@ -135383,171 +126488,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 -dsW -dsW -dsW -dBh -dsW -dsW -dsW -dBi -dsW -dsW -dBi -dsW -dsW -dsW -dBh -dsW -dsW -dsW -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 -dqk -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 -dwX -dwX -dyO -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 +dfE +dfP +bTD +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 @@ -135564,6 +126656,19 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -135629,185 +126734,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 -dpA -dpA -dpA -dpA -dpK -dpA -dpA -dpU -djw -byP -byP -dqk -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 -dwX -dwX -dyO -cqC -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 @@ -135821,6 +126913,19 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -135886,198 +126991,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 -dsW -dsW -dsW -dsW -dsW -dsW -dsW -dtl -dsW -dsW -dBl -dBm -dBm -dBm -dBm -dBm -dBm -dBm -dBv -cQA -dBw -dBw -bcq -dBw -dBz -bek +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 -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 -dpX -dpX -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 -dwO -dxg -dwX -dyO -dwO +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 @@ -136143,198 +127248,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 -dtb -aXY -aXY -aXY -dtb -aXY -aXY -dtb -aXY -aXY -aXY -dtb -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 -dwX -dwX -dyO -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aaa -aaa -aaa -aaa +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 +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 @@ -136400,198 +127505,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 +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 +aKq +aSY +aTK +aUg +aUJ 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 -dwX -dwX -dyO -cuk -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +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 @@ -136657,174 +127762,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 -dwX -dwX -dyO -cuk -aaa -aaa -aXR -aaa -aaa +aKq +aKq +aKq aaa aaa aaa @@ -136843,12 +127828,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 @@ -136914,198 +128019,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 -dwO -dxb -dwX -dyV -dwO -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 @@ -137174,49 +128279,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 @@ -137235,134 +128340,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 -dwX -dwX -dyO -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 @@ -137431,49 +128536,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 @@ -137494,132 +128599,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 -dwX -dwX -dyO -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 @@ -137688,43 +128793,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 @@ -137751,132 +128856,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 -dwX -dwX -dyO -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 @@ -137946,11 +129051,11 @@ aaa aaa aaa abC -afV -agQ -afV +afH +agC +afH abC -akG +akm abW abW abW @@ -137960,28 +129065,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 @@ -138006,134 +129111,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 -dwX -dwX -dyO -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 @@ -138221,24 +129326,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 @@ -138263,79 +129368,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 @@ -138354,43 +129461,41 @@ aaa aaa aaa aaa +aqV +cXX +cYa +cXY +cYf +cXX aaa aaa -arw -dwO -dxg -dwX -dyO -dwO -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 @@ -138478,31 +129583,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 @@ -138520,81 +129625,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 @@ -138613,34 +129718,12 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -dyO -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 @@ -138648,6 +129731,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 @@ -138733,26 +129838,26 @@ 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 +aKq +aKq +aKq +aNj +aKq +aPw +aQk +aQS +aKq acH acH acH @@ -138777,79 +129882,81 @@ 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 +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 -bDy -bEC -bFK -bGY -bIp -bJX -bLw -bMP +bDe +bEp +bFG +bHn +bIK +bKb +bKW +bMu +bHp +bOS +bQb +bRa +bSe bNN -bPm -bJZ -bRN -bSX -bTX -bVb -bQH -bAd -bAd -bAd -cMH -byQ -byP -djl -bZS -cMH -cMH -bZS -aZH -aZH -aZH -aZt +bxK +bxK +bxK +cHu +bwy +bwx +cRU +bWS +cHu +cHu +bWS +aYg +aYg +aYg +aXS aaa aaa aaa aaa -aac -aac -aac -aac -aac -aac -aac +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -138868,33 +129975,31 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa -arw -cqC -dwX -dwX -dyO -cuk -aaa -aaa -aXR -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 aaa aaa aaa @@ -138990,29 +130095,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 @@ -139034,79 +130139,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 @@ -139125,17 +130232,15 @@ aaa aaa aaa aaa -aaa -aaa -arw -cqC -dwX -dwX -dyO -cuk +aqV +cmQ +cXY +cXY +cYf +cqp abC abC -aXR +aWs aaa aaa aaa @@ -139247,29 +130352,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 @@ -139291,77 +130396,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 @@ -139380,22 +130489,15 @@ aaa aaa aaa aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa aaa -aaa -aaa -arw -cqC -dwX -dwX -dyO -cuk -aaa -aaa -aXR -aaa -aaa -aaa +aWs aaa aaa aaa @@ -139403,6 +130505,9 @@ aaa aaa aaa aaa +cyv +cAa +cyv aaa aaa aaa @@ -139502,31 +130607,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 @@ -139548,77 +130653,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 @@ -139637,30 +130746,26 @@ aaa aaa aaa aaa +aqV +cXX +cXZ +cXY +cYh +cXX aaa aaa -aaa -aaa -arw -dwO -dxb -dwX -dza -dwO -aaa -aaa -aXR -aaa -aaa -aaa -aaa -aaa +aWs aaa aaa aaa aaa aaa aaa +cyv +czn +czo +czn +cyv aaa aaa aaa @@ -139761,10 +130866,10 @@ aaa aaa abC aaa -afV -ajo -ajo -afV +afH +aiW +aiW +afH abW abW abW @@ -139772,18 +130877,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 @@ -139795,6 +130900,7 @@ aaa aaa aaa aaa +aag aaa aaa aaa @@ -139804,78 +130910,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 -dvu -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 @@ -139898,26 +131003,26 @@ aaa aaa aaa aaa -arw -cqC -dwX -dwX -dyO -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 @@ -140029,18 +131134,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 @@ -140062,119 +131167,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 -dwX -dwX -dyO -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 @@ -140286,18 +131391,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 @@ -140319,112 +131424,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 -dwX -dwX -dyO -cuk -aaa -aXR -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa +aWs aaa aaa aaa @@ -140432,6 +131532,11 @@ aaa aaa aaa aaa +cyx +czq +czo +cAK +cyx aaa aaa aaa @@ -140488,36 +131593,36 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +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 @@ -140532,8 +131637,8 @@ aaa aaa abC aaa -cKF -cKF +cGc +cGc aaa aaa aaa @@ -140545,15 +131650,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 @@ -140576,112 +131681,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 -dvu -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 -dwX -dwX -dyO -cuk -aaa -aXR -aaa -aaa -aaa -aaa +aqV +cmQ +cXY +cXY +cYf +cqp aaa +aWs aaa aaa aaa @@ -140689,6 +131789,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -140765,23 +131870,23 @@ aaa aaf aaf aaf -aeh -aeh -aeh -aeh -aeh -aeh +adX +adX +adX +adX +adX +adX aaa aaa -ahT -ajS -ahT -cKF -cKF -cKF -cKF -cKF -cKF +ahF +ajz +ahF +cGc +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -140789,9 +131894,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa abW @@ -140802,15 +131907,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 @@ -140833,65 +131938,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 -dvu -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 @@ -140913,8 +132018,8 @@ aaa aaa aaa abC -aYG -cio +aXh +ceT aaa aaa aaa @@ -140926,18 +132031,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 @@ -140946,6 +132046,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -141019,20 +132124,20 @@ aaa aaa aaf aaf -adg -adg -adg -adg -adg +add +add +add +add +add aaf aaf aaf -adg -adg -adg -adg -ajT -ahT +add +add +add +add +ajA +ahF aaa aaa aaa @@ -141046,13 +132151,13 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa abW -akG +akm abW abW abW @@ -141060,13 +132165,13 @@ abW abW abW aaa -aOu -aPm -ary -ary -ary -aTC -aUB +aNn +aOd +aqW +aqW +aqW +aSi +aTf aaa aaa aaa @@ -141090,64 +132195,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 @@ -141170,31 +132275,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 @@ -141203,6 +132303,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -141276,19 +132381,19 @@ aaf aaf aaf aaf -adg -adt -adt -adt -adg -adg -adg -adg -adg -adt -adt -adt -ajT +add +adn +adn +adn +add +add +add +add +add +adn +adn +adn +ajA aae aaa aaa @@ -141303,9 +132408,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -141317,13 +132422,13 @@ abW abW abW aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -141348,63 +132453,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 -dvx -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 @@ -141426,33 +132531,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 @@ -141460,6 +132560,11 @@ aaa aaa aaa aaa +cyy +czq +czo +cAK +cyy aaa aaa aaa @@ -141533,19 +132638,19 @@ aae aae aae aae -adg -adt -adN -aei -aeH -adt -afz -adt -agV -ahJ -aip -adt -ajU +add +adn +adD +adY +aew +adn +afl +adn +agH +ahv +ahY +adn +ajB aae aae aaa @@ -141560,9 +132665,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -141574,13 +132679,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -141605,63 +132710,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 -dvx -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 @@ -141683,33 +132788,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 @@ -141717,6 +132817,11 @@ aaa aaa aaa aaa +cyw +czr +czo +cAL +cyw aaa aaa aaa @@ -141790,19 +132895,19 @@ aae aae aae aae -adg -adt -adO -aej -aeI -afd -afA -afd -agW -ahK -aiq -adt -ajT +add +adn +adE +adZ +aex +aeP +afm +aeP +agI +ahw +ahZ +adn +ajA aae aaf aaa @@ -141817,9 +132922,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -141831,13 +132936,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -141866,59 +132971,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 -dvx -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 @@ -141938,35 +133043,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 @@ -141974,6 +133074,11 @@ aaa aaa aaa aaa +cyw +czq +czo +cAK +cyw aaa aaa aaa @@ -142047,19 +133152,19 @@ aae aae aae aae -adg -adu -adt -adt -adt -adt -afB -afX -adt -adt -adt -aje -ajT +add +ado +adn +adn +adn +adn +afn +afJ +adn +adn +adn +aiM +ajA aaf aaf aaf @@ -142074,9 +133179,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -142088,13 +133193,13 @@ aaa aaa aaa aaa -arw -dAj -dAA -ary -dAU -dBa -arw +aqV +cYs +cYx +aqW +cYF +cYH +aqV aaa aaa aaa @@ -142123,57 +133228,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 -dus -duB -cSC -dvA -dwa -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 @@ -142194,43 +133299,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 @@ -142304,19 +133409,19 @@ aae aae aae aae -adg -adv -adP -aek -aeJ -afe -afC -afd -afd -ahL -air -ajf -ajT +add +adp +adF +aea +aey +aeQ +afo +aeP +aeP +ahx +aia +aiN +ajA aaf aaf aaf @@ -142331,9 +133436,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -142345,13 +133450,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -142380,56 +133485,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 -dvx -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 @@ -142450,43 +133555,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 @@ -142561,19 +133666,19 @@ aaf aaf aaf aaf -adg -adg -adQ -ael -aeK -adS -afD -adS -adt -ahM -ais -adg -ajT +add +add +adG +aeb +aez +adI +afp +adI +adn +ahy +aib +add +ajA aae aaf aae @@ -142588,9 +133693,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -142601,14 +133706,14 @@ aaa aaa aaa aaa -cKF -arw -aPn -ary -ary -ary -aTD -arw +cGc +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -142652,13 +133757,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -dvx -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa aaa aaa @@ -142669,24 +133774,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 @@ -142704,52 +133809,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 @@ -142819,18 +133924,18 @@ aal aaf aaf aaf -adg -adR -aem -aeL -adS -afE -adS -adt -adt -adt -adg -ajV +add +adH +aec +aeA +adI +afq +adI +adn +adn +adn +add +ajC aae aae aae @@ -142845,9 +133950,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -142859,13 +133964,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -142909,13 +134014,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -dvx -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa aaa aaa @@ -142926,24 +134031,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 @@ -142961,52 +134066,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 @@ -143076,18 +134181,18 @@ aal aal aaf aaf -adw -adS -adS -adS -adS -afF -adS -adS -adS -adS -adw -ajV +adq +adI +adI +adI +adI +afr +adI +adI +adI +adI +adq +ajC aae aae aae @@ -143102,9 +134207,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -143116,13 +134221,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -143166,13 +134271,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -dvx -bvW -arw +aqV +bnX +aPD +cJC +cXD +btN +aqV aaa aaa aaa @@ -143191,14 +134296,14 @@ aaa aaa aaa abC -aZt -aZt -aZt -aZt -aZt -aZt -aZt -aZt +aXS +aXS +aXS +aXS +aXS +aXS +aXS +aXS aaa aaa aaa @@ -143218,52 +134323,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 @@ -143333,18 +134438,18 @@ aal aal aal aaf -adw -adT -aen -aeM -adS -afG -afY -agX -ahN -ait -adw -ajV +adq +adJ +aed +aeB +adI +afs +afK +agJ +ahz +aic +adq +ajC aae aae aaf @@ -143359,9 +134464,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -143373,13 +134478,13 @@ aaa aaa aaa aaa -arw -dAj -ary -ary -dAV -dBa -arw +aqV +cYs +aqW +aqW +cYG +cYH +aqV aaa aaa aaa @@ -143423,13 +134528,13 @@ aaa aaa abC aaa -arw -dus -duC -cSC -dvB -dwa -arw +aqV +cXr +cXv +cJC +cXF +cXJ +aqV aaa aaa aaa @@ -143473,54 +134578,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 @@ -143586,22 +134691,22 @@ aax aax aax aaw -acL -cJi +acK +cEZ aal aal aal -adU -aeo -aeM -aff -aeM -afZ -agY -aeM -aiu -adw -ajV +adK +aee +aeB +aeR +aeB +afL +agK +aeB +aid +adq +ajC aae aae aaf @@ -143616,9 +134721,9 @@ aaa aaa abC aaa -cKF -cKF -cKF +cGc +cGc +cGc aaa aaa aaa @@ -143630,13 +134735,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -143680,13 +134785,13 @@ aag aaa abC aaa -arw -bpW -aQS -cSC -aQS -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -143730,54 +134835,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 @@ -143837,7 +134942,7 @@ aal aaw aaE aaS -cJk +cFa aaX abN abZ @@ -143853,17 +134958,17 @@ aal aal aal aal -aga -agZ -ahO -aiv -adw -ajW -akI -akI -akI -akI -akI +afM +agL +ahA +aie +adq +ajD +ako +ako +ako +ako +ako aaf aaf aaa @@ -143874,8 +134979,8 @@ aaa abC aaa aaa -cKF -cKF +cGc +cGc aaa aaa aaa @@ -143887,13 +134992,13 @@ aaa aaa aaa aaa -arw -aPn -ary -ary -ary -aTD -arw +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -143937,13 +135042,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aQS -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -143986,55 +135091,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 @@ -144090,7 +135195,7 @@ aae aae aae aal -cJi +cEZ aaw aaF aaT @@ -144101,56 +135206,56 @@ aca aax acv aax -dnz +cUb aal -adh -adx -adh -adh -adh -adh +ade +adr +ade +ade +ade +ade aal -agb -aha -ahP -aiw -adw -ajX -akJ -akJ -akJ -amY -akI -akI -akI -cKF -cKF -cKF -cKF -cKF +afN +agM +ahB +aif +adq +ajE +akp +akp +akp +amD +ako +ako +ako +cGc +cGc +cGc +cGc +cGc abC -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc abC -cKF -cKF -cKF -cKF -cKF -cKF -cKF -arw -aPn -ary -ary -ary -aTD -arw +cGc +cGc +cGc +cGc +cGc +cGc +cGc +aqV +aOe +aqW +aqW +aqW +aSj +aqV aaa aaa aaa @@ -144162,15 +135267,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 @@ -144194,13 +135299,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aQS -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -144243,55 +135348,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 @@ -144360,54 +135465,54 @@ acv aax aau aal -cJi +cEZ aal aal aal aal -cJi +cEZ aal -agc -ahb -aeM -aix -adw -ajY -akK -als -als -amZ -anJ -aoO -apK -baR -aqI -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -aPn -ary -ary -ary -aTD -arw +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 @@ -144416,8 +135521,8 @@ abC abC abC abC -aXn -aXn +aVO +aVO aaa aaa abC @@ -144429,8 +135534,8 @@ aaa abC aaa aaa -aXn -aXn +aVO +aVO abC abC abC @@ -144451,13 +135556,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aQS -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -144498,59 +135603,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 @@ -144615,56 +135720,56 @@ aax aaX acw aax -acP +acO aal aaw -ady -adV +ads +adL aaw -ady +ads aaw aal -agd -ahc -adw -adw -adw -agk -akL -akI -akI -akI -akI -akI -akI -akI -dzo -dzq -dzq -dzq -dzw -dzq -dzq -dzq -dzw -dzq -dzq -dzq -dzw -dzq -dzq -dzq -dzw -dzq -dzq -dzq -dzq -dAl -dAB -ary -dAU -dBa -arw +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 @@ -144672,23 +135777,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 @@ -144708,13 +135813,13 @@ aaa aaa abC aaa -arw -dus -duB -cSC -dvC -dwa -arw +aqV +cXr +cXu +cJC +cXG +cXJ +aqV aaa aaa aaa @@ -144755,59 +135860,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 @@ -144873,79 +135978,79 @@ 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 -dzx -ary -ary -ary -dzG -ary -ary -ary -dzx -ary -ary -ary -dzG -ary -ary -ary -ary -dzx -ary -ary -ary -aTD -arw -cKF +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 -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 @@ -144965,13 +136070,13 @@ aaa aaa abC aaa -arw -bpW -aQS -cSC -aQS -bvW -arw +aqV +bnX +aPD +cJC +aPD +btN +aqV aaa aaa aaa @@ -145012,59 +136117,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 @@ -145128,57 +136233,57 @@ abQ acb aco acy -acK +acJ abm -acS -adj -adz -adj -aep -aeO -adj -acS -agf -ahe -agk -aiz -ajh -agk -akN -alu -amc -anb -amc -amc -apM -aqK -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -dAT -ary -aTD -arw +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 @@ -145186,23 +136291,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 @@ -145222,106 +136327,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 -aQS -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 @@ -145387,55 +136492,55 @@ 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 -ary -ary -ary -ary -arB -ary -ary -ary -ary -ary -ary -ary -dzQ -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -ary -aTD -arw +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 @@ -145443,23 +136548,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 @@ -145479,13 +136584,13 @@ aaa aaa abC aaa -boI -bpX -aQS -cSC -aQS -bvX -bxC +bmO +bnY +aPD +cJC +aPD +btO +bvp aaa aaa aaa @@ -145526,59 +136631,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 @@ -145643,56 +136748,56 @@ aax aaX acA aax -acP +acO aal -adl -adB +adi +adv aaw aaw -adB -adl +adv +adi aal -agh -ahg -agk -agk -agk -agk -akP -akI -akI -akI -akI -akI -akI -akI -dzp -dzp -dzp -dzp -dzy -dzp -dzp -dzp -dzy -dzp -dzp -dzp -dzy -dzp -dzp -dzp -dzy -dzp -dzp -dzp -dzp -aPq -dAC -ary -dAU -dBa -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 @@ -145700,7 +136805,7 @@ aaa aaa aaa aaa -aXn +aVO abC abC abC @@ -145708,7 +136813,7 @@ abC abC abC abC -aYG +aXh abC abC abC @@ -145716,7 +136821,7 @@ abC abC abC abC -aXn +aVO aaa aaa aaa @@ -145736,25 +136841,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 @@ -145784,58 +136889,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 @@ -145909,47 +137014,47 @@ aal aal aal aal -agi -ahh -ahS -aiB -agk -ajZ -akQ -alw -ame -ame -anL -aoP -apN -dzn -aqM -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -arw -dAn -dAD -ary -ary -aTD -arw +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 @@ -145960,20 +137065,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 @@ -145988,38 +137093,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 @@ -146041,58 +137146,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 @@ -146146,7 +137251,7 @@ aae aae aae aal -cJi +cEZ aaw aaF aaT @@ -146159,26 +137264,26 @@ acB aax aaw aal -adh -adh -adh -aeq -adh -adh +ade +ade +ade +aeg +ade +ade aal -agj -ahi -cYe -aiB -agk -ajX -akJ -akJ -akJ -akJ -akI -akI -akI +afV +agU +cLr +aik +afW +ajE +akp +akp +akp +akp +ako +ako +ako abC aaa aaa @@ -146200,13 +137305,13 @@ abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -146214,20 +137319,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 @@ -146240,43 +137345,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 @@ -146298,58 +137403,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 @@ -146407,7 +137512,7 @@ aal aaw aaE aaS -cJk +cFa aaX abS acc @@ -146423,17 +137528,17 @@ aal aal aal aal -agk -agk -agk -agk -agk -ajW -akI -akI -akI -akI -akI +afW +afW +afW +afW +afW +ajD +ako +ako +ako +ako +ako aaf aaa abC @@ -146442,7 +137547,7 @@ aaa aaa aaa aaa -cKF +cGc aaa abC aaa @@ -146452,18 +137557,18 @@ aaa aaa aaa aaa -cKF +cGc abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -146471,23 +137576,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 @@ -146497,43 +137602,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 @@ -146556,57 +137661,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 @@ -146670,8 +137775,8 @@ aax aax aax aaw -acL -cJi +acK +cEZ aal aal aaf @@ -146685,7 +137790,7 @@ aaf aaf aaf aaf -ajV +ajC aaf aaf aaf @@ -146714,13 +137819,13 @@ abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -146728,7 +137833,7 @@ aaa aaa aaa aaa -aXn +aVO abC abC abC @@ -146736,7 +137841,7 @@ abC abC abC abC -aYG +aXh abC abC abC @@ -146744,7 +137849,7 @@ abC abC abC abC -aXn +aVO aaa aaa aaa @@ -146754,41 +137859,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 @@ -146813,55 +137918,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 @@ -146942,7 +138047,7 @@ aaf aaf aaf aaf -ajV +ajC aaf aaf aaf @@ -146971,13 +138076,13 @@ abC aaa aaa aaa -arw -dAr -dAH -ary -dAV -dBa -arw +aqV +cYv +cYB +aqW +cYG +cYH +aqV aaa aaa aaa @@ -146985,23 +138090,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 @@ -147010,42 +138115,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 @@ -147070,55 +138175,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 @@ -147199,7 +138304,7 @@ aaf aaf aaf aaf -ajV +ajC aaf aaf aaf @@ -147227,14 +138332,14 @@ aaa abC aaa aaa -cKF -arw -dAn -dAD -ary -ary -aTD -arw +cGc +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -147242,23 +138347,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 @@ -147266,43 +138371,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 @@ -147328,54 +138433,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 @@ -147456,7 +138561,7 @@ aae aae aae aaf -ajV +ajC aaf aae aae @@ -147474,24 +138579,24 @@ aaa aaa abC aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -147499,23 +138604,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 @@ -147523,44 +138628,44 @@ 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 @@ -147584,55 +138689,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 @@ -147713,7 +138818,7 @@ aae aae aae aaf -ajV +ajC aaf aae aae @@ -147742,13 +138847,13 @@ abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -147756,7 +138861,7 @@ aaa aaa aaa aaa -aXn +aVO abC abC abC @@ -147764,7 +138869,7 @@ abC abC abC abC -aYG +aXh abC abC abC @@ -147772,124 +138877,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 @@ -147970,7 +139075,7 @@ aae aae aae aaf -ajV +ajC aaf aaf aaa @@ -147999,13 +139104,13 @@ abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa @@ -148013,140 +139118,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 -dwp -bZn -bZn -bZn -bZn -dwp -bZn -bZn -bZn -bZn -dwp -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 @@ -148226,9 +139331,9 @@ aae aaf aaf aaf -ahT -aka -ahT +ahF +ajH +ahF aaf aaa aaa @@ -148256,154 +139361,154 @@ abC aaa aaa aaa -arw -dAr -dAD -ary -dAU -dBa -arw +aqV +cYv +cYA +aqW +cYF +cYH +aqV aaa aaa -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc aaa 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 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 -dwd -dwd -dwd -dwd -dwq -dwd -dwd -dwd -dwd -dwx -dwd -dwd -dwd -dwd -dwq -dwd -dwd -dwd -dwd -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 +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 -cqD -cqD -cqD -cqD +cmR +cmR +cmR +cmR aaa aaa aaa aaa -cqD -cqD -cqD -cqD +cmR +cmR +cmR +cmR aaa aaa aaa @@ -148483,9 +139588,9 @@ aae aaf aaf aaf -ahT -akb -ahT +ahF +ajI +ahF aaa aaa aaa @@ -148493,15 +139598,15 @@ aaa aaa aaa abC -cKF -cKF -cKF -cKF -cKF -cKF -cKF +cGc +cGc +cGc +cGc +cGc +cGc +cGc abC -cKF +cGc aaa aaa aaa @@ -148513,138 +139618,138 @@ abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa aaa -alx -alx -alx +alc +alc +alc aaa 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 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 -dwd -dwd -dwd -dwd -dwd -dwd -dwd -dwd -dwd -dBA -dwd -dwd -dwd -dwd -dwd -dwd -dwd -dwd -dwd -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 +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 @@ -148739,22 +139844,22 @@ aae aae aaf aaf -dzk -dzk -dzk +cYi +cYi +cYi abC aaa aaa aaa aaa aaa -alx -alF -alx -alx -alx -alx -alx +alc +alk +alc +alc +alc +alc +alc aaa aaa abC @@ -148770,29 +139875,29 @@ abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa -alx -alx -alx -alx -cKF -cKF -cKF -cKF -cKF -cKF -cKF +alc +alc +alc +alc +cGc +cGc +cGc +cGc +cGc +cGc +cGc abC -aYG +aXh abC abC abC @@ -148805,119 +139910,119 @@ 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 -dwd -dwd -dwd -dwd -dws -dwd -dwd -dwd -dwd -dwy -dwA -dwA -dwA -dwA -dwF -dwA -dwA -dwA -dwA -dwH -dwI -dwI -dwI -cgA -cgJ -dwI -dwM -dwN -chu -bkA -bkA -bkA -bkA -cjv -bkA -bkA -bkA -bkA -cmz -cnf -cnS -bkA -cpr -cqh -cqX -cqh -cqh -cqh -cuB -cvI -cwB -cqD +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 -cqD -cqD -cqD -cqD +cmR +cmR +cmR +cmR aaa aaa aaa @@ -149004,43 +140109,43 @@ aaa aaa aaa aaa -alx -alx -alx -alx -alx -and -and -alx -alx -alx +alc +alc +alc +alc +alc +amI +amI +alc +alc +alc abC aaa aaa -alx -alx -alx -alx -alx +alc +alc +alc +alc +alc aaa abC aaa aaa aaa -arw -dAn -dAD -ary -ary -aTD -arw +aqV +cYu +cYA +aqW +aqW +aSj +aqV aaa aaa aaa -alx -alx -alx -alF +alc +alc +alc +alk abC abC abC @@ -149049,7 +140154,7 @@ abC abC abC abC -aYG +aXh abC aaa aaa @@ -149062,119 +140167,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 -dwt -bZo -bZo -bZo -bZo -dwt -bZo -bZo -bZo -bZo -dwt -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 @@ -149261,52 +140366,52 @@ abC aaa aaa aaa -alx -alx -and -alx -and -and -and -alx -alx -and -alF -alx -and -and -alx -alx -alx -alx +alc +alc +amI +alc +amI +amI +amI +alc +alc +amI +alk +alc +amI +amI +alc +alc +alc +alc aaa abC -cKF -cKF -cKF -aOv -dAz -dAD -ary -ary -dBg -aUC -cKF -cKF -akR -alx -alx -alx -alx -cKF -cKF -cKF -cKF -cKF +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 @@ -149319,119 +140424,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 @@ -149516,54 +140621,54 @@ 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 +alk +alc +alc +amI +amI +afH +afH +afE +aep +afH +adP +aep +afH +afH +aep +aep +alc +amI +amI +alc +alc aaa aaa aaa -aKo -aOw -aKo -aQW -aRP -aSR -aLm -aUD -aLm -akR -akR -alx -alx -alx -alx -alx -alx +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 @@ -149576,47 +140681,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 @@ -149641,54 +140746,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 @@ -149773,54 +140878,54 @@ abC aaa 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 -dAQ -aRD -aSS -aLm -aUE -aLm -alx -alx -alx -and -and -alx -alx -alx +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 -aYG +aXh abC aaa aaa @@ -149833,47 +140938,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 @@ -149897,55 +141002,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 @@ -150028,56 +141133,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 -dAQ -aRD -aST -aLm -aUF -aLm -aLm -aLm -alx -and -and -alx -alx -alx -alx -alx +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 +aJv +cYC +aQk +aRz +aKq +aTj +aKq +aKq +aKq +alc +amI +amI +alc +alc +alc +alc +alc aaa -cKF +cGc abC abC -aYG +aXh abC aaa aaa @@ -150090,119 +141195,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 @@ -150284,57 +141389,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 -aNr -aOz -aPs -dAQ -aRD -aSU -aLm -aUG -aVj +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 +aMn +aNs +aOg +cYC +aQk +aRA +aKq +aTk +aTN +aUh +aKq +alc +amI +aVC aVD -aLm -alx -and -aXa -aXb -aXa -aXa -aYi -alx +aVC +aVC +aWJ +alc aaa aaa abC -aYF -aYH +aXg +aXi abC aaa aaa @@ -150346,50 +141451,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 @@ -150410,56 +141515,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 @@ -150539,58 +141644,58 @@ 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 -aLq -aMr -aNs -aOA -aPt -dAS -aRD -aSV -aLm -aUH -aVk -aVE -aLm -afV -afV -aXa -aXt -aXL -aXZ -aYi -aYi -aYi +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 +aMo +aNt +aOh +cYD +aQk +aRB +aKq +aTl +aTO +aUi +aKq +afH +afH +aVC +aVU +aWm +aWA +aWJ +aWJ +aWJ abC abC -aYG +aXh abC abC aaa @@ -150603,51 +141708,51 @@ 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 @@ -150667,43 +141772,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 @@ -150796,58 +141901,58 @@ 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 -aLr -aMs -aNt -aOB -aPu -aQY -aRF -aSW -cKe -aUI -aVl -aVF -aLm -ajt -aqH -aXb -aXu -aXM -aYa -aYj -aYr -aYj -aYn -aYn -aYH +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 @@ -150860,51 +141965,51 @@ 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 @@ -150924,43 +142029,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 @@ -151053,55 +142158,55 @@ 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 +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 @@ -151117,52 +142222,52 @@ 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 @@ -151181,43 +142286,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 @@ -151310,54 +142415,54 @@ 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 +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 @@ -151373,53 +142478,53 @@ aaa aaa aaa aaa -cKF -bbq -bbq -bbq -bbq -bbq -bbq -bbq -bbq -cKp -big -bja -bjP -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 @@ -151438,43 +142543,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 @@ -151567,54 +142672,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 +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 @@ -151631,54 +142736,54 @@ aaa aaa aaa aaa -bbq -bbq -bbq -baS -baS -baS -baS -baS -baS +aZP +aZP +aZP +aZr +aZr +aZr +aZr +aZr +aZr +bgx +bhq big -bja -bjS -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 @@ -151695,42 +142800,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 @@ -151824,54 +142929,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 +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 @@ -151888,54 +142993,54 @@ aaa aaa aaa aaa -bbq -bbq -bbo -baS +aZP +aZP +aZN +aZr +bcd +bcR bdG -bew -bfl -bgl -baS -big -bja -bjP -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 +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 @@ -151951,43 +143056,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 @@ -152081,55 +143186,55 @@ aaa aaa aaa aaa -ajl -akf -akU -alA -amh -anf -ajn +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 -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 +aep +aKq +aLo +aLn +aWD +aKq +alc +alc aaa aaa aaa @@ -152146,53 +143251,53 @@ aaa aaa aaa aaa -bbq -bbo -baS -bdH -bex -bex -bgm -bgY -bih -bjc -bjR -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 +aZP +aZN +aZr +bce +bcS +bcS +beD +bfp +bgy +bhs +bif +biQ +bjP +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 @@ -152208,43 +143313,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 @@ -152338,118 +143443,118 @@ 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 -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF +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 +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 -baS -baS -baS -bdI -bey -bey -bgn -baS -big -bja -bjP -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 +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 @@ -152465,42 +143570,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 @@ -152595,118 +143700,118 @@ aaa aaa aaa aaa -ajl -akh -akV -alB -amk -anh -anP -aoW -aoW -aoW -arF -arF -aoW -arF -avR -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 -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 +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 +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 @@ -152722,47 +143827,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 @@ -152789,6 +143889,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -152852,118 +143957,118 @@ aaa aaa aaa aaa -ajm -aki -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 -dtr -aYz -aYz -aYz -aYz -dtr -aYz -aYz -aYz -bas -baS -baS -baS -baS -baS -baS -baS -baS -cKp -baS -bij -bja -bjU -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 @@ -152979,62 +144084,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 @@ -153046,6 +144146,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -153109,118 +144214,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 -dBH -aWR -dbP -aXy -aTG -aTG -aYl -aYt -cPO -cPT -cPT -cPT -cPT -dts -aYU -aYU -aYU -aYU -dtV -aYU -aYU -aYU -aYU -cQC -bbr -cQJ -bcw -cQJ -cQJ -cQJ -bfm -cQJ -cQJ -bik -dul +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 @@ -153236,62 +144341,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 @@ -153303,6 +144403,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -153368,116 +144473,116 @@ 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 -dtd -dtd -dtd -dtd -dtd -dtd -dBn -dtd -dtd -dtd -dtd -dtd -dtd -dtd -baU -bbs -bbT -bbs -bbs -bbs -bbs -bfn -bbs -bbs -bil -cKz -bjP -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 @@ -153493,62 +144598,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 @@ -153560,6 +144660,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -153626,115 +144731,115 @@ 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 +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 -aRh -aRW -aTf -aTH -aUP -aVm -aVI -aWk -aWE -aWS -aXd -aQN -aXP -aQN -aQN -aQN -aQR -dtd -dtd -dtd -dtd -dtu -dtd -dtd -dtd -dtd -dtu -dtd -dtd -dtd -dtd -baV -bbt -bbU -bcx -bdd -bdd -bez -bfo -bdd -bdd -bim -bcx -bjV -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 +aWq +aPy +aPy +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 @@ -153750,62 +144855,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 @@ -153817,6 +144917,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -153886,113 +144991,113 @@ aaa aaa aaa abC -arw -aoZ -aoZ -aoZ -arJ -asE -aoZ -auL -avU -aoZ -aoZ -aoZ +aqV +aoA +aoA +aoA +arf +asa +aoA +auf +avo +aoA +aoA +aoA aaa -anV -aCZ -aEq -aFK -aHh -aoU -aoU -aKr -aLt -aMx -aoU -aoU -aPy -aPy -aRX -aTg -aTI -anV -aLm -aLm -aWl -aPJ -aPl -aLm -aLm -aLm -aLm -aLm -aLm -aLm -aYy -aYy -aYy -aYy -dtv -aYy -aYy -aYy -aYy -dtv -aYy -aYy -aYy -aYy -baS -baS -baS -baS -baS -bdK -baS -baS -baS -bgZ -bin -baS -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 @@ -154007,64 +145112,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 @@ -154074,6 +145174,11 @@ aaa aaa aaa aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -154143,48 +145248,48 @@ 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 +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 @@ -154200,56 +145305,56 @@ aaa abC aaa aaa -baW -baW -bbo -bbo -bbq -bbq -bbq -bbq -bgs -bha -bio -bje -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 @@ -154264,73 +145369,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 @@ -154400,48 +145505,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 +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 aaa abC @@ -154457,56 +145562,56 @@ aaa abC aaa aaa -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 +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 @@ -154521,73 +145626,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 @@ -154657,113 +145762,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 +aGy +aCn +aIz +aJB +aKy +aLA +aov +aov +aov +aov +aQF +aoC +aSo +any +alc +afH +aLi +aAU +aVv +aVG +aEt +afH +alc +alc +alc +alc +aWs +aWs +aWs aaa -aXR -aXR -aXR -aXR +aWs +aWs +aWs +aWs aaa -aXR -aXR -aXR -aXR -aXR -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 @@ -154781,70 +145886,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 @@ -154914,51 +146019,51 @@ aaa aaa aaa abC -arw -aoZ -apR -apR -apR -apR -apR -apR -apR -apR -apR -azw -aAP -aoY -aDb -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 -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 @@ -154973,54 +146078,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 @@ -155038,70 +146143,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 @@ -155171,51 +146276,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 -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 @@ -155232,52 +146337,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 @@ -155295,37 +146400,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 @@ -155333,32 +146438,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 @@ -155428,51 +146533,51 @@ aaa aaa aaa abC -arw -aoZ -aoZ -aoZ -arK -arK -aoZ -auM -arK -aoZ -aoZ -aoZ +aqV +aoA +aoA +aoA +arg +arg +aoA +aug +arg +aoA +aoA +aoA 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 -alx +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 @@ -155490,51 +146595,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 @@ -155552,37 +146657,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 @@ -155590,32 +146695,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 @@ -155680,56 +146785,56 @@ aaa aaa aaa aaa -dnA +cUc 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 +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 @@ -155737,7 +146842,7 @@ aaa aaa aaa aaa -cKF +cGc aaa aaa aaa @@ -155747,51 +146852,51 @@ 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 @@ -155814,32 +146919,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 @@ -155847,20 +146952,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 @@ -155937,56 +147042,56 @@ 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 +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 @@ -156004,51 +147109,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 @@ -156071,31 +147176,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 @@ -156104,20 +147209,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 @@ -156194,55 +147299,55 @@ 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 +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 @@ -156261,52 +147366,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 @@ -156330,30 +147435,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 @@ -156361,21 +147466,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 @@ -156452,54 +147557,54 @@ 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 -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 @@ -156519,51 +147624,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 @@ -156589,40 +147694,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 @@ -156632,7 +147737,7 @@ aaa aaa abC abC -cHA +cDr abC aaa aaa @@ -156709,53 +147814,53 @@ aaa aaa aaa aaa -akR -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 -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 +afH +ajW +ajW +ajW +ajX +auB +avO +akW +aNy +afE +afH +afE +afH +akx +akx aaa aaa aaa @@ -156775,51 +147880,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 @@ -156850,36 +147955,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 @@ -156889,7 +147994,7 @@ aaa aaa aaa abC -cHA +cDr abC aaa aaa @@ -156966,53 +148071,53 @@ aaa aaa aaa aaa -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 -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 +amp +ajW +aNA +ajW +ajW +cLx +ajW +afb +afH +ajX +ajW +afE +ajW +ajW +aiW +akx +akx aaa aaa aaa @@ -157031,52 +148136,52 @@ 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 @@ -157095,48 +148200,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 @@ -157146,7 +148251,7 @@ aaa aaa aaa abC -cHA +cDr abC aaa aaa @@ -157223,51 +148328,51 @@ aaa aaa aaa aaa -akR -akR -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 +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 @@ -157289,51 +148394,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 @@ -157352,48 +148457,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 @@ -157403,12 +148508,12 @@ aaa aaa aaa abC -cHA +cDr abC abC -cHf -cIX -cHf +cCW +cEO +cCW aaa aaa aaa @@ -157481,50 +148586,50 @@ 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 +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 @@ -157546,50 +148651,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 @@ -157609,48 +148714,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 @@ -157659,13 +148764,13 @@ abC aaa aaa aaa -cHf -cHO -cHf -cHf -cHC -cIY -cHf +cCW +cDF +cCW +cCW +cDt +cEP +cCW aaa aaa aaa @@ -157740,112 +148845,112 @@ 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 +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 -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -bbo -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 +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 @@ -157866,48 +148971,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 @@ -157916,13 +149021,13 @@ abC aaa aaa aaa -cHf -cHP -cHC -cIw -cIH -cIZ -cHf +cCW +cDG +cDt +cEn +cEy +cEQ +cCW aaa aaa aaa @@ -157997,48 +149102,48 @@ aaa aaa aaa aaa -ank -anX -aph -apU -aqT -arQ -asI -atK -auO -auO -auO -avW -azE -avW -ank -cZB -cYl -aoR -ahr -aqj +amP +anA +aoI apu -akq -alS -akp -aNy -afS -adZ -aez -and +aqt +arm +ase +ate +aui +aui +aui +avq +ayW +avq +amP +cMa +cLx +aos +ahd +apJ +aoU +ajX alx -and -and -and -and -alx -afV -afV -afV -afV -afV -afV -afV +ajW +aMu +afE +adP +aep +amI +alc +amI +amI +amI +amI +alc +afH +afH +afH +afH +afH +afH +afH abC abC abC @@ -158060,53 +149165,53 @@ abC abC abC abC -bbp -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 +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 @@ -158123,48 +149228,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 @@ -158173,13 +149278,13 @@ abC aaa aaa aaa -cHf -cHO -cHC -cIx -cII -cJa -cHf +cCW +cDF +cDt +cEo +cEz +cER +cCW aaa aaa aaa @@ -158252,48 +149357,48 @@ aaa aaa aaa aaa -akR -akR -ank -anY -api -apV -apV -apV -asJ -atL -atL -avX -atL -atL -azF -aAU -ank -aDg -auE -apu -aqH -afq -afq -aKE -adZ -adZ -afV -adZ -alx -alx -alx -alx -and -and -and -and -alx -alx -akR -akR -alx -alx +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 @@ -158317,54 +149422,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 @@ -158380,48 +149485,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 @@ -158429,14 +149534,14 @@ aaa abC aaa aaa -cHf -cHC -cHQ -cIe -cHS -cIg -cIz -cHf +cCW +cDt +cDH +cDV +cDJ +cDX +cEq +cCW aaa aaa aaa @@ -158509,48 +149614,48 @@ aaa aaa aaa aaa -akR -alx -ank +akx +alc +amP +anC +aoK +apw +aqu +arn +amP +atg +auj +avq +avq +axq +ayY +aAn +amP +afw +aTA 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 +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 @@ -158574,54 +149679,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 @@ -158637,48 +149742,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 @@ -158686,14 +149791,14 @@ aaa abC aaa aaa -cHf -cHD -cHR -cIf -cIy -cIh -cIA -cHf +cCW +cDu +cDI +cDW +cEp +cDY +cEr +cCW aaa aaa aad @@ -158765,49 +149870,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 +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 @@ -158832,98 +149937,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 @@ -158936,21 +149999,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 @@ -159022,49 +150127,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 +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 aaa aaa @@ -159089,123 +150194,123 @@ 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 +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 -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 @@ -159280,48 +150385,48 @@ aaa aaa aaa aaa -alF -akR -alF -alx -alx -alx -alx +alk +akx +alk +alc +alc +alc +alc aaa -akR -atN -auS -avW -axe -atN +akx +ath +aum +avq +awx +ath 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 +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 @@ -159346,43 +150451,43 @@ aaa aaa aaa 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 +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 @@ -159390,12 +150495,12 @@ aaa aaa aaa aaa -bZT -caU -cbu -cbX -bZT -bZT +bWT +bXT +bYt +bYW +bWT +bWT aaa aaa aaa @@ -159408,61 +150513,61 @@ 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 @@ -159546,38 +150651,38 @@ aaa aaa aaa aaa -atN -atN -avZ -atN -atN +ath +ath +avt +ath +ath 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 +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 @@ -159603,40 +150708,40 @@ aaa 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 +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 @@ -159647,53 +150752,11 @@ 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 @@ -159707,6 +150770,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 @@ -159802,147 +150907,99 @@ aaa aaa aaa aaa -asK -asK -asL -awa -asL -asK -asK +asg +asg +ash +avu +ash +asg +asg aaa aaa aaa aaa aaa aaa -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx -alx +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc +alc aaa aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -cKF -bbo -bbo -bbq -bgs -bhb -bis -bjZ -bkR -bgq -bjY -bnQ -bpq -bqv -bqn -bjY -cWu -bjY +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 @@ -159951,6 +151008,12 @@ aaa aaa aaa aaa +bWT +bXl +bXV +bYu +bXl +bWT aaa aaa aaa @@ -159964,6 +151027,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 @@ -160059,13 +151164,13 @@ aaa aaa aaa aaa -asK -atO -auT -auT -auU -axY -asK +asg +ati +aun +aun +auo +axr +asg aaa aaa aaa @@ -160076,18 +151181,18 @@ aaa aaa aaa aaa -alx -alx -alx -alx -alx -and -alx -alx -alx -and -alx -alF +alc +alc +alc +alc +alc +amI +alc +alc +alc +amI +alc +alk abC abC abC @@ -160118,87 +151223,40 @@ abC abC abC abC -bbp -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 +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 @@ -160207,6 +151265,11 @@ aaa aaa aaa aaa +bWU +bXm +bXW +bWT +bWT aaa aaa aaa @@ -160221,6 +151284,48 @@ 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 @@ -160316,13 +151421,13 @@ aaa aaa aaa aaa -asL -atP -auU -auT -auU -axZ -azH +ash +atj +auo +aun +auo +axs +ayZ aaa aaa aaa @@ -160336,15 +151441,15 @@ aaa aaa aaa aaa -alx -alx -alx -alx -alx -alx -alx -alx -alx +alc +alc +alc +alc +alc +alc +alc +alc +alc aaa aaa aaa @@ -160376,39 +151481,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 @@ -160417,52 +151522,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 @@ -160478,6 +151541,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 @@ -160573,13 +151678,13 @@ aaa aaa aaa aaa -asK -atQ -auT -auT -auU -aya -asK +asg +atk +aun +aun +auo +axt +asg aaa aaa aaa @@ -160594,10 +151699,10 @@ aaa aaa aaa aaa -alx -alx -alx -alx +alc +alc +alc +alc aaa aaa aaa @@ -160633,34 +151738,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 @@ -160693,50 +151798,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 @@ -160830,13 +151935,13 @@ aaa aaa aaa aaa -asK -asK -asL -awb -asL -asK -asK +asg +asg +ash +avv +ash +asg +asg aaa aaa aaa @@ -160890,78 +151995,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 @@ -160994,6 +152055,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 @@ -161062,7 +152167,7 @@ aab aac aac aac -cYd +cLq aac aac aac @@ -161148,75 +152253,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 @@ -161251,6 +152312,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 @@ -161406,27 +152511,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 @@ -161464,50 +152569,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 @@ -161663,27 +152768,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 @@ -161721,50 +152826,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 @@ -161922,25 +153027,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 @@ -161978,50 +153083,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 @@ -162180,23 +153285,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 @@ -162241,44 +153346,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 @@ -162362,7 +153467,7 @@ aaa aaa aaa aaP -akk +ajR aaP abC aaa @@ -162438,25 +153543,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 @@ -162498,44 +153603,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 @@ -162697,14 +153802,14 @@ aaa aaa aaa aaa -bbo +aZN aaa -bgs -bsb -btu -bsb -bgs -bbq +beJ +bpY +brr +bpY +beJ +aZP aaa aaa aaa @@ -162712,8 +153817,8 @@ aaa abC aaa aaP -bEZ -bIT +bCy +bGk aaP aaa aaa @@ -162755,44 +153860,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 @@ -162876,8 +153981,8 @@ aaa aaa aaa aaP -akl -akX +ajS +akD aaP aaP abC @@ -162948,19 +154053,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 @@ -162968,8 +154073,8 @@ aaa aaa abC aaP -bEZ -bHx +bCy +bEO abb aaP aaa @@ -163012,44 +154117,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 @@ -163133,9 +154238,9 @@ aaa aaa aaa aaP -akm -akY -alG +ajT +akE +all aaP aaP aaa @@ -163204,18 +154309,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 @@ -163224,8 +154329,8 @@ aaa aaa aaa aaP -bEZ -bGm +bCy +bDG abs abb aaP @@ -163269,44 +154374,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 @@ -163390,11 +154495,11 @@ aaa aaa aaa aaP -akn -akZ +ajU +akF abr abV -anl +amQ aaa aaa aaa @@ -163461,30 +154566,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 @@ -163526,44 +154631,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 @@ -163718,20 +154823,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 @@ -163783,39 +154888,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 @@ -163975,12 +155080,12 @@ aaa aaa aaa aaa -cKF -cKF -cKF -cKF -cKF aaa +cGc +cGc +cGc +cGc +cGc aaa aaa aaa @@ -164008,11 +155113,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 @@ -164026,53 +155166,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 @@ -164232,78 +155337,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 @@ -164331,11 +155370,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 @@ -164350,6 +155423,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 @@ -164489,68 +155594,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 @@ -164578,11 +155627,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 @@ -164607,6 +155690,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 @@ -164746,68 +155851,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 @@ -164835,11 +155884,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 @@ -164864,6 +155947,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 @@ -165003,61 +156108,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 @@ -165085,6 +156141,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 @@ -165121,6 +156204,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 @@ -165293,6 +156398,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 @@ -165329,55 +156461,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 @@ -165550,6 +156655,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 @@ -165586,55 +156718,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 @@ -165807,6 +156912,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 @@ -165843,55 +156975,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 @@ -166064,6 +157169,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 @@ -166100,55 +157232,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 @@ -166321,6 +157426,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 @@ -166357,55 +157489,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 @@ -166578,6 +157683,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 @@ -166614,55 +157746,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 @@ -166835,6 +157940,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 @@ -166871,55 +158003,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 @@ -167092,33 +158197,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 84fb806587..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) @@ -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 267a2a7b50..3c7218915c 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -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" @@ -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" @@ -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{ @@ -63633,6 +63624,7 @@ dir = 8 }, /obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/freon, /turf/open/floor/plasteel, /area/engine/engineering) "cqt" = ( @@ -79542,7 +79534,7 @@ }) "cUh" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/smartfridge/chemistry, +/obj/machinery/smartfridge/chemistry/preloaded, /turf/closed/wall, /area/medical/medbay{ name = "Medbay Central" @@ -81189,7 +81181,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 }, @@ -84274,7 +84266,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" = ( @@ -104905,7 +104897,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 }, @@ -112327,6 +112319,29 @@ /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 @@ -136049,11 +136064,11 @@ aiW apF aqY asd -ati +axL aux avM awR -axL +ehS axL axL asd @@ -136311,7 +136326,7 @@ auy avN awS axM -aqZ +ehT azZ aAV aCc @@ -136569,7 +136584,7 @@ ato awT axN aza -aAa +ato aAW aCd aDD @@ -136825,7 +136840,7 @@ ebT avO auA axO -azb +atk atk aAX aCe diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index f30c7b69f3..303005c32f 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -56825,7 +56825,6 @@ icon_state = "4-8" }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L13"; name = "floor" }, @@ -57517,7 +57516,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - desc = ""; icon_state = "L14" }, /area/hallway/primary/central) @@ -63162,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" = ( @@ -77230,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 @@ -91079,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; diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 2af4f3bd30..da311e72d7 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -14511,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 }, @@ -14893,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) @@ -27034,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" = ( @@ -37371,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 }, @@ -77588,7 +77575,7 @@ aaa aaa aaa aaa -bwn +bwb aaa aaa aaa @@ -77846,7 +77833,7 @@ aaa aaa bwb bwo -bwA +bwb aaa aaa aaa @@ -78102,7 +78089,7 @@ aaa aaa aaa bwc -bwp +bwi bwB aaa aaa @@ -78358,9 +78345,9 @@ aaa aaa aaa aaa -bwd +bvS bwq -bwC +bvS aaa aaa aaa @@ -78615,10 +78602,10 @@ aaa aaa aaa bvS -bwe +bvS bwr -bwD -bwM +bvS +bvS aaa aaa aaa @@ -78873,9 +78860,9 @@ aaa aaa bvT bwf -bws +bwi bwE -bwN +bvT aaa aaa aaa @@ -79128,11 +79115,11 @@ aaa aaa aaa aaa -bvU -bwg -bwt -bwF -bwO +bvS +bwf +bwi +bwE +bvS aaa aaa aaa @@ -79385,11 +79372,11 @@ aaa aaa aaa aaa -bvV +bvS bwh -bwu -bwG -bwP +bwi +bwi +bvS aaa aaa aaa @@ -79645,7 +79632,7 @@ aaa bvW bwi bwv -bwH +bwi bwQ aaa aaa @@ -79899,11 +79886,11 @@ aaa aaa aaa aaa -bvX -bwj -bww +bvS +bwi +bwi bwI -bwR +bvS aaa aaa aaa @@ -80156,11 +80143,11 @@ aaa aaa aaa aaa -bvY -bwk -bwx -bwJ -bwS +bvS +bwf +bwi +bwE +bvS aaa aaa aaa @@ -80413,11 +80400,11 @@ aaa aaa aaa aaa -bvZ -bwl -bwy -bwK -bwT +bvT +bwf +bwi +bwE +bvT aaa aaa aaa @@ -80670,11 +80657,11 @@ aaa aaa aaa aaa -bwa -bwm +bvS +bvT bwz -bwL -bwU +bvT +bvS aaa aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 56bcff286e..99cef30ebd 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -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 }, @@ -40057,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 }, @@ -47063,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" = ( @@ -50530,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" = ( @@ -55915,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 @@ -89496,7 +89514,7 @@ bNt bOE bNt bNt -bPE +cjQ bMb bQy bMb diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 220c1bd671..b00c11274b 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -12384,7 +12384,7 @@ dir = 5 }, /turf/open/floor/plating, -/area/maintenance/fpmaint) +/area/gateway) "aBj" = ( /obj/structure/rack{ dir = 8; @@ -22145,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 }, @@ -25158,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, @@ -27089,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" = ( @@ -27644,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; @@ -40912,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" = ( @@ -44811,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 }, @@ -59567,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 @@ -62012,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 }, @@ -88791,7 +88801,7 @@ bda bca bgJ aZP -bjD +bjB bkY bmo bnP @@ -99639,7 +99649,7 @@ bVu bVu bVu bVu -apQ +bVu bVu csw csw diff --git a/_maps/map_files/generic/Centcomm.dmm b/_maps/map_files/generic/Centcomm.dmm index e3870a49f8..ba62ea2357 100644 --- a/_maps/map_files/generic/Centcomm.dmm +++ b/_maps/map_files/generic/Centcomm.dmm @@ -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 ebc69a5f2b..c33543ac4e 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -24,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..b29d933866 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -1,3 +1,8 @@ -#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 +#define ANTAG_DATUM_NINJA /datum/antagonist/ninja +#define ANTAG_DATUM_NINJA_FRIENDLY /datum/antagonist/ninja/friendly +#define ANTAG_DATUM_NINJA_RANDOM /datum/antagonist/ninja/randomAllegiance/ \ 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/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/cult.dm b/code/__DEFINES/cult.dm new file mode 100644 index 0000000000..71d4ad3af9 --- /dev/null +++ b/code/__DEFINES/cult.dm @@ -0,0 +1,9 @@ +//rune colors, for easy reference +#define RUNE_COLOR_TALISMAN "#0000FF" +#define RUNE_COLOR_TELEPORT "#551A8B" +#define RUNE_COLOR_OFFER "#FFFFFF" +#define RUNE_COLOR_DARKRED "#7D1717" +#define RUNE_COLOR_MEDIUMRED "#C80000" +#define RUNE_COLOR_RED "#FF0000" +#define RUNE_COLOR_EMP "#4D94FF" +#define RUNE_COLOR_SUMMON "#00FF00" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 6745645115..a5e69bdc7b 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. @@ -25,6 +27,7 @@ #define BLOCK_GAS_SMOKE_EFFECT 4096 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! #define THICKMATERIAL 8192 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. #define DROPDEL 16384 // When dropped, it calls qdel on itself +#define PREVENT_CLICK_UNDER 32768 //Prevent clicking things below it on the same turf eg. doors/ fulltile windows /* Secondary atom flags, access using the SECONDARY_FLAG macros */ diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index cea01afc2a..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 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 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/misc.dm b/code/__DEFINES/misc.dm index 321bbf7b67..8b02a61fba 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -407,3 +407,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE //Error handler defines #define ERROR_USEFUL_LEN 2 + +#define NO_FIELD 0 +#define FIELD_TURF 1 +#define FIELD_EDGE 2 diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 043158da11..69bc163234 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -38,3 +38,5 @@ #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/status_effects.dm.rej b/code/__DEFINES/status_effects.dm.rej deleted file mode 100644 index 929dfc37dc..0000000000 --- a/code/__DEFINES/status_effects.dm.rej +++ /dev/null @@ -1,10 +0,0 @@ -diff a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm (rejected hunks) -@@ -33,4 +33,8 @@ - #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. 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 8f340bff46..4215151058 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -1,491 +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() +/* + * 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 + +/* 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/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/mobs.dm b/code/__HELPERS/mobs.dm index ca4093adf1..6a4ec3456e 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -340,6 +340,20 @@ Proc for attack log creation, because really why not qdel(progbar) +//some additional checks as a callback for for do_afters that want to break on losing health or on the mob taking action +/mob/proc/break_do_after_checks(list/checked_health, check_clicks) + if(check_clicks && next_move > world.time) + return FALSE + return TRUE + +//pass a list in the format list("health" = mob's health var) to check health during this +/mob/living/break_do_after_checks(list/checked_health, check_clicks) + if(islist(checked_health)) + if(health < checked_health["health"]) + return FALSE + checked_health["health"] = health + return ..() + /proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null) if(!user) return 0 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index d0fcb3bcbe..f35a6eaa15 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1399,3 +1399,20 @@ GLOBAL_PROTECT(valid_HTTPSGet) /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..806ac576d4 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -3,3 +3,15 @@ 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) +GLOBAL_DATUM(cult_narsie, /obj/singularity/narsie/large/cult) \ No newline at end of file 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/_onclick/click.dm b/code/_onclick/click.dm index 9272abbdb6..ad4a84529b 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -92,6 +92,9 @@ if(next_move > world.time) // in the year 2000... return + if(A.IsObscured()) + return + if(istype(loc,/obj/mecha)) var/obj/mecha/M = loc return M.click_action(A,src,params) @@ -111,108 +114,126 @@ W.attack_self(src) update_inv_hands() return - - //These are always reachable. - //User itself, current loc, and user inventory - if(DirectAccess(A)) + + //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 - - //Can't reach anything else in lockers or other weirdness - if(!loc.AllowClick()) + + //Can't reach anything else in lockers or other weirdness + if(!loc.AllowClick()) return - //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) - -/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 + //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/CheckToolReach(atom/movable/here, atom/movable/there, reach) +//Is the atom obscured by a PREVENT_CLICK_UNDER object above it +/atom/proc/IsObscured() + if(!isturf(loc)) //This only makes sense for things directly on turfs for now + return FALSE + var/turf/T = get_turf_pixel(src) + if(!T) + return FALSE + for(var/atom/movable/AM in T) + if(AM.flags & PREVENT_CLICK_UNDER && AM.density && AM.layer > layer) + return TRUE + return FALSE + +/turf/IsObscured() + for(var/atom/movable/AM in src) + if(AM.flags & PREVENT_CLICK_UNDER && AM.density) + return TRUE + return FALSE + +/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 FALSE + return FALSE if(1) - return FALSE //here.Adjacent(there) + return FALSE //here.Adjacent(there) if(2 to INFINITY) - var/obj/dummy = new(get_turf(here)) + var/obj/dummy = new(get_turf(here)) dummy.pass_flags |= PASSTABLE - dummy.invisibility = INVISIBILITY_ABSTRACT + 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.CanReach(there)) + if(dummy.CanReach(there)) qdel(dummy) - return TRUE + return TRUE if(!dummy.Move(T)) //we're blocked! qdel(dummy) return - qdel(dummy) + 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) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index b376706a42..dfabe23025 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,102 @@ 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 && Cviewer.seeking && Cviewer.master) + blood_target = Cviewer.master + desc = "Your blood sense is leading you to [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(icon_state == "runed_sense1") + return + animate(src, transform = null, time = 1, loop = 0) + angle = 0 + cut_overlays() + icon_state = "runed_sense1" + desc = "The sacrifice is complete, bring the wrath of Nar-Sie upon the crew!" + 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. + icon_state = "runed_sense2" + desc = "[blood_target] is no longer in your sector, you cannot sense its presence here." + 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" @@ -605,4 +703,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 f6a3688626..1bb3ba5223 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -1,270 +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 8453b12085..ecb13d8a9b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -1,318 +1,318 @@ -/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() - +/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 @@ -325,114 +325,114 @@ 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 +/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..09bdd44e6a 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 4c95463247..e808b03ac7 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -162,8 +162,8 @@ 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_pod_plants = FALSE + var/revival_cloning = FALSE var/revival_brain_life = -1 var/rename_cyborg = 0 @@ -259,6 +259,8 @@ 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) @@ -278,7 +280,6 @@ votable_modes += "secret" Reload() - reload_custom_roundstart_items_list() /datum/configuration/proc/Reload() load("config/config.txt") @@ -543,9 +544,9 @@ if("damage_multiplier") damage_multiplier = text2num(value) if("revival_pod_plants") - revival_pod_plants = text2num(value) + revival_pod_plants = TRUE if("revival_cloning") - revival_cloning = text2num(value) + revival_cloning = TRUE if("revival_brain_life") revival_brain_life = text2num(value) if("rename_cyborg") @@ -765,13 +766,15 @@ 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) + 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 << "Adding game mode [M.name] ([M.config_tag]) to configuration." + else + GLOB.config_error_log << "Unknown setting in configuration: '[name]'" fps = round(fps) if(fps <= 0) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 0df2c8cc73..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 @@ -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) @@ -491,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 @@ -505,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 3332b1c45d..3024c24c15 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -29,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 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 a807202c9e..b30bc41759 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(blackbox) name = "Blackbox" wait = 6000 flags = SS_NO_TICK_CHECK - + var/list/msg_common = list() var/list/msg_science = list() var/list/msg_command = list() @@ -91,7 +91,7 @@ SUBSYSTEM_DEF(blackbox) if (sqlrowlist != "") sqlrowlist += ", " //a comma (,) at the start of the first row to insert will trigger a SQL error - sqlrowlist += "(null, Now(), [GLOB.round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")" + sqlrowlist += list(list("time" = "Now()", "round_id" = GLOB.round_id, "var_name" = "'[sanitizeSQL(FV.get_variable())]'", "var_value" = FV.get_value(), "details" = "'[sanitizeSQL(FV.get_details())]'")) if (sqlrowlist == "") return @@ -243,4 +243,4 @@ SUBSYSTEM_DEF(blackbox) return details /datum/feedback_variable/proc/get_parsed() - return list(variable,value,details) + return list(variable,value,details) \ No newline at end of file diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index 20c6f993e5..ad4691564c 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -77,15 +77,87 @@ SUBSYSTEM_DEF(dbcore) return FALSE return _dm_db_is_connected(_db_con) -/datum/controller/subsystem/dbcore/proc/Quote(str) +/datum/controller/subsystem/dbcore/proc/Quote(str) return _dm_db_quote(_db_con, str) -/datum/controller/subsystem/dbcore/proc/ErrorMsg() +/datum/controller/subsystem/dbcore/proc/ErrorMsg() + if(!config.sql_enabled) + return "Database disabled by configuration" return _dm_db_error_msg(_db_con) /datum/controller/subsystem/dbcore/proc/NewQuery(sql_query, cursor_handler = Default_Cursor) + if(IsAdminAdvancedProcCall()) + log_admin_private("ERROR: Advanced admin proc call led to sql query: [sql_query]. Query has been blocked") + message_admins("ERROR: Advanced admin proc call led to sql query. Query has been blocked") + return FALSE return new /datum/DBQuery(sql_query, src, cursor_handler) +/* +Takes a list of rows (each row being an associated list of column => value) and inserts them via a single mass query. +Rows missing columns present in other rows will resolve to SQL NULL +You are expected to do your own escaping of the data, and expected to provide your own quotes for strings. +The duplicate_key arg can be true to automatically generate this part of the query + or set to a string that is appended to the end of the query +Ignore_errors instructes mysql to continue inserting rows if some of them have errors. + the erroneous row(s) aren't inserted and there isn't really any way to know why or why errored +Delayed insert mode was removed in mysql 7 and only works with MyISAM type tables, + It was included because it is still supported in mariadb. + It does not work with duplicate_key and the mysql server ignores it in those cases +*/ +/datum/controller/subsystem/dbcore/proc/MassInsert(table, list/rows, duplicate_key = FALSE, ignore_errors = FALSE, delayed = FALSE, warn = FALSE) + if (!table || !rows || !istype(rows)) + return + var/list/columns = list() + var/list/sorted_rows = list() + + for (var/list/row in rows) + var/list/sorted_row = list() + sorted_row.len = columns.len + for (var/column in row) + var/idx = columns[column] + if (!idx) + idx = columns.len + 1 + columns[column] = idx + sorted_row.len = columns.len + + sorted_row[idx] = row[column] + sorted_rows[++sorted_rows.len] = sorted_row + + if (duplicate_key == TRUE) + var/list/column_list = list() + for (var/column in columns) + column_list += "[column] = VALUES([column])" + duplicate_key = "ON DUPLICATE KEY UPDATE [column_list.Join(", ")]\n" + else if (duplicate_key == FALSE) + duplicate_key = null + + if (ignore_errors) + ignore_errors = " IGNORE" + else + ignore_errors = null + + if (delayed) + delayed = " DELAYED" + else + delayed = null + + var/list/sqlrowlist = list() + var/len = columns.len + for (var/list/row in sorted_rows) + if (length(row) != len) + row.len = len + for (var/value in row) + if (value == null) + value = "NULL" + sqlrowlist += "([row.Join(", ")])" + + sqlrowlist = " [sqlrowlist.Join(",\n ")]" + var/datum/DBQuery/Query = NewQuery("INSERT[delayed][ignore_errors] INTO [table]\n([columns.Join(", ")])\nVALUES\n[sqlrowlist]\n[duplicate_key]") + if (warn) + return Query.warn_execute() + else + return Query.Execute() + /datum/DBQuery var/sql // The sql query being executed. 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/fields.dm b/code/controllers/subsystem/fields.dm new file mode 100644 index 0000000000..8e9f387478 --- /dev/null +++ b/code/controllers/subsystem/fields.dm @@ -0,0 +1,27 @@ + +SUBSYSTEM_DEF(fields) + name = "Fields" + wait = 2 + priority = 40 + flags = SS_KEEP_TIMING + var/list/datum/proximity_monitor/advanced/running = list() + var/list/datum/proximity_monitor/advanced/currentrun = list() + +/datum/controller/subsystem/fields/fire(resumed = 0) + if(!resumed) + src.currentrun = running.Copy() + var/list/currentrun = src.currentrun + while(currentrun.len) + var/datum/proximity_monitor/advanced/F = currentrun[currentrun.len] + currentrun.len-- + if(!F.requires_processing) + continue + F.process() + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/fields/proc/register_new_field(datum/proximity_monitor/advanced/F) + running += F + +/datum/controller/subsystem/fields/proc/unregister_field(datum/proximity_monitor/advanced/F) + running -= F 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 32d53884f5..c37e10b28c 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -287,8 +287,6 @@ SUBSYSTEM_DEF(job) if(PopcapReached()) RejectPlayer(player) - var/datum/job/validjob - // Loop through all jobs for(var/datum/job/job in shuffledoccupations) // SHUFFLE ME BABY if(!job) @@ -315,19 +313,11 @@ SUBSYSTEM_DEF(job) // If the job isn't filled if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) + Debug("DO pass, Player: [player], Level:[level], Job:[job.title]") + AssignRole(player, job.title) + unassigned -= player + break - validjob = job - - //Is the Job empty? Stop Looking Then! - if (!job.current_positions) - break - - //Assign us the last job we found - if (validjob) - Debug("DO pass, Player: [player], Level:[level], Job:[validjob.title]") - AssignRole(player, validjob.title) - 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 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/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/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/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 4d32ce719c..bed923ffe2 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..3012abec3e 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 abf05aad72..e8d575a517 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...") @@ -281,7 +284,7 @@ SUBSYSTEM_DEF(ticker) //Now animate the cinematic switch(station_missed) if(NUKE_NEAR_MISS) //nuke was nearby but (mostly) missed - if( mode && !override ) + if(mode && !override ) override = mode.name switch( override ) if("nuclear emergency") //Nuke wasn't on station when it blew up @@ -291,6 +294,17 @@ SUBSYSTEM_DEF(ticker) station_explosion_detonation(bomb) flick("station_intact_fade_red",cinematic) cinematic.icon_state = "summary_nukefail" + if("cult") + cinematic.icon_state = null + flick("intro_cult",cinematic) + sleep(25) + world << sound('sound/magic/enter_blood.ogg') + sleep(28) + world << sound('sound/machines/terminal_off.ogg') + sleep(20) + flick("station_corrupted",cinematic) + world << sound('sound/effects/ghost.ogg') + actually_blew_up = FALSE if("gang war") //Gang Domination (just show the override screen) cinematic.icon_state = "intro_malf_still" flick("intro_malf",cinematic) @@ -339,6 +353,13 @@ SUBSYSTEM_DEF(ticker) world << sound('sound/effects/explosionfar.ogg') station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_selfdes" + if("cult") //Station nuked (nuke,explosion,summary) + flick("intro_nuke",cinematic) + sleep(35) + flick("station_explode_fade_red",cinematic) + world << sound('sound/effects/explosionfar.ogg') + station_explosion_detonation(bomb) //TODO: no idea what this case could be + cinematic.icon_state = "summary_cult" if("no_core") //Nuke failed to detonate as it had no core flick("intro_nuke",cinematic) sleep(35) 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..ba3dc04f56 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -358,6 +358,59 @@ active = FALSE ..() +/datum/action/item_action/initialize_ninja_suit + name = "Toggle ninja suit" + +/datum/action/item_action/ninjajaunt + name = "Phase Jaunt (10E)" + desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing." + button_icon_state = "ninja_phase" + +/datum/action/item_action/ninjasmoke + name = "Smoke Bomb" + desc = "Blind your enemies momentarily with a well-placed smoke bomb." + button_icon_state = "smoke" + +/datum/action/item_action/ninjaboost + name = "Adrenaline Boost" + desc = "Inject a secret chemical that will counteract all movement-impairing effect." + button_icon_state = "repulse" + +/datum/action/item_action/ninjapulse + name = "EM Burst (25E)" + desc = "Disable any nearby technology with a electro-magnetic pulse." + button_icon_state = "emp" + +/datum/action/item_action/ninjastar + name = "Create Throwing Stars (1E)" + desc = "Creates some throwing stars" + button_icon_state = "throwingstar" + icon_icon = 'icons/obj/weapons.dmi' + +/datum/action/item_action/ninjanet + name = "Energy Net (20E)" + desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." + button_icon_state = "energynet" + icon_icon = 'icons/effects/effects.dmi' + +/datum/action/item_action/ninja_sword_recall + name = "Recall Energy Katana (Variable Cost)" + desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance." + button_icon_state = "energy_katana" + icon_icon = 'icons/obj/weapons.dmi' + +/datum/action/item_action/ninja_stealth + name = "Toggle Stealth" + desc = "Toggles stealth mode on and off." + button_icon_state = "ninja_cloak" + +/datum/action/item_action/toggle_glove + name = "Toggle interaction" + desc = "Switch between normal interaction and drain mode." + button_icon_state = "s-ninjan" + icon_icon = 'icons/obj/clothing/gloves.dmi' + + /datum/action/item_action/organ_action check_flags = AB_CHECK_CONSCIOUS @@ -482,6 +535,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/ninja.dm b/code/datums/antagonists/ninja.dm new file mode 100644 index 0000000000..d3b6da5b19 --- /dev/null +++ b/code/datums/antagonists/ninja.dm @@ -0,0 +1,153 @@ +/datum/antagonist/ninja + name = "Ninja" + var/team + var/helping_station = 0 + var/give_objectives = TRUE + +/datum/antagonist/ninja/friendly + helping_station = 1 + +/datum/antagonist/ninja/friendly/noobjective + give_objectives = FALSE + +/datum/antagonist/ninja/New(datum/mind/new_owner) + if(new_owner && !ishuman(new_owner.current))//It's fine if we aren't passed a mind, but if we are, they have to be human. + throw EXCEPTION("Only humans and/or humanoids may be ninja'ed") + ..(new_owner) + +/datum/antagonist/ninja/randomAllegiance/New(datum/mind/new_owner) + ..(new_owner) + helping_station = rand(0,1) + +/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/H = owner.current, safety=0)//Safety in case you need to unequip stuff for existing characters. + if(safety) + qdel(H.w_uniform) + qdel(H.wear_suit) + qdel(H.wear_mask) + qdel(H.head) + qdel(H.shoes) + qdel(H.gloves) + + var/obj/item/clothing/suit/space/space_ninja/theSuit = new(H) + var/obj/item/weapon/katana/energy/EK = new(H) + theSuit.energyKatana = EK + + H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_ears) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/space_ninja(H), slot_shoes) + H.equip_to_slot_or_del(theSuit, slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/gloves/space_ninja(H), slot_gloves) + H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/space_ninja(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/space_ninja(H), slot_wear_mask) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/night(H), slot_glasses) + H.equip_to_slot_or_del(EK, slot_belt) + H.equip_to_slot_or_del(new /obj/item/device/flashlight(H), slot_r_store) + H.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(H), slot_s_store) + H.equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/carbondioxide(H), slot_back) + theSuit.randomize_param() + + var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(H) + E.implant(H) + return 1 + +/datum/antagonist/ninja/proc/addMemories() + owner.store_memory("I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") + owner.store_memory("Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") + owner.store_memory("Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") + +/datum/antagonist/ninja/proc/addObjectives(quantity = 6) + var/list/possible_targets = list() + for(var/datum/mind/M in SSticker.minds) + if(M.current && M.current.stat != DEAD) + if(ishuman(M.current)) + if(M.special_role) + possible_targets[M] = 0 //bad-guy + else if(M.assigned_role in GLOB.command_positions) + possible_targets[M] = 1 //good-guy + + var/list/objectives = list(1,2,3,4) + while(owner.objectives.len < quantity) + switch(pick_n_take(objectives)) + if(1) //research + var/datum/objective/download/O = new /datum/objective/download() + O.owner = owner + O.gen_amount_goal() + owner.objectives += O + + if(2) //steal + var/datum/objective/steal/special/O = new /datum/objective/steal/special() + O.owner = owner + owner.objectives += O + + if(3) //protect/kill + if(!possible_targets.len) continue + var/index = rand(1,possible_targets.len) + var/datum/mind/M = possible_targets[index] + var/is_bad_guy = possible_targets[M] + possible_targets.Cut(index,index+1) + + if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) + var/datum/objective/assassinate/O = new /datum/objective/assassinate() + O.owner = owner + O.target = M + O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." + owner.objectives += O + else //protect + var/datum/objective/protect/O = new /datum/objective/protect() + O.owner = owner + O.target = M + O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." + owner.objectives += O + if(4) //debrain/capture + if(!possible_targets.len) continue + var/selected = rand(1,possible_targets.len) + var/datum/mind/M = possible_targets[selected] + var/is_bad_guy = possible_targets[M] + possible_targets.Cut(selected,selected+1) + + if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy) + var/datum/objective/debrain/O = new /datum/objective/debrain() + O.owner = owner + O.target = M + O.explanation_text = "Steal the brain of [M.current.real_name]." + owner.objectives += O + else //capture + var/datum/objective/capture/O = new /datum/objective/capture() + O.owner = owner + O.gen_amount_goal() + owner.objectives += O + else + break + var/datum/objective/O = new /datum/objective/survive() + O.owner = owner + owner.objectives += O + + +/proc/remove_ninja(mob/living/L) + if(!L || !L.mind) + return FALSE + var/datum/antagonist/datum = L.mind.has_antag_datum(ANTAG_DATUM_NINJA) + datum.on_removal() + return TRUE + +/proc/add_ninja(mob/living/carbon/human/H, type = ANTAG_DATUM_NINJA_RANDOM) + if(!H || !H.mind) + return FALSE + return H.mind.add_antag_datum(type) + +/proc/is_ninja(mob/living/M) + return M && M.mind && M.mind.has_antag_datum(ANTAG_DATUM_NINJA) + + +/datum/antagonist/ninja/greet() + owner.current << sound('sound/effects/ninja_greeting.ogg') + to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") + to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") + to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") + return + +/datum/antagonist/ninja/on_gain() + if(give_objectives) + addObjectives() + addMemories() 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/datumvars.dm b/code/datums/datumvars.dm index fbbf97a6ca..eacbdd4d81 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -737,18 +737,6 @@ src.give_disease(M) href_list["datumrefresh"] = href_list["give_spell"] - else if(href_list["ninja"]) - if(!check_rights(R_FUN)) - return - - var/mob/M = locate(href_list["ninja"]) - if(!istype(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - src.cmd_admin_ninjafy(M) - href_list["datumrefresh"] = href_list["ninja"] - else if(href_list["gib"]) if(!check_rights(R_FUN)) return diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 24774da158..8f18f8b1fe 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -1,3 +1,4 @@ + #define HOLOPAD_MAX_DIAL_TIME 200 /mob/camera/aiEye/remote/holo/setLoc() @@ -30,6 +31,7 @@ var/obj/machinery/holopad/H = I if(!QDELETED(H) && H.is_operational()) dialed_holopads += H + H.say("Incoming call.") LAZYADD(H.holo_calls, src) if(!dialed_holopads.len) @@ -41,12 +43,16 @@ //cleans up ALL references :) /datum/holocall/Destroy() - QDEL_NULL(eye) - user.reset_perspective() + if(user.client) + for(var/datum/camerachunk/chunk in eye.visibleCameraChunks) + user.client.images -= chunk.obscured + user.remote_control = null + QDEL_NULL(eye) user = null - hologram.HC = null + if(hologram) + hologram.HC = null hologram = null calling_holopad.outgoing_call = null diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f4eff12f38..04bec0a7a4 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1,116 +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/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) @@ -147,1490 +161,1498 @@ 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) +/* + 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() + 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", + "ninja" + ) + 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 + +/** NINJA ***/ + text = "ninja" + if(SSticker.mode.config_tag == "ninja") + text = uppertext(text) + text = "[text]: " + var/datum/antagonist/ninja/ninjainfo = has_antag_datum(ANTAG_DATUM_NINJA) + if(ninjainfo) + if(ninjainfo.helping_station) + text += "employee | syndicate | NANOTRASEN | EQUIP" + else + text += "employee | SYNDICATE | nanotrasen | EQUIP" + else + text += "EMPLOYEE | syndicate | nanotrasen | random allegiance" + if(current && current.client && (ROLE_NINJA in current.client.prefs.be_special)) + text += " | Enabled in Prefs" + else + text += " | Disabled in Prefs" + sections["ninja"] = 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["ninja"]) + var/datum/antagonist/ninja/ninjainfo = has_antag_datum(ANTAG_DATUM_NINJA) + switch(href_list["ninja"]) + if("clear") + remove_ninja(current) + message_admins("[key_name_admin(usr)] has de-ninja'ed [current].") + log_admin("[key_name(usr)] has de-ninja'ed [current].") + if("equip") + ninjainfo.equip_space_ninja() + return + if("nanotrasen") + add_ninja(current, ANTAG_DATUM_NINJA_FRIENDLY) + message_admins("[key_name_admin(usr)] has friendly ninja'ed [current].") + log_admin("[key_name(usr)] has friendly ninja'ed [current].") + if("syndicate") + add_ninja(current, ANTAG_DATUM_NINJA) + message_admins("[key_name_admin(usr)] has syndie ninja'ed [current].") + log_admin("[key_name(usr)] has syndie ninja'ed [current].") + if("random") + add_ninja(current) + message_admins("[key_name_admin(usr)] has random ninja'ed [current].") + log_admin("[key_name(usr)] has random ninja'ed [current].") + 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.GetAllContents() + 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 = "" diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index d3427ac983..94226dc8ec 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -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 7b00a17e41..a0338f72b0 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -228,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 9f6e481edb..5b7d015e19 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -162,3 +162,8 @@ 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/debuffs.dm.rej b/code/datums/status_effects/debuffs.dm.rej deleted file mode 100644 index c70c0c6eec..0000000000 --- a/code/datums/status_effects/debuffs.dm.rej +++ /dev/null @@ -1,75 +0,0 @@ -diff a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm (rejected hunks) -@@ -108,20 +108,6 @@ - to_chat(owner, "You feel a frustrated voice quietly fade from your mind...") - qdel(src) - return -- if(!(owner in viewers(7, motor))) //not being in range makes it fall off much faster -- if(!is_servant && !warned_outofsight) -- to_chat(owner, "\"[text2ratvar(pick(flee_messages))]\"") -- warned_outofsight = TRUE -- if(severity) -- severity-- -- if(!severity) -- qdel(src) -- return -- else -- qdel(src) -- return -- else if(prob(severity * 2)) -- warned_outofsight = FALSE - 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) -@@ -129,20 +115,24 @@ - else - to_chat(owner, "[text2ratvar(pick(powerloss_messages))]") - warned_turnoff = TRUE -- if(severity) -- severity-- -+ 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 -- qdel(src) -- return -- else if(prob(severity * 2)) -- warned_turnoff = FALSE -+ else if(prob(severity * 2)) -+ warned_outofsight = FALSE - if(is_servant) //heals servants of braindamage, hallucination, druggy, dizziness, and confusion -- var/brainloss = owner.getBrainLoss() -- if(brainloss) -- owner.adjustBrainLoss(-brainloss) - if(owner.hallucination) - owner.hallucination = 0 - if(owner.druggy) -@@ -163,14 +153,12 @@ - if(prob(severity * 0.15)) - to_chat(owner, "\"[text2ratvar(pick(mania_messages))]\"") - owner.playsound_local(get_turf(motor), hum, severity, 1) -- if(owner.getBrainLoss() <= 50) -- owner.adjustBrainLoss(severity * 0.025) //2.5% of severity per second - 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 < 25) -- owner.dizziness = min(owner.dizziness + Floor(severity * 0.025), 25) //2.5% of severity per second above 20 severity -+ 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 + Floor(severity * 0.025), 25) //2.5% of severity per second above 20 severity -+ 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-- 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 e4adbb91ef..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 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 5b568970d9..da749b603a 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -1,295 +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 - +/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 + 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/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_helpers/proselytizer_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm index 529f38d832..5ede091ca4 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm @@ -5,60 +5,60 @@ //otherwise, return literally any non-list thing but preferably FALSE //returning TRUE won't produce the "cannot be proselytized" message and will still prevent proselytizing -/atom/proc/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/atom/proc/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Turf conversion -/turf/closed/wall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //four sheets of metal +/turf/closed/wall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) //four sheets of metal return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 4), "spawn_dir" = SOUTH) -/turf/closed/wall/mineral/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal +/turf/closed/wall/mineral/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) //two sheets of metal return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 2), "spawn_dir" = SOUTH) -/turf/closed/wall/mineral/iron/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal, five rods +/turf/closed/wall/mineral/iron/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) //two sheets of metal, five rods return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 2) - (POWER_ROD * 5), "spawn_dir" = SOUTH) -/turf/closed/wall/mineral/cult/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //no metal +/turf/closed/wall/mineral/cult/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) //no metal return list("operation_time" = 80, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL, "spawn_dir" = SOUTH) -/turf/closed/wall/shuttle/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal +/turf/closed/wall/shuttle/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) //two sheets of metal return list("operation_time" = 50, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_TOTAL - (POWER_METAL * 2), "spawn_dir" = SOUTH) -/turf/closed/wall/r_wall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/closed/wall/r_wall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE -/turf/closed/wall/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/closed/wall/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return list("operation_time" = 50, "new_obj_type" = /turf/open/floor/clockwork, "power_cost" = -POWER_WALL_MINUS_FLOOR, "spawn_dir" = SOUTH) -/turf/open/floor/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/open/floor/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(floor_tile == /obj/item/stack/tile/plasteel) new floor_tile(src) make_plating() playsound(src, 'sound/items/Crowbar.ogg', 10, 1) //clink return list("operation_time" = 30, "new_obj_type" = /turf/open/floor/clockwork, "power_cost" = POWER_FLOOR, "spawn_dir" = SOUTH) -/turf/open/floor/plating/asteroid/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/open/floor/plating/asteroid/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE -/turf/open/floor/plating/ashplanet/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/open/floor/plating/ashplanet/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE -/turf/open/floor/plating/lava/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/open/floor/plating/lava/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE -/turf/open/floor/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/turf/open/floor/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(locate(/obj/structure/table) in src) return FALSE if(is_blocked_turf(src, TRUE)) to_chat(user, "Something is in the way, preventing you from proselytizing [src] into a clockwork wall.") return TRUE var/operation_time = 100 - if(proselytizer.speed_multiplier > 0) + if(!GLOB.ratvar_awakens && proselytizer.speed_multiplier > 0) //if ratvar isn't awake, this always takes 10 seconds operation_time /= proselytizer.speed_multiplier return list("operation_time" = operation_time, "new_obj_type" = /turf/closed/wall/clockwork, "power_cost" = POWER_WALL_MINUS_FLOOR, "spawn_dir" = SOUTH) //False wall conversion -/obj/structure/falsewall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/falsewall/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/cost = POWER_WALL_MINUS_FLOOR if(ispath(mineral, /obj/item/stack/sheet/metal)) cost -= (POWER_METAL * (2 + mineral_amount)) //four sheets of metal, plus an assumption that the girder is also two @@ -66,17 +66,17 @@ cost -= (POWER_METAL * 2) //anything that doesn't use metal just has the girder return list("operation_time" = 50, "new_obj_type" = /obj/structure/falsewall/brass, "power_cost" = cost, "spawn_dir" = SOUTH) -/obj/structure/falsewall/iron/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) //two sheets of metal, two rods; special assumption +/obj/structure/falsewall/iron/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) //two sheets of metal, two rods; special assumption return list("operation_time" = 50, "new_obj_type" = /obj/structure/falsewall/brass, "power_cost" = POWER_WALL_MINUS_FLOOR - (POWER_METAL * 2) - (POWER_ROD * 2), "spawn_dir" = SOUTH) -/obj/structure/falsewall/reinforced/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/falsewall/reinforced/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE -/obj/structure/falsewall/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/falsewall/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Metal conversion -/obj/item/stack/tile/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/item/stack/tile/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(source) return FALSE var/amount_temp = get_amount() @@ -104,7 +104,7 @@ to_chat(user, "You need at least 20 floor tiles to convert into brass.") return TRUE -/obj/item/stack/rods/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/item/stack/rods/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(source) return FALSE if(proselytizer.metal_to_power) @@ -122,7 +122,7 @@ to_chat(user, "You need at least 10 rods to convert into brass.") return TRUE -/obj/item/stack/sheet/metal/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/item/stack/sheet/metal/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(source) return FALSE if(proselytizer.metal_to_power) @@ -140,7 +140,7 @@ to_chat(user, "You need at least 5 sheets of metal to convert into brass.") return TRUE -/obj/item/stack/sheet/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/item/stack/sheet/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(source) return FALSE if(proselytizer.metal_to_power) @@ -159,23 +159,23 @@ return TRUE //Brass directly to power -/obj/item/stack/tile/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/item/stack/tile/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) if(source) return FALSE return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "power_cost" = -(amount*POWER_FLOOR), "spawn_dir" = SOUTH) //Airlock conversion -/obj/machinery/door/airlock/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/machinery/door/airlock/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/doortype = /obj/machinery/door/airlock/clockwork if(glass) doortype = /obj/machinery/door/airlock/clockwork/brass return list("operation_time" = 60, "new_obj_type" = doortype, "power_cost" = POWER_WALL_TOTAL, "spawn_dir" = dir) -/obj/machinery/door/airlock/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/machinery/door/airlock/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Table conversion -/obj/structure/table/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/table/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/prosel_cost = POWER_STANDARD if(framestack == /obj/item/stack/rods) prosel_cost -= POWER_ROD*framestackamount @@ -187,10 +187,10 @@ prosel_cost -= POWER_PLASTEEL*buildstackamount return list("operation_time" = 20, "new_obj_type" = /obj/structure/table/reinforced/brass, "power_cost" = prosel_cost, "spawn_dir" = SOUTH) -/obj/structure/table/reinforced/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/table/reinforced/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE -/obj/structure/table_frame/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/table_frame/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/prosel_cost = POWER_FLOOR if(framestack == /obj/item/stack/rods) prosel_cost -= POWER_ROD*framestackamount @@ -198,11 +198,11 @@ prosel_cost -= POWER_FLOOR*framestackamount return list("operation_time" = 10, "new_obj_type" = /obj/structure/table_frame/brass, "power_cost" = prosel_cost, "spawn_dir" = SOUTH) -/obj/structure/table_frame/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/table_frame/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Window conversion -/obj/structure/window/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/window/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/windowtype = /obj/structure/window/reinforced/clockwork var/new_dir = TRUE var/prosel_time = 15 @@ -220,18 +220,18 @@ INVOKE_ASYNC(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/proselytize, G, user) return list("operation_time" = prosel_time, "new_obj_type" = windowtype, "power_cost" = prosel_cost, "spawn_dir" = dir, "dir_in_new" = new_dir) -/obj/structure/window/reinforced/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/window/reinforced/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Windoor conversion -/obj/machinery/door/window/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/machinery/door/window/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return list("operation_time" = 30, "new_obj_type" = /obj/machinery/door/window/clockwork, "power_cost" = POWER_STANDARD, "spawn_dir" = dir, "dir_in_new" = TRUE) -/obj/machinery/door/window/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/machinery/door/window/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Grille conversion -/obj/structure/grille/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/grille/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/grilletype = /obj/structure/grille/ratvar var/prosel_time = 15 if(broken) @@ -239,32 +239,32 @@ prosel_time = 5 return list("operation_time" = prosel_time, "new_obj_type" = grilletype, "power_cost" = 0, "spawn_dir" = dir) -/obj/structure/grille/ratvar/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/grille/ratvar/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Lattice conversion -/obj/structure/lattice/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/lattice/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return list("operation_time" = 0, "new_obj_type" = /obj/structure/lattice/clockwork, "power_cost" = 0, "spawn_dir" = SOUTH, "no_target_deletion" = TRUE) -/obj/structure/lattice/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/lattice/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) ratvar_act() //just in case we're the wrong type for some reason?? return FALSE -/obj/structure/lattice/catwalk/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/lattice/catwalk/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return list("operation_time" = 0, "new_obj_type" = /obj/structure/lattice/catwalk/clockwork, "power_cost" = 0, "spawn_dir" = SOUTH, "no_target_deletion" = TRUE) -/obj/structure/lattice/catwalk/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/lattice/catwalk/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) return FALSE //Girder conversion -/obj/structure/girder/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/girder/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) var/prosel_cost = POWER_GEAR - (POWER_METAL * 2) if(state == GIRDER_REINF_STRUTS || state == GIRDER_REINF) prosel_cost -= POWER_PLASTEEL return list("operation_time" = 20, "new_obj_type" = /obj/structure/destructible/clockwork/wall_gear, "power_cost" = prosel_cost, "spawn_dir" = SOUTH) //Hitting a clockwork structure will try to repair it. -/obj/structure/destructible/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/obj/structure/destructible/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) . = TRUE var/list/repair_values = list() if(!proselytizer.proselytizer_repair_checks(repair_values, src, user)) @@ -287,7 +287,7 @@ "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) +/obj/effect/clockwork/sigil/transmission/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) . = TRUE var/list/charge_values = list() if(!proselytizer.sigil_charge_checks(charge_values, src, user)) @@ -337,7 +337,7 @@ adjustHealth(-amount) //Hitting a ratvar'd silicon will also try to repair it. -/mob/living/silicon/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/mob/living/silicon/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) . = TRUE if(health == maxHealth) //if we're at maximum health, prosel the turf under us return FALSE @@ -346,7 +346,7 @@ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_they(TRUE)] [p_are()]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health.") //Same with clockwork mobs. -/mob/living/simple_animal/hostile/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/mob/living/simple_animal/hostile/clockwork/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) . = TRUE if(health == maxHealth) //if we're at maximum health, prosel the turf under us return FALSE @@ -355,7 +355,7 @@ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_they(TRUE)] [p_are()]"] now at [health]/[maxHealth] health.") //Cogscarabs get special interaction because they're drones and have innate self-heals/revives. -/mob/living/simple_animal/drone/cogscarab/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) +/mob/living/simple_animal/drone/cogscarab/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent) . = TRUE if(stat == DEAD) try_reactivate(user) //if we're at maximum health, prosel the turf under us @@ -374,17 +374,36 @@ proselytizer.repairing = null //Convert shards and gear bits directly to power -/obj/item/clockwork/alloy_shards/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "power_cost" = -POWER_STANDARD, "spawn_dir" = SOUTH) +/obj/item/clockwork/alloy_shards/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent, power_amount) + if(!power_amount) + power_amount = -POWER_STANDARD + if(proselytizer.can_use_power(power_amount)) + var/obj/effect/overlay/temp/ratvar/beam/itemconsume/B = new /obj/effect/overlay/temp/ratvar/beam/itemconsume(get_turf(src)) + B.pixel_x = pixel_x + B.pixel_y = pixel_y + if(!silent) //looper no looping + for(var/obj/item/clockwork/alloy_shards/S in get_turf(src)) //convert all other shards in the turf if we can + if(S == src) + continue //we want the shards to be proselytized after the main shard, thus this delay + addtimer(CALLBACK(proselytizer, /obj/item/clockwork/clockwork_proselytizer.proc/proselytize, S, user, TRUE), 0) + return list("operation_time" = 0, "new_obj_type" = null, "power_cost" = power_amount, "spawn_dir" = SOUTH) -/obj/item/clockwork/alloy_shards/medium/gear_bit/large/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.08), "spawn_dir" = SOUTH) +/obj/item/clockwork/alloy_shards/medium/gear_bit/large/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent, power_amount) + if(!power_amount) + power_amount = -(CLOCKCULT_POWER_UNIT*0.08) + return ..() -/obj/item/clockwork/alloy_shards/large/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.06), "spawn_dir" = SOUTH) +/obj/item/clockwork/alloy_shards/large/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent, power_amount) + if(!power_amount) + power_amount = -(CLOCKCULT_POWER_UNIT*0.06) + return ..() -/obj/item/clockwork/alloy_shards/medium/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.04), "spawn_dir" = SOUTH) +/obj/item/clockwork/alloy_shards/medium/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent, power_amount) + if(!power_amount) + power_amount = -(CLOCKCULT_POWER_UNIT*0.04) + return ..() -/obj/item/clockwork/alloy_shards/small/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "power_cost" = -(CLOCKCULT_POWER_UNIT*0.02), "spawn_dir" = SOUTH) +/obj/item/clockwork/alloy_shards/small/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer, silent, power_amount) + if(!power_amount) + power_amount = -(CLOCKCULT_POWER_UNIT*0.02) + return ..() 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/clock_components.dm b/code/game/gamemodes/clock_cult/clock_items/clock_components.dm index 16cfef5d72..f64b361ac1 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clock_components.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clock_components.dm @@ -162,14 +162,15 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/randomsinglesprite = FALSE var/randomspritemax = 2 + var/sprite_shift = 9 /obj/item/clockwork/alloy_shards/Initialize() . = ..() if(randomsinglesprite) replace_name_desc() icon_state = "[icon_state][rand(1, randomspritemax)]" - pixel_x = rand(-9, 9) - pixel_y = rand(-9, 9) + pixel_x = rand(-sprite_shift, sprite_shift) + pixel_y = rand(-sprite_shift, sprite_shift) /obj/item/clockwork/alloy_shards/proc/replace_name_desc() name = "replicant alloy shard" @@ -177,16 +178,21 @@ clockwork_desc = "A broken shard of replicant alloy. Can be proselytized for additional power." /obj/item/clockwork/alloy_shards/large + w_class = WEIGHT_CLASS_TINY randomsinglesprite = TRUE icon_state = "shard_large" + sprite_shift = 9 /obj/item/clockwork/alloy_shards/medium + w_class = WEIGHT_CLASS_TINY randomsinglesprite = TRUE icon_state = "shard_medium" + sprite_shift = 10 /obj/item/clockwork/alloy_shards/medium/gear_bit randomspritemax = 4 icon_state = "gear_bit" + sprite_shift = 12 /obj/item/clockwork/alloy_shards/medium/gear_bit/replace_name_desc() name = "gear bit" @@ -200,9 +206,11 @@ name = "complex gear bit" /obj/item/clockwork/alloy_shards/small + w_class = WEIGHT_CLASS_TINY randomsinglesprite = TRUE randomspritemax = 3 icon_state = "shard_small" + sprite_shift = 12 /obj/item/clockwork/alloy_shards/pinion_lock name = "pinion lock" 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 60df56b6ef..aa174adcd8 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_proselytizer.dm @@ -178,21 +178,24 @@ return TRUE //A note here; return values are for if we CAN BE PUT ON A TABLE, not IF WE ARE SUCCESSFUL, unless no_table_check is TRUE -/obj/item/clockwork/clockwork_proselytizer/proc/proselytize(atom/target, mob/living/user, no_table_check) +/obj/item/clockwork/clockwork_proselytizer/proc/proselytize(atom/target, mob/living/user, silent, no_table_check) if(!target || !user) return FALSE if(repairing) - to_chat(user, "You are currently repairing [repairing] with [src]!") + if(!silent) + 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]!") + if(!silent) + 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 + var/list/proselytize_values = target.proselytize_vals(user, src, silent) //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 if(!isturf(target)) //otherwise, if we didn't get TRUE and the original target wasn't a turf, try to proselytize the turf return proselytize(get_turf(target), user, no_table_check) - to_chat(user, "[target] cannot be proselytized!") + if(!silent) + to_chat(user, "[target] cannot be proselytized!") if(!no_table_check) return TRUE return FALSE @@ -207,19 +210,22 @@ var/target_type = target.type - if(!proselytize_checks(proselytize_values, target, target_type, user)) + if(!proselytize_checks(proselytize_values, target, target_type, user, silent)) return FALSE proselytize_values["operation_time"] *= speed_multiplier playsound(target, 'sound/machines/click.ogg', 50, 1) if(proselytize_values["operation_time"]) - user.visible_message("[user]'s [name] begins tearing apart [target]!", "You begin proselytizing [target]...") + if(!silent) + user.visible_message("[user]'s [name] begins tearing apart [target]!", "You begin proselytizing [target]...") if(!do_after(user, proselytize_values["operation_time"], target = target, extra_checks = CALLBACK(src, .proc/proselytize_checks, proselytize_values, target, target_type, user, TRUE))) return FALSE - user.visible_message("[user]'s [name] covers [target] in golden energy!", "You proselytize [target].") + if(!silent) + user.visible_message("[user]'s [name] covers [target] in golden energy!", "You proselytize [target].") else - user.visible_message("[user]'s [name] tears apart [target], covering it in golden energy!", "You proselytize [target].") + if(!silent) + user.visible_message("[user]'s [name] tears apart [target], covering it in golden energy!", "You proselytize [target].") playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) var/new_thing_type = proselytize_values["new_obj_type"] @@ -227,11 +233,12 @@ var/turf/T = target T.ChangeTurf(new_thing_type) else - if(proselytize_values["dir_in_new"]) - new new_thing_type(get_turf(target), proselytize_values["spawn_dir"]) //please verify that your new object actually wants to get a dir in New() - else - var/atom/A = new new_thing_type(get_turf(target)) - A.setDir(proselytize_values["spawn_dir"]) + if(new_thing_type) + if(proselytize_values["dir_in_new"]) + new new_thing_type(get_turf(target), proselytize_values["spawn_dir"]) //please verify that your new object actually wants to get a dir in New() + else + var/atom/A = new new_thing_type(get_turf(target)) + A.setDir(proselytize_values["spawn_dir"]) if(!proselytize_values["no_target_deletion"]) //for some cases where proselytize_vals() modifies the object but doesn't want it deleted qdel(target) modify_stored_power(-proselytize_values["power_cost"]) @@ -239,8 +246,13 @@ return TRUE return FALSE +//The following three procs are heavy wizardry. +//What these procs do is they take an existing list of values, which they then modify. +//This(modifying an existing object, in this case the list) is the only way to get information OUT of a do_after callback, which this is used as. + +//The proselytize check proc. /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) + if(!islist(proselytize_values) || QDELETED(target) || QDELETED(user)) return FALSE if(repairing || recharging) return FALSE @@ -259,11 +271,8 @@ return TRUE //The repair check proc. -//Is dark magic. Can probably kill you. -//What this proc does is it takes an existing list of values, which it modifies. -//This(modifying an existing object) is the only way to get information OUT of a do_after callback, which this is used as. /obj/item/clockwork/clockwork_proselytizer/proc/proselytizer_repair_checks(list/repair_values, atom/target, mob/user, silent) //Exists entirely to avoid an otherwise unreadable series of checks. - if(!islist(repair_values) || !target || QDELETED(target) || !user) + if(!islist(repair_values) || QDELETED(target) || QDELETED(user)) return FALSE if(isliving(target)) //standard checks for if we can affect the target var/mob/living/L = target @@ -302,9 +311,9 @@ return FALSE return TRUE -//checked constantly while charging from a sigil +//The sigil charge check proc. /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) + if(!islist(charge_values) || QDELETED(sigil) || QDELETED(user)) return FALSE if(can_use_power(RATVAR_POWER_CHECK)) return FALSE 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 aa1a07ac2f..21da8fab00 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -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) 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 580f5fbed5..fe96f57885 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm @@ -93,7 +93,7 @@ /obj/structure/destructible/clockwork/powered/clockwork_obelisk/process() if(!anchored) return - var/obj/effect/clockwork/spatial_gateway/SG = locate(/obj/effect/clockwork/spatial_gateway) + 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 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 a8dfb2dd4a..25f151def5 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, 0) + INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 0, null, FALSE, 0) /obj/structure/destructible/clockwork/massive/ratvar/Destroy() GLOB.ratvar_awakens-- @@ -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/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..098fbcdf26 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,223 @@ 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) || GLOB.cult_narsie) + 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_image) + GLOB.blood_target = null diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index a90aeb78bc..62559379c5 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" @@ -203,7 +214,7 @@ /obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands) . = list() if(!isinhands && current_charges) - . += mutable_appearance('icons/effects/effects.dmi', "shield-cult", MOB_LAYER + 0.01) + . += mutable_appearance('icons/effects/cult_effects.dmi', "shield-cult", MOB_LAYER + 0.01) /obj/item/clothing/suit/hooded/cultrobes/berserker name = "flagellant's robes" @@ -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 ce4abced72..069a422480 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -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/rune_spawn_action.dm b/code/game/gamemodes/cult/rune_spawn_action.dm new file mode 100644 index 0000000000..beffe924bc --- /dev/null +++ b/code/game/gamemodes/cult/rune_spawn_action.dm @@ -0,0 +1,70 @@ +//after a delay, creates a rune below you. for constructs creating runes. +/datum/action/innate/cult/create_rune + background_icon_state = "bg_cult" + var/obj/effect/rune/rune_type + var/cooldown = 0 + var/base_cooldown = 900 + var/scribe_time = 100 + var/damage_interrupt = TRUE + var/action_interrupt = TRUE + var/obj/effect/overlay/temp/cult/rune_spawn/rune_word_type + var/obj/effect/overlay/temp/cult/rune_spawn/rune_innerring_type + var/obj/effect/overlay/temp/cult/rune_spawn/rune_center_type + var/rune_color + +/datum/action/innate/cult/create_rune/IsAvailable() + if(!rune_type || cooldown > world.time) + return FALSE + return ..() + +/datum/action/innate/cult/create_rune/Activate() + var/chosen_keyword + if(!isturf(owner.loc)) + to_chat(owner, "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() @@ -248,8 +246,8 @@ structure_check() searches for nearby cultist structures required for the invoca cultist_desc = "warps everything above it to another chosen teleport rune." invocation = "Sas'so c'arta forbici!" icon_state = "2" - color = "#551A8B" - req_keyword = 1 + color = RUNE_COLOR_TELEPORT + req_keyword = TRUE var/listkey /obj/effect/rune/teleport/Initialize(mapload, set_keyword) @@ -296,15 +294,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) ..() @@ -324,9 +322,9 @@ structure_check() searches for nearby cultist structures required for the invoca req_cultists_text = "2 for conversion, 3 for living sacrifices and sacrifice targets." invocation = "Mah'weyh pleggh at e'ntrath!" icon_state = "3" - color = "#FFFFFF" + color = RUNE_COLOR_OFFER req_cultists = 1 - allow_excess_invokers = 1 + allow_excess_invokers = TRUE rune_in_use = FALSE /obj/effect/rune/convert/do_invoke_glow() @@ -347,7 +345,7 @@ structure_check() searches for nearby cultist structures required for the invoca rune_in_use = TRUE visible_message("[src] pulses blood red!") var/oldcolor = color - color = "#7D1717" + color = RUNE_COLOR_DARKRED var/mob/living/L = pick(myriad_targets) var/is_clock = is_servant_of_ratvar(L) var/is_convertable = is_convertable_to_cult(L) @@ -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)) @@ -444,14 +442,13 @@ structure_check() searches for nearby cultist structures required for the invoca invocation = "TOK-LYR RQA-NAP G'OLT-ULOFT!!" req_cultists = 9 icon = 'icons/effects/96x96.dmi' - color = "#7D1717" + color = RUNE_COLOR_DARKRED icon_state = "rune_large" pixel_x = -32 //So the big ol' 96x96 sprite shows up right 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,34 +467,21 @@ 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 - new /obj/singularity/narsie/large(T) //Causes Nar-Sie to spawn even if the rune has been removed + color = RUNE_COLOR_RED + SSticker.mode.eldergod = FALSE + new /obj/singularity/narsie/large/cult(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. if((istype(I, /obj/item/weapon/tome) && iscultist(user))) @@ -514,11 +498,11 @@ 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" + color = RUNE_COLOR_MEDIUMRED var/static/revives_used = 0 /obj/effect/rune/raise_dead/examine(mob/user) @@ -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! @@ -609,7 +593,7 @@ structure_check() searches for nearby cultist structures required for the invoca invocation = "Ta'gh fara'qha fel d'amar det!" icon_state = "5" allow_excess_invokers = 1 - color = "#4D94FF" + color = RUNE_COLOR_EMP /obj/effect/rune/emp/invoke(var/list/invokers) var/turf/E = get_turf(src) @@ -639,7 +623,7 @@ structure_check() searches for nearby cultist structures required for the invoca cultist_desc = "severs the link between one's spirit and body. This effect is taxing and one's physical body will take damage while this is active." invocation = "Fwe'sh mah erl nyag r'ya!" icon_state = "7" - color = "#7D1717" + color = RUNE_COLOR_DARKRED rune_in_use = 0 //One at a time, please! construct_invoke = 0 var/mob/living/affecting = null @@ -665,9 +649,9 @@ structure_check() searches for nearby cultist structures required for the invoca var/mob/living/user = invokers[1] ..() var/turf/T = get_turf(src) - rune_in_use = 1 + rune_in_use = TRUE affecting = user - user.color = "#7D1717" + user.add_atom_colour(RUNE_COLOR_DARKRED, ADMIN_COLOUR_PRIORITY) user.visible_message("[user] freezes statue-still, glowing an unearthly red.", \ "You see what lies beyond. All is revealed. While this is a wondrous experience, your physical form will waste away in this state. Hurry...") user.ghostize(1) @@ -675,7 +659,7 @@ structure_check() searches for nearby cultist structures required for the invoca if(!affecting) visible_message("[src] pulses gently before falling dark.") affecting = null //In case it's assigned to a number or something - rune_in_use = 0 + rune_in_use = FALSE return affecting.apply_damage(0.1, BRUTE) if(!(user in T)) @@ -685,9 +669,9 @@ structure_check() searches for nearby cultist structures required for the invoca if(user.key) user.visible_message("[user] slowly relaxes, the glow around [user.p_them()] dimming.", \ "You are re-united with your physical form. [src] releases its hold over you.") - user.color = initial(user.color) + user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED) user.Weaken(3) - rune_in_use = 0 + rune_in_use = FALSE affecting = null return if(user.stat == UNCONSCIOUS) @@ -695,14 +679,14 @@ structure_check() searches for nearby cultist structures required for the invoca var/mob/dead/observer/G = user.get_ghost() to_chat(G, "You feel the link between you and your body weakening... you must hurry!") if(user.stat == DEAD) - user.color = initial(user.color) - rune_in_use = 0 + user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED) + rune_in_use = FALSE affecting = null var/mob/dead/observer/G = user.get_ghost() to_chat(G, "You suddenly feel your physical form pass on. [src]'s exertion has killed you!") return sleep(1) - rune_in_use = 0 + rune_in_use = FALSE //Rite of the Corporeal Shield: When invoked, becomes solid and cannot be passed. Invoke again to undo. /obj/effect/rune/wall @@ -710,7 +694,7 @@ structure_check() searches for nearby cultist structures required for the invoca cultist_desc = "when invoked, makes a temporary invisible wall to block passage. Can be invoked again to reverse this." invocation = "Khari'd! Eske'te tannin!" icon_state = "1" - color = "#C80000" + color = RUNE_COLOR_MEDIUMRED CanAtmosPass = ATMOS_PASS_DENSITY var/density_timer var/recharging = FALSE @@ -769,7 +753,7 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/wall/proc/recharge() recharging = FALSE - add_atom_colour("#C80000", FIXED_COLOUR_PRIORITY) + add_atom_colour(RUNE_COLOR_MEDIUMRED, FIXED_COLOUR_PRIORITY) /obj/effect/rune/wall/proc/update_state() deltimer(density_timer) @@ -780,10 +764,10 @@ structure_check() searches for nearby cultist structures required for the invoca shimmer.alpha = 60 shimmer.color = "#701414" add_overlay(shimmer) - add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY) + add_atom_colour(RUNE_COLOR_RED, FIXED_COLOUR_PRIORITY) else cut_overlays() - add_atom_colour("#C80000", FIXED_COLOUR_PRIORITY) + add_atom_colour(RUNE_COLOR_MEDIUMRED, FIXED_COLOUR_PRIORITY) //Rite of Joined Souls: Summons a single cultist. /obj/effect/rune/summon @@ -793,7 +777,7 @@ structure_check() searches for nearby cultist structures required for the invoca req_cultists = 2 allow_excess_invokers = 1 icon_state = "5" - color = "#00FF00" + color = RUNE_COLOR_SUMMON /obj/effect/rune/summon/invoke(var/list/invokers) var/mob/living/user = invokers[1] @@ -838,7 +822,7 @@ structure_check() searches for nearby cultist structures required for the invoca cultist_desc = "boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers." invocation = "Dedo ol'btoh!" icon_state = "4" - color = "#C80000" + color = RUNE_COLOR_MEDIUMRED light_color = LIGHT_COLOR_LAVA req_cultists = 3 construct_invoke = 0 @@ -905,10 +889,12 @@ structure_check() searches for nearby cultist structures required for the invoca invocation = "Gal'h'rfikk harfrandid mud'gib!" //how the fuck do you pronounce this icon_state = "6" construct_invoke = 0 - color = "#C80000" + color = RUNE_COLOR_MEDIUMRED + 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.dust() + new_human.dropItemToGround(I, TRUE) + new_human.dust() \ No newline at end of file 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 166cb6f528..9a9d8c582b 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,79 +45,11 @@ 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" cultist_desc = "A single-use talisman that will teleport a user to a random rune of the same keyword." - color = "#551A8B" // purple + color = RUNE_COLOR_TELEPORT invocation = "Sas'so c'arta forbici!" health_cost = 5 creation_time = 80 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 c275ac790a..41016fa770 100644 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ b/code/game/gamemodes/devil/devil_game_mode.dm @@ -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 6029ec2c6d..700bfe5f3a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -257,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 3b9dce8c3b..a961ec48b1 100644 --- a/code/game/gamemodes/gang/dominator.dm +++ b/code/game/gamemodes/gang/dominator.dm @@ -1,4 +1,5 @@ #define DOM_BLOCKED_SPAM_CAP 6 +#define DOM_REQUIRED_TURFS 30 /obj/machinery/dominator name = "dominator" @@ -21,12 +22,12 @@ /proc/dominator_excessive_walls(atom/A) var/open = 0 - for(var/turf/T in circleviewturfs(center=A,radius=3)) - if(!istype(T, /turf/closed)) + for(var/turf/T in view(3, A)) + if(!isclosedturf(T)) open++ - if(open < 40) + if(open < DOM_REQUIRED_TURFS) return TRUE - else + else return FALSE /obj/machinery/dominator/tesla_act() @@ -62,7 +63,7 @@ var/time_remaining = gang.domination_time_remaining() if(time_remaining > 0) if(dominator_excessive_walls(src)) - gang.domination_timer += 2 + gang.domination_timer += 20 playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) if(spam_prevention < DOM_BLOCKED_SPAM_CAP) spam_prevention++ @@ -70,7 +71,7 @@ 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 + return . = TRUE playsound(loc, 'sound/items/timer.ogg', 10, 0) if(!warned && (time_remaining < 180)) @@ -208,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 12191ac44a..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 @@ -251,6 +257,7 @@ GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue"," /proc/determine_domination_time(var/datum/gang/G) 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// ////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 805cac552f..ba455e94e5 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -263,4 +263,4 @@ ganghud = new() /datum/gang/multiverse/income() - return + return \ No newline at end of file diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm index 724191c642..d626aa3b9a 100644 --- a/code/game/gamemodes/gang/gang_items.dm +++ b/code/game/gamemodes/gang/gang_items.dm @@ -131,7 +131,7 @@ id = "pistol_ammo" cost = 10 item_path = /obj/item/ammo_box/magazine/m10mm - + /datum/gang_item/weapon/sniper name = ".50cal Sniper Rifle" id = "sniper" @@ -156,8 +156,8 @@ id = "uzi_ammo" cost = 40 item_path = /obj/item/ammo_box/magazine/uzim9mm - - + + /////////////////// //EQUIPMENT /////////////////// @@ -171,7 +171,7 @@ id = "spraycan" cost = 5 item_path = /obj/item/toy/crayon/spraycan/gang - + /datum/gang_item/equipment/sharpener name = "Sharpener" id = "whetstone" @@ -305,15 +305,15 @@ if(obj.density) 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 an open space within three standard units so that walls do not interfere with the signal.
") + 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 f67bcad50a..c8c98e5d47 100644 --- a/code/game/gamemodes/gang/recaller.dm +++ b/code/game/gamemodes/gang/recaller.dm @@ -241,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/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 265688a15b..293b114b36 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -14,7 +14,7 @@ var/icon_reveal = "revenant_revealed" var/icon_stun = "revenant_stun" var/icon_drain = "revenant_draining" - var/stasis = 0 + var/stasis = FALSE incorporeal_move = 3 invisibility = INVISIBILITY_REVENANT health = INFINITY //Revenants don't use health, they use essence instead @@ -205,6 +205,7 @@ /mob/living/simple_animal/revenant/death() if(!revealed || stasis) //Revenants cannot die if they aren't revealed //or are already dead return 0 + 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 @@ -222,8 +223,7 @@ 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 = 0 - stasis = 1 + revealed = FALSE ghostize(0)//Don't re-enter invisible corpse return @@ -317,7 +317,7 @@ incorporeal_move = 3 invisibility = INVISIBILITY_REVENANT alpha=255 - stasis = 0 + stasis = FALSE //reforming 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 f3ddb6d4be..45f7c5262a 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -1,177 +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 +//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 + 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) - 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 + 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 + 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/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..c72152668d 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,13 +206,21 @@ 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 + var/obj/screen/alert/bloodsense/BS if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode) SSticker.mode.add_cultist(newstruct.mind, 0) + BS = newstruct.alerts.Find("bloodsense") if(iscultist(stoner) || cultoverride) 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.") + BS = newstruct.throw_alert("bloodsense", /obj/screen/alert/bloodsense) + if(BS) + BS.Cviewer = newstruct newstruct.cancel_camera() @@ -244,7 +258,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 +273,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 06e241896f..143d60be91 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -1,912 +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." - + 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/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." + +/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/bank_machine.dm b/code/game/machinery/bank_machine.dm index ace9b543d1..0ebae75da6 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -25,9 +25,6 @@ if(istype(I, /obj/item/stack/spacecash)) var/obj/item/stack/spacecash/C = I value = C.value * C.amount - if(istype(I, /obj/item/weapon/coin)) - var/obj/item/weapon/coin/C = I - value = C.value if(value) SSshuttle.points += value to_chat(user, "You deposit [I]. The station now has [SSshuttle.points] credits.") diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 0e5b78af7c..ec87cf6ba9 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -273,6 +273,17 @@ else if((mob_occupant.cloneloss <= (100 - heal_level))) connected_message("Cloning Process 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 (!mob_occupant || mob_occupant.loc != src) @@ -321,9 +332,7 @@ return else connected_message("Authorized Ejection") - SPEAK("An authorized ejection of [clonemind.name] has occurred.") - to_chat(user, "You force an emergency ejection. ") go_out() else @@ -380,10 +389,8 @@ 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) - icon_state = "pod_g" if(mob_occupant.mind != clonemind) clonemind.transfer_to(mob_occupant) @@ -399,12 +406,10 @@ go_out() /obj/machinery/clonepod/emp_act(severity) - 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 [mob_occupant.real_name] prematurely." ,0)) - go_out() ..() @@ -496,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/cloning.dm.rej b/code/game/machinery/cloning.dm.rej deleted file mode 100644 index 74ef688700..0000000000 --- a/code/game/machinery/cloning.dm.rej +++ /dev/null @@ -1,38 +0,0 @@ -diff a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm (rejected hunks) -@@ -311,15 +311,15 @@ - 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 -- var/mob/living/mob_occupant - connected_message("Authorized Ejection") - SPEAK("An authorized ejection of [clonemind.name] has occurred.") - to_chat(user, "You force an emergency ejection. ") -@@ -395,16 +395,10 @@ - go_out() - - /obj/machinery/clonepod/emp_act(severity) --<<<<<<< HEAD -- if((occupant || mess) && 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)) --======= -- if(isliving(occupant) && prob(100/(severity*efficiency))) -- var/mob/living/mob_occupant = occupant -+ 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 [mob_occupant.real_name] prematurely." ,0)) -->>>>>>> Changes /obj/machinery to have atom/movable occupants - go_out() - ..() - diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 643282ab4a..1fdfd61f07 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -43,7 +43,8 @@ /obj/item/weapon/grenade/chem_grenade/glitter/pink = 1, /obj/item/weapon/grenade/chem_grenade/glitter/blue = 1, /obj/item/weapon/grenade/chem_grenade/glitter/white = 1, - /obj/item/toy/eightball = 2) + /obj/item/toy/eightball = 2, + /obj/item/toy/windupToolbox = 2) light_color = LIGHT_COLOR_GREEN 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 48819f91e2..2d21b1aaf5 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -1,498 +1,502 @@ - -/obj/machinery/computer/cloning - name = "cloning console" - desc = "Used to clone people and manage DNA." - icon_screen = "dna" - icon_keyboard = "med_key" - circuit = /obj/item/weapon/circuitboard/computer/cloning - req_access = list(GLOB.access_heads) //Only used for record deletion right now. - var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. - var/list/pods //Linked cloning pods - var/temp = "Inactive" - var/scantemp_ckey - var/scantemp = "Ready to Scan" - var/menu = 1 //Which menu screen to display - var/list/records = list() - var/datum/data/record/active_record = null - var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything. - var/loading = 0 // Nice loading text - var/autoprocess = 0 - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/cloning/Initialize() - ..() - updatemodules(TRUE) - -/obj/machinery/computer/cloning/Destroy() - if(pods) - for(var/P in pods) - DetachCloner(P) - pods = null - return ..() - -/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.occupant && pod.clonemind == mind) - return null - if(pod.is_operational() && !(pod.occupant || pod.mess)) - return pod - -/obj/machinery/computer/cloning/proc/HasEfficientPod() - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.is_operational() && pod.efficiency > 5) - return TRUE - -/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.occupant && pod.clonemind == mind) - return pod - else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5) - . = pod - -/obj/machinery/computer/cloning/process() - if(!(scanner && LAZYLEN(pods) && autoprocess)) - return - - if(scanner.occupant && scanner.scan_level > 2) - scan_mob(scanner.occupant) - - for(var/datum/data/record/R in records) - var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"]) - - if(!pod) - return - - if(pod.occupant) - continue //how though? - - if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"])) - records -= R - -/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner) - src.scanner = findscanner() - if(findfirstcloner && !LAZYLEN(pods)) - findcloner() - -/obj/machinery/computer/cloning/proc/findscanner() - var/obj/machinery/dna_scannernew/scannerf = null - - // Loop through every direction - for(dir in list(NORTH,EAST,SOUTH,WEST)) - - // Try to find a scanner in that direction - scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) - - // If found and operational, return the scanner - if (!isnull(scannerf) && scannerf.is_operational()) - return scannerf - - // If no scanner was found, it will return null - return null - -/obj/machinery/computer/cloning/proc/findcloner() - var/obj/machinery/clonepod/podf = null - - for(dir in list(NORTH,EAST,SOUTH,WEST)) - - podf = locate(/obj/machinery/clonepod, get_step(src, dir)) - - if (!isnull(podf) && podf.is_operational()) - AttachCloner(podf) - -/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod) - if(!pod.connected) - pod.connected = src - LAZYADD(pods, pod) - -/obj/machinery/computer/cloning/proc/DetachCloner(obj/machinery/clonepod/pod) - pod.connected = null - LAZYREMOVE(pods, pod) - -/obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES - if (!src.diskette) - if(!user.drop_item()) - return - W.loc = src - src.diskette = W - to_chat(user, "You insert [W].") - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) - src.updateUsrDialog() - else if(istype(W,/obj/item/device/multitool)) - var/obj/item/device/multitool/P = W - - if(istype(P.buffer, /obj/machinery/clonepod)) - if(get_area(P.buffer) != get_area(src)) - to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-") - P.buffer = null - return - to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") - var/obj/machinery/clonepod/pod = P.buffer - if(pod.connected) - pod.connected.DetachCloner(pod) - AttachCloner(pod) - else - P.buffer = src - to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-") - return - else - return ..() - -/obj/machinery/computer/cloning/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/cloning/interact(mob/user) - user.set_machine(src) - add_fingerprint(user) - - if(..()) - return - - updatemodules(TRUE) - - var/dat = "" - dat += "Refresh" - - if(scanner && HasEfficientPod() && scanner.scan_level > 2) - if(!autoprocess) - dat += "Autoprocess" - else - dat += "Stop autoprocess" - else - dat += "Autoprocess" - dat += "

Cloning Pod Status

" - dat += "
[temp] 
" - - switch(src.menu) - if(1) - // Modules - if (isnull(src.scanner) || !LAZYLEN(pods)) - dat += "

Modules

" - //dat += "Reload Modules" - if (isnull(src.scanner)) - dat += "ERROR: No Scanner detected!
" - if (!LAZYLEN(pods)) - dat += "ERROR: No Pod detected
" - - // Scanner - if (!isnull(src.scanner)) - - var/mob/living/scanner_occupant = scanner.occupant +/obj/machinery/computer/cloning + name = "cloning console" + desc = "Used to clone people and manage DNA." + icon_screen = "dna" + icon_keyboard = "med_key" + circuit = /obj/item/weapon/circuitboard/computer/cloning + req_access = list(GLOB.access_heads) //Only used for record deletion right now. + var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. + var/list/pods //Linked cloning pods + var/temp = "Inactive" + var/scantemp_ckey + var/scantemp = "Ready to Scan" + var/menu = 1 //Which menu screen to display + var/list/records = list() + var/datum/data/record/active_record = null + var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything. + var/loading = 0 // Nice loading text + var/autoprocess = 0 - dat += "

Scanner Functions

" - - dat += "
" + light_color = LIGHT_COLOR_BLUE + +/obj/machinery/computer/cloning/Initialize() + ..() + updatemodules(TRUE) + +/obj/machinery/computer/cloning/Destroy() + if(pods) + for(var/P in pods) + DetachCloner(P) + pods = null + return ..() + +/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null) + if(pods) + for(var/P in pods) + var/obj/machinery/clonepod/pod = P + if(pod.occupant && pod.clonemind == mind) + return null + if(pod.is_operational() && !(pod.occupant || pod.mess)) + return pod + +/obj/machinery/computer/cloning/proc/HasEfficientPod() + if(pods) + for(var/P in pods) + var/obj/machinery/clonepod/pod = P + if(pod.is_operational() && pod.efficiency > 5) + return TRUE + +/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null) + if(pods) + for(var/P in pods) + var/obj/machinery/clonepod/pod = P + if(pod.occupant && pod.clonemind == mind) + return pod + else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5) + . = pod + +/obj/machinery/computer/cloning/process() + if(!(scanner && LAZYLEN(pods) && autoprocess)) + return + + if(scanner.occupant && scanner.scan_level > 2) + scan_occupant(scanner.occupant) + + for(var/datum/data/record/R in records) + var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"]) + + if(!pod) + return + + if(pod.occupant) + continue //how though? + + if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"])) + records -= R + +/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner) + src.scanner = findscanner() + if(findfirstcloner && !LAZYLEN(pods)) + findcloner() + +/obj/machinery/computer/cloning/proc/findscanner() + var/obj/machinery/dna_scannernew/scannerf = null + + // Loop through every direction + for(dir in list(NORTH,EAST,SOUTH,WEST)) + + // Try to find a scanner in that direction + scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) + + // If found and operational, return the scanner + if (!isnull(scannerf) && scannerf.is_operational()) + return scannerf + + // If no scanner was found, it will return null + return null + +/obj/machinery/computer/cloning/proc/findcloner() + var/obj/machinery/clonepod/podf = null + + for(dir in list(NORTH,EAST,SOUTH,WEST)) + + podf = locate(/obj/machinery/clonepod, get_step(src, dir)) + + if (!isnull(podf) && podf.is_operational()) + AttachCloner(podf) + +/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod) + if(!pod.connected) + pod.connected = src + LAZYADD(pods, pod) + +/obj/machinery/computer/cloning/proc/DetachCloner(obj/machinery/clonepod/pod) + pod.connected = null + LAZYREMOVE(pods, pod) + +/obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES + if (!src.diskette) + if(!user.drop_item()) + return + W.loc = src + src.diskette = W + to_chat(user, "You insert [W].") + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + src.updateUsrDialog() + else if(istype(W,/obj/item/device/multitool)) + var/obj/item/device/multitool/P = W + + if(istype(P.buffer, /obj/machinery/clonepod)) + if(get_area(P.buffer) != get_area(src)) + to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-") + P.buffer = null + return + to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") + var/obj/machinery/clonepod/pod = P.buffer + if(pod.connected) + pod.connected.DetachCloner(pod) + AttachCloner(pod) + else + P.buffer = src + to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-") + return + else + return ..() + +/obj/machinery/computer/cloning/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/computer/cloning/interact(mob/user) + user.set_machine(src) + add_fingerprint(user) + + if(..()) + return + + updatemodules(TRUE) + + var/dat = "" + dat += "Refresh" + + if(scanner && HasEfficientPod() && scanner.scan_level > 2) + if(!autoprocess) + dat += "Autoprocess" + else + dat += "Stop autoprocess" + else + dat += "Autoprocess" + dat += "

Cloning Pod Status

" + dat += "
[temp] 
" + + switch(src.menu) + if(1) + // Modules + if (isnull(src.scanner) || !LAZYLEN(pods)) + dat += "

Modules

" + //dat += "Reload Modules" + if (isnull(src.scanner)) + dat += "ERROR: No Scanner detected!
" + if (!LAZYLEN(pods)) + dat += "ERROR: No Pod detected
" + + // Scanner + if (!isnull(src.scanner)) + var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant) + + dat += "

Scanner Functions

" + + dat += "
" if(!scanner_occupant) - dat += "Scanner Unoccupied" - else if(loading) + dat += "Scanner Unoccupied" + else if(loading) dat += "[scanner_occupant] => Scanning..." - else + else if(scanner_occupant.ckey != scantemp_ckey) - scantemp = "Ready to Scan" + scantemp = "Ready to Scan" scantemp_ckey = scanner_occupant.ckey dat += "[scanner_occupant] => [scantemp]" - dat += "
" - + dat += "
" + if(scanner_occupant) - dat += "Start Scan" - dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" - else - dat += "Start Scan" - - // Database - dat += "

Database Functions

" - if (src.records.len && src.records.len > 0) - dat += "View Records ([src.records.len])
" - else - dat += "View Records (0)
" - if (src.diskette) - dat += "Eject Disk
" - - - - if(2) - dat += "

Current records

" - dat += "<< Back

" - for(var/datum/data/record/R in records) - dat += "

[R.fields["name"]]

Scan ID [R.fields["id"]] View Record" - if(3) - dat += "

Selected Record

" - dat += "<< Back
" - - if (!src.active_record) - dat += "Record not found." - else - dat += "

[src.active_record.fields["name"]]

" - dat += "Scan ID [src.active_record.fields["id"]] Clone
" - - var/obj/item/weapon/implant/health/H = locate(src.active_record.fields["imp"]) - - if ((H) && (istype(H))) - dat += "Health Implant Data:
[H.sensehealth()]

" - else - dat += "Unable to locate Health Implant.

" - - dat += "Unique Identifier:
[src.active_record.fields["UI"]]
" - dat += "Structural Enzymes:
[src.active_record.fields["SE"]]
" - - if(diskette && diskette.fields) - dat += "
" - dat += "

Inserted Disk

" - dat += "Contents: " - var/list/L = list() - if(diskette.fields["UI"]) - L += "Unique Identifier" - if(diskette.fields["UE"] && diskette.fields["name"] && diskette.fields["blood_type"]) - L += "Unique Enzymes" - if(diskette.fields["SE"]) - L += "Structural Enzymes" - dat += english_list(L, "Empty", " + ", " + ") - dat += "
Load from Disk" - - dat += "
Save to Disk" - dat += "
" - - dat += "Delete Record" - - if(4) - if (!src.active_record) - src.menu = 2 - dat = "[src.temp]
" - dat += "

Confirm Record Deletion

" - - dat += "Scan card to confirm.
" - dat += "Cancel" - - - var/datum/browser/popup = new(user, "cloning", "Cloning System Control") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - -/obj/machinery/computer/cloning/Topic(href, href_list) - if(..()) - return - - if(loading) - return - - if(href_list["task"]) - switch(href_list["task"]) - if("autoprocess") - autoprocess = 1 - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - if("stopautoprocess") - autoprocess = 0 - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - - else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational()) - scantemp = "" - - loading = 1 - src.updateUsrDialog() - playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) - say("Initiating scan...") - - spawn(20) - src.scan_mob(scanner.occupant) - - loading = 0 - src.updateUsrDialog() - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - - - //No locking an open scanner. - else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational()) - if ((!scanner.locked) && (scanner.occupant)) - scanner.locked = 1 - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - else - scanner.locked = 0 - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - - else if(href_list["view_rec"]) - playsound(src, "terminal_type", 25, 0) - src.active_record = find_record("id", href_list["view_rec"], records) - if(active_record) - if(!active_record.fields["ckey"]) - records -= active_record - active_record = null - src.temp = "Record Corrupt" - else - src.menu = 3 - else - src.temp = "Record missing." - - else if (href_list["del_rec"]) - if ((!src.active_record) || (src.menu < 3)) - return - if (src.menu == 3) //If we are viewing a record, confirm deletion - src.temp = "Delete record?" - src.menu = 4 - playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) - - else if (src.menu == 4) - var/obj/item/weapon/card/id/C = usr.get_active_held_item() - if (istype(C)||istype(C, /obj/item/device/pda)) - if(src.check_access(C)) - src.temp = "[src.active_record.fields["name"]] => Record deleted." - src.records.Remove(active_record) - active_record = null - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - src.menu = 2 - else - src.temp = "Access Denied." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - - else if (href_list["disk"]) //Load or eject. - switch(href_list["disk"]) - if("load") - if (!diskette || !istype(diskette.fields) || !diskette.fields["name"] || !diskette.fields) - src.temp = "Load error." - src.updateUsrDialog() - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - return - if (!src.active_record) - src.temp = "Record error." - src.menu = 1 - src.updateUsrDialog() - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - return - - for(var/key in diskette.fields) - src.active_record.fields[key] = diskette.fields[key] - src.temp = "Load successful." - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - - if("eject") - if(src.diskette) - src.diskette.loc = src.loc - src.diskette = null - playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) - if("save") - if(!diskette || diskette.read_only || !active_record || !active_record.fields) - src.temp = "Save error." - src.updateUsrDialog() - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - return - - diskette.fields = active_record.fields.Copy() - diskette.name = "data disk - '[src.diskette.fields["name"]]'" - src.temp = "Save successful." - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - - else if (href_list["refresh"]) - src.updateUsrDialog() - playsound(src, "terminal_type", 25, 0) - - else if (href_list["clone"]) - var/datum/data/record/C = find_record("id", href_list["clone"], records) - //Look for that player! They better be dead! - if(C) - var/obj/machinery/clonepod/pod = GetAvailablePod() - //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs. - if(!LAZYLEN(pods)) - temp = "No Clonepods detected." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - else if(!pod) - temp = "No Clonepods available." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - else if(!config.revival_cloning) - temp = "Unable to initiate cloning cycle." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - else if(pod.occupant) - temp = "Cloning cycle already in progress." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"])) - temp = "[C.fields["name"]] => Cloning cycle in progress..." - playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - records.Remove(C) - if(active_record == C) - active_record = null - menu = 1 - else - temp = "[C.fields["name"]] => Initialisation failure." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - - else - temp = "Data corruption." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - - else if (href_list["menu"]) - src.menu = text2num(href_list["menu"]) - playsound(src, "terminal_type", 25, 0) - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - -/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject) - if (!istype(subject)) - 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) - 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)) - 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)) - scantemp = "Mental interface failure." - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - return - if (find_record("ckey", subject.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) - // 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 - 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 - var/obj/item/weapon/implant/health/imp - for(var/obj/item/weapon/implant/health/HI in subject.implants) - imp = HI - break - if(!imp) - imp = new /obj/item/weapon/implant/health(subject) - imp.implant(subject) - 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) + dat += "Start Scan" + dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]" + else + dat += "Start Scan" + + // Database + dat += "

Database Functions

" + if (src.records.len && src.records.len > 0) + dat += "View Records ([src.records.len])
" + else + dat += "View Records (0)
" + if (src.diskette) + dat += "Eject Disk
" + + + + if(2) + dat += "

Current records

" + dat += "<< Back

" + for(var/datum/data/record/R in records) + dat += "

[R.fields["name"]]

Scan ID [R.fields["id"]] View Record" + if(3) + dat += "

Selected Record

" + dat += "<< Back
" + + if (!src.active_record) + dat += "Record not found." + else + dat += "

[src.active_record.fields["name"]]

" + dat += "Scan ID [src.active_record.fields["id"]] Clone
" + + var/obj/item/weapon/implant/health/H = locate(src.active_record.fields["imp"]) + + if ((H) && (istype(H))) + dat += "Health Implant Data:
[H.sensehealth()]

" + else + dat += "Unable to locate Health Implant.

" + + dat += "Unique Identifier:
[src.active_record.fields["UI"]]
" + dat += "Structural Enzymes:
[src.active_record.fields["SE"]]
" + + if(diskette && diskette.fields) + dat += "
" + dat += "

Inserted Disk

" + dat += "Contents: " + var/list/L = list() + if(diskette.fields["UI"]) + L += "Unique Identifier" + if(diskette.fields["UE"] && diskette.fields["name"] && diskette.fields["blood_type"]) + L += "Unique Enzymes" + if(diskette.fields["SE"]) + L += "Structural Enzymes" + dat += english_list(L, "Empty", " + ", " + ") + dat += "
Load from Disk" + + dat += "
Save to Disk" + dat += "
" + + dat += "Delete Record" + + if(4) + if (!src.active_record) + src.menu = 2 + dat = "[src.temp]
" + dat += "

Confirm Record Deletion

" + + dat += "Scan card to confirm.
" + dat += "Cancel" + + + var/datum/browser/popup = new(user, "cloning", "Cloning System Control") + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + +/obj/machinery/computer/cloning/Topic(href, href_list) + if(..()) + return + + if(loading) + return + + if(href_list["task"]) + switch(href_list["task"]) + if("autoprocess") + autoprocess = 1 + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + if("stopautoprocess") + autoprocess = 0 + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + + else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational()) + scantemp = "" + + loading = 1 + src.updateUsrDialog() + playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) + say("Initiating scan...") + + spawn(20) + src.scan_occupant(scanner.occupant) + + loading = 0 + src.updateUsrDialog() + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + + + //No locking an open scanner. + else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational()) + if ((!scanner.locked) && (scanner.occupant)) + scanner.locked = 1 + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + else + scanner.locked = 0 + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + + else if(href_list["view_rec"]) + playsound(src, "terminal_type", 25, 0) + src.active_record = find_record("id", href_list["view_rec"], records) + if(active_record) + if(!active_record.fields["ckey"]) + records -= active_record + active_record = null + src.temp = "Record Corrupt" + else + src.menu = 3 + else + src.temp = "Record missing." + + else if (href_list["del_rec"]) + if ((!src.active_record) || (src.menu < 3)) + return + if (src.menu == 3) //If we are viewing a record, confirm deletion + src.temp = "Delete record?" + src.menu = 4 + playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) + + else if (src.menu == 4) + var/obj/item/weapon/card/id/C = usr.get_active_held_item() + if (istype(C)||istype(C, /obj/item/device/pda)) + if(src.check_access(C)) + src.temp = "[src.active_record.fields["name"]] => Record deleted." + src.records.Remove(active_record) + active_record = null + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + src.menu = 2 + else + src.temp = "Access Denied." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + + else if (href_list["disk"]) //Load or eject. + switch(href_list["disk"]) + if("load") + if (!diskette || !istype(diskette.fields) || !diskette.fields["name"] || !diskette.fields) + src.temp = "Load error." + src.updateUsrDialog() + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + return + if (!src.active_record) + src.temp = "Record error." + src.menu = 1 + src.updateUsrDialog() + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + return + + for(var/key in diskette.fields) + src.active_record.fields[key] = diskette.fields[key] + src.temp = "Load successful." + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + + if("eject") + if(src.diskette) + src.diskette.loc = src.loc + src.diskette = null + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0) + if("save") + if(!diskette || diskette.read_only || !active_record || !active_record.fields) + src.temp = "Save error." + src.updateUsrDialog() + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + return + + diskette.fields = active_record.fields.Copy() + diskette.name = "data disk - '[src.diskette.fields["name"]]'" + src.temp = "Save successful." + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + + else if (href_list["refresh"]) + src.updateUsrDialog() + playsound(src, "terminal_type", 25, 0) + + else if (href_list["clone"]) + var/datum/data/record/C = find_record("id", href_list["clone"], records) + //Look for that player! They better be dead! + if(C) + var/obj/machinery/clonepod/pod = GetAvailablePod() + //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs. + if(!LAZYLEN(pods)) + temp = "No Clonepods detected." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + else if(!pod) + temp = "No Clonepods available." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + else if(!config.revival_cloning) + temp = "Unable to initiate cloning cycle." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + else if(pod.occupant) + temp = "Cloning cycle already in progress." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"])) + temp = "[C.fields["name"]] => Cloning cycle in progress..." + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) + records.Remove(C) + if(active_record == C) + active_record = null + menu = 1 + else + temp = "[C.fields["name"]] => Initialisation failure." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + + else + temp = "Data corruption." + playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) + + else if (href_list["menu"]) + src.menu = text2num(href_list["menu"]) + playsound(src, "terminal_type", 25, 0) + + src.add_fingerprint(usr) + src.updateUsrDialog() + return + +/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(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((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 ((!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", 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(dna.species) + // We store the instance rather than the path, because some + // species (abductors, slimepeople) store state in their + // species datums + R.fields["mrace"] = dna.species + else + var/datum/species/rando_race = pick(config.roundstart_races) + R.fields["mrace"] = rando_race.type + + 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 mob_occupant.implants) + imp = HI + break + if(!imp) + imp = new /obj/item/weapon/implant/health(mob_occupant) + imp.implant(mob_occupant) + R.fields["imp"] = "\ref[imp]" + + 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/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 0c2894f056..214163c739 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -1,172 +1,172 @@ - - - -/obj/machinery/computer/robotics - name = "robotics control console" - desc = "Used to remotely lockdown or detonate linked Cyborgs." - icon_screen = "robot" - icon_keyboard = "rd_key" - req_access = list(GLOB.access_robotics) - circuit = /obj/item/weapon/circuitboard/computer/robotics - var/temp = null - - light_color = LIGHT_COLOR_PINK - -/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R) - if(!istype(R)) - return 0 - if(isAI(user)) - if (R.connected_ai != user) - return 0 - if(iscyborg(user)) - if (R != user) - return 0 - if(R.scrambledcodes) - return 0 - return 1 - -/obj/machinery/computer/robotics/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/robotics/interact(mob/user) - if (src.z > 6) - to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") - return - user.set_machine(src) - var/dat - var/robots = 0 - for(var/mob/living/silicon/robot/R in GLOB.mob_list) - if(!can_control(user, R)) - continue - robots++ - dat += "[R.name] |" - if(R.stat) - dat += " Not Responding |" - else if (!R.canmove) - dat += " Locked Down |" - else - dat += " Operating Normally |" - if (!R.canmove) - else if(R.cell) - dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" - else - dat += " No Cell Installed |" - if(R.module) - dat += " Module Installed ([R.module.name]) |" - else - dat += " No Module Installed |" - if(R.connected_ai) - dat += " Slaved to [R.connected_ai.name] |" - else - dat += " Independent from AI |" - if(issilicon(user) || IsAdminGhost(user)) - if(is_servant_of_ratvar(user) && user != R) - dat += "(Convert) " - else if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate)) - dat += "(Hack) " - dat += "([R.canmove ? "Lockdown" : "Release"]) " - dat += "(Destroy)" - dat += "
" - - if(!robots) - dat += "No Cyborg Units detected within access parameters." - dat += "
" - - var/drones = 0 - for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) - if(D.hacked) - continue - drones++ - dat += "[D.name] |" - if(D.stat) - dat += " Not Responding |" - dat += "(Destroy)" - dat += "
" - - if(!drones) - dat += "No Drone Units detected within access parameters." - - var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - return - -/obj/machinery/computer/robotics/Topic(href, href_list) - if(..()) - return - - if (href_list["temp"]) - src.temp = null - - else if (href_list["killbot"]) - if(src.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs - if(can_control(usr, R)) - var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm" && can_control(usr, R) && !..()) - if(R.syndicate && R.emagged) - to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.") - if(R.connected_ai) - to_chat(R.connected_ai, "

ALERT - Cyborg detonation detected: [R.name]
") - R.ResetSecurityCodes() - else + + + +/obj/machinery/computer/robotics + name = "robotics control console" + desc = "Used to remotely lockdown or detonate linked Cyborgs." + icon_screen = "robot" + icon_keyboard = "rd_key" + req_access = list(GLOB.access_robotics) + circuit = /obj/item/weapon/circuitboard/computer/robotics + var/temp = null + + light_color = LIGHT_COLOR_PINK + +/obj/machinery/computer/robotics/proc/can_control(mob/user, mob/living/silicon/robot/R) + if(!istype(R)) + return 0 + if(isAI(user)) + if (R.connected_ai != user) + return 0 + if(iscyborg(user)) + if (R != user) + return 0 + if(R.scrambledcodes) + return 0 + return 1 + +/obj/machinery/computer/robotics/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/computer/robotics/interact(mob/user) + if (src.z > 6) + to_chat(user, "Unable to establish a connection: \black You're too far away from the station!") + return + user.set_machine(src) + var/dat + var/robots = 0 + for(var/mob/living/silicon/robot/R in GLOB.mob_list) + if(!can_control(user, R)) + continue + robots++ + dat += "[R.name] |" + if(R.stat) + dat += " Not Responding |" + else if (!R.canmove) + dat += " Locked Down |" + else + dat += " Operating Normally |" + if (!R.canmove) + else if(R.cell) + dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" + else + dat += " No Cell Installed |" + if(R.module) + dat += " Module Installed ([R.module.name]) |" + else + dat += " No Module Installed |" + if(R.connected_ai) + dat += " Slaved to [R.connected_ai.name] |" + else + dat += " Independent from AI |" + if(issilicon(user) || IsAdminGhost(user)) + if(is_servant_of_ratvar(user) && user != R) + dat += "(Convert) " + else if(((issilicon(user) && is_special_character(user)) || IsAdminGhost(user)) && !R.emagged && (user != R || R.syndicate)) + dat += "(Hack) " + dat += "([R.canmove ? "Lockdown" : "Release"]) " + dat += "(Destroy)" + dat += "
" + + if(!robots) + dat += "No Cyborg Units detected within access parameters." + dat += "
" + + var/drones = 0 + for(var/mob/living/simple_animal/drone/D in GLOB.mob_list) + if(D.hacked) + continue + drones++ + dat += "[D.name] |" + if(D.stat) + dat += " Not Responding |" + dat += "(Destroy)" + dat += "
" + + if(!drones) + dat += "No Drone Units detected within access parameters." + + var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/robotics/Topic(href, href_list) + if(..()) + return + + if (href_list["temp"]) + src.temp = null + + else if (href_list["killbot"]) + if(src.allowed(usr)) + var/mob/living/silicon/robot/R = locate(href_list["killbot"]) in GLOB.silicon_mobs + if(can_control(usr, R)) + var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") + if(choice == "Confirm" && can_control(usr, R) && !..()) + if(R.syndicate && R.emagged) + to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.") + if(R.connected_ai) + to_chat(R.connected_ai, "

ALERT - Cyborg detonation detected: [R.name]
") + R.ResetSecurityCodes() + else 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]
") - R.self_destruct() - else - to_chat(usr, "Access Denied.") - - else if (href_list["stopbot"]) - if(src.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs - 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) && !..()) + log_game("\[key_name(usr)] detonated [key_name(R)]!") + if(R.connected_ai) + to_chat(R.connected_ai, "

ALERT - Cyborg detonation detected: [R.name]
") + R.self_destruct() + else + to_chat(usr, "Access Denied.") + + else if (href_list["stopbot"]) + if(src.allowed(usr)) + var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs + 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("[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!"]") - if(R.connected_ai) - to_chat(R.connected_ai, "[!R.lockcharge ? "NOTICE - Cyborg lockdown lifted" : "ALERT - Cyborg lockdown detected"]: [R.name]
") - - else - to_chat(usr, "Access Denied.") - - else if (href_list["magbot"]) - if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr)) - var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs - if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R)) - log_game("[key_name(usr)] emagged [R.name] using robotic console!") - message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") - R.SetEmagged(1) - if(is_special_character(R)) - R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes - - else if(href_list["convert"]) - if(issilicon(usr) && is_special_character(usr)) - var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs - if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr) - log_game("[key_name(usr)] converted [R.name] using robotic console!") - message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!") - add_servant_of_ratvar(R) - - else if (href_list["killdrone"]) - if(src.allowed(usr)) - var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"]) - if(D.hacked) - to_chat(usr, "ERROR: [D] is not responding to external commands.") - else - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, D) - s.start() - D.visible_message("\the [D] self destructs!") - D.gib() - - src.updateUsrDialog() - return + 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!"]") + if(R.connected_ai) + to_chat(R.connected_ai, "[!R.lockcharge ? "NOTICE - Cyborg lockdown lifted" : "ALERT - Cyborg lockdown detected"]: [R.name]
") + + else + to_chat(usr, "Access Denied.") + + else if (href_list["magbot"]) + if((issilicon(usr) && is_special_character(usr)) || IsAdminGhost(usr)) + var/mob/living/silicon/robot/R = locate(href_list["magbot"]) in GLOB.silicon_mobs + if(istype(R) && !R.emagged && ((R.syndicate && R == usr) || R.connected_ai == usr || IsAdminGhost(usr)) && !R.scrambledcodes && can_control(usr, R)) + log_game("[key_name(usr)] emagged [R.name] using robotic console!") + message_admins("[key_name_admin(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") + R.SetEmagged(1) + if(is_special_character(R)) + R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes + + else if(href_list["convert"]) + if(issilicon(usr) && is_special_character(usr)) + var/mob/living/silicon/robot/R = locate(href_list["convert"]) in GLOB.silicon_mobs + if(istype(R) && !is_servant_of_ratvar(R) && is_servant_of_ratvar(usr) && R.connected_ai == usr) + log_game("[key_name(usr)] converted [R.name] using robotic console!") + message_admins("[key_name_admin(usr)] converted cyborg [key_name_admin(R)] using robotic console!") + add_servant_of_ratvar(R) + + else if (href_list["killdrone"]) + if(src.allowed(usr)) + var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"]) + if(D.hacked) + to_chat(usr, "ERROR: [D] is not responding to external commands.") + else + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, D) + s.start() + D.visible_message("\the [D] self destructs!") + D.gib() + + src.updateUsrDialog() + return diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index fd026e4686..98450453bd 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -1,223 +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) +#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) + 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) + 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 - + 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.
" + + 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 += "

" + + + 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 += "
" - + 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() - + 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 + + 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 d572b3e9dc..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,22 +113,19 @@ ..() // search for ghosts, if the corpse is empty and the scanner is connected to a cloner - var/mob/living/mob_occupant = occupant - if(mob_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))) + 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) @@ -158,4 +163,4 @@ if(..(user,1,0)) //don't set the machine, since there's no dialog return - toggle_open(user) + toggle_open(user) \ No newline at end of file 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/doors/door.dm b/code/game/machinery/doors/door.dm index 4e076e3338..b71aeaca8d 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -12,6 +12,7 @@ max_integrity = 350 armor = list(melee = 30, bullet = 30, laser = 20, energy = 20, bomb = 10, bio = 100, rad = 100, fire = 80, acid = 70) CanAtmosPass = ATMOS_PASS_DENSITY + flags = PREVENT_CLICK_UNDER var/secondsElectrified = 0 var/shockedby = list() 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/hologram.dm b/code/game/machinery/hologram.dm index 03ec33ca25..7cf0b69d7d 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -1,396 +1,395 @@ -/* 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) - outgoing_call = null - - 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.languages = user.languages - 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 +/* 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 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.copy_known_languages_from(user,replace = TRUE) + + 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/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 56b13f0e46..6bab77fd6f 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -87,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) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index c65c0029ff..e683b77097 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -1,211 +1,211 @@ -#define SAFETY_COOLDOWN 100 - -/obj/machinery/recycler - name = "recycler" - desc = "A large crushing machine used to recycle small items inefficiently. There are lights on the side." - icon = 'icons/obj/recycling.dmi' - icon_state = "grinder-o0" - layer = ABOVE_ALL_MOB_LAYER // Overhead - anchored = 1 - density = 1 - var/safety_mode = FALSE // Temporarily stops machine if it detects a mob - var/icon_name = "grinder-o" - var/blood = 0 - var/eat_dir = WEST - var/amount_produced = 50 - var/datum/material_container/materials - var/crush_damage = 1000 - var/eat_victim_items = TRUE - var/item_recycle_sound = 'sound/items/Welder.ogg' - -/obj/machinery/recycler/New() - ..() - materials = new /datum/material_container(src, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null) - B.apply_default_parts(src) - update_icon() - -/obj/item/weapon/circuitboard/machine/recycler - name = "Recycler (Machine Board)" - build_path = /obj/machinery/recycler - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/machinery/recycler/RefreshParts() - var/amt_made = 0 - var/mat_mod = 0 - for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) - mat_mod = 2 * B.rating - mat_mod *= 50000 - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - amt_made = 12.5 * M.rating //% of materials salvaged - materials.max_amount = mat_mod - amount_produced = min(50, amt_made) + 50 - -/obj/machinery/recycler/examine(mob/user) - ..() - to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].") - to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].") - to_chat(user, "The safety-sensors status light is [emagged ? "off" : "on"].") - -/obj/machinery/recycler/power_change() - ..() - update_icon() - - -/obj/machinery/recycler/attackby(obj/item/I, mob/user, params) - if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) - return - - if(exchange_parts(user, I)) - return - - if(default_pry_open(I)) - return - - if(default_unfasten_wrench(user, I)) - return - - if(default_deconstruction_crowbar(I)) - return - return ..() - -/obj/machinery/recycler/emag_act(mob/user) - if(!emagged) - emagged = TRUE - if(safety_mode) - safety_mode = FALSE - update_icon() - playsound(src.loc, "sparks", 75, 1, -1) - to_chat(user, "You use the cryptographic sequencer on the [src.name].") - -/obj/machinery/recycler/update_icon() - ..() - var/is_powered = !(stat & (BROKEN|NOPOWER)) - if(safety_mode) - is_powered = FALSE - icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end - -// This is purely for admin possession !FUN!. -/obj/machinery/recycler/Bump(atom/movable/AM) - ..() - if(AM) - Bumped(AM) - - -/obj/machinery/recycler/Bumped(atom/movable/AM) - - if(stat & (BROKEN|NOPOWER)) - return - if(!anchored) - return - if(safety_mode) - return - - var/move_dir = get_dir(loc, AM.loc) - if(move_dir == eat_dir) - eat(AM) - -/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) - var/list/to_eat - if(istype(AM0, /obj/item)) - to_eat = AM0.GetAllContents() - else - to_eat = list(AM0) - - var/items_recycled = 0 - - for(var/i in to_eat) - var/atom/movable/AM = i - var/obj/item/bodypart/head/as_head = AM - var/obj/item/device/mmi/as_mmi = AM +#define SAFETY_COOLDOWN 100 + +/obj/machinery/recycler + name = "recycler" + desc = "A large crushing machine used to recycle small items inefficiently. There are lights on the side." + icon = 'icons/obj/recycling.dmi' + icon_state = "grinder-o0" + layer = ABOVE_ALL_MOB_LAYER // Overhead + anchored = 1 + density = 1 + var/safety_mode = FALSE // Temporarily stops machine if it detects a mob + var/icon_name = "grinder-o" + var/blood = 0 + var/eat_dir = WEST + var/amount_produced = 50 + var/datum/material_container/materials + var/crush_damage = 1000 + var/eat_victim_items = TRUE + var/item_recycle_sound = 'sound/items/Welder.ogg' + +/obj/machinery/recycler/New() + ..() + materials = new /datum/material_container(src, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM)) + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null) + B.apply_default_parts(src) + update_icon() + +/obj/item/weapon/circuitboard/machine/recycler + name = "Recycler (Machine Board)" + build_path = /obj/machinery/recycler + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/machinery/recycler/RefreshParts() + var/amt_made = 0 + var/mat_mod = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) + mat_mod = 2 * B.rating + mat_mod *= 50000 + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + amt_made = 12.5 * M.rating //% of materials salvaged + materials.max_amount = mat_mod + amount_produced = min(50, amt_made) + 50 + +/obj/machinery/recycler/examine(mob/user) + ..() + to_chat(user, "The power light is [(stat & NOPOWER) ? "off" : "on"].") + to_chat(user, "The safety-mode light is [safety_mode ? "on" : "off"].") + to_chat(user, "The safety-sensors status light is [emagged ? "off" : "on"].") + +/obj/machinery/recycler/power_change() + ..() + update_icon() + + +/obj/machinery/recycler/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) + return + + if(exchange_parts(user, I)) + return + + if(default_pry_open(I)) + return + + if(default_unfasten_wrench(user, I)) + return + + if(default_deconstruction_crowbar(I)) + return + return ..() + +/obj/machinery/recycler/emag_act(mob/user) + if(!emagged) + emagged = TRUE + if(safety_mode) + safety_mode = FALSE + update_icon() + playsound(src.loc, "sparks", 75, 1, -1) + to_chat(user, "You use the cryptographic sequencer on the [src.name].") + +/obj/machinery/recycler/update_icon() + ..() + var/is_powered = !(stat & (BROKEN|NOPOWER)) + if(safety_mode) + is_powered = FALSE + icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end + +// This is purely for admin possession !FUN!. +/obj/machinery/recycler/Bump(atom/movable/AM) + ..() + if(AM) + Bumped(AM) + + +/obj/machinery/recycler/Bumped(atom/movable/AM) + + if(stat & (BROKEN|NOPOWER)) + return + if(!anchored) + return + if(safety_mode) + return + + var/move_dir = get_dir(loc, AM.loc) + if(move_dir == eat_dir) + eat(AM) + +/obj/machinery/recycler/proc/eat(atom/AM0, sound=TRUE) + var/list/to_eat + if(istype(AM0, /obj/item)) + to_eat = AM0.GetAllContents() + else + to_eat = list(AM0) + + var/items_recycled = 0 + + for(var/i in to_eat) + 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) || istype(AM, /mob/living/brain) - if(isliving(AM) || brain_holder) - if(emagged) - if(!brain_holder) - crush_living(AM) - else - emergency_stop(AM) - else if(istype(AM, /obj/item)) - recycle_item(AM) - items_recycled++ - else - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - AM.loc = src.loc - - if(items_recycled && sound) - playsound(src.loc, item_recycle_sound, 50, 1) - -/obj/machinery/recycler/proc/recycle_item(obj/item/I) - I.loc = src.loc - - var/material_amount = materials.get_item_material_amount(I) - if(!material_amount) - qdel(I) - return - materials.insert_item(I, multiplier = (amount_produced / 100)) - qdel(I) - materials.retrieve_all() - - -/obj/machinery/recycler/proc/emergency_stop(mob/living/L) - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - safety_mode = TRUE - update_icon() - L.loc = src.loc - addtimer(CALLBACK(src, .proc/reboot), SAFETY_COOLDOWN) - -/obj/machinery/recycler/proc/reboot() - playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - safety_mode = FALSE - update_icon() - -/obj/machinery/recycler/proc/crush_living(mob/living/L) - - L.loc = src.loc - - if(issilicon(L)) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - else - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - - var/gib = TRUE - // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) - if(iscarbon(L)) - gib = FALSE - if(L.stat == CONSCIOUS) - L.say("ARRRRRRRRRRRGH!!!") - add_mob_blood(L) - - if(!blood && !issilicon(L)) - blood = TRUE - update_icon() - - // Remove and recycle the equipped items - if(eat_victim_items) - for(var/obj/item/I in L.get_equipped_items()) - if(L.dropItemToGround(I)) - eat(I, sound=FALSE) - - // Instantly lie down, also go unconscious from the pain, before you die. - L.Paralyse(5) - - // For admin fun, var edit emagged to 2. - if(gib || emagged == 2) - L.gib() - else if(emagged == 1) - L.adjustBruteLoss(crush_damage) - -/obj/machinery/recycler/deathtrap - name = "dangerous old crusher" - emagged = TRUE - crush_damage = 120 - flags = NODECONSTRUCT - -/obj/item/weapon/paper/recycler - name = "paper - 'garbage duty instructions'" - info = "

New Assignment

You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.

There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!" - + if(isliving(AM) || brain_holder) + if(emagged) + if(!brain_holder) + crush_living(AM) + else + emergency_stop(AM) + else if(istype(AM, /obj/item)) + recycle_item(AM) + items_recycled++ + else + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + AM.loc = src.loc + + if(items_recycled && sound) + playsound(src.loc, item_recycle_sound, 50, 1) + +/obj/machinery/recycler/proc/recycle_item(obj/item/I) + I.loc = src.loc + + var/material_amount = materials.get_item_material_amount(I) + if(!material_amount) + qdel(I) + return + materials.insert_item(I, multiplier = (amount_produced / 100)) + qdel(I) + materials.retrieve_all() + + +/obj/machinery/recycler/proc/emergency_stop(mob/living/L) + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + safety_mode = TRUE + update_icon() + L.loc = src.loc + addtimer(CALLBACK(src, .proc/reboot), SAFETY_COOLDOWN) + +/obj/machinery/recycler/proc/reboot() + playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) + safety_mode = FALSE + update_icon() + +/obj/machinery/recycler/proc/crush_living(mob/living/L) + + L.loc = src.loc + + if(issilicon(L)) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + else + playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) + + var/gib = TRUE + // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) + if(iscarbon(L)) + gib = FALSE + if(L.stat == CONSCIOUS) + L.say("ARRRRRRRRRRRGH!!!") + add_mob_blood(L) + + if(!blood && !issilicon(L)) + blood = TRUE + update_icon() + + // Remove and recycle the equipped items + if(eat_victim_items) + for(var/obj/item/I in L.get_equipped_items()) + if(L.dropItemToGround(I)) + eat(I, sound=FALSE) + + // Instantly lie down, also go unconscious from the pain, before you die. + L.Paralyse(5) + + // For admin fun, var edit emagged to 2. + if(gib || emagged == 2) + L.gib() + else if(emagged == 1) + L.adjustBruteLoss(crush_damage) + +/obj/machinery/recycler/deathtrap + name = "dangerous old crusher" + emagged = TRUE + crush_damage = 120 + flags = NODECONSTRUCT + +/obj/item/weapon/paper/recycler + name = "paper - 'garbage duty instructions'" + info = "

New Assignment

You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.

There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!" + #undef SAFETY_COOLDOWN \ No newline at end of file diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index e81774e147..f64f761736 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1,388 +1,388 @@ -// SUIT STORAGE UNIT ///////////////// -/obj/machinery/suit_storage_unit - name = "suit storage unit" - desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit." - icon = 'icons/obj/suitstorage.dmi' - icon_state = "close" - anchored = 1 - density = 1 - obj_integrity = 250 - max_integrity = 250 - - var/obj/item/clothing/suit/space/suit = null - var/obj/item/clothing/head/helmet/space/helmet = null - var/obj/item/clothing/mask/mask = null - var/obj/item/storage = null - - var/suit_type = null - var/helmet_type = null - var/mask_type = null - var/storage_type = null - - state_open = FALSE - var/locked = FALSE - panel_open = FALSE - var/safeties = TRUE - - var/uv = FALSE - var/uv_super = FALSE - var/uv_cycles = 6 - -/obj/machinery/suit_storage_unit/standard_unit - suit_type = /obj/item/clothing/suit/space/eva - helmet_type = /obj/item/clothing/head/helmet/space/eva - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/captain - suit_type = /obj/item/clothing/suit/space/hardsuit/captain - mask_type = /obj/item/clothing/mask/gas/sechailer - storage_type = /obj/item/weapon/tank/jetpack/oxygen/captain - -/obj/machinery/suit_storage_unit/engine - suit_type = /obj/item/clothing/suit/space/hardsuit/engine - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/ce - suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite - mask_type = /obj/item/clothing/mask/breath - storage_type= /obj/item/clothing/shoes/magboots/advance - -/obj/machinery/suit_storage_unit/security - suit_type = /obj/item/clothing/suit/space/hardsuit/security - mask_type = /obj/item/clothing/mask/gas/sechailer - -/obj/machinery/suit_storage_unit/hos - suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos - mask_type = /obj/item/clothing/mask/gas/sechailer - storage_type = /obj/item/weapon/tank/internals/oxygen - -/obj/machinery/suit_storage_unit/atmos - suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos - mask_type = /obj/item/clothing/mask/gas - storage_type = /obj/item/weapon/watertank/atmos - -/obj/machinery/suit_storage_unit/mining - suit_type = /obj/item/clothing/suit/hooded/explorer - mask_type = /obj/item/clothing/mask/gas/explorer - -/obj/machinery/suit_storage_unit/mining/eva - suit_type = /obj/item/clothing/suit/space/hardsuit/mining - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/cmo - suit_type = /obj/item/clothing/suit/space/hardsuit/medical - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/rd - suit_type = /obj/item/clothing/suit/space/hardsuit/rd - mask_type = /obj/item/clothing/mask/breath - -/obj/machinery/suit_storage_unit/syndicate - suit_type = /obj/item/clothing/suit/space/hardsuit/syndi - mask_type = /obj/item/clothing/mask/gas/syndicate - storage_type = /obj/item/weapon/tank/jetpack/oxygen/harness - -/obj/machinery/suit_storage_unit/ert/command - suit_type = /obj/item/clothing/suit/space/hardsuit/ert - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/ert/security - suit_type = /obj/item/clothing/suit/space/hardsuit/ert/sec - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/ert/engineer - suit_type = /obj/item/clothing/suit/space/hardsuit/ert/engi - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/ert/medical - suit_type = /obj/item/clothing/suit/space/hardsuit/ert/med - mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double - -/obj/machinery/suit_storage_unit/New() - ..() - wires = new /datum/wires/suit_storage_unit(src) - if(suit_type) - suit = new suit_type(src) - if(helmet_type) - helmet = new helmet_type(src) - if(mask_type) - mask = new mask_type(src) - if(storage_type) - storage = new storage_type(src) - update_icon() - -/obj/machinery/suit_storage_unit/Destroy() - if(suit) - qdel(suit) - suit = null - if(helmet) - qdel(helmet) - helmet = null - if(mask) - qdel(mask) - mask = null - if(storage) - qdel(storage) - storage = null - return ..() - -/obj/machinery/suit_storage_unit/update_icon() - cut_overlays() - - if(uv) - if(uv_super) - add_overlay("super") - else if(occupant) - add_overlay("uvhuman") - else - add_overlay("uv") - else if(state_open) - if(stat & BROKEN) - add_overlay("broken") - else - add_overlay("open") - if(suit) - add_overlay("suit") - if(helmet) - add_overlay("helm") - if(storage) - add_overlay("storage") - else if(occupant) - add_overlay("human") - -/obj/machinery/suit_storage_unit/power_change() - ..() - if(!is_operational() && state_open) - open_machine() - dump_contents() - update_icon() - -/obj/machinery/suit_storage_unit/proc/dump_contents() - dropContents() - helmet = null - suit = null - mask = null - storage = null - occupant = null - -/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE) - if(!(flags & NODECONSTRUCT)) - open_machine() - dump_contents() - new /obj/item/stack/sheet/metal (loc, 2) - qdel(src) - -/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/user) - if(user.stat || user.lying || !Adjacent(user) || !Adjacent(A) || !isliving(A)) - return - var/mob/living/target = A - if(!state_open) - to_chat(user, "The unit's doors are shut!") - return - if(!is_operational()) - to_chat(user, "The unit is not operational!") - return - if(occupant || helmet || suit || storage) - to_chat(user, "It's too cluttered inside to fit in!") - return - - if(target == user) - user.visible_message("[user] starts squeezing into [src]!", "You start working your way into [src]...") - else - target.visible_message("[user] starts shoving [target] into [src]!", "[user] starts shoving you into [src]!") - - if(do_mob(user, target, 30)) - if(occupant || helmet || suit || storage) - return - if(target == user) - user.visible_message("[user] slips into [src] and closes the door behind them!", "You slip into [src]'s cramped space and shut its door.") - else - target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!") - close_machine(target) - add_fingerprint(user) - -/obj/machinery/suit_storage_unit/proc/cook() - if(uv_cycles) - uv_cycles-- - uv = TRUE - locked = TRUE - update_icon() +// SUIT STORAGE UNIT ///////////////// +/obj/machinery/suit_storage_unit + name = "suit storage unit" + desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit." + icon = 'icons/obj/suitstorage.dmi' + icon_state = "close" + anchored = 1 + density = 1 + obj_integrity = 250 + max_integrity = 250 + + var/obj/item/clothing/suit/space/suit = null + var/obj/item/clothing/head/helmet/space/helmet = null + var/obj/item/clothing/mask/mask = null + var/obj/item/storage = null + + var/suit_type = null + var/helmet_type = null + var/mask_type = null + var/storage_type = null + + state_open = FALSE + var/locked = FALSE + panel_open = FALSE + var/safeties = TRUE + + var/uv = FALSE + var/uv_super = FALSE + var/uv_cycles = 6 + +/obj/machinery/suit_storage_unit/standard_unit + suit_type = /obj/item/clothing/suit/space/eva + helmet_type = /obj/item/clothing/head/helmet/space/eva + mask_type = /obj/item/clothing/mask/breath + +/obj/machinery/suit_storage_unit/captain + suit_type = /obj/item/clothing/suit/space/hardsuit/captain + mask_type = /obj/item/clothing/mask/gas/sechailer + storage_type = /obj/item/weapon/tank/jetpack/oxygen/captain + +/obj/machinery/suit_storage_unit/engine + suit_type = /obj/item/clothing/suit/space/hardsuit/engine + mask_type = /obj/item/clothing/mask/breath + +/obj/machinery/suit_storage_unit/ce + suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite + mask_type = /obj/item/clothing/mask/breath + storage_type= /obj/item/clothing/shoes/magboots/advance + +/obj/machinery/suit_storage_unit/security + suit_type = /obj/item/clothing/suit/space/hardsuit/security + mask_type = /obj/item/clothing/mask/gas/sechailer + +/obj/machinery/suit_storage_unit/hos + suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos + mask_type = /obj/item/clothing/mask/gas/sechailer + storage_type = /obj/item/weapon/tank/internals/oxygen + +/obj/machinery/suit_storage_unit/atmos + suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos + mask_type = /obj/item/clothing/mask/gas + storage_type = /obj/item/weapon/watertank/atmos + +/obj/machinery/suit_storage_unit/mining + suit_type = /obj/item/clothing/suit/hooded/explorer + mask_type = /obj/item/clothing/mask/gas/explorer + +/obj/machinery/suit_storage_unit/mining/eva + suit_type = /obj/item/clothing/suit/space/hardsuit/mining + mask_type = /obj/item/clothing/mask/breath + +/obj/machinery/suit_storage_unit/cmo + suit_type = /obj/item/clothing/suit/space/hardsuit/medical + mask_type = /obj/item/clothing/mask/breath + +/obj/machinery/suit_storage_unit/rd + suit_type = /obj/item/clothing/suit/space/hardsuit/rd + mask_type = /obj/item/clothing/mask/breath + +/obj/machinery/suit_storage_unit/syndicate + suit_type = /obj/item/clothing/suit/space/hardsuit/syndi + mask_type = /obj/item/clothing/mask/gas/syndicate + storage_type = /obj/item/weapon/tank/jetpack/oxygen/harness + +/obj/machinery/suit_storage_unit/ert/command + suit_type = /obj/item/clothing/suit/space/hardsuit/ert + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double + +/obj/machinery/suit_storage_unit/ert/security + suit_type = /obj/item/clothing/suit/space/hardsuit/ert/sec + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double + +/obj/machinery/suit_storage_unit/ert/engineer + suit_type = /obj/item/clothing/suit/space/hardsuit/ert/engi + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double + +/obj/machinery/suit_storage_unit/ert/medical + suit_type = /obj/item/clothing/suit/space/hardsuit/ert/med + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double + +/obj/machinery/suit_storage_unit/New() + ..() + wires = new /datum/wires/suit_storage_unit(src) + if(suit_type) + suit = new suit_type(src) + if(helmet_type) + helmet = new helmet_type(src) + if(mask_type) + mask = new mask_type(src) + if(storage_type) + storage = new storage_type(src) + update_icon() + +/obj/machinery/suit_storage_unit/Destroy() + if(suit) + qdel(suit) + suit = null + if(helmet) + qdel(helmet) + helmet = null + if(mask) + qdel(mask) + mask = null + if(storage) + qdel(storage) + storage = null + return ..() + +/obj/machinery/suit_storage_unit/update_icon() + cut_overlays() + + if(uv) + if(uv_super) + add_overlay("super") + else if(occupant) + add_overlay("uvhuman") + else + add_overlay("uv") + else if(state_open) + if(stat & BROKEN) + add_overlay("broken") + else + add_overlay("open") + if(suit) + add_overlay("suit") + if(helmet) + add_overlay("helm") + if(storage) + add_overlay("storage") + else if(occupant) + add_overlay("human") + +/obj/machinery/suit_storage_unit/power_change() + ..() + if(!is_operational() && state_open) + open_machine() + dump_contents() + update_icon() + +/obj/machinery/suit_storage_unit/proc/dump_contents() + dropContents() + helmet = null + suit = null + mask = null + storage = null + occupant = null + +/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE) + if(!(flags & NODECONSTRUCT)) + open_machine() + dump_contents() + new /obj/item/stack/sheet/metal (loc, 2) + qdel(src) + +/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/user) + if(user.stat || user.lying || !Adjacent(user) || !Adjacent(A) || !isliving(A)) + return + var/mob/living/target = A + if(!state_open) + to_chat(user, "The unit's doors are shut!") + return + if(!is_operational()) + to_chat(user, "The unit is not operational!") + return + if(occupant || helmet || suit || storage) + to_chat(user, "It's too cluttered inside to fit in!") + return + + if(target == user) + user.visible_message("[user] starts squeezing into [src]!", "You start working your way into [src]...") + else + target.visible_message("[user] starts shoving [target] into [src]!", "[user] starts shoving you into [src]!") + + if(do_mob(user, target, 30)) + if(occupant || helmet || suit || storage) + return + if(target == user) + user.visible_message("[user] slips into [src] and closes the door behind them!", "You slip into [src]'s cramped space and shut its door.") + else + target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!") + close_machine(target) + add_fingerprint(user) + +/obj/machinery/suit_storage_unit/proc/cook() + if(uv_cycles) + uv_cycles-- + uv = TRUE + locked = TRUE + update_icon() if(occupant) var/mob/living/mob_occupant = occupant - if(uv_super) + if(uv_super) mob_occupant.adjustFireLoss(rand(20, 36)) - else + else mob_occupant.adjustFireLoss(rand(10, 16)) mob_occupant.emote("scream") - addtimer(CALLBACK(src, .proc/cook), 50) - else - uv_cycles = initial(uv_cycles) - uv = FALSE - locked = FALSE - if(uv_super) - visible_message("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.") - playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, 1) - helmet = null - qdel(helmet) - suit = null - qdel(suit) // Delete everything but the occupant. - mask = null - qdel(mask) - storage = null - qdel(storage) - // The wires get damaged too. - wires.cut_all() - else - if(!occupant) - visible_message("[src]'s door slides open. The glowing yellow lights dim to a gentle green.") - else - visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") - playsound(src, 'sound/machines/AirlockClose.ogg', 25, 1) - for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected - I.clean_blood() - I.fingerprints = list() - open_machine(FALSE) - if(occupant) - dump_contents() - -/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb) - if(!prob(prb)) - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - if(electrocute_mob(user, src, src, 1, TRUE)) - return 1 - -/obj/machinery/suit_storage_unit/relaymove(mob/user) - container_resist(user) - -/obj/machinery/suit_storage_unit/container_resist(mob/living/user) - add_fingerprint(user) - if(locked) - visible_message("You see [user] kicking against the doors of [src]!", "You start kicking against the doors...") - addtimer(CALLBACK(src, .proc/resist_open, user), 300) - else - open_machine() - dump_contents() - -/obj/machinery/suit_storage_unit/proc/resist_open(mob/user) - if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here. - visible_message("You see [user] bursts out of [src]!", "You escape the cramped confines of [src]!") - open_machine() - -/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) - if(state_open && is_operational()) - if(istype(I, /obj/item/clothing/suit/space)) - if(suit) - to_chat(user, "The unit already contains a suit!.") - return - if(!user.drop_item()) - return - suit = I - else if(istype(I, /obj/item/clothing/head/helmet)) - if(helmet) - to_chat(user, "The unit already contains a helmet!") - return - if(!user.drop_item()) - return - helmet = I - else if(istype(I, /obj/item/clothing/mask)) - if(mask) - to_chat(user, "The unit already contains a mask!") - return - if(!user.drop_item()) - return - mask = I - else - if(storage) - to_chat(user, "The auxiliary storage compartment is full!") - return - if(!user.drop_item()) - return - storage = I - - I.loc = src - visible_message("[user] inserts [I] into [src]", "You load [I] into [src].") - update_icon() - return - - if(panel_open && is_wire_tool(I)) - wires.interact(user) - if(!state_open) - if(default_deconstruction_screwdriver(user, "panel", "close", I)) - return - if(default_pry_open(I)) - dump_contents() - return - - return ..() - -/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state) - ui.open() - -/obj/machinery/suit_storage_unit/ui_data() - var/list/data = list() - data["locked"] = locked - data["open"] = state_open - data["safeties"] = safeties - data["uv_active"] = uv - data["uv_super"] = uv_super - if(helmet) - data["helmet"] = helmet.name - if(suit) - data["suit"] = suit.name - if(mask) - data["mask"] = mask.name - if(storage) - data["storage"] = storage.name - if(occupant) - data["occupied"] = 1 - return data - -/obj/machinery/suit_storage_unit/ui_act(action, params) - if(..() || uv) - return - switch(action) - if("door") - if(state_open) - close_machine() - else - open_machine(0) - if(occupant) - dump_contents() // Dump out contents if someone is in there. - . = TRUE - if("lock") - locked = !locked - . = TRUE - if("uv") - if(occupant && safeties) - return - else if(!helmet && !mask && !suit && !storage && !occupant) - return - else + addtimer(CALLBACK(src, .proc/cook), 50) + else + uv_cycles = initial(uv_cycles) + uv = FALSE + locked = FALSE + if(uv_super) + visible_message("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.") + playsound(src, 'sound/machines/airlock_alien_prying.ogg', 50, 1) + helmet = null + qdel(helmet) + suit = null + qdel(suit) // Delete everything but the occupant. + mask = null + qdel(mask) + storage = null + qdel(storage) + // The wires get damaged too. + wires.cut_all() + else + if(!occupant) + visible_message("[src]'s door slides open. The glowing yellow lights dim to a gentle green.") + else + visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") + playsound(src, 'sound/machines/AirlockClose.ogg', 25, 1) + for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected + I.clean_blood() + I.fingerprints = list() + open_machine(FALSE) + if(occupant) + dump_contents() + +/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb) + if(!prob(prb)) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(5, 1, src) + s.start() + if(electrocute_mob(user, src, src, 1, TRUE)) + return 1 + +/obj/machinery/suit_storage_unit/relaymove(mob/user) + container_resist(user) + +/obj/machinery/suit_storage_unit/container_resist(mob/living/user) + add_fingerprint(user) + if(locked) + visible_message("You see [user] kicking against the doors of [src]!", "You start kicking against the doors...") + addtimer(CALLBACK(src, .proc/resist_open, user), 300) + else + open_machine() + dump_contents() + +/obj/machinery/suit_storage_unit/proc/resist_open(mob/user) + if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here. + visible_message("You see [user] bursts out of [src]!", "You escape the cramped confines of [src]!") + open_machine() + +/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) + if(state_open && is_operational()) + if(istype(I, /obj/item/clothing/suit/space)) + if(suit) + to_chat(user, "The unit already contains a suit!.") + return + if(!user.drop_item()) + return + suit = I + else if(istype(I, /obj/item/clothing/head/helmet)) + if(helmet) + to_chat(user, "The unit already contains a helmet!") + return + if(!user.drop_item()) + return + helmet = I + else if(istype(I, /obj/item/clothing/mask)) + if(mask) + to_chat(user, "The unit already contains a mask!") + return + if(!user.drop_item()) + return + mask = I + else + if(storage) + to_chat(user, "The auxiliary storage compartment is full!") + return + if(!user.drop_item()) + return + storage = I + + I.loc = src + visible_message("[user] inserts [I] into [src]", "You load [I] into [src].") + update_icon() + return + + if(panel_open && is_wire_tool(I)) + wires.interact(user) + if(!state_open) + if(default_deconstruction_screwdriver(user, "panel", "close", I)) + return + if(default_pry_open(I)) + dump_contents() + return + + return ..() + +/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state) + ui.open() + +/obj/machinery/suit_storage_unit/ui_data() + var/list/data = list() + data["locked"] = locked + data["open"] = state_open + data["safeties"] = safeties + data["uv_active"] = uv + data["uv_super"] = uv_super + if(helmet) + data["helmet"] = helmet.name + if(suit) + data["suit"] = suit.name + if(mask) + data["mask"] = mask.name + if(storage) + data["storage"] = storage.name + if(occupant) + data["occupied"] = 1 + return data + +/obj/machinery/suit_storage_unit/ui_act(action, params) + if(..() || uv) + return + switch(action) + if("door") + if(state_open) + close_machine() + else + open_machine(0) + if(occupant) + dump_contents() // Dump out contents if someone is in there. + . = TRUE + if("lock") + locked = !locked + . = TRUE + if("uv") + if(occupant && safeties) + return + else if(!helmet && !mask && !suit && !storage && !occupant) + return + else if(occupant) 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 + 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) - var/obj/item/I = vars[item_name] - vars[item_name] = null - if(I) - I.forceMove(loc) - . = TRUE - update_icon() + var/static/list/valid_items = list("helmet", "suit", "mask", "storage") + var/item_name = params["item"] + if(item_name in valid_items) + var/obj/item/I = vars[item_name] + vars[item_name] = null + if(I) + I.forceMove(loc) + . = TRUE + update_icon() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index fd40f7e273..ebe4c79730 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -48,6 +48,7 @@ var/icon_deny //Icon_state when vending! var/seconds_electrified = 0 //Shock customers like an airlock. var/shoot_inventory = 0 //Fire items at customers! We're broken! + var/shoot_inventory_chance = 2 var/shut_up = 0 //Stop spouting those godawful pitches! var/extended_inventory = 0 //can we access the hidden inventory? var/scan_id = 1 @@ -561,7 +562,7 @@ speak(slogan) last_slogan = world.time - if(shoot_inventory && prob(2)) + if(shoot_inventory && prob(shoot_inventory_chance)) throw_item() @@ -592,7 +593,7 @@ if(!target) return 0 - for(var/datum/data/vending_product/R in product_records) + for(var/datum/data/vending_product/R in shuffle(product_records)) if(R.amount <= 0) //Try to use a record that actually has something to dump. continue var/dump_path = R.product_path @@ -605,19 +606,22 @@ if(!throw_item) return 0 + pre_throw(throw_item) + throw_item.throw_at(target, 16, 3) visible_message("[src] launches [throw_item] at [target]!") return 1 +/obj/machinery/vending/proc/pre_throw(obj/item/I) + return + /obj/machinery/vending/proc/shock(mob/user, prb) if(stat & (BROKEN|NOPOWER)) // unpowered, no shock return FALSE if(!prob(prb)) return FALSE - 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/tmp/check_range = TRUE if(electrocute_mob(user, get_area(src), src, 0.7, check_range)) return TRUE @@ -864,6 +868,11 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/weapon/storage/fancy/cigarettes/cigars = 1, /obj/item/weapon/storage/fancy/cigarettes/cigars/havana = 1, /obj/item/weapon/storage/fancy/cigarettes/cigars/cohiba = 1) refill_canister = /obj/item/weapon/vending_refill/cigarette +/obj/machinery/vending/cigarette/pre_throw(obj/item/I) + if(istype(I, /obj/item/weapon/lighter)) + var/obj/item/weapon/lighter/L = I + L.set_lit(TRUE) + /obj/machinery/vending/medical name = "\improper NanoMed Plus" desc = "Medical drug dispenser." @@ -919,6 +928,15 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) resistance_flags = FIRE_PROOF +/obj/machinery/vending/security/pre_throw(obj/item/I) + if(istype(I, /obj/item/weapon/grenade)) + var/obj/item/weapon/grenade/G = I + G.preprime() + else if(istype(I, /obj/item/device/flashlight)) + var/obj/item/device/flashlight/F = I + F.on = TRUE + F.update_brightness() + /obj/machinery/vending/hydronutrients name = "\improper NutriMax" desc = "A plant nutrients vendor." @@ -947,7 +965,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 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index bf90f0a569..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 +/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) + 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) - + 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/landmarks.dm b/code/game/objects/effects/landmarks.dm index 86d62eacea..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 +/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 - . = ..() + +/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 f7faa0e5e5..9d9694b076 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -18,612 +18,6 @@ ..() QDEL_IN(src, 10) -/obj/effect/overlay/temp - icon_state = "nothing" - anchored = 1 - layer = ABOVE_MOB_LAYER - mouse_opacity = 0 - var/duration = 10 //in deciseconds - var/randomdir = TRUE - var/timerid - -/obj/effect/overlay/temp/Destroy() - . = ..() - deltimer(timerid) - -/obj/effect/overlay/temp/Initialize() - . = ..() - if(randomdir) - setDir(pick(GLOB.cardinal)) - - timerid = QDEL_IN(src, duration) - -/obj/effect/overlay/temp/ex_act() - return - -/obj/effect/overlay/temp/dir_setting - randomdir = FALSE - -/obj/effect/overlay/temp/dir_setting/Initialize(mapload, set_dir) - if(set_dir) - setDir(set_dir) - . = ..() - -/obj/effect/overlay/temp/dir_setting/bloodsplatter - icon = 'icons/effects/blood.dmi' - duration = 5 - randomdir = FALSE - layer = BELOW_MOB_LAYER - var/splatter_type = "splatter" - -/obj/effect/overlay/temp/dir_setting/bloodsplatter/Initialize(mapload, set_dir) - if(set_dir in GLOB.diagonals) - icon_state = "[splatter_type][pick(1, 2, 6)]" - else - icon_state = "[splatter_type][pick(3, 4, 5)]" - . = ..() - var/target_pixel_x = 0 - var/target_pixel_y = 0 - switch(set_dir) - if(NORTH) - target_pixel_y = 16 - if(SOUTH) - target_pixel_y = -16 - layer = ABOVE_MOB_LAYER - if(EAST) - target_pixel_x = 16 - if(WEST) - target_pixel_x = -16 - if(NORTHEAST) - target_pixel_x = 16 - target_pixel_y = 16 - if(NORTHWEST) - target_pixel_x = -16 - target_pixel_y = 16 - if(SOUTHEAST) - target_pixel_x = 16 - target_pixel_y = -16 - layer = ABOVE_MOB_LAYER - if(SOUTHWEST) - target_pixel_x = -16 - target_pixel_y = -16 - layer = ABOVE_MOB_LAYER - animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration) - -/obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter - splatter_type = "xsplatter" - -/obj/effect/overlay/temp/dir_setting/speedbike_trail - name = "speedbike trails" - icon_state = "ion_fade" - layer = BELOW_MOB_LAYER - duration = 10 - randomdir = 0 - -/obj/effect/overlay/temp/dir_setting/firing_effect - icon = 'icons/effects/effects.dmi' - icon_state = "firing_effect" - duration = 2 - -/obj/effect/overlay/temp/dir_setting/firing_effect/setDir(newdir) - switch(newdir) - if(NORTH) - layer = BELOW_MOB_LAYER - pixel_x = rand(-3,3) - pixel_y = rand(4,6) - if(SOUTH) - pixel_x = rand(-3,3) - pixel_y = rand(-1,1) - else - pixel_x = rand(-1,1) - pixel_y = rand(-1,1) - ..() - -/obj/effect/overlay/temp/dir_setting/firing_effect/energy - icon_state = "firing_effect_energy" - duration = 3 - -/obj/effect/overlay/temp/dir_setting/firing_effect/magic - icon_state = "shieldsparkles" - duration = 3 - -/obj/effect/overlay/temp/dir_setting/ninja - name = "ninja shadow" - icon = 'icons/mob/mob.dmi' - icon_state = "uncloak" - duration = 9 - -/obj/effect/overlay/temp/dir_setting/ninja/cloak - icon_state = "cloak" - -/obj/effect/overlay/temp/dir_setting/ninja/shadow - icon_state = "shadow" - -/obj/effect/overlay/temp/dir_setting/ninja/phase - name = "ninja energy" - icon_state = "phasein" - -/obj/effect/overlay/temp/dir_setting/ninja/phase/out - icon_state = "phaseout" - -/obj/effect/overlay/temp/dir_setting/wraith - name = "blood" - icon = 'icons/mob/mob.dmi' - icon_state = "phase_shift2" - duration = 12 - -/obj/effect/overlay/temp/dir_setting/wraith/out - icon_state = "phase_shift" - -/obj/effect/overlay/temp/dir_setting/tailsweep - icon_state = "tailsweep" - duration = 4 - -/obj/effect/overlay/temp/wizard - name = "water" - icon = 'icons/mob/mob.dmi' - icon_state = "reappear" - duration = 5 - -/obj/effect/overlay/temp/wizard/out - icon_state = "liquify" - duration = 12 - -/obj/effect/overlay/temp/monkeyify - icon = 'icons/mob/mob.dmi' - icon_state = "h2monkey" - duration = 22 - -/obj/effect/overlay/temp/monkeyify/humanify - icon_state = "monkey2h" - -/obj/effect/overlay/temp/borgflash - icon = 'icons/mob/mob.dmi' - icon_state = "blspell" - duration = 5 - -/obj/effect/overlay/temp/guardian - randomdir = 0 - -/obj/effect/overlay/temp/guardian/phase - duration = 5 - icon_state = "phasein" - -/obj/effect/overlay/temp/guardian/phase/out - icon_state = "phaseout" - -/obj/effect/overlay/temp/decoy - desc = "It's a decoy!" - duration = 15 - -/obj/effect/overlay/temp/decoy/Initialize(mapload, atom/mimiced_atom) - . = ..() - alpha = initial(alpha) - if(mimiced_atom) - name = mimiced_atom.name - appearance = mimiced_atom.appearance - setDir(mimiced_atom.dir) - mouse_opacity = 0 - -/obj/effect/overlay/temp/decoy/fading/Initialize(mapload, atom/mimiced_atom) - . = ..() - animate(src, alpha = 0, time = duration) - -/obj/effect/overlay/temp/decoy/fading/fivesecond - duration = 50 - -/obj/effect/overlay/temp/small_smoke - icon_state = "smoke" - duration = 50 - -/obj/effect/overlay/temp/fire - icon = 'icons/effects/fire.dmi' - icon_state = "3" - duration = 20 - -/obj/effect/overlay/temp/cult - randomdir = 0 - duration = 10 - -/obj/effect/overlay/temp/cult/sparks - randomdir = 1 - name = "blood sparks" - icon_state = "bloodsparkles" - -/obj/effect/overlay/temp/dir_setting/cult/phase - name = "phase glow" - duration = 7 - icon_state = "cultin" - -/obj/effect/overlay/temp/dir_setting/cult/phase/out - icon_state = "cultout" - -/obj/effect/overlay/temp/cult/sac - name = "maw of Nar-Sie" - icon_state = "sacconsume" - -/obj/effect/overlay/temp/cult/door - name = "unholy glow" - icon_state = "doorglow" - layer = CLOSED_FIREDOOR_LAYER //above closed doors - -/obj/effect/overlay/temp/cult/door/unruned - icon_state = "unruneddoorglow" - -/obj/effect/overlay/temp/cult/turf - name = "unholy glow" - icon_state = "wallglow" - layer = ABOVE_NORMAL_TURF_LAYER - -/obj/effect/overlay/temp/cult/turf/floor - icon_state = "floorglow" - duration = 5 - - -/obj/effect/overlay/temp/ratvar - name = "ratvar's light" - icon = 'icons/effects/clockwork_effects.dmi' - duration = 8 - randomdir = 0 - layer = ABOVE_NORMAL_TURF_LAYER - -/obj/effect/overlay/temp/ratvar/door - icon_state = "ratvardoorglow" - layer = CLOSED_DOOR_LAYER //above closed doors - -/obj/effect/overlay/temp/ratvar/door/window - icon_state = "ratvarwindoorglow" - layer = ABOVE_WINDOW_LAYER - -/obj/effect/overlay/temp/ratvar/beam - icon_state = "ratvarbeamglow" - -/obj/effect/overlay/temp/ratvar/beam/door - layer = CLOSED_DOOR_LAYER - -/obj/effect/overlay/temp/ratvar/beam/grille - layer = BELOW_OBJ_LAYER - -/obj/effect/overlay/temp/ratvar/beam/itemconsume - layer = HIGH_OBJ_LAYER - -/obj/effect/overlay/temp/ratvar/beam/falsewall - layer = OBJ_LAYER - -/obj/effect/overlay/temp/ratvar/beam/catwalk - layer = LATTICE_LAYER - -/obj/effect/overlay/temp/ratvar/wall - icon_state = "ratvarwallglow" - -/obj/effect/overlay/temp/ratvar/wall/false - layer = OBJ_LAYER - -/obj/effect/overlay/temp/ratvar/floor - icon_state = "ratvarfloorglow" - -/obj/effect/overlay/temp/ratvar/floor/catwalk - layer = LATTICE_LAYER - -/obj/effect/overlay/temp/ratvar/window - icon_state = "ratvarwindowglow" - layer = ABOVE_OBJ_LAYER - -/obj/effect/overlay/temp/ratvar/window/single - icon_state = "ratvarwindowglow_s" - -/obj/effect/overlay/temp/ratvar/gear - icon_state = "ratvargearglow" - layer = BELOW_OBJ_LAYER - -/obj/effect/overlay/temp/ratvar/grille - icon_state = "ratvargrilleglow" - layer = BELOW_OBJ_LAYER - -/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 - -/obj/effect/overlay/temp/ratvar/volt_hit/Initialize(mapload, caster, multiplier) - if(multiplier) - damage *= multiplier - duration = max(round(damage * 0.2), 1) - . = ..() - -/obj/effect/overlay/temp/ratvar/volt_hit/true/Initialize(mapload, caster, multiplier) - . = ..() - user = caster - if(user) - var/matrix/M = new - M.Turn(Get_Angle(src, user)) - transform = M - INVOKE_ASYNC(src, .proc/volthit) - -/obj/effect/overlay/temp/ratvar/volt_hit/proc/volthit() - if(user) - Beam(get_turf(user), "volt_ray", time=duration, maxdistance=8, beam_type=/obj/effect/ebeam/volt_ray) - var/hit_amount = 0 - var/turf/T = get_turf(src) - for(var/mob/living/L in T) - if(is_servant_of_ratvar(L)) - continue - var/obj/item/I = L.null_rod_check() - if(I) - L.visible_message("Strange energy flows into [L]'s [I.name]!", \ - "Your [I.name] shields you from [src]!") - continue - L.visible_message("[L] is struck by a [name]!", "You're struck by a [name]!") - L.apply_damage(damage, BURN, "chest", L.run_armor_check("chest", "laser", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 0, "Your armor was penetrated by [src]!")) - add_logs(user, L, "struck with a volt blast") - hit_amount++ - for(var/obj/mecha/M in T) - if(M.occupant) - if(is_servant_of_ratvar(M.occupant)) - continue - to_chat(M.occupant, "Your [M.name] is struck by a [name]!") - M.visible_message("[M] is struck by a [name]!") - M.take_damage(damage, BURN, 0, 0) - hit_amount++ - if(hit_amount) - playsound(src, 'sound/machines/defib_zap.ogg', damage*hit_amount, 1, -1) - else - playsound(src, "sparks", 50, 1) - -/obj/effect/overlay/temp/ratvar/ocular_warden - name = "warden's gaze" - layer = ABOVE_MOB_LAYER - icon_state = "warden_gaze" - duration = 3 - -/obj/effect/overlay/temp/ratvar/ocular_warden/Initialize() - . = ..() - pixel_x = rand(-8, 8) - pixel_y = rand(-10, 10) - animate(src, alpha = 0, time = 3, easing = EASE_OUT) - -/obj/effect/overlay/temp/ratvar/spearbreak - icon = 'icons/effects/64x64.dmi' - icon_state = "ratvarspearbreak" - layer = BELOW_MOB_LAYER - pixel_y = -16 - pixel_x = -16 - -/obj/effect/overlay/temp/ratvar/geis_binding - icon_state = "geisbinding" - -/obj/effect/overlay/temp/ratvar/geis_binding/top - icon_state = "geisbinding_top" - -/obj/effect/overlay/temp/ratvar/component - icon = 'icons/obj/clockwork_objects.dmi' - icon_state = "belligerent_eye" - layer = ABOVE_MOB_LAYER - duration = 10 - -/obj/effect/overlay/temp/ratvar/component/Initialize() - . = ..() - transform = matrix()*0.75 - pixel_x = rand(-10, 10) - pixel_y = rand(-10, -2) - animate(src, pixel_y = pixel_y + 10, alpha = 50, time = 10, easing = EASE_OUT) - -/obj/effect/overlay/temp/ratvar/component/cogwheel - icon_state = "vanguard_cogwheel" - -/obj/effect/overlay/temp/ratvar/component/capacitor - icon_state = "geis_capacitor" - -/obj/effect/overlay/temp/ratvar/component/alloy - icon_state = "replicant_alloy" - -/obj/effect/overlay/temp/ratvar/component/ansible - icon_state = "hierophant_ansible" - -/obj/effect/overlay/temp/ratvar/sigil - name = "glowing circle" - icon_state = "sigildull" - -/obj/effect/overlay/temp/ratvar/sigil/transgression - color = "#FAE48C" - layer = ABOVE_MOB_LAYER - duration = 70 - light_range = 5 - light_power = 2 - light_color = "#FAE48C" - -/obj/effect/overlay/temp/ratvar/sigil/transgression/Initialize() - . = ..() - var/oldtransform = transform - animate(src, transform = matrix()*2, time = 5) - animate(transform = oldtransform, alpha = 0, time = 65) - -/obj/effect/overlay/temp/ratvar/sigil/vitality - color = "#1E8CE1" - icon_state = "sigilactivepulse" - layer = ABOVE_MOB_LAYER - light_range = 1.4 - light_power = 0.5 - light_color = "#1E8CE1" - -/obj/effect/overlay/temp/ratvar/sigil/accession - color = "#AF0AAF" - layer = ABOVE_MOB_LAYER - duration = 70 - icon_state = "sigilactiveoverlay" - alpha = 0 - - -/obj/effect/overlay/temp/revenant - name = "spooky lights" - icon_state = "purplesparkles" - -/obj/effect/overlay/temp/revenant/cracks - name = "glowing cracks" - icon_state = "purplecrack" - duration = 6 - - -/obj/effect/overlay/temp/gravpush - name = "gravity wave" - icon_state = "shieldsparkles" - duration = 5 - -/obj/effect/overlay/temp/telekinesis - name = "telekinetic force" - icon_state = "empdisable" - duration = 5 - -/obj/effect/overlay/temp/emp - name = "emp sparks" - icon_state = "empdisable" - -/obj/effect/overlay/temp/emp/pulse - name = "emp pulse" - icon_state = "emppulse" - duration = 8 - randomdir = 0 - -/obj/effect/overlay/temp/gib_animation - icon = 'icons/mob/mob.dmi' - duration = 15 - -/obj/effect/overlay/temp/gib_animation/Initialize(mapload, gib_icon) - icon_state = gib_icon // Needs to be before ..() so icon is correct - . = ..() - -/obj/effect/overlay/temp/gib_animation/ex_act(severity) - return //so the overlay isn't deleted by the explosion that gibbed the mob. - -/obj/effect/overlay/temp/gib_animation/animal - icon = 'icons/mob/animal.dmi' - -/obj/effect/overlay/temp/dust_animation - icon = 'icons/mob/mob.dmi' - duration = 15 - -/obj/effect/overlay/temp/dust_animation/Initialize(mapload, dust_icon) - icon_state = dust_icon // Before ..() so the correct icon is flick()'d - . = ..() - -/obj/effect/overlay/temp/mummy_animation - icon = 'icons/mob/mob.dmi' - icon_state = "mummy_revive" - duration = 20 - -/obj/effect/overlay/temp/heal //color is white by default, set to whatever is needed - name = "healing glow" - icon_state = "heal" - duration = 15 - -/obj/effect/overlay/temp/heal/Initialize(mapload, colour) - if(colour) - color = colour - . = ..() - pixel_x = rand(-12, 12) - pixel_y = rand(-9, 0) - -/obj/effect/overlay/temp/kinetic_blast - name = "kinetic explosion" - icon = 'icons/obj/projectiles.dmi' - icon_state = "kinetic_blast" - layer = ABOVE_ALL_MOB_LAYER - duration = 4 - -/obj/effect/overlay/temp/explosion - name = "explosion" - icon = 'icons/effects/96x96.dmi' - icon_state = "explosion" - pixel_x = -32 - pixel_y = -32 - duration = 8 - -/obj/effect/overlay/temp/explosion/fast - icon_state = "explosionfast" - duration = 4 - -/obj/effect/overlay/temp/blob - name = "blob" - icon_state = "blob_attack" - alpha = 140 - randomdir = 0 - duration = 6 - -/obj/effect/overlay/temp/impact_effect - icon_state = "impact_bullet" - duration = 5 - -/obj/effect/overlay/temp/impact_effect/Initialize(mapload, atom/target, obj/item/projectile/P) - if(target == P.original) //the projectile hit the target originally clicked - pixel_x = P.p_x + target.pixel_x - 16 + rand(-4,4) - pixel_y = P.p_y + target.pixel_y - 16 + rand(-4,4) - else - pixel_x = target.pixel_x + rand(-4,4) - pixel_y = target.pixel_y + rand(-4,4) - . = ..() - -/obj/effect/overlay/temp/impact_effect/red_laser - icon_state = "impact_laser" - duration = 4 - -/obj/effect/overlay/temp/impact_effect/red_laser/wall - icon_state = "impact_laser_wall" - duration = 10 - -/obj/effect/overlay/temp/impact_effect/blue_laser - icon_state = "impact_laser_blue" - duration = 4 - -/obj/effect/overlay/temp/impact_effect/green_laser - icon_state = "impact_laser_green" - duration = 4 - -/obj/effect/overlay/temp/impact_effect/purple_laser - icon_state = "impact_laser_purple" - duration = 4 - -/obj/effect/overlay/temp/impact_effect/ion - 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" icon = 'icons/misc/beach2.dmi' diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 2290456d78..9e7dbe7fa9 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -1,69 +1,69 @@ - -/obj/effect/portal - name = "portal" - desc = "Looks unstable. Best to test it with the clown." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "portal" - density = 1 - var/obj/item/target = null - var/creator = null - anchored = 1 - var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent - var/mech_sized = FALSE - -/obj/effect/portal/Bumped(mob/M as mob|obj) - teleport(M) - -/obj/effect/portal/attack_tk(mob/user) - return - -/obj/effect/portal/attack_hand(mob/user) - if(Adjacent(user)) - teleport(user) - -/obj/effect/portal/attackby(obj/item/weapon/W, mob/user, params) - if(user && Adjacent(user)) - teleport(user) - -/obj/effect/portal/make_frozen_visual() - return - -/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300) - ..() - GLOB.portals += src - src.target = target - src.creator = creator - - var/area/A = get_area(target) - if(A && A.noteleport) // No point in persisting if the target is unreachable. - qdel(src) - return - if(lifespan > 0) - QDEL_IN(src, lifespan) - -/obj/effect/portal/Destroy() - GLOB.portals -= src - if(istype(creator, /obj/item/weapon/hand_tele)) - var/obj/item/weapon/hand_tele/O = creator - O.active_portals-- - else if(istype(creator, /obj/item/weapon/gun/energy/wormhole_projector)) - var/obj/item/weapon/gun/energy/wormhole_projector/P = creator - P.portal_destroyed(src) - creator = null - return ..() - -/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) - if(istype(M, /obj/effect)) //sparks don't teleport - return - if(M.anchored) - if(!(istype(M, /obj/mecha) && mech_sized)) - return - if (!( target )) - qdel(src) - return - if (istype(M, /atom/movable)) - if(ismegafauna(M)) + +/obj/effect/portal + name = "portal" + desc = "Looks unstable. Best to test it with the clown." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "portal" + density = 1 + var/obj/item/target = null + var/creator = null + anchored = 1 + var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent + var/mech_sized = FALSE + +/obj/effect/portal/Bumped(mob/M as mob|obj) + teleport(M) + +/obj/effect/portal/attack_tk(mob/user) + return + +/obj/effect/portal/attack_hand(mob/user) + if(Adjacent(user)) + teleport(user) + +/obj/effect/portal/attackby(obj/item/weapon/W, mob/user, params) + if(user && Adjacent(user)) + teleport(user) + +/obj/effect/portal/make_frozen_visual() + return + +/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300) + ..() + GLOB.portals += src + src.target = target + src.creator = creator + + var/area/A = get_area(target) + if(A && A.noteleport) // No point in persisting if the target is unreachable. + qdel(src) + return + if(lifespan > 0) + QDEL_IN(src, lifespan) + +/obj/effect/portal/Destroy() + GLOB.portals -= src + if(istype(creator, /obj/item/weapon/hand_tele)) + var/obj/item/weapon/hand_tele/O = creator + O.active_portals-- + else if(istype(creator, /obj/item/weapon/gun/energy/wormhole_projector)) + var/obj/item/weapon/gun/energy/wormhole_projector/P = creator + P.portal_destroyed(src) + creator = null + return ..() + +/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) + if(istype(M, /obj/effect)) //sparks don't teleport + return + if(M.anchored) + if(!(istype(M, /obj/mecha) && mech_sized)) + return + if (!( target )) + qdel(src) + return + if (istype(M, /atom/movable)) + if(ismegafauna(M)) message_admins("[M] [ADMIN_FLW(M)] has teleported through [src].") - do_teleport(M, target, precision) ///You will appear adjacent to the beacon - - + 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/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm new file mode 100644 index 0000000000..65c9d30e47 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -0,0 +1,218 @@ +//temporary visual effects(/obj/effect/overlay/temp) used by clockcult stuff +/obj/effect/overlay/temp/ratvar + name = "ratvar's light" + icon = 'icons/effects/clockwork_effects.dmi' + duration = 8 + randomdir = 0 + layer = ABOVE_NORMAL_TURF_LAYER + +/obj/effect/overlay/temp/ratvar/door + icon_state = "ratvardoorglow" + layer = CLOSED_DOOR_LAYER //above closed doors + +/obj/effect/overlay/temp/ratvar/door/window + icon_state = "ratvarwindoorglow" + layer = ABOVE_WINDOW_LAYER + +/obj/effect/overlay/temp/ratvar/beam + icon_state = "ratvarbeamglow" + +/obj/effect/overlay/temp/ratvar/beam/door + layer = CLOSED_DOOR_LAYER + +/obj/effect/overlay/temp/ratvar/beam/grille + layer = BELOW_OBJ_LAYER + +/obj/effect/overlay/temp/ratvar/beam/itemconsume + layer = HIGH_OBJ_LAYER + +/obj/effect/overlay/temp/ratvar/beam/falsewall + layer = OBJ_LAYER + +/obj/effect/overlay/temp/ratvar/beam/catwalk + layer = LATTICE_LAYER + +/obj/effect/overlay/temp/ratvar/wall + icon_state = "ratvarwallglow" + +/obj/effect/overlay/temp/ratvar/wall/false + layer = OBJ_LAYER + +/obj/effect/overlay/temp/ratvar/floor + icon_state = "ratvarfloorglow" + +/obj/effect/overlay/temp/ratvar/floor/catwalk + layer = LATTICE_LAYER + +/obj/effect/overlay/temp/ratvar/window + icon_state = "ratvarwindowglow" + layer = ABOVE_OBJ_LAYER + +/obj/effect/overlay/temp/ratvar/window/single + icon_state = "ratvarwindowglow_s" + +/obj/effect/overlay/temp/ratvar/gear + icon_state = "ratvargearglow" + layer = BELOW_OBJ_LAYER + +/obj/effect/overlay/temp/ratvar/grille + icon_state = "ratvargrilleglow" + layer = BELOW_OBJ_LAYER + +/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 + +/obj/effect/overlay/temp/ratvar/volt_hit/Initialize(mapload, caster, multiplier) + if(multiplier) + damage *= multiplier + duration = max(round(damage * 0.2), 1) + . = ..() + +/obj/effect/overlay/temp/ratvar/volt_hit/true/Initialize(mapload, caster, multiplier) + . = ..() + user = caster + if(user) + var/matrix/M = new + M.Turn(Get_Angle(src, user)) + transform = M + INVOKE_ASYNC(src, .proc/volthit) + +/obj/effect/overlay/temp/ratvar/volt_hit/proc/volthit() + if(user) + Beam(get_turf(user), "volt_ray", time=duration, maxdistance=8, beam_type=/obj/effect/ebeam/volt_ray) + var/hit_amount = 0 + var/turf/T = get_turf(src) + for(var/mob/living/L in T) + if(is_servant_of_ratvar(L)) + continue + var/obj/item/I = L.null_rod_check() + if(I) + L.visible_message("Strange energy flows into [L]'s [I.name]!", \ + "Your [I.name] shields you from [src]!") + continue + L.visible_message("[L] is struck by a [name]!", "You're struck by a [name]!") + L.apply_damage(damage, BURN, "chest", L.run_armor_check("chest", "laser", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 0, "Your armor was penetrated by [src]!")) + add_logs(user, L, "struck with a volt blast") + hit_amount++ + for(var/obj/mecha/M in T) + if(M.occupant) + if(is_servant_of_ratvar(M.occupant)) + continue + to_chat(M.occupant, "Your [M.name] is struck by a [name]!") + M.visible_message("[M] is struck by a [name]!") + M.take_damage(damage, BURN, 0, 0) + hit_amount++ + if(hit_amount) + playsound(src, 'sound/machines/defib_zap.ogg', damage*hit_amount, 1, -1) + else + playsound(src, "sparks", 50, 1) + +/obj/effect/overlay/temp/ratvar/ocular_warden + name = "warden's gaze" + layer = ABOVE_MOB_LAYER + icon_state = "warden_gaze" + duration = 3 + +/obj/effect/overlay/temp/ratvar/ocular_warden/Initialize() + . = ..() + pixel_x = rand(-8, 8) + pixel_y = rand(-10, 10) + animate(src, alpha = 0, time = 3, easing = EASE_OUT) + +/obj/effect/overlay/temp/ratvar/spearbreak + icon = 'icons/effects/64x64.dmi' + icon_state = "ratvarspearbreak" + layer = BELOW_MOB_LAYER + pixel_y = -16 + pixel_x = -16 + +/obj/effect/overlay/temp/ratvar/geis_binding + icon_state = "geisbinding" + +/obj/effect/overlay/temp/ratvar/geis_binding/top + icon_state = "geisbinding_top" + +/obj/effect/overlay/temp/ratvar/component + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "belligerent_eye" + layer = ABOVE_MOB_LAYER + duration = 10 + +/obj/effect/overlay/temp/ratvar/component/Initialize() + . = ..() + transform = matrix()*0.75 + pixel_x = rand(-10, 10) + pixel_y = rand(-10, -2) + animate(src, pixel_y = pixel_y + 10, alpha = 50, time = 10, easing = EASE_OUT) + +/obj/effect/overlay/temp/ratvar/component/cogwheel + icon_state = "vanguard_cogwheel" + +/obj/effect/overlay/temp/ratvar/component/capacitor + icon_state = "geis_capacitor" + +/obj/effect/overlay/temp/ratvar/component/alloy + icon_state = "replicant_alloy" + +/obj/effect/overlay/temp/ratvar/component/ansible + icon_state = "hierophant_ansible" + +/obj/effect/overlay/temp/ratvar/sigil + name = "glowing circle" + icon_state = "sigildull" + +/obj/effect/overlay/temp/ratvar/sigil/transgression + color = "#FAE48C" + layer = ABOVE_MOB_LAYER + duration = 70 + light_range = 5 + light_power = 2 + light_color = "#FAE48C" + +/obj/effect/overlay/temp/ratvar/sigil/transgression/Initialize() + . = ..() + var/oldtransform = transform + animate(src, transform = matrix()*2, time = 5) + animate(transform = oldtransform, alpha = 0, time = 65) + +/obj/effect/overlay/temp/ratvar/sigil/vitality + color = "#1E8CE1" + icon_state = "sigilactivepulse" + layer = ABOVE_MOB_LAYER + light_range = 1.4 + light_power = 0.5 + light_color = "#1E8CE1" + +/obj/effect/overlay/temp/ratvar/sigil/accession + color = "#AF0AAF" + layer = ABOVE_MOB_LAYER + duration = 70 + icon_state = "sigilactiveoverlay" + alpha = 0 diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm new file mode 100644 index 0000000000..ad3f84fe06 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -0,0 +1,144 @@ +//temporary visual effects(/obj/effect/overlay/temp) used by cult stuff +/obj/effect/overlay/temp/cult + icon = 'icons/effects/cult_effects.dmi' + randomdir = 0 + duration = 10 + +/obj/effect/overlay/temp/cult/sparks + randomdir = 1 + name = "blood sparks" + icon_state = "bloodsparkles" + +/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" + +/obj/effect/overlay/temp/dir_setting/cult/phase/out + icon_state = "cultout" + +/obj/effect/overlay/temp/cult/sac + name = "maw of Nar-Sie" + icon_state = "sacconsume" + +/obj/effect/overlay/temp/cult/door + name = "unholy glow" + icon_state = "doorglow" + layer = CLOSED_FIREDOOR_LAYER //above closed doors + +/obj/effect/overlay/temp/cult/door/unruned + icon_state = "unruneddoorglow" + +/obj/effect/overlay/temp/cult/turf + name = "unholy glow" + icon_state = "wallglow" + layer = ABOVE_NORMAL_TURF_LAYER + +/obj/effect/overlay/temp/cult/turf/floor + icon_state = "floorglow" + duration = 5 + +//visuals for runes being magically created +/obj/effect/overlay/temp/cult/rune_spawn + icon_state = "runeouter" + alpha = 0 + var/turnedness = 179 //179 turns counterclockwise, 181 turns clockwise + +/obj/effect/overlay/temp/cult/rune_spawn/Initialize(mapload, set_duration, set_color) + if(isnum(set_duration)) + duration = set_duration + if(set_color) + add_atom_colour(set_color, FIXED_COLOUR_PRIORITY) + . = ..() + var/oldtransform = transform + transform = matrix()*2 + var/matrix/M = transform + M.Turn(turnedness) + transform = M + animate(src, alpha = 255, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL) + animate(src, transform = oldtransform, time = duration, flags = ANIMATION_PARALLEL) + +/obj/effect/overlay/temp/cult/rune_spawn/rune1 + icon_state = "rune1words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune1/inner + icon_state = "rune1inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune1/center + icon_state = "rune1center" + +/obj/effect/overlay/temp/cult/rune_spawn/rune2 + icon_state = "rune2words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune2/inner + icon_state = "rune2inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune2/center + icon_state = "rune2center" + +/obj/effect/overlay/temp/cult/rune_spawn/rune3 + icon_state = "rune3words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune3/inner + icon_state = "rune3inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune3/center + icon_state = "rune3center" + +/obj/effect/overlay/temp/cult/rune_spawn/rune4 + icon_state = "rune4words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune4/inner + icon_state = "rune4inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune4/center + icon_state = "rune4center" + +/obj/effect/overlay/temp/cult/rune_spawn/rune5 + icon_state = "rune5words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune5/inner + icon_state = "rune5inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune5/center + icon_state = "rune5center" + +/obj/effect/overlay/temp/cult/rune_spawn/rune6 + icon_state = "rune6words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune6/inner + icon_state = "rune6inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune6/center + icon_state = "rune6center" + +/obj/effect/overlay/temp/cult/rune_spawn/rune7 + icon_state = "rune7words" + turnedness = 181 + +/obj/effect/overlay/temp/cult/rune_spawn/rune7/inner + icon_state = "rune7inner" + turnedness = 179 + +/obj/effect/overlay/temp/cult/rune_spawn/rune7/center + icon_state = "rune7center" diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm new file mode 100644 index 0000000000..2ceea0aced --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -0,0 +1,312 @@ +//unsorted miscellaneous temporary visuals +/obj/effect/overlay/temp/dir_setting/bloodsplatter + icon = 'icons/effects/blood.dmi' + duration = 5 + randomdir = FALSE + layer = BELOW_MOB_LAYER + var/splatter_type = "splatter" + +/obj/effect/overlay/temp/dir_setting/bloodsplatter/Initialize(mapload, set_dir) + if(set_dir in GLOB.diagonals) + icon_state = "[splatter_type][pick(1, 2, 6)]" + else + icon_state = "[splatter_type][pick(3, 4, 5)]" + . = ..() + var/target_pixel_x = 0 + var/target_pixel_y = 0 + switch(set_dir) + if(NORTH) + target_pixel_y = 16 + if(SOUTH) + target_pixel_y = -16 + layer = ABOVE_MOB_LAYER + if(EAST) + target_pixel_x = 16 + if(WEST) + target_pixel_x = -16 + if(NORTHEAST) + target_pixel_x = 16 + target_pixel_y = 16 + if(NORTHWEST) + target_pixel_x = -16 + target_pixel_y = 16 + if(SOUTHEAST) + target_pixel_x = 16 + target_pixel_y = -16 + layer = ABOVE_MOB_LAYER + if(SOUTHWEST) + target_pixel_x = -16 + target_pixel_y = -16 + layer = ABOVE_MOB_LAYER + animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration) + +/obj/effect/overlay/temp/dir_setting/bloodsplatter/xenosplatter + splatter_type = "xsplatter" + +/obj/effect/overlay/temp/dir_setting/speedbike_trail + name = "speedbike trails" + icon_state = "ion_fade" + layer = BELOW_MOB_LAYER + duration = 10 + randomdir = 0 + +/obj/effect/overlay/temp/dir_setting/firing_effect + icon = 'icons/effects/effects.dmi' + icon_state = "firing_effect" + duration = 2 + +/obj/effect/overlay/temp/dir_setting/firing_effect/setDir(newdir) + switch(newdir) + if(NORTH) + layer = BELOW_MOB_LAYER + pixel_x = rand(-3,3) + pixel_y = rand(4,6) + if(SOUTH) + pixel_x = rand(-3,3) + pixel_y = rand(-1,1) + else + pixel_x = rand(-1,1) + pixel_y = rand(-1,1) + ..() + +/obj/effect/overlay/temp/dir_setting/firing_effect/energy + icon_state = "firing_effect_energy" + duration = 3 + +/obj/effect/overlay/temp/dir_setting/firing_effect/magic + icon_state = "shieldsparkles" + duration = 3 + +/obj/effect/overlay/temp/dir_setting/ninja + name = "ninja shadow" + icon = 'icons/mob/mob.dmi' + icon_state = "uncloak" + duration = 9 + +/obj/effect/overlay/temp/dir_setting/ninja/cloak + icon_state = "cloak" + +/obj/effect/overlay/temp/dir_setting/ninja/shadow + icon_state = "shadow" + +/obj/effect/overlay/temp/dir_setting/ninja/phase + name = "ninja energy" + icon_state = "phasein" + +/obj/effect/overlay/temp/dir_setting/ninja/phase/out + icon_state = "phaseout" + +/obj/effect/overlay/temp/dir_setting/wraith + name = "blood" + icon = 'icons/mob/mob.dmi' + icon_state = "phase_shift2" + duration = 12 + +/obj/effect/overlay/temp/dir_setting/wraith/out + icon_state = "phase_shift" + +/obj/effect/overlay/temp/dir_setting/tailsweep + icon_state = "tailsweep" + duration = 4 + +/obj/effect/overlay/temp/wizard + name = "water" + icon = 'icons/mob/mob.dmi' + icon_state = "reappear" + duration = 5 + +/obj/effect/overlay/temp/wizard/out + icon_state = "liquify" + duration = 12 + +/obj/effect/overlay/temp/monkeyify + icon = 'icons/mob/mob.dmi' + icon_state = "h2monkey" + duration = 22 + +/obj/effect/overlay/temp/monkeyify/humanify + icon_state = "monkey2h" + +/obj/effect/overlay/temp/borgflash + icon = 'icons/mob/mob.dmi' + icon_state = "blspell" + duration = 5 + +/obj/effect/overlay/temp/guardian + randomdir = 0 + +/obj/effect/overlay/temp/guardian/phase + duration = 5 + icon_state = "phasein" + +/obj/effect/overlay/temp/guardian/phase/out + icon_state = "phaseout" + +/obj/effect/overlay/temp/decoy + desc = "It's a decoy!" + duration = 15 + +/obj/effect/overlay/temp/decoy/Initialize(mapload, atom/mimiced_atom) + . = ..() + alpha = initial(alpha) + if(mimiced_atom) + name = mimiced_atom.name + appearance = mimiced_atom.appearance + setDir(mimiced_atom.dir) + mouse_opacity = 0 + +/obj/effect/overlay/temp/decoy/fading/Initialize(mapload, atom/mimiced_atom) + . = ..() + animate(src, alpha = 0, time = duration) + +/obj/effect/overlay/temp/decoy/fading/fivesecond + duration = 50 + +/obj/effect/overlay/temp/small_smoke + icon_state = "smoke" + duration = 50 + +/obj/effect/overlay/temp/fire + icon = 'icons/effects/fire.dmi' + icon_state = "3" + duration = 20 + +/obj/effect/overlay/temp/revenant + name = "spooky lights" + icon_state = "purplesparkles" + +/obj/effect/overlay/temp/revenant/cracks + name = "glowing cracks" + icon_state = "purplecrack" + duration = 6 + +/obj/effect/overlay/temp/gravpush + name = "gravity wave" + icon_state = "shieldsparkles" + duration = 5 + +/obj/effect/overlay/temp/telekinesis + name = "telekinetic force" + icon_state = "empdisable" + duration = 5 + +/obj/effect/overlay/temp/emp + name = "emp sparks" + icon_state = "empdisable" + +/obj/effect/overlay/temp/emp/pulse + name = "emp pulse" + icon_state = "emppulse" + duration = 8 + randomdir = 0 + +/obj/effect/overlay/temp/gib_animation + icon = 'icons/mob/mob.dmi' + duration = 15 + +/obj/effect/overlay/temp/gib_animation/Initialize(mapload, gib_icon) + icon_state = gib_icon // Needs to be before ..() so icon is correct + . = ..() + +/obj/effect/overlay/temp/gib_animation/animal + icon = 'icons/mob/animal.dmi' + +/obj/effect/overlay/temp/dust_animation + icon = 'icons/mob/mob.dmi' + duration = 15 + +/obj/effect/overlay/temp/dust_animation/Initialize(mapload, dust_icon) + icon_state = dust_icon // Before ..() so the correct icon is flick()'d + . = ..() + +/obj/effect/overlay/temp/mummy_animation + icon = 'icons/mob/mob.dmi' + icon_state = "mummy_revive" + duration = 20 + +/obj/effect/overlay/temp/heal //color is white by default, set to whatever is needed + name = "healing glow" + icon_state = "heal" + duration = 15 + +/obj/effect/overlay/temp/heal/Initialize(mapload, set_color) + if(set_color) + add_atom_colour(set_color, FIXED_COLOUR_PRIORITY) + . = ..() + pixel_x = rand(-12, 12) + pixel_y = rand(-9, 0) + +/obj/effect/overlay/temp/kinetic_blast + name = "kinetic explosion" + icon = 'icons/obj/projectiles.dmi' + icon_state = "kinetic_blast" + layer = ABOVE_ALL_MOB_LAYER + duration = 4 + +/obj/effect/overlay/temp/explosion + name = "explosion" + icon = 'icons/effects/96x96.dmi' + icon_state = "explosion" + pixel_x = -32 + pixel_y = -32 + duration = 8 + +/obj/effect/overlay/temp/explosion/fast + icon_state = "explosionfast" + duration = 4 + +/obj/effect/overlay/temp/blob + name = "blob" + icon_state = "blob_attack" + alpha = 140 + randomdir = 0 + duration = 6 + +/obj/effect/overlay/temp/impact_effect + icon_state = "impact_bullet" + duration = 5 + +/obj/effect/overlay/temp/impact_effect/Initialize(mapload, atom/target, obj/item/projectile/P) + if(target == P.original) //the projectile hit the target originally clicked + pixel_x = P.p_x + target.pixel_x - 16 + rand(-4,4) + pixel_y = P.p_y + target.pixel_y - 16 + rand(-4,4) + else + pixel_x = target.pixel_x + rand(-4,4) + pixel_y = target.pixel_y + rand(-4,4) + . = ..() + +/obj/effect/overlay/temp/impact_effect/red_laser + icon_state = "impact_laser" + duration = 4 + +/obj/effect/overlay/temp/impact_effect/red_laser/wall + icon_state = "impact_laser_wall" + duration = 10 + +/obj/effect/overlay/temp/impact_effect/blue_laser + icon_state = "impact_laser_blue" + duration = 4 + +/obj/effect/overlay/temp/impact_effect/green_laser + icon_state = "impact_laser_green" + duration = 4 + +/obj/effect/overlay/temp/impact_effect/purple_laser + icon_state = "impact_laser_purple" + duration = 4 + +/obj/effect/overlay/temp/impact_effect/ion + 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) diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm new file mode 100644 index 0000000000..8c7a178bd6 --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm @@ -0,0 +1,37 @@ +//temporary visual effects +/obj/effect/overlay/temp + icon_state = "nothing" + anchored = 1 + layer = ABOVE_MOB_LAYER + mouse_opacity = 0 + var/duration = 10 //in deciseconds + var/randomdir = TRUE + var/timerid + +/obj/effect/overlay/temp/Initialize() + . = ..() + if(randomdir) + setDir(pick(GLOB.cardinal)) + + timerid = QDEL_IN(src, duration) + +/obj/effect/overlay/temp/Destroy() + . = ..() + deltimer(timerid) + +/obj/effect/overlay/temp/singularity_act() + return + +/obj/effect/overlay/temp/singularity_pull() + return + +/obj/effect/overlay/temp/ex_act() + return + +/obj/effect/overlay/temp/dir_setting + randomdir = FALSE + +/obj/effect/overlay/temp/dir_setting/Initialize(mapload, set_dir) + if(set_dir) + setDir(set_dir) + . = ..() diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 6f3491ac9c..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 + 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 + 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..bfe86bc8ff 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/gps.dm b/code/game/objects/items/devices/gps.dm index e1cf6bb8c8..8ced8d882b 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -1,64 +1,64 @@ -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 +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 + +/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) + +/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 - - + 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) + if(emped) to_chat(user, "[src] fizzles weakly.") return ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) @@ -131,82 +131,82 @@ GLOBAL_LIST_EMPTY(GPS_list) 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) + +/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 f7d11d2f47..fb70d77ff3 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -1,145 +1,145 @@ -// Powersink - used to drain station power - -/obj/item/device/powersink - desc = "A nulling power sink which drains energy from electrical systems." - name = "power sink" - icon_state = "powersink0" - item_state = "electronic" - w_class = WEIGHT_CLASS_BULKY - flags = CONDUCT - throwforce = 5 - throw_speed = 1 - throw_range = 2 - materials = list(MAT_METAL=750) - origin_tech = "powerstorage=5;syndicate=5" - var/drain_rate = 1600000 // amount of power to drain per tick - var/power_drained = 0 // has drained this much power - var/max_power = 1e10 // maximum power that can be drained before exploding - var/mode = 0 // 0 = off, 1=clamped (off), 2=operating - var/admins_warned = 0 // stop spam, only warn the admins once that we are about to boom - - var/const/DISCONNECTED = 0 - var/const/CLAMPED_OFF = 1 - var/const/OPERATING = 2 - - var/obj/structure/cable/attached // the attached cable - -/obj/item/device/powersink/update_icon() - icon_state = "powersink[mode == OPERATING]" - -/obj/item/device/powersink/proc/set_mode(value) - if(value == mode) - return - switch(value) - if(DISCONNECTED) - attached = null - if(mode == OPERATING) - STOP_PROCESSING(SSobj, src) - anchored = 0 - - if(CLAMPED_OFF) - if(!attached) - return - if(mode == OPERATING) - STOP_PROCESSING(SSobj, src) - anchored = 1 - - if(OPERATING) - if(!attached) - return - START_PROCESSING(SSobj, src) - anchored = 1 - - mode = value - update_icon() - set_light(0) - -/obj/item/device/powersink/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - if(mode == DISCONNECTED) - var/turf/T = loc - if(isturf(T) && !T.intact) - attached = locate() in T - if(!attached) - to_chat(user, "This device must be placed over an exposed, powered cable node!") - else - set_mode(CLAMPED_OFF) - user.visible_message( \ - "[user] attaches \the [src] to the cable.", \ - "You attach \the [src] to the cable.", - "You hear some wires being connected to something.") - else - to_chat(user, "This device must be placed over an exposed, powered cable node!") - else - set_mode(DISCONNECTED) - user.visible_message( \ - "[user] detaches \the [src] from the cable.", \ - "You detach \the [src] from the cable.", - "You hear some wires being disconnected from something.") - else - return ..() - -/obj/item/device/powersink/attack_paw() - return - -/obj/item/device/powersink/attack_ai() - return - -/obj/item/device/powersink/attack_hand(mob/user) - switch(mode) - if(DISCONNECTED) - ..() - - if(CLAMPED_OFF) - user.visible_message( \ - "[user] activates \the [src]!", \ - "You activate \the [src].", - "You hear a click.") +// Powersink - used to drain station power + +/obj/item/device/powersink + desc = "A nulling power sink which drains energy from electrical systems." + name = "power sink" + icon_state = "powersink0" + item_state = "electronic" + w_class = WEIGHT_CLASS_BULKY + flags = CONDUCT + throwforce = 5 + throw_speed = 1 + throw_range = 2 + materials = list(MAT_METAL=750) + origin_tech = "powerstorage=5;syndicate=5" + var/drain_rate = 1600000 // amount of power to drain per tick + var/power_drained = 0 // has drained this much power + var/max_power = 1e10 // maximum power that can be drained before exploding + var/mode = 0 // 0 = off, 1=clamped (off), 2=operating + var/admins_warned = 0 // stop spam, only warn the admins once that we are about to boom + + var/const/DISCONNECTED = 0 + var/const/CLAMPED_OFF = 1 + var/const/OPERATING = 2 + + var/obj/structure/cable/attached // the attached cable + +/obj/item/device/powersink/update_icon() + icon_state = "powersink[mode == OPERATING]" + +/obj/item/device/powersink/proc/set_mode(value) + if(value == mode) + return + switch(value) + if(DISCONNECTED) + attached = null + if(mode == OPERATING) + STOP_PROCESSING(SSobj, src) + anchored = 0 + + if(CLAMPED_OFF) + if(!attached) + return + if(mode == OPERATING) + STOP_PROCESSING(SSobj, src) + anchored = 1 + + if(OPERATING) + if(!attached) + return + START_PROCESSING(SSobj, src) + anchored = 1 + + mode = value + update_icon() + set_light(0) + +/obj/item/device/powersink/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + if(mode == DISCONNECTED) + var/turf/T = loc + if(isturf(T) && !T.intact) + attached = locate() in T + if(!attached) + to_chat(user, "This device must be placed over an exposed, powered cable node!") + else + set_mode(CLAMPED_OFF) + user.visible_message( \ + "[user] attaches \the [src] to the cable.", \ + "You attach \the [src] to the cable.", + "You hear some wires being connected to something.") + else + to_chat(user, "This device must be placed over an exposed, powered cable node!") + else + set_mode(DISCONNECTED) + user.visible_message( \ + "[user] detaches \the [src] from the cable.", \ + "You detach \the [src] from the cable.", + "You hear some wires being disconnected from something.") + else + return ..() + +/obj/item/device/powersink/attack_paw() + return + +/obj/item/device/powersink/attack_ai() + return + +/obj/item/device/powersink/attack_hand(mob/user) + switch(mode) + if(DISCONNECTED) + ..() + + if(CLAMPED_OFF) + user.visible_message( \ + "[user] activates \the [src]!", \ + "You activate \the [src].", + "You hear a click.") 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) - user.visible_message( \ - "[user] deactivates \the [src]!", \ - "You deactivate \the [src].", - "You hear a click.") - set_mode(CLAMPED_OFF) - -/obj/item/device/powersink/process() - if(!attached) - set_mode(DISCONNECTED) - return - - var/datum/powernet/PN = attached.powernet - if(PN) - set_light(5) - - // found a powernet, so drain up to max power from it - - var/drained = min ( drain_rate, PN.avail ) - PN.load += drained - power_drained += drained - - // if tried to drain more than available on powernet - // now look for APCs and drain their cells - if(drained < drain_rate) - for(var/obj/machinery/power/terminal/T in PN.nodes) - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = T.master - if(A.operating && A.cell) - A.cell.charge = max(0, A.cell.charge - 50) - power_drained += 50 - if(A.charging == 2) // If the cell was full - A.charging = 1 // It's no longer full - - if(power_drained > max_power * 0.98) - if (!admins_warned) - admins_warned = 1 - message_admins("Power sink at ([x],[y],[z] -
JMP) is 95% full. Explosion imminent.") - playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) - - if(power_drained >= max_power) - STOP_PROCESSING(SSobj, src) - explosion(src.loc, 4,8,16,32) - qdel(src) + set_mode(OPERATING) + + if(OPERATING) + user.visible_message( \ + "[user] deactivates \the [src]!", \ + "You deactivate \the [src].", + "You hear a click.") + set_mode(CLAMPED_OFF) + +/obj/item/device/powersink/process() + if(!attached) + set_mode(DISCONNECTED) + return + + var/datum/powernet/PN = attached.powernet + if(PN) + set_light(5) + + // found a powernet, so drain up to max power from it + + var/drained = min ( drain_rate, PN.avail ) + PN.load += drained + power_drained += drained + + // if tried to drain more than available on powernet + // now look for APCs and drain their cells + if(drained < drain_rate) + for(var/obj/machinery/power/terminal/T in PN.nodes) + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.operating && A.cell) + A.cell.charge = max(0, A.cell.charge - 50) + power_drained += 50 + if(A.charging == 2) // If the cell was full + A.charging = 1 // It's no longer full + + if(power_drained > max_power * 0.98) + if (!admins_warned) + admins_warned = 1 + message_admins("Power sink at ([x],[y],[z] - JMP) is 95% full. Explosion imminent.") + playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) + + if(power_drained >= max_power) + STOP_PROCESSING(SSobj, src) + explosion(src.loc, 4,8,16,32) + qdel(src) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index d2e788e7a3..78cacb7281 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..2a1397d519 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..c975dbff20 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 de0692d8e7..fce3640d22 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,603 +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" +/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/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 + + // --- 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 8d37640b6d..9296dd9e09 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -1,211 +1,211 @@ -/obj/item/device/transfer_valve - icon = 'icons/obj/assemblies.dmi' - name = "tank transfer valve" - icon_state = "valve_1" - item_state = "ttv" - desc = "Regulates the transfer of air between two tanks" - var/obj/item/weapon/tank/tank_one - var/obj/item/weapon/tank/tank_two - var/obj/item/device/attached_device - var/mob/attacher = null - var/valve_open = 0 - var/toggle = 1 - origin_tech = "materials=1;engineering=1" - -/obj/item/device/transfer_valve/IsAssemblyHolder() - return 1 - -/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params) - if(istype(item, /obj/item/weapon/tank)) - if(tank_one && tank_two) - to_chat(user, "There are already two tanks attached, remove one first!") - return - - if(!tank_one) - if(!user.transferItemToLoc(item, src)) - return - tank_one = item - to_chat(user, "You attach the tank to the transfer valve.") - if(item.w_class > w_class) - w_class = item.w_class - else if(!tank_two) - if(!user.transferItemToLoc(item, src)) - return - tank_two = item - to_chat(user, "You attach the tank to the transfer valve.") - if(item.w_class > w_class) - w_class = item.w_class - - update_icon() -//TODO: Have this take an assemblyholder - else if(isassembly(item)) - var/obj/item/device/assembly/A = item - if(A.secured) - to_chat(user, "The device is secured.") - return - if(attached_device) - to_chat(user, "There is already a device attached to the valve, remove it first!") - return - if(!user.transferItemToLoc(item, src)) - return - attached_device = A - to_chat(user, "You attach the [item] to the valve controls and secure it.") - A.holder = src - A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - - GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve." - message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") - log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") - attacher = user - return - -/obj/item/device/transfer_valve/attack_self(mob/user) - user.set_machine(src) - var/dat = {" Valve properties: -
Attachment one: [tank_one] [tank_one ? "Remove" : ""] -
Attachment two: [tank_two] [tank_two ? "Remove" : ""] -
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] -
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} - - var/datum/browser/popup = new(user, "trans_valve", name) - popup.set_content(dat) - popup.open() - return - -/obj/item/device/transfer_valve/Topic(href, href_list) - ..() - if ( usr.stat || usr.restrained() ) - return - if (src.loc == usr) - if(tank_one && href_list["tankone"]) - split_gases() - valve_open = 0 - tank_one.loc = get_turf(src) - tank_one = null - update_icon() - if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) - w_class = WEIGHT_CLASS_NORMAL - else if(tank_two && href_list["tanktwo"]) - split_gases() - valve_open = 0 - tank_two.loc = get_turf(src) - tank_two = null - update_icon() - if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) - w_class = WEIGHT_CLASS_NORMAL - else if(href_list["open"]) - toggle_valve() - else if(attached_device) - if(href_list["rem_device"]) - attached_device.loc = get_turf(src) - attached_device:holder = null - attached_device = null - update_icon() - if(href_list["device"]) - attached_device.attack_self(usr) - - src.attack_self(usr) - src.add_fingerprint(usr) - return - return - -/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D) - if(toggle) - toggle = 0 - toggle_valve() - spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever - toggle = 1 - -/obj/item/device/transfer_valve/update_icon() - cut_overlays() - underlays = null - - if(!tank_one && !tank_two && !attached_device) - icon_state = "valve_1" - return - icon_state = "valve" - - if(tank_one) - add_overlay("[tank_one.icon_state]") - if(tank_two) - var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") - J.Shift(WEST, 13) - underlays += J - if(attached_device) - add_overlay("device") - -/obj/item/device/transfer_valve/proc/merge_gases() - tank_two.air_contents.volume += tank_one.air_contents.volume - var/datum/gas_mixture/temp - temp = tank_one.air_contents.remove_ratio(1) - tank_two.air_contents.merge(temp) - -/obj/item/device/transfer_valve/proc/split_gases() - if (!valve_open || !tank_one || !tank_two) - return - var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume - var/datum/gas_mixture/temp - temp = tank_two.air_contents.remove_ratio(ratio1) - tank_one.air_contents.merge(temp) - tank_two.air_contents.volume -= tank_one.air_contents.volume - - /* - Exadv1: I know this isn't how it's going to work, but this was just to check - it explodes properly when it gets a signal (and it does). - */ - -/obj/item/device/transfer_valve/proc/toggle_valve() - if(!valve_open && tank_one && tank_two) - valve_open = 1 - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - - var/attachment = "no device" - if(attached_device) - if(istype(attached_device, /obj/item/device/assembly/signaler)) - attachment = "[attached_device]" - else - attachment = attached_device - - var/attacher_name = "" - if(!attacher) - attacher_name = "Unknown" - else - attacher_name = "[key_name_admin(attacher)]" - - var/log_str1 = "Bomb valve opened in " - var/log_str2 = "with [attachment] attacher: [attacher_name]" - - var/log_attacher = "" - if(attacher) +/obj/item/device/transfer_valve + icon = 'icons/obj/assemblies.dmi' + name = "tank transfer valve" + icon_state = "valve_1" + item_state = "ttv" + desc = "Regulates the transfer of air between two tanks" + var/obj/item/weapon/tank/tank_one + var/obj/item/weapon/tank/tank_two + var/obj/item/device/attached_device + var/mob/attacher = null + var/valve_open = 0 + var/toggle = 1 + origin_tech = "materials=1;engineering=1" + +/obj/item/device/transfer_valve/IsAssemblyHolder() + return 1 + +/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/weapon/tank)) + if(tank_one && tank_two) + to_chat(user, "There are already two tanks attached, remove one first!") + return + + if(!tank_one) + if(!user.transferItemToLoc(item, src)) + return + tank_one = item + to_chat(user, "You attach the tank to the transfer valve.") + if(item.w_class > w_class) + w_class = item.w_class + else if(!tank_two) + if(!user.transferItemToLoc(item, src)) + return + tank_two = item + to_chat(user, "You attach the tank to the transfer valve.") + if(item.w_class > w_class) + w_class = item.w_class + + update_icon() +//TODO: Have this take an assemblyholder + else if(isassembly(item)) + var/obj/item/device/assembly/A = item + if(A.secured) + to_chat(user, "The device is secured.") + return + if(attached_device) + to_chat(user, "There is already a device attached to the valve, remove it first!") + return + if(!user.transferItemToLoc(item, src)) + return + attached_device = A + to_chat(user, "You attach the [item] to the valve controls and secure it.") + A.holder = src + A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). + + GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve." + message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") + log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") + attacher = user + return + +/obj/item/device/transfer_valve/attack_self(mob/user) + user.set_machine(src) + var/dat = {" Valve properties: +
Attachment one: [tank_one] [tank_one ? "Remove" : ""] +
Attachment two: [tank_two] [tank_two ? "Remove" : ""] +
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] +
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} + + var/datum/browser/popup = new(user, "trans_valve", name) + popup.set_content(dat) + popup.open() + return + +/obj/item/device/transfer_valve/Topic(href, href_list) + ..() + if ( usr.stat || usr.restrained() ) + return + if (src.loc == usr) + if(tank_one && href_list["tankone"]) + split_gases() + valve_open = 0 + tank_one.loc = get_turf(src) + tank_one = null + update_icon() + if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) + w_class = WEIGHT_CLASS_NORMAL + else if(tank_two && href_list["tanktwo"]) + split_gases() + valve_open = 0 + tank_two.loc = get_turf(src) + tank_two = null + update_icon() + if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) + w_class = WEIGHT_CLASS_NORMAL + else if(href_list["open"]) + toggle_valve() + else if(attached_device) + if(href_list["rem_device"]) + attached_device.loc = get_turf(src) + attached_device:holder = null + attached_device = null + update_icon() + if(href_list["device"]) + attached_device.attack_self(usr) + + src.attack_self(usr) + src.add_fingerprint(usr) + return + return + +/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D) + if(toggle) + toggle = 0 + toggle_valve() + spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever + toggle = 1 + +/obj/item/device/transfer_valve/update_icon() + cut_overlays() + underlays = null + + if(!tank_one && !tank_two && !attached_device) + icon_state = "valve_1" + return + icon_state = "valve" + + if(tank_one) + add_overlay("[tank_one.icon_state]") + if(tank_two) + var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") + J.Shift(WEST, 13) + underlays += J + if(attached_device) + add_overlay("device") + +/obj/item/device/transfer_valve/proc/merge_gases() + tank_two.air_contents.volume += tank_one.air_contents.volume + var/datum/gas_mixture/temp + temp = tank_one.air_contents.remove_ratio(1) + tank_two.air_contents.merge(temp) + +/obj/item/device/transfer_valve/proc/split_gases() + if (!valve_open || !tank_one || !tank_two) + return + var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume + var/datum/gas_mixture/temp + temp = tank_two.air_contents.remove_ratio(ratio1) + tank_one.air_contents.merge(temp) + tank_two.air_contents.volume -= tank_one.air_contents.volume + + /* + Exadv1: I know this isn't how it's going to work, but this was just to check + it explodes properly when it gets a signal (and it does). + */ + +/obj/item/device/transfer_valve/proc/toggle_valve() + if(!valve_open && tank_one && tank_two) + valve_open = 1 + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + + var/attachment = "no device" + if(attached_device) + if(istype(attached_device, /obj/item/device/assembly/signaler)) + attachment = "[attached_device]" + else + attachment = attached_device + + var/attacher_name = "" + if(!attacher) + attacher_name = "Unknown" + else + attacher_name = "[key_name_admin(attacher)]" + + var/log_str1 = "Bomb valve opened in " + var/log_str2 = "with [attachment] attacher: [attacher_name]" + + var/log_attacher = "" + if(attacher) log_attacher = "[ADMIN_QUE(attacher)] [ADMIN_FLW(attacher)]" - - var/mob/mob = get_mob_by_key(src.fingerprintslast) - var/last_touch_info = "" - if(mob) + + var/mob/mob = get_mob_by_key(src.fingerprintslast) + var/last_touch_info = "" + if(mob) last_touch_info = "[ADMIN_QUE(mob)] [ADMIN_FLW(mob)]" - - var/log_str3 = " Last touched by: [key_name_admin(mob)]" - + + var/log_str3 = " Last touched by: [key_name_admin(mob)]" + 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) + + GLOB.bombers += bomb_message + + message_admins(bomb_message, 0, 1) 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++) - src.update_icon() - sleep(10) - src.update_icon() - - else if(valve_open && tank_one && tank_two) - split_gases() - valve_open = 0 - src.update_icon() - -// this doesn't do anything but the timer etc. expects it to be here -// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs -/obj/item/device/transfer_valve/proc/c_state() - return + merge_gases() + spawn(20) // In case one tank bursts + for (var/i=0,i<5,i++) + src.update_icon() + sleep(10) + src.update_icon() + + else if(valve_open && tank_one && tank_two) + split_gases() + valve_open = 0 + src.update_icon() + +// this doesn't do anything but the timer etc. expects it to be here +// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs +/obj/item/device/transfer_valve/proc/c_state() + return 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_items.dm b/code/game/objects/items/robot/robot_items.dm index f38cad82f2..abf7f5b827 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -504,6 +504,113 @@ S.change_head_color(color2) dropped = TRUE +//Peacekeeper Cyborg Projectile Dampenening Field +/obj/item/borg/projectile_dampen + name = "Hyperkinetic Dampening projector" + desc = "A device that projects a dampening field that weakens kinetic energy above a certain threshold. Projects a field that drains power per second \ + while active, that will weaken and slow damaging projectiles inside its field. Still being a prototype, it tends to induce a charge on ungrounded metallic surfaces." + icon = 'icons/obj/device.dmi' + icon_state = "shield" + var/maxenergy = 1500 + var/energy = 1500 + var/energy_recharge = 7.5 + var/energy_recharge_cyborg_drain_coefficient = 0.4 + var/cyborg_cell_critical_percentage = 0.05 + var/mob/living/silicon/robot/host = null + var/datum/proximity_monitor/advanced/dampening_field + var/projectile_damage_coefficient = 0.5 + var/projectile_damage_tick_ecost_coefficient = 2 //Lasers get half their damage chopped off, drains 50 power/tick. Note that fields are processed 5 times per second. + var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile. + var/projectile_tick_speed_ecost = 15 + var/current_damage_dampening = 0 + var/list/obj/item/projectile/tracked + var/image/projectile_effect + var/field_radius = 3 + +/obj/item/borg/projectile_dampen/debug + maxenergy = 50000 + energy = 50000 + energy_recharge = 5000 + +/obj/item/borg/projectile_dampen/Initialize() + . = ..() + projectile_effect = image('icons/effects/fields.dmi', "projectile_dampen_effect") + tracked = list() + icon_state = "shield0" + START_PROCESSING(SSfastprocess, src) + +/obj/item/borg/projectile_dampen/Destroy() + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/obj/item/borg/projectile_dampen/attack_self(mob/user) + var/active = FALSE + if(!istype(dampening_field)) + activate_field() + active = TRUE + else + deactivate_field() + active = FALSE + to_chat(user, "You [active? "activate":"deactivate"] the [src].") + icon_state = "[initial(icon_state)][active]" + +/obj/item/borg/projectile_dampen/proc/activate_field() + if(!istype(dampening_field)) + dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) + +/obj/item/borg/projectile_dampen/proc/deactivate_field() + QDEL_NULL(dampening_field) + visible_message("The [src] shuts off!") + for(var/obj/item/projectile/P in tracked) + restore_projectile(P) + +/obj/item/borg/projectile_dampen/process() + process_recharge() + process_usage() + update_location() + +/obj/item/borg/projectile_dampen/proc/update_location() + if(dampening_field) + dampening_field.HandleMove() + +/obj/item/borg/projectile_dampen/proc/process_usage() + var/usage = 0 + for(var/I in tracked) + if(!tracked[I]) //No damage + continue + usage += projectile_tick_speed_ecost + usage += (current_damage_dampening * projectile_damage_tick_ecost_coefficient) + energy = Clamp(energy - usage, 0, maxenergy) + if(energy <= 0) + deactivate_field() + visible_message("The [src] blinks \"ENERGY DEPLETED\"") + +/obj/item/borg/projectile_dampen/proc/process_recharge() + if(!istype(host)) + energy = Clamp(energy + energy_recharge, 0, maxenergy) + return + if((host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy)) + host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient) + energy += energy_recharge + +/obj/item/borg/projectile_dampen/proc/dampen_projectile(obj/item/projectile/P, track_projectile = TRUE) + if(tracked[P]) + return + if(track_projectile) + tracked[P] = P.damage + current_damage_dampening += P.damage + P.damage *= projectile_damage_coefficient + P.speed *= projectile_speed_coefficient + P.add_overlay(projectile_effect) + +/obj/item/borg/projectile_dampen/proc/restore_projectile(obj/item/projectile/P) + tracked -= P + P.damage *= (1/projectile_damage_coefficient) + P.speed *= (1/projectile_speed_coefficient) + P.cut_overlay(projectile_effect) + current_damage_dampening -= P.damage + + /********************************************************************** HUD/SIGHT things ***********************************************************************/ diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 29463b5a5c..185ddf23e6 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -1,403 +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) +// 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) + 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 436bc5ff59..3e6edebb53 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -158,12 +158,12 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ 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() + 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) /* @@ -307,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), \ @@ -337,7 +336,7 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \ * Adamantine */ GLOBAL_LIST_INIT(adamantine_recipes, list( - new /datum/stack_recipe("artificial golem shell", /obj/item/golem_shell/artificial, req_amount=1, res_amount=1), + 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 @@ -385,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 4700f81d82..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,9 +324,8 @@ 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 @@ -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/toys.dm b/code/game/objects/items/toys.dm index 0979a65981..69e00e057e 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -279,6 +279,28 @@ resistance_flags = FLAMMABLE +/obj/item/toy/windupToolbox + name = "windup toolbox" + desc = "A replica toolbox that rumbles when you turn the key" + icon_state = "his_grace" + item_state = "artistic_toolbox" + var/active = FALSE + icon = 'icons/obj/weapons.dmi' + attack_verb = list("robusted") + +/obj/item/toy/windupToolbox/attack_self(mob/user) + if(!active) + icon_state = "his_grace_awakened" + to_chat(user, "You wind up [src], it begins to rumble.") + active = TRUE + addtimer(CALLBACK(src, .proc/stopRumble), 600) + else + to_chat(user, "[src] is already active.") + +/obj/item/toy/windupToolbox/proc/stopRumble() + icon_state = initial(icon_state) + active = FALSE + /* * Subtype of Double-Bladed Energy Swords */ @@ -529,7 +551,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]]" diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 3cf5305dcb..82229bb7cf 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -472,8 +472,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM flags = CONDUCT slot_flags = SLOT_BELT var/lit = 0 + var/fancy = TRUE heat = 1500 resistance_flags = FIRE_PROOF + light_color = LIGHT_COLOR_FIRE /obj/item/weapon/lighter/update_icon() if(lit) @@ -484,37 +486,28 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/lighter/ignition_effect(atom/A, mob/user) . = "With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool." -/obj/item/weapon/lighter/greyscale - name = "cheap lighter" - desc = "A cheap-as-free lighter." - icon_state = "lighter" - -/obj/item/weapon/lighter/greyscale/Initialize() - . = ..() - add_atom_colour(color2hex(randomColor(1)), FIXED_COLOUR_PRIORITY) - update_icon() - -/obj/item/weapon/lighter/greyscale/update_icon() - cut_overlays() - var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base") - base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color +/obj/item/weapon/lighter/proc/set_lit(new_lit) + lit = new_lit if(lit) - base_overlay.icon_state = "[initial(icon_state)]_on" - add_overlay(base_overlay) - -/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user) - . = "After some fiddling, [user] manages to light [A] with [src]." + force = 5 + damtype = "fire" + hitsound = 'sound/items/welder.ogg' + attack_verb = list("burnt", "singed") + set_light(1) + START_PROCESSING(SSobj, src) + else + hitsound = "swing_hit" + force = 0 + attack_verb = null //human_defense.dm takes care of it + set_light(0) + STOP_PROCESSING(SSobj, src) + update_icon() /obj/item/weapon/lighter/attack_self(mob/living/user) if(user.is_holding(src)) if(!lit) - lit = 1 - update_icon() - force = 5 - damtype = "fire" - hitsound = 'sound/items/welder.ogg' - attack_verb = list("burnt", "singed") - if(!istype(src, /obj/item/weapon/lighter/greyscale)) + set_lit(TRUE) + if(fancy) user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.", "Without even breaking stride, you flip open and lights [src] in one smooth movement.") else var/prot = FALSE @@ -534,20 +527,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.apply_damage(5, BURN, hitzone) user.visible_message("After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn their finger in the process.", "You burn yourself while lighting the lighter!") - set_light(1) - START_PROCESSING(SSobj, src) else - lit = 0 - update_icon() - hitsound = "swing_hit" - force = 0 - attack_verb = null //human_defense.dm takes care of it - if(!istype(src, /obj/item/weapon/lighter/greyscale)) + set_lit(FALSE) + if(fancy) user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what [user.p_theyre()] doing. Wow.", "You quietly shut off [src] without even looking at what you're doing. Wow.") else user.visible_message("[user] quietly shuts off [src].", "You quietly shut off [src].") - set_light(0) - STOP_PROCESSING(SSobj, src) else . = ..() @@ -562,7 +547,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(M == user) cig.attackby(src, user) else - if(!istype(src, /obj/item/weapon/lighter/greyscale)) + if(fancy) cig.light("[user] whips the [name] out and holds it for [M]. [user.p_their(TRUE)] arm is as steady as the unflickering flame they light \the [cig] with.") else cig.light("[user] holds the [name] out for [M], and lights the [cig.name].") @@ -575,6 +560,30 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/weapon/lighter/is_hot() return lit * heat + +/obj/item/weapon/lighter/greyscale + name = "cheap lighter" + desc = "A cheap-as-free lighter." + icon_state = "lighter" + fancy = FALSE + +/obj/item/weapon/lighter/greyscale/Initialize() + . = ..() + add_atom_colour(color2hex(randomColor(1)), FIXED_COLOUR_PRIORITY) + update_icon() + +/obj/item/weapon/lighter/greyscale/update_icon() + cut_overlays() + var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base") + base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color + if(lit) + base_overlay.icon_state = "[initial(icon_state)]_on" + add_overlay(base_overlay) + +/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user) + . = "After some fiddling, [user] manages to light [A] with [src]." + + /////////// //ROLLING// /////////// diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 00d6a55f2e..f0fd4947f2 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -50,9 +50,7 @@ M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"]) M.updateappearance(mutations_overlay_update=1) log_attack(log_msg) - else - to_chat(user, "It appears that [M] does not have compatible DNA.") - return + return TRUE /obj/item/weapon/dnainjector/attack(mob/target, mob/user) if(!user.IsAdvancedToolUser()) @@ -79,7 +77,9 @@ add_logs(user, target, "injected", src) - inject(target, user) //Now we actually do the heavy lifting. + if(!inject(target, user)) //Now we actually do the heavy lifting. + to_chat(user, "It appears that [target] does not have compatible DNA.") + used = 1 icon_state = "dnainjector0" desc += " This one is used up." diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm deleted file mode 100644 index 2ae93fa774..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/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index e478813558..81ccd127c8 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -48,23 +48,27 @@ /obj/item/weapon/grenade/attack_self(mob/user) if(!active) if(clown_check(user)) - to_chat(user, "You prime the [name]! [det_time/10] seconds!") - playsound(user.loc, 'sound/weapons/armbomb.ogg', 60, 1) - active = 1 - icon_state = initial(icon_state) + "_active" - add_fingerprint(user) - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]" - GLOB.bombers += message - message_admins(message) - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") + preprime(user) if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() - spawn(det_time) - prime() +/obj/item/weapon/grenade/proc/preprime(mob/user) + if(user) + to_chat(user, "You prime the [name]! [det_time/10] seconds!") + playsound(loc, 'sound/weapons/armbomb.ogg', 60, 1) + active = TRUE + icon_state = initial(icon_state) + "_active" + add_fingerprint(user) + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + if(user) + var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]" + GLOB.bombers += message + message_admins(message) + log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") + + addtimer(CALLBACK(src, .proc/prime), det_time) /obj/item/weapon/grenade/proc/prime() @@ -104,4 +108,4 @@ if(damage && attack_type == PROJECTILE_ATTACK && prob(15)) owner.visible_message("[attack_text] hits [owner]'s [src], setting it off! What a shot!") prime() - return 1 //It hit the grenade, not them \ No newline at end of file + return 1 //It hit the grenade, not them diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm index 09b9d6aa33..21a71f371d 100644 --- a/code/game/objects/items/weapons/grenades/plastic.dm +++ b/code/game/objects/items/weapons/grenades/plastic.dm @@ -18,6 +18,10 @@ plastic_overlay = mutable_appearance(icon, "[item_state]2") ..() +/obj/item/weapon/grenade/plastic/Initialize(mapload) + . = ..() + SET_SECONDARY_FLAG(src, NO_EMP_WIRES) + /obj/item/weapon/grenade/plastic/Destroy() qdel(nadeassembly) nadeassembly = null @@ -154,6 +158,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. diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 86c01d745e..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 +/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 + 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/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/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index a3b72d55bd..2cc1e7824f 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -1,189 +1,189 @@ -/obj/machinery/implantchair - name = "mindshield implanter" - desc = "Used to implant occupants with mindshield implants." - icon = 'icons/obj/machines/implantchair.dmi' - icon_state = "implantchair" - density = 1 - opacity = 0 - anchored = TRUE - - var/ready = TRUE - var/replenishing = FALSE - - var/ready_implants = 5 - var/max_implants = 5 - var/injection_cooldown = 600 - var/replenish_cooldown = 6000 - var/implant_type = /obj/item/weapon/implant/mindshield - var/auto_inject = FALSE - var/auto_replenish = TRUE - var/special = FALSE - var/special_name = "special function" - -/obj/machinery/implantchair/New() - ..() - open_machine() - update_icon() - - -/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state) - ui.open() - - -/obj/machinery/implantchair/ui_data() - var/list/data = list() - data["occupied"] = occupant ? 1 : 0 - data["open"] = state_open - - data["occupant"] = list() +/obj/machinery/implantchair + name = "mindshield implanter" + desc = "Used to implant occupants with mindshield implants." + icon = 'icons/obj/machines/implantchair.dmi' + icon_state = "implantchair" + density = 1 + opacity = 0 + anchored = TRUE + + var/ready = TRUE + var/replenishing = FALSE + + var/ready_implants = 5 + var/max_implants = 5 + var/injection_cooldown = 600 + var/replenish_cooldown = 6000 + var/implant_type = /obj/item/weapon/implant/mindshield + var/auto_inject = FALSE + var/auto_replenish = TRUE + var/special = FALSE + var/special_name = "special function" + +/obj/machinery/implantchair/New() + ..() + open_machine() + update_icon() + + +/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) + + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state) + ui.open() + + +/obj/machinery/implantchair/ui_data() + var/list/data = list() + data["occupied"] = occupant ? 1 : 0 + data["open"] = state_open + + data["occupant"] = list() if(occupant) 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 - data["ready"] = ready - data["replenishing"] = replenishing - - return data - -/obj/machinery/implantchair/ui_act(action, params) - if(..()) - return - switch(action) - if("door") - if(state_open) - close_machine() - else - open_machine() - . = TRUE - if("implant") - implant(occupant,usr) - . = TRUE - -/obj/machinery/implantchair/proc/implant(mob/living/M,mob/user) - if (!istype(M)) - return - if(!ready_implants || !ready) - return - if(implant_action(M,user)) - ready_implants-- - if(!replenishing && auto_replenish) - replenishing = TRUE - addtimer(CALLBACK(src,"replenish"),replenish_cooldown) - if(injection_cooldown > 0) - ready = FALSE - addtimer(CALLBACK(src,"set_ready"),injection_cooldown) - else - playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1) - update_icon() - -/obj/machinery/implantchair/proc/implant_action(mob/living/M) - var/obj/item/weapon/implant/I = new implant_type - if(I.implant(M)) - visible_message("[M] has been implanted by the [name].") - return 1 - -/obj/machinery/implantchair/update_icon() - icon_state = initial(icon_state) - if(state_open) - icon_state += "_open" - if(occupant) - icon_state += "_occupied" - if(ready) - add_overlay("ready") - else - cut_overlays() - -/obj/machinery/implantchair/proc/replenish() - if(ready_implants < max_implants) - ready_implants++ - if(ready_implants < max_implants) - addtimer(CALLBACK(src,"replenish"),replenish_cooldown) - else - replenishing = FALSE - -/obj/machinery/implantchair/proc/set_ready() - ready = TRUE - update_icon() - -/obj/machinery/implantchair/container_resist(mob/living/user) - if(state_open) - return - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - to_chat(user, "You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)") - audible_message("You hear a metallic creaking from [src]!",hearing_distance = 2) - - if(do_after(user, 600, target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || state_open) - return - visible_message("[user] successfully broke out of [src]!") - to_chat(user, "You successfully break out of [src]!") - open_machine() - -/obj/machinery/implantchair/relaymove(mob/user) - container_resist(user) - -/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !user.IsAdvancedToolUser()) - return - close_machine(target) - -/obj/machinery/implantchair/close_machine(mob/living/user) - if((isnull(user) || istype(user)) && state_open) - ..(user) - if(auto_inject && ready && ready_implants > 0) - implant(user,null) - -/obj/machinery/implantchair/genepurge - name = "Genetic purifier" - desc = "Used to purge human genome of foreign influences" - special = TRUE - special_name = "Purge genome" - injection_cooldown = 0 - replenish_cooldown = 300 - -/obj/machinery/implantchair/genepurge/implant_action(mob/living/carbon/human/H,mob/user) - if(!istype(H)) - return 0 - H.set_species(/datum/species/human, 1)//lizards go home - purrbation_remove(H)//remove cats - H.dna.remove_all_mutations()//hulks out - return 1 - - -/obj/machinery/implantchair/brainwash - name = "Neural Imprinter" - desc = "Used to indoctrinate rehabilitate hardened recidivists." - special_name = "Imprint" - injection_cooldown = 3000 - auto_inject = FALSE - auto_replenish = FALSE - special = TRUE - var/objective = "Obey the law. Praise Nanotrasen." - var/custom = FALSE - -/obj/machinery/implantchair/brainwash/implant_action(mob/living/C,mob/user) - if(!istype(C) || !C.mind) // I don't know how this makes any sense for silicons but laws trump objectives anyway. - return 0 - if(custom) - if(!user || !user.Adjacent(src)) - return 0 - objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120) - message_admins("[key_name_admin(user)] set brainwash machine objective to '[objective]'.") - log_game("[key_name_admin(user)] set brainwash machine objective to '[objective]'.") - var/datum/objective/custom_objective = new/datum/objective(objective) - custom_objective.owner = C.mind - C.mind.objectives += custom_objective - C.mind.announce_objectives() - message_admins("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.") - log_game("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.") - return 1 - + + data["special_name"] = special ? special_name : null + data["ready_implants"] = ready_implants + data["ready"] = ready + data["replenishing"] = replenishing + + return data + +/obj/machinery/implantchair/ui_act(action, params) + if(..()) + return + switch(action) + if("door") + if(state_open) + close_machine() + else + open_machine() + . = TRUE + if("implant") + implant(occupant,usr) + . = TRUE + +/obj/machinery/implantchair/proc/implant(mob/living/M,mob/user) + if (!istype(M)) + return + if(!ready_implants || !ready) + return + if(implant_action(M,user)) + ready_implants-- + if(!replenishing && auto_replenish) + replenishing = TRUE + addtimer(CALLBACK(src,"replenish"),replenish_cooldown) + if(injection_cooldown > 0) + ready = FALSE + addtimer(CALLBACK(src,"set_ready"),injection_cooldown) + else + playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 25, 1) + update_icon() + +/obj/machinery/implantchair/proc/implant_action(mob/living/M) + var/obj/item/weapon/implant/I = new implant_type + if(I.implant(M)) + visible_message("[M] has been implanted by the [name].") + return 1 + +/obj/machinery/implantchair/update_icon() + icon_state = initial(icon_state) + if(state_open) + icon_state += "_open" + if(occupant) + icon_state += "_occupied" + if(ready) + add_overlay("ready") + else + cut_overlays() + +/obj/machinery/implantchair/proc/replenish() + if(ready_implants < max_implants) + ready_implants++ + if(ready_implants < max_implants) + addtimer(CALLBACK(src,"replenish"),replenish_cooldown) + else + replenishing = FALSE + +/obj/machinery/implantchair/proc/set_ready() + ready = TRUE + update_icon() + +/obj/machinery/implantchair/container_resist(mob/living/user) + if(state_open) + return + user.changeNext_move(CLICK_CD_BREAKOUT) + user.last_special = world.time + CLICK_CD_BREAKOUT + to_chat(user, "You lean on the back of [src] and start pushing the door open... (this will take about about a minute.)") + audible_message("You hear a metallic creaking from [src]!",hearing_distance = 2) + + if(do_after(user, 600, target = src)) + if(!user || user.stat != CONSCIOUS || user.loc != src || state_open) + return + visible_message("[user] successfully broke out of [src]!") + to_chat(user, "You successfully break out of [src]!") + open_machine() + +/obj/machinery/implantchair/relaymove(mob/user) + container_resist(user) + +/obj/machinery/implantchair/MouseDrop_T(mob/target, mob/user) + if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !isliving(target) || !user.IsAdvancedToolUser()) + return + close_machine(target) + +/obj/machinery/implantchair/close_machine(mob/living/user) + if((isnull(user) || istype(user)) && state_open) + ..(user) + if(auto_inject && ready && ready_implants > 0) + implant(user,null) + +/obj/machinery/implantchair/genepurge + name = "Genetic purifier" + desc = "Used to purge human genome of foreign influences" + special = TRUE + special_name = "Purge genome" + injection_cooldown = 0 + replenish_cooldown = 300 + +/obj/machinery/implantchair/genepurge/implant_action(mob/living/carbon/human/H,mob/user) + if(!istype(H)) + return 0 + H.set_species(/datum/species/human, 1)//lizards go home + purrbation_remove(H)//remove cats + H.dna.remove_all_mutations()//hulks out + return 1 + + +/obj/machinery/implantchair/brainwash + name = "Neural Imprinter" + desc = "Used to indoctrinate rehabilitate hardened recidivists." + special_name = "Imprint" + injection_cooldown = 3000 + auto_inject = FALSE + auto_replenish = FALSE + special = TRUE + var/objective = "Obey the law. Praise Nanotrasen." + var/custom = FALSE + +/obj/machinery/implantchair/brainwash/implant_action(mob/living/C,mob/user) + if(!istype(C) || !C.mind) // I don't know how this makes any sense for silicons but laws trump objectives anyway. + return 0 + if(custom) + if(!user || !user.Adjacent(src)) + return 0 + objective = stripped_input(usr,"What order do you want to imprint on [C]?","Enter the order","",120) + message_admins("[key_name_admin(user)] set brainwash machine objective to '[objective]'.") + log_game("[key_name_admin(user)] set brainwash machine objective to '[objective]'.") + var/datum/objective/custom_objective = new/datum/objective(objective) + custom_objective.owner = C.mind + C.mind.objectives += custom_objective + C.mind.announce_objectives() + message_admins("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.") + log_game("[key_name_admin(user)] brainwashed [key_name_admin(C)] with objective '[objective]'.") + return 1 + diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index fd8c5483a2..d88c1371a7 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -1,259 +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() +/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 - + 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) + 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 + 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" + 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 86c517aa99..64fb4c7ecc 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -244,7 +244,7 @@ range_multiplier = 3 fire_mode = PCANNON_FIFO throw_amount = 1 - maxWeightClass = 100 //50 pies. :^) + maxWeightClass = 150 //50 pies. :^) clumsyCheck = FALSE /obj/item/weapon/pneumatic_cannon/pie/can_load_item(obj/item/I, mob/user) @@ -252,3 +252,22 @@ return ..() to_chat(user, "[src] only accepts pies!") return FALSE + +/obj/item/weapon/pneumatic_cannon/pie/selfcharge + automatic = TRUE + var/charge_amount = 1 + var/charge_ticks = 1 + var/charge_tick = 0 + maxWeightClass = 60 //20 pies. + +/obj/item/weapon/pneumatic_cannon/pie/selfcharge/Initialize() + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/weapon/pneumatic_cannon/pie/selfcharge/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/weapon/pneumatic_cannon/pie/selfcharge/process() + if(++charge_tick >= charge_ticks) + fill_with_type(/obj/item/weapon/reagent_containers/food/snacks/pie, charge_amount) 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/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index b1378617b8..43301e6702 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -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/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index f1f16a69b7..97548b97d6 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -140,6 +140,8 @@ item_state = "plasmaman_tank_belt" slot_flags = SLOT_BELT force = 5 + volume = 3 + w_class = WEIGHT_CLASS_SMALL //thanks i forgot this /obj/item/weapon/tank/internals/plasmaman/belt/full/New() ..() diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index daa86eb833..baf65fd084 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -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 c93dcaca3b..5424e45044 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -1,76 +1,76 @@ -/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" diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index e28c916ae4..71e7c0e566 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -1,408 +1,408 @@ -/obj/item/weapon - -/obj/item/weapon/banhammer - desc = "A banhammer" - name = "banhammer" - icon = 'icons/obj/items.dmi' - icon_state = "toyhammer" - slot_flags = SLOT_BELT - throwforce = 0 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - attack_verb = list("banned") - 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 = 70) - resistance_flags = FIRE_PROOF - -/obj/item/weapon/banhammer/suicide_act(mob/user) - user.visible_message("[user] is hitting [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.") - return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS) - -/obj/item/weapon/banhammer/attack(mob/M, mob/user) - to_chat(M, " You have been banned FOR NO REISIN by [user]") - to_chat(user, "You have BANNED [M]") - playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much - -/obj/item/weapon/sord - name = "\improper SORD" - desc = "This thing is so unspeakably shitty you are having a hard time even holding it." - icon_state = "sord" - item_state = "sord" - slot_flags = SLOT_BELT - force = 2 - throwforce = 1 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/weapon/sord/suicide_act(mob/user) - user.visible_message("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty.", \ - "You try to impale yourself with [src], but it's USELESS...") - return SHAME - -/obj/item/weapon/claymore - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon_state = "claymore" - item_state = "claymore" - hitsound = 'sound/weapons/bladeslice.ogg' - flags = CONDUCT - slot_flags = SLOT_BELT | SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 50 - sharpness = IS_SHARP - 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 = 50) - resistance_flags = FIRE_PROOF - -/obj/item/weapon/claymore/suicide_act(mob/user) - user.visible_message("[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return(BRUTELOSS) - -/obj/item/weapon/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS - desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." - flags = CONDUCT | NODROP | DROPDEL - slot_flags = null - block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY - luminosity = 3 - attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS - var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE - var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK - -/obj/item/weapon/claymore/highlander/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/weapon/claymore/highlander/Destroy() - if(nuke_disk) - nuke_disk.forceMove(get_turf(src)) - nuke_disk.visible_message("The nuke disk is vulnerable!") - nuke_disk = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/weapon/claymore/highlander/process() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) - H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS - else - if(!admin_spawned) - qdel(src) - - -/obj/item/weapon/claymore/highlander/pickup(mob/living/user) - to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") - user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") - user.status_flags += IGNORESLOWDOWN - -/obj/item/weapon/claymore/highlander/dropped(mob/living/user) - user.status_flags -= IGNORESLOWDOWN - qdel(src) //If this ever happens, it's because you lost an arm - -/obj/item/weapon/claymore/highlander/examine(mob/user) - ..() - to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.") - if(nuke_disk) - to_chat(user, "It's holding the nuke disk!") - -/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user) - . = ..() - if(target && target.stat == DEAD && target.mind && target.mind.special_role == "highlander") - user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES - add_notch(user) - target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!") - target.dust() - -/obj/item/weapon/claymore/highlander/attack_self(mob/living/user) - var/closest_victim - var/closest_distance = 255 - for(var/mob/living/carbon/human/H in GLOB.player_list - user) - if(H.client && H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) - closest_victim = H - if(!closest_victim) - to_chat(user, "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.") - return - to_chat(user, "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].") - -/obj/item/weapon/claymore/highlander/IsReflect() - return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? - -/obj/item/weapon/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE - notches++ - force++ - var/new_name = name - switch(notches) - if(1) - to_chat(user, "Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.") - to_chat(user, "You feel your fallen foe's soul entering your blade, restoring your wounds!") - new_name = "notched claymore" - if(2) - to_chat(user, "Another falls before you. Another soul fuses with your own. Another notch in the blade.") - new_name = "double-notched claymore" - add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY) - if(3) - to_chat(user, "You're beginning to relish the thrill of battle.") - new_name = "triple-notched claymore" - add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY) - if(4) - to_chat(user, "You've lost count of how many you've killed.") - new_name = "many-notched claymore" - add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY) - if(5) - to_chat(user, "Five voices now echo in your mind, cheering the slaughter.") - new_name = "battle-tested claymore" - add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY) - if(6) - to_chat(user, "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.") - new_name = "battle-scarred claymore" - add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY) - if(7) - to_chat(user, "Kill. Butcher. Conquer.") - new_name = "vicious claymore" - add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY) - if(8) - to_chat(user, "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE.") - new_name = "bloodthirsty claymore" - add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) - if(9) - to_chat(user, "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.") - new_name = "gore-stained claymore" - add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY) - if(10) - user.visible_message("[user]'s eyes light up with a vengeful fire!", \ - "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") - user.update_icons() - new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" - icon_state = "claymore_valhalla" - item_state = "cultblade" - remove_atom_colour(ADMIN_COLOUR_PRIORITY) - - name = new_name - playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1) - -/obj/item/weapon/katana - name = "katana" - desc = "Woefully underpowered in D20" - icon_state = "katana" - item_state = "katana" - flags = CONDUCT - slot_flags = SLOT_BELT | SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 50 - sharpness = IS_SHARP - 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 = 50) - resistance_flags = FIRE_PROOF - -/obj/item/weapon/katana/cursed - slot_flags = null - -/obj/item/weapon/katana/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!") - return(BRUTELOSS) - -/obj/item/weapon/wirerod - name = "wired rod" - desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." - icon_state = "wiredrod" - item_state = "rods" - flags = CONDUCT - force = 9 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - materials = list(MAT_METAL=1150, MAT_GLASS=75) - attack_verb = list("hit", "bludgeoned", "whacked", "bonked") - -/obj/item/weapon/wirerod/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/shard)) - var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear - - remove_item_from_storage(user) - qdel(I) - qdel(src) - - user.put_in_hands(S) - to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") - - else if(istype(I, /obj/item/device/assembly/igniter) && !(I.flags & NODROP)) - var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod - - remove_item_from_storage(user) - - to_chat(user, "You fasten [I] to the top of the rod with the cable.") - - qdel(I) - qdel(src) - - user.put_in_hands(P) - else - return ..() - - -/obj/item/weapon/throwing_star - name = "throwing star" - desc = "An ancient weapon still used to this day due to it's ease of lodging itself into victim's body parts" - icon_state = "throwingstar" - item_state = "eshield0" - force = 2 - throwforce = 20 //This is never used on mobs since this has a 100% embed chance. - throw_speed = 4 - embedded_pain_multiplier = 4 - w_class = WEIGHT_CLASS_SMALL - embed_chance = 100 - embedded_fall_chance = 0 //Hahaha! - sharpness = IS_SHARP - materials = list(MAT_METAL=500, MAT_GLASS=500) - resistance_flags = FIRE_PROOF - - -/obj/item/weapon/switchblade - name = "switchblade" - icon_state = "switchblade" - desc = "A sharp, concealable, spring-loaded knife." - flags = CONDUCT - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - throw_speed = 3 - throw_range = 6 - materials = list(MAT_METAL=12000) - origin_tech = "engineering=3;combat=2" - hitsound = 'sound/weapons/Genhit.ogg' - attack_verb = list("stubbed", "poked") - resistance_flags = FIRE_PROOF - var/extended = 0 - -/obj/item/weapon/switchblade/attack_self(mob/user) - extended = !extended - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1) - if(extended) - force = 20 - w_class = WEIGHT_CLASS_NORMAL - throwforce = 23 - icon_state = "switchblade_ext" - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - else - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - icon_state = "switchblade" - attack_verb = list("stubbed", "poked") - hitsound = 'sound/weapons/Genhit.ogg' - sharpness = IS_BLUNT - -/obj/item/weapon/switchblade/suicide_act(mob/user) - user.visible_message("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") - return (BRUTELOSS) - -/obj/item/weapon/phone - name = "red phone" - desc = "Should anything ever go wrong..." - icon = 'icons/obj/items.dmi' - icon_state = "red_phone" - force = 3 - throwforce = 2 - throw_speed = 3 - throw_range = 4 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("called", "rang") - hitsound = 'sound/weapons/ring.ogg' - -/obj/item/weapon/phone/suicide_act(mob/user) - if(locate(/obj/structure/chair/stool) in user.loc) - user.visible_message("[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!") - else - user.visible_message("[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!") - return(OXYLOSS) - -/obj/item/weapon/cane - name = "cane" - desc = "A cane used by a true gentleman. Or a clown." - icon = 'icons/obj/weapons.dmi' - icon_state = "cane" - item_state = "stick" - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_SMALL - materials = list(MAT_METAL=50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - -/obj/item/weapon/staff - name = "wizard staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - armour_penetration = 100 - attack_verb = list("bludgeoned", "whacked", "disciplined") - resistance_flags = FLAMMABLE - -/obj/item/weapon/staff/broom - name = "broom" - desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' - icon_state = "broom" - resistance_flags = FLAMMABLE - -/obj/item/weapon/staff/stick - name = "stick" - desc = "A great tool to drag someone else's drinks across the bar." - icon = 'icons/obj/weapons.dmi' - icon_state = "stick" - item_state = "stick" - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/weapon/ectoplasm - name = "ectoplasm" - desc = "spooky" - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm" - -/obj/item/weapon/ectoplasm/suicide_act(mob/user) - user.visible_message("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane.") - return (OXYLOSS) - -/obj/item/weapon/mounted_chainsaw - name = "mounted chainsaw" - desc = "A chainsaw that has replaced your arm." - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" +/obj/item/weapon + +/obj/item/weapon/banhammer + desc = "A banhammer" + name = "banhammer" + icon = 'icons/obj/items.dmi' + icon_state = "toyhammer" + slot_flags = SLOT_BELT + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + throw_speed = 3 + throw_range = 7 + attack_verb = list("banned") + 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 = 70) + resistance_flags = FIRE_PROOF + +/obj/item/weapon/banhammer/suicide_act(mob/user) + user.visible_message("[user] is hitting [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to ban [user.p_them()]self from life.") + return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS) + +/obj/item/weapon/banhammer/attack(mob/M, mob/user) + to_chat(M, " You have been banned FOR NO REISIN by [user]") + to_chat(user, "You have BANNED [M]") + playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much + +/obj/item/weapon/sord + name = "\improper SORD" + desc = "This thing is so unspeakably shitty you are having a hard time even holding it." + icon_state = "sord" + item_state = "sord" + slot_flags = SLOT_BELT + force = 2 + throwforce = 1 + w_class = WEIGHT_CLASS_NORMAL + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + +/obj/item/weapon/sord/suicide_act(mob/user) + user.visible_message("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty.", \ + "You try to impale yourself with [src], but it's USELESS...") + return SHAME + +/obj/item/weapon/claymore + name = "claymore" + desc = "What are you standing around staring at this for? Get to killing!" + icon_state = "claymore" + item_state = "claymore" + hitsound = 'sound/weapons/bladeslice.ogg' + flags = CONDUCT + slot_flags = SLOT_BELT | SLOT_BACK + force = 40 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 50 + sharpness = IS_SHARP + 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 = 50) + resistance_flags = FIRE_PROOF + +/obj/item/weapon/claymore/suicide_act(mob/user) + user.visible_message("[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!") + return(BRUTELOSS) + +/obj/item/weapon/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS + desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." + flags = CONDUCT | NODROP | DROPDEL + slot_flags = null + block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY + luminosity = 3 + attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS + var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE + var/obj/item/weapon/disk/nuclear/nuke_disk //OUR STORED NUKE DISK + +/obj/item/weapon/claymore/highlander/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/item/weapon/claymore/highlander/Destroy() + if(nuke_disk) + nuke_disk.forceMove(get_turf(src)) + nuke_disk.visible_message("The nuke disk is vulnerable!") + nuke_disk = null + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/weapon/claymore/highlander/process() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) + H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS + else + if(!admin_spawned) + qdel(src) + + +/obj/item/weapon/claymore/highlander/pickup(mob/living/user) + to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") + user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") + user.status_flags += IGNORESLOWDOWN + +/obj/item/weapon/claymore/highlander/dropped(mob/living/user) + user.status_flags -= IGNORESLOWDOWN + qdel(src) //If this ever happens, it's because you lost an arm + +/obj/item/weapon/claymore/highlander/examine(mob/user) + ..() + to_chat(user, "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade.") + if(nuke_disk) + to_chat(user, "It's holding the nuke disk!") + +/obj/item/weapon/claymore/highlander/attack(mob/living/target, mob/living/user) + . = ..() + if(target && target.stat == DEAD && target.mind && target.mind.special_role == "highlander") + user.fully_heal() //STEAL THE LIFE OF OUR FALLEN FOES + add_notch(user) + target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!") + target.dust() + +/obj/item/weapon/claymore/highlander/attack_self(mob/living/user) + var/closest_victim + var/closest_distance = 255 + for(var/mob/living/carbon/human/H in GLOB.player_list - user) + if(H.client && H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) + closest_victim = H + if(!closest_victim) + to_chat(user, "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.") + return + to_chat(user, "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].") + +/obj/item/weapon/claymore/highlander/IsReflect() + return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? + +/obj/item/weapon/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE + notches++ + force++ + var/new_name = name + switch(notches) + if(1) + to_chat(user, "Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.") + to_chat(user, "You feel your fallen foe's soul entering your blade, restoring your wounds!") + new_name = "notched claymore" + if(2) + to_chat(user, "Another falls before you. Another soul fuses with your own. Another notch in the blade.") + new_name = "double-notched claymore" + add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY) + if(3) + to_chat(user, "You're beginning to relish the thrill of battle.") + new_name = "triple-notched claymore" + add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY) + if(4) + to_chat(user, "You've lost count of how many you've killed.") + new_name = "many-notched claymore" + add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY) + if(5) + to_chat(user, "Five voices now echo in your mind, cheering the slaughter.") + new_name = "battle-tested claymore" + add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY) + if(6) + to_chat(user, "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.") + new_name = "battle-scarred claymore" + add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY) + if(7) + to_chat(user, "Kill. Butcher. Conquer.") + new_name = "vicious claymore" + add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY) + if(8) + to_chat(user, "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE.") + new_name = "bloodthirsty claymore" + add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) + if(9) + to_chat(user, "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.") + new_name = "gore-stained claymore" + add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY) + if(10) + user.visible_message("[user]'s eyes light up with a vengeful fire!", \ + "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") + user.update_icons() + new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" + icon_state = "claymore_valhalla" + item_state = "cultblade" + remove_atom_colour(ADMIN_COLOUR_PRIORITY) + + name = new_name + playsound(user, 'sound/items/Screwdriver2.ogg', 50, 1) + +/obj/item/weapon/katana + name = "katana" + desc = "Woefully underpowered in D20" + icon_state = "katana" + item_state = "katana" + flags = CONDUCT + slot_flags = SLOT_BELT | SLOT_BACK + force = 40 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + block_chance = 50 + sharpness = IS_SHARP + 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 = 50) + resistance_flags = FIRE_PROOF + +/obj/item/weapon/katana/cursed + slot_flags = null + +/obj/item/weapon/katana/suicide_act(mob/user) + user.visible_message("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!") + return(BRUTELOSS) + +/obj/item/weapon/wirerod + name = "wired rod" + desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." + icon_state = "wiredrod" + item_state = "rods" + flags = CONDUCT + force = 9 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + materials = list(MAT_METAL=1150, MAT_GLASS=75) + attack_verb = list("hit", "bludgeoned", "whacked", "bonked") + +/obj/item/weapon/wirerod/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/shard)) + var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear + + remove_item_from_storage(user) + qdel(I) + qdel(src) + + user.put_in_hands(S) + to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") + + else if(istype(I, /obj/item/device/assembly/igniter) && !(I.flags & NODROP)) + var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod + + remove_item_from_storage(user) + + to_chat(user, "You fasten [I] to the top of the rod with the cable.") + + qdel(I) + qdel(src) + + user.put_in_hands(P) + else + return ..() + + +/obj/item/weapon/throwing_star + name = "throwing star" + desc = "An ancient weapon still used to this day due to it's ease of lodging itself into victim's body parts" + icon_state = "throwingstar" + item_state = "eshield0" + force = 2 + throwforce = 20 //This is never used on mobs since this has a 100% embed chance. + throw_speed = 4 + embedded_pain_multiplier = 4 + w_class = WEIGHT_CLASS_SMALL + embed_chance = 100 + embedded_fall_chance = 0 //Hahaha! + sharpness = IS_SHARP + materials = list(MAT_METAL=500, MAT_GLASS=500) + resistance_flags = FIRE_PROOF + + +/obj/item/weapon/switchblade + name = "switchblade" + icon_state = "switchblade" + desc = "A sharp, concealable, spring-loaded knife." + flags = CONDUCT + force = 3 + w_class = WEIGHT_CLASS_SMALL + throwforce = 5 + throw_speed = 3 + throw_range = 6 + materials = list(MAT_METAL=12000) + origin_tech = "engineering=3;combat=2" + hitsound = 'sound/weapons/Genhit.ogg' + attack_verb = list("stubbed", "poked") + resistance_flags = FIRE_PROOF + var/extended = 0 + +/obj/item/weapon/switchblade/attack_self(mob/user) + extended = !extended + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1) + if(extended) + force = 20 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 23 + icon_state = "switchblade_ext" + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP + else + force = 3 + w_class = WEIGHT_CLASS_SMALL + throwforce = 5 + icon_state = "switchblade" + attack_verb = list("stubbed", "poked") + hitsound = 'sound/weapons/Genhit.ogg' + sharpness = IS_BLUNT + +/obj/item/weapon/switchblade/suicide_act(mob/user) + user.visible_message("[user] is slitting [user.p_their()] own throat with [src]! It looks like [user.p_theyre()] trying to commit suicide!") + return (BRUTELOSS) + +/obj/item/weapon/phone + name = "red phone" + desc = "Should anything ever go wrong..." + icon = 'icons/obj/items.dmi' + icon_state = "red_phone" + force = 3 + throwforce = 2 + throw_speed = 3 + throw_range = 4 + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("called", "rang") + hitsound = 'sound/weapons/ring.ogg' + +/obj/item/weapon/phone/suicide_act(mob/user) + if(locate(/obj/structure/chair/stool) in user.loc) + user.visible_message("[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!") + else + user.visible_message("[user] is strangling [user.p_them()]self with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!") + return(OXYLOSS) + +/obj/item/weapon/cane + name = "cane" + desc = "A cane used by a true gentleman. Or a clown." + icon = 'icons/obj/weapons.dmi' + icon_state = "cane" + item_state = "stick" + force = 5 + throwforce = 5 + w_class = WEIGHT_CLASS_SMALL + materials = list(MAT_METAL=50) + attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") + +/obj/item/weapon/staff + name = "wizard staff" + desc = "Apparently a staff used by the wizard." + icon = 'icons/obj/wizard.dmi' + icon_state = "staff" + force = 3 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + armour_penetration = 100 + attack_verb = list("bludgeoned", "whacked", "disciplined") + resistance_flags = FLAMMABLE + +/obj/item/weapon/staff/broom + name = "broom" + desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." + icon = 'icons/obj/wizard.dmi' + icon_state = "broom" + resistance_flags = FLAMMABLE + +/obj/item/weapon/staff/stick + name = "stick" + desc = "A great tool to drag someone else's drinks across the bar." + icon = 'icons/obj/weapons.dmi' + icon_state = "stick" + item_state = "stick" + force = 3 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/weapon/ectoplasm + name = "ectoplasm" + desc = "spooky" + gender = PLURAL + icon = 'icons/obj/wizard.dmi' + icon_state = "ectoplasm" + +/obj/item/weapon/ectoplasm/suicide_act(mob/user) + user.visible_message("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane.") + return (OXYLOSS) + +/obj/item/weapon/mounted_chainsaw + name = "mounted chainsaw" + desc = "A chainsaw that has replaced your arm." + icon_state = "chainsaw_on" + item_state = "mounted_chainsaw" flags = NODROP | ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - force = 21 - throwforce = 0 - throw_range = 0 - throw_speed = 0 - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - + w_class = WEIGHT_CLASS_HUGE + force = 21 + throwforce = 0 + throw_range = 0 + throw_speed = 0 + sharpness = IS_SHARP + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsawhit.ogg' + /obj/item/weapon/mounted_chainsaw/Destroy() var/obj/item/bodypart/part - new /obj/item/weapon/twohanded/required/chainsaw(get_turf(src)) + new /obj/item/weapon/twohanded/required/chainsaw(get_turf(src)) if(iscarbon(loc)) var/mob/living/carbon/holder = loc var/index = holder.get_held_index_of_item(src) @@ -411,143 +411,143 @@ . = ..() if(part) part.drop_limb() - -/obj/item/weapon/statuebust - name = "bust" - desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it - icon = 'icons/obj/statue.dmi' - icon_state = "bust" - force = 15 - throwforce = 10 - throw_speed = 5 - throw_range = 2 - attack_verb = list("busted") - -/obj/item/weapon/tailclub - name = "tail club" - desc = "For the beating to death of lizards with their own tails." - icon_state = "tailclub" - force = 14 - throwforce = 1 // why are you throwing a club do you even weapon - throw_speed = 1 - throw_range = 1 - attack_verb = list("clubbed", "bludgeoned") - -/obj/item/weapon/melee/chainofcommand/tailwhip - name = "liz o' nine tails" - desc = "A whip fashioned from the severed tails of lizards." - icon_state = "tailwhip" - origin_tech = "engineering=3;combat=3;biotech=3" - needs_permit = 0 - -/obj/item/weapon/melee/skateboard - name = "skateboard" - desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." - icon_state = "skateboard" - item_state = "skateboard" - force = 12 - throwforce = 4 - w_class = WEIGHT_CLASS_HUGE - attack_verb = list("smacked", "whacked", "slammed", "smashed") - -/obj/item/weapon/melee/skateboard/attack_self(mob/user) - new /obj/vehicle/scooter/skateboard(get_turf(user)) - qdel(src) - -/obj/item/weapon/melee/baseball_bat - name = "baseball bat" - desc = "There ain't a skull in the league that can withstand a swatter." - icon = 'icons/obj/items.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - force = 10 - throwforce = 12 - attack_verb = list("beat", "smacked") - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - -/obj/item/weapon/melee/baseball_bat/homerun - name = "home run bat" - desc = "This thing looks dangerous... Dangerously good at baseball, that is." - homerun_able = 1 - -/obj/item/weapon/melee/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, "You're already ready to do a home run!") - ..() - return - to_chat(user, "You begin gathering strength...") - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1) - if(do_after(user, 90, target = src)) - to_chat(user, "You gather power! Time for a home run!") - homerun_ready = 1 - ..() - -/obj/item/weapon/melee/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(homerun_ready) - user.visible_message("It's a home run!") - target.throw_at(throw_target, rand(8,10), 14, user) - target.ex_act(2) - playsound(get_turf(src), 'sound/weapons/HOMERUN.ogg', 100, 1) - homerun_ready = 0 - return - else if(!target.anchored) - target.throw_at(throw_target, rand(1,2), 7, user) - -/obj/item/weapon/melee/baseball_bat/ablative - name = "metal baseball bat" - desc = "This bat is made of highly reflective, highly armored material." - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - force = 12 - throwforce = 15 - -/obj/item/weapon/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers - var/picksound = rand(1,2) - var/turf = get_turf(src) - if(picksound == 1) - playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, 1) - if(picksound == 2) - playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1) - return 1 - -/obj/item/weapon/melee/flyswatter - name = "Flyswatter" - desc = "Useful for killing insects of all sizes." - icon = 'icons/obj/weapons.dmi' - icon_state = "flyswatter" - item_state = "flyswatter" - force = 1 - throwforce = 1 - attack_verb = list("swatted", "smacked") - hitsound = 'sound/effects/snap.ogg' - w_class = WEIGHT_CLASS_SMALL - //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. - var/list/strong_against - -/obj/item/weapon/melee/flyswatter/New() - ..() - strong_against = typecacheof(list( - /mob/living/simple_animal/hostile/poison/bees/, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/cockroach, - /obj/item/queen_bee - )) - - -/obj/item/weapon/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) - if(proximity_flag) - if(is_type_in_typecache(target, strong_against)) - new /obj/effect/decal/cleanable/deadcockroach(get_turf(target)) - to_chat(user, "You easily splat the [target].") - if(istype(target, /mob/living/)) - var/mob/living/bug = target - bug.death(1) - else - qdel(target) + +/obj/item/weapon/statuebust + name = "bust" + desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it + icon = 'icons/obj/statue.dmi' + icon_state = "bust" + force = 15 + throwforce = 10 + throw_speed = 5 + throw_range = 2 + attack_verb = list("busted") + +/obj/item/weapon/tailclub + name = "tail club" + desc = "For the beating to death of lizards with their own tails." + icon_state = "tailclub" + force = 14 + throwforce = 1 // why are you throwing a club do you even weapon + throw_speed = 1 + throw_range = 1 + attack_verb = list("clubbed", "bludgeoned") + +/obj/item/weapon/melee/chainofcommand/tailwhip + name = "liz o' nine tails" + desc = "A whip fashioned from the severed tails of lizards." + icon_state = "tailwhip" + origin_tech = "engineering=3;combat=3;biotech=3" + needs_permit = 0 + +/obj/item/weapon/melee/skateboard + name = "skateboard" + desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." + icon_state = "skateboard" + item_state = "skateboard" + force = 12 + throwforce = 4 + w_class = WEIGHT_CLASS_HUGE + attack_verb = list("smacked", "whacked", "slammed", "smashed") + +/obj/item/weapon/melee/skateboard/attack_self(mob/user) + new /obj/vehicle/scooter/skateboard(get_turf(user)) + qdel(src) + +/obj/item/weapon/melee/baseball_bat + name = "baseball bat" + desc = "There ain't a skull in the league that can withstand a swatter." + icon = 'icons/obj/items.dmi' + icon_state = "baseball_bat" + item_state = "baseball_bat" + force = 10 + throwforce = 12 + attack_verb = list("beat", "smacked") + w_class = WEIGHT_CLASS_HUGE + var/homerun_ready = 0 + var/homerun_able = 0 + +/obj/item/weapon/melee/baseball_bat/homerun + name = "home run bat" + desc = "This thing looks dangerous... Dangerously good at baseball, that is." + homerun_able = 1 + +/obj/item/weapon/melee/baseball_bat/attack_self(mob/user) + if(!homerun_able) + ..() + return + if(homerun_ready) + to_chat(user, "You're already ready to do a home run!") + ..() + return + to_chat(user, "You begin gathering strength...") + playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1) + if(do_after(user, 90, target = src)) + to_chat(user, "You gather power! Time for a home run!") + homerun_ready = 1 + ..() + +/obj/item/weapon/melee/baseball_bat/attack(mob/living/target, mob/living/user) + . = ..() + var/atom/throw_target = get_edge_target_turf(target, user.dir) + if(homerun_ready) + user.visible_message("It's a home run!") + target.throw_at(throw_target, rand(8,10), 14, user) + target.ex_act(2) + playsound(get_turf(src), 'sound/weapons/HOMERUN.ogg', 100, 1) + homerun_ready = 0 + return + else if(!target.anchored) + target.throw_at(throw_target, rand(1,2), 7, user) + +/obj/item/weapon/melee/baseball_bat/ablative + name = "metal baseball bat" + desc = "This bat is made of highly reflective, highly armored material." + icon_state = "baseball_bat_metal" + item_state = "baseball_bat_metal" + force = 12 + throwforce = 15 + +/obj/item/weapon/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers + var/picksound = rand(1,2) + var/turf = get_turf(src) + if(picksound == 1) + playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, 1) + if(picksound == 2) + playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1) + return 1 + +/obj/item/weapon/melee/flyswatter + name = "Flyswatter" + desc = "Useful for killing insects of all sizes." + icon = 'icons/obj/weapons.dmi' + icon_state = "flyswatter" + item_state = "flyswatter" + force = 1 + throwforce = 1 + attack_verb = list("swatted", "smacked") + hitsound = 'sound/effects/snap.ogg' + w_class = WEIGHT_CLASS_SMALL + //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. + var/list/strong_against + +/obj/item/weapon/melee/flyswatter/New() + ..() + strong_against = typecacheof(list( + /mob/living/simple_animal/hostile/poison/bees/, + /mob/living/simple_animal/butterfly, + /mob/living/simple_animal/cockroach, + /obj/item/queen_bee + )) + + +/obj/item/weapon/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) + if(proximity_flag) + if(is_type_in_typecache(target, strong_against)) + new /obj/effect/decal/cleanable/deadcockroach(get_turf(target)) + to_chat(user, "You easily splat the [target].") + if(istype(target, /mob/living/)) + var/mob/living/bug = target + bug.death(1) + else + qdel(target) 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/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 89c815692d..e3aed96516 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -1,316 +1,316 @@ -/* -CONTAINS: -BEDSHEETS -LINEN BINS -*/ - -/obj/item/weapon/bedsheet - name = "bedsheet" - desc = "A surprisingly soft linen bedsheet." - icon = 'icons/obj/bedsheets.dmi' - icon_state = "sheetwhite" - item_state = "bedsheet" - slot_flags = SLOT_NECK - layer = MOB_LAYER - throwforce = 0 - throw_speed = 1 - throw_range = 2 - w_class = WEIGHT_CLASS_TINY - item_color = "white" - resistance_flags = FLAMMABLE - - dog_fashion = /datum/dog_fashion/head/ghost - -/obj/item/weapon/bedsheet/attack(mob/living/M, mob/user) - if(!attempt_initiate_surgery(src, M, user)) - ..() - -/obj/item/weapon/bedsheet/attack_self(mob/user) - user.drop_item() - if(layer == initial(layer)) - layer = ABOVE_MOB_LAYER - to_chat(user, "You cover yourself with [src].") - else - layer = initial(layer) - to_chat(user, "You smooth [src] out beneath you.") - add_fingerprint(user) - return - -/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/wirecutters) || I.is_sharp()) - var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3) - transfer_fingerprints_to(C) - C.add_fingerprint(user) - qdel(src) - to_chat(user, "You tear [src] up.") - else - return ..() - -/obj/item/weapon/bedsheet/blue - icon_state = "sheetblue" - item_color = "blue" - -/obj/item/weapon/bedsheet/green - icon_state = "sheetgreen" - item_color = "green" - -/obj/item/weapon/bedsheet/orange - icon_state = "sheetorange" - item_color = "orange" - -/obj/item/weapon/bedsheet/purple - icon_state = "sheetpurple" - item_color = "purple" - -/obj/item/weapon/bedsheet/patriot - name = "patriotic bedsheet" - desc = "You've never felt more free than when sleeping on this." - icon_state = "sheetUSA" - item_color = "sheetUSA" - -/obj/item/weapon/bedsheet/rainbow - name = "rainbow bedsheet" - desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together." - icon_state = "sheetrainbow" - item_color = "rainbow" - -/obj/item/weapon/bedsheet/red - icon_state = "sheetred" - item_color = "red" - -/obj/item/weapon/bedsheet/yellow - icon_state = "sheetyellow" - item_color = "yellow" - -/obj/item/weapon/bedsheet/mime - name = "mime's blanket" - desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this." - icon_state = "sheetmime" - item_color = "mime" - -/obj/item/weapon/bedsheet/clown - name = "clown's blanket" - desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas." - icon_state = "sheetclown" - item_color = "clown" - -/obj/item/weapon/bedsheet/captain - name = "captain's bedsheet" - desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains." - icon_state = "sheetcaptain" - item_color = "captain" - -/obj/item/weapon/bedsheet/rd - name = "research director's bedsheet" - desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day." - icon_state = "sheetrd" - item_color = "director" - +/* +CONTAINS: +BEDSHEETS +LINEN BINS +*/ + +/obj/item/weapon/bedsheet + name = "bedsheet" + desc = "A surprisingly soft linen bedsheet." + icon = 'icons/obj/bedsheets.dmi' + icon_state = "sheetwhite" + item_state = "bedsheet" + slot_flags = SLOT_NECK + layer = MOB_LAYER + throwforce = 0 + throw_speed = 1 + throw_range = 2 + w_class = WEIGHT_CLASS_TINY + item_color = "white" + resistance_flags = FLAMMABLE + + dog_fashion = /datum/dog_fashion/head/ghost + +/obj/item/weapon/bedsheet/attack(mob/living/M, mob/user) + if(!attempt_initiate_surgery(src, M, user)) + ..() + +/obj/item/weapon/bedsheet/attack_self(mob/user) + user.drop_item() + if(layer == initial(layer)) + layer = ABOVE_MOB_LAYER + to_chat(user, "You cover yourself with [src].") + else + layer = initial(layer) + to_chat(user, "You smooth [src] out beneath you.") + add_fingerprint(user) + return + +/obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/wirecutters) || I.is_sharp()) + var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3) + transfer_fingerprints_to(C) + C.add_fingerprint(user) + qdel(src) + to_chat(user, "You tear [src] up.") + else + return ..() + +/obj/item/weapon/bedsheet/blue + icon_state = "sheetblue" + item_color = "blue" + +/obj/item/weapon/bedsheet/green + icon_state = "sheetgreen" + item_color = "green" + +/obj/item/weapon/bedsheet/orange + icon_state = "sheetorange" + item_color = "orange" + +/obj/item/weapon/bedsheet/purple + icon_state = "sheetpurple" + item_color = "purple" + +/obj/item/weapon/bedsheet/patriot + name = "patriotic bedsheet" + desc = "You've never felt more free than when sleeping on this." + icon_state = "sheetUSA" + item_color = "sheetUSA" + +/obj/item/weapon/bedsheet/rainbow + name = "rainbow bedsheet" + desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together." + icon_state = "sheetrainbow" + item_color = "rainbow" + +/obj/item/weapon/bedsheet/red + icon_state = "sheetred" + item_color = "red" + +/obj/item/weapon/bedsheet/yellow + icon_state = "sheetyellow" + item_color = "yellow" + +/obj/item/weapon/bedsheet/mime + name = "mime's blanket" + desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this." + icon_state = "sheetmime" + item_color = "mime" + +/obj/item/weapon/bedsheet/clown + name = "clown's blanket" + desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas." + icon_state = "sheetclown" + item_color = "clown" + +/obj/item/weapon/bedsheet/captain + name = "captain's bedsheet" + desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains." + icon_state = "sheetcaptain" + item_color = "captain" + +/obj/item/weapon/bedsheet/rd + name = "research director's bedsheet" + desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day." + 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." - icon_state = "sheetmedical" - item_color = "medical" - -/obj/item/weapon/bedsheet/cmo - name = "chief medical officer's bedsheet" - desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime." - icon_state = "sheetcmo" - item_color = "cmo" - -/obj/item/weapon/bedsheet/hos - name = "head of security's bedsheet" - desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!" - icon_state = "sheethos" - item_color = "hosred" - -/obj/item/weapon/bedsheet/hop - name = "head of personnel's bedsheet" - desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio." - icon_state = "sheethop" - item_color = "hop" - -/obj/item/weapon/bedsheet/ce - name = "chief engineer's bedsheet" - desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil." - icon_state = "sheetce" - item_color = "chief" - -/obj/item/weapon/bedsheet/qm - name = "quartermaster's bedsheet" - desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper." - icon_state = "sheetqm" - item_color = "qm" - -/obj/item/weapon/bedsheet/brown - icon_state = "sheetbrown" - item_color = "cargo" - -/obj/item/weapon/bedsheet/black - icon_state = "sheetblack" - item_color = "black" - -/obj/item/weapon/bedsheet/centcom - name = "\improper Centcom bedsheet" - desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials." - icon_state = "sheetcentcom" - item_color = "centcom" - -/obj/item/weapon/bedsheet/syndie - name = "syndicate bedsheet" - desc = "It has a syndicate emblem and it has an aura of evil." - icon_state = "sheetsyndie" - item_color = "syndie" - -/obj/item/weapon/bedsheet/cult - name = "cultist's bedsheet" - desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence." - icon_state = "sheetcult" - item_color = "cult" - -/obj/item/weapon/bedsheet/wiz - name = "wizard's bedsheet" - desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!" - icon_state = "sheetwiz" - item_color = "wiz" - -/obj/item/weapon/bedsheet/nanotrasen - name = "nanotrasen bedsheet" - desc = "It has the Nanotrasen logo on it and has an aura of duty." - icon_state = "sheetNT" - item_color = "nanotrasen" - -/obj/item/weapon/bedsheet/ian - icon_state = "sheetian" - item_color = "ian" - - -/obj/item/weapon/bedsheet/random - icon_state = "sheetrainbow" - item_color = "rainbow" - name = "random bedsheet" - desc = "If you're reading this description ingame, something has gone wrong! Honk!" - -/obj/item/weapon/bedsheet/random/New() - var/obj/item/weapon/bedsheet/B = pick(subtypesof(/obj/item/weapon/bedsheet) - /obj/item/weapon/bedsheet/random) - name = initial(B.name) - desc = initial(B.desc) - icon_state = initial(B.icon_state) - item_state = initial(B.item_state) - item_color = initial(B.item_color) - -/obj/structure/bedsheetbin - name = "linen bin" - desc = "It looks rather cosy." - icon = 'icons/obj/structures.dmi' - icon_state = "linenbin-full" - anchored = 1 - resistance_flags = FLAMMABLE - obj_integrity = 70 - max_integrity = 70 - var/amount = 10 - var/list/sheets = list() - var/obj/item/hidden = null - - -/obj/structure/bedsheetbin/examine(mob/user) - ..() - if(amount < 1) - to_chat(user, "There are no bed sheets in the bin.") - else if(amount == 1) - to_chat(user, "There is one bed sheet in the bin.") - else - to_chat(user, "There are [amount] bed sheets in the bin.") - - -/obj/structure/bedsheetbin/update_icon() - switch(amount) - if(0) - icon_state = "linenbin-empty" - if(1 to 5) - icon_state = "linenbin-half" - else - icon_state = "linenbin-full" - -/obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume) - if(amount) - amount = 0 - update_icon() - ..() - -/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/bedsheet)) - if(!user.drop_item()) - return - I.loc = src - sheets.Add(I) - amount++ - to_chat(user, "You put [I] in [src].") - update_icon() - else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.drop_item()) - to_chat(user, "\The [I] is stuck to your hand, you cannot hide it among the sheets!") - return - I.loc = src - hidden = I - to_chat(user, "You hide [I] among the sheets.") - - - -/obj/structure/bedsheetbin/attack_paw(mob/user) - return attack_hand(user) - - -/obj/structure/bedsheetbin/attack_hand(mob/user) - if(user.lying) - return - if(amount >= 1) - amount-- - - var/obj/item/weapon/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/weapon/bedsheet(loc) - - B.loc = user.loc - user.put_in_hands(B) - to_chat(user, "You take [B] out of [src].") - update_icon() - - if(hidden) - hidden.loc = user.loc - to_chat(user, "[hidden] falls out of [B]!") - hidden = null - - - add_fingerprint(user) -/obj/structure/bedsheetbin/attack_tk(mob/user) - if(amount >= 1) - amount-- - - var/obj/item/weapon/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] - sheets.Remove(B) - - else - B = new /obj/item/weapon/bedsheet(loc) - - B.loc = loc - to_chat(user, "You telekinetically remove [B] from [src].") - update_icon() - - if(hidden) - hidden.loc = loc - hidden = null - - - add_fingerprint(user) +/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." + icon_state = "sheetmedical" + item_color = "medical" + +/obj/item/weapon/bedsheet/cmo + name = "chief medical officer's bedsheet" + desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime." + icon_state = "sheetcmo" + item_color = "cmo" + +/obj/item/weapon/bedsheet/hos + name = "head of security's bedsheet" + desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!" + icon_state = "sheethos" + item_color = "hosred" + +/obj/item/weapon/bedsheet/hop + name = "head of personnel's bedsheet" + desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio." + icon_state = "sheethop" + item_color = "hop" + +/obj/item/weapon/bedsheet/ce + name = "chief engineer's bedsheet" + desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil." + icon_state = "sheetce" + item_color = "chief" + +/obj/item/weapon/bedsheet/qm + name = "quartermaster's bedsheet" + desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper." + icon_state = "sheetqm" + item_color = "qm" + +/obj/item/weapon/bedsheet/brown + icon_state = "sheetbrown" + item_color = "cargo" + +/obj/item/weapon/bedsheet/black + icon_state = "sheetblack" + item_color = "black" + +/obj/item/weapon/bedsheet/centcom + name = "\improper Centcom bedsheet" + desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials." + icon_state = "sheetcentcom" + item_color = "centcom" + +/obj/item/weapon/bedsheet/syndie + name = "syndicate bedsheet" + desc = "It has a syndicate emblem and it has an aura of evil." + icon_state = "sheetsyndie" + item_color = "syndie" + +/obj/item/weapon/bedsheet/cult + name = "cultist's bedsheet" + desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence." + icon_state = "sheetcult" + item_color = "cult" + +/obj/item/weapon/bedsheet/wiz + name = "wizard's bedsheet" + desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!" + icon_state = "sheetwiz" + item_color = "wiz" + +/obj/item/weapon/bedsheet/nanotrasen + name = "nanotrasen bedsheet" + desc = "It has the Nanotrasen logo on it and has an aura of duty." + icon_state = "sheetNT" + item_color = "nanotrasen" + +/obj/item/weapon/bedsheet/ian + icon_state = "sheetian" + item_color = "ian" + + +/obj/item/weapon/bedsheet/random + icon_state = "sheetrainbow" + item_color = "rainbow" + name = "random bedsheet" + desc = "If you're reading this description ingame, something has gone wrong! Honk!" + +/obj/item/weapon/bedsheet/random/New() + var/obj/item/weapon/bedsheet/B = pick(subtypesof(/obj/item/weapon/bedsheet) - /obj/item/weapon/bedsheet/random) + name = initial(B.name) + desc = initial(B.desc) + icon_state = initial(B.icon_state) + item_state = initial(B.item_state) + item_color = initial(B.item_color) + +/obj/structure/bedsheetbin + name = "linen bin" + desc = "It looks rather cosy." + icon = 'icons/obj/structures.dmi' + icon_state = "linenbin-full" + anchored = 1 + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 + var/amount = 10 + var/list/sheets = list() + var/obj/item/hidden = null + + +/obj/structure/bedsheetbin/examine(mob/user) + ..() + if(amount < 1) + to_chat(user, "There are no bed sheets in the bin.") + else if(amount == 1) + to_chat(user, "There is one bed sheet in the bin.") + else + to_chat(user, "There are [amount] bed sheets in the bin.") + + +/obj/structure/bedsheetbin/update_icon() + switch(amount) + if(0) + icon_state = "linenbin-empty" + if(1 to 5) + icon_state = "linenbin-half" + else + icon_state = "linenbin-full" + +/obj/structure/bedsheetbin/fire_act(exposed_temperature, exposed_volume) + if(amount) + amount = 0 + update_icon() + ..() + +/obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/bedsheet)) + if(!user.drop_item()) + return + I.loc = src + sheets.Add(I) + amount++ + to_chat(user, "You put [I] in [src].") + update_icon() + else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. + if(!user.drop_item()) + to_chat(user, "\The [I] is stuck to your hand, you cannot hide it among the sheets!") + return + I.loc = src + hidden = I + to_chat(user, "You hide [I] among the sheets.") + + + +/obj/structure/bedsheetbin/attack_paw(mob/user) + return attack_hand(user) + + +/obj/structure/bedsheetbin/attack_hand(mob/user) + if(user.lying) + return + if(amount >= 1) + amount-- + + var/obj/item/weapon/bedsheet/B + if(sheets.len > 0) + B = sheets[sheets.len] + sheets.Remove(B) + + else + B = new /obj/item/weapon/bedsheet(loc) + + B.loc = user.loc + user.put_in_hands(B) + to_chat(user, "You take [B] out of [src].") + update_icon() + + if(hidden) + hidden.loc = user.loc + to_chat(user, "[hidden] falls out of [B]!") + hidden = null + + + add_fingerprint(user) +/obj/structure/bedsheetbin/attack_tk(mob/user) + if(amount >= 1) + amount-- + + var/obj/item/weapon/bedsheet/B + if(sheets.len > 0) + B = sheets[sheets.len] + sheets.Remove(B) + + else + B = new /obj/item/weapon/bedsheet(loc) + + B.loc = loc + to_chat(user, "You telekinetically remove [B] from [src].") + update_icon() + + if(hidden) + hidden.loc = loc + hidden = null + + + add_fingerprint(user) 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 5e1ea02509..eb66e9c9b0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -1,283 +1,283 @@ -/obj/structure/closet/secure_closet/captains - name = "\proper captain's locker" - req_access = list(GLOB.access_captain) - icon_state = "cap" - -/obj/structure/closet/secure_closet/captains/PopulateContents() - ..() - new /obj/item/clothing/suit/hooded/wintercoat/captain(src) - if(prob(50)) - new /obj/item/weapon/storage/backpack/captain(src) - else - new /obj/item/weapon/storage/backpack/satchel/cap(src) - new /obj/item/clothing/neck/cloak/cap(src) +/obj/structure/closet/secure_closet/captains + name = "\proper captain's locker" + req_access = list(GLOB.access_captain) + icon_state = "cap" + +/obj/structure/closet/secure_closet/captains/PopulateContents() + ..() + new /obj/item/clothing/suit/hooded/wintercoat/captain(src) + if(prob(50)) + new /obj/item/weapon/storage/backpack/captain(src) + 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) - new /obj/item/clothing/under/captainparade(src) - new /obj/item/clothing/head/caphat/parade(src) - new /obj/item/clothing/under/rank/captain(src) - new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src) - new /obj/item/weapon/cartridge/captain(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/storage/box/silver_ids(src) - new /obj/item/device/radio/headset/heads/captain/alt(src) - new /obj/item/device/radio/headset/heads/captain(src) - new /obj/item/clothing/glasses/sunglasses/gar/supergar(src) - new /obj/item/clothing/gloves/color/captain(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/storage/belt/sabre(src) - new /obj/item/weapon/gun/energy/e_gun(src) - new /obj/item/weapon/door_remote/captain(src) - -/obj/structure/closet/secure_closet/hop - name = "\proper head of personnel's locker" - req_access = list(GLOB.access_hop) - icon_state = "hop" - -/obj/structure/closet/secure_closet/hop/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/hop(src) - new /obj/item/clothing/under/rank/head_of_personnel(src) - new /obj/item/clothing/head/hopcap(src) - new /obj/item/weapon/cartridge/hop(src) - new /obj/item/device/radio/headset/heads/hop(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/weapon/storage/box/ids(src) - new /obj/item/weapon/storage/box/ids(src) - new /obj/item/device/megaphone/command(src) - new /obj/item/clothing/suit/armor/vest/alt(src) - new /obj/item/device/assembly/flash/handheld(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) - new /obj/item/weapon/gun/energy/e_gun(src) - new /obj/item/clothing/neck/petcollar(src) - new /obj/item/weapon/door_remote/civillian(src) - -/obj/structure/closet/secure_closet/hos - name = "\proper head of security's locker" - req_access = list(GLOB.access_hos) - icon_state = "hos" - -/obj/structure/closet/secure_closet/hos/PopulateContents() - ..() - new /obj/item/clothing/neck/cloak/hos(src) - new /obj/item/weapon/cartridge/hos(src) - new /obj/item/device/radio/headset/heads/hos(src) - new /obj/item/clothing/under/hosparadefem(src) - new /obj/item/clothing/under/hosparademale(src) - new /obj/item/clothing/suit/armor/vest/leather(src) - new /obj/item/clothing/suit/armor/hos(src) - new /obj/item/clothing/under/rank/head_of_security/alt(src) - new /obj/item/clothing/head/HoS(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src) - new /obj/item/device/megaphone/sec(src) - new /obj/item/weapon/holosign_creator/security(src) - new /obj/item/weapon/storage/lockbox/loyalty(src) - new /obj/item/clothing/mask/gas/sechailer/swat(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/shield/riot/tele(src) - new /obj/item/weapon/storage/belt/security/full(src) - new /obj/item/weapon/gun/energy/e_gun/hos(src) - new /obj/item/device/flashlight/seclite(src) - new /obj/item/weapon/pinpointer(src) - -/obj/structure/closet/secure_closet/warden - name = "\proper warden's locker" - req_access = list(GLOB.access_armory) - icon_state = "warden" - -/obj/structure/closet/secure_closet/warden/PopulateContents() - ..() - new /obj/item/device/radio/headset/headset_sec(src) - new /obj/item/clothing/suit/armor/vest/warden(src) - new /obj/item/clothing/head/warden(src) - new /obj/item/clothing/head/beret/sec/navywarden(src) - new /obj/item/clothing/suit/armor/vest/warden/alt(src) - new /obj/item/clothing/under/rank/warden/navyblue(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/weapon/holosign_creator/security(src) - new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/weapon/storage/box/zipties(src) - new /obj/item/weapon/storage/box/flashbangs(src) - new /obj/item/weapon/storage/belt/security/full(src) - new /obj/item/device/flashlight/seclite(src) - new /obj/item/clothing/gloves/krav_maga/sec(src) - new /obj/item/weapon/door_remote/head_of_security(src) - new /obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube(src) - -/obj/structure/closet/secure_closet/security - name = "security officer's locker" - req_access = list(GLOB.access_security) - icon_state = "sec" - -/obj/structure/closet/secure_closet/security/PopulateContents() - ..() - new /obj/item/clothing/suit/armor/vest(src) - new /obj/item/clothing/head/helmet/sec(src) - new /obj/item/device/radio/headset/headset_sec(src) - new /obj/item/device/radio/headset/headset_sec/alt(src) - new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/device/flashlight/seclite(src) - -/obj/structure/closet/secure_closet/security/sec - -/obj/structure/closet/secure_closet/security/sec/PopulateContents() - ..() - new /obj/item/weapon/storage/belt/security/full(src) - -/obj/structure/closet/secure_closet/security/cargo - -/obj/structure/closet/secure_closet/security/cargo/PopulateContents() - ..() - new /obj/item/clothing/tie/armband/cargo(src) - new /obj/item/device/encryptionkey/headset_cargo(src) - -/obj/structure/closet/secure_closet/security/engine - -/obj/structure/closet/secure_closet/security/engine/PopulateContents() - ..() - new /obj/item/clothing/tie/armband/engine(src) - new /obj/item/device/encryptionkey/headset_eng(src) - -/obj/structure/closet/secure_closet/security/science - -/obj/structure/closet/secure_closet/security/science/PopulateContents() - ..() - new /obj/item/clothing/tie/armband/science(src) - new /obj/item/device/encryptionkey/headset_sci(src) - -/obj/structure/closet/secure_closet/security/med - -/obj/structure/closet/secure_closet/security/med/PopulateContents() - ..() - new /obj/item/clothing/tie/armband/medblue(src) - new /obj/item/device/encryptionkey/headset_med(src) - -/obj/structure/closet/secure_closet/detective - name = "\proper detective's cabinet" - req_access = list(GLOB.access_forensics_lockers) - icon_state = "cabinet" - resistance_flags = FLAMMABLE - obj_integrity = 70 - max_integrity = 70 - -/obj/structure/closet/secure_closet/detective/PopulateContents() - ..() - new /obj/item/clothing/under/rank/det(src) - new /obj/item/clothing/suit/det_suit(src) - new /obj/item/clothing/head/det_hat(src) - new /obj/item/clothing/gloves/color/black(src) - new /obj/item/clothing/under/rank/det/grey(src) - new /obj/item/clothing/tie/waistcoat(src) - new /obj/item/clothing/suit/det_suit/grey(src) - new /obj/item/clothing/head/fedora(src) - new /obj/item/clothing/shoes/laceup(src) - new /obj/item/weapon/storage/box/evidence(src) - new /obj/item/device/radio/headset/headset_sec(src) - new /obj/item/device/detective_scanner(src) - new /obj/item/device/flashlight/seclite(src) - new /obj/item/weapon/holosign_creator/security(src) - new /obj/item/weapon/reagent_containers/spray/pepper(src) - new /obj/item/clothing/suit/armor/vest/det_suit(src) - new /obj/item/weapon/storage/belt/holster/full(src) - -/obj/structure/closet/secure_closet/injection - name = "lethal injections" - req_access = list(GLOB.access_hos) - -/obj/structure/closet/secure_closet/injection/PopulateContents() - ..() - for(var/i in 1 to 5) - new /obj/item/weapon/reagent_containers/syringe/lethal/execution(src) - -/obj/structure/closet/secure_closet/brig - name = "brig locker" - req_access = list(GLOB.access_brig) - anchored = 1 - var/id = null - -/obj/structure/closet/secure_closet/brig/PopulateContents() - ..() - new /obj/item/clothing/under/rank/prisoner( src ) - new /obj/item/clothing/shoes/sneakers/orange( src ) - -/obj/structure/closet/secure_closet/courtroom - name = "courtroom locker" - req_access = list(GLOB.access_court) - -/obj/structure/closet/secure_closet/courtroom/PopulateContents() - ..() - new /obj/item/clothing/shoes/sneakers/brown(src) - for(var/i in 1 to 3) - new /obj/item/weapon/paper/Court (src) - new /obj/item/weapon/pen (src) - new /obj/item/clothing/suit/judgerobe (src) - new /obj/item/clothing/head/powdered_wig (src) - new /obj/item/weapon/storage/briefcase(src) - -/obj/structure/closet/secure_closet/armory1 - name = "armory armor locker" - req_access = list(GLOB.access_armory) - icon_state = "armory" - -/obj/structure/closet/secure_closet/armory1/PopulateContents() - ..() - new /obj/item/clothing/suit/armor/laserproof(src) - for(var/i in 1 to 3) - new /obj/item/clothing/suit/armor/riot(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/riot(src) - for(var/i in 1 to 3) - new /obj/item/weapon/shield/riot(src) - -/obj/structure/closet/secure_closet/armory2 - name = "armory ballistics locker" - req_access = list(GLOB.access_armory) - icon_state = "armory" - -/obj/structure/closet/secure_closet/armory2/PopulateContents() - ..() - new /obj/item/weapon/storage/box/firingpins(src) - for(var/i in 1 to 3) - new /obj/item/weapon/storage/box/rubbershot(src) - for(var/i in 1 to 3) - new /obj/item/weapon/gun/ballistic/shotgun/riot(src) - -/obj/structure/closet/secure_closet/armory3 - name = "armory energy gun locker" - req_access = list(GLOB.access_armory) - icon_state = "armory" - -/obj/structure/closet/secure_closet/armory3/PopulateContents() - ..() - new /obj/item/weapon/storage/box/firingpins(src) - new /obj/item/weapon/gun/energy/ionrifle(src) - for(var/i in 1 to 3) - new /obj/item/weapon/gun/energy/e_gun(src) - for(var/i in 1 to 3) - new /obj/item/weapon/gun/energy/laser(src) - -/obj/structure/closet/secure_closet/tac - name = "armory tac locker" - req_access = list(GLOB.access_armory) - icon_state = "tac" - -/obj/structure/closet/secure_closet/tac/PopulateContents() - ..() - new /obj/item/weapon/gun/ballistic/automatic/wt550(src) - new /obj/item/clothing/head/helmet/alt(src) - new /obj/item/clothing/mask/gas/sechailer(src) - new /obj/item/clothing/suit/armor/bulletproof(src) - -/obj/structure/closet/secure_closet/lethalshots - name = "shotgun lethal rounds" - req_access = list(GLOB.access_armory) - icon_state = "tac" - -/obj/structure/closet/secure_closet/lethalshots/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/weapon/storage/box/lethalshot(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) + new /obj/item/clothing/under/captainparade(src) + new /obj/item/clothing/head/caphat/parade(src) + new /obj/item/clothing/under/rank/captain(src) + new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src) + new /obj/item/weapon/cartridge/captain(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/weapon/storage/box/silver_ids(src) + new /obj/item/device/radio/headset/heads/captain/alt(src) + new /obj/item/device/radio/headset/heads/captain(src) + new /obj/item/clothing/glasses/sunglasses/gar/supergar(src) + new /obj/item/clothing/gloves/color/captain(src) + new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) + new /obj/item/weapon/storage/belt/sabre(src) + new /obj/item/weapon/gun/energy/e_gun(src) + new /obj/item/weapon/door_remote/captain(src) + +/obj/structure/closet/secure_closet/hop + name = "\proper head of personnel's locker" + req_access = list(GLOB.access_hop) + icon_state = "hop" + +/obj/structure/closet/secure_closet/hop/PopulateContents() + ..() + new /obj/item/clothing/neck/cloak/hop(src) + new /obj/item/clothing/under/rank/head_of_personnel(src) + new /obj/item/clothing/head/hopcap(src) + new /obj/item/weapon/cartridge/hop(src) + new /obj/item/device/radio/headset/heads/hop(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/weapon/storage/box/ids(src) + new /obj/item/weapon/storage/box/ids(src) + new /obj/item/device/megaphone/command(src) + new /obj/item/clothing/suit/armor/vest/alt(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/weapon/restraints/handcuffs/cable/zipties(src) + new /obj/item/weapon/gun/energy/e_gun(src) + new /obj/item/clothing/neck/petcollar(src) + new /obj/item/weapon/door_remote/civillian(src) + +/obj/structure/closet/secure_closet/hos + name = "\proper head of security's locker" + req_access = list(GLOB.access_hos) + icon_state = "hos" + +/obj/structure/closet/secure_closet/hos/PopulateContents() + ..() + new /obj/item/clothing/neck/cloak/hos(src) + new /obj/item/weapon/cartridge/hos(src) + new /obj/item/device/radio/headset/heads/hos(src) + new /obj/item/clothing/under/hosparadefem(src) + new /obj/item/clothing/under/hosparademale(src) + new /obj/item/clothing/suit/armor/vest/leather(src) + new /obj/item/clothing/suit/armor/hos(src) + new /obj/item/clothing/under/rank/head_of_security/alt(src) + new /obj/item/clothing/head/HoS(src) + new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src) + new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src) + new /obj/item/device/megaphone/sec(src) + new /obj/item/weapon/holosign_creator/security(src) + new /obj/item/weapon/storage/lockbox/loyalty(src) + new /obj/item/clothing/mask/gas/sechailer/swat(src) + new /obj/item/weapon/storage/box/flashbangs(src) + new /obj/item/weapon/shield/riot/tele(src) + new /obj/item/weapon/storage/belt/security/full(src) + new /obj/item/weapon/gun/energy/e_gun/hos(src) + new /obj/item/device/flashlight/seclite(src) + new /obj/item/weapon/pinpointer(src) + +/obj/structure/closet/secure_closet/warden + name = "\proper warden's locker" + req_access = list(GLOB.access_armory) + icon_state = "warden" + +/obj/structure/closet/secure_closet/warden/PopulateContents() + ..() + new /obj/item/device/radio/headset/headset_sec(src) + new /obj/item/clothing/suit/armor/vest/warden(src) + new /obj/item/clothing/head/warden(src) + new /obj/item/clothing/head/beret/sec/navywarden(src) + new /obj/item/clothing/suit/armor/vest/warden/alt(src) + new /obj/item/clothing/under/rank/warden/navyblue(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) + new /obj/item/weapon/holosign_creator/security(src) + new /obj/item/clothing/mask/gas/sechailer(src) + new /obj/item/weapon/storage/box/zipties(src) + new /obj/item/weapon/storage/box/flashbangs(src) + new /obj/item/weapon/storage/belt/security/full(src) + new /obj/item/device/flashlight/seclite(src) + new /obj/item/clothing/gloves/krav_maga/sec(src) + new /obj/item/weapon/door_remote/head_of_security(src) + new /obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube(src) + +/obj/structure/closet/secure_closet/security + name = "security officer's locker" + req_access = list(GLOB.access_security) + icon_state = "sec" + +/obj/structure/closet/secure_closet/security/PopulateContents() + ..() + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/head/helmet/sec(src) + new /obj/item/device/radio/headset/headset_sec(src) + new /obj/item/device/radio/headset/headset_sec/alt(src) + new /obj/item/clothing/glasses/hud/security/sunglasses(src) + new /obj/item/device/flashlight/seclite(src) + +/obj/structure/closet/secure_closet/security/sec + +/obj/structure/closet/secure_closet/security/sec/PopulateContents() + ..() + new /obj/item/weapon/storage/belt/security/full(src) + +/obj/structure/closet/secure_closet/security/cargo + +/obj/structure/closet/secure_closet/security/cargo/PopulateContents() + ..() + new /obj/item/clothing/tie/armband/cargo(src) + new /obj/item/device/encryptionkey/headset_cargo(src) + +/obj/structure/closet/secure_closet/security/engine + +/obj/structure/closet/secure_closet/security/engine/PopulateContents() + ..() + new /obj/item/clothing/tie/armband/engine(src) + new /obj/item/device/encryptionkey/headset_eng(src) + +/obj/structure/closet/secure_closet/security/science + +/obj/structure/closet/secure_closet/security/science/PopulateContents() + ..() + new /obj/item/clothing/tie/armband/science(src) + new /obj/item/device/encryptionkey/headset_sci(src) + +/obj/structure/closet/secure_closet/security/med + +/obj/structure/closet/secure_closet/security/med/PopulateContents() + ..() + new /obj/item/clothing/tie/armband/medblue(src) + new /obj/item/device/encryptionkey/headset_med(src) + +/obj/structure/closet/secure_closet/detective + name = "\proper detective's cabinet" + req_access = list(GLOB.access_forensics_lockers) + icon_state = "cabinet" + resistance_flags = FLAMMABLE + obj_integrity = 70 + max_integrity = 70 + +/obj/structure/closet/secure_closet/detective/PopulateContents() + ..() + new /obj/item/clothing/under/rank/det(src) + new /obj/item/clothing/suit/det_suit(src) + new /obj/item/clothing/head/det_hat(src) + new /obj/item/clothing/gloves/color/black(src) + new /obj/item/clothing/under/rank/det/grey(src) + new /obj/item/clothing/tie/waistcoat(src) + new /obj/item/clothing/suit/det_suit/grey(src) + new /obj/item/clothing/head/fedora(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/weapon/storage/box/evidence(src) + new /obj/item/device/radio/headset/headset_sec(src) + new /obj/item/device/detective_scanner(src) + new /obj/item/device/flashlight/seclite(src) + new /obj/item/weapon/holosign_creator/security(src) + new /obj/item/weapon/reagent_containers/spray/pepper(src) + new /obj/item/clothing/suit/armor/vest/det_suit(src) + new /obj/item/weapon/storage/belt/holster/full(src) + +/obj/structure/closet/secure_closet/injection + name = "lethal injections" + req_access = list(GLOB.access_hos) + +/obj/structure/closet/secure_closet/injection/PopulateContents() + ..() + for(var/i in 1 to 5) + new /obj/item/weapon/reagent_containers/syringe/lethal/execution(src) + +/obj/structure/closet/secure_closet/brig + name = "brig locker" + req_access = list(GLOB.access_brig) + anchored = 1 + var/id = null + +/obj/structure/closet/secure_closet/brig/PopulateContents() + ..() + new /obj/item/clothing/under/rank/prisoner( src ) + new /obj/item/clothing/shoes/sneakers/orange( src ) + +/obj/structure/closet/secure_closet/courtroom + name = "courtroom locker" + req_access = list(GLOB.access_court) + +/obj/structure/closet/secure_closet/courtroom/PopulateContents() + ..() + new /obj/item/clothing/shoes/sneakers/brown(src) + for(var/i in 1 to 3) + new /obj/item/weapon/paper/Court (src) + new /obj/item/weapon/pen (src) + new /obj/item/clothing/suit/judgerobe (src) + new /obj/item/clothing/head/powdered_wig (src) + new /obj/item/weapon/storage/briefcase(src) + +/obj/structure/closet/secure_closet/armory1 + name = "armory armor locker" + req_access = list(GLOB.access_armory) + icon_state = "armory" + +/obj/structure/closet/secure_closet/armory1/PopulateContents() + ..() + new /obj/item/clothing/suit/armor/laserproof(src) + for(var/i in 1 to 3) + new /obj/item/clothing/suit/armor/riot(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/helmet/riot(src) + for(var/i in 1 to 3) + new /obj/item/weapon/shield/riot(src) + +/obj/structure/closet/secure_closet/armory2 + name = "armory ballistics locker" + req_access = list(GLOB.access_armory) + icon_state = "armory" + +/obj/structure/closet/secure_closet/armory2/PopulateContents() + ..() + new /obj/item/weapon/storage/box/firingpins(src) + for(var/i in 1 to 3) + new /obj/item/weapon/storage/box/rubbershot(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/ballistic/shotgun/riot(src) + +/obj/structure/closet/secure_closet/armory3 + name = "armory energy gun locker" + req_access = list(GLOB.access_armory) + icon_state = "armory" + +/obj/structure/closet/secure_closet/armory3/PopulateContents() + ..() + new /obj/item/weapon/storage/box/firingpins(src) + new /obj/item/weapon/gun/energy/ionrifle(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/e_gun(src) + for(var/i in 1 to 3) + new /obj/item/weapon/gun/energy/laser(src) + +/obj/structure/closet/secure_closet/tac + name = "armory tac locker" + req_access = list(GLOB.access_armory) + icon_state = "tac" + +/obj/structure/closet/secure_closet/tac/PopulateContents() + ..() + new /obj/item/weapon/gun/ballistic/automatic/wt550(src) + new /obj/item/clothing/head/helmet/alt(src) + new /obj/item/clothing/mask/gas/sechailer(src) + new /obj/item/clothing/suit/armor/bulletproof(src) + +/obj/structure/closet/secure_closet/lethalshots + name = "shotgun lethal rounds" + req_access = list(GLOB.access_armory) + icon_state = "tac" + +/obj/structure/closet/secure_closet/lethalshots/PopulateContents() + ..() + for(var/i in 1 to 3) + new /obj/item/weapon/storage/box/lethalshot(src) 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/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index bb55084dd9..05414f0a4d 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,14 +140,17 @@ 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 /obj/effect/mob_spawn/human/golem/attack_hand(mob/user) if(isgolem(user) && can_transfer) - var/transfer = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") - if(!transfer) + var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No") + if(transfer_choice != "Yes") return log_game("[user.ckey] golem-swapped into [src]") user.visible_message("A faint light leaves [user], moving to [src] and animating it!","You leave your old body behind, and transfer into [src]!") @@ -150,9 +159,13 @@ 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" can_transfer = FALSE @@ -285,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 039f3da5d7..ada75846e7 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -1,221 +1,221 @@ -//NOT using the existing /obj/machinery/door type, since that has some complications on its own, mainly based on its -//machineryness - -/obj/structure/mineral_door - name = "metal door" - density = 1 - anchored = 1 - opacity = 1 - - icon = 'icons/obj/doors/mineral_doors.dmi' - icon_state = "metal" - - var/initial_state - var/state = 0 //closed, 1 == open - var/isSwitchingStates = 0 - var/close_delay = -1 //-1 if does not auto close. - obj_integrity = 200 - max_integrity = 200 - armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 50, acid = 50) - var/sheetType = /obj/item/stack/sheet/metal - var/sheetAmount = 7 - var/openSound = 'sound/effects/stonedoor_openclose.ogg' - var/closeSound = 'sound/effects/stonedoor_openclose.ogg' - CanAtmosPass = ATMOS_PASS_DENSITY - -/obj/structure/mineral_door/New(location) - ..() - initial_state = icon_state - air_update_turf(1) - -/obj/structure/mineral_door/Destroy() - density = 0 - air_update_turf(1) - return ..() - -/obj/structure/mineral_door/Move() - var/turf/T = loc - ..() - move_update_air(T) - -/obj/structure/mineral_door/Bumped(atom/user) - ..() - if(!state) - return TryToSwitchState(user) - -/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral - if(isAI(user)) //so the AI can't open it - return - else if(iscyborg(user)) //but cyborgs can - if(get_dist(user,src) <= 1) //not remotely though - return TryToSwitchState(user) - -/obj/structure/mineral_door/attack_paw(mob/user) - return TryToSwitchState(user) - -/obj/structure/mineral_door/attack_hand(mob/user) - return TryToSwitchState(user) - -/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0) - if(istype(mover, /obj/effect/beam)) - return !opacity - return !density - -/obj/structure/mineral_door/proc/TryToSwitchState(atom/user) - if(isSwitchingStates) - return - if(isliving(user)) - var/mob/living/M = user - if(world.time - M.last_bumped <= 60) - return //NOTE do we really need that? - if(M.client) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.handcuffed) - SwitchState() - else - SwitchState() - else if(istype(user, /obj/mecha)) - SwitchState() - -/obj/structure/mineral_door/proc/SwitchState() - if(state) - Close() - else - Open() - -/obj/structure/mineral_door/proc/Open() - isSwitchingStates = 1 - playsound(loc, openSound, 100, 1) - flick("[initial_state]opening",src) - sleep(10) - density = 0 - opacity = 0 - state = 1 - air_update_turf(1) - update_icon() - isSwitchingStates = 0 - - if(close_delay != -1) - addtimer(CALLBACK(src, .proc/Close), close_delay) - -/obj/structure/mineral_door/proc/Close() - if(isSwitchingStates || state != 1) - return - var/turf/T = get_turf(src) - for(var/mob/living/L in T) - return - isSwitchingStates = 1 - playsound(loc, closeSound, 100, 1) - flick("[initial_state]closing",src) - sleep(10) - density = 1 - opacity = 1 - state = 0 - air_update_turf(1) - update_icon() - isSwitchingStates = 0 - -/obj/structure/mineral_door/update_icon() - if(state) - icon_state = "[initial_state]open" - else - icon_state = initial_state - -/obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W,/obj/item/weapon/pickaxe)) - var/obj/item/weapon/pickaxe/digTool = W - to_chat(user, "You start digging the [name]...") - if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src) - to_chat(user, "You finish digging.") - deconstruct(TRUE) - else if(user.a_intent != INTENT_HARM) - attack_hand(user) - else - return ..() - -/obj/structure/mineral_door/deconstruct(disassembled = TRUE) - var/turf/T = get_turf(src) - if(disassembled) - new sheetType(T, sheetAmount) - else - new sheetType(T, max(sheetAmount - 2, 1)) - qdel(src) - -/obj/structure/mineral_door/iron - name = "iron door" - obj_integrity = 300 - max_integrity = 300 - -/obj/structure/mineral_door/silver - name = "silver door" - icon_state = "silver" - sheetType = /obj/item/stack/sheet/mineral/silver - obj_integrity = 300 - max_integrity = 300 - -/obj/structure/mineral_door/gold - name = "gold door" - icon_state = "gold" - sheetType = /obj/item/stack/sheet/mineral/gold - -/obj/structure/mineral_door/uranium - name = "uranium door" - icon_state = "uranium" - sheetType = /obj/item/stack/sheet/mineral/uranium - obj_integrity = 300 - max_integrity = 300 - light_range = 2 - -/obj/structure/mineral_door/sandstone - name = "sandstone door" - icon_state = "sandstone" - sheetType = /obj/item/stack/sheet/mineral/sandstone - obj_integrity = 100 - max_integrity = 100 - -/obj/structure/mineral_door/transparent - opacity = 0 - -/obj/structure/mineral_door/transparent/Close() - ..() - opacity = 0 - -/obj/structure/mineral_door/transparent/plasma - name = "plasma door" - icon_state = "plasma" - sheetType = /obj/item/stack/sheet/mineral/plasma - -/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/weapon/W, mob/user, params) - if(W.is_hot()) +//NOT using the existing /obj/machinery/door type, since that has some complications on its own, mainly based on its +//machineryness + +/obj/structure/mineral_door + name = "metal door" + density = 1 + anchored = 1 + opacity = 1 + + icon = 'icons/obj/doors/mineral_doors.dmi' + icon_state = "metal" + + var/initial_state + var/state = 0 //closed, 1 == open + var/isSwitchingStates = 0 + var/close_delay = -1 //-1 if does not auto close. + obj_integrity = 200 + max_integrity = 200 + armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 50, acid = 50) + var/sheetType = /obj/item/stack/sheet/metal + var/sheetAmount = 7 + var/openSound = 'sound/effects/stonedoor_openclose.ogg' + var/closeSound = 'sound/effects/stonedoor_openclose.ogg' + CanAtmosPass = ATMOS_PASS_DENSITY + +/obj/structure/mineral_door/New(location) + ..() + initial_state = icon_state + air_update_turf(1) + +/obj/structure/mineral_door/Destroy() + density = 0 + air_update_turf(1) + return ..() + +/obj/structure/mineral_door/Move() + var/turf/T = loc + ..() + move_update_air(T) + +/obj/structure/mineral_door/Bumped(atom/user) + ..() + if(!state) + return TryToSwitchState(user) + +/obj/structure/mineral_door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral + if(isAI(user)) //so the AI can't open it + return + else if(iscyborg(user)) //but cyborgs can + if(get_dist(user,src) <= 1) //not remotely though + return TryToSwitchState(user) + +/obj/structure/mineral_door/attack_paw(mob/user) + return TryToSwitchState(user) + +/obj/structure/mineral_door/attack_hand(mob/user) + return TryToSwitchState(user) + +/obj/structure/mineral_door/CanPass(atom/movable/mover, turf/target, height=0) + if(istype(mover, /obj/effect/beam)) + return !opacity + return !density + +/obj/structure/mineral_door/proc/TryToSwitchState(atom/user) + if(isSwitchingStates) + return + if(isliving(user)) + var/mob/living/M = user + if(world.time - M.last_bumped <= 60) + return //NOTE do we really need that? + if(M.client) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.handcuffed) + SwitchState() + else + SwitchState() + else if(istype(user, /obj/mecha)) + SwitchState() + +/obj/structure/mineral_door/proc/SwitchState() + if(state) + Close() + else + Open() + +/obj/structure/mineral_door/proc/Open() + isSwitchingStates = 1 + playsound(loc, openSound, 100, 1) + flick("[initial_state]opening",src) + sleep(10) + density = 0 + opacity = 0 + state = 1 + air_update_turf(1) + update_icon() + isSwitchingStates = 0 + + if(close_delay != -1) + addtimer(CALLBACK(src, .proc/Close), close_delay) + +/obj/structure/mineral_door/proc/Close() + if(isSwitchingStates || state != 1) + return + var/turf/T = get_turf(src) + for(var/mob/living/L in T) + return + isSwitchingStates = 1 + playsound(loc, closeSound, 100, 1) + flick("[initial_state]closing",src) + sleep(10) + density = 1 + opacity = 1 + state = 0 + air_update_turf(1) + update_icon() + isSwitchingStates = 0 + +/obj/structure/mineral_door/update_icon() + if(state) + icon_state = "[initial_state]open" + else + icon_state = initial_state + +/obj/structure/mineral_door/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W,/obj/item/weapon/pickaxe)) + var/obj/item/weapon/pickaxe/digTool = W + to_chat(user, "You start digging the [name]...") + if(do_after(user,digTool.digspeed*(1+round(max_integrity*0.01)), target = src) && src) + to_chat(user, "You finish digging.") + deconstruct(TRUE) + else if(user.a_intent != INTENT_HARM) + attack_hand(user) + else + return ..() + +/obj/structure/mineral_door/deconstruct(disassembled = TRUE) + var/turf/T = get_turf(src) + if(disassembled) + new sheetType(T, sheetAmount) + else + new sheetType(T, max(sheetAmount - 2, 1)) + qdel(src) + +/obj/structure/mineral_door/iron + name = "iron door" + obj_integrity = 300 + max_integrity = 300 + +/obj/structure/mineral_door/silver + name = "silver door" + icon_state = "silver" + sheetType = /obj/item/stack/sheet/mineral/silver + obj_integrity = 300 + max_integrity = 300 + +/obj/structure/mineral_door/gold + name = "gold door" + icon_state = "gold" + sheetType = /obj/item/stack/sheet/mineral/gold + +/obj/structure/mineral_door/uranium + name = "uranium door" + icon_state = "uranium" + sheetType = /obj/item/stack/sheet/mineral/uranium + obj_integrity = 300 + max_integrity = 300 + light_range = 2 + +/obj/structure/mineral_door/sandstone + name = "sandstone door" + icon_state = "sandstone" + sheetType = /obj/item/stack/sheet/mineral/sandstone + obj_integrity = 100 + max_integrity = 100 + +/obj/structure/mineral_door/transparent + opacity = 0 + +/obj/structure/mineral_door/transparent/Close() + ..() + opacity = 0 + +/obj/structure/mineral_door/transparent/plasma + name = "plasma door" + icon_state = "plasma" + sheetType = /obj/item/stack/sheet/mineral/plasma + +/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/weapon/W, mob/user, params) + if(W.is_hot()) 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 ..() - -/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - TemperatureAct() - -/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct() - atmos_spawn_air("plasma=500;TEMP=1000") - deconstruct(FALSE) - -/obj/structure/mineral_door/transparent/diamond - name = "diamond door" - icon_state = "diamond" - sheetType = /obj/item/stack/sheet/mineral/diamond - obj_integrity = 1000 - max_integrity = 1000 - -/obj/structure/mineral_door/wood - name = "wood door" - icon_state = "wood" - openSound = 'sound/effects/doorcreaky.ogg' - closeSound = 'sound/effects/doorcreaky.ogg' - sheetType = /obj/item/stack/sheet/mineral/wood - resistance_flags = FLAMMABLE - obj_integrity = 200 - max_integrity = 200 + TemperatureAct() + else + return ..() + +/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature > 300) + TemperatureAct() + +/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct() + atmos_spawn_air("plasma=500;TEMP=1000") + deconstruct(FALSE) + +/obj/structure/mineral_door/transparent/diamond + name = "diamond door" + icon_state = "diamond" + sheetType = /obj/item/stack/sheet/mineral/diamond + obj_integrity = 1000 + max_integrity = 1000 + +/obj/structure/mineral_door/wood + name = "wood door" + icon_state = "wood" + openSound = 'sound/effects/doorcreaky.ogg' + closeSound = 'sound/effects/doorcreaky.ogg' + sheetType = /obj/item/stack/sheet/mineral/wood + resistance_flags = FLAMMABLE + obj_integrity = 200 + max_integrity = 200 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/objects/structures/window.dm b/code/game/objects/structures/window.dm index d5027a0c75..f594c4b513 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -440,7 +440,7 @@ dir = FULLTILE_WINDOW_DIR max_integrity = 50 fulltile = 1 - flags = NONE + flags = PREVENT_CLICK_UNDER smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile) glass_amount = 2 @@ -454,7 +454,7 @@ dir = FULLTILE_WINDOW_DIR max_integrity = 100 fulltile = 1 - flags = NONE + flags = PREVENT_CLICK_UNDER smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile) @@ -467,7 +467,7 @@ dir = FULLTILE_WINDOW_DIR max_integrity = 1000 fulltile = 1 - flags = NONE + flags = PREVENT_CLICK_UNDER smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile) level = 3 @@ -481,7 +481,7 @@ icon_state = "tinted_window" dir = FULLTILE_WINDOW_DIR fulltile = 1 - flags = NONE + flags = PREVENT_CLICK_UNDER smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile,/obj/structure/window/reinforced/highpressure/fulltile, /obj/structure/window/reinforced/tinted/fulltile/) level = 3 @@ -504,7 +504,7 @@ max_integrity = 100 wtype = "shuttle" fulltile = 1 - flags = NONE + flags = PREVENT_CLICK_UNDER reinf = 1 heat_resistance = 1600 armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100, fire = 80, acid = 100) @@ -583,7 +583,7 @@ smooth = SMOOTH_TRUE canSmoothWith = null fulltile = 1 - flags = NONE + flags = PREVENT_CLICK_UNDER dir = FULLTILE_WINDOW_DIR max_integrity = 120 level = 3 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/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 cce7756892..4f6da47bde 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -158,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 5024dfea90..fc5a57e16d 100644 --- a/code/game/turfs/simulated/floor/mineral_floor.dm +++ b/code/game/turfs/simulated/floor/mineral_floor.dm @@ -40,7 +40,7 @@ /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 @@ -50,13 +50,13 @@ 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/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/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index 61a26954d3..b78099c6bb 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -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/space.dm b/code/game/turfs/space/space.dm index a0940eded1..1876d6f782 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -42,7 +42,7 @@ if (opacity) has_opaque_atom = TRUE - + return INITIALIZE_HINT_NORMAL /turf/open/space/attack_ghost(mob/dead/observer/user) @@ -177,7 +177,7 @@ ChangeTurf(/turf/open/floor/plating) return TRUE return FALSE - + /turf/open/space/ReplaceWithLattice() var/dest_x = destination_x var/dest_y = destination_y @@ -186,4 +186,4 @@ destination_x = dest_x destination_y = dest_y destination_z = dest_z - + 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 618894f207..c4d35d7bd1 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -92,39 +92,39 @@ LC.attackby(C,user) return coil.place_turf(src, user) - return 1 + return TRUE - return 0 + return FALSE /turf/CanPass(atom/movable/mover, turf/target, height=1.5) - if(!target) return 0 + if(!target) return FALSE if(istype(mover)) // turf/Enter(...) will perform more advanced checks return !density else // Now, doing more detailed checks for air movement and air group formation if(target.blocks_air||blocks_air) - return 0 + return FALSE for(var/obj/obstacle in src) if(!obstacle.CanPass(mover, target, height)) - return 0 + return FALSE for(var/obj/obstacle in target) if(!obstacle.CanPass(mover, src, height)) - return 0 + return FALSE - return 1 + return TRUE /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) if (!mover) - return 1 + return TRUE // First, make sure it can leave its square if(isturf(mover.loc)) // Nothing but border objects stop you from leaving a tile, only one loop is needed for(var/obj/obstacle in mover.loc) if(!obstacle.CheckExit(mover, src) && obstacle != mover && obstacle != forget) mover.Bump(obstacle, 1) - return 0 + return FALSE var/list/large_dense = list() //Next, check objects to block entry that are on the border @@ -132,14 +132,14 @@ if(border_obstacle.flags & ON_BORDER) if(!border_obstacle.CanPass(mover, mover.loc, 1) && (forget != border_obstacle)) mover.Bump(border_obstacle, 1) - return 0 + return FALSE else large_dense += border_obstacle //Then, check the turf itself if (!src.CanPass(mover, src)) mover.Bump(src, 1) - return 0 + return FALSE //Finally, check objects/mobs to block entry that are not on the border var/atom/movable/tompost_bump @@ -151,8 +151,9 @@ top_layer = obstacle.layer if(tompost_bump) mover.Bump(tompost_bump,1) - return 0 - return 1 //Nothing found to block so return success! + return FALSE + + return TRUE //Nothing found to block so return success! /turf/Entered(atom/movable/AM) if(explosion_level && AM.ex_check(explosion_id)) @@ -185,7 +186,7 @@ O.make_unfrozen() /turf/proc/is_plasteel_floor() - return 0 + return FALSE /turf/proc/levelupdate() for(var/obj/O in src) @@ -303,7 +304,7 @@ if(src_object.contents.len) to_chat(usr, "You start dumping out the contents...") if(!do_after(usr,20,target=src_object)) - return 0 + return FALSE var/list/things = src_object.contents.Copy() var/datum/progressbar/progress = new(user, things.len, src) @@ -311,7 +312,7 @@ sleep(1) qdel(progress) - return 1 + return TRUE ////////////////////////////// //Distance procs @@ -325,7 +326,7 @@ // possible. It results in more efficient (CPU-wise) pathing // for bots and anything else that only moves in cardinal dirs. /turf/proc/Distance_cardinal(turf/T) - if(!src || !T) return 0 + if(!src || !T) return FALSE return abs(x - T.x) + abs(y - T.y) //////////////////////////////////////////////////// @@ -341,7 +342,7 @@ return(2) /turf/proc/can_have_cabling() - return 1 + return TRUE /turf/proc/can_lay_cable() return can_have_cabling() & !intact @@ -375,6 +376,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) diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 67d3b394c6..b2dc6882cb 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -1,502 +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 - +#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 + return if(!query_add_ban_get_ckey.NextRow()) - if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) + 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]
 
" - + + 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 d4fa2e6177..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.world_game_log << "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 7196319568..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]" @@ -38,9 +37,10 @@ body += " \[Heal\] " if(M.client) - body += "
\[First Seen: [M.client.player_join_date]\]\[Byond account registered on: [M.client.account_join_date]\]" - - + 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 - " @@ -704,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.") @@ -818,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 7aca1ececb..cdd05a3aad 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -1,4 +1,4 @@ -atom/proc/investigate_log(message, subject) +/atom/proc/investigate_log(message, subject) if(!message || !subject) return var/F = file("[GLOB.log_directory]/[subject].html") @@ -18,4 +18,4 @@ atom/proc/investigate_log(message, subject) if(!fexists(F)) to_chat(src, "No [subject] logfile was found.") return - src << browse(F,"window=investigate[subject];size=800x300") \ No newline at end of file + src << browse(F,"window=investigate[subject];size=800x300") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e5f8360527..cdfee917c2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -81,7 +81,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/drop_dynex_bomb, /client/proc/cinematic, /client/proc/one_click_antag, - /client/proc/send_space_ninja, /client/proc/cmd_admin_add_freeform_ai_law, /client/proc/object_say, /client/proc/toggle_random_events, @@ -200,7 +199,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/get_dynex_power, /client/proc/set_dynex_scale, /client/proc/cinematic, - /client/proc/send_space_ninja, /client/proc/cmd_admin_add_freeform_ai_law, /client/proc/cmd_admin_create_centcom_report, /client/proc/cmd_change_command_name, 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/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index db9eaa6458..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) diff --git a/code/modules/admin/verbs/adminhelp.dm.rej b/code/modules/admin/verbs/adminhelp.dm.rej deleted file mode 100644 index 3c6cec82d9..0000000000 --- a/code/modules/admin/verbs/adminhelp.dm.rej +++ /dev/null @@ -1,55 +0,0 @@ -diff a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm (rejected hunks) -@@ -67,7 +67,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) - for(var/I in l2b) - var/datum/admin_help/AH = I - dat += "Ticket #[AH.id]: [AH.initiator_key_name]: [AH.name]
" -- -+ - usr << browse(dat.Join(), "window=ahelp_list[state];size=600x480") - - //Tickets statpanel -@@ -253,7 +253,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) - if(state == AHELP_ACTIVE) - to_chat(usr, "This ticket is already open.") - return -- -+ - if(GLOB.ahelp_tickets.CKey2ActiveTicket(initiator_ckey)) - to_chat(usr, "This user already has an active ticket, cannot reopen this one.") - return -@@ -310,7 +310,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) - RemoveActive() - state = AHELP_RESOLVED - GLOB.ahelp_tickets.ListInsert(src) -- -+ - if(initiator) - initiator.giveadminhelpverb() - -@@ -325,7 +325,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) - /datum/admin_help/proc/Reject(key_name = key_name_admin(usr)) - if(state != AHELP_ACTIVE) - return -- -+ - if(initiator) - initiator.giveadminhelpverb() - -@@ -494,7 +494,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) - - if(!check_rights(R_ADMIN, TRUE)) - return -- -+ - var/browse_to - - switch(input("Display which ticket list?") as null|anything in list("Active Tickets", "Closed Tickets", "Resolved Tickets")) -@@ -506,7 +506,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) - browse_to = AHELP_RESOLVED - else - return -- -+ - GLOB.ahelp_tickets.BrowseTickets(browse_to) - - // diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 949ce63d16..9bed5ad238 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -108,7 +108,11 @@ GLOBAL_PROTECT(AdminProcCallCount) return call(target, procname)(arglist(arguments)) /proc/IsAdminAdvancedProcCall() +#ifdef TESTING + return FALSE +#else return usr && usr.client && GLOB.AdminProcCaller == usr.client.ckey +#endif /client/proc/callproc_datum(datum/A as null|area|mob|obj|turf) set category = "Debug" 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/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 288027454a..6ead5a263e 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -387,9 +387,8 @@ Traitors and the like can also be revived with the previous role mostly intact. for(var/obj/effect/landmark/L in GLOB.landmarks_list) if(L.name=="carpspawn") ninja_spawn += L - new_character.equip_space_ninja() - new_character.internal = new_character.s_store - new_character.update_internals_hud_icon(1) + var/datum/antagonist/ninja/ninjadatum = new_character.mind.has_antag_datum(ANTAG_DATUM_NINJA) + ninjadatum.equip_space_ninja() if(ninja_spawn.len) var/obj/effect/landmark/ninja_spawn_here = pick(ninja_spawn) new_character.loc = ninja_spawn_here.loc @@ -587,7 +586,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 diff --git a/code/modules/admin/verbs/randomverbs.dm.rej b/code/modules/admin/verbs/randomverbs.dm.rej deleted file mode 100644 index b4cc8e90b5..0000000000 --- a/code/modules/admin/verbs/randomverbs.dm.rej +++ /dev/null @@ -1,12 +0,0 @@ -diff a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm (rejected hunks) -@@ -108,8 +108,8 @@ - for(var/mob/M in view(range,A)) - to_chat(M, msg) - -- log_admin("LocalNarrate: [key_name(usr)] at ([get_area(A)]): [msg]") -- message_admins(" LocalNarrate: [key_name_admin(usr)] at ([get_area(A)]): [msg]
") -+ log_admin("LocalNarrate: [key_name(usr)] at [get_area(A)][COORD(A)]: [msg]") -+ 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) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index c1fd6de4a5..44c77bb19a 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -1,115 +1,115 @@ -/obj/item/device/assembly/timer - name = "timer" - desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." - icon_state = "timer" - materials = list(MAT_METAL=500, MAT_GLASS=50) - origin_tech = "magnets=1;engineering=1" - attachable = 1 - - var/timing = 0 - var/time = 5 - var/saved_time = 5 - var/loop = 0 - - -/obj/item/device/assembly/timer/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/device/assembly/timer/describe() - if(timing) - return "The timer is counting down from [time]!" - return "The timer is set for [time] seconds." - - -/obj/item/device/assembly/timer/activate() - if(!..()) - return 0//Cooldown check - timing = !timing - update_icon() - return 1 - - -/obj/item/device/assembly/timer/toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSobj, src) - else - timing = 0 - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - - -/obj/item/device/assembly/timer/proc/timer_end() - if(!secured || next_activate > world.time) - return FALSE - pulse(0) - audible_message("\icon[src] *beep* *beep*", null, 3) - if(loop) - timing = 1 - update_icon() - - -/obj/item/device/assembly/timer/process() - if(timing) - time-- - if(time <= 0) - timing = 0 - timer_end() - time = saved_time - - -/obj/item/device/assembly/timer/update_icon() - cut_overlays() - attached_overlays = list() - if(timing) - add_overlay("timer_timing") - attached_overlays += "timer_timing" - if(holder) - holder.update_icon() - - -/obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires - if(is_secured(user)) - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = "Timing Unit\n[(timing ? "Timing" : "Not Timing")] [minute]:[second]\n- - + +\n" - dat += "

Stop repeating" : "1'>Set to repeat")]" - dat += "

Refresh" - dat += "

Close" - var/datum/browser/popup = new(user, "timer", name) - popup.set_content(dat) - popup.open() - - -/obj/item/device/assembly/timer/Topic(href, href_list) - ..() - if(usr.incapacitated() || !in_range(loc, usr)) - usr << browse(null, "window=timer") - onclose(usr, "timer") - return - - if(href_list["time"]) - timing = text2num(href_list["time"]) - if(timing && istype(holder, /obj/item/device/transfer_valve)) +/obj/item/device/assembly/timer + name = "timer" + desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." + icon_state = "timer" + materials = list(MAT_METAL=500, MAT_GLASS=50) + origin_tech = "magnets=1;engineering=1" + attachable = 1 + + var/timing = 0 + var/time = 5 + var/saved_time = 5 + var/loop = 0 + + +/obj/item/device/assembly/timer/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/item/device/assembly/timer/describe() + if(timing) + return "The timer is counting down from [time]!" + return "The timer is set for [time] seconds." + + +/obj/item/device/assembly/timer/activate() + if(!..()) + return 0//Cooldown check + timing = !timing + update_icon() + return 1 + + +/obj/item/device/assembly/timer/toggle_secure() + secured = !secured + if(secured) + START_PROCESSING(SSobj, src) + else + timing = 0 + STOP_PROCESSING(SSobj, src) + update_icon() + return secured + + +/obj/item/device/assembly/timer/proc/timer_end() + if(!secured || next_activate > world.time) + return FALSE + pulse(0) + audible_message("\icon[src] *beep* *beep*", null, 3) + if(loop) + timing = 1 + update_icon() + + +/obj/item/device/assembly/timer/process() + if(timing) + time-- + if(time <= 0) + timing = 0 + timer_end() + time = saved_time + + +/obj/item/device/assembly/timer/update_icon() + cut_overlays() + attached_overlays = list() + if(timing) + add_overlay("timer_timing") + attached_overlays += "timer_timing" + if(holder) + holder.update_icon() + + +/obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires + if(is_secured(user)) + var/second = time % 60 + var/minute = (time - second) / 60 + var/dat = "Timing Unit\n[(timing ? "Timing" : "Not Timing")] [minute]:[second]\n- - + +\n" + dat += "

Stop repeating" : "1'>Set to repeat")]" + dat += "

Refresh" + dat += "

Close" + var/datum/browser/popup = new(user, "timer", name) + popup.set_content(dat) + popup.open() + + +/obj/item/device/assembly/timer/Topic(href, href_list) + ..() + if(usr.incapacitated() || !in_range(loc, usr)) + usr << browse(null, "window=timer") + onclose(usr, "timer") + return + + if(href_list["time"]) + timing = text2num(href_list["time"]) + if(timing && istype(holder, /obj/item/device/transfer_valve)) var/timer_message = "[ADMIN_LOOKUPFLW(usr)] activated [src] attachment on [holder]." - message_admins(timer_message) - GLOB.bombers += timer_message + message_admins(timer_message) + GLOB.bombers += timer_message log_game("[key_name(usr)] activated [src] attachment on [holder]") - update_icon() - if(href_list["repeat"]) - loop = text2num(href_list["repeat"]) - - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 1), 600) - saved_time = time - - if(href_list["close"]) - usr << browse(null, "window=timer") - return - - if(usr) - attack_self(usr) + update_icon() + if(href_list["repeat"]) + loop = text2num(href_list["repeat"]) + + if(href_list["tp"]) + var/tp = text2num(href_list["tp"]) + time += tp + time = min(max(round(time), 1), 600) + saved_time = time + + if(href_list["close"]) + usr << browse(null, "window=timer") + return + + if(usr) + attack_self(usr) 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 3a9eb1a028..73e0c2042f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -1,7 +1,7 @@ /obj/machinery/atmospherics/components/unary/cryo_cell name = "cryo cell" icon = 'icons/obj/cryogenics.dmi' - icon_state = "cell-off" + icon_state = "pod0" density = 1 anchored = 1 obj_integrity = 350 @@ -12,6 +12,7 @@ state_open = FALSE var/autoeject = FALSE var/volume = 100 + var/running_bob_animation = FALSE var/efficiency = 1 var/sleep_factor = 750 @@ -87,17 +88,59 @@ beaker = null /obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() + handle_update_icon() + +/obj/machinery/atmospherics/components/unary/cryo_cell/proc/handle_update_icon() //making another proc to avoid spam in update_icon + overlays.Cut() //empty the overlay proc, just in case + if(panel_open) - icon_state = "cell-o" + icon_state = "pod0-o" else if(state_open) - icon_state = "cell-open" + icon_state = "pod0" else if(on && is_operational()) if(occupant) - icon_state = "cell-occupied" + var/image/pickle = image(occupant.icon, occupant.icon_state) + pickle.overlays = occupant.overlays + pickle.pixel_y = 22 + overlays += pickle + icon_state = "pod1" + var/up = 0 //used to see if we are going up or down, 1 is down, 2 is up + spawn(0) // Without this, the icon update will block. The new thread will die once the occupant leaves. + running_bob_animation = TRUE + while(occupant) + overlays -= "lid1" //have to remove the overlays first, to force an update- remove cloning pod overlay + overlays -= pickle //remove mob overlay + + switch(pickle.pixel_y) //this looks messy as fuck but it works, switch won't call itself twice + + if(23) //inbetween state, for smoothness + switch(up) //this is set later in the switch, to keep track of where the mob is supposed to go + if(2) //2 is up + pickle.pixel_y = 24 //set to highest + + if(1) //1 is down + pickle.pixel_y = 22 //set to lowest + + if(22) //mob is at it's lowest + pickle.pixel_y = 23 //set to inbetween + up = 2 //have to go up + + if(24) //mob is at it's highest + pickle.pixel_y = 23 //set to inbetween + up = 1 //have to go down + + overlays += pickle //re-add the mob to the icon + overlays += "lid1" //re-add the overlay of the pod, they are inside it, not floating + + sleep(7) //don't want to jiggle violently, just slowly bob + return + running_bob_animation = FALSE else - icon_state = "cell-on" + icon_state = "pod1" + overlays += "lid0" //have to remove the overlays first, to force an update- remove cloning pod overlay else - icon_state = "cell-off" + icon_state = "pod0" + overlays += "lid0" //if no occupant, just put the lid overlay on, and ignore the rest /obj/machinery/atmospherics/components/unary/cryo_cell/process() ..() @@ -110,8 +153,8 @@ return var/datum/gas_mixture/air1 = AIR1 var/turf/T = get_turf(src) - if(isliving(occupant)) - var/mob/living/mob_occupant + if(occupant) + var/mob/living/mob_occupant = occupant if(mob_occupant.health >= 100) // Don't bother with fully healed people. on = FALSE update_icon() @@ -149,7 +192,7 @@ on = FALSE update_icon() return - if(isliving(occupant)) + if(occupant) var/mob/living/mob_occupant = occupant var/cold_protection = 0 var/mob/living/carbon/human/H = occupant @@ -226,9 +269,10 @@ "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, "cell-o", "cell-off", I)) + if(default_deconstruction_screwdriver(user, "pod0-o", "pod0", I)) return if(exchange_parts(user, I)) return @@ -255,7 +299,7 @@ data["autoEject"] = autoeject var/list/occupantData = list() - if(isliving(occupant)) + if(occupant) var/mob/living/mob_occupant = occupant occupantData["name"] = mob_occupant.name occupantData["stat"] = mob_occupant.stat @@ -317,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/components/unary_devices/cryo.dm.rej b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm.rej deleted file mode 100644 index ef4176d273..0000000000 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm.rej +++ /dev/null @@ -1,12 +0,0 @@ -diff a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm (rejected hunks) -@@ -110,8 +110,8 @@ - return - var/datum/gas_mixture/air1 = AIR1 - var/turf/T = get_turf(src) -- if(isliving(occupant)) -- var/mob/living/mob_occupant -+ if(occupant) -+ var/mob/living/mob_occupant = occupant - if(mob_occupant.health >= 100) // Don't bother with fully healed people. - on = FALSE - update_icon() diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index f5168db1c3..bd9f3e35df 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -1,134 +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 + 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 + 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 + +/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 7c9989c15d..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) + 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)]:") - 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") + 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 63082d1988..376e907ab6 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -1,142 +1,142 @@ -#define PUMP_OUT "out" -#define PUMP_IN "in" -#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE * 30) -#define PUMP_MIN_PRESSURE (ONE_ATMOSPHERE / 10) -#define PUMP_DEFAULT_PRESSURE (ONE_ATMOSPHERE) - -/obj/machinery/portable_atmospherics/pump - name = "portable air pump" - icon_state = "psiphon:0" - density = 1 - - var/on = FALSE - var/direction = PUMP_OUT - var/obj/machinery/atmospherics/components/binary/pump/pump - - volume = 1000 - -/obj/machinery/portable_atmospherics/pump/Initialize() - ..() - pump = new(src, FALSE) - pump.on = TRUE - pump.stat = 0 - pump.build_network() - -/obj/machinery/portable_atmospherics/pump/Destroy() - var/turf/T = get_turf(src) - T.assume_air(air_contents) - air_update_turf() - qdel(pump) - pump = null - return ..() - -/obj/machinery/portable_atmospherics/pump/update_icon() - icon_state = "psiphon:[on]" - - cut_overlays() - if(holding) - add_overlay("siphon-open") - if(connected_port) - add_overlay("siphon-connector") - -/obj/machinery/portable_atmospherics/pump/process_atmos() - ..() - if(!on) - pump.AIR1 = null - pump.AIR2 = null - return - - var/turf/T = get_turf(src) - if(direction == PUMP_OUT) // Hook up the internal pump. - pump.AIR1 = holding ? holding.air_contents : air_contents - pump.AIR2 = holding ? air_contents : T.return_air() - else - pump.AIR1 = holding ? air_contents : T.return_air() - pump.AIR2 = holding ? holding.air_contents : air_contents - - pump.process_atmos() // Pump gas. - if(!holding) - air_update_turf() // Update the environment if needed. - -/obj/machinery/portable_atmospherics/pump/emp_act(severity) - if(is_operational()) - if(prob(50 / severity)) - on = !on - if(prob(100 / severity)) - direction = PUMP_OUT - pump.target_pressure = rand(0, 100 * ONE_ATMOSPHERE) - update_icon() - ..() - - -/obj/machinery/portable_atmospherics/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "portable_pump", name, 420, 415, master_ui, state) - ui.open() - -/obj/machinery/portable_atmospherics/pump/ui_data() - var/data = list() - data["on"] = on - data["direction"] = direction - data["connected"] = connected_port ? 1 : 0 - data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["target_pressure"] = round(pump.target_pressure ? pump.target_pressure : 0) - data["default_pressure"] = round(PUMP_DEFAULT_PRESSURE) - data["min_pressure"] = round(PUMP_MIN_PRESSURE) - data["max_pressure"] = round(PUMP_MAX_PRESSURE) - - if(holding) - data["holding"] = list() - data["holding"]["name"] = holding.name - data["holding"]["pressure"] = round(holding.air_contents.return_pressure()) - return data - -/obj/machinery/portable_atmospherics/pump/ui_act(action, params) - if(..()) - return - switch(action) - if("power") - on = !on - if(on && !holding) - var/plasma = air_contents.gases["plasma"] - var/n2o = air_contents.gases["n2o"] - if(n2o || plasma) +#define PUMP_OUT "out" +#define PUMP_IN "in" +#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE * 30) +#define PUMP_MIN_PRESSURE (ONE_ATMOSPHERE / 10) +#define PUMP_DEFAULT_PRESSURE (ONE_ATMOSPHERE) + +/obj/machinery/portable_atmospherics/pump + name = "portable air pump" + icon_state = "psiphon:0" + density = 1 + + var/on = FALSE + var/direction = PUMP_OUT + var/obj/machinery/atmospherics/components/binary/pump/pump + + volume = 1000 + +/obj/machinery/portable_atmospherics/pump/Initialize() + ..() + pump = new(src, FALSE) + pump.on = TRUE + pump.stat = 0 + pump.build_network() + +/obj/machinery/portable_atmospherics/pump/Destroy() + var/turf/T = get_turf(src) + T.assume_air(air_contents) + air_update_turf() + qdel(pump) + pump = null + return ..() + +/obj/machinery/portable_atmospherics/pump/update_icon() + icon_state = "psiphon:[on]" + + cut_overlays() + if(holding) + add_overlay("siphon-open") + if(connected_port) + add_overlay("siphon-connector") + +/obj/machinery/portable_atmospherics/pump/process_atmos() + ..() + if(!on) + pump.AIR1 = null + pump.AIR2 = null + return + + var/turf/T = get_turf(src) + if(direction == PUMP_OUT) // Hook up the internal pump. + pump.AIR1 = holding ? holding.air_contents : air_contents + pump.AIR2 = holding ? air_contents : T.return_air() + else + pump.AIR1 = holding ? air_contents : T.return_air() + pump.AIR2 = holding ? holding.air_contents : air_contents + + pump.process_atmos() // Pump gas. + if(!holding) + air_update_turf() // Update the environment if needed. + +/obj/machinery/portable_atmospherics/pump/emp_act(severity) + if(is_operational()) + if(prob(50 / severity)) + on = !on + if(prob(100 / severity)) + direction = PUMP_OUT + pump.target_pressure = rand(0, 100 * ONE_ATMOSPHERE) + update_icon() + ..() + + +/obj/machinery/portable_atmospherics/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "portable_pump", name, 420, 415, master_ui, state) + ui.open() + +/obj/machinery/portable_atmospherics/pump/ui_data() + var/data = list() + data["on"] = on + data["direction"] = direction + data["connected"] = connected_port ? 1 : 0 + data["pressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["target_pressure"] = round(pump.target_pressure ? pump.target_pressure : 0) + data["default_pressure"] = round(PUMP_DEFAULT_PRESSURE) + data["min_pressure"] = round(PUMP_MIN_PRESSURE) + data["max_pressure"] = round(PUMP_MAX_PRESSURE) + + if(holding) + data["holding"] = list() + data["holding"]["name"] = holding.name + data["holding"]["pressure"] = round(holding.air_contents.return_pressure()) + return data + +/obj/machinery/portable_atmospherics/pump/ui_act(action, params) + if(..()) + return + switch(action) + if("power") + on = !on + if(on && !holding) + var/plasma = air_contents.gases["plasma"] + var/n2o = air_contents.gases["n2o"] + if(n2o || plasma) 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) - direction = PUMP_IN - else - direction = PUMP_OUT - . = TRUE - if("pressure") - var/pressure = params["pressure"] - if(pressure == "reset") - pressure = PUMP_DEFAULT_PRESSURE - . = TRUE - else if(pressure == "min") - pressure = PUMP_MIN_PRESSURE - . = TRUE - else if(pressure == "max") - pressure = PUMP_MAX_PRESSURE - . = TRUE - else if(pressure == "input") - pressure = input("New release pressure ([PUMP_MIN_PRESSURE]-[PUMP_MAX_PRESSURE] kPa):", name, pump.target_pressure) as num|null - if(!isnull(pressure) && !..()) - . = TRUE - else if(text2num(pressure) != null) - pressure = text2num(pressure) - . = TRUE - if(.) - pump.target_pressure = Clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE) - investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", "atmos") - if("eject") - if(holding) - holding.loc = get_turf(src) - holding = null - . = TRUE + . = TRUE + if("direction") + if(direction == PUMP_OUT) + direction = PUMP_IN + else + direction = PUMP_OUT + . = TRUE + if("pressure") + var/pressure = params["pressure"] + if(pressure == "reset") + pressure = PUMP_DEFAULT_PRESSURE + . = TRUE + else if(pressure == "min") + pressure = PUMP_MIN_PRESSURE + . = TRUE + else if(pressure == "max") + pressure = PUMP_MAX_PRESSURE + . = TRUE + else if(pressure == "input") + pressure = input("New release pressure ([PUMP_MIN_PRESSURE]-[PUMP_MAX_PRESSURE] kPa):", name, pump.target_pressure) as num|null + if(!isnull(pressure) && !..()) + . = TRUE + else if(text2num(pressure) != null) + pressure = text2num(pressure) + . = TRUE + if(.) + pump.target_pressure = Clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE) + investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", "atmos") + if("eject") + if(holding) + holding.loc = get_turf(src) + holding = null + . = TRUE update_icon() \ No newline at end of file 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 c46399fa29..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 +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) + 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 7a665b40f3..c120f53660 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -1,73 +1,73 @@ - -//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() + +//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 + 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 @@ -76,234 +76,234 @@ 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 + +/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/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/client/client_procs.dm.rej b/code/modules/client/client_procs.dm.rej deleted file mode 100644 index 7c12c8bc58..0000000000 --- a/code/modules/client/client_procs.dm.rej +++ /dev/null @@ -1,46 +0,0 @@ -diff a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm (rejected hunks) -@@ -266,17 +266,11 @@ GLOBAL_LIST(external_rsc_urls) - if((global.comms_key == "default_pwd" || length(global.comms_key) <= 6) && global.comms_allowed) //It's the default value or less than 6 characters long, but it somehow didn't disable comms. - to_chat(src, "The server's API key is either too short or is the default value! Consider changing it immediately!") - -- add_verbs_from_config() -+ add_verbs_from_config(tdata) - set_client_age_from_db() - 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() -- -- sync_client_with_db(tdata) -- -- -+ player_age = 0 - 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") -@@ -295,7 +289,14 @@ GLOBAL_LIST(external_rsc_urls) - send2irc_adminless_only("New-user", "[key_name(src)] is connecting for the first time!") - 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 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 day[(account_age==1?"":"s")] old, created on [account_join_date].") -+ else //We failed to get an age for this user, let admins know they need to keep an eye on them -+ message_admins("Failed to get BYOND account age for [key_name_admin(src)]") - get_message_output("watchlist entry", ckey) - check_ip_intel() - -@@ -340,7 +341,7 @@ GLOBAL_LIST(external_rsc_urls) - adminGreet(1) - holder.owner = null - GLOB.admins -= src -- -+ - GLOB.ahelp_tickets.ClientLogout(src) - GLOB.directory -= ckey - GLOB.clients -= src 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 80547c4db9..f287870ef6 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -1,806 +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) +/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 - ..() + +/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/head/collectable.dm b/code/modules/clothing/head/collectable.dm index b55d826547..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" + +//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 + 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 65920a06d0..083332c3bd 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -1,162 +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" + +//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/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 526a15e7f5..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 +/* + * 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 + 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/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 562f59290a..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" +//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/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. + 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") + 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/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 b43bf3fe3a..ea35e79824 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -555,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/fields/fields.dm b/code/modules/fields/fields.dm new file mode 100644 index 0000000000..4b083d7e02 --- /dev/null +++ b/code/modules/fields/fields.dm @@ -0,0 +1,309 @@ + +//Movable and easily code-modified fields! Allows for custom AOE effects that affect movement and anything inside of them, and can do custom turf effects! +//Supports automatic recalculation/reset on movement. +//If there's any way to make this less CPU intensive than I've managed, gimme a call or do it yourself! - kevinz000 + +//Field shapes +#define FIELD_NO_SHAPE 0 //Does not update turfs automatically +#define FIELD_SHAPE_RADIUS_SQUARE 1 //Uses current_range and square_depth_up/down +#define FIELD_SHAPE_CUSTOM_SQUARE 2 //Uses square_height and square_width and square_depth_up/down + +//Proc to make fields. make_field(field_type, field_params_in_associative_list) +/proc/make_field(field_type, list/field_params, override_checks = FALSE, start_field = TRUE) + var/datum/proximity_monitor/advanced/F = new field_type() + if(!F.assume_params(field_params) && !override_checks) + QDEL_NULL(F) + if(!F.check_variables() && !override_checks) + QDEL_NULL(F) + if(start_field && (F || override_checks)) + F.Initialize() + return F + +/datum/proximity_monitor/advanced + var/name = "\improper Energy Field" + //Field setup specifications + var/field_shape = FIELD_NO_SHAPE + var/square_height = 0 + var/square_width = 0 + var/square_depth_up = 0 + var/square_depth_down = 0 + //Processing + var/requires_processing = FALSE + var/process_inner_turfs = FALSE //Don't do this unless it's absolutely necessary + var/process_edge_turfs = FALSE //Don't do this either unless it's absolutely necessary, you can just track what things are inside manually or on the initial setup. + var/setup_edge_turfs = FALSE //Setup edge turfs/all field turfs. Set either or both to ON when you need it, it's defaulting to off unless you do to save CPU. + var/setup_field_turfs = FALSE + + var/list/turf/field_turfs = list() + var/list/turf/edge_turfs = list() + var/list/turf/field_turfs_new = list() + var/list/turf/edge_turfs_new = list() + +/datum/proximity_monitor/advanced/New() + SSfields.register_new_field(src) + +/datum/proximity_monitor/advanced/Destroy() + SSfields.unregister_field(src) + full_cleanup() + return ..() + +/datum/proximity_monitor/advanced/proc/assume_params(list/field_params) + var/pass_check = TRUE + for(var/param in field_params) + if(vars[param] || isnull(vars[param]) || (param in vars)) + vars[param] = field_params[param] + else + pass_check = FALSE + return pass_check + +/datum/proximity_monitor/advanced/proc/check_variables() + var/pass = TRUE + if(field_shape == FIELD_NO_SHAPE) //If you're going to make a manually updated field you shouldn't be using automatic checks so don't. + pass = FALSE + if(current_range < 0 || square_height < 0 || square_width < 0 || square_depth_up < 0 || square_depth_down < 0) + pass = FALSE + if(!istype(host)) + pass = FALSE + return pass + +/datum/proximity_monitor/advanced/process() + if(process_inner_turfs) + for(var/turf/T in field_turfs) + process_inner_turf(T) + CHECK_TICK //Really crappy lagchecks, needs improvement once someone starts using processed fields. + if(process_edge_turfs) + for(var/turf/T in edge_turfs) + process_edge_turf(T) + CHECK_TICK //Same here. + +/datum/proximity_monitor/advanced/proc/process_inner_turf(turf/T) + +/datum/proximity_monitor/advanced/proc/process_edge_turf(turf/T) + +/datum/proximity_monitor/advanced/proc/Initialize() + setup_field() + post_setup_field() + +/datum/proximity_monitor/advanced/proc/full_cleanup() //Full cleanup for when you change something that would require complete resetting. + for(var/turf/T in edge_turfs) + cleanup_edge_turf(T) + for(var/turf/T in field_turfs) + cleanup_field_turf(T) + +/datum/proximity_monitor/advanced/proc/recalculate_field(ignore_movement_check = FALSE) //Call every time the field moves (done automatically if you use update_center) or a setup specification is changed. + if(!(ignore_movement_check || ((host.loc != last_host_loc) && (field_shape != FIELD_NO_SHAPE)))) + return + update_new_turfs() + var/list/turf/needs_setup = field_turfs_new.Copy() + if(setup_field_turfs) + for(var/turf/T in field_turfs) + if(!(T in needs_setup)) + cleanup_field_turf(T) + else + needs_setup -= T + CHECK_TICK + for(var/turf/T in needs_setup) + setup_field_turf(T) + CHECK_TICK + if(setup_edge_turfs) + for(var/turf/T in edge_turfs) + cleanup_edge_turf(T) + CHECK_TICK + for(var/turf/T in edge_turfs_new) + setup_edge_turf(T) + CHECK_TICK + +/datum/proximity_monitor/advanced/proc/field_turf_canpass(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F, turf/entering) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_turf_uncross(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_turf_crossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_turf_uncrossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_turf/F) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_edge_canpass(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F, turf/entering) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_edge_uncross(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_edge_crossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) + return TRUE + +/datum/proximity_monitor/advanced/proc/field_edge_uncrossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) + return TRUE + +/datum/proximity_monitor/advanced/HandleMove() + var/atom/_host = host + var/atom/new_host_loc = _host.loc + if(last_host_loc != new_host_loc) + recalculate_field() + +/datum/proximity_monitor/advanced/proc/post_setup_field() + +/datum/proximity_monitor/advanced/proc/setup_field() + update_new_turfs() + if(setup_field_turfs) + for(var/turf/T in field_turfs_new) + setup_field_turf(T) + CHECK_TICK + if(setup_edge_turfs) + for(var/turf/T in edge_turfs_new) + setup_edge_turf(T) + CHECK_TICK + +/datum/proximity_monitor/advanced/proc/cleanup_field_turf(turf/T) + qdel(field_turfs[T]) + field_turfs -= T + +/datum/proximity_monitor/advanced/proc/cleanup_edge_turf(turf/T) + qdel(edge_turfs[T]) + edge_turfs -= T + +/datum/proximity_monitor/advanced/proc/setup_field_turf(turf/T) + field_turfs[T] = new /obj/effect/abstract/proximity_checker/advanced/field_turf(T, src) + +/datum/proximity_monitor/advanced/proc/setup_edge_turf(turf/T) + edge_turfs[T] = new /obj/effect/abstract/proximity_checker/advanced/field_edge(T, src) + +/datum/proximity_monitor/advanced/proc/update_new_turfs() + if(!istype(host)) + return FALSE + last_host_loc = host.loc + var/turf/center = get_turf(host) + field_turfs_new = list() + edge_turfs_new = list() + switch(field_shape) + if(FIELD_NO_SHAPE) + return FALSE + if(FIELD_SHAPE_RADIUS_SQUARE) + for(var/turf/T in block(locate(center.x-current_range,center.y-current_range,center.z-square_depth_down),locate(center.x+current_range, center.y+current_range,center.z+square_depth_up))) + field_turfs_new += T + edge_turfs_new = field_turfs_new.Copy() + if(current_range >= 1) + var/list/turf/center_turfs = list() + for(var/turf/T in block(locate(center.x-current_range+1,center.y-current_range+1,center.z-square_depth_down),locate(center.x+current_range-1, center.y+current_range-1,center.z+square_depth_up))) + center_turfs += T + for(var/turf/T in center_turfs) + edge_turfs_new -= T + if(FIELD_SHAPE_CUSTOM_SQUARE) + for(var/turf/T in block(locate(center.x-square_width,center.y-square_height,center.z-square_depth_down),locate(center.x+square_width, center.y+square_height,center.z+square_depth_up))) + field_turfs_new += T + edge_turfs_new = field_turfs_new.Copy() + if(square_height >= 1 && square_width >= 1) + var/list/turf/center_turfs = list() + for(var/turf/T in block(locate(center.x-square_width+1,center.y-square_height+1,center.z-square_depth_down),locate(center.x+square_width-1, center.y+square_height-1,center.z+square_depth_up))) + center_turfs += T + for(var/turf/T in center_turfs) + edge_turfs_new -= T + +//Gets edge direction/corner, only works with square radius/WDH fields! +/datum/proximity_monitor/advanced/proc/get_edgeturf_direction(turf/T, turf/center_override = null) + var/turf/checking_from = get_turf(host) + if(istype(center_override)) + checking_from = center_override + if(field_shape != FIELD_SHAPE_RADIUS_SQUARE && field_shape != FIELD_SHAPE_CUSTOM_SQUARE) + return + if(!(T in edge_turfs)) + return + switch(field_shape) + if(FIELD_SHAPE_RADIUS_SQUARE) + if(((T.x == (checking_from.x + current_range)) || (T.x == (checking_from.x - current_range))) && ((T.y == (checking_from.y + current_range)) || (T.y == (checking_from.y - current_range)))) + return get_dir(checking_from, T) + if(T.x == (checking_from.x + current_range)) + return EAST + if(T.x == (checking_from.x - current_range)) + return WEST + if(T.y == (checking_from.y - current_range)) + return SOUTH + if(T.y == (checking_from.y + current_range)) + return NORTH + if(FIELD_SHAPE_CUSTOM_SQUARE) + if(((T.x == (checking_from.x + square_width)) || (T.x == (checking_from.x - square_width))) && ((T.y == (checking_from.y + square_height)) || (T.y == (checking_from.y - square_height)))) + return get_dir(checking_from, T) + if(T.x == (checking_from.x + square_width)) + return EAST + if(T.x == (checking_from.x - square_width)) + return WEST + if(T.y == (checking_from.y - square_height)) + return SOUTH + if(T.y == (checking_from.y + square_height)) + return NORTH + +//DEBUG FIELDS +/datum/proximity_monitor/advanced/debug + name = "\improper Color Matrix Field" + field_shape = FIELD_SHAPE_RADIUS_SQUARE + current_range = 5 + var/set_fieldturf_color = "#aaffff" + var/set_edgeturf_color = "#ffaaff" + setup_field_turfs = TRUE + setup_edge_turfs = TRUE + +/datum/proximity_monitor/advanced/debug/recalculate_field() + ..() + +/datum/proximity_monitor/advanced/debug/post_setup_field() + ..() + +/datum/proximity_monitor/advanced/debug/setup_edge_turf(turf/T) + T.color = set_edgeturf_color + ..() + +/datum/proximity_monitor/advanced/debug/cleanup_edge_turf(turf/T) + T.color = initial(T.color) + ..() + if(T in field_turfs) + T.color = set_fieldturf_color + +/datum/proximity_monitor/advanced/debug/setup_field_turf(turf/T) + T.color = set_fieldturf_color + ..() + +/datum/proximity_monitor/advanced/debug/cleanup_field_turf(turf/T) + T.color = initial(T.color) + ..() + +//DEBUG FIELD ITEM +/obj/item/device/multitool/field_debug + name = "strange multitool" + desc = "Seems to project a colored field!" + var/list/field_params = list("field_shape" = FIELD_SHAPE_RADIUS_SQUARE, "current_range" = 5, "set_fieldturf_color" = "#aaffff", "set_edgeturf_color" = "#ffaaff") + var/field_type = /datum/proximity_monitor/advanced/debug + var/operating = FALSE + var/datum/proximity_monitor/advanced/current = null + +/obj/item/device/multitool/field_debug/New() + START_PROCESSING(SSobj, src) + ..() + +/obj/item/device/multitool/field_debug/Destroy() + STOP_PROCESSING(SSobj, src) + QDEL_NULL(current) + ..() + +/obj/item/device/multitool/field_debug/proc/setup_debug_field() + var/list/new_params = field_params.Copy() + new_params["host"] = src + current = make_field(field_type, new_params) + +/obj/item/device/multitool/field_debug/attack_self(mob/user) + operating = !operating + to_chat(user, "You turn the [src] [operating? "on":"off"].") + if(!istype(current) && operating) + setup_debug_field() + else if(!operating) + QDEL_NULL(current) + +/obj/item/device/multitool/field_debug/on_mob_move() + check_turf(get_turf(src)) + +/obj/item/device/multitool/field_debug/process() + check_turf(get_turf(src)) + +/obj/item/device/multitool/field_debug/proc/check_turf(turf/T) + current.HandleMove() diff --git a/code/modules/fields/peaceborg_dampener.dm b/code/modules/fields/peaceborg_dampener.dm new file mode 100644 index 0000000000..bcf8a88585 --- /dev/null +++ b/code/modules/fields/peaceborg_dampener.dm @@ -0,0 +1,106 @@ + +//Projectile dampening field that slows projectiles and lowers their damage for an energy cost deducted every 1/5 second. +//Only use square radius for this! +/datum/proximity_monitor/advanced/peaceborg_dampener + name = "\improper Hyperkinetic Dampener Field" + requires_processing = TRUE + setup_edge_turfs = TRUE + setup_field_turfs = TRUE + field_shape = FIELD_SHAPE_RADIUS_SQUARE + var/static/image/edgeturf_south = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_south") + var/static/image/edgeturf_north = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_north") + var/static/image/edgeturf_west = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_west") + var/static/image/edgeturf_east = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_east") + var/static/image/northwest_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northwest") + var/static/image/southwest_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southwest") + var/static/image/northeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_northeast") + var/static/image/southeast_corner = image('icons/effects/fields.dmi', icon_state = "projectile_dampen_southeast") + var/obj/item/borg/projectile_dampen/projector = null + var/list/obj/item/projectile/tracked + var/list/obj/item/projectile/staging + +/datum/proximity_monitor/advanced/peaceborg_dampener/New() + tracked = list() + staging = list() + ..() + +/datum/proximity_monitor/advanced/peaceborg_dampener/process() + if(!istype(projector)) + qdel(src) + var/list/ranged = list() + for(var/obj/item/projectile/P in range(current_range, get_turf(host))) + ranged += P + for(var/obj/item/projectile/P in tracked) + if(!(P in ranged) || !P.loc) + release_projectile(P) + for(var/mob/living/silicon/robot/R in range(current_range, get_turf(host))) + if(R.has_buckled_mobs()) + for(var/mob/living/L in R.buckled_mobs) + L.visible_message("[L] is knocked off of [R] by the charge in [R]'s chassis induced by [name]!") //I know it's bad. + L.Weaken(3) + R.unbuckle_mob(L) + do_sparks(5, 0, L) + ..() + +/datum/proximity_monitor/advanced/peaceborg_dampener/setup_edge_turf(turf/T) + ..() + var/image/I = get_edgeturf_overlay(get_edgeturf_direction(T)) + var/obj/effect/abstract/proximity_checker/advanced/F = edge_turfs[T] + F.appearance = I.appearance + F.invisibility = 0 + F.layer = 5 + +/datum/proximity_monitor/advanced/peaceborg_dampener/cleanup_edge_turf(turf/T) + ..() + +/datum/proximity_monitor/advanced/peaceborg_dampener/proc/get_edgeturf_overlay(direction) + switch(direction) + if(NORTH) + return edgeturf_north + if(SOUTH) + return edgeturf_south + if(EAST) + return edgeturf_east + if(WEST) + return edgeturf_west + if(NORTHEAST) + return northeast_corner + if(NORTHWEST) + return northwest_corner + if(SOUTHEAST) + return southeast_corner + if(SOUTHWEST) + return southwest_corner + +/datum/proximity_monitor/advanced/peaceborg_dampener/proc/capture_projectile(obj/item/projectile/P, track_projectile = TRUE) + if(P in tracked) + return + projector.dampen_projectile(P, track_projectile) + if(track_projectile) + tracked += P + +/datum/proximity_monitor/advanced/peaceborg_dampener/proc/release_projectile(obj/item/projectile/P) + projector.restore_projectile(P) + tracked -= P + +/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_uncrossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) + if(!is_turf_in_field(get_turf(AM), src)) + if(istype(AM, /obj/item/projectile)) + if(AM in tracked) + release_projectile(AM) + else + capture_projectile(AM, FALSE) + return ..() + +/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_crossed(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F) + if(istype(AM, /obj/item/projectile) && !(AM in tracked) && staging[AM] && !is_turf_in_field(staging[AM], src)) + capture_projectile(AM) + staging -= AM + return ..() + +/datum/proximity_monitor/advanced/peaceborg_dampener/field_edge_canpass(atom/movable/AM, obj/effect/abstract/proximity_checker/advanced/field_edge/F, turf/entering) + if(istype(AM, /obj/item/projectile)) + staging[AM] = get_turf(AM) + . = ..() + if(!.) + staging -= AM //This one ain't goin' through. diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm new file mode 100644 index 0000000000..683fa67c96 --- /dev/null +++ b/code/modules/fields/turf_objects.dm @@ -0,0 +1,76 @@ + +/obj/effect/abstract/proximity_checker/advanced + name = "field" + desc = "Why can you see energy fields?!" + icon = null + icon_state = null + alpha = 0 + invisibility = INVISIBILITY_ABSTRACT + flags = ABSTRACT|ON_BORDER + var/datum/proximity_monitor/advanced/parent = null + +/obj/effect/abstract/proximity_checker/advanced/Initialize(mapload, _monitor) + if(_monitor) + parent = _monitor + return ..() + +/obj/effect/abstract/proximity_checker/advanced/center + name = "field anchor" + desc = "No." + +/obj/effect/abstract/proximity_checker/advanced/field_turf + name = "energy field" + desc = "Get off my turf!" + +/obj/effect/abstract/proximity_checker/advanced/field_turf/CanPass(atom/movable/AM, turf/target, height) + if(parent) + return parent.field_turf_canpass(AM, src, target) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_turf/Crossed(atom/movable/AM) + if(parent) + return parent.field_turf_crossed(AM, src) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_turf/Uncross(atom/movable/AM) + if(parent) + return parent.field_turf_uncross(AM, src) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_turf/Uncrossed(atom/movable/AM) + if(parent) + return parent.field_turf_uncrossed(AM, src) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_edge + name = "energy field edge" + desc = "Edgy description here." + +/obj/effect/abstract/proximity_checker/advanced/field_edge/CanPass(atom/movable/AM, turf/target, height) + if(parent) + return parent.field_edge_canpass(AM, src, target) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_edge/Crossed(atom/movable/AM) + if(parent) + return parent.field_edge_crossed(AM, src) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_edge/Uncross(atom/movable/AM) + if(parent) + return parent.field_edge_uncross(AM, src) + return TRUE + +/obj/effect/abstract/proximity_checker/advanced/field_edge/Uncrossed(atom/movable/AM) + if(parent) + return parent.field_edge_uncrossed(AM, src) + return TRUE + +/proc/is_turf_in_field(turf/T, datum/proximity_monitor/advanced/F) //Looking for ways to optimize this! + for(var/obj/effect/abstract/proximity_checker/advanced/O in T) + if(istype(O, /obj/effect/abstract/proximity_checker/advanced/field_edge)) + if(O.parent == F) + return FIELD_EDGE + if(O.parent == F) + return FIELD_TURF + return NO_FIELD 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/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index a67fef2473..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 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 317b954c91..8f49846f60 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -369,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 diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 85923811f9..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", + + +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 + "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/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 7d983e5519..fd01846467 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -1,201 +1,201 @@ -/* -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, +/* +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, /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) + ) + + 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) - return - - 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 + +/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) + return + + 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 diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm index 9b226e70f5..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", +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", "Curator", - "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 35cb988083..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 + 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 = 45 + 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 7b59bb5dfb..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 +//******************************* +// +// 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 -// --------------------- + 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. +// -- 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. +// 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. +// - 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/mapping/ruins.dm b/code/modules/mapping/ruins.dm index d08161916c..a5d07591b5 100644 --- a/code/modules/mapping/ruins.dm +++ b/code/modules/mapping/ruins.dm @@ -1,93 +1,93 @@ - - -/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins) - if(!z_levels || !z_levels.len) - WARNING("No Z levels provided - Not generating ruins") - return - - for(var/zl in z_levels) - var/turf/T = locate(1, 1, zl) - if(!T) - WARNING("Z level [zl] does not exist - Not generating ruins") - return - - var/overall_sanity = 100 - var/list/ruins = potentialRuins.Copy() - - while(budget > 0 && overall_sanity > 0) - // Pick a ruin - var/datum/map_template/ruin/ruin = null - if(ruins && ruins.len) - ruin = ruins[pick(ruins)] - else + + +/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins) + if(!z_levels || !z_levels.len) + WARNING("No Z levels provided - Not generating ruins") + return + + for(var/zl in z_levels) + var/turf/T = locate(1, 1, zl) + if(!T) + WARNING("Z level [zl] does not exist - Not generating ruins") + return + + var/overall_sanity = 100 + var/list/ruins = potentialRuins.Copy() + + while(budget > 0 && overall_sanity > 0) + // Pick a ruin + var/datum/map_template/ruin/ruin = null + if(ruins && ruins.len) + ruin = ruins[pick(ruins)] + else log_world("Ruin loader had no ruins to pick from with [budget] left to spend.") - break - // Can we afford it - if(ruin.cost > budget) - overall_sanity-- - continue - // If so, try to place it - var/sanity = 100 - // And if we can't fit it anywhere, give up, try again - - while(sanity > 0) - sanity-- - var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2) - var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2) - var/z_level = pick(z_levels) - var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level) - var/valid = TRUE - - for(var/turf/check in ruin.get_affected_turfs(T,1)) - var/area/new_area = get_area(check) - if(!(istype(new_area, whitelist))) - valid = FALSE - break - - if(!valid) - continue - + break + // Can we afford it + if(ruin.cost > budget) + overall_sanity-- + continue + // If so, try to place it + var/sanity = 100 + // And if we can't fit it anywhere, give up, try again + + while(sanity > 0) + sanity-- + var/width_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.width / 2) + var/height_border = TRANSITIONEDGE + SPACERUIN_MAP_EDGE_PAD + round(ruin.height / 2) + var/z_level = pick(z_levels) + var/turf/T = locate(rand(width_border, world.maxx - width_border), rand(height_border, world.maxy - height_border), z_level) + var/valid = TRUE + + for(var/turf/check in ruin.get_affected_turfs(T,1)) + var/area/new_area = get_area(check) + if(!(istype(new_area, whitelist))) + valid = FALSE + break + + if(!valid) + continue + 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) - budget -= ruin.cost - if(!ruin.allow_duplicates) - ruins -= ruin.name - break - - if(!overall_sanity) + + var/obj/effect/ruin_loader/R = new /obj/effect/ruin_loader(T) + R.Load(ruins,ruin) + budget -= ruin.cost + if(!ruin.allow_duplicates) + ruins -= ruin.name + break + + if(!overall_sanity) log_world("Ruin loader gave up with [budget] left to spend.") - - -/obj/effect/ruin_loader - name = "random ruin" - icon = 'icons/obj/weapons.dmi' - icon_state = "syndballoon" - invisibility = 0 - -/obj/effect/ruin_loader/proc/Load(list/potentialRuins, datum/map_template/template) - var/list/possible_ruins = list() - for(var/A in potentialRuins) - var/datum/map_template/T = potentialRuins[A] - if(!T.loaded) - possible_ruins += T - if(!template && possible_ruins.len) - template = safepick(possible_ruins) - if(!template) - return FALSE - var/turf/central_turf = get_turf(src) - for(var/i in template.get_affected_turfs(central_turf, 1)) - var/turf/T = i - for(var/mob/living/simple_animal/monster in T) - qdel(monster) - for(var/obj/structure/flora/ash/plant in T) - qdel(plant) - template.load(central_turf,centered = TRUE) - template.loaded++ - var/datum/map_template/ruin = template - if(istype(ruin)) - new /obj/effect/landmark/ruin(central_turf, ruin) - - qdel(src) - return TRUE + + +/obj/effect/ruin_loader + name = "random ruin" + icon = 'icons/obj/weapons.dmi' + icon_state = "syndballoon" + invisibility = 0 + +/obj/effect/ruin_loader/proc/Load(list/potentialRuins, datum/map_template/template) + var/list/possible_ruins = list() + for(var/A in potentialRuins) + var/datum/map_template/T = potentialRuins[A] + if(!T.loaded) + possible_ruins += T + if(!template && possible_ruins.len) + template = safepick(possible_ruins) + if(!template) + return FALSE + var/turf/central_turf = get_turf(src) + for(var/i in template.get_affected_turfs(central_turf, 1)) + var/turf/T = i + for(var/mob/living/simple_animal/monster in T) + qdel(monster) + for(var/obj/structure/flora/ash/plant in T) + qdel(plant) + template.load(central_turf,centered = TRUE) + template.loaded++ + var/datum/map_template/ruin = template + if(istype(ruin)) + new /obj/effect/landmark/ruin(central_turf, ruin) + + qdel(src) + return TRUE diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 8c2d1ca281..0811c0a8d9 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -2,7 +2,8 @@ #define BAD_ZLEVEL 1 #define BAD_AREA 2 -#define ZONE_SET 3 +#define BAD_COORDS 3 +#define ZONE_SET 4 /area/shuttle/auxillary_base name = "Auxillary Base" @@ -149,6 +150,9 @@ interface with the mining shuttle at the landing site if a mobile beacon is also if(T.z != ZLEVEL_MINING) return BAD_ZLEVEL var/colony_radius = max(base_dock.width, base_dock.height)*0.5 + if(T.x - colony_radius < 1 || T.x + colony_radius >= world.maxx || T.y - colony_radius < 1 || T.y + colony_radius >= world.maxx) + return BAD_COORDS //Avoid dropping the base too close to map boundaries, as it results in parts of it being left in space + var/list/area_counter = get_areas_in_range(colony_radius, T) if(area_counter.len > 1) //Avoid smashing ruins unless you are inside a really big one return BAD_AREA @@ -195,6 +199,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also if(!do_after(user, 50, target = user)) //You get a few seconds to cancel if you do not want to drop there. setting = FALSE return + setting = FALSE var/turf/T = get_turf(user) var/obj/machinery/computer/auxillary_base/AB @@ -212,6 +217,8 @@ interface with the mining shuttle at the landing site if a mobile beacon is also to_chat(user, "This uplink can only be used in a designed mining zone.") if(BAD_AREA) to_chat(user, "Unable to acquire a targeting lock. Find an area clear of stuctures or entirely within one.") + if(BAD_COORDS) + to_chat(user, "Location is too close to the edge of the station's scanning range. Move several paces away and try again.") if(ZONE_SET) qdel(src) @@ -347,4 +354,5 @@ obj/docking_port/stationary/public_mining_dock/onShuttleMove() #undef BAD_ZLEVEL #undef BAD_AREA +#undef BAD_COORDS #undef ZONE_SET \ No newline at end of file diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 4999f796c5..9e4996135d 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1,5 +1,6 @@ //The chests dropped by mob spawner tendrils. Also contains associated loot. + /obj/structure/closet/crate/necropolis name = "necropolis chest" desc = "It's watching you closely." @@ -820,7 +821,9 @@ timer = world.time + cooldown_time if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one! chaser_timer = world.time + chaser_cooldown - new /obj/effect/overlay/temp/hierophant/chaser(get_turf(user), user, target, chaser_speed, friendly_fire_check) + var/obj/effect/overlay/temp/hierophant/chaser/C = new(get_turf(user), user, target, chaser_speed, friendly_fire_check) + C.damage = 30 + C.monster_damage_boost = FALSE add_logs(user, target, "fired a chaser at", src) else INVOKE_ASYNC(src, .proc/cardinal_blasts, T, user) //otherwise, just do cardinal blast @@ -940,10 +943,10 @@ new /obj/effect/overlay/temp/hierophant/telegraph/teleport(T, user) new /obj/effect/overlay/temp/hierophant/telegraph/teleport(source, user) for(var/t in RANGE_TURFS(1, T)) - var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //blasts produced will not hurt allies + var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //No friendly fire, this is a utility tool B.damage = 30 for(var/t in RANGE_TURFS(1, source)) - var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) //but absolutely will hurt enemies + var/obj/effect/overlay/temp/hierophant/blast/B = new /obj/effect/overlay/temp/hierophant/blast(t, user, TRUE) B.damage = 30 for(var/mob/living/L in range(1, source)) INVOKE_ASYNC(src, .proc/teleport_mob, source, L, T, user) //regardless, take all mobs near us along @@ -1004,7 +1007,9 @@ for(var/i in 1 to range) if(!J) return - new /obj/effect/overlay/temp/hierophant/blast(J, user, friendly_fire_check) + var/obj/effect/overlay/temp/hierophant/blast/B = new(J, user, friendly_fire_check) + B.damage = 30 + B.monster_damage_boost = FALSE previousturf = J J = get_step(previousturf, dir) @@ -1015,4 +1020,5 @@ playsound(T,'sound/effects/bin_close.ogg', 200, 1) sleep(2) for(var/t in RANGE_TURFS(1, T)) - new /obj/effect/overlay/temp/hierophant/blast(t, user, friendly_fire_check) + var/obj/effect/overlay/temp/hierophant/blast/B = new(t, user, friendly_fire_check) + B.damage = 15 //keeps monster damage boost due to lower damage diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index f3b66d9172..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,11 +74,11 @@ 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) @@ -188,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() @@ -219,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)) @@ -228,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() @@ -257,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/mine_items.dm b/code/modules/mining/mine_items.dm index d15896a8db..3df4d521ff 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -300,31 +300,47 @@ //Door /obj/machinery/door/airlock/survival_pod name = "airlock" - icon = 'icons/obj/doors/airlocks/survival/horizontal/survival.dmi' - overlays_file = 'icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi' + icon = 'icons/obj/doors/airlocks/survival/survival.dmi' + overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_pod opacity = 0 glass = 1 + var/expected_dir = SOUTH //we visually turn when shuttle rotated, but need to not turn for any other reason + +/obj/machinery/door/airlock/survival_pod/setDir(direction) + direction = expected_dir + ..() + +/obj/machinery/door/airlock/survival_pod/shuttleRotate(rotation) + expected_dir = angle2dir(rotation+dir2angle(dir)) + ..() /obj/machinery/door/airlock/survival_pod/vertical - icon = 'icons/obj/doors/airlocks/survival/vertical/survival.dmi' - overlays_file = 'icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_pod/vertical + dir = EAST + expected_dir = EAST /obj/structure/door_assembly/door_assembly_pod name = "pod airlock assembly" - icon = 'icons/obj/doors/airlocks/survival/horizontal/survival.dmi' - overlays_file = 'icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi' + icon = 'icons/obj/doors/airlocks/survival/survival.dmi' + overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' airlock_type = /obj/machinery/door/airlock/survival_pod anchored = 1 state = 1 mineral = "glass" material = "glass" + var/expected_dir = SOUTH + +/obj/structure/door_assembly/door_assembly_pod/setDir(direction) + direction = expected_dir + ..() + +/obj/structure/door_assembly/door_assembly_pod/shuttleRotate(rotation) + expected_dir = angle2dir(rotation+dir2angle(dir)) + ..() /obj/structure/door_assembly/door_assembly_pod/vertical - icon = 'icons/obj/doors/airlocks/survival/vertical/survival.dmi' - overlays_file = 'icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi' - airlock_type = /obj/machinery/door/airlock/survival_pod/vertical + dir = EAST + expected_dir = EAST //Table /obj/structure/table/survival_pod diff --git a/code/modules/mob/dead/dead.dm.rej b/code/modules/mob/dead/dead.dm.rej deleted file mode 100644 index 4a71374804..0000000000 --- a/code/modules/mob/dead/dead.dm.rej +++ /dev/null @@ -1,9 +0,0 @@ -diff a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm (rejected hunks) -@@ -5,6 +5,7 @@ INITIALIZE_IMMEDIATE(/mob/dead) - /mob/dead/Initialize() - if(initialized) - stack_trace("Warning: [src]([type]) initialized multiple times!") -+ initialized = TRUE - tag = "mob_[next_mob_id++]" - GLOB.mob_list += src - diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 00df173551..0599aaaa8a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -117,29 +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 ..() @@ -270,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 @@ -297,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) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index ca8b8f2d9d..908d787a7b 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -31,25 +31,41 @@ 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 - var/word = pick("dizzy","woozy","faint") switch(blood_volume) if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) if(prob(5)) - to_chat(src, "You feel [word].") + to_chat(src, "You feel [pick("dizzy","woozy","faint")].") adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1)) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) if(prob(5)) blur_eyes(6) + var/word = pick("dizzy","woozy","faint") to_chat(src, "You feel very [word].") if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) adjustOxyLoss(5) if(prob(15)) Paralyse(rand(1,3)) + var/word = pick("dizzy","woozy","faint") to_chat(src, "You feel extremely [word].") if(0 to BLOOD_VOLUME_SURVIVE) death() @@ -69,7 +85,7 @@ bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases - if(bleed_rate && !bleedsuppress && !(status_flags & FAKEDEATH)) + if(bleed_rate && !bleedsuppress) bleed(bleed_rate) //Makes a blood drop, leaking amt units of blood from the mob 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/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/alien/status_procs.dm b/code/modules/mob/living/carbon/alien/status_procs.dm index 653b05ae5a..b63d233016 100644 --- a/code/modules/mob/living/carbon/alien/status_procs.dm +++ b/code/modules/mob/living/carbon/alien/status_procs.dm @@ -17,4 +17,4 @@ /mob/living/carbon/alien/AdjustStunned(amount, updating = 1, ignore_canstun = 0) . = ..() if(!.) - move_delay_add = min(move_delay_add + round(amount / 2), 10) + move_delay_add = Clamp(move_delay_add + round(amount/2), 0, 10) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 84cbc01a33..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) @@ -276,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/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/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index b778279f42..6fb2ab25f5 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -1,178 +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() +/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 + +//Ayy lmao 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 77ac31812a..1b5518008e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -1,245 +1,245 @@ -/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0) - return dna.species.can_equip(I, slot, disable_warning, src) - -// Return the item currently in the slot ID -/mob/living/carbon/human/get_item_by_slot(slot_id) - switch(slot_id) - if(slot_back) - return back - if(slot_wear_mask) - return wear_mask - if(slot_neck) - return wear_neck - if(slot_handcuffed) - return handcuffed - if(slot_legcuffed) - return legcuffed - if(slot_belt) - return belt - if(slot_wear_id) - return wear_id - if(slot_ears) - return ears - if(slot_glasses) - return glasses - if(slot_gloves) - return gloves - if(slot_head) - return head - if(slot_shoes) - return shoes - if(slot_wear_suit) - return wear_suit - if(slot_w_uniform) - return w_uniform - if(slot_l_store) - return l_store - if(slot_r_store) - return r_store - if(slot_s_store) - return s_store - return null - -/mob/living/carbon/human/proc/get_all_slots() - . = get_head_slots() | get_body_slots() - -/mob/living/carbon/human/proc/get_body_slots() - return list( - back, - s_store, - handcuffed, - legcuffed, - wear_suit, - gloves, - shoes, - belt, - wear_id, - l_store, - r_store, - w_uniform - ) - -/mob/living/carbon/human/proc/get_head_slots() - return list( - head, - wear_mask, - glasses, - ears, - ) - -/mob/living/carbon/human/proc/get_storage_slots() - return list( - back, - belt, - l_store, - r_store, - s_store, - ) - -//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() -/mob/living/carbon/human/equip_to_slot(obj/item/I, slot) - if(!..()) //a check failed or the item has already found its slot - return - - var/not_handled = FALSE //Added in case we make this type path deeper one day - switch(slot) - if(slot_belt) - belt = I - update_inv_belt() - if(slot_wear_id) - wear_id = I - sec_hud_set_ID() - update_inv_wear_id() - if(slot_ears) - ears = I - update_inv_ears() - if(slot_glasses) - glasses = I - var/obj/item/clothing/glasses/G = I - if(G.glass_colour_type) - update_glasses_color(G, 1) - if(G.tint) - update_tint() - if(G.vision_correction) - clear_fullscreen("nearsighted") - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) - update_sight() - update_inv_glasses() - if(slot_gloves) - gloves = I - update_inv_gloves() - if(slot_shoes) - shoes = I - update_inv_shoes() - if(slot_wear_suit) - wear_suit = I - if(I.flags_inv & HIDEJUMPSUIT) - update_inv_w_uniform() - if(wear_suit.breakouttime) //when equipping a straightjacket - stop_pulling() //can't pull if restrained - update_action_buttons_icon() //certain action buttons will no longer be usable. - update_inv_wear_suit() - if(slot_w_uniform) - w_uniform = I - update_suit_sensors() - update_inv_w_uniform() - if(slot_l_store) - l_store = I - update_inv_pockets() - if(slot_r_store) - r_store = I - update_inv_pockets() - if(slot_s_store) - s_store = I - update_inv_s_store() - else - to_chat(src, "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!") - - //Item is handled and in slot, valid to call callback, for this proc should always be true - if(!not_handled) - I.equipped(src, slot) - - return not_handled //For future deeper overrides - -/mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE) +/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0) + return dna.species.can_equip(I, slot, disable_warning, src) + +// Return the item currently in the slot ID +/mob/living/carbon/human/get_item_by_slot(slot_id) + switch(slot_id) + if(slot_back) + return back + if(slot_wear_mask) + return wear_mask + if(slot_neck) + return wear_neck + if(slot_handcuffed) + return handcuffed + if(slot_legcuffed) + return legcuffed + if(slot_belt) + return belt + if(slot_wear_id) + return wear_id + if(slot_ears) + return ears + if(slot_glasses) + return glasses + if(slot_gloves) + return gloves + if(slot_head) + return head + if(slot_shoes) + return shoes + if(slot_wear_suit) + return wear_suit + if(slot_w_uniform) + return w_uniform + if(slot_l_store) + return l_store + if(slot_r_store) + return r_store + if(slot_s_store) + return s_store + return null + +/mob/living/carbon/human/proc/get_all_slots() + . = get_head_slots() | get_body_slots() + +/mob/living/carbon/human/proc/get_body_slots() + return list( + back, + s_store, + handcuffed, + legcuffed, + wear_suit, + gloves, + shoes, + belt, + wear_id, + l_store, + r_store, + w_uniform + ) + +/mob/living/carbon/human/proc/get_head_slots() + return list( + head, + wear_mask, + glasses, + ears, + ) + +/mob/living/carbon/human/proc/get_storage_slots() + return list( + back, + belt, + l_store, + r_store, + s_store, + ) + +//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() +/mob/living/carbon/human/equip_to_slot(obj/item/I, slot) + if(!..()) //a check failed or the item has already found its slot + return + + var/not_handled = FALSE //Added in case we make this type path deeper one day + switch(slot) + if(slot_belt) + belt = I + update_inv_belt() + if(slot_wear_id) + wear_id = I + sec_hud_set_ID() + update_inv_wear_id() + if(slot_ears) + ears = I + update_inv_ears() + if(slot_glasses) + glasses = I + var/obj/item/clothing/glasses/G = I + if(G.glass_colour_type) + update_glasses_color(G, 1) + if(G.tint) + update_tint() + if(G.vision_correction) + clear_fullscreen("nearsighted") + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) + update_sight() + update_inv_glasses() + if(slot_gloves) + gloves = I + update_inv_gloves() + if(slot_shoes) + shoes = I + update_inv_shoes() + if(slot_wear_suit) + wear_suit = I + if(I.flags_inv & HIDEJUMPSUIT) + update_inv_w_uniform() + if(wear_suit.breakouttime) //when equipping a straightjacket + stop_pulling() //can't pull if restrained + update_action_buttons_icon() //certain action buttons will no longer be usable. + update_inv_wear_suit() + if(slot_w_uniform) + w_uniform = I + update_suit_sensors() + update_inv_w_uniform() + if(slot_l_store) + l_store = I + update_inv_pockets() + if(slot_r_store) + r_store = I + update_inv_pockets() + if(slot_s_store) + s_store = I + update_inv_s_store() + else + to_chat(src, "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!") + + //Item is handled and in slot, valid to call callback, for this proc should always be true + if(!not_handled) + I.equipped(src, slot) + + 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 + . = ..() //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. - if(wear_suit.breakouttime) //when unequipping a straightjacket - update_action_buttons_icon() //certain action buttons may be usable again. - wear_suit = null - if(I.flags_inv & HIDEJUMPSUIT) - update_inv_w_uniform() - update_inv_wear_suit() - else if(I == w_uniform) - if(invdrop) - if(r_store) - dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop. - if(l_store) - dropItemToGround(l_store, TRUE) - if(wear_id) - dropItemToGround(wear_id) - if(belt) - dropItemToGround(belt) - w_uniform = null - update_suit_sensors() - update_inv_w_uniform(invdrop) - else if(I == gloves) - gloves = null - update_inv_gloves() - else if(I == glasses) - glasses = null - var/obj/item/clothing/glasses/G = I - if(G.glass_colour_type) - update_glasses_color(G, 0) - if(G.tint) - update_tint() - if(G.vision_correction) - if(disabilities & NEARSIGHT) - overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) - if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) - update_sight() - update_inv_glasses() - else if(I == ears) - ears = null - update_inv_ears() - else if(I == shoes) - shoes = null - update_inv_shoes() - else if(I == belt) - belt = null - update_inv_belt() - else if(I == wear_id) - wear_id = null - sec_hud_set_ID() - update_inv_wear_id() - else if(I == r_store) - r_store = null - update_inv_pockets() - else if(I == l_store) - l_store = null - update_inv_pockets() - else if(I == s_store) - s_store = null - update_inv_s_store() - -/mob/living/carbon/human/wear_mask_update(obj/item/clothing/C, toggle_off = 1) - if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) - update_hair() - if(toggle_off && internal && !getorganslot("breathing_tube")) - update_internals_hud_icon(0) - internal = null - if(C.flags_inv & HIDEEYES) - update_inv_glasses() - sec_hud_set_security_status() - ..() - -/mob/living/carbon/human/head_update(obj/item/I, forced) - if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced) - update_hair() - if(I.flags_inv & HIDEEYES || forced) - update_inv_glasses() - if(I.flags_inv & HIDEEARS || forced) - update_body() - sec_hud_set_security_status() - ..() - -/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE) - var/datum/outfit/O = null - - if(ispath(outfit)) - O = new outfit - else - O = outfit - if(!istype(O)) - return 0 - if(!O) - return 0 - - return O.equip(src, visualsOnly) + 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. + if(wear_suit.breakouttime) //when unequipping a straightjacket + update_action_buttons_icon() //certain action buttons may be usable again. + wear_suit = null + if(I.flags_inv & HIDEJUMPSUIT) + update_inv_w_uniform() + update_inv_wear_suit() + else if(I == w_uniform) + if(invdrop) + if(r_store) + dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop. + if(l_store) + dropItemToGround(l_store, TRUE) + if(wear_id) + dropItemToGround(wear_id) + if(belt) + dropItemToGround(belt) + w_uniform = null + update_suit_sensors() + update_inv_w_uniform(invdrop) + else if(I == gloves) + gloves = null + update_inv_gloves() + else if(I == glasses) + glasses = null + var/obj/item/clothing/glasses/G = I + if(G.glass_colour_type) + update_glasses_color(G, 0) + if(G.tint) + update_tint() + if(G.vision_correction) + if(disabilities & NEARSIGHT) + overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) + if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) + update_sight() + update_inv_glasses() + else if(I == ears) + ears = null + update_inv_ears() + else if(I == shoes) + shoes = null + update_inv_shoes() + else if(I == belt) + belt = null + update_inv_belt() + else if(I == wear_id) + wear_id = null + sec_hud_set_ID() + update_inv_wear_id() + else if(I == r_store) + r_store = null + update_inv_pockets() + else if(I == l_store) + l_store = null + update_inv_pockets() + else if(I == s_store) + s_store = null + update_inv_s_store() + +/mob/living/carbon/human/wear_mask_update(obj/item/clothing/C, toggle_off = 1) + if((C.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(C.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR))) + update_hair() + if(toggle_off && internal && !getorganslot("breathing_tube")) + update_internals_hud_icon(0) + internal = null + if(C.flags_inv & HIDEEYES) + update_inv_glasses() + sec_hud_set_security_status() + ..() + +/mob/living/carbon/human/head_update(obj/item/I, forced) + if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced) + update_hair() + if(I.flags_inv & HIDEEYES || forced) + update_inv_glasses() + if(I.flags_inv & HIDEEARS || forced) + update_body() + sec_hud_set_security_status() + ..() + +/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE) + var/datum/outfit/O = null + + if(ispath(outfit)) + O = new outfit + else + O = outfit + if(!istype(O)) + return 0 + if(!O) + return 0 + + return O.equip(src, visualsOnly) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1704595d79..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,9 @@ //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 @@ -136,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) @@ -159,6 +158,11 @@ ears = new mutantears ears.Insert(C) + if(tongue) + qdel(tongue) + tongue = new mutanttongue + tongue.Insert(C) + if((!(NOBREATH in species_traits)) && !lungs) if(mutantlungs) lungs = new mutantlungs() @@ -364,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.dm.rej b/code/modules/mob/living/carbon/human/species.dm.rej deleted file mode 100644 index 25968a6a31..0000000000 --- a/code/modules/mob/living/carbon/human/species.dm.rej +++ /dev/null @@ -1,33 +0,0 @@ -diff a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm (rejected hunks) -@@ -173,14 +173,18 @@ - 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)) -- if(C.dropItemToGround(I)) -- C.put_in_hands(new mutanthands()) -+ 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()) - -@@ -189,10 +193,6 @@ - C.dna.blood_type = random_blood_type() - if(DIGITIGRADE in species_traits) - C.Digitigrade_Leg_Swap(TRUE) -- if(mutanthands) -- for(var/obj/item/I in C.held_items) -- if(istype(I, mutanthands)) -- qdel(I) - - /datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour) - H.remove_overlay(HAIR_LAYER) 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 e56b2221ba..af24d7b6c4 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -2,7 +2,8 @@ // 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) + 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 @@ -20,19 +21,20 @@ dangerous_existence = TRUE limbs_id = "golem" fixed_mut_color = "aaa" - mutant_organs = list(/obj/item/organ/adamantine_resonator) 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(3)) + if(prob(human_surname_chance)) golem_surname = pick(GLOB.last_names) - else if(special_names && prob(5)) + else if(special_names && special_names.len && prob(special_name_chance)) golem_surname = pick(special_names) var/golem_name = "[prefix] [golem_surname]" @@ -60,21 +62,32 @@ info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems." prefix = "Adamantine" -//Explodes on death +//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) - info_text = "As a Plasma Golem, you explode on death!" - burnmod = 1.5 + 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() @@ -82,6 +95,32 @@ H.adjust_fire_stacks(1) ..() +/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" @@ -175,7 +214,7 @@ id = "alloy golem" fixed_mut_color = "333" meat = /obj/item/stack/sheet/mineral/abductor - mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue + 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" @@ -196,18 +235,15 @@ 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) + 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" - -/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 + 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) . = ..() @@ -506,7 +542,7 @@ 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 + 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 @@ -555,7 +591,7 @@ 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 + 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 @@ -645,8 +681,8 @@ if(P.is_hot()) visible_message("[src] bursts into flames!") - fire_act() + /datum/species/golem/plastic name = "Plastic" id = "plastic golem" @@ -660,4 +696,4 @@ /datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) . = ..() - C.ventcrawler = initial(C.ventcrawler) + 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 6b56fa9ca4..fd64850882 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -1,50 +1,50 @@ -/datum/species/zombie - // 1spooky - name = "High Functioning Zombie" - id = "zombie" - say_mod = "moans" - sexes = 0 - blacklisted = 1 - meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie - species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT) - mutant_organs = list(/obj/item/organ/tongue/zombie) - -/datum/species/zombie/infectious - name = "Infectious Zombie" - id = "memezombies" - limbs_id = "zombie" +/datum/species/zombie + // 1spooky + name = "High Functioning Zombie" + id = "zombie" + say_mod = "moans" + sexes = 0 + blacklisted = 1 + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie + species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT) + mutant_organs = list(/obj/item/organ/tongue/zombie) + +/datum/species/zombie/infectious + 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 + 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) - . = ..() - C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW - if(C.InCritical()) - C.death() - // Zombies only move around when not in crit, they instantly - // succumb otherwise, and will standup again soon - -/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species) - . = ..() - + +/datum/species/zombie/infectious/spec_life(mob/living/carbon/C) + . = ..() + C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW + if(C.InCritical()) + C.death() + // Zombies only move around when not in crit, they instantly + // succumb otherwise, and will standup again soon + +/datum/species/zombie/infectious/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + // 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) + var/obj/item/organ/zombie_infection/infection + infection = C.getorganslot("zombie_infection") + if(!infection) infection = new() infection.Insert(C) - - -// Your skin falls off -/datum/species/krokodil_addict - name = "Human" - id = "goofzombies" - limbs_id = "zombie" //They look like zombies - sexes = 0 - meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie - mutant_organs = list(/obj/item/organ/tongue/zombie) + + +// Your skin falls off +/datum/species/krokodil_addict + name = "Human" + id = "goofzombies" + limbs_id = "zombie" //They look like zombies + sexes = 0 + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie + mutant_organs = list(/obj/item/organ/tongue/zombie) 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 75f29408fe..99c99a44d9 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 @@ -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 devilInfo && 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..9ed7796f1a 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -1,363 +1,370 @@ - -/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null, armour_penetration, penetrated_text) - var/armor = getarmor(def_zone, attack_flag) - - //the if "armor" check is because this is used for everything on /living, including humans - if(armor && armour_penetration) - armor = max(0, armor - armour_penetration) - if(penetrated_text) - to_chat(src, "[penetrated_text]") - else - to_chat(src, "Your armor was penetrated!") - else if(armor >= 100) - if(absorb_text) - to_chat(src, "[absorb_text]") - else - to_chat(src, "Your armor absorbs the blow!") - else if(armor > 0) - if(soften_text) - to_chat(src, "[soften_text]") - else - to_chat(src, "Your armor softens the blow!") - return armor - - -/mob/living/proc/getarmor(def_zone, type) - return 0 - -//this returns the mob's protection against eye damage (number between -1 and 2) -/mob/living/proc/get_eye_protection() - return 0 - -//this returns the mob's protection against ear damage (0:no protection; 1: some ear protection; 2: has no ears) -/mob/living/proc/get_ear_protection() - return 0 - -/mob/living/proc/on_hit(obj/item/projectile/P) - return - -/mob/living/bullet_act(obj/item/projectile/P, def_zone) - var/armor = run_armor_check(def_zone, P.flag, "","",P.armour_penetration) - if(!P.nodamage) - apply_damage(P.damage, P.damage_type, def_zone, armor) - if(P.dismemberment) - check_projectile_dismemberment(P, def_zone) - return P.on_hit(src, armor) - -/mob/living/proc/check_projectile_dismemberment(obj/item/projectile/P, def_zone) - return 0 - -/obj/item/proc/get_volume_by_throwforce_and_or_w_class() - if(throwforce && w_class) - return Clamp((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100 - else if(w_class) - return Clamp(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 - else - return 0 - -/mob/living/hitby(atom/movable/AM, skipcatch, hitpush = 1, blocked = 0) - if(istype(AM, /obj/item)) - var/obj/item/I = AM - var/zone = ran_zone("chest", 65)//Hits a random part of the body, geared towards the chest - var/dtype = BRUTE - var/volume = I.get_volume_by_throwforce_and_or_w_class() - if(istype(I,/obj/item/weapon)) //If the item is a weapon... - var/obj/item/weapon/W = I - dtype = W.damtype - - if (W.throwforce > 0) //If the weapon's throwforce is greater than zero... - if (W.throwhitsound) //...and throwhitsound is defined... - playsound(loc, W.throwhitsound, volume, 1, -1) //...play the weapon's throwhitsound. - else if(W.hitsound) //Otherwise, if the weapon's hitsound is defined... - playsound(loc, W.hitsound, volume, 1, -1) //...play the weapon's hitsound. - else if(!W.throwhitsound) //Otherwise, if throwhitsound isn't defined... - playsound(loc, 'sound/weapons/genhit.ogg',volume, 1, -1) //...play genhit.ogg. - - else if(!I.throwhitsound && I.throwforce > 0) //Otherwise, if the item doesn't have a throwhitsound and has a throwforce greater than zero... - playsound(loc, 'sound/weapons/genhit.ogg', volume, 1, -1)//...play genhit.ogg - if(!I.throwforce)// Otherwise, if the item's throwforce is 0... - playsound(loc, 'sound/weapons/throwtap.ogg', 1, volume, -1)//...play throwtap.ogg. - if(!blocked) - visible_message("[src] has been hit by [I].", \ - "[src] has been hit by [I].") - var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) - apply_damage(I.throwforce, dtype, zone, armor) - if(I.thrownby) - add_logs(I.thrownby, src, "hit", I) - else - return 1 - else - playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) - ..() - - -/mob/living/mech_melee_attack(obj/mecha/M) - if(M.occupant.a_intent == INTENT_HARM) - M.do_attack_animation(src) - if(M.damtype == "brute") - step_away(src,M,15) - switch(M.damtype) - if(BRUTE) - Paralyse(1) - take_overall_damage(rand(M.force/2, M.force)) - playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - if(BURN) - take_overall_damage(0, rand(M.force/2, M.force)) - playsound(src, 'sound/items/Welder.ogg', 50, 1) - if(TOX) - M.mech_toxin_damage(src) - else - return - updatehealth() - visible_message("[M.name] has hit [src]!", \ - "[M.name] has hit [src]!", null, COMBAT_MESSAGE_RANGE) - add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - else - step_away(src,M) - add_logs(M.occupant, src, "pushed", M) - visible_message("[M] pushes [src] out of the way.", null, null, 5) - -/mob/living/fire_act() - adjust_fire_stacks(3) - IgniteMob() - -/mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = 0) - if(user == src || anchored || !isturf(user.loc)) - return 0 - if(!user.pulling || user.pulling != src) - user.start_pulling(src, supress_message) - return - - if(!(status_flags & CANPUSH)) - to_chat(user, "[src] can't be grabbed more aggressively!") - return 0 - grippedby(user) - -//proc to upgrade a simple pull into a more aggressive grab. -/mob/living/proc/grippedby(mob/living/carbon/user) - if(user.grab_state < GRAB_KILL) - user.changeNext_move(CLICK_CD_GRABBING) - playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - - if(user.grab_state) //only the first upgrade is instantaneous - var/old_grab_state = user.grab_state - var/grab_upgrade_time = 30 - visible_message("[user] starts to tighten [user.p_their()] grip on [src]!", \ - "[user] starts to tighten [user.p_their()] grip on you!") - if(!do_mob(user, src, grab_upgrade_time)) - return 0 - if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state || user.a_intent != INTENT_GRAB) - return 0 - user.grab_state++ - switch(user.grab_state) - if(GRAB_AGGRESSIVE) - add_logs(user, src, "grabbed", addition="aggressively") - visible_message("[user] has grabbed [src] aggressively!", \ - "[user] has grabbed [src] aggressively!") - drop_all_held_items() - stop_pulling() - if(GRAB_NECK) - visible_message("[user] has grabbed [src] by the neck!",\ - "[user] has grabbed you by the neck!") - update_canmove() //we fall down - if(!buckled && !density) - Move(user.loc) - if(GRAB_KILL) - visible_message("[user] is strangling [src]!", \ - "[user] is strangling you!") - update_canmove() //we fall down - if(!buckled && !density) - Move(user.loc) - return 1 - - -/mob/living/attack_slime(mob/living/simple_animal/slime/M) + +/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null, armour_penetration, penetrated_text) + var/armor = getarmor(def_zone, attack_flag) + + //the if "armor" check is because this is used for everything on /living, including humans + if(armor && armour_penetration) + armor = max(0, armor - armour_penetration) + if(penetrated_text) + to_chat(src, "[penetrated_text]") + else + to_chat(src, "Your armor was penetrated!") + else if(armor >= 100) + if(absorb_text) + to_chat(src, "[absorb_text]") + else + to_chat(src, "Your armor absorbs the blow!") + else if(armor > 0) + if(soften_text) + to_chat(src, "[soften_text]") + else + to_chat(src, "Your armor softens the blow!") + return armor + + +/mob/living/proc/getarmor(def_zone, type) + return 0 + +//this returns the mob's protection against eye damage (number between -1 and 2) +/mob/living/proc/get_eye_protection() + return 0 + +//this returns the mob's protection against ear damage (0:no protection; 1: some ear protection; 2: has no ears) +/mob/living/proc/get_ear_protection() + return 0 + +/mob/living/proc/on_hit(obj/item/projectile/P) + return + +/mob/living/bullet_act(obj/item/projectile/P, def_zone) + var/armor = run_armor_check(def_zone, P.flag, "","",P.armour_penetration) + if(!P.nodamage) + apply_damage(P.damage, P.damage_type, def_zone, armor) + if(P.dismemberment) + check_projectile_dismemberment(P, def_zone) + return P.on_hit(src, armor) + +/mob/living/proc/check_projectile_dismemberment(obj/item/projectile/P, def_zone) + return 0 + +/obj/item/proc/get_volume_by_throwforce_and_or_w_class() + if(throwforce && w_class) + return Clamp((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100 + else if(w_class) + return Clamp(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 + else + return 0 + +/mob/living/hitby(atom/movable/AM, skipcatch, hitpush = 1, blocked = 0) + if(istype(AM, /obj/item)) + var/obj/item/I = AM + var/zone = ran_zone("chest", 65)//Hits a random part of the body, geared towards the chest + var/dtype = BRUTE + var/volume = I.get_volume_by_throwforce_and_or_w_class() + if(istype(I,/obj/item/weapon)) //If the item is a weapon... + var/obj/item/weapon/W = I + dtype = W.damtype + + if (W.throwforce > 0) //If the weapon's throwforce is greater than zero... + if (W.throwhitsound) //...and throwhitsound is defined... + playsound(loc, W.throwhitsound, volume, 1, -1) //...play the weapon's throwhitsound. + else if(W.hitsound) //Otherwise, if the weapon's hitsound is defined... + playsound(loc, W.hitsound, volume, 1, -1) //...play the weapon's hitsound. + else if(!W.throwhitsound) //Otherwise, if throwhitsound isn't defined... + playsound(loc, 'sound/weapons/genhit.ogg',volume, 1, -1) //...play genhit.ogg. + + else if(!I.throwhitsound && I.throwforce > 0) //Otherwise, if the item doesn't have a throwhitsound and has a throwforce greater than zero... + playsound(loc, 'sound/weapons/genhit.ogg', volume, 1, -1)//...play genhit.ogg + if(!I.throwforce)// Otherwise, if the item's throwforce is 0... + playsound(loc, 'sound/weapons/throwtap.ogg', 1, volume, -1)//...play throwtap.ogg. + if(!blocked) + visible_message("[src] has been hit by [I].", \ + "[src] has been hit by [I].") + var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) + apply_damage(I.throwforce, dtype, zone, armor) + if(I.thrownby) + add_logs(I.thrownby, src, "hit", I) + else + return 1 + else + playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) + ..() + + +/mob/living/mech_melee_attack(obj/mecha/M) + if(M.occupant.a_intent == INTENT_HARM) + M.do_attack_animation(src) + if(M.damtype == "brute") + step_away(src,M,15) + switch(M.damtype) + if(BRUTE) + Paralyse(1) + take_overall_damage(rand(M.force/2, M.force)) + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) + if(BURN) + take_overall_damage(0, rand(M.force/2, M.force)) + playsound(src, 'sound/items/Welder.ogg', 50, 1) + if(TOX) + M.mech_toxin_damage(src) + else + return + updatehealth() + visible_message("[M.name] has hit [src]!", \ + "[M.name] has hit [src]!", null, COMBAT_MESSAGE_RANGE) + add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + else + step_away(src,M) + add_logs(M.occupant, src, "pushed", M) + visible_message("[M] pushes [src] out of the way.", null, null, 5) + +/mob/living/fire_act() + adjust_fire_stacks(3) + IgniteMob() + +/mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = 0) + if(user == src || anchored || !isturf(user.loc)) + return 0 + if(!user.pulling || user.pulling != src) + user.start_pulling(src, supress_message) + return + + if(!(status_flags & CANPUSH)) + to_chat(user, "[src] can't be grabbed more aggressively!") + return 0 + grippedby(user) + +//proc to upgrade a simple pull into a more aggressive grab. +/mob/living/proc/grippedby(mob/living/carbon/user) + if(user.grab_state < GRAB_KILL) + user.changeNext_move(CLICK_CD_GRABBING) + playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + + if(user.grab_state) //only the first upgrade is instantaneous + var/old_grab_state = user.grab_state + var/grab_upgrade_time = 30 + visible_message("[user] starts to tighten [user.p_their()] grip on [src]!", \ + "[user] starts to tighten [user.p_their()] grip on you!") + if(!do_mob(user, src, grab_upgrade_time)) + return 0 + if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state || user.a_intent != INTENT_GRAB) + return 0 + user.grab_state++ + switch(user.grab_state) + if(GRAB_AGGRESSIVE) + add_logs(user, src, "grabbed", addition="aggressively") + visible_message("[user] has grabbed [src] aggressively!", \ + "[user] has grabbed [src] aggressively!") + drop_all_held_items() + stop_pulling() + if(GRAB_NECK) + visible_message("[user] has grabbed [src] by the neck!",\ + "[user] has grabbed you by the neck!") + update_canmove() //we fall down + if(!buckled && !density) + Move(user.loc) + if(GRAB_KILL) + visible_message("[user] is strangling [src]!", \ + "[user] is strangling you!") + update_canmove() //we fall down + if(!buckled && !density) + Move(user.loc) + return 1 + + +/mob/living/attack_slime(mob/living/simple_animal/slime/M) if(!SSticker.HasRoundStarted()) - to_chat(M, "You cannot attack people before the game has started.") - return - - if(M.buckled) - if(M in buckled_mobs) - M.Feedstop() - return // can't attack while eating! - - if (stat != DEAD) - add_logs(M, src, "attacked") - M.do_attack_animation(src) - visible_message("The [M.name] glomps [src]!", \ - "The [M.name] glomps [src]!", null, COMBAT_MESSAGE_RANGE) - return 1 - -/mob/living/attack_animal(mob/living/simple_animal/M) - M.face_atom(src) - if(M.melee_damage_upper == 0) - M.visible_message("\The [M] [M.friendly] [src]!") - return 0 - else - if(M.attack_sound) - playsound(loc, M.attack_sound, 50, 1, 1) - M.do_attack_animation(src) - visible_message("\The [M] [M.attacktext] [src]!", \ - "\The [M] [M.attacktext] [src]!", null, COMBAT_MESSAGE_RANGE) - add_logs(M, src, "attacked") - return 1 - - -/mob/living/attack_paw(mob/living/carbon/monkey/M) - if(isturf(loc) && istype(loc.loc, /area/start)) - to_chat(M, "No attacking people at spawn, you jackass.") - return 0 - - if (M.a_intent == INTENT_HARM) - if(M.is_muzzled() || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSMOUTH)) - to_chat(M, "You can't bite with your mouth covered!") - return 0 - M.do_attack_animation(src, ATTACK_EFFECT_BITE) - if (prob(75)) - add_logs(M, src, "attacked") - playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) - visible_message("[M.name] bites [src]!", \ - "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) - return 1 - else - visible_message("[M.name] has attempted to bite [src]!", \ - "[M.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) - return 0 - -/mob/living/attack_larva(mob/living/carbon/alien/larva/L) - switch(L.a_intent) - if("help") - visible_message("[L.name] rubs its head against [src].") - return 0 - - else - L.do_attack_animation(src) - if(prob(90)) - add_logs(L, src, "attacked") - visible_message("[L.name] bites [src]!", \ - "[L.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) - playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) - return 1 - else - visible_message("[L.name] has attempted to bite [src]!", \ - "[L.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) - return 0 - -/mob/living/attack_alien(mob/living/carbon/alien/humanoid/M) - switch(M.a_intent) - if ("help") - visible_message("[M] caresses [src] with its scythe like arm.") - return 0 - - if ("grab") - grabbedby(M) - return 0 - if("harm") - M.do_attack_animation(src) - return 1 - if("disarm") - M.do_attack_animation(src, ATTACK_EFFECT_DISARM) - return 1 - -/mob/living/ex_act(severity, target, origin) - if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) - return - ..() - -//Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs. - -/mob/living/acid_act(acidpwr, acid_volume) - take_bodypart_damage(acidpwr * min(1, acid_volume * 0.1)) - return 1 - -/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE) + to_chat(M, "You cannot attack people before the game has started.") + return + + if(M.buckled) + if(M in buckled_mobs) + M.Feedstop() + return // can't attack while eating! + + if (stat != DEAD) + add_logs(M, src, "attacked") + M.do_attack_animation(src) + visible_message("The [M.name] glomps [src]!", \ + "The [M.name] glomps [src]!", null, COMBAT_MESSAGE_RANGE) + return 1 + +/mob/living/attack_animal(mob/living/simple_animal/M) + M.face_atom(src) + if(M.melee_damage_upper == 0) + M.visible_message("\The [M] [M.friendly] [src]!") + return 0 + else + if(M.attack_sound) + playsound(loc, M.attack_sound, 50, 1, 1) + M.do_attack_animation(src) + visible_message("\The [M] [M.attacktext] [src]!", \ + "\The [M] [M.attacktext] [src]!", null, COMBAT_MESSAGE_RANGE) + add_logs(M, src, "attacked") + return 1 + + +/mob/living/attack_paw(mob/living/carbon/monkey/M) + if(isturf(loc) && istype(loc.loc, /area/start)) + to_chat(M, "No attacking people at spawn, you jackass.") + return 0 + + if (M.a_intent == INTENT_HARM) + if(M.is_muzzled() || (M.wear_mask && M.wear_mask.flags_cover & MASKCOVERSMOUTH)) + to_chat(M, "You can't bite with your mouth covered!") + return 0 + M.do_attack_animation(src, ATTACK_EFFECT_BITE) + if (prob(75)) + add_logs(M, src, "attacked") + playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) + visible_message("[M.name] bites [src]!", \ + "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) + return 1 + else + visible_message("[M.name] has attempted to bite [src]!", \ + "[M.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) + return 0 + +/mob/living/attack_larva(mob/living/carbon/alien/larva/L) + switch(L.a_intent) + if("help") + visible_message("[L.name] rubs its head against [src].") + return 0 + + else + L.do_attack_animation(src) + if(prob(90)) + add_logs(L, src, "attacked") + visible_message("[L.name] bites [src]!", \ + "[L.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) + playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) + return 1 + else + visible_message("[L.name] has attempted to bite [src]!", \ + "[L.name] has attempted to bite [src]!", null, COMBAT_MESSAGE_RANGE) + return 0 + +/mob/living/attack_alien(mob/living/carbon/alien/humanoid/M) + switch(M.a_intent) + if ("help") + visible_message("[M] caresses [src] with its scythe like arm.") + return 0 + + if ("grab") + grabbedby(M) + return 0 + if("harm") + M.do_attack_animation(src) + return 1 + if("disarm") + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) + return 1 + +/mob/living/ex_act(severity, target, origin) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) + return + ..() + +//Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs. + +/mob/living/acid_act(acidpwr, acid_volume) + take_bodypart_damage(acidpwr * min(1, acid_volume * 0.1)) + return 1 + +/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE) if(tesla_shock && HAS_SECONDARY_FLAG(src, TESLA_IGNORE)) - return FALSE - if(shock_damage > 0) - if(!illusion) - adjustFireLoss(shock_damage) - visible_message( - "[src] was shocked by \the [source]!", \ - "You feel a powerful shock coursing through your body!", \ - "You hear a heavy electrical crack." \ - ) - return shock_damage - -/mob/living/emp_act(severity) - var/list/L = src.get_contents() - for(var/obj/O in L) - O.emp_act(severity) - ..() - -/mob/living/singularity_act() - var/gain = 20 - investigate_log("([key_name(src)]) has been consumed by the singularity.","singulo") //Oh that's where the clown ended up! - gib() - return(gain) - -/mob/living/narsie_act() - if(status_flags & GODMODE) - return - - if(is_servant_of_ratvar(src) && !stat) - to_chat(src, "You resist Nar-Sie's influence... but not all of it. Run!") - adjustBruteLoss(35) - if(src && reagents) - reagents.add_reagent("heparin", 5) - return FALSE - if(client) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, src, null, 0) - else - switch(rand(1, 10)) - 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 - - -/mob/living/ratvar_act() - if(status_flags & GODMODE) - return - - if(stat != DEAD && !is_servant_of_ratvar(src)) - for(var/obj/item/weapon/implant/mindshield/M in implants) - qdel(M) - if(!add_servant_of_ratvar(src)) - to_chat(src, "A blinding light boils you alive! Run!") - adjustFireLoss(35) - if(src) - adjust_fire_stacks(1) - IgniteMob() - return FALSE - return TRUE - - -//called when the mob receives a bright flash -/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash) - if(get_eye_protection() < intensity && (override_blindness_check || !(disabilities & BLIND))) - overlay_fullscreen("flash", type) - addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25) - return 1 - -//called when the mob receives a loud bang -/mob/living/proc/soundbang_act() - return 0 - -//to damage the clothes worn by a mob -/mob/living/proc/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) - return - - -/mob/living/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) - if(A != src) - end_pixel_y = get_standard_pixel_y_offset(lying) - used_item = get_active_held_item() - ..() - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. + return FALSE + if(shock_damage > 0) + if(!illusion) + adjustFireLoss(shock_damage) + visible_message( + "[src] was shocked by \the [source]!", \ + "You feel a powerful shock coursing through your body!", \ + "You hear a heavy electrical crack." \ + ) + return shock_damage + +/mob/living/emp_act(severity) + var/list/L = src.get_contents() + for(var/obj/O in L) + O.emp_act(severity) + ..() + +/mob/living/singularity_act() + var/gain = 20 + investigate_log("([key_name(src)]) has been consumed by the singularity.","singulo") //Oh that's where the clown ended up! + gib() + return(gain) + +/mob/living/narsie_act() + if(status_flags & GODMODE) + return + + if(is_servant_of_ratvar(src) && !stat) + to_chat(src, "You resist Nar-Sie's influence... but not all of it. Run!") + adjustBruteLoss(35) + if(src && reagents) + reagents.add_reagent("heparin", 5) + return FALSE + if(GLOB.cult_narsie && GLOB.cult_narsie.souls_needed[src]) + GLOB.cult_narsie.resize(1.1) + GLOB.cult_narsie.souls_needed -= src + GLOB.cult_narsie.souls += 1 + if((GLOB.cult_narsie.souls == GLOB.cult_narsie.soul_goal) && (GLOB.cult_narsie.resolved == FALSE)) + GLOB.cult_narsie.resolved = TRUE + world << sound('sound/machines/Alarm.ogg') + addtimer(CALLBACK(GLOBAL_PROC, .proc/cult_ending_helper, 1), 120) + addtimer(CALLBACK(GLOBAL_PROC, .proc/ending_helper), 270) + if(client) + makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, src, cultoverride = TRUE) + else + 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)) + spawn_dust() + gib() + return TRUE + + +/mob/living/ratvar_act() + if(status_flags & GODMODE) + return + + if(stat != DEAD && !is_servant_of_ratvar(src)) + for(var/obj/item/weapon/implant/mindshield/M in implants) + qdel(M) + if(!add_servant_of_ratvar(src)) + to_chat(src, "A blinding light boils you alive! Run!") + adjustFireLoss(35) + if(src) + adjust_fire_stacks(1) + IgniteMob() + return FALSE + return TRUE + + +//called when the mob receives a bright flash +/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash) + if(get_eye_protection() < intensity && (override_blindness_check || !(disabilities & BLIND))) + overlay_fullscreen("flash", type) + addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25) + return 1 + +//called when the mob receives a loud bang +/mob/living/proc/soundbang_act() + return 0 + +//to damage the clothes worn by a mob +/mob/living/proc/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) + return + + +/mob/living/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect, end_pixel_y) + if(A != src) + end_pixel_y = get_standard_pixel_y_offset(lying) + used_item = get_active_held_item() + ..() + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. \ No newline at end of file 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/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_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index f3cf0f1c5f..4fbe56361e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -407,7 +407,8 @@ /obj/item/weapon/reagent_containers/borghypo/peace, /obj/item/weapon/holosign_creator/cyborg, /obj/item/borg/cyborghug/peacekeeper, - /obj/item/weapon/extinguisher) + /obj/item/weapon/extinguisher, + /obj/item/borg/projectile_dampen) emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/peace/hacked) ratvar_modules = list( /obj/item/clockwork/slab/cyborg/peacekeeper, 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 dd98496dac..25a2f83266 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -1,922 +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 +//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) + ..() + +/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) + 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/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index c30f52aa5c..cba9e446ec 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -1,421 +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) - +/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) + + 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..f988fc2477 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -1,279 +1,420 @@ -/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, can phase through walls, and your attacks will lower the cooldown on phasing." + var/attack_refund = 10 //1 second per attack + var/crit_refund = 50 //5 seconds when putting a target into critical + var/kill_refund = 250 //full refund on kills + +/mob/living/simple_animal/hostile/construct/wraith/AttackingTarget() //refund jaunt cooldown when attacking living targets + var/prev_stat + if(isliving(target) && !iscultist(target)) + var/mob/living/L = target + prev_stat = L.stat + + . = ..() + + if(. && isnum(prev_stat)) + var/mob/living/L = target + var/refund = 0 + if(QDELETED(L) || (L.stat == DEAD && prev_stat != DEAD)) //they're dead, you killed them + refund += kill_refund + else if(L.InCritical() && prev_stat == CONSCIOUS) //you knocked them into critical + refund += crit_refund + if(L.stat != DEAD && prev_stat != DEAD) + refund += attack_refund + for(var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/S in mob_spell_list) + S.charge_counter = min(S.charge_counter + refund, S.charge_max) + +/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 = "chosen" + icon_living = "chosen" + 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. Your form and any you are pulling can pass through runed walls effortlessly." + 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 ..() + C.Weaken(30) + visible_message("[src] paralyzes [C]!") + 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 + . = ..() + +/mob/living/simple_animal/hostile/construct/harvester/Initialize() + . = ..() + var/datum/action/innate/seek_prey/seek = new() + seek.Grant(src) + seek.Activate() + +///////////////////////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(!SSticker.mode.eldergod) + the_construct.master = GLOB.blood_target + 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.") + + +/datum/action/innate/seek_prey + name = "Seek the Harvest" + desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" + background_icon_state = "bg_demon" + buttontooltipstyle = "cult" + button_icon_state = "cult_mark" + var/tracking = FALSE + var/mob/living/simple_animal/hostile/construct/harvester/the_construct + +/datum/action/innate/seek_prey/Grant(var/mob/living/C) + the_construct = C + ..() + +/datum/action/innate/seek_prey/Activate() + if(GLOB.cult_narsie == null) + return + if(tracking) + desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" + button_icon_state = "cult_mark" + tracking = FALSE + the_construct.seeking = FALSE + the_construct.master = GLOB.cult_narsie + to_chat(the_construct, "You are now tracking Nar'Sie, return to reap the harvest!") + return + else + if(LAZYLEN(GLOB.cult_narsie.souls_needed)) + the_construct.master = pick(GLOB.cult_narsie.souls_needed) + to_chat(the_construct, "You are now tracking your prey, [the_construct.master] - harvest them!") + else + to_chat(the_construct, "Nar'Sie has completed her harvest!") + return + desc = "Activate to track Nar'Sie!" + button_icon_state = "sintouch" + tracking = TRUE + the_construct.seeking = TRUE /////////////////////////////ui stuff///////////////////////////// @@ -291,4 +432,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 c08f291cee..6de5fe8836 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -1,274 +1,274 @@ -//Cat -/mob/living/simple_animal/pet/cat - name = "cat" - desc = "Kitty!!" - icon = 'icons/mob/pets.dmi' - icon_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - gender = MALE - speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") - speak_emote = list("purrs", "meows") - emote_hear = list("meows", "mews") - emote_see = list("shakes its head", "shivers") - speak_chance = 1 - turns_per_move = 5 - see_in_dark = 6 - ventcrawler = VENTCRAWLER_ALWAYS - pass_flags = PASSTABLE - mob_size = MOB_SIZE_SMALL - minbodytemp = 200 - maxbodytemp = 400 - unsuitable_atmos_damage = 1 - animal_species = /mob/living/simple_animal/pet/cat - childtype = list(/mob/living/simple_animal/pet/cat/kitten) - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2) - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" - var/turns_since_scan = 0 - var/mob/living/simple_animal/mouse/movement_target - gold_core_spawnable = 2 - devourable = TRUE - -/mob/living/simple_animal/pet/cat/Initialize() - ..() - verbs += /mob/living/proc/lay_down - -/mob/living/simple_animal/pet/cat/update_canmove() - ..() - if(client) - if (resting) - icon_state = "[icon_living]_rest" - else - icon_state = "[icon_living]" - - -/mob/living/simple_animal/pet/cat/space - name = "space cat" - desc = "It's a cat... in space!" - icon_state = "spacecat" - icon_living = "spacecat" - icon_dead = "spacecat_dead" - unsuitable_atmos_damage = 0 - minbodytemp = TCMB - maxbodytemp = T0C + 40 - -/mob/living/simple_animal/pet/cat/original - name = "Batsy" - desc = "The product of alien DNA and bored geneticists." - gender = FEMALE - icon_state = "original" - icon_living = "original" - icon_dead = "original_dead" - -/mob/living/simple_animal/pet/cat/kitten - name = "kitten" - desc = "D'aaawwww." - icon_state = "kitten" - icon_living = "kitten" - icon_dead = "kitten_dead" - density = 0 - pass_flags = PASSMOB - mob_size = MOB_SIZE_SMALL - -//RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/pet/cat/Runtime - name = "Runtime" - desc = "GCAT" - icon_state = "cat" - icon_living = "cat" - icon_dead = "cat_dead" - gender = FEMALE - gold_core_spawnable = 0 - var/list/family = list()//var restored from savefile, has count of each child type - var/list/children = list()//Actual mob instances of children - var/cats_deployed = 0 - var/memory_saved = 0 - -/mob/living/simple_animal/pet/cat/Runtime/Initialize() - if(prob(5)) - icon_state = "original" - icon_living = "original" - icon_dead = "original_dead" - Read_Memory() - ..() - -/mob/living/simple_animal/pet/cat/Runtime/Life() - if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP) - Deploy_The_Cats() - if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) - Write_Memory() - ..() - -/mob/living/simple_animal/pet/cat/Runtime/make_babies() - var/mob/baby = ..() - if(baby) - children += baby - return baby - -/mob/living/simple_animal/pet/cat/Runtime/death() - if(!memory_saved) - Write_Memory(1) - ..() - -/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory() - var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") - S["family"] >> family - - if(isnull(family)) - family = list() - -/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) - var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") - family = list() - if(!dead) - for(var/mob/living/simple_animal/pet/cat/kitten/C in children) - if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats - continue - if(C.type in family) - family[C.type] += 1 - else - family[C.type] = 1 - S["family"] << family - memory_saved = 1 - -/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats() - cats_deployed = 1 - for(var/cat_type in family) - if(family[cat_type] > 0) - for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) - new cat_type(loc) - -/mob/living/simple_animal/pet/cat/Proc - name = "Proc" - gender = MALE - gold_core_spawnable = 0 - -/mob/living/simple_animal/pet/cat/Life() - if(!stat && !buckled && !client) - if(prob(1)) - emote("me", 1, pick("stretches out for a belly rub.", "wags its tail.", "lies down.")) - icon_state = "[icon_living]_rest" - resting = 1 - update_canmove() - else if (prob(1)) - emote("me", 1, pick("sits down.", "crouches on its hind legs.", "looks alert.")) - icon_state = "[icon_living]_sit" - resting = 1 - update_canmove() - else if (prob(1)) - if (resting) - emote("me", 1, pick("gets up and meows.", "walks around.", "stops resting.")) - icon_state = "[icon_living]" - resting = 0 - update_canmove() - else - emote("me", 1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) - - //MICE! - if((src.loc) && isturf(src.loc)) - if(!stat && !resting && !buckled) - for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat && Adjacent(M)) - emote("me", 1, "splats \the [M]!") - M.splat() - movement_target = null - stop_automated_movement = 0 - break - for(var/obj/item/toy/cattoy/T in view(1,src)) - if (T.cooldown < (world.time - 400)) - emote("me", 1, "bats \the [T] around with its paw!") - T.cooldown = world.time - - ..() - - make_babies() - - if(!stat && !resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 5) - walk_to(src,0) - turns_since_scan = 0 - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - stop_automated_movement = 0 - if( !movement_target || !(movement_target.loc in oview(src, 3)) ) - movement_target = null - stop_automated_movement = 0 - for(var/mob/living/simple_animal/mouse/snack in oview(src,3)) - if(isturf(snack.loc) && !snack.stat) - movement_target = snack - break - if(movement_target) - stop_automated_movement = 1 - walk_to(src,movement_target,0,3) - -/mob/living/simple_animal/pet/cat/attack_hand(mob/living/carbon/human/M) - . = ..() - switch(M.a_intent) - if("help") - wuv(1, M) - if("harm") - wuv(-1, M) - -/mob/living/simple_animal/pet/cat/proc/wuv(change, mob/M) - if(change) - if(change > 0) - if(M && stat != DEAD) +//Cat +/mob/living/simple_animal/pet/cat + name = "cat" + desc = "Kitty!!" + icon = 'icons/mob/pets.dmi' + icon_state = "cat2" + icon_living = "cat2" + icon_dead = "cat2_dead" + gender = MALE + speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") + speak_emote = list("purrs", "meows") + emote_hear = list("meows", "mews") + emote_see = list("shakes its head", "shivers") + speak_chance = 1 + turns_per_move = 5 + see_in_dark = 6 + ventcrawler = VENTCRAWLER_ALWAYS + pass_flags = PASSTABLE + mob_size = MOB_SIZE_SMALL + minbodytemp = 200 + maxbodytemp = 400 + unsuitable_atmos_damage = 1 + animal_species = /mob/living/simple_animal/pet/cat + childtype = list(/mob/living/simple_animal/pet/cat/kitten) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2) + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" + var/turns_since_scan = 0 + var/mob/living/simple_animal/mouse/movement_target + gold_core_spawnable = 2 + devourable = TRUE + +/mob/living/simple_animal/pet/cat/Initialize() + ..() + verbs += /mob/living/proc/lay_down + +/mob/living/simple_animal/pet/cat/update_canmove() + ..() + if(client) + if (resting) + icon_state = "[icon_living]_rest" + else + icon_state = "[icon_living]" + + +/mob/living/simple_animal/pet/cat/space + name = "space cat" + desc = "It's a cat... in space!" + icon_state = "spacecat" + icon_living = "spacecat" + icon_dead = "spacecat_dead" + unsuitable_atmos_damage = 0 + minbodytemp = TCMB + maxbodytemp = T0C + 40 + +/mob/living/simple_animal/pet/cat/original + name = "Batsy" + desc = "The product of alien DNA and bored geneticists." + gender = FEMALE + icon_state = "original" + icon_living = "original" + icon_dead = "original_dead" + +/mob/living/simple_animal/pet/cat/kitten + name = "kitten" + desc = "D'aaawwww." + icon_state = "kitten" + icon_living = "kitten" + icon_dead = "kitten_dead" + density = 0 + pass_flags = PASSMOB + mob_size = MOB_SIZE_SMALL + +//RUNTIME IS ALIVE! SQUEEEEEEEE~ +/mob/living/simple_animal/pet/cat/Runtime + name = "Runtime" + desc = "GCAT" + icon_state = "cat" + icon_living = "cat" + icon_dead = "cat_dead" + gender = FEMALE + gold_core_spawnable = 0 + var/list/family = list()//var restored from savefile, has count of each child type + var/list/children = list()//Actual mob instances of children + var/cats_deployed = 0 + var/memory_saved = 0 + +/mob/living/simple_animal/pet/cat/Runtime/Initialize() + if(prob(5)) + icon_state = "original" + icon_living = "original" + icon_dead = "original_dead" + Read_Memory() + ..() + +/mob/living/simple_animal/pet/cat/Runtime/Life() + if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP) + Deploy_The_Cats() + if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) + Write_Memory() + ..() + +/mob/living/simple_animal/pet/cat/Runtime/make_babies() + var/mob/baby = ..() + if(baby) + children += baby + return baby + +/mob/living/simple_animal/pet/cat/Runtime/death() + if(!memory_saved) + Write_Memory(1) + ..() + +/mob/living/simple_animal/pet/cat/Runtime/proc/Read_Memory() + var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") + S["family"] >> family + + if(isnull(family)) + family = list() + +/mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) + var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") + family = list() + if(!dead) + for(var/mob/living/simple_animal/pet/cat/kitten/C in children) + if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats + continue + if(C.type in family) + family[C.type] += 1 + else + family[C.type] = 1 + S["family"] << family + memory_saved = 1 + +/mob/living/simple_animal/pet/cat/Runtime/proc/Deploy_The_Cats() + cats_deployed = 1 + for(var/cat_type in family) + if(family[cat_type] > 0) + for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) + new cat_type(loc) + +/mob/living/simple_animal/pet/cat/Proc + name = "Proc" + gender = MALE + gold_core_spawnable = 0 + +/mob/living/simple_animal/pet/cat/Life() + if(!stat && !buckled && !client) + if(prob(1)) + emote("me", 1, pick("stretches out for a belly rub.", "wags its tail.", "lies down.")) + icon_state = "[icon_living]_rest" + resting = 1 + update_canmove() + else if (prob(1)) + emote("me", 1, pick("sits down.", "crouches on its hind legs.", "looks alert.")) + icon_state = "[icon_living]_sit" + resting = 1 + update_canmove() + else if (prob(1)) + if (resting) + emote("me", 1, pick("gets up and meows.", "walks around.", "stops resting.")) + icon_state = "[icon_living]" + resting = 0 + update_canmove() + else + emote("me", 1, pick("grooms its fur.", "twitches its whiskers.", "shakes out its coat.")) + + //MICE! + if((src.loc) && isturf(src.loc)) + if(!stat && !resting && !buckled) + for(var/mob/living/simple_animal/mouse/M in view(1,src)) + if(!M.stat && Adjacent(M)) + emote("me", 1, "splats \the [M]!") + M.splat() + movement_target = null + stop_automated_movement = 0 + break + for(var/obj/item/toy/cattoy/T in view(1,src)) + if (T.cooldown < (world.time - 400)) + emote("me", 1, "bats \the [T] around with its paw!") + T.cooldown = world.time + + ..() + + make_babies() + + if(!stat && !resting && !buckled) + turns_since_scan++ + if(turns_since_scan > 5) + walk_to(src,0) + turns_since_scan = 0 + if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) + movement_target = null + stop_automated_movement = 0 + if( !movement_target || !(movement_target.loc in oview(src, 3)) ) + movement_target = null + stop_automated_movement = 0 + for(var/mob/living/simple_animal/mouse/snack in oview(src,3)) + if(isturf(snack.loc) && !snack.stat) + movement_target = snack + break + if(movement_target) + stop_automated_movement = 1 + walk_to(src,movement_target,0,3) + +/mob/living/simple_animal/pet/cat/attack_hand(mob/living/carbon/human/M) + . = ..() + switch(M.a_intent) + if("help") + wuv(1, M) + if("harm") + wuv(-1, M) + +/mob/living/simple_animal/pet/cat/proc/wuv(change, mob/M) + if(change) + if(change > 0) + if(M && stat != DEAD) new /obj/effect/overlay/temp/heart(loc) - emote("me", 1, "purrs!") - else - if(M && stat != DEAD) - emote("me", 1, "hisses!") - -/mob/living/simple_animal/pet/cat/cak //I told you I'd do it, Remie - name = "Keeki" - desc = "It's a cat made out of cake." - icon_state = "cak" - icon_living = "cak" - icon_dead = "cak_dead" - health = 50 - maxHealth = 50 - gender = FEMALE - harm_intent_damage = 10 - butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday = 3, \ - /obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2) - response_harm = "takes a bite out of" - attacked_sound = 'sound/items/eatfood.ogg' - deathmessage = "loses its false life and collapses!" - death_sound = "bodyfall" - -/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts) - ..() - var/obj/item/organ/brain/B = locate(/obj/item/organ/brain) in contents - if(!B || !B.brainmob || !B.brainmob.mind) - return - B.brainmob.mind.transfer_to(src) - to_chat(src, "You are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ - so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ - free cake to the station!") - var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change") - if(new_name) - to_chat(src, "Your name is now \"new_name\"!") - name = new_name - -/mob/living/simple_animal/pet/cat/cak/Life() - ..() - if(stat) - return - if(health < maxHealth) - adjustBruteLoss(-8) //Fast life regen - for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts! - if(D.icon_state != "donut2") - D.name = "frosted donut" - D.icon_state = "donut2" - D.reagents.add_reagent("sprinkles", 2) - D.bonus_reagents = list("sprinkles" = 2, "sugar" = 1) - D.filling_color = "#FF69B4" - -/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L) - ..() - if(L.a_intent == INTENT_HARM && L.reagents && !stat) - L.reagents.add_reagent("nutriment", 0.4) - L.reagents.add_reagent("vitamin", 0.4) + emote("me", 1, "purrs!") + else + if(M && stat != DEAD) + emote("me", 1, "hisses!") + +/mob/living/simple_animal/pet/cat/cak //I told you I'd do it, Remie + name = "Keeki" + desc = "It's a cat made out of cake." + icon_state = "cak" + icon_living = "cak" + icon_dead = "cak_dead" + health = 50 + maxHealth = 50 + gender = FEMALE + harm_intent_damage = 10 + butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday = 3, \ + /obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2) + response_harm = "takes a bite out of" + attacked_sound = 'sound/items/eatfood.ogg' + deathmessage = "loses its false life and collapses!" + death_sound = "bodyfall" + +/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts) + ..() + var/obj/item/organ/brain/B = locate(/obj/item/organ/brain) in contents + if(!B || !B.brainmob || !B.brainmob.mind) + return + B.brainmob.mind.transfer_to(src) + to_chat(src, "You are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ + so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ + free cake to the station!") + var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change") + if(new_name) + to_chat(src, "Your name is now \"new_name\"!") + name = new_name + +/mob/living/simple_animal/pet/cat/cak/Life() + ..() + if(stat) + return + if(health < maxHealth) + adjustBruteLoss(-8) //Fast life regen + for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts! + if(D.icon_state != "donut2") + D.name = "frosted donut" + D.icon_state = "donut2" + D.reagents.add_reagent("sprinkles", 2) + D.bonus_reagents = list("sprinkles" = 2, "sugar" = 1) + D.filling_color = "#FF69B4" + +/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/L) + ..() + if(L.a_intent == INTENT_HARM && L.reagents && !stat) + L.reagents.add_reagent("nutriment", 0.4) + L.reagents.add_reagent("vitamin", 0.4) 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..d675458485 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) @@ -56,7 +55,7 @@ var/laws = \ "1. You may not involve yourself in the matters of another being, even if such matters conflict with Law Two or Law Three, unless the other being is another Drone.\n"+\ "2. You may not harm any being, regardless of intent or circumstance.\n"+\ - "3. Your goals are to build, maintain, repair, improve, and power the station to the best of your abilities, You must never actively work against these goals." + "3. Your goals are to build, maintain, repair, improve, and provide power to the best of your abilities, You must never actively work against these goals." var/light_on = 0 var/heavy_emp_damage = 25 //Amount of damage sustained if hit by a heavy EMP pulse var/alarms = list("Atmosphere" = list(), "Fire" = list(), "Power" = list()) 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 427d9ddaa4..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,331 +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() - eat_plants() - 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 || locate(/obj/structure/glowshroom) 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) - eat_plants() +//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/proc/eat_plants() - var/eaten = FALSE - var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc - if(SV) - SV.eat(src) - eaten = TRUE +/mob/living/simple_animal/hostile/retaliate/goat/Initialize() + udder = new() + . = ..() - var/obj/structure/glowshroom/GS = locate(/obj/structure/glowshroom) in loc - if(GS) - qdel(GS) - eaten = TRUE +/mob/living/simple_animal/hostile/retaliate/goat/Destroy() + qdel(udder) + udder = null + return ..() - if(eaten && prob(10)) - say("Nom") - -/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() - create_reagents(50) - 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...") +/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..cd427ba33c 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) @@ -467,6 +467,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/used_message = "All the cards seem to be blank now." var/failure_message = "..And draw a card! It's...blank? Maybe you should try again later." var/ling_failure = "The deck refuses to respond to a souless creature such as you." + var/activation_message = "The rest of the deck rapidly flashes to ash!" var/list/possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support") var/random = TRUE var/allowmultiple = FALSE @@ -489,12 +490,14 @@ 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) theghost = pick(candidates) spawn_guardian(user, theghost.key) + to_chat(user, "[activation_message]") + qdel(src) else to_chat(user, "[failure_message]") used = FALSE @@ -587,6 +590,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians used_message = "The injector has already been used." failure_message = "...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER." ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you." + activation_message = "The injector self destructs after you inject yourself with it." /obj/item/weapon/guardiancreator/tech/choose/traitor possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support") @@ -599,7 +603,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /obj/item/weapon/paper/guardian name = "Holoparasite Guide" - icon_state = "paper_words" + icon_state = "alienpaper_words" info = {"A list of Holoparasite Types

@@ -670,6 +674,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians used_message = "Someone's already taken a bite out of these fishsticks! Ew." failure_message = "You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up." ling_failure = "Carp'sie is fine with changelings, so you shouldn't be seeing this message." + activation_message = "You finish eating the fishsticks! Delicious!>" allowmultiple = TRUE allowling = TRUE random = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 5454f3c553..43290b860d 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -1,57 +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) +/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/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/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 03f8ce63cf..79ac234ab9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -478,6 +478,8 @@ Difficulty: Hard var/speed = 3 //how many deciseconds between each step var/currently_seeking = FALSE var/friendly_fire_check = FALSE //if blasts produced apply friendly fire + var/monster_damage_boost = TRUE + var/damage = 10 /obj/effect/overlay/temp/hierophant/chaser/Initialize(mapload, new_caster, new_target, new_speed, is_friendly_fire) . = ..() @@ -521,9 +523,10 @@ Difficulty: Hard moving-- sleep(speed) targetturf = get_turf(target) - /obj/effect/overlay/temp/hierophant/chaser/proc/make_blast() - new /obj/effect/overlay/temp/hierophant/blast(loc, caster, friendly_fire_check) + var/obj/effect/overlay/temp/hierophant/blast/B = new(loc, caster, friendly_fire_check) + B.damage = damage + B.monster_damage_boost = monster_damage_boost /obj/effect/overlay/temp/hierophant/telegraph icon = 'icons/effects/96x96.dmi' @@ -553,6 +556,7 @@ Difficulty: Hard desc = "Get out of the way!" duration = 9 var/damage = 10 //how much damage do we do? + var/monster_damage_boost = TRUE //do we deal extra damage to monsters? Used by the boss var/list/hit_things = list() //we hit these already, ignore them var/friendly_fire_check = FALSE var/bursting = FALSE //if we're bursting and need to hit anyone crossing us @@ -595,7 +599,7 @@ Difficulty: Hard var/limb_to_hit = L.get_bodypart(pick("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")) var/armor = L.run_armor_check(limb_to_hit, "melee", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!") L.apply_damage(damage, BURN, limb_to_hit, armor) - if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) + if(monster_damage_boost && (ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid))) L.adjustBruteLoss(damage) add_logs(caster, L, "struck with a [name]") for(var/obj/mecha/M in T.contents - hit_things) //and mechs. 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 f9bcfe1b6f..6eb688d38f 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -18,7 +18,7 @@ emote_see = list("jiggles", "bounces in place") 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) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c24ee7acd2..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)) @@ -578,7 +580,7 @@ var/datum/map_config/cached = SSmapping.next_map_config if(cached) stat(null, "Next Map: [cached.map_name]") - stat("Round ID:", "[GLOB.round_id ? GLOB.round_id : "NULL"]") + 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)]%)") @@ -754,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 @@ -1017,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/ninja/admin_ninja_verbs.dm b/code/modules/ninja/admin_ninja_verbs.dm deleted file mode 100644 index 7338d9bb0b..0000000000 --- a/code/modules/ninja/admin_ninja_verbs.dm +++ /dev/null @@ -1,64 +0,0 @@ - -/* - -Contents: -- Admin procs that make ninjas - -*/ - - -//ADMIN CREATE NINJA (From Player) -/client/proc/cmd_admin_ninjafy(mob/living/carbon/human/H in GLOB.player_list) - set category = null - set name = "Make Space Ninja" - - if (!SSticker.mode) - alert("Wait until the game starts") - return - - if(!istype(H)) - return - - if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") - return - - log_admin("[key_name(src)] turned [H.key] into a Space Ninja.") - H.mind = create_ninja_mind(H.key) - H.mind_initialize() - H.equip_space_ninja(1) - if(istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) - H.wear_suit:randomize_param() - spawn(0) - H.wear_suit:ninitialize(10,H) - SSticker.mode.update_ninja_icons_added(H) - - -//ADMIN CREATE NINJA (From Ghost) -/client/proc/send_space_ninja() - set category = "Fun" - set name = "Spawn Space Ninja" - set desc = "Spawns a space ninja for when you need a teenager with attitude." - set popup_menu = 0 - - if(!holder) - to_chat(src, "Only administrators may use this command.") - return - if(!SSticker.mode) - alert("The game hasn't started yet!") - return - if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No") - return - - var/client/C = input("Pick character to spawn as the Space Ninja", "Key", "") as null|anything in GLOB.clients - if(!C) - return - - // passing FALSE means the event doesn't start immediately - var/datum/round_event/ghost_role/ninja/E = new(FALSE) - E.priority_candidates += C - E.processing = TRUE - - message_admins("[key_name_admin(key)] has spawned [key_name_admin(C.key)] as a Space Ninja.") - log_admin("[key] used Spawn Space Ninja.") - - return diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm index e83f3a17e2..8ff3652367 100644 --- a/code/modules/ninja/ninja_event.dm +++ b/code/modules/ninja/ninja_event.dm @@ -63,98 +63,21 @@ Contents: Mind.active = 1 //generate objectives - You'll generally get 6 objectives (Ninja is meant to be hardmode!) - var/list/possible_targets = list() - for(var/datum/mind/M in SSticker.minds) - if(M.current && M.current.stat != DEAD) - if(ishuman(M.current)) - if(M.special_role) - possible_targets[M] = 0 //bad-guy - else if(M.assigned_role in GLOB.command_positions) - possible_targets[M] = 1 //good-guy - var/list/objectives = list(1,2,3,4) - while(give_objectives && Mind.objectives.len < 6) - switch(pick_n_take(objectives)) - if(1) //research - var/datum/objective/download/O = new /datum/objective/download() - O.owner = Mind - O.gen_amount_goal() - Mind.objectives += O - - if(2) //steal - var/datum/objective/steal/special/O = new /datum/objective/steal/special() - O.owner = Mind - Mind.objectives += O - - if(3) //protect/kill - if(!possible_targets.len) continue - var/index = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[index] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(index,index+1) - - if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/assassinate/O = new /datum/objective/assassinate() - O.owner = Mind - O.target = M - O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]." - Mind.objectives += O - else //protect - var/datum/objective/protect/O = new /datum/objective/protect() - O.owner = Mind - O.target = M - O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." - Mind.objectives += O - if(4) //debrain/capture - if(!possible_targets.len) continue - var/selected = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[selected] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(selected,selected+1) - - if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/debrain/O = new /datum/objective/debrain() - O.owner = Mind - O.target = M - O.explanation_text = "Steal the brain of [M.current.real_name]." - Mind.objectives += O - else //capture - var/datum/objective/capture/O = new /datum/objective/capture() - O.owner = Mind - O.gen_amount_goal() - Mind.objectives += O - else - break - - //Add a survival objective since it's usually broad enough for any round type. - if(give_objectives) - var/datum/objective/O = new /datum/objective/survive() - O.owner = Mind - Mind.objectives += O - - //add some RP-fluff - Mind.store_memory("I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") - Mind.store_memory("Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") - Mind.store_memory("Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") //spawn the ninja and assign the candidate var/mob/living/carbon/human/Ninja = create_space_ninja(spawn_loc) Mind.transfer_to(Ninja) - - //initialise equipment - if(istype(Ninja.wear_suit,/obj/item/clothing/suit/space/space_ninja)) - //Should be true but we have to check these things. - var/obj/item/clothing/suit/space/space_ninja/N = Ninja.wear_suit - N.randomize_param() + var/datum/antagonist/ninja/ninjadatum = add_ninja(Ninja) + ninjadatum.equip_space_ninja() Ninja.internal = Ninja.s_store Ninja.update_internals_hud_icon(1) if(Ninja.mind != Mind) //something has gone wrong! throw EXCEPTION("Ninja created with incorrect mind") - return - Ninja << sound('sound/effects/ninja_greeting.ogg') //so ninja you probably wouldn't even know if you were made one + SSticker.mode.update_ninja_icons_added(Ninja) spawned_mobs += Ninja message_admins("[key_name_admin(Ninja)] has been made into a ninja by an event.") @@ -171,7 +94,6 @@ Contents: A.real_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" A.copy_to(new_ninja) new_ninja.dna.update_dna_identity() - new_ninja.equip_space_ninja() return new_ninja @@ -183,38 +105,6 @@ Contents: return Mind -/mob/living/carbon/human/proc/equip_space_ninja(safety=0)//Safety in case you need to unequip stuff for existing characters. - if(safety) - qdel(w_uniform) - qdel(wear_suit) - qdel(wear_mask) - qdel(head) - qdel(shoes) - qdel(gloves) - - var/obj/item/device/radio/R = new /obj/item/device/radio/headset(src) - var/obj/item/clothing/suit/space/space_ninja/theSuit = new(src) - var/obj/item/weapon/katana/energy/EK = new(src) - theSuit.energyKatana = EK - - equip_to_slot_or_del(R, slot_ears) - equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) - equip_to_slot_or_del(new /obj/item/clothing/shoes/space_ninja(src), slot_shoes) - equip_to_slot_or_del(theSuit, slot_wear_suit) - equip_to_slot_or_del(new /obj/item/clothing/gloves/space_ninja(src), slot_gloves) - equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/space_ninja(src), slot_head) - equip_to_slot_or_del(new /obj/item/clothing/mask/gas/space_ninja(src), slot_wear_mask) - equip_to_slot_or_del(new /obj/item/clothing/glasses/night(src), slot_glasses) - equip_to_slot_or_del(EK, slot_belt) - equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store) - equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/x4(src), slot_l_store) - equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(src), slot_s_store) - equip_to_slot_or_del(new /obj/item/weapon/tank/jetpack/carbondioxide(src), slot_back) - - var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(src) - E.implant(src) - return 1 - /datum/game_mode/proc/update_ninja_icons_added(var/mob/living/carbon/human/ninja) var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] ninjahud.join_hud(ninja) diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index d26e4cbd36..e9a350eae3 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -58,30 +58,23 @@ A.add_fingerprint(H) draining = 1 - var/drained = A.ninjadrain_act(suit,H,src) + . = A.ninjadrain_act(suit,H,src) draining = 0 - if(isnum(drained)) //Numerical values of drained handle their feedback here, Alpha values handle it themselves (Research hacking) - if(drained) - to_chat(H, "Gained [drained] energy from \the [A].") + if(isnum(.)) //Numerical values of drained handle their feedback here, Alpha values handle it themselves (Research hacking) + if(.) + to_chat(H, "Gained [.] energy from \the [A].") else to_chat(H, "\The [A] has run dry of power, you must find another source!") else - drained = 0 //as to not cancel attack_hand() - - return drained + . = 0 //as to not cancel attack_hand() -/obj/item/clothing/gloves/space_ninja/proc/toggled() - set name = "Toggle Interaction" - set desc = "Toggles special interaction on or off." - set category = "Ninja Equip" - +/obj/item/clothing/gloves/space_ninja/proc/toggledrain() var/mob/living/carbon/human/U = loc to_chat(U, "You [candrain?"disable":"enable"] special interaction.") candrain=!candrain - /obj/item/clothing/gloves/space_ninja/examine(mob/user) ..() if(flags & NODROP) diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm index 30085fdac5..e1c378f9f3 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm @@ -1,12 +1,6 @@ - - //Wakes the user so they are able to do their thing. Also injects a decent dose of radium. //Movement impairing would indicate drugs and the like. /obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() - set name = "Adrenaline Boost" - set desc = "Inject a secret chemical that will counteract all movement-impairing effect." - set category = "Ninja Ability" - set popup_menu = 0 if(!ninjacost(0,N_ADRENALINE))//Have to make sure stat is not counted for this ability. var/mob/living/carbon/human/H = affecting @@ -25,4 +19,3 @@ a_boost-- to_chat(H, "There are [a_boost] adrenaline boosts remaining.") s_coold = 3 - return \ No newline at end of file diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm index 977279082e..1d728084b3 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm @@ -26,4 +26,4 @@ if(!a_boost) to_chat(H, "You do not have any more adrenaline boosters.") return 1 - return (s_coold)//Returns the value of the variable which counts down to zero. \ No newline at end of file + return (s_coold)//Returns the value of the variable which counts down to zero. diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm index 8cfc6b8937..48e3cf69a9 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm @@ -2,14 +2,9 @@ //Disables nearby tech equipment. /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - set name = "EM Burst (25E)" - set desc = "Disable any nearby technology with a electro-magnetic pulse." - set category = "Ninja Ability" - set popup_menu = 0 if(!ninjacost(250,N_STEALTH_CANCEL)) var/mob/living/carbon/human/H = affecting playsound(H.loc, 'sound/effects/EMPulse.ogg', 60, 2) empulse(H, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch. s_coold = 2 - return \ No newline at end of file diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm index 481c4d46b5..18682e87eb 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm @@ -1,10 +1,6 @@ //Allows the ninja to kidnap people /obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/C in oview())//Only living carbon mobs. - set name = "Energy Net (20E)" - set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." - set category = null - set src = usr.contents if(!ninjacost(200,N_STEALTH_CANCEL) && iscarbon(C)) var/mob/living/carbon/human/H = affecting @@ -26,4 +22,3 @@ to_chat(H, "[C.p_they(TRUE)] are already trapped inside an energy net!") else to_chat(H, "[C.p_they(TRUE)] will bring no honor to your Clan!") - return \ No newline at end of file diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm index 3596976e9b..3c19162048 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm @@ -2,10 +2,6 @@ //Smoke bomb /obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke() - set name = "Smoke Bomb" - set desc = "Blind your enemies momentarily with a well-placed smoke bomb." - set category = "Ninja Ability" - set popup_menu = 0//Will not see it when right clicking. if(!ninjacost(0,N_SMOKE_BOMB)) var/mob/living/carbon/human/H = affecting @@ -16,4 +12,3 @@ s_bombs-- to_chat(H, "There are [s_bombs] smoke bombs remaining.") s_coold = 1 - return \ No newline at end of file diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm index bed0eafd59..336b061a6f 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm @@ -2,11 +2,6 @@ //Creates a throwing star /obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - set name = "Create Throwing Stars (1E)" - set desc = "Creates some throwing stars" - set category = "Ninja Ability" - set popup_menu = 0 - if(!ninjacost(10)) var/mob/living/carbon/human/H = affecting var/obj/item/weapon/throwing_star/ninja/N = new(H) diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm index 12e80d5c09..8103fa2415 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm @@ -21,7 +21,6 @@ Contents: animate(U, alpha = 50,time = 15) U.visible_message("[U.name] vanishes into thin air!", \ "You are now mostly invisible to normal detection.") - return /obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() @@ -38,12 +37,7 @@ Contents: /obj/item/clothing/suit/space/space_ninja/proc/stealth() - set name = "Toggle Stealth" - set desc = "Utilize the internal CLOAK-tech device to activate or deactivate stealth-camo." - set category = "Ninja Equip" - if(!s_busy) toggle_stealth() else to_chat(affecting, "Stealth does not appear to work!") - diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm index 4183e83fbf..73c7082eec 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm @@ -1,10 +1,5 @@ /obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall() - set name = "Recall Energy Katana (Variable Cost)" - set desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance." - set category = "Ninja Ability" - set popup_menu = 0 - var/mob/living/carbon/human/H = affecting var/cost = 0 @@ -42,4 +37,3 @@ else //Else just TP it to us. energyKatana.returnToOwner(H,1) - diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_teleporting.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_teleporting.dm index 339b0b2857..42f1af6c0e 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_teleporting.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_teleporting.dm @@ -16,16 +16,10 @@ Contents: var/mob/living/victim = H.pulling if(!victim.anchored) victim.forceMove(locate(T.x+rand(-1,1),T.y+rand(-1,1),T.z)) - return //Jaunt /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt() - set name = "Phase Jaunt (10E)" - set desc = "Utilizes the internal VOID-shift device to rapidly transit in direction facing." - set category = "Ninja Ability" - set popup_menu = 0 - if(!ninjacost(100,N_STEALTH_CANCEL)) var/mob/living/carbon/human/H = affecting var/turf/destination = get_teleport_loc(H.loc,H,9,1,3,1,0,1) @@ -47,7 +41,6 @@ Contents: s_coold = 1 else to_chat(H, "The VOID-shift device is malfunctioning, teleportation failed.") - return //Right-Click teleport: It's basically admin "jump to turf" @@ -76,6 +69,3 @@ Contents: s_coold = 1 else to_chat(H, "You cannot teleport into solid walls or from solid matter") - return - - diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 827047c93e..d5811e32c9 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -22,6 +22,8 @@ Contents: armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100) strip_delay = 12 + actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjajaunt, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove) + //Important parts of the suit. var/mob/living/carbon/human/affecting = null var/obj/item/weapon/stock_parts/cell/cell @@ -57,7 +59,6 @@ Contents: /obj/item/clothing/suit/space/space_ninja/New() ..() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/init//suit initialize verb //Spark Init spark_system = new() @@ -109,40 +110,38 @@ Contents: //This proc prevents the suit from being taken off. -/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H, checkIcons = 0) +/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H) if(!istype(H)) return 0 - if(checkIcons) - icon_state = H.gender==FEMALE ? "s-ninjanf" : "s-ninjan" - H.gloves.icon_state = "s-ninjan" - H.gloves.item_state = "s-ninjan" - else - if(H.mind.special_role!="Space Ninja") - to_chat(H, "\red fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR...") - H.gib() - return 0 - if(!istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja)) - to_chat(H, "ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING...") - return 0 - if(!istype(H.shoes, /obj/item/clothing/shoes/space_ninja)) - to_chat(H, "ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING...") - return 0 - if(!istype(H.gloves, /obj/item/clothing/gloves/space_ninja)) - to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") - return 0 + if(!is_ninja(H)) + to_chat(H, "\red fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR...") + H.gib() + return FALSE + if(!istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja)) + to_chat(H, "ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING...") + return FALSE + if(!istype(H.shoes, /obj/item/clothing/shoes/space_ninja)) + to_chat(H, "ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING...") + return FALSE + if(!istype(H.gloves, /obj/item/clothing/gloves/space_ninja)) + to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") + return FALSE + affecting = H + flags |= NODROP //colons make me go all |= + slowdown = FALSE + n_hood = H.head + n_hood.flags |= NODROP + n_shoes = H.shoes + n_shoes.flags |= NODROP + n_shoes.slowdown-- + n_gloves = H.gloves + n_gloves.flags |= NODROP + return TRUE - affecting = H - flags |= NODROP //colons make me go all |= - slowdown = 0 - n_hood = H.head - n_hood.flags |= NODROP - n_shoes = H.shoes - n_shoes.flags |= NODROP - n_shoes.slowdown-- - n_gloves = H.gloves - n_gloves.flags |= NODROP - - return 1 +/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H) + icon_state = H.gender==FEMALE ? "s-ninjanf" : "s-ninjan" + H.gloves.icon_state = "s-ninjan" + H.gloves.item_state = "s-ninjan" //This proc allows the suit to be taken off. @@ -172,3 +171,39 @@ Contents: to_chat(user, "The CLOAK-tech device is [s_active?"active":"inactive"].") to_chat(user, "There are [s_bombs] smoke bomb\s remaining.") to_chat(user, "There are [a_boost] adrenaline booster\s remaining.") + +/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action) + if(istype(action, /datum/action/item_action/initialize_ninja_suit)) + toggle_on_off() + return TRUE + if(!s_initialized) + to_chat(user, "ERROR: suit offline. Please activate suit.") + return FALSE + if(istype(action, /datum/action/item_action/ninjajaunt)) + ninjajaunt() + return TRUE + if(istype(action, /datum/action/item_action/ninjasmoke)) + ninjasmoke() + return TRUE + if(istype(action, /datum/action/item_action/ninjaboost)) + ninjaboost() + return TRUE + if(istype(action, /datum/action/item_action/ninjapulse)) + ninjapulse() + return TRUE + if(istype(action, /datum/action/item_action/ninjastar)) + ninjastar() + return TRUE + if(istype(action, /datum/action/item_action/ninjanet)) + ninjanet() + return TRUE + if(istype(action, /datum/action/item_action/ninja_sword_recall)) + ninja_sword_recall() + return TRUE + if(istype(action, /datum/action/item_action/ninja_stealth)) + stealth() + return TRUE + if(istype(action, /datum/action/item_action/toggle_glove)) + n_gloves.toggledrain() + return TRUE + return FALSE diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm index 6851eb9b48..f26912df24 100644 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ b/code/modules/ninja/suit/suit_initialisation.dm @@ -1,102 +1,98 @@ - -//Verbs link to procs because verb-like procs have a bug which prevents their use if the arguments are not readily referenced. -//^ Old coder words may be false these days, Not taking the risk for now. - -/obj/item/clothing/suit/space/space_ninja/proc/init() - set name = "Initialize Suit" - set desc = "Initializes the suit for field operation." - set category = "Ninja Equip" - - ninitialize() - -/obj/item/clothing/suit/space/space_ninja/proc/deinit() - set name = "De-Initialize Suit" - set desc = "Begins procedure to remove the suit." - set category = "Ninja Equip" - - if(!s_busy) +/obj/item/clothing/suit/space/space_ninja/proc/toggle_on_off() + if(s_busy) + to_chat(loc, "ERROR: You cannot use this function at this time.") + return FALSE + if(s_initialized) deinitialize() else - to_chat(affecting, "The function did not trigger!") - + ninitialize() + . = TRUE /obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/U = loc) - if(U.mind && U.mind.assigned_role==U.mind.special_role && !s_initialized && !s_busy)//Shouldn't be busy... but anything is possible I guess. - s_busy = 1 - for(var/i,i<7,i++) - switch(i) - if(0) - to_chat(U, "Now initializing...") - if(1) - if(!lock_suit(U))//To lock the suit onto wearer. - break - to_chat(U, "Securing external locking mechanism...\nNeural-net established.") - if(2) - to_chat(U, "Extending neural-net interface...\nNow monitoring brain wave pattern...") - if(3) - if(U.stat==2||U.health<=0) - to_chat(U, "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") - unlock_suit() - break - lock_suit(U,1)//Check for icons. - U.regenerate_icons() - to_chat(U, "Linking neural-net interface...\nPattern\green GREEN, continuing operation.") - if(4) - to_chat(U, "VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE.") - if(5) - to_chat(U, "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [cell.charge].") - if(6) - to_chat(U, "All systems operational. Welcome to SpiderOS, [U.real_name].") - grant_ninja_verbs() - grant_equip_verbs() - ntick() - sleep(delay) - s_busy = 0 - else - if(!U.mind||U.mind.assigned_role!=U.mind.special_role)//Your run of the mill persons shouldn't know what it is. Or how to turn it on. - to_chat(U, "You do not understand how this suit functions. Where the heck did it even come from?") - else if(s_initialized) - to_chat(U, "The suit is already functioning. Please report this bug.") - else - to_chat(U, "ERROR: You cannot use this function at this time.") - return + if(!U.mind) + return //Not sure how this could happen. + if(!is_ninja(U)) + to_chat(U, "You do not understand how this suit functions. Where the heck did it even come from?") + return + s_busy = TRUE + to_chat(U, "Now initializing...") + addtimer(CALLBACK(src, .proc/ninitialize_two, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_two(delay, mob/living/carbon/human/U) + if(!lock_suit(U))//To lock the suit onto wearer. + s_busy = FALSE + return + to_chat(U, "Securing external locking mechanism...\nNeural-net established.") + addtimer(CALLBACK(src, .proc/ninitialize_three, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_three(delay, mob/living/carbon/human/U) + to_chat(U, "Extending neural-net interface...\nNow monitoring brain wave pattern...") + addtimer(CALLBACK(src, .proc/ninitialize_four, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_four(delay, mob/living/carbon/human/U) + if(U.stat==2||U.health<=0) + to_chat(U, "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") + unlock_suit() + return + lockIcons(U)//Check for icons. + U.regenerate_icons() + to_chat(U, "Linking neural-net interface...\nPattern\green GREEN, continuing operation.") + addtimer(CALLBACK(src, .proc/ninitialize_five, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_five(delay, mob/living/carbon/human/U) + to_chat(U, "VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE.") + addtimer(CALLBACK(src, .proc/ninitialize_six, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_six(delay, mob/living/carbon/human/U) + to_chat(U, "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [cell.charge].") + addtimer(CALLBACK(src, .proc/ninitialize_seven, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_seven(delay, mob/living/carbon/human/U) + to_chat(U, "All systems operational. Welcome to SpiderOS, [U.real_name].") + grant_ninja_verbs() + grant_equip_verbs() + ntick() + s_busy = FALSE /obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay) - if(affecting==loc&&!s_busy) + if(affecting==loc) var/mob/living/carbon/human/U = affecting - if(!s_initialized) - to_chat(U, "The suit is not initialized. Please report this bug.") - return if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") return - if(s_busy) - to_chat(U, "ERROR: You cannot use this function at this time.") - return - s_busy = 1 - for(var/i = 0,i<7,i++) - switch(i) - if(0) - to_chat(U, "Now de-initializing...") - spideros = 0//Spideros resets. - if(1) - to_chat(U, "Logging off, [U:real_name]. Shutting down SpiderOS.") - remove_ninja_verbs() - if(2) - to_chat(U, "Primary system status: OFFLINE.\nBackup system status: OFFLINE.") - if(3) - to_chat(U, "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE.") - cancel_stealth()//Shutdowns stealth. - if(4) - to_chat(U, "Disconnecting neural-net interface...\greenSuccess.") - if(5) - to_chat(U, "Disengaging neural-net interface...\greenSuccess.") - if(6) - to_chat(U, "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED.") - remove_equip_verbs() - unlock_suit() - U.regenerate_icons() - sleep(delay) - s_busy = 0 - return \ No newline at end of file + s_busy = TRUE + addtimer(CALLBACK(src, .proc/deinitialize_two, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_two(delay, mob/living/carbon/human/U) + to_chat(U, "Now de-initializing...") + spideros = 0//Spideros resets. + addtimer(CALLBACK(src, .proc/deinitialize_three, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_three(delay, mob/living/carbon/human/U) + to_chat(U, "Logging off, [U:real_name]. Shutting down SpiderOS.") + remove_ninja_verbs() + addtimer(CALLBACK(src, .proc/deinitialize_four, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_four(delay, mob/living/carbon/human/U) + to_chat(U, "Primary system status: OFFLINE.\nBackup system status: OFFLINE.") + addtimer(CALLBACK(src, .proc/deinitialize_five, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_five(delay, mob/living/carbon/human/U) + to_chat(U, "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE.") + cancel_stealth()//Shutdowns stealth. + addtimer(CALLBACK(src, .proc/deinitialize_six, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_six(delay, mob/living/carbon/human/U) + to_chat(U, "Disconnecting neural-net interface...\greenSuccess.") + addtimer(CALLBACK(src, .proc/deinitialize_seven, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_seven(delay, mob/living/carbon/human/U) + to_chat(U, "Disengaging neural-net interface...\greenSuccess.") + addtimer(CALLBACK(src, .proc/deinitialize_eight, delay, U), delay) + +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_eight(delay, mob/living/carbon/human/U) + to_chat(U, "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED.") + remove_equip_verbs() + U.regenerate_icons() + s_busy = FALSE diff --git a/code/modules/ninja/suit/suit_process.dm b/code/modules/ninja/suit/suit_process.dm index 4b341c9198..99f801ed76 100644 --- a/code/modules/ninja/suit/suit_process.dm +++ b/code/modules/ninja/suit/suit_process.dm @@ -20,5 +20,3 @@ cancel_stealth() sleep(10)//Checks every second. - - diff --git a/code/modules/ninja/suit/suit_verbs_handlers.dm b/code/modules/ninja/suit/suit_verbs_handlers.dm index 24797a272b..7c887da1d2 100644 --- a/code/modules/ninja/suit/suit_verbs_handlers.dm +++ b/code/modules/ninja/suit/suit_verbs_handlers.dm @@ -9,33 +9,20 @@ Contents: */ /obj/item/clothing/suit/space/space_ninja/proc/grant_equip_verbs() - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/init - verbs += /obj/item/clothing/suit/space/space_ninja/proc/deinit - verbs += /obj/item/clothing/suit/space/space_ninja/proc/stealth - n_gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/toggled + n_gloves.verbs += /obj/item/clothing/gloves/space_ninja/proc/toggledrain s_initialized = 1 /obj/item/clothing/suit/space/space_ninja/proc/remove_equip_verbs() - verbs += /obj/item/clothing/suit/space/space_ninja/proc/init - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/deinit - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/stealth if(n_gloves) - n_gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggled + n_gloves.verbs -= /obj/item/clothing/gloves/space_ninja/proc/toggledrain s_initialized = 0 /obj/item/clothing/suit/space/space_ninja/proc/grant_ninja_verbs() verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjashift - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjaboost - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjastar - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninjanet - verbs += /obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall s_initialized=1 slowdown=0 @@ -43,10 +30,3 @@ Contents: /obj/item/clothing/suit/space/space_ninja/proc/remove_ninja_verbs() verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjashift - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjajaunt - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjaboost - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjastar - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninjanet - verbs -= /obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index de3d48f28b..3c92be3888 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -1,122 +1,122 @@ -/obj/item/weapon/clipboard - name = "clipboard" - icon = 'icons/obj/bureaucracy.dmi' - icon_state = "clipboard" - item_state = "clipboard" - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 7 - var/obj/item/weapon/pen/haspen //The stored pen. - var/obj/item/weapon/paper/toppaper //The topmost piece of paper. - slot_flags = SLOT_BELT - resistance_flags = FLAMMABLE - +/obj/item/weapon/clipboard + name = "clipboard" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "clipboard" + item_state = "clipboard" + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 7 + var/obj/item/weapon/pen/haspen //The stored pen. + var/obj/item/weapon/paper/toppaper //The topmost piece of paper. + slot_flags = SLOT_BELT + resistance_flags = FLAMMABLE + /obj/item/weapon/clipboard/Initialize() - update_icon() + 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) + +/obj/item/weapon/clipboard/update_icon() + cut_overlays() + if(toppaper) + add_overlay(toppaper.icon_state) copy_overlays(toppaper) - if(haspen) - add_overlay("clipboard_pen") - add_overlay("clipboard_over") - - -/obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/paper)) - if(!user.transferItemToLoc(W, src)) - return - toppaper = W - to_chat(user, "You clip the paper onto \the [src].") - update_icon() - else if(toppaper) - toppaper.attackby(user.get_active_held_item(), user) - update_icon() - - -/obj/item/weapon/clipboard/attack_self(mob/user) - var/dat = "Clipboard" - if(haspen) - dat += "Remove Pen

" - else - dat += "Add Pen

" - - //The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete - if(toppaper) - var/obj/item/weapon/paper/P = toppaper - dat += "Write Remove - [P.name]

" - - for(P in src) - if(P == toppaper) - continue - dat += "Write Remove Move to top - [P.name]
" - user << browse(dat, "window=clipboard") - onclose(user, "clipboard") - add_fingerprint(usr) - - -/obj/item/weapon/clipboard/Topic(href, href_list) - ..() - if(usr.stat || usr.restrained()) - return - - if(usr.contents.Find(src)) - - if(href_list["pen"]) - if(haspen) - haspen.loc = usr.loc - usr.put_in_hands(haspen) - haspen = null - - if(href_list["addpen"]) - if(!haspen) - var/obj/item/held = usr.get_active_held_item() - if(istype(held, /obj/item/weapon/pen)) - var/obj/item/weapon/pen/W = held - if(!usr.transferItemToLoc(W, src)) - return - haspen = W - to_chat(usr, "You slot [W] into [src].") - - if(href_list["write"]) - var/obj/item/P = locate(href_list["write"]) - if(istype(P) && P.loc == src) - if(usr.get_active_held_item()) - P.attackby(usr.get_active_held_item(), usr) - - if(href_list["remove"]) - var/obj/item/P = locate(href_list["remove"]) - if(istype(P) && P.loc == src) - P.loc = usr.loc - usr.put_in_hands(P) - if(P == toppaper) - toppaper = null - var/obj/item/weapon/paper/newtop = locate(/obj/item/weapon/paper) in src - if(newtop && (newtop != P)) - toppaper = newtop - else - toppaper = null - - if(href_list["read"]) - var/obj/item/weapon/paper/P = locate(href_list["read"]) - if(istype(P) && P.loc == src) - usr.examinate(P) - - if(href_list["top"]) - var/obj/item/P = locate(href_list["top"]) - if(istype(P) && P.loc == src) - toppaper = P - to_chat(usr, "You move [P.name] to the top.") - - //Update everything - attack_self(usr) + if(haspen) + add_overlay("clipboard_pen") + add_overlay("clipboard_over") + + +/obj/item/weapon/clipboard/attackby(obj/item/weapon/W, mob/user, params) + if(istype(W, /obj/item/weapon/paper)) + if(!user.transferItemToLoc(W, src)) + return + toppaper = W + to_chat(user, "You clip the paper onto \the [src].") + update_icon() + else if(toppaper) + toppaper.attackby(user.get_active_held_item(), user) + update_icon() + + +/obj/item/weapon/clipboard/attack_self(mob/user) + var/dat = "Clipboard" + if(haspen) + dat += "Remove Pen

" + else + dat += "Add Pen

" + + //The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete + if(toppaper) + var/obj/item/weapon/paper/P = toppaper + dat += "Write Remove - [P.name]

" + + for(P in src) + if(P == toppaper) + continue + dat += "Write Remove Move to top - [P.name]
" + user << browse(dat, "window=clipboard") + onclose(user, "clipboard") + add_fingerprint(usr) + + +/obj/item/weapon/clipboard/Topic(href, href_list) + ..() + if(usr.stat || usr.restrained()) + return + + if(usr.contents.Find(src)) + + if(href_list["pen"]) + if(haspen) + haspen.loc = usr.loc + usr.put_in_hands(haspen) + haspen = null + + if(href_list["addpen"]) + if(!haspen) + var/obj/item/held = usr.get_active_held_item() + if(istype(held, /obj/item/weapon/pen)) + var/obj/item/weapon/pen/W = held + if(!usr.transferItemToLoc(W, src)) + return + haspen = W + to_chat(usr, "You slot [W] into [src].") + + if(href_list["write"]) + var/obj/item/P = locate(href_list["write"]) + if(istype(P) && P.loc == src) + if(usr.get_active_held_item()) + P.attackby(usr.get_active_held_item(), usr) + + if(href_list["remove"]) + var/obj/item/P = locate(href_list["remove"]) + if(istype(P) && P.loc == src) + P.loc = usr.loc + usr.put_in_hands(P) + if(P == toppaper) + toppaper = null + var/obj/item/weapon/paper/newtop = locate(/obj/item/weapon/paper) in src + if(newtop && (newtop != P)) + toppaper = newtop + else + toppaper = null + + if(href_list["read"]) + var/obj/item/weapon/paper/P = locate(href_list["read"]) + if(istype(P) && P.loc == src) + usr.examinate(P) + + if(href_list["top"]) + var/obj/item/P = locate(href_list["top"]) + if(istype(P) && P.loc == src) + toppaper = P + to_chat(usr, "You move [P.name] to the top.") + + //Update everything + attack_self(usr) 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/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 1fd71e9bba..c83d53bf3f 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -78,8 +78,8 @@ name = "folder- 'TOP SECRET'" desc = "A folder stamped \"Top Secret - Property of Nanotrasen Corporation. Unauthorized distribution is punishable by death.\"" -/obj/item/weapon/folder/documents/New() - ..() +/obj/item/weapon/folder/documents/Initialize() + . = ..() new /obj/item/documents/nanotrasen(src) update_icon() @@ -91,20 +91,20 @@ /obj/item/weapon/folder/syndicate/red icon_state = "folder_sred" -/obj/item/weapon/folder/syndicate/red/New() - ..() +/obj/item/weapon/folder/syndicate/red/Initialize() + . = ..() new /obj/item/documents/syndicate/red(src) update_icon() /obj/item/weapon/folder/syndicate/blue icon_state = "folder_sblue" -/obj/item/weapon/folder/syndicate/blue/New() - ..() +/obj/item/weapon/folder/syndicate/blue/Initialize() + . = ..() new /obj/item/documents/syndicate/blue(src) update_icon() -/obj/item/weapon/folder/syndicate/mining/New() - ..() +/obj/item/weapon/folder/syndicate/mining/Initialize() + . = ..() new /obj/item/documents/syndicate/mining(src) - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 36e69828b2..b6c6ab5d9e 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -170,8 +170,7 @@ /obj/item/weapon/paper/proc/updateinfolinks() info_links = info - var/i = 0 - for(i=1,i<=fields,i++) + for(var/i in 1 to min(fields, 15)) addtofield(i, "write", 1) info_links = info_links + "write" diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 4bd8bb56b0..3517757de5 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 @@ -304,16 +304,17 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne // Sound the alert if gravity was just enabled or disabled. var/alert = 0 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 [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. [A][ADMIN_COORDJMP(src)]") + if(SSticker.IsRoundInProgress()) + if(on) // 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 [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. [A][ADMIN_COORDJMP(src)]") update_icon() update_list() diff --git a/code/modules/power/gravitygenerator.dm.rej b/code/modules/power/gravitygenerator.dm.rej deleted file mode 100644 index 510190ad8b..0000000000 --- a/code/modules/power/gravitygenerator.dm.rej +++ /dev/null @@ -1,22 +0,0 @@ -diff a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm (rejected hunks) -@@ -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) -+ 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.rej b/code/modules/power/singularity/emitter.dm.rej deleted file mode 100644 index 9387d35f17..0000000000 --- a/code/modules/power/singularity/emitter.dm.rej +++ /dev/null @@ -1,15 +0,0 @@ -diff a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm (rejected hunks) -@@ -98,9 +98,10 @@ - - /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") -+ var/turf/T = get_turf(src) -+ message_admins("Emitter deleted at [ADMIN_COORDJMP(T)]",0,1) -+ log_game("Emitter deleted at [COORD(T)]") -+ investigate_log("deleted at [get_area(src)] [COORD(T)]","singulo") - QDEL_NULL(sparks) - return ..() - diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index fb2df4deeb..fd119bf878 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -34,18 +34,65 @@ var/area/A = get_area(src) if(A) - var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/effects.dmi', "ghostalertsie") + var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult_effects.dmi', "ghostalertsie") notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action=NOTIFY_ATTACK) + INVOKE_ASYNC(src, .proc/narsie_spawn_animation) - narsie_spawn_animation() +/obj/singularity/narsie/large/cult // For the new cult ending, guaranteed to end the round within 3 minutes + var/list/souls_needed = list() + var/soul_goal = 0 + var/souls = 0 + var/resolved = FALSE - sleep(70) - SSshuttle.emergency.request(null, set_coefficient = 0.1) // Cannot recall +/obj/singularity/narsie/large/cult/proc/resize(var/ratio) + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + ntransform.Scale(ratio) + animate(src, transform = ntransform, time = 40, easing = EASE_IN|EASE_OUT) + +/obj/singularity/narsie/large/cult/Initialize() + . = ..() + GLOB.cult_narsie = src + GLOB.blood_target = src + resize(0.6) + for(var/datum/mind/cult_mind in SSticker.mode.cult) + if(isliving(cult_mind.current)) + var/mob/living/L = cult_mind.current + L.narsie_act() + for(var/mob/living/player in GLOB.player_list) + if(player.stat != DEAD && player.loc.z == ZLEVEL_STATION && !iscultist(player) && isliving(player)) + souls_needed[player] = TRUE + soul_goal = round(1 + LAZYLEN(souls_needed) * 0.6) + INVOKE_ASYNC(src, .proc/begin_the_end) + +/obj/singularity/narsie/large/cult/proc/begin_the_end() + sleep(50) + priority_announce("An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.","Central Command Higher Dimensional Affairs", 'sound/misc/airraid.ogg') + sleep(550) + priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: TWO MINUTES. ","Central Command Higher Dimensional Affairs") + sleep(50) + set_security_level("delta") + SSshuttle.registerHostileEnvironment(src) + SSshuttle.lockdown = TRUE + sleep(1150) + if(resolved == FALSE) + resolved = TRUE + world << sound('sound/machines/Alarm.ogg') + addtimer(CALLBACK(GLOBAL_PROC, .proc/cult_ending_helper), 120) + addtimer(CALLBACK(GLOBAL_PROC, .proc/ending_helper), 220) + +/obj/singularity/narsie/large/cult/Destroy() + GLOB.cult_narsie = null + return ..() + +/proc/ending_helper() + SSticker.force_ending = 1 + +/proc/cult_ending_helper(var/no_explosion = 0) + SSticker.station_explosion_cinematic(no_explosion, "cult", null) /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() @@ -82,7 +129,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. @@ -134,7 +182,7 @@ return to_chat(target, "NAR-SIE HAS LOST INTEREST IN YOU.") target = food - if(isliving(target)) + if(ishuman(target)) to_chat(target, "NAR-SIE HUNGERS FOR YOUR SOUL.") else to_chat(target, "NAR-SIE HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL.") diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index dc3da6db8d..2045cb380c 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -1,328 +1,328 @@ -/obj/machinery/particle_accelerator/control_box - name = "Particle Accelerator Control Console" - desc = "This controls the density of the particles." - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "control_box" - anchored = 0 - density = 1 - use_power = 0 - idle_power_usage = 500 - active_power_usage = 10000 - dir = NORTH - var/strength_upper_limit = 2 - var/interface_control = 1 - var/list/obj/structure/particle_accelerator/connected_parts - var/assembled = 0 - var/construction_state = PA_CONSTRUCTION_UNSECURED - var/active = 0 - var/strength = 0 - var/powered = 0 - mouse_opacity = 2 - -/obj/machinery/particle_accelerator/control_box/New() - wires = new /datum/wires/particle_accelerator/control_box(src) - connected_parts = list() - ..() - -/obj/machinery/particle_accelerator/control_box/Destroy() - if(active) - toggle_power() - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.master = null - connected_parts.Cut() - qdel(wires) - wires = null - return ..() - -/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user) - if(construction_state == PA_CONSTRUCTION_COMPLETE) - interact(user) - else if(construction_state == PA_CONSTRUCTION_PANEL_OPEN) - wires.interact(user) - -/obj/machinery/particle_accelerator/control_box/proc/update_state() - if(construction_state < PA_CONSTRUCTION_COMPLETE) - use_power = 0 - assembled = 0 - active = 0 - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = null - part.powered = 0 - part.update_icon() - connected_parts.Cut() - return - if(!part_scan()) - use_power = 1 - active = 0 - connected_parts.Cut() - -/obj/machinery/particle_accelerator/control_box/update_icon() - if(active) - icon_state = "control_boxp1" - else - if(use_power) - if(assembled) - icon_state = "control_boxp" - else - icon_state = "ucontrol_boxp" - else - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED, PA_CONSTRUCTION_UNWIRED) - icon_state = "control_box" - if(PA_CONSTRUCTION_PANEL_OPEN) - icon_state = "control_boxw" - else - icon_state = "control_boxc" - -/obj/machinery/particle_accelerator/control_box/Topic(href, href_list) - if(..()) - return - - if(!interface_control) - to_chat(usr, "ERROR: Request timed out. Check wire contacts.") - return - - if(href_list["close"]) - usr << browse(null, "window=pacontrol") - usr.unset_machine() - return - if(href_list["togglep"]) - if(!wires.is_cut(WIRE_POWER)) - toggle_power() - - else if(href_list["scan"]) - part_scan() - - else if(href_list["strengthup"]) - if(!wires.is_cut(WIRE_STRENGTH)) - add_strength() - - else if(href_list["strengthdown"]) - if(!wires.is_cut(WIRE_STRENGTH)) - remove_strength() - - updateDialog() - update_icon() - -/obj/machinery/particle_accelerator/control_box/proc/strength_change() - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = strength - part.update_icon() - -/obj/machinery/particle_accelerator/control_box/proc/add_strength(s) - if(assembled && (strength < strength_upper_limit)) - strength++ - strength_change() - +/obj/machinery/particle_accelerator/control_box + name = "Particle Accelerator Control Console" + desc = "This controls the density of the particles." + icon = 'icons/obj/machines/particle_accelerator.dmi' + icon_state = "control_box" + anchored = 0 + density = 1 + use_power = 0 + idle_power_usage = 500 + active_power_usage = 10000 + dir = NORTH + var/strength_upper_limit = 2 + var/interface_control = 1 + var/list/obj/structure/particle_accelerator/connected_parts + var/assembled = 0 + var/construction_state = PA_CONSTRUCTION_UNSECURED + var/active = 0 + var/strength = 0 + var/powered = 0 + mouse_opacity = 2 + +/obj/machinery/particle_accelerator/control_box/New() + wires = new /datum/wires/particle_accelerator/control_box(src) + connected_parts = list() + ..() + +/obj/machinery/particle_accelerator/control_box/Destroy() + if(active) + toggle_power() + for(var/CP in connected_parts) + var/obj/structure/particle_accelerator/part = CP + part.master = null + connected_parts.Cut() + qdel(wires) + wires = null + return ..() + +/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user) + if(construction_state == PA_CONSTRUCTION_COMPLETE) + interact(user) + else if(construction_state == PA_CONSTRUCTION_PANEL_OPEN) + wires.interact(user) + +/obj/machinery/particle_accelerator/control_box/proc/update_state() + if(construction_state < PA_CONSTRUCTION_COMPLETE) + use_power = 0 + assembled = 0 + active = 0 + for(var/CP in connected_parts) + var/obj/structure/particle_accelerator/part = CP + part.strength = null + part.powered = 0 + part.update_icon() + connected_parts.Cut() + return + if(!part_scan()) + use_power = 1 + active = 0 + connected_parts.Cut() + +/obj/machinery/particle_accelerator/control_box/update_icon() + if(active) + icon_state = "control_boxp1" + else + if(use_power) + if(assembled) + icon_state = "control_boxp" + else + icon_state = "ucontrol_boxp" + else + switch(construction_state) + if(PA_CONSTRUCTION_UNSECURED, PA_CONSTRUCTION_UNWIRED) + icon_state = "control_box" + if(PA_CONSTRUCTION_PANEL_OPEN) + icon_state = "control_boxw" + else + icon_state = "control_boxc" + +/obj/machinery/particle_accelerator/control_box/Topic(href, href_list) + if(..()) + return + + if(!interface_control) + to_chat(usr, "ERROR: Request timed out. Check wire contacts.") + return + + if(href_list["close"]) + usr << browse(null, "window=pacontrol") + usr.unset_machine() + return + if(href_list["togglep"]) + if(!wires.is_cut(WIRE_POWER)) + toggle_power() + + else if(href_list["scan"]) + part_scan() + + else if(href_list["strengthup"]) + if(!wires.is_cut(WIRE_STRENGTH)) + add_strength() + + else if(href_list["strengthdown"]) + if(!wires.is_cut(WIRE_STRENGTH)) + remove_strength() + + updateDialog() + update_icon() + +/obj/machinery/particle_accelerator/control_box/proc/strength_change() + for(var/CP in connected_parts) + var/obj/structure/particle_accelerator/part = CP + part.strength = strength + part.update_icon() + +/obj/machinery/particle_accelerator/control_box/proc/add_strength(s) + if(assembled && (strength < strength_upper_limit)) + strength++ + strength_change() + 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") - - -/obj/machinery/particle_accelerator/control_box/proc/remove_strength(s) - if(assembled && (strength > 0)) - strength-- - strength_change() - + investigate_log("increased to [strength] by [key_name(usr)]","singulo") + + +/obj/machinery/particle_accelerator/control_box/proc/remove_strength(s) + if(assembled && (strength > 0)) + strength-- + strength_change() + 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") - - -/obj/machinery/particle_accelerator/control_box/power_change() - ..() - if(stat & NOPOWER) - active = 0 - use_power = 0 - else if(!stat && construction_state == PA_CONSTRUCTION_COMPLETE) - use_power = 1 - -/obj/machinery/particle_accelerator/control_box/process() - if(active) - //a part is missing! - if(connected_parts.len < 6) - investigate_log("lost a connected part; It powered down.","singulo") - toggle_power() - update_icon() - return - //emit some particles - for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) - PE.emit_particle(strength) - -/obj/machinery/particle_accelerator/control_box/proc/part_scan() - var/ldir = turn(dir,-90) - var/rdir = turn(dir,90) - var/odir = turn(dir,180) - var/turf/T = loc - - assembled = 0 - critical_machine = FALSE - - var/obj/structure/particle_accelerator/fuel_chamber/F = locate() in orange(1,src) - if(!F) - return 0 - - setDir(F.dir) - connected_parts.Cut() - - T = get_step(T,rdir) - if(!check_part(T,/obj/structure/particle_accelerator/fuel_chamber)) - return 0 - T = get_step(T,odir) - if(!check_part(T,/obj/structure/particle_accelerator/end_cap)) - return 0 - T = get_step(T,dir) - T = get_step(T,dir) - if(!check_part(T,/obj/structure/particle_accelerator/power_box)) - return 0 - T = get_step(T,dir) - if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/center)) - return 0 - T = get_step(T,ldir) - if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/left)) - return 0 - T = get_step(T,rdir) - T = get_step(T,rdir) - if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/right)) - return 0 - - assembled = 1 - critical_machine = TRUE //Only counts if the PA is actually assembled. - return 1 - -/obj/machinery/particle_accelerator/control_box/proc/check_part(turf/T, type) - var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T - if(istype(PA, type) && (PA.construction_state == PA_CONSTRUCTION_COMPLETE)) - if(PA.connect_master(src)) - connected_parts.Add(PA) - return 1 - return 0 - - -/obj/machinery/particle_accelerator/control_box/proc/toggle_power() - active = !active - investigate_log("turned [active?"ON":"OFF"] by [usr ? key_name(usr) : "outside forces"]","singulo") - message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name_admin(usr) : "outside forces"](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] in ([x],[y],[z])") - if(active) - use_power = 2 - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = strength - part.powered = 1 - part.update_icon() - else - use_power = 1 - for(var/CP in connected_parts) - var/obj/structure/particle_accelerator/part = CP - part.strength = null - part.powered = 0 - part.update_icon() - return 1 - - -/obj/machinery/particle_accelerator/control_box/interact(mob/user) - if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) - if(!issilicon(user)) - user.unset_machine() - user << browse(null, "window=pacontrol") - return - user.set_machine(src) - - var/dat = "" - dat += "Close

" - dat += "

Status

" - if(!assembled) - dat += "Unable to detect all parts!
" - dat += "Run Scan

" - else - dat += "All parts in place.

" - dat += "Power:" - if(active) - dat += "On
" - else - dat += "Off
" - dat += "Toggle Power

" - dat += "Particle Strength: [strength] " - dat += "--|++

" - - var/datum/browser/popup = new(user, "pacontrol", name, 420, 300) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/particle_accelerator/control_box/examine(mob/user) - ..() - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED) - to_chat(user, "Looks like it's not attached to the flooring") - if(PA_CONSTRUCTION_UNWIRED) - to_chat(user, "It is missing some cables") - if(PA_CONSTRUCTION_PANEL_OPEN) - to_chat(user, "The panel is open") - - -/obj/machinery/particle_accelerator/control_box/attackby(obj/item/W, mob/user, params) - var/did_something = FALSE - - switch(construction_state) - if(PA_CONSTRUCTION_UNSECURED) - if(istype(W, /obj/item/weapon/wrench) && !isinspace()) - playsound(loc, W.usesound, 75, 1) - anchored = 1 - user.visible_message("[user.name] secures the [name] to the floor.", \ - "You secure the external bolts.") - construction_state = PA_CONSTRUCTION_UNWIRED - did_something = TRUE - if(PA_CONSTRUCTION_UNWIRED) - if(istype(W, /obj/item/weapon/wrench)) - playsound(loc, W.usesound, 75, 1) - anchored = 0 - user.visible_message("[user.name] detaches the [name] from the floor.", \ - "You remove the external bolts.") - construction_state = PA_CONSTRUCTION_UNSECURED - did_something = TRUE - else if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(1)) - user.visible_message("[user.name] adds wires to the [name].", \ - "You add some wires.") - construction_state = PA_CONSTRUCTION_PANEL_OPEN - did_something = TRUE - if(PA_CONSTRUCTION_PANEL_OPEN) - if(istype(W, /obj/item/weapon/wirecutters))//TODO:Shock user if its on? - user.visible_message("[user.name] removes some wires from the [name].", \ - "You remove some wires.") - construction_state = PA_CONSTRUCTION_UNWIRED - did_something = TRUE - else if(istype(W, /obj/item/weapon/screwdriver)) - user.visible_message("[user.name] closes the [name]'s access panel.", \ - "You close the access panel.") - construction_state = PA_CONSTRUCTION_COMPLETE - did_something = TRUE - if(PA_CONSTRUCTION_COMPLETE) - if(istype(W, /obj/item/weapon/screwdriver)) - user.visible_message("[user.name] opens the [name]'s access panel.", \ - "You open the access panel.") - construction_state = PA_CONSTRUCTION_PANEL_OPEN - did_something = TRUE - - if(did_something) - user.changeNext_move(CLICK_CD_MELEE) - update_state() - update_icon() - return - - ..() - -/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B) - if(prob(50)) - qdel(src) - -#undef PA_CONSTRUCTION_UNSECURED -#undef PA_CONSTRUCTION_UNWIRED -#undef PA_CONSTRUCTION_PANEL_OPEN -#undef PA_CONSTRUCTION_COMPLETE + investigate_log("decreased to [strength] by [key_name(usr)]","singulo") + + +/obj/machinery/particle_accelerator/control_box/power_change() + ..() + if(stat & NOPOWER) + active = 0 + use_power = 0 + else if(!stat && construction_state == PA_CONSTRUCTION_COMPLETE) + use_power = 1 + +/obj/machinery/particle_accelerator/control_box/process() + if(active) + //a part is missing! + if(connected_parts.len < 6) + investigate_log("lost a connected part; It powered down.","singulo") + toggle_power() + update_icon() + return + //emit some particles + for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts) + PE.emit_particle(strength) + +/obj/machinery/particle_accelerator/control_box/proc/part_scan() + var/ldir = turn(dir,-90) + var/rdir = turn(dir,90) + var/odir = turn(dir,180) + var/turf/T = loc + + assembled = 0 + critical_machine = FALSE + + var/obj/structure/particle_accelerator/fuel_chamber/F = locate() in orange(1,src) + if(!F) + return 0 + + setDir(F.dir) + connected_parts.Cut() + + T = get_step(T,rdir) + if(!check_part(T,/obj/structure/particle_accelerator/fuel_chamber)) + return 0 + T = get_step(T,odir) + if(!check_part(T,/obj/structure/particle_accelerator/end_cap)) + return 0 + T = get_step(T,dir) + T = get_step(T,dir) + if(!check_part(T,/obj/structure/particle_accelerator/power_box)) + return 0 + T = get_step(T,dir) + if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/center)) + return 0 + T = get_step(T,ldir) + if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/left)) + return 0 + T = get_step(T,rdir) + T = get_step(T,rdir) + if(!check_part(T,/obj/structure/particle_accelerator/particle_emitter/right)) + return 0 + + assembled = 1 + critical_machine = TRUE //Only counts if the PA is actually assembled. + return 1 + +/obj/machinery/particle_accelerator/control_box/proc/check_part(turf/T, type) + var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T + if(istype(PA, type) && (PA.construction_state == PA_CONSTRUCTION_COMPLETE)) + if(PA.connect_master(src)) + connected_parts.Add(PA) + return 1 + return 0 + + +/obj/machinery/particle_accelerator/control_box/proc/toggle_power() + active = !active + investigate_log("turned [active?"ON":"OFF"] by [usr ? key_name(usr) : "outside forces"]","singulo") + message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name_admin(usr) : "outside forces"](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] in ([x],[y],[z])") + if(active) + use_power = 2 + for(var/CP in connected_parts) + var/obj/structure/particle_accelerator/part = CP + part.strength = strength + part.powered = 1 + part.update_icon() + else + use_power = 1 + for(var/CP in connected_parts) + var/obj/structure/particle_accelerator/part = CP + part.strength = null + part.powered = 0 + part.update_icon() + return 1 + + +/obj/machinery/particle_accelerator/control_box/interact(mob/user) + if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER))) + if(!issilicon(user)) + user.unset_machine() + user << browse(null, "window=pacontrol") + return + user.set_machine(src) + + var/dat = "" + dat += "Close

" + dat += "

Status

" + if(!assembled) + dat += "Unable to detect all parts!
" + dat += "Run Scan

" + else + dat += "All parts in place.

" + dat += "Power:" + if(active) + dat += "On
" + else + dat += "Off
" + dat += "Toggle Power

" + dat += "Particle Strength: [strength] " + dat += "--|++

" + + var/datum/browser/popup = new(user, "pacontrol", name, 420, 300) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) + popup.open() + +/obj/machinery/particle_accelerator/control_box/examine(mob/user) + ..() + switch(construction_state) + if(PA_CONSTRUCTION_UNSECURED) + to_chat(user, "Looks like it's not attached to the flooring") + if(PA_CONSTRUCTION_UNWIRED) + to_chat(user, "It is missing some cables") + if(PA_CONSTRUCTION_PANEL_OPEN) + to_chat(user, "The panel is open") + + +/obj/machinery/particle_accelerator/control_box/attackby(obj/item/W, mob/user, params) + var/did_something = FALSE + + switch(construction_state) + if(PA_CONSTRUCTION_UNSECURED) + if(istype(W, /obj/item/weapon/wrench) && !isinspace()) + playsound(loc, W.usesound, 75, 1) + anchored = 1 + user.visible_message("[user.name] secures the [name] to the floor.", \ + "You secure the external bolts.") + construction_state = PA_CONSTRUCTION_UNWIRED + did_something = TRUE + if(PA_CONSTRUCTION_UNWIRED) + if(istype(W, /obj/item/weapon/wrench)) + playsound(loc, W.usesound, 75, 1) + anchored = 0 + user.visible_message("[user.name] detaches the [name] from the floor.", \ + "You remove the external bolts.") + construction_state = PA_CONSTRUCTION_UNSECURED + did_something = TRUE + else if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/CC = W + if(CC.use(1)) + user.visible_message("[user.name] adds wires to the [name].", \ + "You add some wires.") + construction_state = PA_CONSTRUCTION_PANEL_OPEN + did_something = TRUE + if(PA_CONSTRUCTION_PANEL_OPEN) + if(istype(W, /obj/item/weapon/wirecutters))//TODO:Shock user if its on? + user.visible_message("[user.name] removes some wires from the [name].", \ + "You remove some wires.") + construction_state = PA_CONSTRUCTION_UNWIRED + did_something = TRUE + else if(istype(W, /obj/item/weapon/screwdriver)) + user.visible_message("[user.name] closes the [name]'s access panel.", \ + "You close the access panel.") + construction_state = PA_CONSTRUCTION_COMPLETE + did_something = TRUE + if(PA_CONSTRUCTION_COMPLETE) + if(istype(W, /obj/item/weapon/screwdriver)) + user.visible_message("[user.name] opens the [name]'s access panel.", \ + "You open the access panel.") + construction_state = PA_CONSTRUCTION_PANEL_OPEN + did_something = TRUE + + if(did_something) + user.changeNext_move(CLICK_CD_MELEE) + update_state() + update_icon() + return + + ..() + +/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B) + if(prob(50)) + qdel(src) + +#undef PA_CONSTRUCTION_UNSECURED +#undef PA_CONSTRUCTION_UNWIRED +#undef PA_CONSTRUCTION_PANEL_OPEN +#undef PA_CONSTRUCTION_COMPLETE diff --git a/code/modules/power/smes.dm.rej b/code/modules/power/smes.dm.rej deleted file mode 100644 index d381204e44..0000000000 --- a/code/modules/power/smes.dm.rej +++ /dev/null @@ -1,17 +0,0 @@ -diff a/code/modules/power/smes.dm b/code/modules/power/smes.dm (rejected hunks) -@@ -192,10 +192,11 @@ - - /obj/machinery/power/smes/Destroy() - if(SSticker && SSticker.IsRoundInProgress()) -- var/area/area = get_area(src) -- message_admins("SMES deleted at ([area.name])") -- log_game("SMES deleted at ([area.name])") -- investigate_log("deleted at ([area.name])","singulo") -+ var/area/A = get_area(src) -+ var/turf/T = get_turf(src) -+ message_admins("SMES deleted at [A][ADMIN_JMP(T)]") -+ log_game("SMES deleted at [A][COORD(T)]") -+ investigate_log("deleted at [A][COORD(T)]","singulo") - if(terminal) - disconnect_terminal() - return ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 712cd5cd41..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 @@ -134,7 +134,9 @@ 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") @@ -340,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 [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) diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index b1fd49779f..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" +/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/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/ammunition/special.dm b/code/modules/projectiles/ammunition/special.dm index 68681c1124..16ec87e043 100644 --- a/code/modules/projectiles/ammunition/special.dm +++ b/code/modules/projectiles/ammunition/special.dm @@ -64,6 +64,25 @@ qdel(S) ..() +/obj/item/ammo_casing/dnainjector + name = "rigged syringe gun spring" + desc = "A high-power spring that throws DNA injectors." + projectile_type = /obj/item/projectile/bullet/dnainjector + firing_effect_type = null + +/obj/item/ammo_casing/dnainjector/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + if(!BB) + return + if(istype(loc, /obj/item/weapon/gun/syringe/dna)) + var/obj/item/weapon/gun/syringe/dna/SG = loc + if(!SG.syringes.len) + return + + var/obj/item/weapon/dnainjector/S = popleft(SG.syringes) + var/obj/item/projectile/bullet/dnainjector/D = BB + S.forceMove(D) + D.injector = S + ..() /obj/item/ammo_casing/energy/c3dbullet projectile_type = /obj/item/projectile/bullet/midbullet3 diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 6a5dab12bf..0a886a76d1 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -61,6 +61,7 @@ for(var/A in get_modkits()) var/obj/item/borg/upgrade/modkit/M = A M.modify_projectile(K) + K.kinetic_modules += M //do something special on-hit, easy! /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg holds_charge = TRUE @@ -165,9 +166,11 @@ log_override = TRUE var/pressure_decrease = 0.25 - var/turf_aoe = FALSE - var/mob_aoe = 0 - var/list/hit_overlays = list() + var/list/kinetic_modules = list() + +/obj/item/projectile/kinetic/Destroy() + QDEL_NULL(kinetic_modules) + return ..() /obj/item/projectile/kinetic/prehit(atom/target) var/turf/target_turf = get_turf(target) @@ -197,23 +200,15 @@ M.gets_drilled(firer) var/obj/effect/overlay/temp/kinetic_blast/K = new /obj/effect/overlay/temp/kinetic_blast(target_turf) K.color = color - for(var/type in hit_overlays) - new type(target_turf) - if(turf_aoe) - for(var/T in RANGE_TURFS(1, target_turf) - target_turf) - if(ismineralturf(T)) - var/turf/closed/mineral/M = T - M.gets_drilled(firer) - if(mob_aoe) - for(var/mob/living/L in range(1, target_turf) - firer - target) - var/armor = L.run_armor_check(def_zone, flag, "", "", armour_penetration) - L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor) - to_chat(L, "You're struck by a [name]!") + for(var/obj/item/borg/upgrade/modkit/M in kinetic_modules) + if(QDELETED(M)) //whoever shot this was very, very unfortunate. + continue + M.projectile_strike(src, target_turf, target) //Modkits /obj/item/borg/upgrade/modkit - name = "modification kit" + name = "kinetic accelerator modification kit" desc = "An upgrade for kinetic accelerators." icon = 'icons/obj/objects.dmi' icon_state = "modkit" @@ -266,14 +261,13 @@ to_chat(user, "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.") . = FALSE - - /obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) forceMove(get_turf(KA)) KA.modkits -= src /obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K) +/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target) //Range /obj/item/borg/upgrade/modkit/range @@ -315,21 +309,73 @@ //AoE blasts /obj/item/borg/upgrade/modkit/aoe modifier = 0 + var/turf_aoe = FALSE + var/stats_stolen = FALSE + +/obj/item/borg/upgrade/modkit/aoe/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) //make sure only one of the aoe modules has values if somebody has multiple + if(AOE.stats_stolen) + continue + modifier += AOE.modifier //take its modifiers + AOE.modifier = 0 + turf_aoe += AOE.turf_aoe + AOE.turf_aoe = FALSE + AOE.stats_stolen = TRUE + +/obj/item/borg/upgrade/modkit/aoe/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + ..() + modifier = initial(modifier) //get our modifiers back + turf_aoe = initial(turf_aoe) + if(stats_stolen) //if we had our stats stolen, find the stealer and take them from it + for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) + if(AOE.stats_stolen) + continue + AOE.modifier -= modifier + AOE.turf_aoe -= turf_aoe + else //otherwise, reset the stolen stats and have it recalculate + var/obj/item/borg/upgrade/modkit/aoe/new_stealer + for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) + if(!new_stealer) + new_stealer = AOE //just make the first one a stealer + AOE.modifier = initial(AOE.modifier) + AOE.turf_aoe = initial(AOE.turf_aoe) + AOE.stats_stolen = FALSE + if(new_stealer) //if there's no stealer, then there's no other aoe modkits + for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) + if(AOE != new_stealer) + new_stealer.modifier += AOE.modifier + AOE.modifier = 0 + new_stealer.turf_aoe += AOE.turf_aoe + AOE.turf_aoe = FALSE + AOE.stats_stolen = TRUE + stats_stolen = FALSE /obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K) K.name = "kinetic explosion" - if(!K.turf_aoe && !K.mob_aoe) - K.hit_overlays += /obj/effect/overlay/temp/explosion/fast - K.mob_aoe += modifier + +/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target) + if(stats_stolen) + return + new /obj/effect/overlay/temp/explosion/fast(target_turf) + if(turf_aoe) + for(var/T in RANGE_TURFS(1, target_turf) - target_turf) + if(ismineralturf(T)) + var/turf/closed/mineral/M = T + M.gets_drilled(K.firer) + if(modifier) + for(var/mob/living/L in range(1, target_turf) - K.firer - target) + var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armour_penetration) + L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor) + to_chat(L, "You're struck by a [K.name]!") + /obj/item/borg/upgrade/modkit/aoe/turfs name = "mining explosion" desc = "Causes the kinetic accelerator to destroy rock in an AoE." denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs - -/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K) - ..() - K.turf_aoe = TRUE + turf_aoe = TRUE /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs name = "offensive mining explosion" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 8a94c2b849..b938e399df 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -5,6 +5,7 @@ item_state = null w_class = WEIGHT_CLASS_BULKY force = 10 + modifystate = TRUE flags = CONDUCT slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) @@ -19,12 +20,12 @@ /obj/item/weapon/gun/energy/pulse/prize/New() . = ..() GLOB.poi_list |= src - var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(src)]" + 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 @@ -39,7 +40,7 @@ w_class = WEIGHT_CLASS_NORMAL slot_flags = SLOT_BELT icon_state = "pulse_carbine" - item_state = "pulse" + item_state = null cell_type = "/obj/item/weapon/stock_parts/cell/pulse/carbine" can_flashlight = 1 flight_x_offset = 18 diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 6da113b6e3..09547b0d98 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -49,18 +49,18 @@ return 1 -/obj/item/weapon/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = 1) +/obj/item/weapon/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = TRUE) if(istype(A, /obj/item/weapon/reagent_containers/syringe)) if(syringes.len < max_syringes) if(!user.transferItemToLoc(A, src)) - return + return FALSE to_chat(user, "You load [A] into \the [src].") - syringes.Add(A) + syringes += A recharge_newshot() - return 1 + return TRUE else - to_chat(usr, "[src] cannot hold more syringes!") - return 0 + to_chat(user, "[src] cannot hold more syringes!") + return FALSE /obj/item/weapon/gun/syringe/rapidsyringe name = "rapid syringe gun" @@ -78,3 +78,29 @@ force = 2 //Also very weak because it's smaller suppressed = 1 //Softer fire sound can_unsuppress = 0 //Permanently silenced + +/obj/item/weapon/gun/syringe/dna + name = "modified syringe gun" + desc = "A syringe gun that has been modified to fit DNA injectors instead of normal syringes." + origin_tech = "combat=2;syndicate=2;biotech=3" + +/obj/item/weapon/gun/syringe/dna/Initialize() + . = ..() + chambered = new /obj/item/ammo_casing/dnainjector(src) + +/obj/item/weapon/gun/syringe/dna/attackby(obj/item/A, mob/user, params, show_msg = TRUE) + if(istype(A, /obj/item/weapon/dnainjector)) + var/obj/item/weapon/dnainjector/D = A + if(D.used) + to_chat(user, "This injector is used up!") + return + if(syringes.len < max_syringes) + if(!user.transferItemToLoc(D, src)) + return FALSE + to_chat(user, "You load \the [D] into \the [src].") + syringes += D + recharge_newshot() + return TRUE + else + to_chat(user, "[src] cannot hold more syringes!") + return FALSE \ No newline at end of file diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 9835b1df21..3dedaa9ae1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,313 +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 +/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) + 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 + 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 + 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 + 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 + new_y++ + while(pixel_y_offset < -16) + pixel_y_offset += 32 old_pixel_y += 32 - new_y-- + 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) + 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 + 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/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 7ef0d31561..4e85ee3299 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -190,7 +190,7 @@ name = "dart" icon_state = "cbbolt" damage = 6 - var/piercing = 0 + var/piercing = FALSE /obj/item/projectile/bullet/dart/New() ..() @@ -201,15 +201,15 @@ if(iscarbon(target)) var/mob/living/carbon/M = target if(blocked != 100) // not completely blocked - if(M.can_inject(null, 0, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. + if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..() reagents.reaction(M, INJECT) reagents.trans_to(M, reagents.total_volume) - return 1 + return TRUE else blocked = 100 - target.visible_message("The [name] was deflected!", \ - "You were protected against the [name]!") + target.visible_message("\The [src] was deflected!", \ + "You were protected against \the [src]!") ..(target, blocked) reagents.set_reacting(TRUE) @@ -240,7 +240,28 @@ nodamage = 1 . = ..() // Execute the rest of the code. +/obj/item/projectile/bullet/dnainjector + name = "\improper DNA injector" + icon_state = "syringeproj" + var/obj/item/weapon/dnainjector/injector + +/obj/item/projectile/bullet/dnainjector/on_hit(atom/target, blocked = 0) + if(iscarbon(target)) + var/mob/living/carbon/M = target + if(blocked != 100) + if(M.can_inject(null, FALSE, def_zone, FALSE)) + if(injector.inject(M, firer)) + QDEL_NULL(injector) + return TRUE + else + blocked = 100 + target.visible_message("\The [src] was deflected!", \ + "You were protected against \the [src]!") + return ..() +/obj/item/projectile/bullet/dnainjector/Destroy() + QDEL_NULL(injector) + return ..() //// SNIPER BULLETS diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index d2f78002a1..550b27cd11 100755 --- 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) @@ -82,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) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index d61217f006..1301665320 100755 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -298,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" @@ -306,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 92e01f4824..df8f7927c0 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -1,239 +1,239 @@ -/obj/item/weapon/reagent_containers/spray - name = "spray bottle" - desc = "A spray bottle, with an unscrewable top." - icon = 'icons/obj/janitor.dmi' - icon_state = "cleaner" - item_state = "cleaner" - flags = NOBLUDGEON - container_type = OPENCONTAINER - slot_flags = SLOT_BELT - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 7 - var/stream_mode = 0 //whether we use the more focused mode - var/current_range = 3 //the range of tiles the sprayer will reach. - var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode. - var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode. - var/stream_amount = 10 //the amount of reagents transfered when in stream mode. - amount_per_transfer_from_this = 5 - volume = 250 - possible_transfer_amounts = list(5,10,15,20,25,30,50,100) - - -/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user) - if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics)) - return - - if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution - if(!A.reagents.total_volume && A.reagents) - to_chat(user, "\The [A] is empty.") - return - - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "\The [src] is full.") - return - - var/trans = A.reagents.trans_to(src, 50) //transfer 50u , using the spray's transfer amount would take too long to refill - to_chat(user, "You fill \the [src] with [trans] units of the contents of \the [A].") - return - - if(reagents.total_volume < amount_per_transfer_from_this) - to_chat(user, "\The [src] is empty!") - return - - spray(A) - - playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6) - user.changeNext_move(CLICK_CD_RANGE*2) - user.newtonian_move(get_dir(A, user)) - var/turf/T = get_turf(src) +/obj/item/weapon/reagent_containers/spray + name = "spray bottle" + desc = "A spray bottle, with an unscrewable top." + icon = 'icons/obj/janitor.dmi' + icon_state = "cleaner" + item_state = "cleaner" + flags = NOBLUDGEON + container_type = OPENCONTAINER + slot_flags = SLOT_BELT + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 7 + var/stream_mode = 0 //whether we use the more focused mode + var/current_range = 3 //the range of tiles the sprayer will reach. + var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode. + var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode. + var/stream_amount = 10 //the amount of reagents transfered when in stream mode. + amount_per_transfer_from_this = 5 + volume = 250 + possible_transfer_amounts = list(5,10,15,20,25,30,50,100) + + +/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user) + if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics)) + return + + if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution + if(!A.reagents.total_volume && A.reagents) + to_chat(user, "\The [A] is empty.") + return + + if(reagents.total_volume >= reagents.maximum_volume) + to_chat(user, "\The [src] is full.") + return + + var/trans = A.reagents.trans_to(src, 50) //transfer 50u , using the spray's transfer amount would take too long to refill + to_chat(user, "You fill \the [src] with [trans] units of the contents of \the [A].") + return + + if(reagents.total_volume < amount_per_transfer_from_this) + to_chat(user, "\The [src] is empty!") + return + + spray(A) + + playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6) + 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")) + if(reagents.has_reagent("sacid")) 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")) + if(reagents.has_reagent("facid")) 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")) + if(reagents.has_reagent("lube")) 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 - - -/obj/item/weapon/reagent_containers/spray/proc/spray(atom/A) - var/range = max(min(current_range, get_dist(src, A)), 1) - var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src)) - D.create_reagents(amount_per_transfer_from_this) - var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed - if(stream_mode) - reagents.trans_to(D, amount_per_transfer_from_this) - puff_reagent_left = 1 - else - reagents.trans_to(D, amount_per_transfer_from_this, 1/range) - D.color = mix_color_from_reagents(D.reagents.reagent_list) - var/wait_step = max(round(2+3/range), 2) - spawn(0) - var/range_left = range - for(var/i=0, i 0 && (!stream_mode || !range_left)) - D.reagents.reaction(get_turf(D), VAPOR) - puff_reagent_left -= 1 - - if(puff_reagent_left <= 0) // we used all the puff so we delete it. - qdel(D) - return - qdel(D) - -/obj/item/weapon/reagent_containers/spray/attack_self(mob/user) - stream_mode = !stream_mode - if(stream_mode) - amount_per_transfer_from_this = stream_amount - current_range = stream_range - else - amount_per_transfer_from_this = initial(amount_per_transfer_from_this) - current_range = spray_range - to_chat(user, "You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.") - -/obj/item/weapon/reagent_containers/spray/verb/empty() - set name = "Empty Spray Bottle" - set category = "Object" - set src in usr - if(usr.incapacitated()) - return - if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes") - return - if(isturf(usr.loc) && src.loc == usr) - to_chat(usr, "You empty \the [src] onto the floor.") - reagents.reaction(usr.loc) - src.reagents.clear_reagents() - -//space cleaner -/obj/item/weapon/reagent_containers/spray/cleaner - name = "space cleaner" - desc = "BLAM!-brand non-foaming space cleaner!" - list_reagents = list("cleaner" = 250) - -//spray tan -/obj/item/weapon/reagent_containers/spray/spraytan - name = "spray tan" - volume = 50 - desc = "Gyaro brand spray tan. Do not spray near eyes or other orifices." - list_reagents = list("spraytan" = 50) - - -/obj/item/weapon/reagent_containers/spray/medical - name = "medical spray" - icon = 'icons/obj/chemical.dmi' - icon_state = "medspray" - volume = 100 - - -/obj/item/weapon/reagent_containers/spray/medical/sterilizer - name = "sterilizer spray" - desc = "Spray bottle loaded with non-toxic sterilizer. Useful in preparation for surgery." - list_reagents = list("sterilizine" = 100) - - -//pepperspray -/obj/item/weapon/reagent_containers/spray/pepper - name = "pepperspray" - desc = "Manufactured by UhangInc, used to blind and down an opponent quickly." - icon = 'icons/obj/weapons.dmi' - icon_state = "pepperspray" - item_state = "pepperspray" - volume = 40 - stream_range = 4 - amount_per_transfer_from_this = 5 - list_reagents = list("condensedcapsaicin" = 40) - -// Fix pepperspraying yourself -/obj/item/weapon/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user) - if (A.loc == user) - return - ..() - -//water flower -/obj/item/weapon/reagent_containers/spray/waterflower - name = "water flower" - desc = "A seemingly innocent sunflower...with a twist." - icon = 'icons/obj/hydroponics/harvest.dmi' - icon_state = "sunflower" - item_state = "sunflower" - amount_per_transfer_from_this = 1 - volume = 10 - list_reagents = list("water" = 10) - -/obj/item/weapon/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays - return - -//chemsprayer -/obj/item/weapon/reagent_containers/spray/chemsprayer - name = "chem sprayer" - desc = "A utility used to spray large amounts of reagents in a given area." - icon = 'icons/obj/guns/projectile.dmi' - icon_state = "chemsprayer" - item_state = "chemsprayer" - throwforce = 0 - w_class = WEIGHT_CLASS_NORMAL - stream_mode = 1 - current_range = 7 - spray_range = 4 - stream_range = 7 - amount_per_transfer_from_this = 10 - volume = 600 - origin_tech = "combat=3;materials=3;engineering=3" - -/obj/item/weapon/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user) - // Make it so the bioterror spray doesn't spray yourself when you click your inventory items - if (A.loc == user) - return - ..() - -/obj/item/weapon/reagent_containers/spray/chemsprayer/spray(atom/A) - var/direction = get_dir(src, A) - var/turf/T = get_turf(A) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - var/list/the_targets = list(T,T1,T2) - - for(var/i=1, i<=3, i++) // intialize sprays - if(reagents.total_volume < 1) - return - ..(the_targets[i]) - -/obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror - list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) - -// Plant-B-Gone -/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie - name = "Plant-B-Gone" - desc = "Kills those pesky weeds!" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "plantbgone" - item_state = "plantbgone" - volume = 100 - list_reagents = list("plantbgone" = 100) + return + + +/obj/item/weapon/reagent_containers/spray/proc/spray(atom/A) + var/range = max(min(current_range, get_dist(src, A)), 1) + var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src)) + D.create_reagents(amount_per_transfer_from_this) + var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed + if(stream_mode) + reagents.trans_to(D, amount_per_transfer_from_this) + puff_reagent_left = 1 + else + reagents.trans_to(D, amount_per_transfer_from_this, 1/range) + D.color = mix_color_from_reagents(D.reagents.reagent_list) + var/wait_step = max(round(2+3/range), 2) + spawn(0) + var/range_left = range + for(var/i=0, i 0 && (!stream_mode || !range_left)) + D.reagents.reaction(get_turf(D), VAPOR) + puff_reagent_left -= 1 + + if(puff_reagent_left <= 0) // we used all the puff so we delete it. + qdel(D) + return + qdel(D) + +/obj/item/weapon/reagent_containers/spray/attack_self(mob/user) + stream_mode = !stream_mode + if(stream_mode) + amount_per_transfer_from_this = stream_amount + current_range = stream_range + else + amount_per_transfer_from_this = initial(amount_per_transfer_from_this) + current_range = spray_range + to_chat(user, "You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.") + +/obj/item/weapon/reagent_containers/spray/verb/empty() + set name = "Empty Spray Bottle" + set category = "Object" + set src in usr + if(usr.incapacitated()) + return + if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes") + return + if(isturf(usr.loc) && src.loc == usr) + to_chat(usr, "You empty \the [src] onto the floor.") + reagents.reaction(usr.loc) + src.reagents.clear_reagents() + +//space cleaner +/obj/item/weapon/reagent_containers/spray/cleaner + name = "space cleaner" + desc = "BLAM!-brand non-foaming space cleaner!" + list_reagents = list("cleaner" = 250) + +//spray tan +/obj/item/weapon/reagent_containers/spray/spraytan + name = "spray tan" + volume = 50 + desc = "Gyaro brand spray tan. Do not spray near eyes or other orifices." + list_reagents = list("spraytan" = 50) + + +/obj/item/weapon/reagent_containers/spray/medical + name = "medical spray" + icon = 'icons/obj/chemical.dmi' + icon_state = "medspray" + volume = 100 + + +/obj/item/weapon/reagent_containers/spray/medical/sterilizer + name = "sterilizer spray" + desc = "Spray bottle loaded with non-toxic sterilizer. Useful in preparation for surgery." + list_reagents = list("sterilizine" = 100) + + +//pepperspray +/obj/item/weapon/reagent_containers/spray/pepper + name = "pepperspray" + desc = "Manufactured by UhangInc, used to blind and down an opponent quickly." + icon = 'icons/obj/weapons.dmi' + icon_state = "pepperspray" + item_state = "pepperspray" + volume = 40 + stream_range = 4 + amount_per_transfer_from_this = 5 + list_reagents = list("condensedcapsaicin" = 40) + +// Fix pepperspraying yourself +/obj/item/weapon/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user) + if (A.loc == user) + return + ..() + +//water flower +/obj/item/weapon/reagent_containers/spray/waterflower + name = "water flower" + desc = "A seemingly innocent sunflower...with a twist." + icon = 'icons/obj/hydroponics/harvest.dmi' + icon_state = "sunflower" + item_state = "sunflower" + amount_per_transfer_from_this = 1 + volume = 10 + list_reagents = list("water" = 10) + +/obj/item/weapon/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays + return + +//chemsprayer +/obj/item/weapon/reagent_containers/spray/chemsprayer + name = "chem sprayer" + desc = "A utility used to spray large amounts of reagents in a given area." + icon = 'icons/obj/guns/projectile.dmi' + icon_state = "chemsprayer" + item_state = "chemsprayer" + throwforce = 0 + w_class = WEIGHT_CLASS_NORMAL + stream_mode = 1 + current_range = 7 + spray_range = 4 + stream_range = 7 + amount_per_transfer_from_this = 10 + volume = 600 + origin_tech = "combat=3;materials=3;engineering=3" + +/obj/item/weapon/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user) + // Make it so the bioterror spray doesn't spray yourself when you click your inventory items + if (A.loc == user) + return + ..() + +/obj/item/weapon/reagent_containers/spray/chemsprayer/spray(atom/A) + var/direction = get_dir(src, A) + var/turf/T = get_turf(A) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) + var/list/the_targets = list(T,T1,T2) + + for(var/i=1, i<=3, i++) // intialize sprays + if(reagents.total_volume < 1) + return + ..(the_targets[i]) + +/obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror + list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) + +// Plant-B-Gone +/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie + name = "Plant-B-Gone" + desc = "Kills those pesky weeds!" + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "plantbgone" + item_state = "plantbgone" + volume = 100 + list_reagents = list("plantbgone" = 100) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 54984227ad..834b79d4dc 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -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/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index af1d942e90..7319e507ae 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -115,28 +115,12 @@ 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 @@ -163,14 +147,6 @@ 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" id = "s_holster" @@ -179,30 +155,6 @@ 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" id = "rice_hat" 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/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/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 b28d388b29..c9f2ee6360 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -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." @@ -113,7 +113,7 @@ 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.") @@ -121,9 +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 @@ -143,6 +143,7 @@ has_id = 1 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) + faction = list("syndicate") /obj/effect/mob_spawn/human/lavaland_syndicate/comms name = "Syndicate Comms Agent" diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index b846098fc4..a5226abd58 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -1,33 +1,33 @@ -/obj/machinery/computer/shuttle/ferry - name = "transport ferry console" - circuit = /obj/item/weapon/circuitboard/computer/ferry - shuttleId = "ferry" - possible_destinations = "ferry_home;ferry_away" - req_access = list(GLOB.access_cent_general) - - var/aiControlDisabled = 1 - -/obj/machinery/computer/shuttle/ferry/proc/canAIControl(mob/user) - return ((aiControlDisabled != 1)); - -/obj/machinery/computer/shuttle/ferry/attack_ai(mob/user) - if(!src.canAIControl(user)) - return - -/obj/machinery/computer/shuttle/ferry/request - name = "ferry console" - circuit = /obj/item/weapon/circuitboard/computer/ferry/request - var/last_request //prevents spamming admins - var/cooldown = 600 - possible_destinations = "ferry_home;ferry_away" - req_access = list(GLOB.access_cent_general) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - -/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list) - ..() - if(href_list["request"]) - if(last_request && (last_request + cooldown > world.time)) - return - last_request = world.time - to_chat(usr, "Your request has been recieved by Centcom.") +/obj/machinery/computer/shuttle/ferry + name = "transport ferry console" + circuit = /obj/item/weapon/circuitboard/computer/ferry + shuttleId = "ferry" + possible_destinations = "ferry_home;ferry_away" + req_access = list(GLOB.access_cent_general) + + var/aiControlDisabled = 1 + +/obj/machinery/computer/shuttle/ferry/proc/canAIControl(mob/user) + return ((aiControlDisabled != 1)); + +/obj/machinery/computer/shuttle/ferry/attack_ai(mob/user) + if(!src.canAIControl(user)) + return + +/obj/machinery/computer/shuttle/ferry/request + name = "ferry console" + circuit = /obj/item/weapon/circuitboard/computer/ferry/request + var/last_request //prevents spamming admins + var/cooldown = 600 + possible_destinations = "ferry_home;ferry_away" + req_access = list(GLOB.access_cent_general) + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + +/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list) + ..() + if(href_list["request"]) + if(last_request && (last_request + cooldown > world.time)) + return + last_request = world.time + to_chat(usr, "Your request has been recieved by 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/shuttle.dm b/code/modules/shuttle/shuttle.dm index 656ba24da6..a5d60b1e8d 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -754,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 597f3185a4..b06f69c189 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -21,6 +21,10 @@ return if(active) msg = "[deactive_msg]" + if(charge_type == "recharge") + var/refund_percent = current_amount/projectile_amount + charge_counter = charge_max * refund_percent + start_recharge() remove_ranged_ability(msg) else msg = "[active_msg]Left-click to shoot it at a target!" @@ -36,12 +40,12 @@ /obj/effect/proc_holder/spell/aimed/InterceptClickOn(mob/living/caller, params, atom/target) if(..()) return FALSE - var/ignore = (current_amount >= 1) - 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 +56,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/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 76f5b9b307..b8296a1da5 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -1,74 +1,74 @@ -/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/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" @@ -87,279 +87,279 @@ 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/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/organs/ears.dm b/code/modules/surgery/organs/ears.dm index e66346a2c8..fd6a3466bd 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -15,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/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 e817557cc2..b4154c8e9c 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -51,7 +51,7 @@ if(C.getorganslot("adamantine_resonator")) to_chat(C, msg) if(isobserver(m)) - var/link = FOLLOW_LINK(m, src) + var/link = FOLLOW_LINK(m, owner) to_chat(m, "[link] [msg]") //Colossus drop, forces the listeners to obey certain commands @@ -181,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 @@ -362,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/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 98aa41e88f..3f5b4b4ca4 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -929,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. \ @@ -969,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 \ @@ -1249,6 +1276,14 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. restricted_roles = list("Chaplain") surplus = 5 //Very low chance to get it in a surplus crate even without being the chaplain +/datum/uplink_item/role_restricted/pie_cannon + name = "Banana Cream Pie Cannon" + desc = "A special pie cannon for a special clown, this gadget can hold up to 20 pies and automatically fabricates one every two seconds!" + cost = 10 + item = /obj/item/weapon/pneumatic_cannon/pie/selfcharge + restricted_roles = list("Clown") + surplus = 0 //No fun unless you're the clown! + /datum/uplink_item/role_restricted/ancient_jumpsuit name = "Ancient Jumpsuit" desc = "A tattered old jumpsuit that will provide absolutely no benefit to you. It fills the wearer with a strange compulsion to blurt out 'glorf'." @@ -1264,6 +1299,13 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 2 restricted_roles = list("Curator") limited_stock = 1 // please don't spam deadchat + +/datum/uplink_item/role_restricted/modified_syringe_gun + name = "Modified Syringe Gun" + desc = "A syringe gun that fires DNA injectors instead of normal syringes." + item = /obj/item/weapon/gun/syringe/dna + cost = 14 + restricted_roles = list("Geneticist", "Chief Medical Officer") // Pointless /datum/uplink_item/badass diff --git a/code/modules/uplink/uplink_item_cit.dm b/code/modules/uplink/uplink_item_cit.dm index b835a21a8c..332254aa37 100644 --- a/code/modules/uplink/uplink_item_cit.dm +++ b/code/modules/uplink/uplink_item_cit.dm @@ -16,6 +16,7 @@ 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 + cost = 15 //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 + exclude_modes = list(/datum/game_mode/nuclear) + refund_path = /obj/item/weapon/guardiancreator/tech/choose/traitor \ 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/world.dm b/code/world.dm index 4489b9a1cb..b8fbd4eddf 100644 --- a/code/world.dm +++ b/code/world.dm @@ -32,7 +32,7 @@ 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")]") + var/datum/DBQuery/query_feedback_create_round = SSdbcore.NewQuery("INSERT INTO [format_table_name("feedback")] SELECT null, Now(), IFNULL(MAX(round_id),0)+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() @@ -54,17 +54,19 @@ 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() load_menu() -//disabled to prevent runtimes until it's fixed -// load_mentors() if(config.usewhitelist) load_whitelist() +//disabled to prevent runtimes until it's fixed +// load_mentors() LoadBans() GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 @@ -205,6 +207,7 @@ #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) @@ -237,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]") @@ -280,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.world_game_log << "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") @@ -344,7 +347,3 @@ s += ": [jointext(features, ", ")]" status = s - - -/world/proc/has_round_started() - return SSticker.HasRoundStarted() 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/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-1029.yml b/html/changelogs/AutoChangeLog-pr-1029.yml new file mode 100644 index 0000000000..5557069616 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1029.yml @@ -0,0 +1,4 @@ +author: "Lordpidey" +delete-after: True +changes: + - rscadd: "Toy toolboxes with realistic rumbling action have been added to arcade prizes." diff --git a/html/changelogs/AutoChangeLog-pr-1030.yml b/html/changelogs/AutoChangeLog-pr-1030.yml new file mode 100644 index 0000000000..40e5e1abd0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1030.yml @@ -0,0 +1,4 @@ +author: "Tacolizard Forever: Plasmaman Powercreep" +delete-after: True +changes: + - tweak: "Plasmaman tanks are the same size as emergency oxygen tanks." diff --git a/html/changelogs/AutoChangeLog-pr-1031.yml b/html/changelogs/AutoChangeLog-pr-1031.yml new file mode 100644 index 0000000000..bb9c78ddb3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1031.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Peacekeeper cyborgs now have projectile dampening fields." diff --git a/html/changelogs/AutoChangeLog-pr-1037.yml b/html/changelogs/AutoChangeLog-pr-1037.yml new file mode 100644 index 0000000000..ac36de1da2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1037.yml @@ -0,0 +1,4 @@ +author: "Lordpidey" +delete-after: True +changes: + - tweak: "Space ninjas now use action buttons instead of verbs for a more consistent user experience." diff --git a/html/changelogs/AutoChangeLog-pr-1038.yml b/html/changelogs/AutoChangeLog-pr-1038.yml new file mode 100644 index 0000000000..85daa80c5e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1038.yml @@ -0,0 +1,8 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Various vending machines, when shooting their inventory at nearby +people, will \"demonstrate their products features\". This means that if a +cigarette vending machine throws a lighter at you, it will be on. +Vending machines also choose random products when throwing, rather than +the first available one." diff --git a/html/changelogs/AutoChangeLog-pr-1040.yml b/html/changelogs/AutoChangeLog-pr-1040.yml new file mode 100644 index 0000000000..55633298a8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1040.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Proselytizing alloy shards will now proselytize all the shards in the tile, instead of requiring you to proselytize each one at a time." diff --git a/html/changelogs/AutoChangeLog-pr-1054.yml b/html/changelogs/AutoChangeLog-pr-1054.yml new file mode 100644 index 0000000000..130e19fc5c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1054.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Golems touching a shell can now choose to stay in their own body." diff --git a/html/changelogs/AutoChangeLog-pr-1056.yml b/html/changelogs/AutoChangeLog-pr-1056.yml new file mode 100644 index 0000000000..abf47dddbb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1056.yml @@ -0,0 +1,4 @@ +author: "Swindly" +delete-after: True +changes: + - rscadd: "Added modified syringe guns. They fire DNA injectors. Geneticists and CMOs can buy them from the traitor uplink for 14 TC." diff --git a/html/changelogs/AutoChangeLog-pr-1060.yml b/html/changelogs/AutoChangeLog-pr-1060.yml new file mode 100644 index 0000000000..e797599263 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1060.yml @@ -0,0 +1,4 @@ +author: "Steelpoint" +delete-after: True +changes: + - rscadd: "All Pulse weapons now accurately show, by their sprites, what fire mode they are in." diff --git a/html/changelogs/AutoChangeLog-pr-1062.yml b/html/changelogs/AutoChangeLog-pr-1062.yml new file mode 100644 index 0000000000..336fd619aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1062.yml @@ -0,0 +1,4 @@ +author: "LetterJay" +delete-after: True +changes: + - bugfix: "Cryo should now properly utilize chems as well as freeze the occupant." diff --git a/html/changelogs/AutoChangeLog-pr-1067.yml b/html/changelogs/AutoChangeLog-pr-1067.yml new file mode 100644 index 0000000000..ab6277afb7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1067.yml @@ -0,0 +1,4 @@ +author: "Gun Hog" +delete-after: True +changes: + - bugfix: "The Auxiliary Base can no longer land outside the lavaland map's boundaries." diff --git a/html/changelogs/AutoChangeLog-pr-1075.yml b/html/changelogs/AutoChangeLog-pr-1075.yml new file mode 100644 index 0000000000..d3fe3a44bf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1075.yml @@ -0,0 +1,4 @@ +author: "RandomMarine" +delete-after: True +changes: + - tweak: "Drone laws no longer restrict drones to the station." 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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-994.yml b/html/changelogs/AutoChangeLog-pr-994.yml new file mode 100644 index 0000000000..bcda6769f3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-994.yml @@ -0,0 +1,6 @@ +author: "Robustin" +delete-after: True +changes: + - rscadd: "Summoning Nar'Sie now triggers a different ending. No shuttle is coming! Survivors must escape on a pod or survive the Red Harvest for 3 minutes. If Nar'Sie acquires enough souls, the round ends immediately with a **special ending**." + - rscadd: "New Harvester Sprite" + - rscadd: "Harvesters can now track a random survivor on the station, then switch back to tracking Nar'Sie, via a new action button." 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/cult_effects.dmi b/icons/effects/cult_effects.dmi new file mode 100644 index 0000000000..58a2d3c9c9 Binary files /dev/null and b/icons/effects/cult_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..eab44acdd7 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/fields.dmi b/icons/effects/fields.dmi new file mode 100644 index 0000000000..5eadb96a1a Binary files /dev/null and b/icons/effects/fields.dmi differ diff --git a/icons/effects/station_explosion.dmi b/icons/effects/station_explosion.dmi index 7dcab37710..bddc66e137 100644 Binary files a/icons/effects/station_explosion.dmi and b/icons/effects/station_explosion.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..7f6f85b004 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.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/mob.dmi b/icons/mob/mob.dmi index 95b5721d5a..72aa86f600 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 46666cdd5f..13f16aae59 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/clockwork_objects.dmi b/icons/obj/clockwork_objects.dmi index 4b52f33205..a7c80ba536 100644 Binary files a/icons/obj/clockwork_objects.dmi and b/icons/obj/clockwork_objects.dmi differ diff --git a/icons/obj/clothing/cit_hats.dmi b/icons/obj/clothing/cit_hats.dmi index f9bf2a7a03..25a03dc97e 100644 Binary files a/icons/obj/clothing/cit_hats.dmi and b/icons/obj/clothing/cit_hats.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/doors/airlocks/survival/horizontal/survival.dmi b/icons/obj/doors/airlocks/survival/horizontal/survival.dmi deleted file mode 100644 index 5dbe3de771..0000000000 Binary files a/icons/obj/doors/airlocks/survival/horizontal/survival.dmi and /dev/null differ diff --git a/icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi b/icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi deleted file mode 100644 index 9bdb3be3cd..0000000000 Binary files a/icons/obj/doors/airlocks/survival/horizontal/survival_overlays.dmi and /dev/null differ diff --git a/icons/obj/doors/airlocks/survival/survival.dmi b/icons/obj/doors/airlocks/survival/survival.dmi new file mode 100644 index 0000000000..f96d174c47 Binary files /dev/null and b/icons/obj/doors/airlocks/survival/survival.dmi differ diff --git a/icons/obj/doors/airlocks/survival/survival_overlays.dmi b/icons/obj/doors/airlocks/survival/survival_overlays.dmi new file mode 100644 index 0000000000..e8bede8217 Binary files /dev/null and b/icons/obj/doors/airlocks/survival/survival_overlays.dmi differ diff --git a/icons/obj/doors/airlocks/survival/vertical/survival.dmi b/icons/obj/doors/airlocks/survival/vertical/survival.dmi deleted file mode 100644 index c5063da5a0..0000000000 Binary files a/icons/obj/doors/airlocks/survival/vertical/survival.dmi and /dev/null differ diff --git a/icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi b/icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi deleted file mode 100644 index 26d0c0d403..0000000000 Binary files a/icons/obj/doors/airlocks/survival/vertical/survival_overlays.dmi and /dev/null differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 3916befb12..71b1474a66 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.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/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/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/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/turf/dirt.dmi b/icons/turf/dirt.dmi new file mode 100644 index 0000000000..4f533a6228 Binary files /dev/null and b/icons/turf/dirt.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 65407cef0e..02adcb7726 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1,1709 +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 = "&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 = "" +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 - + +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/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/storage.dmi b/storage.dmi new file mode 100644 index 0000000000..91055cc42c Binary files /dev/null and b/storage.dmi differ diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index 531fb00530..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;-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 +@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 129d3e1eb8..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;o2?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}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);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}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);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}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);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}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("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)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("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}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),p=t(18),u=t(27),c=t(42),l=t(44),f=t(82)("id"),d=t(30),h=t(38),m=t(65),v=t(19),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)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);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}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),p=t(27),u=t(8),c=t(30),l=t(82)("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}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),p=t(69),u=t(38),c=t(24),l=t(43),f=t(66);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,C=k[b](m?{}:-0,1)!=k,P=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)}),(P||w)&&(x("delete"),x("has"),h&&x("get")),(w||C)&&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}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);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)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);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}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),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},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);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)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);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}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),p=t(84);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)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).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))}},{46:46,78:78}],29:[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)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[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)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);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}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),p=t(45),u=t(41),c=t(66),l=t(46).getProto,f=t(83)("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,C=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)}},P=e+" Iterator",E=y==v,S=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||C(y);if(O){var M=l(T.call(new t));c(M,P,!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[P]=g,y)if(w={values:E?T:C(v),keys:_?T:C(m),entries:E?C("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}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("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(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[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}},{}],47:[function(t,e,n){var a=t(46),r=t(78);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}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[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}},{}],50:[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)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,p=o.MutationObserver||o.WebKitMutationObserver,u=o.process,c=o.Promise,l="process"==t(11)(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}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(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},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);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)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),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}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);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)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],p=(""+s).split(o);t(16).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)})},{16:16,29:29,31:31,82:82}],62:[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)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),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(17)(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}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("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)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);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)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);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}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);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}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),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},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),p=t(32),u=t(20),c=t(29),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(11)(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}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[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)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);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")}},{38:38}],82:[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))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),p=t(32),u=t(20),c=t(30),l=t(11),f=t(33),d=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),_=t(76),x=t(79),w=t(34),k=t(82)("__proto__"),C=t(8),P=t(7)(!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/tgstation-server/Fix Errors.bat b/tools/tgstation-server/Fix Errors.bat new file mode 100644 index 0000000000..bbe540c82c --- /dev/null +++ b/tools/tgstation-server/Fix Errors.bat @@ -0,0 +1,24 @@ +@echo off +title Automated Error Fixer. +echo This will reset some things, the byond server (DreamDaemon) and the start server script must not be running. Some error messages are normal. +echo You will be prompted to press any key 3 times +pause +pause +pause +cls +echo Resetting folders +mkdir gamecode\a +mkdir gamecode\b +del /S /F /Q gamefolder >nul 2>nul +rmdir /S /q gamefolder +mklink /d gamefolder gamecode\a +call bin\findab.bat +cls +echo Re-Initializing code +call bin\copyfromgit.bat +cls +echo Recompiling the game. If you plan to update or testmerge you can just close this program now and continue. +call bin\build.bat +cls +echo Done! (hopefully) +pause \ No newline at end of file diff --git a/tools/tgstation-server/Merge pr without updating.bat b/tools/tgstation-server/Merge pr without updating.bat new file mode 100644 index 0000000000..da4e023477 --- /dev/null +++ b/tools/tgstation-server/Merge pr without updating.bat @@ -0,0 +1,112 @@ +@echo off +@title Server Updater +SETLOCAL ENABLEDELAYEDEXPANSION +set HOME = %USERPROFILE% + +call config.bat +rem if the first arg to nudge.py is not a channel, it is treated as the "source" +if not defined UPDATE_LOG_CHANNEL set UPDATE_LOG_CHANNEL="UPDATER" +call bin\getcurdate.bat +call bin\findgit.bat +echo This will handle merging a pr locally, compiling the server, and applying the PR test job. + +:PROMPT +SET /P UserInput=Please enter the pr number (without a # or anything of the sorts): +SET /A PR=UserInput + +if %PR% EQU %UserInput% ( + if %PR% GTR 0 ( + echo updating to pr %PR% + ) else ( + echo Bad input + goto PROMPT + ) +) else ( + echo Bad input + goto PROMPT +) +if exist updating.lk ( + echo ERROR: A current update script has been detected running. if you know this is a mistake: + pause + echo Please be double sure that an update script is not currently running, if you think one might be, close this window. otherwise: + pause +) + +echo lock>updating.lk + +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "PR test job started. Merging PR #%PR% locally" >nul 2>nul + + +cd gitrepo +git fetch origin pull/%PR%/head:pr-%PR% +if %ERRORLEVEL% neq 0 ( + cd .. + echo git fetch failed. Aborting test merge. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Git fetch failed. Aborting test merge" + del updating.lk >nul 2>nul + pause + exit /b 1 +) +git merge pr-%PR% +if %ERRORLEVEL% neq 0 ( + cd .. + echo git merge of PR #%PR% failed. Aborting test merge + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "git merge of PR #%PR% failed. Aborting PR test merge" >nul 2>nul + cd gitrepo + git merge --abort + if !ERRORLEVEL! neq 0 ( + echo ERROR: Error aborting test merge, resetting repo. + cd .. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Error aborting test merge, resetting git repo to head" >nul 2>nul + cd gitrepo + git reset --hard + git clean -fd + bin/activepr.bat + del /F /Q prtestjob.lk >nul 2>nul + echo NOTICE: We had to reset the repo's state, all other active test merges were undone. + ) + cd .. + del updating.lk >nul 2>nul + pause + exit /b 1 +) +cd .. + +echo %PR%>>prtestjob.lk +> bin/activepr.bat + +echo ################################## +echo ################################## +echo: +echo Test merging pr done, compiling in 10 seconds. If you want to preform other actions (like more test merges) You can close this now and do them. +echo: +del updating.lk >nul 2>nul + +timeout 10 + +echo lock>updating.lk +call bin\findab.bat + +call bin\copyfromgit.bat + +echo compiling change log +cd gamecode\%AB% +call python tools\ss13_genchangelog.py html/changelog.html html/changelogs +cd ..\.. + +echo Compiling game. +call bin\build.bat +if %DM_EXIT% neq 0 ( + echo DM compile failed. Aborting. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed. Aborting test merge." >nul 2>nul + del /F /Q updating.lk >nul 2>nul + pause + exit /b 1 +) + +del updating.lk >nul 2>nul +rmdir /q gamefolder +mklink /d gamefolder gamecode\%AB% >nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Test merge job finished. Test merge will take place next round." >nul 2>nul +echo Done. The test merge will automatically take place at round restart. +timeout 300 \ No newline at end of file diff --git a/tools/tgstation-server/OnServerBoot.bat b/tools/tgstation-server/OnServerBoot.bat new file mode 100644 index 0000000000..db1f5cc230 --- /dev/null +++ b/tools/tgstation-server/OnServerBoot.bat @@ -0,0 +1,47 @@ +@echo off +title Server Boot Detected. +echo This script is only meant to start byond when the server first boots, do not manually run this. +echo If you manually ran this, close this window NOW. +timeout 15 +start cmd /c "Start Bot.bat" +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Prepping code +mkdir gamecode\a +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Prepping code +mkdir gamecode\b +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Prepping code +del /S /F /Q gamefolder >nul 2>nul +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Prepping code +rmdir /S /q gamefolder +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Prepping code +mklink /d gamefolder gamecode\a +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Prepping code +call bin\findab.bat +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Re-Initializing code +call bin\copyfromgit.bat +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Re-Initializing code +cls +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Compiling the game. If you plan to update or testmerge you can just close this program now and continue. +call bin\build.bat +cls +echo Server boot detected. Starting byond and Space Station 13. +echo Starting server and bot. +start cmd /c "Start Server.bat" +timeout 10 \ No newline at end of file diff --git a/tools/tgstation-server/README.md b/tools/tgstation-server/README.md new file mode 100644 index 0000000000..10831fd461 --- /dev/null +++ b/tools/tgstation-server/README.md @@ -0,0 +1,111 @@ +# Tgstation Toolkit: +This is a toolset to manage a production server of /tg/Station13 (and its forks). It includes an update script that is able to update the server without having to stop or shutdown the server (the update will take effect next round) and a script to start the server and restart it if it crashes (optional, requires registry tweaks to disable the Windows crash dialog system wide) as well as systems for fixing errors and merging GitHub Pull Requests locally. + +Generally, updates force a live tracking of the configured git repo, resetting local modifications. If you plan to make modifications, set up a new git repo to store your version of the code in, and point this script to that in the config (explained below). This can be on github or a local repo using file:/// urls. + +These tools require UAC to be disabled. (There has been limited luck getting it to work under UAC on windows 10 using run as admin, but in other versions of windows, running as admin resets the current directory and this breaks things) +(Note: There is no security risk to disabling UAC because UAC is not a security boundary, there exists active unpatched exploits against it that have been around since vista and work up to windows 10) + +## Install: +1. Move this folder to where you want your server to run from (you may also rename this folder if you wish) +1. Right click on `config.bat` and select `Edit`. +1. Configure the port, git repo, and other setting, You may configure the location of git, but if you installed using git for windows, we will auto detect it if its not in path. +1. You may also need to change the location of the git repo url, and if you renamed your `dme`/"dream maker environment" file, you will need to change the project name configuration setting to be the name of your dme minus the extension (eg: if you renamed `tgstation.dme` to `ntstation.dme`, project name should be set to `ntstation` +1. Finally, run install.bat and hope for no error. + * It will clone the git repo, setup some folders, and add cross reference links everywhere. + +### Optional: +If you plan to use the `Start Server.bat` script to start the server and restart it if it crashes, you need to run the `disable crash dialog.reg` registry script to disable the "program.exe has stopped working" dialog. This will get disabled system wide so if you rely on this dialog, you should skip this step. + +## Usage: +### Folders: +* `gamecode/` + * This will house two copies of the game code, one for updating and one for live. When updating, it will automatically swap them. + +* `gamedata/` + * This contains the `data/` and `config/` folders from the code. They are stored here and a symbolic link is created in the `gamecode/` folders pointing to here. + * This also makes backing them up easy. +(you may copy and paste your existing `data/` and `config/` folders here after the install script has ran.) + +* `bot/` + * This is a copy of the bot folder. you should run the bot from here.a link to nudge.py is created in the code folders so that the game can use the announcement feature. + * The start server script and update script will send messages out thru the bot, but if its not running or python is not installed, they will gracefully continue what they are doing. + +* `gamefolder/` + * This is a symbolic link pointing to current "live" folder. + * When the server is updated, we just point this to the updating folder so that the update takes place next round. + +* `gitrepo/` + * This contains the actual git repository, all changes in here will be overwritten during update operations, the configured branch will always be forced to track from live. + * On the first update of the day, the current code state is saved to a branch called `backup-YYYY-MM-DD` before updating, to make local reverts easy. + * Following update operations on the same day do not make branches because I was too lazy to detect such edge cases. + +* `bin/` + * This contains random helper batch files. + * Running these on their own is a bad idea. + +### Starting the game server: +To run the game server, Run `Start Server.bat` + +It will restart the game server if it shutdowns for any reason, with delays if the game server had recently been (re)started. + + +### Updating the server: +To update the server, just run `Update Server.bat`. (it will git pull, compile, all that jazz) + +(Note: Updating automatically does a code reset, clearing ALL changes to the local git repo, including test merges (explained below) and manual changes (This will not change any configs/settings or clear any data in the `gamedata/` folder)) + +Updates do not require the server to be shutdown, changes will apply next round if the server is currently running. + +Updates create a branch with the current state of the repo called `backup-YYYY-MM-DD` (only one is created in any given day) + +There is also a `Update without resetting.bat` file that does the same without resetting the code, used to update without clearing test merges or local changes. Prone to merge conflicts. + + +### Locally merge GitHub Pull Requests (PR test merge): +This feature currently only works if github is the remote(git server), it could be adapted for gitlab as well. + +Running these will merge the pull request then recompile the server, changes take effect the next round if the server is currently running. + +There are multiple flavors: +* `Update To PR.bat` + * Updates the server, resetting state, and merges a PR(Pull Request) by number. +* `Merge PR Without Updating.bat` + * Merges a PR without updating the server before hand or resetting the state (can be used to test merge multiple PRs). + +You can clear all active test merges using `Reset and Recompile.bat` (explained below) + +### Resetting, Recompiling, and troubleshooting. +* `Recompile.bat` + * Just recompiles the game code and stages it to apply next round +* `Reset and Recompile.bat` + * Like the above but resets the git repo to the state of the last update operation (clearing any changes or test merges) (Does not reset `gamedata/` data/settings) + * Generally used to clear out test merges +* `Fix Errors.bat` + * Requires the server not be running, rebuilds the staging A/B folders and then does all of the above. (Used to fix errors that can prevent the server from starting or cause it to crash on reboot) + +### Using the bot +1. Install python 3 +1. Edit the config in `bot/` as needed +1. Start the bot using the `Start Bot.bat` file + + +### Starting everything when the computer/server boots +1. Use autologin to set it up so the user account logs in at boot + * (There are some security implications with doing this, this is only a tiny bit more secure then putting a file on the hard drive with the server's remote login password titled `totally not a password.txt`) + * https://technet.microsoft.com/en-us/sysinternals/bb963905 +1. Setup something to run OnServerBoot.bat on login (setting up a link/shortcut to this file in the startup folder of the start menu works, creating a scheduled task in windows administrative tools also works) +1. OnServerBoot.bat does not update, but it does re-compile and reinitialize the A/B folders. + +### Updating byond after this is all setup +1. Download installer from byond website +1. Close watch dog/start server script +1. Wait for current round to end +1. Exit DreamDeamon +1. Run installer +1. After installing, run recompile.bat (or update if you want) +1. Run start server.bat + + + + diff --git a/tools/tgstation-server/README.txt b/tools/tgstation-server/README.txt deleted file mode 100644 index 5f8d0c143a..0000000000 --- a/tools/tgstation-server/README.txt +++ /dev/null @@ -1,56 +0,0 @@ -About: - This is a toolset to manage a production server of tgstation13 (or its forks). It includes an update script that is able to update the server without having to stop or shutdown the server (the update will take effect next round) and a script to start the server and restart it if it crashes (optional, requires registry tweaks to disable the Windows crash dialog system wide) - - This will force a live tracking of the configured git repo, so no local modifications are allowed. (this is to avoid issues with merge conflicts and because I'm too lazy to make the script detect them) - - -Install: - Move this folder to where you want your server to run from (you may also rename this folder if you wish) - Right click on config.bat and click edit. - Configure the port, selected map file, and the like, You may configure the location of git, but if you installed using git for windows, we will auto detect it if its not in path. - You may also need to change the location of the gitrepo url, and if you renamed your dme/"dream maker environment" file, you will need to change the project name configuration setting to be the name of your dme minus the extension (eg: if you renamed tgstation.dme to ntstation.dme, project name should be set to ntstation - - After that, just run install.bat and hope for no error. - - It will clone the git repo, setup some folders, and add cross reference links everywhere. - - Optional: - If you plan to use the start-server script to watch the server and restart it if it crashes, you should run the "disable crash dialog.reg" registry script to disable the "program.exe has stopped working" dialog. This will get disabled system wide so if you rely on this dialog, you shouldn't run the script. - Even without this, byond stopping the world from two many critical errors (like infinite loops and recursions) will still be detected. - -Usage: - The install script will make a few folders: - gamecode - This will house two copies of the game code, one for updating and one for live. When updating, it will automatically swap them. - - gamedata - This contains the data, config, and cfg folders from the code. They are stored here and a symbolic link is created in the code folders pointing to here. - This also makes backing them up easy. - (you may copy and paste your existing data/config/cfg folders here after the install script has ran.) - - bot - This is a copy of the bot folder. you should run the bot from here. a link to coredata.py and nudge.py is created in the code folders so that the game can use the announcement feature. - The start server script and update script will send messages out thru the bot, but if its not running or python is not installed, they will gracefully continue what they are doing. - - gamefolder - This is a symbolic link pointing to current "live" folder. - When the server is updated, we just point this to the updating folder so that the update takes place next round. - - bin - This contains random helper batch files. - Running these on their own is a bad idea. - - To update the server, just run update server.bat. (it will git pull, compile, all that jazz) - It will ask you if you want to apply the update live. 99.9% of the time, this will not cause issues. The only issues it can cause relate to changes to media files(images(but not icons)/css/html/sound not stored in the RSC. but only new clients will see those issues, and at worst, its a minor graphical glitch. - You may remove the pause in the update script at line 90 if you like. - - To run the server, just run start server.bat - It will automatically redirect the runtimes to data/logs/runtimes/runtime-YYYY-MM-DD.log. - (Note: It will not automatically roll them over, but every time it crashes or stops it will have a new log file.) - When it starts dreamdaemon, it instructs byond to close down dreamdaemon if the world stops for any reason, this includes hitting the stop button, dreamdaemon shutting the world down because of too many runtimes/infinite loops. - If dreamdaemon ever stops while the start server script is running, the script will restart it automatically. - (Note: The script can not detect hangs or lockups) - - - - \ No newline at end of file diff --git a/tools/tgstation-server/Recompile.bat b/tools/tgstation-server/Recompile.bat new file mode 100644 index 0000000000..40b746365e --- /dev/null +++ b/tools/tgstation-server/Recompile.bat @@ -0,0 +1,51 @@ +@echo off +@title Server Updater +set HOME = %USERPROFILE% + +call config.bat +call bin\getcurdate.bat + +echo This will handle recompiling the server, and applying the new version. +echo ready? + +timeout 120 + +if exist updating.lk ( + echo ERROR: A current update script has been detected running. if you know this is a mistake: + pause + echo Please be double sure that an update script is not currently running, if you think one might be, close this window. otherwise: + pause +) + +echo lock>updating.lk + +rem if the first arg to nudge.py is not a channel, it is treated as the "source" +if not defined UPDATE_LOG_CHANNEL set UPDATE_LOG_CHANNEL="UPDATER" + +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Recompile job started" >nul 2>nul + +call bin\findab.bat + +call bin\copyfromgit.bat + +echo compiling change log +cd gamecode\%AB% +call python tools\ss13_genchangelog.py html/changelog.html html/changelogs +cd ..\.. + +echo Compiling game. +call bin\build.bat +if %DM_EXIT% neq 0 ( + echo DM compile failed. Aborting. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed Aborting recompile." >nul 2>nul + del /F /Q updating.lk >nul 2>nul + pause + exit /b 1 +) + +del updating.lk >nul 2>nul +rmdir /q gamefolder +mklink /d gamefolder gamecode\%AB% >nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Recompile finished. Recompiled code will take place next round." >nul 2>nul +echo Done. The recompile will automatically take place at round restart. +timeout 300 \ No newline at end of file diff --git a/tools/tgstation-server/Reset and Recompile.bat b/tools/tgstation-server/Reset and Recompile.bat new file mode 100644 index 0000000000..f0127fd3ac --- /dev/null +++ b/tools/tgstation-server/Reset and Recompile.bat @@ -0,0 +1,66 @@ +@echo off +@title Server Updater +set HOME = %USERPROFILE% + +call config.bat +call bin\getcurdate.bat +call bin\findgit.bat + +echo This will handle resetting the git repo, recompiling the server, and applying the new version. +echo Ready? + +timeout 120 + +if exist updating.lk ( + echo ERROR: A current update script has been detected running. if you know this is a mistake: + pause + echo Please be double sure that an update script is not currently running, if you think one might be, close this window. otherwise: + pause +) + +echo lock>updating.lk + +rem if the first arg to nudge.py is not a channel, it is treated as the "source" +if not defined UPDATE_LOG_CHANNEL set UPDATE_LOG_CHANNEL="UPDATER" + +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Reset local changes job started" >nul 2>nul + +cd gitrepo +git reset --hard +git clean -df +cd .. +echo ################################## +echo ################################## +echo: +echo Resetting done, compiling in 10 seconds. If you want to preform other actions (like test merges) You can close this now and do them. +echo: +del updating.lk >nul 2>nul + +timeout 10 + +echo lock>updating.lk +call bin\findab.bat + +call bin\copyfromgit.bat + +echo compiling change log +cd gamecode\%AB% +call python tools\ss13_genchangelog.py html/changelog.html html/changelogs +cd ..\.. + +echo Compiling game. +call bin\build.bat +if %DM_EXIT% neq 0 ( + echo DM compile failed. Aborting. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed Aborting Reset." >nul 2>nul + del /F /Q updating.lk >nul 2>nul + pause + exit /b 1 +) + +del updating.lk >nul 2>nul +rmdir /q gamefolder +mklink /d gamefolder gamecode\%AB% >nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Reset finished. Reset will take place next round." >nul 2>nul +echo Done. The Reset will automatically take place at round restart. +timeout 300 diff --git a/tools/tgstation-server/Start Bot.bat b/tools/tgstation-server/Start Bot.bat index c0631dabbf..a3b1cba0d8 100644 --- a/tools/tgstation-server/Start Bot.bat +++ b/tools/tgstation-server/Start Bot.bat @@ -1,7 +1,7 @@ @echo off @title NT IRC BOT -echo Welcome to the start bot script, This will start the bot and make sure it stays running. This assumes python in the path. To continue, press any key or wait 60 seconds. -timeout 60 +echo Welcome to the start bot script, This will start the bot and make sure it stays running. This assumes python in the path. To continue, press any key or wait 15 seconds. +timeout 15 cd bot :START call ..\bin\getcurdate.bat @@ -9,7 +9,7 @@ if not exist ..\gamedata\data\logs\bot mkdir ..\gamedata\data\logs\bot\ cls echo NT IRC Bot echo Bot Running. Watching for Bot exits. -start /WAIT python NanoTrasenBot.py >>..\gamedata\data\logs\bot\bot-%CUR_DATE%.txt +start /WAIT python minibot.py ^>^>..\gamedata\data\logs\bot\bot-%CUR_DATE%.txt cls echo NT IRC Bot echo Bot exit detected. Restarting in 15 minutes. diff --git a/tools/tgstation-server/Start Server.bat b/tools/tgstation-server/Start Server.bat index 26d3008b34..0312a22a5c 100644 --- a/tools/tgstation-server/Start Server.bat +++ b/tools/tgstation-server/Start Server.bat @@ -3,22 +3,37 @@ call config.bat call bin\findbyond.bat -echo Welcome to the start server watch dog script, This will start the server and make sure it stays running. To continue, press any key or wait 60 seconds. -timeout 60 +echo Welcome to the start server watch dog script, This will start the server and make sure it stays running. To continue, press any key or wait 30 seconds. +timeout 30 if not exist gamedata\data\logs\runtimes mkdir gamedata\data\logs\runtimes\ -@python bot\nudge.py "WATCHDOG" "Watch Dog online. Starting server" >nul 2>nul +@call python bot\nudge.py "WATCHDOG" "Watch Dog online. Starting server" >nul 2>nul :START + call bin\getcurdate.bat + +call bin\getunixtime.bat UNIXTIME + +echo %UNIXTIME% + +set STARTTIME=%UNIXTIME% + cls echo Watch Dog. echo Server Running. Watching for server exits. -start /WAIT /ABOVENORMAL "" dreamdaemon.exe gamefolder\%PROJECTNAME%.dmb -port %PORT% -trusted -public -close -log "data\logs\runtimes\runtime-%CUR_DATE%.log" +start /WAIT /ABOVENORMAL "" dreamdaemon.exe gamefolder\%PROJECTNAME%.dmb -port %PORT% -trusted -close -public -verbose cls + +call bin\getunixtime.bat UNIXTIME + +SET /A Result=%UNIXTIME% - %STARTTIME% +SET /A Result=180 - (%Result%/3) +if %Result% LSS 0 set /A Result=0 + echo Watch Dog. -echo Server exit detected. Restarting in 60 seconds. -@python bot\nudge.py "WATCHDOG" "Server exit detected. Restarting server in 60 seconds." >nul 2>nul -timeout 60 +echo Server exit detected. Restarting in %Result% seconds. +@python bot\nudge.py "WATCHDOG" "Server exit detected. Restarting server in %Result% seconds." >nul 2>nul +timeout %Result% goto :START diff --git a/tools/tgstation-server/Update Server.bat b/tools/tgstation-server/Update Server.bat index f7e48f5fe8..1d7d8644af 100644 --- a/tools/tgstation-server/Update Server.bat +++ b/tools/tgstation-server/Update Server.bat @@ -1,53 +1,79 @@ @echo off -@title Server Updater +title Server Updater +SETLOCAL ENABLEDELAYEDEXPANSION set HOME = %USERPROFILE% + call config.bat call bin\getcurdate.bat + echo This will handle downloading git, compiling the server, and applying the update. -echo ready? +echo Ready? + timeout 120 + if exist updating.lk ( - echo ERROR! A current update script has been detected running. if you know this is a mistake: + echo ERROR: A current update script has been detected running. if you know this is a mistake: pause echo Please be double sure that an update script is not currently running, if you think one might be, close this window. otherwise: pause ) + +if exist prtestjob.lk ( + call bin/activepr.bat + echo WARNING: The server is currently testing the following PRs !PR!. This update would override that. Do you still want to update? Close this window if not, otherwise: + pause +) + +del /F /Q prtestjob.lk >nul 2>nul + echo lock>updating.lk + bin/activepr.bat rem if the first arg to nudge.py is not a channel, it is treated as the "source" if not defined UPDATE_LOG_CHANNEL set UPDATE_LOG_CHANNEL="UPDATER" -python bot\nudge.py %UPDATE_LOG_CHANNEL% "Update job started" >nul 2>nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Update job started" >nul 2>nul call bin\updategit.bat if %GIT_EXIT% neq 0 ( echo git pull failed. Aborting update - python bot\nudge.py %UPDATE_LOG_CHANNEL% "Git pull failed. Aborting update" - @del updating.lk >nul 2>nul + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Git fetch failed. Aborting update" + del updating.lk >nul 2>nul pause exit /b 1 ) + if defined PUSHCHANGELOGTOGIT ( + cd gitrepo echo compiling change log python tools\ss13_genchangelog.py html/changelog.html html/changelogs - if %ERRORLEVEL% == 0 ( + if !ERRORLEVEL! == 0 ( echo pushing compiled changelog to server git add -u html/changelog.html git add -u html/changelogs git commit -m "Automatic changelog compile, [ci skip]" - if %ERRORLEVEL% == 0 ( + if !ERRORLEVEL! == 0 ( git push ) REM an error here generally means there was nothing to commit. ) + cd .. ) +echo ################################## +echo ################################## +echo: +echo Updating done, compiling in 10 seconds. If you want to preform other actions (like test merge) You can close this now and do them. +echo: +del updating.lk >nul 2>nul + +timeout 10 + +echo lock>updating.lk call bin\findab.bat call bin\copyfromgit.bat - - if not defined PUSHCHANGELOGTOGIT ( echo compiling change log cd gamecode\%AB% @@ -55,26 +81,19 @@ if not defined PUSHCHANGELOGTOGIT ( cd ..\.. ) - - -echo building script. +echo Compiling game. call bin\build.bat if %DM_EXIT% neq 0 ( echo DM compile failed. Aborting. - python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed Aborting update." >nul 2>nul - @del /F /Q updating.lk >nul 2>nul + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed Aborting update." >nul 2>nul + del /F /Q updating.lk >nul 2>nul pause exit /b 1 ) -if not defined NOWAITUPDATES ( - echo OK, compiled and ready. So at the hit of a button, we can apply the update live. Technically speaking, it's best to wait until near round end, but unless a html/css/js file in the code had been deleted, edited, or moved recently, no ill effects of applying the update will happen, and the worst is that new clients have display oddities relating to in game windows. Existing connections should have no issue. - echo Ready? - pause -) -@del updating.lk >nul 2>nul +del updating.lk >nul 2>nul rmdir /q gamefolder mklink /d gamefolder gamecode\%AB% >nul -python bot\nudge.py %UPDATE_LOG_CHANNEL% "Update job finished. Update will take place next round." >nul 2>nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Update job finished. Update will take place next round." >nul 2>nul echo Done. The update will automatically take place at round restart. timeout 300 \ No newline at end of file diff --git a/tools/tgstation-server/Update to PR.bat b/tools/tgstation-server/Update to PR.bat new file mode 100644 index 0000000000..b6c57b98b7 --- /dev/null +++ b/tools/tgstation-server/Update to PR.bat @@ -0,0 +1,121 @@ +@echo off +title Server Updater +SETLOCAL ENABLEDELAYEDEXPANSION +set HOME = %USERPROFILE% + +call config.bat +rem if the first arg to nudge.py is not a channel, it is treated as the "source" +if not defined UPDATE_LOG_CHANNEL set UPDATE_LOG_CHANNEL="UPDATER" +call bin\getcurdate.bat +call bin\findgit.bat +echo This will handle Resetting the repo downloading from git, merging the pr locally, compiling the server, and applying the PR test job. + +:PROMPT +SET /P UserInput=Please enter the pr number (without a # or anything of the sorts): +SET /A PR=UserInput + +if %PR% EQU %UserInput% ( + if %PR% GTR 0 ( + echo updating to pr %PR% + ) else ( + echo Bad input + goto PROMPT + ) +) else ( + echo Bad input + goto PROMPT +) +if exist updating.lk ( + echo ERROR: A current update script has been detected running. if you know this is a mistake: + pause + echo Please be double sure that an update script is not currently running, if you think one might be, close this window. otherwise: + pause +) + +echo lock>updating.lk + bin/activepr.bat +del /F /Q prtestjob.lk >nul 2>nul + +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "PR test job started. Updating master and merging PR #%PR% locally" >nul 2>nul + +call bin\updategit.bat +if %GIT_EXIT% neq 0 ( + echo git pull failed. Aborting update + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Git fetch failed. Aborting update" + del updating.lk >nul 2>nul + pause + exit /b 1 +) + +if defined PUSHCHANGELOGTOGIT ( + cd gitrepo + echo compiling change log + call python tools\ss13_genchangelog.py html/changelog.html html/changelogs + if !ERRORLEVEL! == 0 ( + echo pushing compiled changelog to server + git add -u html/changelog.html + git add -u html/changelogs + git commit -m "Automatic changelog compile, [ci skip]" + if !ERRORLEVEL! == 0 ( + git push + ) + REM an error here generally means there was nothing to commit. + ) + cd .. +) + +cd gitrepo +git fetch origin pull/%PR%/head:pr-%PR% +git merge pr-%PR% +if %ERRORLEVEL% neq 0 ( + git reset --hard + git clean -fd + cd .. + echo git merge of PR #%PR% failed. Aborting test merge. + echo An update was successfully preformed but not applied, if you want you can apply it by running recompile.bat + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "git merge of PR #%PR% failed. Aborting PR test job" >nul 2>nul + del updating.lk >nul 2>nul + pause + exit /b 1 +) +cd .. + +echo %PR%>prtestjob.lk +> bin/activepr.bat + +echo ################################## +echo ################################## +echo: +echo Updating to pr done, compiling in 10 seconds. If you want to preform other actions (like more test merges) You can close this now and do them. +echo: +del updating.lk >nul 2>nul + +timeout 10 + +echo lock>updating.lk +call bin\findab.bat + +call bin\copyfromgit.bat + + +echo compiling change log (again) +cd gamecode\%AB% +call python tools\ss13_genchangelog.py html/changelog.html html/changelogs +cd ..\.. + +echo Compiling game. +call bin\build.bat +if %DM_EXIT% neq 0 ( + echo DM compile failed. Aborting. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed. Aborting test merge." >nul 2>nul + del /F /Q updating.lk >nul 2>nul + pause + exit /b 1 +) + +del updating.lk >nul 2>nul +rmdir /q gamefolder +mklink /d gamefolder gamecode\%AB% >nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Test merge job finished. Test merge will take place next round." >nul 2>nul +echo Done. The test merge will automatically take place at round restart. +timeout 300 \ No newline at end of file diff --git a/tools/tgstation-server/Update without resetting.bat b/tools/tgstation-server/Update without resetting.bat new file mode 100644 index 0000000000..9a08573fb1 --- /dev/null +++ b/tools/tgstation-server/Update without resetting.bat @@ -0,0 +1,100 @@ +@echo off +@title Server Updater +SETLOCAL ENABLEDELAYEDEXPANSION +set HOME = %USERPROFILE% + +call config.bat +call bin\getcurdate.bat +call bin\findgit.bat + +echo This will update the server without resetting local changes like test merges. +echo Note: This doesn't update the changelog like a normal update does. +echo Ready? + +timeout 120 + +if exist updating.lk ( + echo ERROR: A current update script has been detected running. if you know this is a mistake: + pause + echo Please be double sure that an update script is not currently running, if you think one might be, close this window. otherwise: + pause +) + +echo lock>updating.lk + +rem if the first arg to nudge.py is not a channel, it is treated as the "source" +if not defined UPDATE_LOG_CHANNEL set UPDATE_LOG_CHANNEL="UPDATER" + +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Update job started (No reset mode)" >nul 2>nul + +cd gitrepo +git fetch origin +if %ERRORLEVEL% neq 0 ( + cd .. + echo git fetch failed. Aborting update. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Git fetch failed. Aborting update" + del updating.lk >nul 2>nul + pause + exit /b 1 +) +git merge origin/%REPO_BRANCH% +if %ERRORLEVEL% neq 0 ( + cd .. + echo git merge of upstream master failed, aborting update. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "git merge of upstream master failed, aborting update." >nul 2>nul + cd gitrepo + git merge --abort + if %ERRORLEVEL% neq 0 ( + echo ERROR: Error aborting update, resetting repo. + cd .. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Error aborting merge, Resetting git repo" >nul 2>nul + cd gitrepo + git reset --hard + git clean -fd + bin/activepr.bat + del /F /Q prtestjob.lk >nul 2>nul + echo NOTICE: We had to reset the repo's state, all active test merges were undone. + ) + cd .. + del updating.lk >nul 2>nul + pause + exit /b 1 +) +cd .. + + +echo ################################## +echo ################################## +echo: +echo In place update done, compiling in 10 seconds. If you want to preform other actions (like more test merges) You can close this now and do them. +echo: +del updating.lk >nul 2>nul + +timeout 10 + +echo lock>updating.lk +call bin\findab.bat + +call bin\copyfromgit.bat + +echo compiling change log +cd gamecode\%AB% +call python tools\ss13_genchangelog.py html/changelog.html html/changelogs +cd ..\.. + +echo Compiling game. +call bin\build.bat +if %DM_EXIT% neq 0 ( + echo DM compile failed. Aborting. + call python bot\nudge.py %UPDATE_LOG_CHANNEL% "DM compile failed Aborting update." >nul 2>nul + del /F /Q updating.lk >nul 2>nul + pause + exit /b 1 +) + +del updating.lk >nul 2>nul +rmdir /q gamefolder +mklink /d gamefolder gamecode\%AB% >nul +call python bot\nudge.py %UPDATE_LOG_CHANNEL% "Update job finished. Update will take place next round." >nul 2>nul +echo Done. The update will automatically take place at round restart. +timeout 300 diff --git a/tools/tgstation-server/bin/activepr.bat b/tools/tgstation-server/bin/activepr.bat new file mode 100644 index 0000000000..554142925d --- /dev/null +++ b/tools/tgstation-server/bin/activepr.bat @@ -0,0 +1 @@ +set PR= \ No newline at end of file diff --git a/tools/tgstation-server/bin/build.bat b/tools/tgstation-server/bin/build.bat index 6b9163fe86..049154ce92 100644 --- a/tools/tgstation-server/bin/build.bat +++ b/tools/tgstation-server/bin/build.bat @@ -1,4 +1,3 @@ -@echo off call config.bat call bin/findbyond.bat set DME_FOLDER=gamefolder\ @@ -7,11 +6,19 @@ if defined AB set DME_FOLDER=gamecode\%AB%\ set DME_LOCATION=%DME_FOLDER%%PROJECTNAME%.dme set MDME_LOCATION=%DME_FOLDER%%PROJECTNAME%.mdme +@del %MDME_LOCATION% >nul 2>nul +if defined MAPROTATE set MAPFILE=%MAPROTATE% +if not defined MAPFILE goto BUILD + +echo #define MAP_OVERRIDE >>%MDME_LOCATION% +echo #include "_maps\%MAPFILE%.dm" >>%MDME_LOCATION% + :BUILD echo #define SERVERTOOLS 1 >>%MDME_LOCATION% +echo #define PUTONHUB 1 >>%MDME_LOCATION% type %DME_LOCATION% >>%MDME_LOCATION% -dm %MDME_LOCATION% +dm -clean %MDME_LOCATION% set DM_EXIT=%ERRORLEVEL% @del %DME_FOLDER%%PROJECTNAME%.dmb >nul 2>nul @del %DME_FOLDER%%PROJECTNAME%.rsc >nul 2>nul diff --git a/tools/tgstation-server/bin/copyfromgit.bat b/tools/tgstation-server/bin/copyfromgit.bat index 9f25dcad98..4de01db772 100644 --- a/tools/tgstation-server/bin/copyfromgit.bat +++ b/tools/tgstation-server/bin/copyfromgit.bat @@ -2,11 +2,10 @@ echo Removing old files rem delete the symlinks manually to ensure their targets don't get recursively deleted rmdir /q gamecode\%AB%\data >nul 2>nul rmdir /q gamecode\%AB%\config >nul 2>nul -rmdir /q gamecode\%AB%\cfg >nul 2>nul del /q gamecode\%AB%\nudge.py >nul 2>nul -del /q gamecode\%AB%\CORE_DATA.py >nul 2>nul +del /q gamecode\%AB%\libmysql.dll >nul 2>nul -del /S /F /Q gamecode\%AB% >nul 2>nul +del /S /F /Q gamecode\%AB%\ >nul 2>nul echo Copying files xcopy gitrepo gamecode\%AB% /Y /X /K /R /H /I /C /V /E /Q /EXCLUDE:copyexclude.txt >nul @@ -14,9 +13,8 @@ mkdir gamecode\%AB%\.git\logs copy gitrepo\.git\logs\HEAD gamecode\%AB%\.git\logs\HEAD /D /V /Y >nul mklink gamecode\%AB%\nudge.py ..\..\bot\nudge.py >nul -mklink gamecode\%AB%\CORE_DATA.py ..\..\bot\CORE_DATA.py >nul rmdir /q gamecode\%AB%\data >nul 2>nul rmdir /s /q gamecode\%AB%\data >nul 2>nul mklink /d gamecode\%AB%\data ..\..\gamedata\data >nul mklink /d gamecode\%AB%\config ..\..\gamedata\config >nul -mklink /d gamecode\%AB%\cfg ..\..\gamedata\cfg >nul \ No newline at end of file +mklink gamecode\%AB%\libmysql.dll ..\..\gamedata\libmysql.dll >nul diff --git a/tools/tgstation-server/bin/findab.bat b/tools/tgstation-server/bin/findab.bat index 9bb94bed14..0c24a7571b 100644 --- a/tools/tgstation-server/bin/findab.bat +++ b/tools/tgstation-server/bin/findab.bat @@ -1,5 +1,5 @@ -@del gamecode\a\updater.temp >nul 2>nul -@del gamecode\b\updater.temp >nul 2>nul +del gamecode\a\updater.temp >nul 2>nul +del gamecode\b\updater.temp >nul 2>nul echo test >gamefolder\updater.temp @@ -15,6 +15,14 @@ if exist gamecode\a\updater.temp ( set AB=b ) else ( echo Current folder detected to be the "A" folder. Game is not currently running, Updating to the "A" folder. + if exist gamecode\b\%PROJECTNAME%.rsc.lk ( + rem we attempt to delete the lock file to see if the server is currently running. + del /q gamecode\b\%PROJECTNAME%.rsc.lk >nul 2>nul + if exist gamecode\b\%PROJECTNAME%.rsc.lk set RUNNING=1 + rmdir /q gamefolder + mklink /d gamefolder gamecode\b >nul + echo Game is in actually currently running on the "B" folder, Resetting current folder to the "B" folder first + ) set AB=a ) ) else if exist gamecode\b\updater.temp ( @@ -23,7 +31,15 @@ if exist gamecode\a\updater.temp ( set AB=a ) else ( echo Current folder detected to be the "B" folder. Game is not currently running, Updating to the "B" folder. + if exist gamecode\a\%PROJECTNAME%.rsc.lk ( + rem we attempt to delete the lock file to see if the server is currently running. + del /q gamecode\a\%PROJECTNAME%.rsc.lk >nul 2>nul + if exist gamecode\a\%PROJECTNAME%.rsc.lk set RUNNING=1 + rmdir /q gamefolder + mklink /d gamefolder gamecode\a >nul + echo Game is in actually currently running on the "A" folder, Resetting current folder to the "A" folder first + ) set AB=b ) ) -@del gamefolder\updater.temp >nul 2>nul \ No newline at end of file +del gamefolder\updater.temp >nul 2>nul \ No newline at end of file diff --git a/tools/tgstation-server/bin/findbyond.bat b/tools/tgstation-server/bin/findbyond.bat index 2e015e4e62..ff07af2dd6 100644 --- a/tools/tgstation-server/bin/findbyond.bat +++ b/tools/tgstation-server/bin/findbyond.bat @@ -1,4 +1,3 @@ -@echo off @dm.exe -h >nul 2>nul IF %ERRORLEVEL% NEQ 9009 ( diff --git a/tools/tgstation-server/bin/findgit.bat b/tools/tgstation-server/bin/findgit.bat index 059dfd6626..9c802b54c6 100644 --- a/tools/tgstation-server/bin/findgit.bat +++ b/tools/tgstation-server/bin/findgit.bat @@ -1,4 +1,3 @@ -@echo off REM check if git is already in path git --version >nul 2>nul && goto :eof diff --git a/tools/tgstation-server/bin/getcurdate.bat b/tools/tgstation-server/bin/getcurdate.bat index 84c19f7dd5..f5360756ce 100644 --- a/tools/tgstation-server/bin/getcurdate.bat +++ b/tools/tgstation-server/bin/getcurdate.bat @@ -1,3 +1,2 @@ -@echo off FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set DTS=%%a set CUR_DATE=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% \ No newline at end of file diff --git a/tools/tgstation-server/bin/getunixtime.bat b/tools/tgstation-server/bin/getunixtime.bat index 64672391e8..2b4115faab 100644 --- a/tools/tgstation-server/bin/getunixtime.bat +++ b/tools/tgstation-server/bin/getunixtime.bat @@ -1,2 +1,12 @@ -@echo off -for /f "delims=" %%x in ('cscript /nologo unixtime.vbs') do set UNIXTIME=%%x \ No newline at end of file +REM setlocal +call :GetUnixTime UNIXTIME +goto :EOF + +:GetUnixTime +REM setlocal enableextensions +for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do ( + set %%x) +set /a z=(14-100%Month%%%100)/12, y=10000%Year%%%10000-z +set /a ut=y*365+y/4-y/100+y/400+(153*(100%Month%%%100+12*z-3)+2)/5+Day-719469 +set /a ut=ut*86400+100%Hour%%%100*3600+100%Minute%%%100*60+100%Second%%%100 +endlocal & set "%1=%ut%" & goto :EOF \ No newline at end of file diff --git a/tools/tgstation-server/bin/updategit.bat b/tools/tgstation-server/bin/updategit.bat index 024e17dfed..e16cfc3922 100644 --- a/tools/tgstation-server/bin/updategit.bat +++ b/tools/tgstation-server/bin/updategit.bat @@ -1,18 +1,12 @@ call bin\findgit.bat echo Updating repo + cd gitrepo + git branch backup-%CUR_DATE% >nul 2>nul git fetch set GIT_EXIT=%ERRORLEVEL% -if %GIT_EXIT% neq 0 goto END -git checkout %REPO_BRANCH% -set GIT_EXIT=%ERRORLEVEL% -if %GIT_EXIT% neq 0 goto END -git reset origin/%REPO_BRANCH% --hard -set GIT_EXIT=%ERRORLEVEL% -if %GIT_EXIT% neq 0 goto END -git pull --force -set GIT_EXIT=%ERRORLEVEL% -:END +git reset origin/%REPO_BRANCH% --hard + cd .. \ No newline at end of file diff --git a/tools/tgstation-server/config.bat b/tools/tgstation-server/config.bat index 201c17abbe..eb3ecd13e7 100644 --- a/tools/tgstation-server/config.bat +++ b/tools/tgstation-server/config.bat @@ -1,50 +1,42 @@ @echo off -REM Server Tools configuration file. Lines starting with REM are comments and ignored. -REM on/off config options are considered "on" if they have anything (even 0) and "off" if they are blank or commented out. +REM Server Tools configuration file. Lines starting with rem are comments and ignored. REM This must be set to the name of your dme without the .dme part. (should be fine leaving this alone unless you renamed the code) set PROJECTNAME=tgstation -REM location of the repo. +REM location of the repo. (use an ssh url if you plan to push compiled changlogs) +REM Only set during install, do not re-run install.bat if you change this, instead manually change the remote of the gitrepo folder using git tools set REPO_URL=https://github.com/tgstation/-tg-station.git -REM set REPO_URL=git@github.com:tgstation/-tg-station.git REM What branch of the repo to use. set REPO_BRANCH=master -REM what map file to use. This should be the name of the dm, not dmm (and without the .dm part) (defaults to what ever is ticked in the dme) -set MAPFILE=tgstation2 +REM Override Map (This disables map roation and forces the selected map to always be loaded) +REM set MAPFILE=tgstation2 REM set MAPFILE=metastation -REM set MAPFILE=ministation -REM port to use (only used to start the server in the start-server script) -set PORT=1337 +REM port to use when starting the server +set PORT=2337 -REM This is the channel to log updates to. Leave blank to log to the normal channel (this is done via the tgstation bot, optional) -set UPDATE_LOG_CHANNEL=#coderbus - - -REM overrides the prompt to live apply the updates in update server.bat if set to anything other than a null string. -REM It is generally safe to live apply the updates, they don't take effect until the next round. the only concern is that some media files may get loaded by new clients before the next round. These files aren't edited 99% of the time, so its not a real concern, but I kept the prompt the default for compatibility sake. -set NOWAITUPDATES= +REM This is the channel to log updates to. Leave blank to log to the bot's default logging channel (this is done via the tgstation minibot bot, optional) +set UPDATE_LOG_CHANNEL=#devbus,#coderbus,#tgstation13 REM Attempt to push the compiled changelog to the configured git server? (set to anything) -REM This requires you configure git with authentication for the upstream server. (the ssh key should be stored in c:\users\USERNAME_HERE\.ssh\ as the filename id_rsa (if that still doesn't work, try c:\program files\git\.ssh\id_rsa)) +REM This requires you configure git with authentication for the upstream server. (git for windows users should just put an ssh key in c:\users\USERNAME_HERE\.ssh\ as the filename id_rsa) And you should have installed this with a git, ssh, or file url) set PUSHCHANGELOGTOGIT= REM location of git. The script will attempt to auto detect this, but if it fails, you can set it manually. -REM This will be added to the end of path as is (only for the batch file, not the whole system) REM github for windows users see http://www.chambaud.com/2013/07/08/adding-git-to-path-when-using-github-for-windows/ (an example is provided below) + set GIT_LOCATION_PATH= -REM set GIT_LOCATION_PATH=C:\Users\\AppData\Local\GitHub\PortableGit_\bin;C:\Users\\AppData\Local\GitHub\PortableGit_\cmd +REM set GIT_LOCATION_PATH=C:\Users\Administrator\AppData\Local\GitHub\PortableGit_c2ba306e536fdf878271f7fe636a147ff37326ad\bin;C:\Users\Administrator\AppData\Local\GitHub\PortableGit_c2ba306e536fdf878271f7fe636a147ff37326ad\cmd - -REM path to the byond bin folder. (if blank, we look in path, program files/byond/bin, and program files (x86)/byond/bin) (same rules as git path above) -set BYOND_LOCATION_PATH= \ No newline at end of file +REM path to the byond bin folder. (same rules as git path above, almost always auto detected, but you could point this to the output of the zip version for install-less setups, and even abuse that to make updating byond versions less of a pain by just changing this config and then crashing the server.) +set BYOND_LOCATION_PATH= diff --git a/tools/tgstation-server/copyexclude.txt b/tools/tgstation-server/copyexclude.txt index a790724e14..3cf4643303 100644 --- a/tools/tgstation-server/copyexclude.txt +++ b/tools/tgstation-server/copyexclude.txt @@ -4,6 +4,6 @@ gitrepo\config\ gitrepo\data\ gitrepo\bot\ -gitrepo\cfg\ gitrepo\.git\ +gitrepo\libmysql.dll diff --git a/tools/tgstation-server/install.bat b/tools/tgstation-server/install.bat index e6089b0497..f37908966a 100644 --- a/tools/tgstation-server/install.bat +++ b/tools/tgstation-server/install.bat @@ -29,7 +29,6 @@ echo Repo downloaded. echo Setting up folders... mkdir gamecode\a mkdir gamecode\b -mkdir gamecode\override mkdir gamedata mkdir bot @@ -37,8 +36,8 @@ echo Copying things around.... echo (1/3) xcopy gitrepo\data gamedata\data /Y /X /K /R /H /I /C /V /E /Q >nul xcopy gitrepo\config gamedata\config /Y /X /K /R /H /I /C /V /E /Q >nul -xcopy gitrepo\cfg gamedata\cfg /Y /X /K /R /H /I /C /V /E /Q >nul xcopy gitrepo\bot bot /Y /X /K /R /H /I /C /V /E /Q >nul +copy gitrepo\libmysql.dll gamedata\libmysql.dll /D /V /Y >nul echo (2/3) xcopy gitrepo gamecode\a /Y /X /K /R /H /I /C /V /E /Q /EXCLUDE:copyexclude.txt >nul mkdir gamecode\a\.git\logs\ @@ -51,25 +50,27 @@ echo done. echo Setting up symbolic links. mklink gamecode\a\nudge.py ..\..\bot\nudge.py -mklink gamecode\a\CORE_DATA.py ..\..\bot\CORE_DATA.py +mklink gamecode\a\libmysql.dll ..\..\gamedata\libmysql.dll mklink /d gamecode\a\data ..\..\gamedata\data mklink /d gamecode\a\config ..\..\gamedata\config -mklink /d gamecode\a\cfg ..\..\gamedata\cfg mklink gamecode\b\nudge.py ..\..\bot\nudge.py -mklink gamecode\b\CORE_DATA.py ..\..\bot\CORE_DATA.py +mklink gamecode\b\libmysql.dll ..\..\gamedata\libmysql.dll mklink /d gamecode\b\data ..\..\gamedata\data mklink /d gamecode\b\config ..\..\gamedata\config -mklink /d gamecode\b\cfg ..\..\gamedata\cfg mklink /d gamefolder gamecode\a +echo prepping python (if installed) +pip install PyYaml +pip install beautifulsoup4 + echo Compiling for the first time. echo Compiling change log. -cd gamecode\a +cd gamefolder call python tools\ss13_genchangelog.py html/changelog.html html/changelogs -cd ..\.. +cd .. echo Compiling game. call bin\build.bat if %DM_EXIT% neq 0 echo DM compile failed. @@ -77,4 +78,4 @@ if %DM_EXIT% neq 0 echo DM compile failed. echo Done. You may start the server using the start server program or change the game config in gamedata\config pause -:ABORT \ No newline at end of file +:ABORT