Merge remote-tracking branch 'refs/remotes/Citadel-Station-13/master'

This commit is contained in:
deathride58
2017-05-18 21:47:32 -04:00
753 changed files with 74920 additions and 74564 deletions
+2
View File
@@ -210,6 +210,8 @@ This prevents nesting levels from getting deeper then they need to be.
* Do not divide when you can easily convert it to a multiplication. (ie `4/2` should be done as `4*0.5`)
* Do not use the shorthand sql insert format (where no column names are specified) because it unnecessarily breaks all queries on minor column changes and prevents using these tables for tracking outside related info such as in a connected site/forum.
#### Enforced not enforced
The following different coding styles are not only not enforced, but it is generally frowned upon to change them over from one to the other for little reason:
+2
View File
@@ -41,3 +41,5 @@ script:
- tools/travis/build_tools.sh
- tools/travis/build_byond.sh
notifications:
email: false
+1
View File
@@ -4,6 +4,7 @@ Based and maintained from /tg/station.<BR>
[![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** <BR>
**Website:** http://www.tgstation13.org <BR>
+10
View File
@@ -1,3 +1,13 @@
21 April 2017, by Jordie0608
Modified table 'player', adding the column 'accountjoindate', removing the column 'id' and making the column 'ckey' the primary key.
ALTER TABLE `feedback`.`player` DROP COLUMN `id`, ADD COLUMN `accountjoindate` DATE NULL AFTER `lastadminrank`, DROP PRIMARY KEY, ADD PRIMARY KEY (`ckey`), DROP INDEX `ckey`;
Remember to add a prefix to the table name if you use them.
----------------------------------------------------
10 March 2017, by Jordie0608
Modified table 'death', adding the columns 'toxloss', 'cloneloss', and 'staminaloss' and table 'legacy_population', adding the columns 'server_ip' and 'server_port'.
+373 -374
View File
@@ -1,374 +1,373 @@
CREATE DATABASE IF NOT EXISTS `feedback` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `feedback`;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `admin`
--
DROP TABLE IF EXISTS `admin`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
`rank` varchar(32) NOT NULL DEFAULT 'Administrator',
`level` int(2) NOT NULL DEFAULT '0',
`flags` int(16) NOT NULL DEFAULT '0',
`email` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `admin_log`
--
DROP TABLE IF EXISTS `admin_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`adminckey` varchar(32) NOT NULL,
`adminip` varchar(18) NOT NULL,
`log` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `admin_ranks`
--
DROP TABLE IF EXISTS `admin_ranks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin_ranks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rank` varchar(40) NOT NULL,
`flags` int(16) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `ban`
--
DROP TABLE IF EXISTS `ban`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ban` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bantime` datetime NOT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL,
`reason` varchar(2048) NOT NULL,
`job` varchar(32) DEFAULT NULL,
`duration` int(11) NOT NULL,
`expiration_time` datetime NOT NULL,
`ckey` varchar(32) NOT NULL,
`computerid` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`a_ckey` varchar(32) NOT NULL,
`a_computerid` varchar(32) NOT NULL,
`a_ip` int(10) unsigned NOT NULL,
`who` varchar(2048) NOT NULL,
`adminwho` varchar(2048) NOT NULL,
`edits` text,
`unbanned` tinyint(3) unsigned DEFAULT NULL,
`unbanned_datetime` datetime DEFAULT NULL,
`unbanned_ckey` varchar(32) DEFAULT NULL,
`unbanned_computerid` varchar(32) DEFAULT NULL,
`unbanned_ip` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`),
KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`),
KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `connection_log`
--
DROP TABLE IF EXISTS `connection_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `connection_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime DEFAULT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`ckey` varchar(45) DEFAULT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `death`
--
DROP TABLE IF EXISTS `death`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `death` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pod` varchar(50) NOT NULL,
`coord` varchar(32) NOT NULL,
`mapname` varchar(32) NOT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`tod` datetime NOT NULL COMMENT 'Time of death',
`job` varchar(32) NOT NULL,
`special` varchar(32) DEFAULT NULL,
`name` varchar(96) NOT NULL,
`byondkey` varchar(32) NOT NULL,
`laname` varchar(96) DEFAULT NULL,
`lakey` varchar(32) DEFAULT NULL,
`gender` enum('neuter','male','female','plural') NOT NULL,
`bruteloss` smallint(5) unsigned NOT NULL,
`brainloss` smallint(5) unsigned NOT NULL,
`fireloss` smallint(5) unsigned NOT NULL,
`oxyloss` smallint(5) unsigned NOT NULL,
`toxloss` smallint(5) unsigned NOT NULL,
`cloneloss` smallint(5) unsigned NOT NULL,
`staminaloss` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `feedback`
--
DROP TABLE IF EXISTS `feedback`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `feedback` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL,
`round_id` int(8) NOT NULL,
`var_name` varchar(32) NOT NULL,
`var_value` int(16) DEFAULT NULL,
`details` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `ipintel`
--
DROP TABLE IF EXISTS `ipintel`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ipintel` (
`ip` int(10) unsigned NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`intel` double NOT NULL DEFAULT '0',
PRIMARY KEY (`ip`),
KEY `idx_ipintel` (`ip`,`intel`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `legacy_population`
--
DROP TABLE IF EXISTS `legacy_population`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `legacy_population` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`playercount` int(11) DEFAULT NULL,
`admincount` int(11) DEFAULT NULL,
`time` datetime NOT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `library`
--
DROP TABLE IF EXISTS `library`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `library` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`author` varchar(45) NOT NULL,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL,
`ckey` varchar(32) NOT NULL DEFAULT 'LEGACY',
`datetime` datetime NOT NULL,
`deleted` tinyint(1) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `deleted_idx` (`deleted`),
KEY `idx_lib_id_del` (`id`,`deleted`),
KEY `idx_lib_del_title` (`deleted`,`title`),
KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `messages`
--
DROP TABLE IF EXISTS `messages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('memo','message','message sent','note','watchlist entry') NOT NULL,
`targetckey` varchar(32) NOT NULL,
`adminckey` varchar(32) NOT NULL,
`text` varchar(2048) NOT NULL,
`timestamp` datetime NOT NULL,
`server` varchar(32) DEFAULT NULL,
`secret` tinyint(1) unsigned NOT NULL,
`lasteditor` varchar(32) DEFAULT NULL,
`edits` text,
PRIMARY KEY (`id`),
KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`),
KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`),
KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `player`
--
DROP TABLE IF EXISTS `player`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `player` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
`firstseen` datetime NOT NULL,
`lastseen` datetime NOT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(32) NOT NULL,
`lastadminrank` varchar(32) NOT NULL DEFAULT 'Player',
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`),
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_option`
--
DROP TABLE IF EXISTS `poll_option`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_option` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pollid` int(11) NOT NULL,
`text` varchar(255) NOT NULL,
`percentagecalc` tinyint(1) NOT NULL DEFAULT '1',
`minval` int(3) DEFAULT NULL,
`maxval` int(3) DEFAULT NULL,
`descmin` varchar(32) DEFAULT NULL,
`descmid` varchar(32) DEFAULT NULL,
`descmax` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_pop_pollid` (`pollid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_question`
--
DROP TABLE IF EXISTS `poll_question`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
`starttime` datetime NOT NULL,
`endtime` datetime NOT NULL,
`question` varchar(255) NOT NULL,
`adminonly` tinyint(1) unsigned NOT NULL,
`multiplechoiceoptions` int(2) DEFAULT NULL,
`createdby_ckey` varchar(32) DEFAULT NULL,
`createdby_ip` int(10) unsigned NOT NULL,
`dontshow` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`),
KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`),
KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_textreply`
--
DROP TABLE IF EXISTS `poll_textreply`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_textreply` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`ckey` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`replytext` varchar(2048) NOT NULL,
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
PRIMARY KEY (`id`),
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_vote`
--
DROP TABLE IF EXISTS `poll_vote`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_vote` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`optionid` int(11) NOT NULL,
`ckey` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`adminrank` varchar(32) NOT NULL,
`rating` int(2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
CREATE DATABASE IF NOT EXISTS `feedback` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `feedback`;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `admin`
--
DROP TABLE IF EXISTS `admin`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
`rank` varchar(32) NOT NULL DEFAULT 'Administrator',
`level` int(2) NOT NULL DEFAULT '0',
`flags` int(16) NOT NULL DEFAULT '0',
`email` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `admin_log`
--
DROP TABLE IF EXISTS `admin_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`adminckey` varchar(32) NOT NULL,
`adminip` varchar(18) NOT NULL,
`log` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `admin_ranks`
--
DROP TABLE IF EXISTS `admin_ranks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin_ranks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rank` varchar(40) NOT NULL,
`flags` int(16) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `ban`
--
DROP TABLE IF EXISTS `ban`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ban` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bantime` datetime NOT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL,
`reason` varchar(2048) NOT NULL,
`job` varchar(32) DEFAULT NULL,
`duration` int(11) NOT NULL,
`expiration_time` datetime NOT NULL,
`ckey` varchar(32) NOT NULL,
`computerid` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`a_ckey` varchar(32) NOT NULL,
`a_computerid` varchar(32) NOT NULL,
`a_ip` int(10) unsigned NOT NULL,
`who` varchar(2048) NOT NULL,
`adminwho` varchar(2048) NOT NULL,
`edits` text,
`unbanned` tinyint(3) unsigned DEFAULT NULL,
`unbanned_datetime` datetime DEFAULT NULL,
`unbanned_ckey` varchar(32) DEFAULT NULL,
`unbanned_computerid` varchar(32) DEFAULT NULL,
`unbanned_ip` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`),
KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`),
KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `connection_log`
--
DROP TABLE IF EXISTS `connection_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `connection_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime DEFAULT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`ckey` varchar(45) DEFAULT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `death`
--
DROP TABLE IF EXISTS `death`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `death` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pod` varchar(50) NOT NULL,
`coord` varchar(32) NOT NULL,
`mapname` varchar(32) NOT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`tod` datetime NOT NULL COMMENT 'Time of death',
`job` varchar(32) NOT NULL,
`special` varchar(32) DEFAULT NULL,
`name` varchar(96) NOT NULL,
`byondkey` varchar(32) NOT NULL,
`laname` varchar(96) DEFAULT NULL,
`lakey` varchar(32) DEFAULT NULL,
`gender` enum('neuter','male','female','plural') NOT NULL,
`bruteloss` smallint(5) unsigned NOT NULL,
`brainloss` smallint(5) unsigned NOT NULL,
`fireloss` smallint(5) unsigned NOT NULL,
`oxyloss` smallint(5) unsigned NOT NULL,
`toxloss` smallint(5) unsigned NOT NULL,
`cloneloss` smallint(5) unsigned NOT NULL,
`staminaloss` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `feedback`
--
DROP TABLE IF EXISTS `feedback`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `feedback` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL,
`round_id` int(8) NOT NULL,
`var_name` varchar(32) NOT NULL,
`var_value` int(16) DEFAULT NULL,
`details` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `ipintel`
--
DROP TABLE IF EXISTS `ipintel`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ipintel` (
`ip` int(10) unsigned NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`intel` double NOT NULL DEFAULT '0',
PRIMARY KEY (`ip`),
KEY `idx_ipintel` (`ip`,`intel`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `legacy_population`
--
DROP TABLE IF EXISTS `legacy_population`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `legacy_population` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`playercount` int(11) DEFAULT NULL,
`admincount` int(11) DEFAULT NULL,
`time` datetime NOT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `library`
--
DROP TABLE IF EXISTS `library`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `library` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`author` varchar(45) NOT NULL,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL,
`ckey` varchar(32) NOT NULL DEFAULT 'LEGACY',
`datetime` datetime NOT NULL,
`deleted` tinyint(1) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `deleted_idx` (`deleted`),
KEY `idx_lib_id_del` (`id`,`deleted`),
KEY `idx_lib_del_title` (`deleted`,`title`),
KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `messages`
--
DROP TABLE IF EXISTS `messages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` enum('memo','message','message sent','note','watchlist entry') NOT NULL,
`targetckey` varchar(32) NOT NULL,
`adminckey` varchar(32) NOT NULL,
`text` varchar(2048) NOT NULL,
`timestamp` datetime NOT NULL,
`server` varchar(32) DEFAULT NULL,
`secret` tinyint(1) unsigned NOT NULL,
`lasteditor` varchar(32) DEFAULT NULL,
`edits` text,
PRIMARY KEY (`id`),
KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`),
KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`),
KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `player`
--
DROP TABLE IF EXISTS `player`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `player` (
`ckey` varchar(32) NOT NULL,
`firstseen` datetime NOT NULL,
`lastseen` datetime NOT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(32) NOT NULL,
`lastadminrank` varchar(32) NOT NULL DEFAULT 'Player',
`accountjoindate` DATE DEFAULT NULL,
PRIMARY KEY (`ckey`),
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_option`
--
DROP TABLE IF EXISTS `poll_option`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_option` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pollid` int(11) NOT NULL,
`text` varchar(255) NOT NULL,
`percentagecalc` tinyint(1) NOT NULL DEFAULT '1',
`minval` int(3) DEFAULT NULL,
`maxval` int(3) DEFAULT NULL,
`descmin` varchar(32) DEFAULT NULL,
`descmid` varchar(32) DEFAULT NULL,
`descmax` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_pop_pollid` (`pollid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_question`
--
DROP TABLE IF EXISTS `poll_question`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
`starttime` datetime NOT NULL,
`endtime` datetime NOT NULL,
`question` varchar(255) NOT NULL,
`adminonly` tinyint(1) unsigned NOT NULL,
`multiplechoiceoptions` int(2) DEFAULT NULL,
`createdby_ckey` varchar(32) DEFAULT NULL,
`createdby_ip` int(10) unsigned NOT NULL,
`dontshow` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`),
KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`),
KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_textreply`
--
DROP TABLE IF EXISTS `poll_textreply`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_textreply` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`ckey` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`replytext` varchar(2048) NOT NULL,
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
PRIMARY KEY (`id`),
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `poll_vote`
--
DROP TABLE IF EXISTS `poll_vote`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_vote` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`optionid` int(11) NOT NULL,
`ckey` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`adminrank` varchar(32) NOT NULL,
`rating` int(2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+2 -3
View File
@@ -261,15 +261,14 @@ DROP TABLE IF EXISTS `SS13_player`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_player` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
`firstseen` datetime NOT NULL,
`lastseen` datetime NOT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(32) NOT NULL,
`lastadminrank` varchar(32) NOT NULL DEFAULT 'Player',
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`),
`accountjoindate` DATE DEFAULT NULL,
PRIMARY KEY (`ckey`),
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-1
View File
@@ -1 +0,0 @@
~~
@@ -148,10 +148,8 @@
/area/ruin/powered/golem_ship)
"u" = (
/obj/structure/table/wood,
/obj/item/weapon/bedsheet/rd{
desc = "Majestic.";
/obj/item/weapon/bedsheet/rd/royal_cape{
layer = 3;
name = "Royal Cape of the Liberator";
pixel_x = 5;
pixel_y = 9
},
@@ -84,6 +84,7 @@
/area/ruin/powered)
"p" = (
/obj/structure/rack,
/obj/item/weapon/storage/bag/plants/portaseeder,
/obj/item/weapon/storage/bag/ore,
/obj/item/weapon/storage/firstaid/regular,
/turf/open/floor/plating/asteroid/basalt,
@@ -9,19 +9,89 @@
/turf/closed/wall/r_wall,
/area/ruin/powered)
"d" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
/obj/structure/table/wood,
/obj/item/weapon/lighter,
/obj/item/weapon/lighter,
/obj/item/weapon/storage/fancy/rollingpapers,
/obj/item/weapon/storage/fancy/rollingpapers,
/obj/item/weapon/storage/fancy/rollingpapers,
/obj/item/weapon/storage/fancy/rollingpapers,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/turf/closed/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
/area/ruin/powered)
"e" = (
/obj/machinery/smartfridge,
/obj/structure/table/wood,
/obj/item/weapon/storage/box/disks_plantgene,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"f" = (
/obj/machinery/plantgenes/seedvault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"g" = (
/obj/structure/table/wood,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"h" = (
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"i" = (
/obj/structure/closet/crate/hydroponics,
/obj/structure/beebox,
/obj/item/weapon/melee/flyswatter,
/obj/item/honey_frame,
/obj/item/honey_frame,
/obj/item/honey_frame,
/obj/item/queen_bee/bought,
/obj/item/clothing/head/beekeeper_head,
/obj/item/clothing/suit/beekeeper_suit,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"j" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"k" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/seed_vault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"l" = (
/obj/machinery/door/airlock,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"m" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
},
/turf/open/space/basic,
/area/lavaland/surface/outdoors)
"n" = (
/obj/machinery/smartfridge,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"o" = (
/obj/structure/closet/crate/hydroponics,
/obj/item/weapon/cultivator,
/obj/item/weapon/cultivator,
@@ -39,34 +109,22 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"g" = (
"p" = (
/obj/machinery/hydroponics/constructable,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"h" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/seed_vault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"i" = (
/obj/machinery/plantgenes/seedvault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"j" = (
"q" = (
/obj/item/weapon/hatchet,
/obj/item/weapon/storage/bag/plants,
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/structure/table/wood,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"k" = (
"r" = (
/obj/structure/table/wood,
/obj/item/weapon/storage/bag/plants,
/obj/item/weapon/storage/bag/plants,
@@ -76,7 +134,7 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"l" = (
"s" = (
/obj/structure/table/wood,
/obj/item/weapon/gun/energy/floragun,
/obj/item/weapon/gun/energy/floragun,
@@ -87,25 +145,13 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"m" = (
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"n" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"o" = (
"t" = (
/obj/effect/mob_spawn/human/seed_vault,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"p" = (
"u" = (
/obj/structure/sink{
icon_state = "sink";
dir = 8;
@@ -116,19 +162,19 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"q" = (
"v" = (
/obj/machinery/vending/hydronutrients,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"r" = (
"w" = (
/obj/machinery/vending/hydroseeds,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"s" = (
"x" = (
/obj/machinery/reagentgrinder{
pixel_y = 5
},
@@ -141,7 +187,7 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"t" = (
"y" = (
/obj/structure/sink{
dir = 4;
icon_state = "sink";
@@ -152,57 +198,51 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"u" = (
/obj/machinery/door/airlock,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"v" = (
"z" = (
/obj/machinery/door/airlock/external,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"w" = (
"A" = (
/obj/machinery/door/airlock/external,
/obj/structure/fans/tiny,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"x" = (
"B" = (
/obj/structure/disposalpipe/trunk,
/obj/machinery/disposal/bin,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"y" = (
"C" = (
/obj/machinery/seed_extractor,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"z" = (
"D" = (
/obj/machinery/biogenerator,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"A" = (
/obj/machinery/chem_dispenser/mutagen,
"E" = (
/obj/machinery/chem_dispenser/mutagensaltpeter,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"B" = (
"F" = (
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"C" = (
"G" = (
/obj/structure/closet/crate/hydroponics,
/obj/item/clothing/under/rank/hydroponics,
/obj/item/clothing/under/rank/hydroponics,
@@ -212,13 +252,13 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"D" = (
"H" = (
/obj/machinery/chem_master/condimaster,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"E" = (
"I" = (
/obj/structure/table/wood,
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/item/weapon/reagent_containers/glass/bucket,
@@ -228,25 +268,25 @@
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"F" = (
"J" = (
/obj/item/weapon/storage/toolbox/syndicate,
/obj/structure/table/wood,
/turf/open/floor/plasteel/freezer{
baseturf = /turf/open/floor/plating/lava/smooth
},
/area/ruin/powered)
"G" = (
"K" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
/area/ruin/powered)
"H" = (
"L" = (
/obj/structure/disposalpipe/segment{
dir = 1;
icon_state = "pipe-c"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"I" = (
"M" = (
/obj/structure/disposalpipe/trunk{
dir = 8
},
@@ -284,10 +324,10 @@ a
a
a
c
o
o
o
o
t
t
t
t
c
a
a
@@ -299,17 +339,17 @@ b
"}
(3,1,1) = {"
b
b
a
a
a
a
a
c
c
m
m
m
m
h
h
h
h
c
c
a
@@ -321,16 +361,16 @@ b
"}
(4,1,1) = {"
b
b
a
a
a
c
c
c
c
u
u
c
c
l
l
c
c
c
@@ -344,18 +384,18 @@ a
(5,1,1) = {"
a
a
a
a
a
c
e
m
p
m
m
p
m
p
c
k
c
n
h
u
h
h
u
h
u
c
a
a
@@ -366,18 +406,18 @@ a
(6,1,1) = {"
a
a
a
a
a
c
f
m
m
m
m
m
m
C
d
h
c
o
h
h
h
h
h
h
G
c
a
a
@@ -388,18 +428,18 @@ a
(7,1,1) = {"
a
a
a
a
a
c
g
m
g
m
m
g
m
g
e
h
c
p
h
p
h
h
p
h
p
c
a
a
@@ -408,44 +448,44 @@ a
a
"}
(8,1,1) = {"
a
a
a
a
b
a
c
e
h
l
h
h
v
h
h
m
q
m
m
x
B
B
G
H
F
F
K
L
a
a
a
a
"}
(9,1,1) = {"
a
a
a
a
b
a
c
i
m
e
m
m
y
m
m
f
h
c
I
p
h
n
h
h
C
h
k
c
M
a
a
a
@@ -454,18 +494,18 @@ a
(10,1,1) = {"
a
a
a
a
a
c
g
m
r
m
m
z
m
g
h
c
p
h
w
h
h
D
h
p
c
b
a
@@ -476,18 +516,18 @@ a
(11,1,1) = {"
a
a
a
a
a
c
j
m
s
m
m
A
m
D
h
h
c
q
h
x
h
h
E
h
H
c
a
a
@@ -496,20 +536,20 @@ a
a
"}
(12,1,1) = {"
a
a
a
a
b
a
c
g
m
m
m
m
m
m
g
h
h
c
p
h
h
h
h
h
h
p
c
a
a
@@ -520,18 +560,18 @@ a
(13,1,1) = {"
a
a
a
a
a
c
k
m
m
g
g
m
m
E
i
h
c
r
h
h
p
p
h
h
I
c
a
a
@@ -542,18 +582,18 @@ a
(14,1,1) = {"
a
a
a
a
a
c
l
m
t
m
m
t
m
F
c
i
c
s
h
y
h
h
y
h
J
c
a
a
@@ -564,15 +604,15 @@ a
(15,1,1) = {"
a
a
a
a
a
b
c
c
c
c
v
v
c
c
z
z
c
c
c
@@ -584,21 +624,21 @@ a
a
"}
(16,1,1) = {"
a
a
b
a
a
d
b
j
c
n
j
c
m
m
j
c
n
h
h
c
n
j
c
j
a
a
a
@@ -611,12 +651,12 @@ a
a
a
a
b
a
b
a
a
c
w
w
A
A
c
b
b
@@ -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";
+3 -1
View File
@@ -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,
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -3948,7 +3948,7 @@
},
/area/awaymission/snowdin)
"kB" = (
/obj/item/weapon/c4{
/obj/item/weapon/grenade/plastic/c4{
pixel_x = 2;
pixel_y = 1
},
+2 -2
View File
@@ -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" = (
File diff suppressed because it is too large Load Diff
@@ -114,7 +114,7 @@
"acj" = (/obj/machinery/light/small,/obj/structure/table,/turf/open/floor/plasteel,/area/security/processing{name = "Permabrig"})
"ack" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4;name = "regular air scrubber";on = 1;scrub_N2O = 0;scrub_Toxins = 0},/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas.";dir = 4;name = "Prison Monitor";network = list("Prison");pixel_x = -30;pixel_y = 0},/turf/open/floor/plasteel/red/side{dir = 8},/area/security/processing{name = "Permabrig"})
"acl" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4;initialize_directions = 11},/obj/structure/cable{tag = "icon-1-2";icon_state = "1-2"},/turf/open/floor/plasteel/red/side{dir = 4},/area/security/processing{name = "Permabrig"})
"acm" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2;pixel_y = -5},/obj/item/weapon/c4{pixel_x = -3;pixel_y = 3},/obj/item/weapon/c4{pixel_x = 2;pixel_y = -3},/obj/item/weapon/c4{pixel_x = -2;pixel_y = -1},/obj/item/weapon/c4{pixel_x = 3;pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shuttle/syndicate)
"acm" = (/obj/structure/table,/obj/item/weapon/grenade/plastic/c4{pixel_x = 2;pixel_y = -5},/obj/item/weapon/grenade/plastic/c4{pixel_x = -3;pixel_y = 3},/obj/item/weapon/grenade/plastic/c4{pixel_x = 2;pixel_y = -3},/obj/item/weapon/grenade/plastic/c4{pixel_x = -2;pixel_y = -1},/obj/item/weapon/grenade/plastic/c4{pixel_x = 3;pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shuttle/syndicate)
"acn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/shuttle/syndicate)
"aco" = (/obj/machinery/door/window{name = "Ready Room";req_access_txt = "150"},/turf/open/floor/mineral/plastitanium,/area/shuttle/syndicate)
"acp" = (/obj/machinery/light{dir = 8},/obj/structure/sign/electricshock{pixel_x = -32},/turf/open/floor/plasteel/green,/area/security/processing{name = "Permabrig"})
@@ -241,7 +241,7 @@
"aeG" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/turf/open/floor/plating,/area/medical/virology)
"aeH" = (/obj/item/weapon/storage/box/beakers{pixel_x = 2;pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/machinery/power/apc{cell_type = 5000;dir = 1;name = "Virology APC";pixel_x = 0;pixel_y = 24},/obj/structure/cable/yellow{d2 = 4;icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8;icon_state = "0-8"},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 9},/area/medical/virology)
"aeI" = (/obj/item/weapon/book/manual/wiki/infections{pixel_y = 7},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/cable/yellow{d1 = 2;d2 = 8;icon_state = "2-8"},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 5},/area/medical/virology)
"aeJ" = (/obj/machinery/smartfridge/chemistry/virology,/obj/machinery/airalarm{frequency = 1439;pixel_y = 23},/turf/open/floor/plasteel/whitegreen,/area/medical/virology)
"aeJ" = (/obj/machinery/smartfridge/chemistry/virology/preloaded,/obj/machinery/airalarm{frequency = 1439;pixel_y = 23},/turf/open/floor/plasteel/whitegreen,/area/medical/virology)
"aeK" = (/obj/machinery/reagentgrinder{pixel_y = 8},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 9},/area/medical/virology)
"aeL" = (/obj/item/clothing/gloves/color/latex,/obj/item/device/healthanalyzer,/obj/item/clothing/glasses/hud/health,/obj/structure/reagent_dispensers/virusfood{density = 0;pixel_x = 0;pixel_y = 30},/obj/structure/table/glass,/turf/open/floor/plasteel/whitegreen/side{dir = 5},/area/medical/virology)
"aeM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/open/floor/plasteel/red/side{dir = 8},/area/security/processing{name = "Prisoner Processing"})
@@ -620,7 +620,7 @@
"alV" = (/obj/machinery/camera{c_tag = "Custodial Closet"},/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"alW" = (/obj/machinery/monkey_recycler,/obj/machinery/firealarm{dir = 2;pixel_y = 24},/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"alX" = (/obj/machinery/processor{desc = "A machine used to process slimes and retrieve their extract.";name = "Slime Processor"},/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"alY" = (/obj/machinery/smartfridge/extract,/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"alY" = (/obj/machinery/smartfridge/extract/preloaded,/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"alZ" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/airalarm{frequency = 1439;pixel_y = 23},/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"ama" = (/obj/structure/closet/l3closet/scientist,/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
"amb" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light_switch{pixel_x = 0;pixel_y = 28},/turf/open/floor/plasteel/white,/area/toxins/xenobiology)
@@ -1361,7 +1361,7 @@
"aAi" = (/obj/structure/table/wood,/obj/item/weapon/folder,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library)
"aAj" = (/obj/machinery/power/apc{dir = 8;name = "Library APC";pixel_x = -25},/obj/structure/cable{icon_state = "0-4";d2 = 4},/turf/open/floor/wood,/area/library)
"aAk" = (/obj/structure/cable{d1 = 2;d2 = 8;icon_state = "2-8"},/turf/open/floor/wood,/area/library)
"aAl" = (/obj/effect/landmark/start{name = "Librarian"},/turf/open/floor/wood,/area/library)
"aAl" = (/obj/effect/landmark/start{name = "Curator"},/turf/open/floor/wood,/area/library)
"aAm" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/wood,/area/library)
"aAn" = (/obj/machinery/light/small/built{tag = "icon-bulb1 (WEST)";icon_state = "bulb1";dir = 8},/obj/machinery/airalarm{frequency = 1439;locked = 0;pixel_y = 23},/turf/open/floor/wood,/area/crew_quarters/cafeteria{name = "Cafe"})
"aAo" = (/turf/open/floor/wood,/area/crew_quarters/cafeteria{name = "Cafe"})
@@ -1393,7 +1393,7 @@
"aAO" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/maintenance/fore)
"aAP" = (/obj/structure/chair/stool,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/maintenance/fore)
"aAQ" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/noslip,/area/construction/hallway{name = "Secure Workstations Hallway"})
"aAR" = (/obj/structure/closet/cabinet,/obj/item/toy/figure/assistant,/obj/item/toy/figure/atmos,/obj/item/toy/figure/bartender,/obj/item/toy/figure/borg,/obj/item/toy/figure/botanist,/obj/item/toy/figure/captain,/obj/item/toy/figure/cargotech,/obj/item/toy/figure/ce,/obj/item/toy/figure/chaplain,/obj/item/toy/figure/chef,/obj/item/toy/figure/chemist,/obj/item/toy/figure/clown,/obj/item/toy/figure/cmo,/obj/item/toy/figure/detective,/obj/item/toy/figure/dsquad,/obj/item/toy/figure/engineer,/obj/item/toy/figure/geneticist,/obj/item/toy/figure/hop,/obj/item/toy/figure/hos,/obj/item/toy/figure/ian,/obj/item/toy/figure/janitor,/obj/item/toy/figure/lawyer,/obj/item/toy/figure/librarian,/obj/item/toy/figure/md,/obj/item/toy/figure/mime,/obj/item/toy/figure/miner,/obj/item/toy/figure/ninja,/obj/item/toy/figure/qm,/obj/item/toy/figure/rd,/obj/item/toy/figure/roboticist,/obj/item/toy/figure/scientist,/obj/item/toy/figure/secofficer,/obj/item/toy/figure/syndie,/obj/item/toy/figure/virologist,/obj/item/toy/figure/warden,/obj/item/toy/figure/wizard,/obj/item/toy/minimeteor,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library)
"aAR" = (/obj/structure/closet/cabinet,/obj/item/toy/figure/assistant,/obj/item/toy/figure/atmos,/obj/item/toy/figure/bartender,/obj/item/toy/figure/borg,/obj/item/toy/figure/botanist,/obj/item/toy/figure/captain,/obj/item/toy/figure/cargotech,/obj/item/toy/figure/ce,/obj/item/toy/figure/chaplain,/obj/item/toy/figure/chef,/obj/item/toy/figure/chemist,/obj/item/toy/figure/clown,/obj/item/toy/figure/cmo,/obj/item/toy/figure/detective,/obj/item/toy/figure/dsquad,/obj/item/toy/figure/engineer,/obj/item/toy/figure/geneticist,/obj/item/toy/figure/hop,/obj/item/toy/figure/hos,/obj/item/toy/figure/ian,/obj/item/toy/figure/janitor,/obj/item/toy/figure/lawyer,/obj/item/toy/figure/curator,/obj/item/toy/figure/md,/obj/item/toy/figure/mime,/obj/item/toy/figure/miner,/obj/item/toy/figure/ninja,/obj/item/toy/figure/qm,/obj/item/toy/figure/rd,/obj/item/toy/figure/roboticist,/obj/item/toy/figure/scientist,/obj/item/toy/figure/secofficer,/obj/item/toy/figure/syndie,/obj/item/toy/figure/virologist,/obj/item/toy/figure/warden,/obj/item/toy/figure/wizard,/obj/item/toy/minimeteor,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library)
"aAS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library)
"aAT" = (/obj/item/device/radio/intercom{dir = 4;name = "Station Intercom (General)";pixel_x = 0;pixel_y = -27},/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library)
"aAU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8;initialize_directions = 11},/turf/open/floor/wood{baseturf = /turf/open/floor/plating/asteroid},/area/library)
@@ -2985,7 +2985,7 @@
"bfu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{tag = "icon-1-2";icon_state = "1-2"},/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)";icon_state = "whitebluecorner";dir = 4},/area/medical/medbay{name = "Medbay Central"})
"bfv" = (/obj/machinery/chem_dispenser,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTHWEST)";icon_state = "whiteyellow";dir = 9},/area/medical/chemistry)
"bfw" = (/obj/machinery/chem_master,/obj/item/weapon/book/manual/wiki/chemistry,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry)
"bfx" = (/obj/machinery/smartfridge/chemistry{name = "chemical component fridge";spawn_meds = null},/obj/machinery/camera/autoname,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry)
"bfx" = (/obj/machinery/smartfridge/chemistry/preloaded{name = "chemical component fridge"},/obj/machinery/camera/autoname,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry)
"bfy" = (/obj/structure/table,/obj/machinery/vending/wallmed{pixel_y = 28},/obj/item/weapon/hand_labeler,/obj/item/clothing/glasses/science,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry)
"bfz" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/item/stack/sheet/mineral/plasma{layer = 2.9;pixel_y = 4},/obj/item/stack/sheet/mineral/plasma,/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry)
"bfA" = (/obj/structure/sink{pixel_y = 24},/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (NORTH)";icon_state = "whiteyellow";dir = 1},/area/medical/chemistry)
@@ -3094,7 +3094,7 @@
"bhz" = (/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (WEST)";icon_state = "whiteyellow";dir = 8},/area/medical/chemistry)
"bhA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plasteel/white,/area/medical/chemistry)
"bhB" = (/obj/structure/closet/secure_closet/chemical,/turf/open/floor/plasteel/white,/area/medical/chemistry)
"bhC" = (/obj/machinery/smartfridge/chemistry{name = "chemical component fridge";spawn_meds = null},/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)";icon_state = "whiteyellow";dir = 4},/area/medical/chemistry)
"bhC" = (/obj/machinery/smartfridge/chemistry/preloaded{name = "chemical component fridge"},/turf/open/floor/plasteel/whiteyellow/side{tag = "icon-whiteyellow (EAST)";icon_state = "whiteyellow";dir = 4},/area/medical/chemistry)
"bhD" = (/turf/closed/wall/r_wall,/area/security/checkpoint)
"bhE" = (/obj/machinery/atmospherics/components/unary/vent_pump{name = "regular air vent";on = 1},/obj/machinery/computer/secure_data,/turf/open/floor/plasteel{icon_state = "redfull"},/area/security/checkpoint)
"bhF" = (/obj/structure/chair/office/dark{dir = 8},/obj/machinery/firealarm{dir = 1;pixel_x = 0;pixel_y = -26},/turf/open/floor/plasteel{icon_state = "redfull"},/area/security/checkpoint)
@@ -3205,7 +3205,7 @@
"bjG" = (/obj/machinery/light{icon_state = "tube1";dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)";icon_state = "whiteblue";dir = 8},/area/medical/medbay{name = "Medbay Central"})
"bjH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/whiteblue/corner,/area/medical/medbay{name = "Medbay Central"})
"bjI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/open/floor/plating,/area/medical/chemistry)
"bjJ" = (/obj/machinery/smartfridge/chemistry,/turf/closed/wall,/area/medical/chemistry)
"bjJ" = (/obj/machinery/smartfridge/chemistry/preloaded,/turf/closed/wall,/area/medical/chemistry)
"bjK" = (/obj/structure/table/reinforced,/obj/machinery/door/window/southleft{dir = 1;name = "Chemistry Desk";req_access_txt = "33"},/obj/machinery/door/firedoor/border_only,/turf/open/floor/plasteel/orange,/area/medical/chemistry)
"bjL" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/medical/chemistry)
"bjM" = (/obj/machinery/door/airlock/glass_command{name = "Bridge Access";req_access_txt = "0";req_one_access_txt = "19; 1"},/turf/open/floor/plasteel/darkblue,/area/bridge)
+110 -80
View File
@@ -142,15 +142,15 @@
/area/solar/auxstarboard)
"aap" = (
/obj/docking_port/stationary/random{
id = "pod_asteroid1";
name = "asteroid"
id = "pod_lavaland1";
name = "lavaland"
},
/turf/open/space,
/area/space)
"aaq" = (
/obj/docking_port/stationary/random{
id = "pod_asteroid2";
name = "asteroid"
id = "pod_lavaland2";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -203,7 +203,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_x = -32;
possible_destinations = "pod_asteroid1";
possible_destinations = "pod_lavaland1";
shuttleId = "pod1"
},
/obj/effect/turf_decal/stripes/line{
@@ -226,7 +226,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_x = -32;
possible_destinations = "pod_asteroid2";
possible_destinations = "pod_lavaland2";
shuttleId = "pod2"
},
/obj/effect/turf_decal/stripes/line{
@@ -10134,14 +10134,11 @@
/turf/open/space,
/area/space)
"aux" = (
/obj/item/weapon/twohanded/required/kirbyplants{
icon_state = "plant-21";
layer = 4.1;
pixel_x = -3;
pixel_y = 3
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/bot,
/obj/item/weapon/twohanded/required/kirbyplants{
icon_state = "plant-22"
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
@@ -10753,7 +10750,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/quartermaster/storage)
@@ -10777,25 +10774,28 @@
/turf/closed/wall/mineral/titanium,
/area/shuttle/supply)
"avM" = (
/obj/machinery/atmospherics/components/unary/thermomachine/heater{
dir = 4;
on = 1
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/bot,
/obj/item/weapon/twohanded/required/kirbyplants{
icon_state = "plant-21";
layer = 4.1;
pixel_x = -3;
pixel_y = 3
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
})
"avN" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
icon_state = "manifold";
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 1;
icon_state = "pump_map";
name = "Thermo to Gas"
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
@@ -11240,7 +11240,7 @@
/area/quartermaster/storage)
"awJ" = (
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/quartermaster/storage)
@@ -11296,10 +11296,6 @@
/turf/open/space,
/area/space)
"awR" = (
/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
icon_state = "freezer";
dir = 4
},
/obj/structure/sign/securearea{
pixel_x = -32
},
@@ -11311,6 +11307,10 @@
network = list("SS13","Engine")
},
/obj/effect/turf_decal/bot,
/obj/machinery/atmospherics/components/unary/thermomachine/heater{
dir = 4;
on = 1
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
@@ -11765,12 +11765,13 @@
name = "Atmospherics Engine"
})
"axM" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 5
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/general/visible{
icon_state = "manifold";
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
@@ -11778,11 +11779,6 @@
"axN" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/general/visible{
icon_state = "intact";
dir = 4
},
/obj/machinery/meter,
/turf/open/floor/plasteel/neutral,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
@@ -11794,9 +11790,6 @@
icon_state = "1-2";
pixel_y = 0
},
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 10
},
/obj/machinery/light{
dir = 4;
icon_state = "tube1"
@@ -12429,11 +12422,9 @@
/turf/open/floor/plasteel,
/area/shuttle/supply)
"aza" = (
/obj/machinery/atmospherics/components/trinary/filter{
dir = 1;
/obj/machinery/atmospherics/components/trinary/filter/flipped{
filter_type = "n2";
name = "nitogren filter";
on = 1
name = "nitrogen filter"
},
/turf/open/floor/plasteel/yellow,
/area/engine/gravity_generator{
@@ -25977,7 +25968,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_y = -32;
possible_destinations = "pod_asteroid3";
possible_destinations = "pod_lavaland3";
shuttleId = "pod3"
},
/obj/effect/turf_decal/stripes/line{
@@ -25996,8 +25987,8 @@
"aXK" = (
/obj/docking_port/stationary/random{
dir = 4;
id = "pod_asteroid4";
name = "asteroid"
id = "pod_lavaland4";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -31236,7 +31227,7 @@
icon_state = "1-4"
},
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/quartermaster/miningdock{
@@ -34793,7 +34784,6 @@
dir = 4
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L14"
},
/area/hallway/primary/central)
@@ -52476,7 +52466,7 @@
name = "Queue Shutters"
},
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/hallway/primary/central)
@@ -62918,7 +62908,7 @@
"cpl" = (
/obj/structure/table/wood,
/obj/item/weapon/clipboard,
/obj/item/toy/figure/librarian,
/obj/item/toy/figure/curator,
/obj/machinery/airalarm{
dir = 8;
icon_state = "alarm0";
@@ -63736,7 +63726,7 @@
/area/library)
"cqF" = (
/obj/machinery/door/morgue{
name = "Librarian's Study";
name = "Curator's Study";
req_access_txt = "37"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -64356,10 +64346,12 @@
/turf/open/floor/plasteel/black,
/area/library)
"crP" = (
/obj/structure/dresser,
/obj/machinery/computer/security/telescreen/entertainment{
pixel_x = -32
},
/obj/structure/closet/crate,
/obj/item/clothing/shoes/workboots/mining,
/obj/item/clothing/under/rank/curator/treasure_hunter,
/obj/item/clothing/suit/curator,
/obj/item/clothing/head/curator,
/obj/item/weapon/storage/backpack/satchel/explorer,
/turf/open/floor/plasteel/black,
/area/library)
"crQ" = (
@@ -67498,7 +67490,7 @@
desc = "This looks awfully familiar...";
icon_state = "curator"
},
/obj/item/clothing/under/rank/librarian/curator,
/obj/item/clothing/under/rank/curator/treasure_hunter,
/turf/open/floor/carpet,
/area/crew_quarters/sleep)
"cxC" = (
@@ -70986,7 +70978,6 @@
"cDW" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel{
desc = "";
icon_state = "L13";
name = "floor"
},
@@ -79512,8 +79503,13 @@
name = "Medbay Central"
})
"cUf" = (
/obj/machinery/smartfridge/chemistry,
/turf/closed/wall,
/obj/structure/grille,
/obj/machinery/door/poddoor/shutters/preopen{
id = "chemisttop";
name = "Chemisty Lobby Shutters"
},
/obj/structure/window/reinforced/fulltile,
/turf/open/floor/plating,
/area/medical/medbay{
name = "Medbay Central"
})
@@ -79536,14 +79532,9 @@
name = "Medbay Central"
})
"cUh" = (
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
/obj/machinery/door/poddoor/shutters/preopen{
id = "chemisttop";
name = "Chemisty Lobby Shutters"
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/closed/wall,
/area/medical/medbay{
name = "Medbay Central"
})
@@ -81189,7 +81180,7 @@
/turf/open/floor/plating,
/area/toxins/xenobiology)
"cXc" = (
/obj/machinery/smartfridge/extract,
/obj/machinery/smartfridge/extract/preloaded,
/obj/machinery/light_switch{
pixel_x = -26
},
@@ -82189,6 +82180,7 @@
/obj/item/weapon/grenade/chem_grenade,
/obj/item/weapon/grenade/chem_grenade,
/obj/item/weapon/grenade/chem_grenade,
/obj/item/weapon/screwdriver,
/turf/open/floor/plasteel/whiteyellow/corner{
icon_state = "whiteyellowcorner";
dir = 8
@@ -84273,7 +84265,7 @@
/turf/open/floor/plasteel/whiteyellow/corner,
/area/medical/chemistry)
"ddg" = (
/obj/machinery/smartfridge/chemistry,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/closed/wall,
/area/medical/chemistry)
"ddh" = (
@@ -96353,7 +96345,6 @@
},
/area/medical/morgue)
"dAn" = (
/turf/open/floor/plating,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
icon_state = "manifold";
@@ -104160,7 +104151,7 @@
name = "emergency shower"
},
/turf/open/floor/plasteel/whiteblue/side{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 4
},
/area/shuttle/escape)
@@ -104905,7 +104896,7 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/smartfridge/chemistry/virology,
/obj/machinery/smartfridge/chemistry/virology/preloaded,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -105516,7 +105507,7 @@
/area/library/abandoned_library)
"dSu" = (
/obj/structure/table/wood,
/obj/item/clothing/under/rank/librarian,
/obj/item/clothing/under/rank/curator,
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
name = "2maintenance loot spawner"
@@ -108176,7 +108167,7 @@
/area/maintenance/fpmaint2/aft_port_maintenance)
"dXu" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/spellbook/oneuse/smoke,
/obj/item/weapon/spellbook/oneuse/smoke/lesser,
/obj/item/weapon/nullrod,
/obj/item/organ/heart,
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,
@@ -112311,6 +112302,45 @@
},
/turf/open/floor/plasteel/neutral,
/area/atmos)
"ehO" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"ehP" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"ehQ" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"ehR" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"ehS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/bot,
/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
icon_state = "freezer";
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
})
"ehT" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 5
},
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/gravity_generator{
name = "Atmospherics Engine"
})
(1,1,1) = {"
aaa
@@ -136033,11 +136063,11 @@ aiW
apF
aqY
asd
ati
axL
aux
avM
awR
axL
ehS
axL
axL
asd
@@ -136295,7 +136325,7 @@ auy
avN
awS
axM
aqZ
ehT
azZ
aAV
aCc
@@ -136553,7 +136583,7 @@ ato
awT
axN
aza
aAa
ato
aAW
aCd
aDD
@@ -136809,7 +136839,7 @@ ebT
avO
auA
axO
azb
atk
atk
aAX
aCe
@@ -143544,7 +143574,7 @@ cbA
cdn
ceS
cgp
chQ
ehO
cjl
ckP
cjl
@@ -143801,7 +143831,7 @@ cbB
cdo
ceS
cgq
chQ
ehO
cjl
ckP
cjl
@@ -144315,7 +144345,7 @@ bWi
cdq
ceS
cgp
chQ
ehO
cjm
ckP
cmk
@@ -144572,7 +144602,7 @@ cbC
cdr
ceT
cgp
chQ
ehO
cjn
ckP
cmk
+41 -31
View File
@@ -1910,8 +1910,8 @@
/area/shuttle/pod_3)
"adG" = (
/obj/docking_port/stationary/random{
id = "pod_asteroid2";
name = "asteroid"
id = "pod_lavaland2";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -1927,7 +1927,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_x = -32;
possible_destinations = "pod_asteroid2";
possible_destinations = "pod_lavaland2";
shuttleId = "pod2"
},
/turf/open/floor/mineral/titanium/blue,
@@ -23696,7 +23696,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_y = -32;
possible_destinations = "pod_asteroid3";
possible_destinations = "pod_lavaland3";
shuttleId = "pod3"
},
/turf/open/floor/mineral/titanium/blue,
@@ -27963,7 +27963,6 @@
dir = 4
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L13";
name = "floor"
},
@@ -28813,7 +28812,6 @@
icon_state = "4-8"
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L14"
},
/area/hallway/primary/central)
@@ -34140,8 +34138,8 @@
"bii" = (
/obj/docking_port/stationary/random{
dir = 4;
id = "pod_asteroid3";
name = "asteroid"
id = "pod_lavaland3";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -45372,12 +45370,12 @@
name = "Port Maintenance"
})
"bBr" = (
/obj/structure/table/wood,
/obj/machinery/airalarm{
dir = 4;
pixel_x = -23;
pixel_y = 0
},
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"bBs" = (
@@ -47035,7 +47033,6 @@
name = "\improper Auxiliary Restrooms"
})
"bEw" = (
/obj/structure/table/wood,
/obj/machinery/computer/security/telescreen/entertainment{
pixel_x = -32;
pixel_y = 0
@@ -47044,6 +47041,7 @@
dir = 4;
network = list("SS13")
},
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"bEx" = (
@@ -53664,6 +53662,12 @@
pixel_x = 30;
pixel_y = 0
},
/obj/structure/closet/crate,
/obj/item/clothing/shoes/workboots/mining,
/obj/item/clothing/under/rank/curator/treasure_hunter,
/obj/item/clothing/suit/curator,
/obj/item/clothing/head/curator,
/obj/item/weapon/storage/backpack/satchel/explorer,
/turf/open/floor/engine/cult,
/area/library)
"bPY" = (
@@ -56821,7 +56825,6 @@
icon_state = "4-8"
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L13";
name = "floor"
},
@@ -57513,7 +57516,6 @@
dir = 4
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L14"
},
/area/hallway/primary/central)
@@ -63158,7 +63160,7 @@
/turf/open/floor/plating,
/area/medical/chemistry)
"cfY" = (
/obj/machinery/smartfridge/chemistry,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/closed/wall,
/area/medical/chemistry)
"cfZ" = (
@@ -77226,7 +77228,7 @@
},
/area/medical/virology)
"cDH" = (
/obj/machinery/smartfridge/chemistry/virology,
/obj/machinery/smartfridge/chemistry/virology/preloaded,
/obj/machinery/airalarm{
frequency = 1439;
pixel_y = 23
@@ -82483,7 +82485,7 @@
/area/chapel/office)
"cMa" = (
/obj/structure/table/wood,
/obj/item/weapon/spellbook/oneuse/smoke{
/obj/item/weapon/spellbook/oneuse/smoke/lesser{
name = "mysterious old book of "
},
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater{
@@ -86084,8 +86086,8 @@
/area/toxins/xenobiology)
"cSP" = (
/obj/docking_port/stationary/random{
id = "pod_asteroid1";
name = "asteroid"
id = "pod_lavaland1";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -86175,7 +86177,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_x = -32;
possible_destinations = "pod_asteroid1";
possible_destinations = "pod_lavaland1";
shuttleId = "pod1"
},
/turf/open/floor/mineral/titanium/blue,
@@ -86368,7 +86370,7 @@
},
/obj/machinery/computer/shuttle/pod{
pixel_y = -32;
possible_destinations = "pod_asteroid4";
possible_destinations = "pod_lavaland4";
shuttleId = "pod4"
},
/turf/open/floor/mineral/titanium/blue,
@@ -87162,8 +87164,8 @@
"cUL" = (
/obj/docking_port/stationary/random{
dir = 4;
id = "pod_asteroid4";
name = "asteroid"
id = "pod_lavaland4";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -91075,7 +91077,7 @@
d2 = 8;
icon_state = "2-8"
},
/obj/machinery/smartfridge/extract,
/obj/machinery/smartfridge/extract/preloaded,
/obj/structure/cable/yellow{
d1 = 4;
d2 = 8;
@@ -95333,6 +95335,14 @@
icon_state = "xenomaint";
name = "Xeno Maintenance"
})
"dmD" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"dmE" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
(1,1,1) = {"
aaa
@@ -114481,7 +114491,7 @@ bwa
bxU
bzD
bBr
bCT
bSx
bEw
bzE
bHR
@@ -114737,9 +114747,9 @@ bue
bwb
bxV
bzE
bBs
bCU
bBs
dmD
bzE
dmD
bzE
bHR
bJz
@@ -128192,7 +128202,7 @@ cRi
cRi
daP
cLE
cRi
dlV
aaa
aaa
aaf
@@ -128448,7 +128458,7 @@ daF
daJ
cRi
bvT
dlV
cRi
cRi
cRi
cRi
@@ -128705,7 +128715,7 @@ cSn
cSn
cRi
dmq
dlV
cRi
cZv
cZv
cRi
@@ -129733,7 +129743,7 @@ cSn
daN
cRi
dmr
dlV
cRi
cZv
dbw
cRi
@@ -129990,7 +130000,7 @@ daI
daM
cRi
cTA
dlV
cRi
cRi
cRi
cRi
+71 -17
View File
@@ -513,7 +513,7 @@
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4";
icon_state = "1-4"
},
/obj/structure/cable{
d1 = 1;
@@ -1040,7 +1040,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/brown{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1;
dir = 1
},
/area/mine/living_quarters)
"cg" = (
@@ -1074,7 +1074,7 @@
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4";
icon_state = "1-4"
},
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
@@ -1497,10 +1497,21 @@
/area/mine/living_quarters)
"dd" = (
/obj/structure/table,
/obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer{
pixel_x = 7;
pixel_y = 5
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/obj/item/weapon/reagent_containers/food/drinks/beer{
pixel_x = -1;
pixel_y = 9
},
/obj/item/weapon/reagent_containers/food/drinks/beer{
pixel_x = -8;
pixel_y = 0
},
/turf/open/floor/plasteel/bar{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
@@ -1772,6 +1783,9 @@
pixel_x = -5;
pixel_y = 30
},
/obj/machinery/shower{
dir = 8
},
/turf/open/floor/plasteel/purple/corner{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
@@ -2192,7 +2206,7 @@
},
/turf/open/floor/plasteel/vault{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 8;
dir = 8
},
/area/mine/maintenance)
"ez" = (
@@ -2214,13 +2228,13 @@
/obj/machinery/iv_drip,
/turf/open/floor/plasteel/whiteblue/side{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1;
dir = 1
},
/area/mine/living_quarters)
"eB" = (
/turf/open/floor/plasteel/whiteblue/side{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1;
dir = 1
},
/area/mine/living_quarters)
"eC" = (
@@ -2231,7 +2245,7 @@
},
/turf/open/floor/plasteel/whiteblue/side{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 5;
dir = 5
},
/area/mine/living_quarters)
"eD" = (
@@ -2398,7 +2412,7 @@
/obj/item/weapon/storage/firstaid/regular,
/turf/open/floor/plasteel/whiteblue/side{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 4;
dir = 4
},
/area/mine/living_quarters)
"eU" = (
@@ -2512,6 +2526,7 @@
dir = 2;
network = list("MINE")
},
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plasteel/brown{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 5
@@ -2520,7 +2535,7 @@
"fe" = (
/turf/open/floor/plasteel/brown/corner{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1;
dir = 1
},
/area/mine/production)
"ff" = (
@@ -2578,7 +2593,7 @@
},
/turf/open/floor/plasteel/brown{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1;
dir = 1
},
/area/mine/living_quarters)
"fm" = (
@@ -2600,7 +2615,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/brown{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 1;
dir = 1
},
/area/mine/living_quarters)
"fp" = (
@@ -2674,7 +2689,7 @@
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4";
icon_state = "1-4"
},
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
@@ -2712,6 +2727,10 @@
/obj/machinery/light/small{
dir = 1
},
/obj/structure/extinguisher_cabinet{
pixel_x = -5;
pixel_y = 30
},
/turf/open/floor/plasteel/purple/corner{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
dir = 4
@@ -2794,6 +2813,41 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/turf/closed/indestructible/riveted,
/area/space)
"fQ" = (
/obj/machinery/shower{
dir = 8
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/white,
/area/mine/laborcamp)
"fR" = (
/obj/structure/sink/kitchen{
dir = 4;
icon_state = "sink_alt";
pixel_x = -13;
tag = "icon-sink_alt (EAST)"
},
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/area/mine/laborcamp)
"fS" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plasteel/purple/corner{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/area/mine/production)
"fT" = (
/obj/structure/sink{
dir = 4;
icon_state = "sink";
pixel_x = 11;
tag = "icon-sink (EAST)"
},
/turf/open/floor/plasteel/bar{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/area/mine/living_quarters)
(1,1,1) = {"
aa
@@ -8919,7 +8973,7 @@ aA
at
at
at
at
fR
at
au
fH
@@ -9175,7 +9229,7 @@ an
an
at
at
at
fQ
at
dr
an
@@ -14594,8 +14648,8 @@ fj
ee
cT
cZ
dg
dk
fT
ee
al
al
@@ -18433,7 +18487,7 @@ af
ab
ab
dx
dC
fS
dK
bI
bS
+363 -78
View File
@@ -7303,7 +7303,6 @@
icon_state = "1-2"
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L14"
},
/area/hallway/primary/central{
@@ -9155,7 +9154,7 @@
},
/obj/effect/landmark/start/shaft_miner,
/turf/open/floor/plasteel/loadingarea{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
baseturf = /turf/open/space;
dir = 8
},
/area/quartermaster/miningdock)
@@ -14512,14 +14511,6 @@
tag = "icon-4-8";
icon_state = "4-8"
},
/obj/structure/cable/white{
tag = "icon-2-4";
icon_state = "2-4"
},
/obj/structure/cable/white{
tag = "icon-2-8";
icon_state = "2-8"
},
/turf/open/floor/plasteel/vault{
dir = 5
},
@@ -14894,11 +14885,6 @@
/obj/item/stack/cable_coil/random,
/obj/item/stack/cable_coil/random,
/obj/machinery/light,
/obj/machinery/power/apc{
dir = 2;
name = "Bar APC";
pixel_y = -26
},
/obj/structure/cable/white,
/turf/open/floor/plasteel/black,
/area/crew_quarters/bar)
@@ -16523,6 +16509,9 @@
/obj/machinery/status_display{
pixel_x = -32
},
/obj/machinery/light{
dir = 8
},
/turf/open/floor/mineral/plastitanium/brig,
/area/shuttle/escape)
"aAb" = (
@@ -16558,6 +16547,9 @@
"aAf" = (
/obj/structure/table/reinforced,
/obj/item/weapon/storage/fancy/donut_box,
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 8
},
@@ -24133,6 +24125,9 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/delivery,
/obj/machinery/light{
dir = 8
},
/turf/open/floor/plasteel,
/area/shuttle/escape)
"aME" = (
@@ -24187,6 +24182,9 @@
/obj/machinery/status_display{
pixel_x = 32
},
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 5
},
@@ -25964,7 +25962,6 @@
icon_state = "4-8"
},
/turf/open/floor/plasteel{
desc = "";
icon_state = "L13";
name = "floor"
},
@@ -27024,7 +27021,7 @@
/turf/open/floor/plating,
/area/medical/chemistry)
"aRh" = (
/obj/machinery/smartfridge/chemistry,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/closed/wall,
/area/medical/chemistry)
"aRi" = (
@@ -30548,7 +30545,7 @@
/area/maintenance/starboard)
"aXL" = (
/obj/machinery/door/morgue{
name = "Librarian's Study";
name = "Curator's Study";
req_access_txt = "37"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -37361,7 +37358,7 @@
/turf/open/floor/plasteel,
/area/toxins/xenobiology)
"bjb" = (
/obj/machinery/smartfridge/extract,
/obj/machinery/smartfridge/extract/preloaded,
/obj/machinery/light{
dir = 1
},
@@ -41920,6 +41917,294 @@
/area/ruin/unpowered{
name = "Asteroid"
})
"bvO" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/plasteel/neutral/side{
dir = 1
},
/area/shuttle/escape)
"bvP" = (
/obj/structure/chair{
dir = 8
},
/obj/effect/turf_decal/bot,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel,
/area/shuttle/escape)
"bvQ" = (
/obj/structure/chair{
dir = 4
},
/obj/effect/turf_decal/bot,
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel,
/area/shuttle/escape)
"bvR" = (
/obj/machinery/light,
/turf/open/floor/plasteel/neutral/side,
/area/shuttle/escape)
"bvS" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bvT" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"bvU" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bvV" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bvW" = (
/obj/machinery/door/airlock/external,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bvX" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bvY" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bvZ" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"bwa" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwb" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
icon_state = "propulsion_l"
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"bwc" = (
/obj/structure/shuttle/engine/heater{
icon_state = "heater";
dir = 8
},
/obj/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"bwd" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwe" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwf" = (
/obj/structure/chair,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwg" = (
/obj/structure/chair,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwh" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwi" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwj" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwk" = (
/obj/structure/chair,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwl" = (
/obj/structure/chair,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwm" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"bwn" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
icon_state = "propulsion_l"
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"bwo" = (
/obj/structure/shuttle/engine/heater{
icon_state = "heater";
dir = 8
},
/obj/structure/window/reinforced{
dir = 4;
pixel_x = 0
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"bwp" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwq" = (
/obj/machinery/light/small,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwr" = (
/obj/machinery/door/airlock/titanium,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bws" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwt" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwu" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwv" = (
/obj/machinery/computer/shuttle/ferry/request,
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bww" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwx" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwy" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwz" = (
/obj/machinery/door/airlock/titanium,
/obj/docking_port/mobile{
dir = 8;
dwidth = 2;
height = 13;
id = "ferry";
name = "ferry shuttle";
port_angle = 0;
preferred_direction = 4;
roundstart_move = "ferry_away";
width = 5
},
/obj/docking_port/stationary{
dir = 8;
dwidth = 2;
height = 13;
id = "ferry_home";
name = "port bay 2";
turf_type = /turf/open/space;
width = 5
},
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwA" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
icon_state = "propulsion_l"
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"bwB" = (
/obj/structure/shuttle/engine/heater{
icon_state = "heater";
dir = 8
},
/obj/structure/window/reinforced{
dir = 1;
pixel_y = 1
},
/turf/open/floor/plating/airless,
/area/shuttle/transport)
"bwC" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwD" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwE" = (
/obj/structure/chair{
dir = 1
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwF" = (
/obj/structure/chair{
dir = 1
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwG" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwH" = (
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwI" = (
/obj/machinery/light,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwJ" = (
/obj/structure/chair{
dir = 1
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwK" = (
/obj/structure/chair{
dir = 1
},
/turf/open/floor/pod/dark,
/area/shuttle/transport)
"bwL" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"bwM" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwN" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"bwO" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwP" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwQ" = (
/obj/machinery/door/airlock/external,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"bwR" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwS" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
"bwT" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/shuttle/transport)
"bwU" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/transport)
(1,1,1) = {"
aaa
@@ -77290,7 +77575,7 @@ aaa
aaa
aaa
aaa
aaa
bwb
aaa
aaa
aaa
@@ -77546,9 +77831,9 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
bwb
bwo
bwb
aaa
aaa
aaa
@@ -77803,9 +78088,9 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
bwc
bwi
bwB
aaa
aaa
aaa
@@ -78060,9 +78345,9 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bwq
bvS
aaa
aaa
aaa
@@ -78316,11 +78601,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bvS
bwr
bvS
bvS
aaa
aaa
aaa
@@ -78573,11 +78858,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvT
bwf
bwi
bwE
bvT
aaa
aaa
aaa
@@ -78830,11 +79115,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bwf
bwi
bwE
bvS
aaa
aaa
aaa
@@ -79087,11 +79372,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bwh
bwi
bwi
bvS
aaa
aaa
aaa
@@ -79344,11 +79629,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvW
bwi
bwv
bwi
bwQ
aaa
aaa
aaa
@@ -79601,11 +79886,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bwi
bwi
bwI
bvS
aaa
aaa
aaa
@@ -79858,11 +80143,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bwf
bwi
bwE
bvS
aaa
aaa
aaa
@@ -80115,11 +80400,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvT
bwf
bwi
bwE
bvT
aaa
aaa
aaa
@@ -80372,11 +80657,11 @@ aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
aaa
bvS
bvT
bwz
bvT
bvS
aaa
aaa
aaa
@@ -94203,7 +94488,7 @@ aAb
axY
aDl
aEi
aEi
bvP
aEi
aEi
aEi
@@ -94715,13 +95000,13 @@ axY
aAc
axY
aCp
aDl
bvO
aEk
aEj
aGd
aEl
aEk
aJf
bvR
aKn
aLz
axY
@@ -95231,7 +95516,7 @@ aAd
aCq
aDl
aEm
aEm
bvQ
aEm
aEm
aEm
+25 -11
View File
@@ -15105,7 +15105,7 @@
/area/maintenance/apmaint)
"aEl" = (
/obj/structure/closet/coffin,
/obj/item/toy/figure/librarian,
/obj/item/toy/figure/curator,
/turf/open/floor/plating,
/area/maintenance/apmaint)
"aEm" = (
@@ -30296,7 +30296,7 @@
},
/area/medical/chemistry)
"bjk" = (
/obj/machinery/smartfridge/chemistry,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/closed/wall,
/area/medical/chemistry)
"bjl" = (
@@ -30534,7 +30534,7 @@
/turf/open/floor/plasteel/white,
/area/toxins/xenobiology)
"bjH" = (
/obj/machinery/smartfridge/extract,
/obj/machinery/smartfridge/extract/preloaded,
/turf/open/floor/plasteel/whitepurple/side{
dir = 4
},
@@ -32850,10 +32850,6 @@
/turf/open/floor/plasteel/white,
/area/toxins/xenobiology)
"bnU" = (
/obj/machinery/door/airlock/research{
name = "Kill Room Access";
req_access_txt = "55"
},
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -40061,9 +40057,8 @@
/turf/open/floor/plasteel/white,
/area/medical/virology)
"bBf" = (
/obj/machinery/smartfridge/chemistry/virology,
/obj/machinery/smartfridge/chemistry/virology/preloaded,
/turf/open/floor/plasteel/whitegreen/side{
tag = "icon-whitegreen (EAST)";
icon_state = "whitegreen";
dir = 4
},
@@ -47067,6 +47062,11 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"bPR" = (
@@ -50534,7 +50534,7 @@
/turf/open/floor/plasteel/white,
/area/medical/genetics)
"bXR" = (
/obj/machinery/smartfridge/chemistry,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/open/floor/plasteel/black,
/area/medical/chemistry)
"bXS" = (
@@ -55919,6 +55919,20 @@
/obj/machinery/light,
/turf/open/floor/pod/light,
/area/shuttle/transport)
"cjQ" = (
/obj/effect/turf_decal/stripes/line,
/obj/machinery/power/apc{
cell_type = 15000;
dir = 2;
name = "Engineering APC";
pixel_y = -24
},
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
/turf/open/floor/plasteel,
/area/engine/engineering)
(1,1,1) = {"
aaa
@@ -89500,7 +89514,7 @@ bNt
bOE
bNt
bNt
bPE
cjQ
bMb
bQy
bMb
+1 -1
View File
@@ -18,5 +18,5 @@
access += GLOB.access_crematorium
minimal_access += GLOB.access_crematorium
MAP_REMOVE_JOB(librarian)
MAP_REMOVE_JOB(curator)
MAP_REMOVE_JOB(lawyer)
+50 -36
View File
@@ -2501,7 +2501,7 @@
"afq" = (
/obj/machinery/computer/shuttle/pod{
pixel_y = -32;
possible_destinations = "pod_asteroid3";
possible_destinations = "pod_lavaland3";
shuttleId = "pod3"
},
/obj/structure/chair{
@@ -7787,8 +7787,8 @@
"aqG" = (
/obj/docking_port/stationary/random{
dir = 4;
id = "pod_asteroid3";
name = "asteroid"
id = "pod_lavaland3";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -12384,7 +12384,7 @@
dir = 5
},
/turf/open/floor/plating,
/area/maintenance/fpmaint)
/area/gateway)
"aBj" = (
/obj/structure/rack{
dir = 8;
@@ -17330,7 +17330,6 @@
/area/hallway/primary/central)
"aMf" = (
/turf/open/floor/plasteel{
desc = "";
icon_state = "L13";
name = "floor"
},
@@ -17836,7 +17835,6 @@
/area/hallway/primary/central)
"aNB" = (
/turf/open/floor/plasteel{
desc = "";
icon_state = "L14"
},
/area/hallway/primary/central)
@@ -19015,6 +19013,12 @@
/turf/open/floor/wood,
/area/library)
"aQr" = (
/obj/structure/closet/crate,
/obj/item/clothing/shoes/workboots/mining,
/obj/item/clothing/under/rank/curator/treasure_hunter,
/obj/item/clothing/suit/curator,
/obj/item/clothing/head/curator,
/obj/item/weapon/storage/backpack/satchel/explorer,
/obj/machinery/light/small,
/turf/open/floor/engine/cult,
/area/library)
@@ -19510,7 +19514,7 @@
/turf/open/floor/wood,
/area/library)
"aRO" = (
/obj/structure/bookcase/random/nonfiction,
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
/area/library)
"aRP" = (
@@ -22141,7 +22145,7 @@
"aYa" = (
/obj/machinery/power/apc{
dir = 8;
name = "Locker Room Maintenance APC";
name = "Aft Port Maintenance APC";
pixel_x = -27;
pixel_y = 2
},
@@ -25154,7 +25158,7 @@
icon_state = "1-8"
},
/turf/open/floor/plating,
/area/maintenance/port)
/area/quartermaster/storage)
"bfl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -27085,7 +27089,7 @@
/turf/open/floor/plasteel,
/area/assembly/chargebay)
"bjQ" = (
/obj/machinery/smartfridge/chemistry,
/obj/machinery/smartfridge/chemistry/preloaded,
/turf/open/floor/plating,
/area/medical/chemistry)
"bjR" = (
@@ -27640,11 +27644,6 @@
/area/bridge/meeting_room)
"bkY" = (
/obj/effect/landmark/blobstart,
/obj/structure/cable{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -40908,7 +40907,7 @@
/turf/open/floor/plasteel/white,
/area/toxins/xenobiology)
"bMo" = (
/obj/machinery/smartfridge/extract,
/obj/machinery/smartfridge/extract/preloaded,
/turf/open/floor/plasteel/white,
/area/toxins/xenobiology)
"bMp" = (
@@ -44807,7 +44806,7 @@
/turf/open/floor/plating,
/area/maintenance/asmaint)
"bVa" = (
/obj/machinery/smartfridge/chemistry/virology,
/obj/machinery/smartfridge/chemistry/virology/preloaded,
/turf/open/floor/plasteel/whitegreen/side{
dir = 8
},
@@ -53823,8 +53822,8 @@
"cpe" = (
/obj/docking_port/stationary/random{
dir = 8;
id = "pod_asteroid2";
name = "asteroid"
id = "pod_lavaland2";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -54079,7 +54078,7 @@
/obj/machinery/computer/shuttle/pod{
pixel_x = 0;
pixel_y = -32;
possible_destinations = "pod_asteroid2";
possible_destinations = "pod_lavaland2";
shuttleId = "pod2"
},
/obj/structure/chair{
@@ -57394,8 +57393,8 @@
"cwV" = (
/obj/docking_port/stationary/random{
dir = 8;
id = "pod_asteroid1";
name = "asteroid"
id = "pod_lavaland1";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -57508,7 +57507,7 @@
/obj/machinery/computer/shuttle/pod{
pixel_x = 0;
pixel_y = -32;
possible_destinations = "pod_asteroid1";
possible_destinations = "pod_lavaland1";
shuttleId = "pod1"
},
/obj/structure/chair{
@@ -58424,7 +58423,7 @@
"czL" = (
/obj/machinery/computer/shuttle/pod{
pixel_y = -32;
possible_destinations = "pod_asteroid4";
possible_destinations = "pod_lavaland4";
shuttleId = "pod4"
},
/obj/structure/chair{
@@ -58455,8 +58454,8 @@
"czN" = (
/obj/docking_port/stationary/random{
dir = 4;
id = "pod_asteroid4";
name = "asteroid"
id = "pod_lavaland4";
name = "lavaland"
},
/turf/open/space,
/area/space)
@@ -59563,7 +59562,7 @@
},
/obj/structure/cable,
/turf/open/floor/plating,
/area/maintenance/port)
/area/security/detectives_office)
"cCo" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -62008,11 +62007,26 @@
/obj/structure/window/reinforced{
dir = 4
},
/obj/item/weapon/grenade/plastic/c4,
/obj/item/weapon/grenade/plastic/c4,
/obj/item/weapon/grenade/plastic/c4,
/obj/item/weapon/grenade/plastic/c4,
/obj/item/weapon/grenade/plastic/c4,
/obj/item/weapon/grenade/plastic/c4{
pixel_x = 2;
pixel_y = -5
},
/obj/item/weapon/grenade/plastic/c4{
pixel_x = -3;
pixel_y = 3
},
/obj/item/weapon/grenade/plastic/c4{
pixel_x = 2;
pixel_y = -3
},
/obj/item/weapon/grenade/plastic/c4{
pixel_x = -2;
pixel_y = -1
},
/obj/item/weapon/grenade/plastic/c4{
pixel_x = 3;
pixel_y = 3
},
/turf/open/floor/plasteel/vault{
dir = 8
},
@@ -88787,7 +88801,7 @@ bda
bca
bgJ
aZP
bjD
bjB
bkY
bmo
bnP
@@ -99635,7 +99649,7 @@ bVu
bVu
bVu
bVu
apQ
bVu
bVu
csw
csw
@@ -106507,7 +106521,7 @@ aIt
aPd
aIt
aRO
aIt
aRO
aUC
aVP
aXu
@@ -106764,7 +106778,7 @@ aNV
aPd
aIt
aRO
aIt
aRO
aIt
aVQ
aXu
+3 -3
View File
@@ -5586,7 +5586,7 @@
/area/centcom/ferry)
"ot" = (
/obj/structure/closet/secure_closet/personal/cabinet,
/obj/item/clothing/under/rank/librarian/curator,
/obj/item/clothing/under/rank/curator/treasure_hunter,
/obj/item/clothing/under/skirt/black,
/obj/item/clothing/under/shorts/black,
/obj/item/clothing/under/pants/track,
@@ -8913,10 +8913,10 @@
/area/centcom/ferry)
"vZ" = (
/obj/structure/table/reinforced,
/obj/item/weapon/c4{
/obj/item/weapon/grenade/plastic/c4{
pixel_x = 6
},
/obj/item/weapon/c4{
/obj/item/weapon/grenade/plastic/c4{
pixel_x = -4
},
/obj/machinery/firealarm{
+227
View File
@@ -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
"}
+73
View File
@@ -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
"}
+5 -8
View File
@@ -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
#define NOAROUSAL 29//Stops all arousal effects
#define NOGENITALS 30//Cannot create, use, or otherwise have genitals
+12 -11
View File
@@ -13,6 +13,10 @@
#define MC_AVERAGE_FAST(average, current) (0.7 * (average) + 0.3 * (current))
#define MC_AVERAGE(average, current) (0.8 * (average) + 0.2 * (current))
#define MC_AVERAGE_SLOW(average, current) (0.9 * (average) + 0.1 * (current))
#define MC_AVG_FAST_UP_SLOW_DOWN(average, current) (average > current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current))
#define MC_AVG_SLOW_UP_FAST_DOWN(average, current) (average < current ? MC_AVERAGE_SLOW(average, current) : MC_AVERAGE_FAST(average, current))
#define NEW_SS_GLOBAL(varname) if(varname != src){if(istype(varname)){Recover();qdel(varname);}varname = src;}
#define START_PROCESSING(Processor, Datum) if (!Datum.isprocessing) {Datum.isprocessing = 1;Processor.processing += Datum}
@@ -20,39 +24,36 @@
//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier)
//subsystem should fire during pre-game lobby.
#define SS_FIRE_IN_LOBBY 1
//subsystem does not initialize.
#define SS_NO_INIT 2
#define SS_NO_INIT 1
//subsystem does not fire.
// (like can_fire = 0, but keeps it from getting added to the processing subsystems list)
// (Requires a MC restart to change)
#define SS_NO_FIRE 4
#define SS_NO_FIRE 2
//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick)
// SS_BACKGROUND has its own priority bracket
#define SS_BACKGROUND 8
#define SS_BACKGROUND 4
//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background))
#define SS_NO_TICK_CHECK 16
#define SS_NO_TICK_CHECK 8
//Treat wait as a tick count, not DS, run every wait ticks.
// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems)
// (implies SS_FIRE_IN_LOBBY because of how it works)
// (implies all runlevels because of how it works)
// (overrides SS_BACKGROUND)
// This is designed for basically anything that works as a mini-mc (like SStimer)
#define SS_TICKER 32
#define SS_TICKER 16
//keep the subsystem's timing on point by firing early if it fired late last fire because of lag
// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds.
#define SS_KEEP_TIMING 64
#define SS_KEEP_TIMING 32
//Calculate its next fire after its fired.
// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be)
// This flag overrides SS_KEEP_TIMING
#define SS_POST_FIRE_TIMING 128
#define SS_POST_FIRE_TIMING 64
//SUBSYSTEM STATES
#define SS_IDLE 0 //aint doing shit.
+5 -3
View File
@@ -1,3 +1,5 @@
#define ANTAG_DATUM_CULT /datum/antagonist/cult
#define ANTAG_DATUM_CLOCKCULT /datum/antagonist/clockcult
#define ANTAG_DATUM_CLOCKCULT_SILENT /datum/antagonist/clockcult/silent
#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
+3 -2
View File
@@ -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 ) )
#define CANATMOSPASS(A, O) ( A.CanAtmosPass == ATMOS_PASS_PROC ? A.CanAtmosPass(O) : ( A.CanAtmosPass == ATMOS_PASS_DENSITY ? !A.density : A.CanAtmosPass ) )
+7 -7
View File
@@ -37,15 +37,15 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us
#define JUDGEMENT_CV_REQ 300
//general component/cooldown things
#define SLAB_PRODUCTION_TIME 900 //how long(deciseconds) slabs require to produce a single component; defaults to 1 minute 30 seconds
#define SLAB_PRODUCTION_TIME 450 //how long(deciseconds) slabs require to produce a single component; defaults to 45 seconds
#define SLAB_SERVANT_SLOWDOWN 300 //how much each servant above 5 slows down slab-based generation; defaults to 30 seconds per sevant
#define SLAB_SERVANT_SLOWDOWN 150 //how much each servant above 5 slows down slab-based generation; defaults to 15 seconds per sevant
#define SLAB_SLOWDOWN_MAXIMUM 2700 //maximum slowdown from additional servants; defaults to 4 minutes 30 seconds
#define SLAB_SLOWDOWN_MAXIMUM 1350 //maximum slowdown from additional servants; defaults to 2 minutes 15 seconds
#define CACHE_PRODUCTION_TIME 600 //how long(deciseconds) caches require to produce a component; defaults to 1 minute
#define CACHE_PRODUCTION_TIME 300 //how long(deciseconds) caches require to produce a component; defaults to 30 seconds
#define ACTIVE_CACHE_SLOWDOWN 100 //how many additional deciseconds caches take to produce a component for each linked cache; defaults to 10 seconds
#define ACTIVE_CACHE_SLOWDOWN 50 //how many additional deciseconds caches take to produce a component for each linked cache; defaults to 5 seconds
#define LOWER_PROB_PER_COMPONENT 10 //how much each component in the cache reduces the weight of getting another of that component type
@@ -87,9 +87,9 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us
#define GATEWAY_RATVAR_ARRIVAL 300 //when progress is at or above this, game over ratvar's here everybody go home
#define ARK_SUMMON_COST 3 //how many of each component an Ark costs to summon
#define ARK_SUMMON_COST 5 //how many of each component an Ark costs to summon
#define ARK_CONSUME_COST 7 //how many of each component an Ark needs to consume to activate
#define ARK_CONSUME_COST 15 //how many of each component an Ark needs to consume to activate
//Objective text define
#define CLOCKCULT_OBJECTIVE "Construct the Ark of the Clockwork Justicar and free Ratvar."
+1
View File
@@ -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"
+2
View File
@@ -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.
+42 -42
View File
@@ -1,43 +1,43 @@
#define ENGSEC (1<<0)
#define CAPTAIN (1<<0)
#define HOS (1<<1)
#define WARDEN (1<<2)
#define DETECTIVE (1<<3)
#define OFFICER (1<<4)
#define CHIEF (1<<5)
#define ENGINEER (1<<6)
#define ATMOSTECH (1<<7)
#define ROBOTICIST (1<<8)
#define AI_JF (1<<9)
#define CYBORG (1<<10)
#define MEDSCI (1<<1)
#define RD_JF (1<<0)
#define SCIENTIST (1<<1)
#define CHEMIST (1<<2)
#define CMO_JF (1<<3)
#define DOCTOR (1<<4)
#define GENETICIST (1<<5)
#define VIROLOGIST (1<<6)
#define CIVILIAN (1<<2)
#define HOP (1<<0)
#define BARTENDER (1<<1)
#define BOTANIST (1<<2)
#define COOK (1<<3)
#define JANITOR (1<<4)
#define LIBRARIAN (1<<5)
#define QUARTERMASTER (1<<6)
#define CARGOTECH (1<<7)
#define MINER (1<<8)
#define LAWYER (1<<9)
#define CHAPLAIN (1<<10)
#define CLOWN (1<<11)
#define MIME (1<<12)
#define ENGSEC (1<<0)
#define CAPTAIN (1<<0)
#define HOS (1<<1)
#define WARDEN (1<<2)
#define DETECTIVE (1<<3)
#define OFFICER (1<<4)
#define CHIEF (1<<5)
#define ENGINEER (1<<6)
#define ATMOSTECH (1<<7)
#define ROBOTICIST (1<<8)
#define AI_JF (1<<9)
#define CYBORG (1<<10)
#define MEDSCI (1<<1)
#define RD_JF (1<<0)
#define SCIENTIST (1<<1)
#define CHEMIST (1<<2)
#define CMO_JF (1<<3)
#define DOCTOR (1<<4)
#define GENETICIST (1<<5)
#define VIROLOGIST (1<<6)
#define CIVILIAN (1<<2)
#define HOP (1<<0)
#define BARTENDER (1<<1)
#define BOTANIST (1<<2)
#define COOK (1<<3)
#define JANITOR (1<<4)
#define CURATOR (1<<5)
#define QUARTERMASTER (1<<6)
#define CARGOTECH (1<<7)
#define MINER (1<<8)
#define LAWYER (1<<9)
#define CHAPLAIN (1<<10)
#define CLOWN (1<<11)
#define MIME (1<<12)
#define ASSISTANT (1<<13)
+3
View File
@@ -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"
+12 -5
View File
@@ -16,10 +16,10 @@
#define LIGHTING_BASE_MATRIX \
list \
( \
LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, LIGHTING_SOFT_THRESHOLD, 0, \
1, 1, 1, 0, \
1, 1, 1, 0, \
1, 1, 1, 0, \
1, 1, 1, 0, \
0, 0, 0, 1 \
) \
@@ -78,4 +78,11 @@
#define DYNAMIC_LIGHTING_ENABLED 1 //dynamic lighting enabled
#define DYNAMIC_LIGHTING_FORCED 2 //dynamic lighting enabled even if the area doesn't require power
#define DYNAMIC_LIGHTING_IFSTARLIGHT 3 //dynamic lighting enabled only if starlight is.
#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting
#define IS_DYNAMIC_LIGHTING(A) A.dynamic_lighting
//code assumes higher numbers override lower numbers.
#define LIGHTING_NO_UPDATE 0
#define LIGHTING_VIS_UPDATE 1
#define LIGHTING_CHECK_UPDATE 2
#define LIGHTING_FORCE_UPDATE 3
+3
View File
@@ -0,0 +1,3 @@
#define CHECKBOX_NONE 0
#define CHECKBOX_GROUP 1
#define CHECKBOX_TOGGLE 2
+7
View File
@@ -31,5 +31,12 @@
/////////////
#define STATUS_EFFECT_SIGILMARK /datum/status_effect/sigil_mark
#define STATUS_EFFECT_BELLIGERENT /datum/status_effect/belligerent //forces the affected to walk, doing damage if they try to run
#define STATUS_EFFECT_MANIAMOTOR /datum/status_effect/maniamotor //disrupts, damages, and confuses the affected as long as they're in range of the motor
#define MAX_MANIA_SEVERITY 100 //how high the mania severity can go
#define MANIA_DAMAGE_TO_CONVERT 90 //how much damage is required before it'll convert affected targets
#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath.
#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes
+11
View File
@@ -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)
+491 -490
View File
@@ -1,490 +1,491 @@
/*
* Holds procs to help with list operations
* Contains groups:
* Misc
* Sorting
*/
/*
* Misc
*/
//Returns a list in plain english as a string
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
var/total = input.len
if (!total)
return "[nothing_text]"
else if (total == 1)
return "[input[1]]"
else if (total == 2)
return "[input[1]][and_text][input[2]]"
else
var/output = ""
var/index = 1
while (index < total)
if (index == total - 1)
comma_text = final_comma_text
output += "[input[index]][comma_text]"
index++
return "[output][and_text][input[index]]"
//Returns list element or null. Should prevent "index out of bounds" error.
/proc/listgetindex(list/L, index)
if(istype(L))
if(isnum(index) && IsInteger(index))
if(IsInRange(index,1,L.len))
return L[index]
else if(index in L)
return L[index]
return
//Return either pick(list) or null if list is not of type /list or is empty
/proc/safepick(list/L)
if(istype(L) && L.len)
return pick(L)
//Checks if the list is empty
/proc/isemptylist(list/L)
if(!L.len)
return 1
return 0
//Checks for specific types in a list
/proc/is_type_in_list(atom/A, list/L)
if(!L || !L.len || !A)
return 0
for(var/type in L)
if(istype(A, type))
return 1
return 0
//Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches')
/proc/is_type_in_typecache(atom/A, list/L)
if(!L || !L.len || !A)
return 0
if(ispath(A))
. = L[A]
else
. = L[A.type]
//Checks for a string in a list
/proc/is_string_in_list(string, list/L)
if(!L || !L.len || !string)
return
for(var/V in L)
if(string == V)
return 1
return
//Removes a string from a list
/proc/remove_strings_from_list(string, list/L)
if(!L || !L.len || !string)
return
for(var/V in L)
if(V == string)
L -= V //No return here so that it removes all strings of that type
return
//returns a new list with only atoms that are in typecache L
/proc/typecache_filter_list(list/atoms, list/typecache)
. = list()
for (var/thing in atoms)
var/atom/A = thing
if (typecache[A.type])
. += A
//Like typesof() or subtypesof(), but returns a typecache instead of a list
/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE)
if(ispath(path))
var/list/types = list()
if(only_root_path)
types = list(path)
else
types = ignore_root_path ? subtypesof(path) : typesof(path)
var/list/L = list()
for(var/T in types)
L[T] = TRUE
return L
else if(islist(path))
var/list/pathlist = path
var/list/L = list()
if(ignore_root_path)
for(var/P in pathlist)
for(var/T in subtypesof(P))
L[T] = TRUE
else
for(var/P in pathlist)
if(only_root_path)
L[P] = TRUE
else
for(var/T in typesof(P))
L[T] = TRUE
return L
//Empties the list by setting the length to 0. Hopefully the elements get garbage collected
/proc/clearlist(list/list)
if(istype(list))
list.len = 0
return
//Removes any null entries from the list
/proc/listclearnulls(list/L)
var/list/N = new(L.len)
L -= N
/*
* Returns list containing all the entries from first list that are not present in second.
* If skiprep = 1, repeated elements are treated as one.
* If either of arguments is not a list, returns null
*/
/proc/difflist(list/first, list/second, skiprep=0)
if(!islist(first) || !islist(second))
return
var/list/result = new
if(skiprep)
for(var/e in first)
if(!(e in result) && !(e in second))
result += e
else
result = first - second
return result
/*
* Returns list containing entries that are in either list but not both.
* If skipref = 1, repeated elements are treated as one.
* If either of arguments is not a list, returns null
*/
/proc/uniquemergelist(list/first, list/second, skiprep=0)
if(!islist(first) || !islist(second))
return
var/list/result = new
if(skiprep)
result = difflist(first, second, skiprep)+difflist(second, first, skiprep)
else
result = first ^ second
return result
//Pretends to pick an element based on its weight but really just seems to pick a random element.
/proc/pickweight(list/L)
var/total = 0
var/item
for (item in L)
if (!L[item])
L[item] = 1
total += L[item]
total = rand(1, total)
for (item in L)
total -=L [item]
if (total <= 0)
return item
return null
//Pick a random element from the list and remove it from the list.
/proc/pick_n_take(list/L)
if(L.len)
var/picked = rand(1,L.len)
. = L[picked]
L.Cut(picked,picked+1) //Cut is far more efficient that Remove()
//Returns the top(last) element from the list and removes it from the list (typical stack function)
/proc/pop(list/L)
if(L.len)
. = L[L.len]
L.len--
/proc/popleft(list/L)
if(L.len)
. = L[1]
L.Cut(1,2)
/proc/sorted_insert(list/L, thing, comparator)
var/pos = L.len
while(pos > 0 && call(comparator)(thing, L[pos]) > 0)
pos--
L.Insert(pos+1, thing)
// Returns the next item in a list
/proc/next_list_item(item, list/L)
var/i
i = L.Find(item)
if(i == L.len)
i = 1
else
i++
return L[i]
// Returns the previous item in a list
/proc/previous_list_item(item, list/L)
var/i
i = L.Find(item)
if(i == 1)
i = L.len
else
i--
return L[i]
//Randomize: Return the list in a random order
/proc/shuffle(list/L)
if(!L)
return
L = L.Copy()
for(var/i=1, i<L.len, ++i)
L.Swap(i,rand(i,L.len))
return L
//same, but returns nothing and acts on list in place
/proc/shuffle_inplace(list/L)
if(!L)
return
for(var/i=1, i<L.len, ++i)
L.Swap(i,rand(i,L.len))
//Return a list with no duplicate entries
/proc/uniqueList(list/L)
. = list()
for(var/i in L)
. |= i
//same, but returns nothing and acts on list in place (also handles associated values properly)
/proc/uniqueList_inplace(list/L)
var/temp = L.Copy()
L.len = 0
for(var/key in temp)
if (isnum(key))
L |= key
else
L[key] = temp[key]
//for sorting clients or mobs by ckey
/proc/sortKey(list/L, order=1)
return sortTim(L, order >= 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<distance, ++i)
L.Insert(fromIndex, null)
L.Swap(fromIndex, toIndex)
L.Cut(toIndex, toIndex+1)
else
if(fromIndex > toIndex)
fromIndex += len
for(var/i=0, i<len, ++i)
L.Insert(toIndex, null)
L.Swap(fromIndex, toIndex)
L.Cut(fromIndex, fromIndex+1)
//Move elements from [fromIndex, fromIndex+len) to [toIndex, toIndex+len)
//Move any elements being overwritten by the move to the now-empty elements, preserving order
//Note: if the two ranges overlap, only the destination order will be preserved fully, since some elements will be within both ranges ~Carnie
/proc/swapRange(list/L, fromIndex, toIndex, len=1)
var/distance = abs(toIndex - fromIndex)
if(len > 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<distance, ++i)
L.Insert(fromIndex, null)
L.Swap(fromIndex, toIndex)
L.Cut(toIndex, toIndex+1)
else
if(toIndex > fromIndex)
var/a = toIndex
toIndex = fromIndex
fromIndex = a
for(var/i=0, i<len, ++i)
L.Swap(fromIndex++, toIndex++)
//replaces reverseList ~Carnie
/proc/reverseRange(list/L, start=1, end=0)
if(L.len)
start = start % L.len
end = end % (L.len+1)
if(start <= 0)
start += L.len
if(end <= 0)
end += L.len + 1
--end
while(start < end)
L.Swap(start++,end--)
return L
//return first thing in L which has var/varname == value
//this is typecaste as list/L, but you could actually feed it an atom instead.
//completely safe to use
/proc/getElementByVar(list/L, varname, value)
varname = "[varname]"
for(var/datum/D in L)
if(D.vars.Find(varname))
if(D.vars[varname] == value)
return D
//remove all nulls from a list
/proc/removeNullsFromList(list/L)
while(L.Remove(null))
continue
return L
//Copies a list, and all lists inside it recusively
//Does not copy any other reference type
/proc/deepCopyList(list/l)
if(!islist(l))
return l
. = l.Copy()
for(var/i = 1 to l.len)
if(islist(.[i]))
.[i] = .(.[i])
//takes an input_key, as text, and the list of keys already used, outputting a replacement key in the format of "[input_key] ([number_of_duplicates])" if it finds a duplicate
//use this for lists of things that might have the same name, like mobs or objects, that you plan on giving to a player as input
/proc/avoid_assoc_duplicate_keys(input_key, list/used_key_list)
if(!input_key || !istype(used_key_list))
return
if(used_key_list[input_key])
used_key_list[input_key]++
input_key = "[input_key] ([used_key_list[input_key]])"
else
used_key_list[input_key] = 1
return input_key
#if DM_VERSION > 512
#error Remie said that lummox was adding a way to get a lists
#error contents via list.values, if that is true remove this
#error otherwise, update the version and bug lummox
#elseif
//Flattens a keyed list into a list of it's contents
/proc/flatten_list(list/key_list)
if(!islist(key_list))
return null
. = list()
for(var/key in key_list)
. |= key_list[key]
//Picks from the list, with some safeties, and returns the "default" arg if it fails
#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default)
#define LAZYINITLIST(L) if (!L) L = list()
#define UNSETEMPTY(L) if (L && !L.len) L = null
#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } }
#define LAZYADD(L, I) if(!L) { L = list(); } L += I;
#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null)
#define LAZYLEN(L) length(L)
#define LAZYCLEARLIST(L) if(L) L.Cut()
/* Definining a counter as a series of key -> numeric value entries
* All these procs modify in place.
*/
/proc/counterlist_scale(list/L, scalar)
var/list/out = list()
for(var/key in L)
out[key] = L[key] * scalar
. = out
/proc/counterlist_sum(list/L)
. = 0
for(var/key in L)
. += L[key]
/proc/counterlist_normalise(list/L)
var/avg = counterlist_sum(L)
if(avg != 0)
. = counterlist_scale(L, 1 / avg)
else
. = L
/proc/counterlist_combine(list/L1, list/L2)
for(var/key in L2)
var/other_value = L2[key]
if(key in L1)
L1[key] += other_value
else
L1[key] = other_value
/*
* Holds procs to help with list operations
* Contains groups:
* Misc
* Sorting
*/
/*
* Misc
*/
//Returns a list in plain english as a string
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
var/total = input.len
if (!total)
return "[nothing_text]"
else if (total == 1)
return "[input[1]]"
else if (total == 2)
return "[input[1]][and_text][input[2]]"
else
var/output = ""
var/index = 1
while (index < total)
if (index == total - 1)
comma_text = final_comma_text
output += "[input[index]][comma_text]"
index++
return "[output][and_text][input[index]]"
//Returns list element or null. Should prevent "index out of bounds" error.
/proc/listgetindex(list/L, index)
if(istype(L))
if(isnum(index) && IsInteger(index))
if(IsInRange(index,1,L.len))
return L[index]
else if(index in L)
return L[index]
return
//Return either pick(list) or null if list is not of type /list or is empty
/proc/safepick(list/L)
if(istype(L) && L.len)
return pick(L)
//Checks if the list is empty
/proc/isemptylist(list/L)
if(!L.len)
return 1
return 0
//Checks for specific types in a list
/proc/is_type_in_list(atom/A, list/L)
if(!L || !L.len || !A)
return 0
for(var/type in L)
if(istype(A, type))
return 1
return 0
//Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches')
/proc/is_type_in_typecache(atom/A, list/L)
if(!L || !L.len || !A)
return 0
if(ispath(A))
. = L[A]
else
. = L[A.type]
//Checks for a string in a list
/proc/is_string_in_list(string, list/L)
if(!L || !L.len || !string)
return
for(var/V in L)
if(string == V)
return 1
return
//Removes a string from a list
/proc/remove_strings_from_list(string, list/L)
if(!L || !L.len || !string)
return
for(var/V in L)
if(V == string)
L -= V //No return here so that it removes all strings of that type
return
//returns a new list with only atoms that are in typecache L
/proc/typecache_filter_list(list/atoms, list/typecache)
. = list()
for (var/thing in atoms)
var/atom/A = thing
if (typecache[A.type])
. += A
//Like typesof() or subtypesof(), but returns a typecache instead of a list
/proc/typecacheof(path, ignore_root_path, only_root_path = FALSE)
if(ispath(path))
var/list/types = list()
if(only_root_path)
types = list(path)
else
types = ignore_root_path ? subtypesof(path) : typesof(path)
var/list/L = list()
for(var/T in types)
L[T] = TRUE
return L
else if(islist(path))
var/list/pathlist = path
var/list/L = list()
if(ignore_root_path)
for(var/P in pathlist)
for(var/T in subtypesof(P))
L[T] = TRUE
else
for(var/P in pathlist)
if(only_root_path)
L[P] = TRUE
else
for(var/T in typesof(P))
L[T] = TRUE
return L
//Empties the list by setting the length to 0. Hopefully the elements get garbage collected
/proc/clearlist(list/list)
if(istype(list))
list.len = 0
return
//Removes any null entries from the list
/proc/listclearnulls(list/L)
var/list/N = new(L.len)
L -= N
/*
* Returns list containing all the entries from first list that are not present in second.
* If skiprep = 1, repeated elements are treated as one.
* If either of arguments is not a list, returns null
*/
/proc/difflist(list/first, list/second, skiprep=0)
if(!islist(first) || !islist(second))
return
var/list/result = new
if(skiprep)
for(var/e in first)
if(!(e in result) && !(e in second))
result += e
else
result = first - second
return result
/*
* Returns list containing entries that are in either list but not both.
* If skipref = 1, repeated elements are treated as one.
* If either of arguments is not a list, returns null
*/
/proc/uniquemergelist(list/first, list/second, skiprep=0)
if(!islist(first) || !islist(second))
return
var/list/result = new
if(skiprep)
result = difflist(first, second, skiprep)+difflist(second, first, skiprep)
else
result = first ^ second
return result
//Pretends to pick an element based on its weight but really just seems to pick a random element.
/proc/pickweight(list/L)
var/total = 0
var/item
for (item in L)
if (!L[item])
L[item] = 1
total += L[item]
total = rand(1, total)
for (item in L)
total -=L [item]
if (total <= 0)
return item
return null
//Pick a random element from the list and remove it from the list.
/proc/pick_n_take(list/L)
if(L.len)
var/picked = rand(1,L.len)
. = L[picked]
L.Cut(picked,picked+1) //Cut is far more efficient that Remove()
//Returns the top(last) element from the list and removes it from the list (typical stack function)
/proc/pop(list/L)
if(L.len)
. = L[L.len]
L.len--
/proc/popleft(list/L)
if(L.len)
. = L[1]
L.Cut(1,2)
/proc/sorted_insert(list/L, thing, comparator)
var/pos = L.len
while(pos > 0 && call(comparator)(thing, L[pos]) > 0)
pos--
L.Insert(pos+1, thing)
// Returns the next item in a list
/proc/next_list_item(item, list/L)
var/i
i = L.Find(item)
if(i == L.len)
i = 1
else
i++
return L[i]
// Returns the previous item in a list
/proc/previous_list_item(item, list/L)
var/i
i = L.Find(item)
if(i == 1)
i = L.len
else
i--
return L[i]
//Randomize: Return the list in a random order
/proc/shuffle(list/L)
if(!L)
return
L = L.Copy()
for(var/i=1, i<L.len, ++i)
L.Swap(i,rand(i,L.len))
return L
//same, but returns nothing and acts on list in place
/proc/shuffle_inplace(list/L)
if(!L)
return
for(var/i=1, i<L.len, ++i)
L.Swap(i,rand(i,L.len))
//Return a list with no duplicate entries
/proc/uniqueList(list/L)
. = list()
for(var/i in L)
. |= i
//same, but returns nothing and acts on list in place (also handles associated values properly)
/proc/uniqueList_inplace(list/L)
var/temp = L.Copy()
L.len = 0
for(var/key in temp)
if (isnum(key))
L |= key
else
L[key] = temp[key]
//for sorting clients or mobs by ckey
/proc/sortKey(list/L, order=1)
return sortTim(L, order >= 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<distance, ++i)
L.Insert(fromIndex, null)
L.Swap(fromIndex, toIndex)
L.Cut(toIndex, toIndex+1)
else
if(fromIndex > toIndex)
fromIndex += len
for(var/i=0, i<len, ++i)
L.Insert(toIndex, null)
L.Swap(fromIndex, toIndex)
L.Cut(fromIndex, fromIndex+1)
//Move elements from [fromIndex, fromIndex+len) to [toIndex, toIndex+len)
//Move any elements being overwritten by the move to the now-empty elements, preserving order
//Note: if the two ranges overlap, only the destination order will be preserved fully, since some elements will be within both ranges ~Carnie
/proc/swapRange(list/L, fromIndex, toIndex, len=1)
var/distance = abs(toIndex - fromIndex)
if(len > 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<distance, ++i)
L.Insert(fromIndex, null)
L.Swap(fromIndex, toIndex)
L.Cut(toIndex, toIndex+1)
else
if(toIndex > fromIndex)
var/a = toIndex
toIndex = fromIndex
fromIndex = a
for(var/i=0, i<len, ++i)
L.Swap(fromIndex++, toIndex++)
//replaces reverseList ~Carnie
/proc/reverseRange(list/L, start=1, end=0)
if(L.len)
start = start % L.len
end = end % (L.len+1)
if(start <= 0)
start += L.len
if(end <= 0)
end += L.len + 1
--end
while(start < end)
L.Swap(start++,end--)
return L
//return first thing in L which has var/varname == value
//this is typecaste as list/L, but you could actually feed it an atom instead.
//completely safe to use
/proc/getElementByVar(list/L, varname, value)
varname = "[varname]"
for(var/datum/D in L)
if(D.vars.Find(varname))
if(D.vars[varname] == value)
return D
//remove all nulls from a list
/proc/removeNullsFromList(list/L)
while(L.Remove(null))
continue
return L
//Copies a list, and all lists inside it recusively
//Does not copy any other reference type
/proc/deepCopyList(list/l)
if(!islist(l))
return l
. = l.Copy()
for(var/i = 1 to l.len)
if(islist(.[i]))
.[i] = .(.[i])
//takes an input_key, as text, and the list of keys already used, outputting a replacement key in the format of "[input_key] ([number_of_duplicates])" if it finds a duplicate
//use this for lists of things that might have the same name, like mobs or objects, that you plan on giving to a player as input
/proc/avoid_assoc_duplicate_keys(input_key, list/used_key_list)
if(!input_key || !istype(used_key_list))
return
if(used_key_list[input_key])
used_key_list[input_key]++
input_key = "[input_key] ([used_key_list[input_key]])"
else
used_key_list[input_key] = 1
return input_key
#if DM_VERSION > 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
+17 -20
View File
@@ -20,13 +20,13 @@
/proc/log_admin(text)
GLOB.admin_log.Add(text)
if (config.log_admin)
GLOB.diary << "\[[time_stamp()]]ADMIN: [text]"
GLOB.world_game_log << "\[[time_stamp()]]ADMIN: [text]"
//Items using this proc are stripped from public logs - use with caution
/proc/log_admin_private(text)
GLOB.admin_log.Add(text)
if (config.log_admin)
GLOB.diary << "\[[time_stamp()]]ADMINPRIVATE: [text]"
GLOB.world_game_log << "\[[time_stamp()]]ADMINPRIVATE: [text]"
/proc/log_adminsay(text)
if (config.log_adminchat)
@@ -38,67 +38,64 @@
/proc/log_game(text)
if (config.log_game)
GLOB.diary << "\[[time_stamp()]]GAME: [text]"
GLOB.world_game_log << "\[[time_stamp()]]GAME: [text]"
/proc/log_vote(text)
if (config.log_vote)
GLOB.diary << "\[[time_stamp()]]VOTE: [text]"
GLOB.world_game_log << "\[[time_stamp()]]VOTE: [text]"
/proc/log_access(text)
if (config.log_access)
GLOB.diary << "\[[time_stamp()]]ACCESS: [text]"
GLOB.world_game_log << "\[[time_stamp()]]ACCESS: [text]"
/proc/log_say(text)
if (config.log_say)
GLOB.diary << "\[[time_stamp()]]SAY: [text]"
GLOB.world_game_log << "\[[time_stamp()]]SAY: [text]"
/proc/log_prayer(text)
if (config.log_prayer)
GLOB.diary << "\[[time_stamp()]]PRAY: [text]"
GLOB.world_game_log << "\[[time_stamp()]]PRAY: [text]"
/proc/log_law(text)
if (config.log_law)
GLOB.diary << "\[[time_stamp()]]LAW: [text]"
GLOB.world_game_log << "\[[time_stamp()]]LAW: [text]"
/proc/log_ooc(text)
if (config.log_ooc)
GLOB.diary << "\[[time_stamp()]]OOC: [text]"
GLOB.world_game_log << "\[[time_stamp()]]OOC: [text]"
/proc/log_whisper(text)
if (config.log_whisper)
GLOB.diary << "\[[time_stamp()]]WHISPER: [text]"
GLOB.world_game_log << "\[[time_stamp()]]WHISPER: [text]"
/proc/log_emote(text)
if (config.log_emote)
GLOB.diary << "\[[time_stamp()]]EMOTE: [text]"
GLOB.world_game_log << "\[[time_stamp()]]EMOTE: [text]"
/proc/log_attack(text)
if (config.log_attack)
GLOB.diaryofmeanpeople << "\[[time_stamp()]]ATTACK: [text]"
GLOB.world_attack_log << "\[[time_stamp()]]ATTACK: [text]"
/proc/log_pda(text)
if (config.log_pda)
GLOB.diary << "\[[time_stamp()]]PDA: [text]"
GLOB.world_game_log << "\[[time_stamp()]]PDA: [text]"
/proc/log_comment(text)
if (config.log_pda)
//reusing the PDA option because I really don't think news comments are worth a config option
GLOB.diary << "\[[time_stamp()]]COMMENT: [text]"
GLOB.world_game_log << "\[[time_stamp()]]COMMENT: [text]"
/proc/log_chat(text)
if (config.log_pda)
GLOB.diary << "\[[time_stamp()]]CHAT: [text]"
GLOB.world_game_log << "\[[time_stamp()]]CHAT: [text]"
/proc/log_sql(text)
if(config.sql_enabled)
GLOB.diary << "\[[time_stamp()]]SQL: [text]"
GLOB.world_game_log << "\[[time_stamp()]]SQL: [text]"
//This replaces world.log so it displays both in DD and the file
/proc/log_world(text)
if(config && config.log_runtimes)
world.log = GLOB.runtime_diary
world.log << text
world.log = null
GLOB.world_runtime_log << text
world.log << text
// Helper procs for building detailed log lines
-37
View File
@@ -1,37 +0,0 @@
#define YOUNG 4
/client/proc/join_date_check(y,m,d)
var/datum/DBQuery/query_datediff = SSdbcore.NewQuery("SELECT DATEDIFF(Now(),'[y]-[m]-[d]')")
if(!query_datediff.Execute())
return FALSE
if(query_datediff.NextRow())
var/diff = text2num(query_datediff.item[1])
if(config.use_account_age_for_jobs)
player_age = max(0,diff) //So job code soesn't freak out if they are time traveling.
if(diff < YOUNG)
var/msg = "(IP: [address], ID: [computer_id]) is a new BYOND account made on [y]-[m]-[d]."
if(diff < 0)
msg += " They are also apparently from the future."
message_admins("[key_name_admin(src)] [msg]")
return TRUE
#undef YOUNG
/client/proc/findJoinDate()
var/http[] = world.Export("http://byond.com/members/[src.ckey]?format=text")
if(!http)
log_world("Failed to connect to byond age check for [src.ckey]")
return FALSE
var/F = file2text(http["CONTENT"])
if(F)
var/regex/R = regex("joined = \"(\\d{4})-(\\d{2})-(\\d{2})\"")
if(!R.Find(F))
CRASH("Age check regex failed")
var/y = R.group[1]
var/m = R.group[2]
var/d = R.group[3]
return join_date_check(y,m,d)
+552 -535
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -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()
+1 -1
View File
@@ -24,4 +24,4 @@ GLOBAL_LIST_EMPTY(whitelisted_species_list)
/proc/log_mentor(text)
GLOB.mentor_log.Add(text)
GLOB.diary << "\[[time_stamp()]]MENTOR: [text]"
GLOB.world_game_log << "\[[time_stamp()]]MENTOR: [text]"
+18
View File
@@ -1342,6 +1342,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
//This prevents RCEs from badmins
//kevinz000 if you touch this I will hunt you down
GLOBAL_VAR_INIT(valid_HTTPSGet, FALSE)
GLOBAL_PROTECT(valid_HTTPSGet)
/proc/HTTPSGet(url)
if(findtext(url, "\""))
GLOB.valid_HTTPSGet = FALSE
@@ -1398,3 +1399,20 @@ GLOBAL_VAR_INIT(valid_HTTPSGet, FALSE)
/proc/pass()
return
/proc/get_mob_or_brainmob(occupant)
var/mob/living/mob_occupant
if(isliving(occupant))
mob_occupant = occupant
else if(isbodypart(occupant))
var/obj/item/bodypart/head/head = occupant
mob_occupant = head.brainmob
else if(isorgan(occupant))
var/obj/item/organ/brain/brain = occupant
mob_occupant = brain.brainmob
return mob_occupant
+1
View File
@@ -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
+11
View File
@@ -3,3 +3,14 @@ GLOBAL_VAR_INIT(secret_force_mode, "secret") // if this is anything but "secret"
GLOBAL_VAR_INIT(wavesecret, 0) // meteor mode, delays wave progression, terrible name
GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report
// Cult, needs to be global so admin cultists are functional
GLOBAL_VAR_INIT(blood_target, null) // Cult Master's target or Construct's Master
GLOBAL_DATUM(blood_target_image, /image)
GLOBAL_VAR_INIT(blood_target_reset_timer, null)
GLOBAL_DATUM(sac_mind, /datum/mind)
GLOBAL_VAR_INIT(sac_image, null)
GLOBAL_VAR_INIT(cult_vote_called, FALSE)
GLOBAL_VAR_INIT(cult_mastered, FALSE)
GLOBAL_VAR_INIT(reckoning_complete, FALSE)
GLOBAL_VAR_INIT(sac_complete, FALSE)
@@ -104,5 +104,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/weapon/storage/secure/briefcase = 3,
/obj/item/weapon/storage/toolbox/artistic = 2,
/obj/item/toy/eightball = 1,
/obj/item/weapon/storage/daki = 3,
"" = 3
))
+1
View File
@@ -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)
+4 -2
View File
@@ -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)
GLOBAL_LIST_EMPTY(simple_animals)
GLOBAL_LIST_EMPTY(language_datum_instances)
GLOBAL_LIST_EMPTY(all_languages)
+1
View File
@@ -5,5 +5,6 @@
#define POLL_IGNORE_POSSESSED_BLADE "possessed_blade"
#define POLL_IGNORE_ALIEN_LARVA "alien_larva"
#define POLL_IGNORE_CLOCKWORK_MARAUDER "clockwork_marauder"
#define POLL_IGNORE_SYNDICATE "syndicate"
GLOBAL_LIST_EMPTY(poll_ignore)
+33 -27
View File
@@ -1,28 +1,34 @@
GLOBAL_VAR(diary)
GLOBAL_PROTECT(diary)
GLOBAL_VAR(runtime_diary)
GLOBAL_PROTECT(runtime_diary)
GLOBAL_VAR(diaryofmeanpeople)
GLOBAL_PROTECT(diaryofmeanpeople)
GLOBAL_VAR(href_logfile)
GLOBAL_PROTECT(href_logfile)
GLOBAL_LIST_EMPTY(bombers)
GLOBAL_PROTECT(bombers)
GLOBAL_LIST_EMPTY(admin_log)
GLOBAL_PROTECT(admin_log)
GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]"
GLOBAL_PROTECT(lastsignalers)
GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
GLOBAL_PROTECT(lawchanges)
GLOBAL_LIST_EMPTY(combatlog)
GLOBAL_PROTECT(combatlog)
GLOBAL_LIST_EMPTY(IClog)
GLOBAL_PROTECT(IClog)
GLOBAL_LIST_EMPTY(OOClog)
GLOBAL_PROTECT(OOClog)
GLOBAL_LIST_EMPTY(adminlog)
GLOBAL_PROTECT(adminlog)
GLOBAL_VAR(log_directory)
GLOBAL_PROTECT(log_directory)
GLOBAL_VAR(world_game_log)
GLOBAL_PROTECT(world_game_log)
GLOBAL_VAR(world_runtime_log)
GLOBAL_PROTECT(world_runtime_log)
GLOBAL_VAR(world_attack_log)
GLOBAL_PROTECT(world_attack_log)
GLOBAL_VAR(world_href_log)
GLOBAL_PROTECT(world_href_log)
GLOBAL_VAR(round_id)
GLOBAL_PROTECT(round_id)
GLOBAL_VAR(config_error_log)
GLOBAL_PROTECT(config_error_log)
GLOBAL_LIST_EMPTY(bombers)
GLOBAL_PROTECT(bombers)
GLOBAL_LIST_EMPTY(admin_log)
GLOBAL_PROTECT(admin_log)
GLOBAL_LIST_EMPTY(lastsignalers) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]"
GLOBAL_PROTECT(lastsignalers)
GLOBAL_LIST_EMPTY(lawchanges) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
GLOBAL_PROTECT(lawchanges)
GLOBAL_LIST_EMPTY(combatlog)
GLOBAL_PROTECT(combatlog)
GLOBAL_LIST_EMPTY(IClog)
GLOBAL_PROTECT(IClog)
GLOBAL_LIST_EMPTY(OOClog)
GLOBAL_PROTECT(OOClog)
GLOBAL_LIST_EMPTY(adminlog)
GLOBAL_PROTECT(adminlog)
GLOBAL_LIST_EMPTY(active_turfs_startlist)
+80 -47
View File
@@ -107,64 +107,112 @@
var/obj/item/W = get_active_held_item()
if(W == A)
W.attack_self(src)
update_inv_hands()
return
// operate three levels deep here (item in backpack in src; item in box in backpack in src, not any deeper)
if(A.ClickAccessible(src, depth=INVENTORY_DEPTH))
// No adjacency needed
//These are always reachable.
//User itself, current loc, and user inventory
if(DirectAccess(A))
if(W)
melee_item_attack_chain(src, W, A, params)
melee_item_attack_chain(src,W,A,params)
else
if(ismob(A))
changeNext_move(CLICK_CD_MELEE)
UnarmedAttack(A)
return
if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that
//Can't reach anything else in lockers or other weirdness
if(!loc.AllowClick())
return
// Allows you to click on a box's contents, if that box is on the ground, but no deeper than that
if(isturf(A) || isturf(A.loc) || (A.loc && isturf(A.loc.loc)))
if(Adjacent(A) || (W && CheckReach(src, A, W.reach))) //Adjacent or reaching attacks
if(W)
melee_item_attack_chain(src, W, A, params)
else
if(ismob(A))
changeNext_move(CLICK_CD_MELEE)
UnarmedAttack(A, 1)
return
else // non-adjacent click
if(W)
W.afterattack(A,src,0,params) // 0: not Adjacent
else
RangedAttack(A, params)
//Standard reach turf to turf or reaching inside storage
if(CanReach(A,W))
if(W)
melee_item_attack_chain(src,W,A,params)
else
if(ismob(A))
changeNext_move(CLICK_CD_MELEE)
UnarmedAttack(A,1)
else
if(W)
W.afterattack(A,src,0,params)
else
RangedAttack(A,params)
/proc/CheckReach(atom/movable/here, atom/movable/there, reach)
/atom/movable/proc/CanReach(atom/target,obj/item/tool,view_only = FALSE)
if(isturf(target) || isturf(target.loc) || DirectAccess(target)) //Directly accessible atoms
if(Adjacent(target) || (tool && CheckToolReach(src, target, tool.reach))) //Adjacent or reaching attacks
return TRUE
else
//Things inside storage insde another storage
//Eg Contents of a box in a backpack
var/atom/outer_storage = get_atom_on_turf(target)
if(outer_storage == target) //whatever that is we don't want infinite loop.
return FALSE
if(outer_storage && CanReach(outer_storage,tool) && outer_storage.CanReachStorage(target,src,view_only ? STORAGE_VIEW_DEPTH : INVENTORY_DEPTH))
return TRUE
return FALSE
//Can [target] in this container be reached by [user], can't be more than [depth] levels deep
/atom/proc/CanReachStorage(atom/target,user,depth)
return FALSE
/obj/item/weapon/storage/CanReachStorage(atom/target,user,depth)
while(target && depth > 0)
target = target.loc
depth--
if(target == src)
return TRUE
return FALSE
/atom/movable/proc/DirectAccess(atom/target)
if(target == src)
return TRUE
if(target == loc)
return TRUE
/mob/DirectAccess(atom/target)
if(..())
return TRUE
if(target in contents) //This could probably use moving down and restricting to inventory only
return TRUE
return FALSE
/mob/living/DirectAccess(atom/target)
if(..()) //Lightweight checks first
return TRUE
if(target in GetAllContents())
return TRUE
/atom/proc/AllowClick()
return FALSE
/turf/AllowClick()
return TRUE
/proc/CheckToolReach(atom/movable/here, atom/movable/there, reach)
if(!here || !there)
return
switch(reach)
if(0)
return here.loc == there.loc
return FALSE
if(1)
return here.Adjacent(there)
return FALSE //here.Adjacent(there)
if(2 to INFINITY)
var/obj/dummy = new(get_turf(here)) //We'll try to move this every tick, failing if we can't
var/obj/dummy = new(get_turf(here))
dummy.pass_flags |= PASSTABLE
dummy.invisibility = INVISIBILITY_ABSTRACT
for(var/i in 1 to reach) //Limit it to that many tries
var/turf/T = get_step(dummy, get_dir(dummy, there))
if(dummy.loc == there.loc)
if(dummy.CanReach(there))
qdel(dummy)
return 1
if(there.density && dummy in range(1, there)) //For windows and suchlike
qdel(dummy)
return 1
return TRUE
if(!dummy.Move(T)) //we're blocked!
qdel(dummy)
return
qdel(dummy)
// Default behavior: ignore double clicks (the second click that makes the doubleclick call already calls for a normal click)
/mob/proc/DblClickOn(atom/A, params)
@@ -304,21 +352,6 @@
/atom/proc/CtrlShiftClick(mob/user)
return
/*
Helper to check can the mob click/access an item.
Used by mob inventory and storage items.
*/
/atom/proc/ClickAccessible(mob/user, depth=1)
if(src == user.loc || (src in user.contents))
return TRUE
if(loc && depth > 1)
return loc.ClickAccessible(user, depth-1)
/turf/ClickAccessible(mob/user, depth=1)
return
/*
Misc helpers
+11 -10
View File
@@ -21,7 +21,7 @@
#define ui_inventory "WEST:6,SOUTH:5"
//Middle left indicators
#define ui_lingchemdisplay "WEST:6,CENTER-1:15"
#define ui_lingchemdisplay "WEST,CENTER-1:15"
#define ui_lingstingdisplay "WEST:6,CENTER-3:11"
#define ui_crafting "12:-10,1:5"
#define ui_building "12:-10,1:21"
@@ -104,17 +104,18 @@
#define ui_health "EAST-1:28,CENTER-1:15"
#define ui_internal "EAST-1:28,CENTER:17"
//borgs and aliens
#define ui_alien_nightvision "EAST-1:28,CENTER:17"
//borgs
#define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator.
#define ui_alien_health "EAST-1:28,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator.
#define ui_alienplasmadisplay "EAST-1:28,CENTER-2:15"
#define ui_alien_queen_finder "EAST-1:28,CENTER-3:15"
//constructs
#define ui_construct_pull "EAST,CENTER-2:15"
#define ui_construct_health "EAST,CENTER:15" //same as borgs and humans
//aliens
#define ui_alien_health "EAST,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator.
#define ui_alienplasmadisplay "EAST,CENTER-2:15"
#define ui_alien_queen_finder "EAST,CENTER-3:15"
//constructs
#define ui_construct_pull "EAST,CENTER-2:15"
#define ui_construct_health "EAST,CENTER:15" //same as borgs and humans
// AI
#define ui_ai_core "SOUTH:6,WEST"
+100 -1
View File
@@ -42,6 +42,7 @@
thealert.override_alerts = override
if(override)
thealert.timeout = null
thealert.mob_viewer = src
if(new_master)
var/old_layer = new_master.layer
@@ -96,6 +97,7 @@
var/severity = 0
var/alerttooltipstyle = ""
var/override_alerts = FALSE //If it is overriding other alerts of the same type
var/mob/mob_viewer //the mob viewing this alert
/obj/screen/alert/MouseEntered(location,control,params)
@@ -256,6 +258,103 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
icon_state = "blobbernaut_nofactory"
alerttooltipstyle = "blob"
// BLOODCULT
/obj/screen/alert/bloodsense
name = "Blood Sense"
desc = "Allows you to sense blood that is manipulated by dark magicks."
icon_state = "cult_sense"
alerttooltipstyle = "cult"
var/static/image/narnar
var/angle = 0
var/mob/living/simple_animal/hostile/construct/Cviewer = null
/obj/screen/alert/bloodsense/Initialize()
. = ..()
if(!narnar)
narnar = new('icons/mob/screen_alert.dmi', "mini_nar")
START_PROCESSING(SSprocessing, src)
/obj/screen/alert/bloodsense/Destroy()
Cviewer = null
STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/screen/alert/bloodsense/process()
var/atom/blood_target
if(GLOB.blood_target)
if(!get_turf(GLOB.blood_target))
GLOB.blood_target = null
else
blood_target = GLOB.blood_target
if(Cviewer)
if(Cviewer.seeking && Cviewer.master)
blood_target = Cviewer.master
if(!blood_target)
if(!GLOB.sac_complete)
if(icon_state == "runed_sense0")
return
animate(src, transform = null, time = 1, loop = 0)
angle = 0
cut_overlays()
icon_state = "runed_sense0"
desc = "Nar-Sie demands that [GLOB.sac_mind] be sacrificed before the summoning ritual can begin."
add_overlay(GLOB.sac_image)
else
if(SSticker.mode.eldergod)
desc = "The sacrifice is complete, prepare to summon Nar-Sie!"
else
desc = "The summoning is complete, glory to Nar-Sie!"
if(icon_state == "runed_sense1")
return
animate(src, transform = null, time = 1, loop = 0)
angle = 0
cut_overlays()
icon_state = "runed_sense1"
add_overlay(narnar)
return
var/turf/P = get_turf(blood_target)
var/turf/Q = get_turf(mob_viewer)
var/area/A = get_area(P)
if(P.z != Q.z) //The target is on a different Z level, we cannot sense that far.
return
desc = "You are currently tracking [blood_target] in [A.name]."
var/target_angle = Get_Angle(Q, P)
var/target_dist = get_dist(P, Q)
cut_overlays()
switch(target_dist)
if(0 to 1)
icon_state = "runed_sense2"
if(2 to 8)
icon_state = "arrow8"
if(9 to 15)
icon_state = "arrow7"
if(16 to 22)
icon_state = "arrow6"
if(23 to 29)
icon_state = "arrow5"
if(30 to 36)
icon_state = "arrow4"
if(37 to 43)
icon_state = "arrow3"
if(44 to 50)
icon_state = "arrow2"
if(51 to 57)
icon_state = "arrow1"
if(58 to 64)
icon_state = "arrow0"
if(65 to 400)
icon_state = "arrow"
var/difference = target_angle - angle
angle = target_angle
if(!difference)
return
var/matrix/final = matrix(transform)
final.Turn(difference)
animate(src, transform = final, time = 5, loop = 0)
// CLOCKCULT
/obj/screen/alert/clockwork
alerttooltipstyle = "clockcult"
@@ -393,6 +492,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
textlist += "<br>"
else
textlist += "Seconds until Ratvar's arrival: <b>[G.get_arrival_text(TRUE)]</b><br>"
break
if(unconverted_ais_exist)
if(unconverted_ais_exist > 1)
textlist += "<b>[unconverted_ais_exist] unconverted AIs exist!</b><br>"
@@ -604,4 +704,3 @@ so as to remain in compliance with the most up-to-date laws."
severity = 0
master = null
screen_loc = ""
+4
View File
@@ -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)
+270 -268
View File
@@ -1,268 +1,270 @@
/*
The hud datum
Used to show and hide huds for all the different mob types,
including inventories and item quick actions.
*/
/datum/hud
var/mob/mymob
var/hud_shown = 1 //Used for the HUD toggle (F12)
var/hud_version = 1 //Current displayed version of the HUD
var/inventory_shown = 0 //Equipped item inventory
var/show_intent_icons = 0
var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)
var/obj/screen/ling/chems/lingchemdisplay
var/obj/screen/ling/sting/lingstingdisplay
var/obj/screen/blobpwrdisplay
var/obj/screen/alien_plasma_display
var/obj/screen/alien_queen_finder
var/obj/screen/devil/soul_counter/devilsouldisplay
var/obj/screen/deity_power_display
var/obj/screen/deity_follower_display
var/obj/screen/nightvisionicon
var/obj/screen/action_intent
var/obj/screen/zone_select
var/obj/screen/pull_icon
var/obj/screen/throw_icon
var/obj/screen/module_store_icon
var/list/static_inventory = list() //the screen objects which are static
var/list/toggleable_inventory = list() //the screen objects which can be hidden
var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys
var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...)
var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...)
var/list/inv_slots[slots_amt] // /obj/screen/inventory objects, ordered by their slot ID.
var/list/hand_slots // /obj/screen/inventory/hand objects, assoc list of "[held_index]" = object
var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object
var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle
var/action_buttons_hidden = 0
var/obj/screen/healths
var/obj/screen/healthdoll
var/obj/screen/internals
var/ui_style_icon = 'icons/mob/screen_midnight.dmi'
/datum/hud/New(mob/owner , ui_style = 'icons/mob/screen_midnight.dmi')
mymob = owner
ui_style_icon = ui_style
hide_actions_toggle = new
hide_actions_toggle.InitialiseIcon(src)
hand_slots = list()
for(var/mytype in subtypesof(/obj/screen/plane_master))
var/obj/screen/plane_master/instance = new mytype()
plane_masters["[instance.plane]"] = instance
instance.backdrop(mymob)
/datum/hud/Destroy()
if(mymob.hud_used == src)
mymob.hud_used = null
qdel(hide_actions_toggle)
hide_actions_toggle = null
qdel(module_store_icon)
module_store_icon = null
if(static_inventory.len)
for(var/thing in static_inventory)
qdel(thing)
static_inventory.Cut()
inv_slots.Cut()
action_intent = null
zone_select = null
pull_icon = null
if(toggleable_inventory.len)
for(var/thing in toggleable_inventory)
qdel(thing)
toggleable_inventory.Cut()
if(hotkeybuttons.len)
for(var/thing in hotkeybuttons)
qdel(thing)
hotkeybuttons.Cut()
throw_icon = null
if(infodisplay.len)
for(var/thing in infodisplay)
qdel(thing)
infodisplay.Cut()
healths = null
healthdoll = null
internals = null
lingchemdisplay = null
devilsouldisplay = null
lingstingdisplay = null
blobpwrdisplay = null
alien_plasma_display = null
alien_queen_finder = null
deity_power_display = null
deity_follower_display = null
nightvisionicon = null
if(plane_masters.len)
for(var/thing in plane_masters)
qdel(plane_masters[thing])
plane_masters.Cut()
if(screenoverlays.len)
for(var/thing in screenoverlays)
qdel(thing)
screenoverlays.Cut()
mymob = null
return ..()
/mob/proc/create_mob_hud()
if(client && !hud_used)
hud_used = new /datum/hud(src)
update_sight()
//Version denotes which style should be displayed. blank or 0 means "next version"
/datum/hud/proc/show_hud(version = 0,mob/viewmob)
if(!ismob(mymob))
return 0
var/mob/screenmob = viewmob || mymob
if(!screenmob.client)
return 0
screenmob.client.screen = list()
var/display_hud_version = version
if(!display_hud_version) //If 0 or blank, display the next hud version
display_hud_version = hud_version + 1
if(display_hud_version > HUD_VERSIONS) //If the requested version number is greater than the available versions, reset back to the first version
display_hud_version = 1
switch(display_hud_version)
if(HUD_STYLE_STANDARD) //Default HUD
hud_shown = 1 //Governs behavior of other procs
if(static_inventory.len)
screenmob.client.screen += static_inventory
if(toggleable_inventory.len && screenmob.hud_used && screenmob.hud_used.inventory_shown)
screenmob.client.screen += toggleable_inventory
if(hotkeybuttons.len && !hotkey_ui_hidden)
screenmob.client.screen += hotkeybuttons
if(infodisplay.len)
screenmob.client.screen += infodisplay
screenmob.client.screen += hide_actions_toggle
if(action_intent)
action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position
if(HUD_STYLE_REDUCED) //Reduced HUD
hud_shown = 0 //Governs behavior of other procs
if(static_inventory.len)
screenmob.client.screen -= static_inventory
if(toggleable_inventory.len)
screenmob.client.screen -= toggleable_inventory
if(hotkeybuttons.len)
screenmob.client.screen -= hotkeybuttons
if(infodisplay.len)
screenmob.client.screen += infodisplay
//These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay
for(var/h in hand_slots)
var/obj/screen/hand = hand_slots[h]
if(hand)
screenmob.client.screen += hand
if(action_intent)
screenmob.client.screen += action_intent //we want the intent switcher visible
action_intent.screen_loc = ui_acti_alt //move this to the alternative position, where zone_select usually is.
if(HUD_STYLE_NOHUD) //No HUD
hud_shown = 0 //Governs behavior of other procs
if(static_inventory.len)
screenmob.client.screen -= static_inventory
if(toggleable_inventory.len)
screenmob.client.screen -= toggleable_inventory
if(hotkeybuttons.len)
screenmob.client.screen -= hotkeybuttons
if(infodisplay.len)
screenmob.client.screen -= infodisplay
for(var/thing in plane_masters)
screenmob.client.screen += plane_masters[thing]
hud_version = display_hud_version
persistent_inventory_update(screenmob)
mymob.update_action_buttons(1)
reorganize_alerts()
mymob.reload_fullscreen()
update_parallax_pref(screenmob)
/datum/hud/human/show_hud(version = 0,mob/viewmob)
..()
hidden_inventory_update(viewmob)
/datum/hud/robot/show_hud(version = 0, mob/viewmob)
..()
update_robot_modules_display()
/datum/hud/proc/hidden_inventory_update()
return
/datum/hud/proc/persistent_inventory_update(mob/viewer)
if(!mymob)
return
//Triggered when F12 is pressed (Unless someone changed something in the DMF)
/mob/verb/button_pressed_F12()
set name = "F12"
set hidden = 1
if(hud_used && client)
hud_used.show_hud() //Shows the next hud preset
to_chat(usr, "<span class ='info'>Switched HUD mode. Press F12 to toggle.</span>")
else
to_chat(usr, "<span class ='warning'>This mob type does not use a HUD.</span>")
//(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, "<span class ='info'>Switched HUD mode. Press F12 to toggle.</span>")
else
to_chat(usr, "<span class ='warning'>This mob type does not use a HUD.</span>")
//(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
+438 -440
View File
@@ -1,440 +1,438 @@
/obj/screen/human
icon = 'icons/mob/screen_midnight.dmi'
/obj/screen/human/toggle
name = "toggle"
icon_state = "toggle"
/obj/screen/human/toggle/Click()
var/mob/targetmob = usr
if(isobserver(usr))
if(ishuman(usr.client.eye) && (usr.client.eye != usr))
var/mob/M = usr.client.eye
targetmob = M
if(usr.hud_used.inventory_shown && targetmob.hud_used)
usr.hud_used.inventory_shown = 0
usr.client.screen -= targetmob.hud_used.toggleable_inventory
else
usr.hud_used.inventory_shown = 1
usr.client.screen += targetmob.hud_used.toggleable_inventory
targetmob.hud_used.hidden_inventory_update(usr)
/obj/screen/human/equip
name = "equip"
icon_state = "act_equip"
/obj/screen/human/equip/Click()
if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
return 1
var/mob/living/carbon/human/H = usr
H.quick_equip()
/obj/screen/devil
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/devil/soul_counter
icon = 'icons/mob/screen_gen.dmi'
name = "souls owned"
icon_state = "Devil-6"
screen_loc = ui_devilsouldisplay
/obj/screen/devil/soul_counter/proc/update_counter(souls = 0)
invisibility = 0
maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#FF0000'>[souls]</font></div>"
switch(souls)
if(0,null)
icon_state = "Devil-1"
if(1,2)
icon_state = "Devil-2"
if(3 to 5)
icon_state = "Devil-3"
if(6 to 8)
icon_state = "Devil-4"
if(9 to INFINITY)
icon_state = "Devil-5"
else
icon_state = "Devil-6"
/obj/screen/devil/soul_counter/proc/clear()
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/ling
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/ling/sting
name = "current sting"
screen_loc = ui_lingstingdisplay
/obj/screen/ling/sting/Click()
if(isobserver(usr))
return
var/mob/living/carbon/U = usr
U.unset_sting()
/obj/screen/ling/chems
name = "chemical storage"
icon_state = "power_display"
screen_loc = ui_lingchemdisplay
/mob/living/carbon/human/create_mob_hud()
if(client && !hud_used)
hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style))
/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi')
..()
owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness)
var/obj/screen/using
var/obj/screen/inventory/inv_box
using = new /obj/screen/craft
using.icon = ui_style
static_inventory += using
using = new/obj/screen/language_menu
using.icon = ui_style
static_inventory += using
using = new /obj/screen/area_creator
using.icon = ui_style
static_inventory += using
action_intent = new /obj/screen/act_intent/segmented
action_intent.icon_state = mymob.a_intent
static_inventory += action_intent
using = new /obj/screen/mov_intent
using.icon = ui_style
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
using.screen_loc = ui_movi
static_inventory += using
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "i_clothing"
inv_box.icon = ui_style
inv_box.slot_id = slot_w_uniform
inv_box.icon_state = "uniform"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_iclothing
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "o_clothing"
inv_box.icon = ui_style
inv_box.slot_id = slot_wear_suit
inv_box.icon_state = "suit"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_oclothing
toggleable_inventory += inv_box
build_hand_slots(ui_style)
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "id"
inv_box.icon = ui_style
inv_box.icon_state = "id"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_id
inv_box.slot_id = slot_wear_id
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_mask
inv_box.slot_id = slot_wear_mask
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "neck"
inv_box.icon = ui_style
inv_box.icon_state = "neck"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_neck
inv_box.slot_id = slot_neck
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "storage1"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_storage1
inv_box.slot_id = slot_l_store
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "storage2"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_storage2
inv_box.slot_id = slot_r_store
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "suit storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_sstore1
inv_box.slot_id = slot_s_store
static_inventory += inv_box
using = new /obj/screen/resist()
using.icon = ui_style
using.screen_loc = ui_pull_resist
hotkeybuttons += using
using = new /obj/screen/human/toggle()
using.icon = ui_style
using.screen_loc = ui_inventory
static_inventory += using
using = new /obj/screen/human/equip()
using.icon = ui_style
using.screen_loc = ui_equip_position(mymob)
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "gloves"
inv_box.icon = ui_style
inv_box.icon_state = "gloves"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_gloves
inv_box.slot_id = slot_gloves
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "eyes"
inv_box.icon = ui_style
inv_box.icon_state = "glasses"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_glasses
inv_box.slot_id = slot_glasses
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "ears"
inv_box.icon = ui_style
inv_box.icon_state = "ears"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_ears
inv_box.slot_id = slot_ears
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_head
inv_box.slot_id = slot_head
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "shoes"
inv_box.icon = ui_style
inv_box.icon_state = "shoes"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_shoes
inv_box.slot_id = slot_shoes
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "belt"
inv_box.icon = ui_style
inv_box.icon_state = "belt"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_belt
inv_box.slot_id = slot_belt
static_inventory += inv_box
throw_icon = new /obj/screen/throw_catch()
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
hotkeybuttons += throw_icon
internals = new /obj/screen/internals()
infodisplay += internals
healths = new /obj/screen/healths()
infodisplay += healths
//citadel code
arousal = new /obj/screen/arousal()
infodisplay += arousal
healthdoll = new /obj/screen/healthdoll()
infodisplay += healthdoll
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
pull_icon.update_icon(mymob)
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
lingchemdisplay = new /obj/screen/ling/chems()
infodisplay += lingchemdisplay
lingstingdisplay = new /obj/screen/ling/sting()
infodisplay += lingstingdisplay
devilsouldisplay = new /obj/screen/devil/soul_counter
infodisplay += devilsouldisplay
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
zone_select.update_icon(mymob)
static_inventory += zone_select
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[inv.slot_id] = inv
inv.update_icon()
/datum/hud/human/hidden_inventory_update(mob/viewer)
if(!mymob)
return
var/mob/living/carbon/human/H = mymob
var/mob/screenmob = viewer || H
if(screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown)
if(H.shoes)
H.shoes.screen_loc = ui_shoes
screenmob.client.screen += H.shoes
if(H.gloves)
H.gloves.screen_loc = ui_gloves
screenmob.client.screen += H.gloves
if(H.ears)
H.ears.screen_loc = ui_ears
screenmob.client.screen += H.ears
if(H.glasses)
H.glasses.screen_loc = ui_glasses
screenmob.client.screen += H.glasses
if(H.w_uniform)
H.w_uniform.screen_loc = ui_iclothing
screenmob.client.screen += H.w_uniform
if(H.wear_suit)
H.wear_suit.screen_loc = ui_oclothing
screenmob.client.screen += H.wear_suit
if(H.wear_mask)
H.wear_mask.screen_loc = ui_mask
screenmob.client.screen += H.wear_mask
if(H.wear_neck)
H.wear_neck.screen_loc = ui_neck
screenmob.client.screen += H.wear_neck
if(H.head)
H.head.screen_loc = ui_head
screenmob.client.screen += H.head
else
if(H.shoes) screenmob.client.screen -= H.shoes
if(H.gloves) screenmob.client.screen -= H.gloves
if(H.ears) screenmob.client.screen -= H.ears
if(H.glasses) screenmob.client.screen -= H.glasses
if(H.w_uniform) screenmob.client.screen -= H.w_uniform
if(H.wear_suit) screenmob.client.screen -= H.wear_suit
if(H.wear_mask) screenmob.client.screen -= H.wear_mask
if(H.wear_neck) screenmob.client.screen -= H.wear_neck
if(H.head) screenmob.client.screen -= H.head
/datum/hud/human/persistent_inventory_update(mob/viewer)
if(!mymob)
return
..()
var/mob/living/carbon/human/H = mymob
var/mob/screenmob = viewer || H
if(screenmob.hud_used)
if(screenmob.hud_used.hud_shown)
if(H.s_store)
H.s_store.screen_loc = ui_sstore1
screenmob.client.screen += H.s_store
if(H.wear_id)
H.wear_id.screen_loc = ui_id
screenmob.client.screen += H.wear_id
if(H.belt)
H.belt.screen_loc = ui_belt
screenmob.client.screen += H.belt
if(H.back)
H.back.screen_loc = ui_back
screenmob.client.screen += H.back
if(H.l_store)
H.l_store.screen_loc = ui_storage1
screenmob.client.screen += H.l_store
if(H.r_store)
H.r_store.screen_loc = ui_storage2
screenmob.client.screen += H.r_store
else
if(H.s_store)
screenmob.client.screen -= H.s_store
if(H.wear_id)
screenmob.client.screen -= H.wear_id
if(H.belt)
screenmob.client.screen -= H.belt
if(H.back)
screenmob.client.screen -= H.back
if(H.l_store)
screenmob.client.screen -= H.l_store
if(H.r_store)
screenmob.client.screen -= H.r_store
if(hud_version != HUD_STYLE_NOHUD)
for(var/obj/item/I in H.held_items)
I.screen_loc = ui_hand_position(H.get_held_index_of_item(I))
screenmob.client.screen += I
else
for(var/obj/item/I in H.held_items)
I.screen_loc = null
screenmob.client.screen -= I
/mob/living/carbon/human/verb/toggle_hotkey_verbs()
set category = "OOC"
set name = "Toggle hotkey buttons"
set desc = "This disables or enables the user interface buttons which can be used with hotkeys."
if(hud_used.hotkey_ui_hidden)
client.screen += hud_used.hotkeybuttons
hud_used.hotkey_ui_hidden = 0
else
client.screen -= hud_used.hotkeybuttons
hud_used.hotkey_ui_hidden = 1
/obj/screen/human
icon = 'icons/mob/screen_midnight.dmi'
/obj/screen/human/toggle
name = "toggle"
icon_state = "toggle"
/obj/screen/human/toggle/Click()
var/mob/targetmob = usr
if(isobserver(usr))
if(ishuman(usr.client.eye) && (usr.client.eye != usr))
var/mob/M = usr.client.eye
targetmob = M
if(usr.hud_used.inventory_shown && targetmob.hud_used)
usr.hud_used.inventory_shown = 0
usr.client.screen -= targetmob.hud_used.toggleable_inventory
else
usr.hud_used.inventory_shown = 1
usr.client.screen += targetmob.hud_used.toggleable_inventory
targetmob.hud_used.hidden_inventory_update(usr)
/obj/screen/human/equip
name = "equip"
icon_state = "act_equip"
/obj/screen/human/equip/Click()
if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
return 1
var/mob/living/carbon/human/H = usr
H.quick_equip()
/obj/screen/devil
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/devil/soul_counter
icon = 'icons/mob/screen_gen.dmi'
name = "souls owned"
icon_state = "Devil-6"
screen_loc = ui_devilsouldisplay
/obj/screen/devil/soul_counter/proc/update_counter(souls = 0)
invisibility = 0
maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#FF0000'>[souls]</font></div>"
switch(souls)
if(0,null)
icon_state = "Devil-1"
if(1,2)
icon_state = "Devil-2"
if(3 to 5)
icon_state = "Devil-3"
if(6 to 8)
icon_state = "Devil-4"
if(9 to INFINITY)
icon_state = "Devil-5"
else
icon_state = "Devil-6"
/obj/screen/devil/soul_counter/proc/clear()
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/ling
invisibility = INVISIBILITY_ABSTRACT
/obj/screen/ling/sting
name = "current sting"
screen_loc = ui_lingstingdisplay
/obj/screen/ling/sting/Click()
if(isobserver(usr))
return
var/mob/living/carbon/U = usr
U.unset_sting()
/obj/screen/ling/chems
name = "chemical storage"
icon_state = "power_display"
screen_loc = ui_lingchemdisplay
/mob/living/carbon/human/create_mob_hud()
if(client && !hud_used)
hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style))
/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_midnight.dmi')
..()
owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness)
var/obj/screen/using
var/obj/screen/inventory/inv_box
using = new /obj/screen/craft
using.icon = ui_style
static_inventory += using
using = new/obj/screen/language_menu
using.icon = ui_style
static_inventory += using
using = new /obj/screen/area_creator
using.icon = ui_style
static_inventory += using
action_intent = new /obj/screen/act_intent/segmented
action_intent.icon_state = mymob.a_intent
static_inventory += action_intent
using = new /obj/screen/mov_intent
using.icon = ui_style
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
using.screen_loc = ui_movi
static_inventory += using
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "i_clothing"
inv_box.icon = ui_style
inv_box.slot_id = slot_w_uniform
inv_box.icon_state = "uniform"
inv_box.screen_loc = ui_iclothing
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "o_clothing"
inv_box.icon = ui_style
inv_box.slot_id = slot_wear_suit
inv_box.icon_state = "suit"
inv_box.screen_loc = ui_oclothing
toggleable_inventory += inv_box
build_hand_slots(ui_style)
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_1"
using.screen_loc = ui_swaphand_position(owner,1)
static_inventory += using
using = new /obj/screen/swap_hand()
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand_position(owner,2)
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "id"
inv_box.icon = ui_style
inv_box.icon_state = "id"
inv_box.screen_loc = ui_id
inv_box.slot_id = slot_wear_id
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "mask"
inv_box.icon = ui_style
inv_box.icon_state = "mask"
inv_box.screen_loc = ui_mask
inv_box.slot_id = slot_wear_mask
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "neck"
inv_box.icon = ui_style
inv_box.icon_state = "neck"
inv_box.screen_loc = ui_neck
inv_box.slot_id = slot_neck
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "back"
inv_box.icon = ui_style
inv_box.icon_state = "back"
inv_box.screen_loc = ui_back
inv_box.slot_id = slot_back
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "storage1"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
inv_box.screen_loc = ui_storage1
inv_box.slot_id = slot_l_store
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "storage2"
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
inv_box.screen_loc = ui_storage2
inv_box.slot_id = slot_r_store
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "suit storage"
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
inv_box.screen_loc = ui_sstore1
inv_box.slot_id = slot_s_store
static_inventory += inv_box
using = new /obj/screen/resist()
using.icon = ui_style
using.screen_loc = ui_pull_resist
hotkeybuttons += using
using = new /obj/screen/human/toggle()
using.icon = ui_style
using.screen_loc = ui_inventory
static_inventory += using
using = new /obj/screen/human/equip()
using.icon = ui_style
using.screen_loc = ui_equip_position(mymob)
static_inventory += using
inv_box = new /obj/screen/inventory()
inv_box.name = "gloves"
inv_box.icon = ui_style
inv_box.icon_state = "gloves"
inv_box.screen_loc = ui_gloves
inv_box.slot_id = slot_gloves
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "eyes"
inv_box.icon = ui_style
inv_box.icon_state = "glasses"
inv_box.screen_loc = ui_glasses
inv_box.slot_id = slot_glasses
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "ears"
inv_box.icon = ui_style
inv_box.icon_state = "ears"
inv_box.screen_loc = ui_ears
inv_box.slot_id = slot_ears
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "head"
inv_box.icon = ui_style
inv_box.icon_state = "head"
inv_box.screen_loc = ui_head
inv_box.slot_id = slot_head
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "shoes"
inv_box.icon = ui_style
inv_box.icon_state = "shoes"
inv_box.screen_loc = ui_shoes
inv_box.slot_id = slot_shoes
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
inv_box.name = "belt"
inv_box.icon = ui_style
inv_box.icon_state = "belt"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_belt
inv_box.slot_id = slot_belt
static_inventory += inv_box
throw_icon = new /obj/screen/throw_catch()
throw_icon.icon = ui_style
throw_icon.screen_loc = ui_drop_throw
hotkeybuttons += throw_icon
internals = new /obj/screen/internals()
infodisplay += internals
healths = new /obj/screen/healths()
infodisplay += healths
//citadel code
arousal = new /obj/screen/arousal()
infodisplay += arousal
healthdoll = new /obj/screen/healthdoll()
infodisplay += healthdoll
pull_icon = new /obj/screen/pull()
pull_icon.icon = ui_style
pull_icon.update_icon(mymob)
pull_icon.screen_loc = ui_pull_resist
static_inventory += pull_icon
lingchemdisplay = new /obj/screen/ling/chems()
infodisplay += lingchemdisplay
lingstingdisplay = new /obj/screen/ling/sting()
infodisplay += lingstingdisplay
devilsouldisplay = new /obj/screen/devil/soul_counter
infodisplay += devilsouldisplay
zone_select = new /obj/screen/zone_sel()
zone_select.icon = ui_style
zone_select.update_icon(mymob)
static_inventory += zone_select
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
inv.hud = src
inv_slots[inv.slot_id] = inv
inv.update_icon()
/datum/hud/human/update_locked_slots()
if(!mymob)
return
var/mob/living/carbon/human/H = mymob
var/datum/species/S = H.dna.species
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
if(inv.slot_id in S.no_equip)
inv.alpha = 128
else
inv.alpha = initial(inv.alpha)
/datum/hud/human/hidden_inventory_update(mob/viewer)
if(!mymob)
return
var/mob/living/carbon/human/H = mymob
var/mob/screenmob = viewer || H
if(screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown)
if(H.shoes)
H.shoes.screen_loc = ui_shoes
screenmob.client.screen += H.shoes
if(H.gloves)
H.gloves.screen_loc = ui_gloves
screenmob.client.screen += H.gloves
if(H.ears)
H.ears.screen_loc = ui_ears
screenmob.client.screen += H.ears
if(H.glasses)
H.glasses.screen_loc = ui_glasses
screenmob.client.screen += H.glasses
if(H.w_uniform)
H.w_uniform.screen_loc = ui_iclothing
screenmob.client.screen += H.w_uniform
if(H.wear_suit)
H.wear_suit.screen_loc = ui_oclothing
screenmob.client.screen += H.wear_suit
if(H.wear_mask)
H.wear_mask.screen_loc = ui_mask
screenmob.client.screen += H.wear_mask
if(H.wear_neck)
H.wear_neck.screen_loc = ui_neck
screenmob.client.screen += H.wear_neck
if(H.head)
H.head.screen_loc = ui_head
screenmob.client.screen += H.head
else
if(H.shoes) screenmob.client.screen -= H.shoes
if(H.gloves) screenmob.client.screen -= H.gloves
if(H.ears) screenmob.client.screen -= H.ears
if(H.glasses) screenmob.client.screen -= H.glasses
if(H.w_uniform) screenmob.client.screen -= H.w_uniform
if(H.wear_suit) screenmob.client.screen -= H.wear_suit
if(H.wear_mask) screenmob.client.screen -= H.wear_mask
if(H.wear_neck) screenmob.client.screen -= H.wear_neck
if(H.head) screenmob.client.screen -= H.head
/datum/hud/human/persistent_inventory_update(mob/viewer)
if(!mymob)
return
..()
var/mob/living/carbon/human/H = mymob
var/mob/screenmob = viewer || H
if(screenmob.hud_used)
if(screenmob.hud_used.hud_shown)
if(H.s_store)
H.s_store.screen_loc = ui_sstore1
screenmob.client.screen += H.s_store
if(H.wear_id)
H.wear_id.screen_loc = ui_id
screenmob.client.screen += H.wear_id
if(H.belt)
H.belt.screen_loc = ui_belt
screenmob.client.screen += H.belt
if(H.back)
H.back.screen_loc = ui_back
screenmob.client.screen += H.back
if(H.l_store)
H.l_store.screen_loc = ui_storage1
screenmob.client.screen += H.l_store
if(H.r_store)
H.r_store.screen_loc = ui_storage2
screenmob.client.screen += H.r_store
else
if(H.s_store)
screenmob.client.screen -= H.s_store
if(H.wear_id)
screenmob.client.screen -= H.wear_id
if(H.belt)
screenmob.client.screen -= H.belt
if(H.back)
screenmob.client.screen -= H.back
if(H.l_store)
screenmob.client.screen -= H.l_store
if(H.r_store)
screenmob.client.screen -= H.r_store
if(hud_version != HUD_STYLE_NOHUD)
for(var/obj/item/I in H.held_items)
I.screen_loc = ui_hand_position(H.get_held_index_of_item(I))
screenmob.client.screen += I
else
for(var/obj/item/I in H.held_items)
I.screen_loc = null
screenmob.client.screen -= I
/mob/living/carbon/human/verb/toggle_hotkey_verbs()
set category = "OOC"
set name = "Toggle hotkey buttons"
set desc = "This disables or enables the user interface buttons which can be used with hotkeys."
if(hud_used.hotkey_ui_hidden)
client.screen += hud_used.hotkeybuttons
hud_used.hotkey_ui_hidden = 0
else
client.screen -= hud_used.hotkeybuttons
hud_used.hotkey_ui_hidden = 1
+3 -4
View File
@@ -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.
+1 -1
View File
@@ -28,7 +28,7 @@
if(sharpness)
to_chat(user, "<span class='notice'>You begin to butcher [src]...</span>")
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)
+2 -2
View File
@@ -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
return 0
+1 -1
View File
@@ -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
File diff suppressed because it is too large Load Diff
+6
View File
@@ -52,6 +52,12 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
/datum/controller/global_vars/Initialize()
gvars_datum_init_order = list()
gvars_datum_protected_varlist = list("gvars_datum_protected_varlist")
//See https://github.com/tgstation/tgstation/issues/26954
for(var/I in typesof(/datum/controller/global_vars/proc))
var/CLEANBOT_RETURNS = "[I]"
pass(CLEANBOT_RETURNS)
for(var/I in vars - gvars_datum_in_built_vars)
var/start_tick = world.time
call(src, "InitGlobal[I]")()
+67 -49
View File
@@ -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, "<span class='boldannounce'>[msg]</span>")
to_chat(GLOB.admins, "<span class='boldannounce'>[msg]</span>")
log_world(msg)
if (istype(Master.subsystems))
@@ -176,6 +176,8 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
to_chat(world, "<span class='boldannounce'>[msg]</span>")
log_world(msg)
SetRunLevel(1)
// Sort subsystems by display setting for easy access.
sortTim(subsystems, /proc/cmp_subsystem_display)
// Set world options.
@@ -187,16 +189,15 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
// Loop.
Master.StartProcessing(0)
// Notify the MC that the round has started.
/datum/controller/master/proc/RoundStart()
local_round_started = TRUE
var/timer = world.time
for (var/datum/controller/subsystem/SS in subsystems)
if (SS.flags & SS_FIRE_IN_LOBBY || SS.flags & SS_TICKER)
continue //already firing
// Stagger subsystems.
timer += world.tick_lag * rand(1, 5)
SS.next_fire = timer
/datum/controller/master/proc/SetRunLevel(new_runlevel)
var/old_runlevel = current_runlevel
if(isnull(old_runlevel))
old_runlevel = "NULL"
testing("MC: Runlevel changed from [old_runlevel] to [new_runlevel]")
current_runlevel = log(2, new_runlevel) + 1
if(current_runlevel < 1)
CRASH("Attempted to set invalid runlevel: [new_runlevel]")
// Starts the mc, and sticks around to restart it if the loop ever ends.
/datum/controller/master/proc/StartProcessing(delay)
@@ -221,12 +222,9 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
//Prep the loop (most of this is because we want MC restarts to reset as much state as we can, and because
// local vars rock
// Schedule the first run of the Subsystems.
local_round_started = world.has_round_started()
//all this shit is here so that flag edits can be refreshed by restarting the MC. (and for speed)
var/list/tickersubsystems = list()
var/list/normalsubsystems = list()
var/list/lobbysubsystems = list()
var/list/runlevel_sorted_subsystems = list(list()) //ensure we always have at least one runlevel
var/timer = world.time
for (var/thing in subsystems)
var/datum/controller/subsystem/SS = thing
@@ -241,25 +239,29 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
timer += world.tick_lag * rand(1, 5)
SS.next_fire = timer
continue
if (SS.flags & SS_FIRE_IN_LOBBY)
lobbysubsystems += SS
timer += world.tick_lag * rand(1, 5)
SS.next_fire = timer
else if (local_round_started)
timer += world.tick_lag * rand(1, 5)
SS.next_fire = timer
normalsubsystems += SS
var/ss_runlevels = SS.runlevels
var/added_to_any = FALSE
for(var/I in 1 to GLOB.bitflags.len)
if(ss_runlevels & GLOB.bitflags[I])
while(runlevel_sorted_subsystems.len < I)
runlevel_sorted_subsystems += list(list())
runlevel_sorted_subsystems[I] += SS
added_to_any = TRUE
if(!added_to_any)
WARNING("[SS.name] subsystem is not SS_NO_FIRE but also does not have any runlevels set!")
queue_head = null
queue_tail = null
//these sort by lower priorities first to reduce the number of loops needed to add subsequent SS's to the queue
//(higher subsystems will be sooner in the queue, adding them later in the loop means we don't have to loop thru them next queue add)
sortTim(tickersubsystems, /proc/cmp_subsystem_priority)
sortTim(normalsubsystems, /proc/cmp_subsystem_priority)
sortTim(lobbysubsystems, /proc/cmp_subsystem_priority)
for(var/I in runlevel_sorted_subsystems)
sortTim(runlevel_sorted_subsystems, /proc/cmp_subsystem_priority)
I += tickersubsystems
normalsubsystems += tickersubsystems
lobbysubsystems += tickersubsystems
var/cached_runlevel = current_runlevel
var/list/current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel]
init_timeofday = REALTIMEOFDAY
init_time = world.time
@@ -280,7 +282,7 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
// because sleeps are processed in the order received, so longer sleeps are more likely to run first
if (world.tick_usage > TICK_LIMIT_MC)
sleep_delta += 2
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING - (TICK_LIMIT_RUNNING * 0.5)
GLOB.CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING * 0.5
sleep(world.tick_lag * (processing + sleep_delta))
continue
@@ -296,14 +298,23 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
if (!Failsafe || (Failsafe.processing_interval > 0 && (Failsafe.lasttick+(Failsafe.processing_interval*5)) < world.time))
new/datum/controller/failsafe() // (re)Start the failsafe.
if (!queue_head || !(iteration % 3))
if (local_round_started)
subsystems_to_check = normalsubsystems
else
subsystems_to_check = lobbysubsystems
var/checking_runlevel = current_runlevel
if(cached_runlevel != checking_runlevel)
//resechedule subsystems
cached_runlevel = checking_runlevel
current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel]
var/stagger = world.time
for(var/I in current_runlevel_subsystems)
var/datum/controller/subsystem/SS = I
if(SS.next_fire <= world.time)
stagger += world.tick_lag * rand(1, 5)
SS.next_fire = stagger
subsystems_to_check = current_runlevel_subsystems
else
subsystems_to_check = tickersubsystems
if (CheckQueue(subsystems_to_check) <= 0)
if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems))
if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems))
log_world("MC: SoftReset() failed, crashing")
return
if (!error_level)
@@ -315,7 +326,7 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
if (queue_head)
if (RunQueue() <= 0)
if (!SoftReset(tickersubsystems, normalsubsystems, lobbysubsystems))
if (!SoftReset(tickersubsystems, runlevel_sorted_subsystems))
log_world("MC: SoftReset() failed, crashing")
return
if (!error_level)
@@ -421,26 +432,31 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
else
tick_precentage = tick_remaining
GLOB.CURRENT_TICKLIMIT = world.tick_usage + tick_precentage
tick_precentage = max(tick_precentage*0.5, tick_precentage-queue_node.tick_overrun)
GLOB.CURRENT_TICKLIMIT = round(world.tick_usage + tick_precentage)
if (!(queue_node_flags & SS_TICKER))
ran_non_ticker = TRUE
ran = TRUE
tick_usage = world.tick_usage
queue_node_paused = (queue_node.state == SS_PAUSED || queue_node.state == SS_PAUSING)
last_type_processed = queue_node
queue_node.state = SS_RUNNING
tick_usage = world.tick_usage
var/state = queue_node.ignite(queue_node_paused)
tick_usage = world.tick_usage - tick_usage
if (state == SS_RUNNING)
state = SS_IDLE
current_tick_budget -= queue_node_priority
tick_usage = world.tick_usage - tick_usage
if (tick_usage < 0)
tick_usage = 0
queue_node.tick_overrun = max(0, MC_AVG_FAST_UP_SLOW_DOWN(queue_node.tick_overrun, tick_usage-tick_precentage))
queue_node.state = state
if (state == SS_PAUSED)
@@ -467,13 +483,13 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
queue_node.times_fired++
if (queue_node_flags & SS_TICKER)
queue_node.next_fire = world.time + (world.tick_lag * queue_node.wait)
queue_node.next_fire = world.time + (world.tick_lag * (queue_node.wait + (queue_node.tick_overrun/100)))
else if (queue_node_flags & SS_POST_FIRE_TIMING)
queue_node.next_fire = world.time + queue_node.wait
queue_node.next_fire = world.time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100))
else if (queue_node_flags & SS_KEEP_TIMING)
queue_node.next_fire += queue_node.wait
else
queue_node.next_fire = queue_node.queued_time + queue_node.wait
queue_node.next_fire = queue_node.queued_time + queue_node.wait + (world.tick_lag * (queue_node.tick_overrun/100))
queue_node.queued_time = 0
@@ -486,13 +502,15 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
//resets the queue, and all subsystems, while filtering out the subsystem lists
// called if any mc's queue procs runtime or exit improperly.
/datum/controller/master/proc/SoftReset(list/ticker_SS, list/normal_SS, list/lobby_SS)
/datum/controller/master/proc/SoftReset(list/ticker_SS, list/runlevel_SS)
. = 0
log_world("MC: SoftReset called, resetting MC queue state.")
if (!istype(subsystems) || !istype(ticker_SS) || !istype(normal_SS) || !istype(lobby_SS))
log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[normal_SS]' '[lobby_SS]' Crashing!")
if (!istype(subsystems) || !istype(ticker_SS) || !istype(runlevel_SS))
log_world("MC: SoftReset: Bad list contents: '[subsystems]' '[ticker_SS]' '[runlevel_SS]'")
return
var/subsystemstocheck = subsystems + ticker_SS + normal_SS + lobby_SS
var/subsystemstocheck = subsystems + ticker_SS
for(var/I in runlevel_SS)
subsystemstocheck |= I
for (var/thing in subsystemstocheck)
var/datum/controller/subsystem/SS = thing
@@ -500,8 +518,8 @@ GLOBAL_VAR_INIT(CURRENT_TICKLIMIT, TICK_LIMIT_RUNNING)
//list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents
subsystems -= list(SS)
ticker_SS -= list(SS)
normal_SS -= list(SS)
lobby_SS -= list(SS)
for(var/I in runlevel_SS)
I -= list(SS)
log_world("MC: SoftReset: Found bad entry in subsystem list, '[SS]'")
continue
if (SS.queue_next && !istype(SS.queue_next))
+4 -1
View File
@@ -17,6 +17,7 @@
var/next_fire = 0 //scheduled world.time for next fire()
var/cost = 0 //average time to execute
var/tick_usage = 0 //average tick usage
var/tick_overrun = 0 //average tick overrun
var/state = SS_IDLE //tracks the current state of the ss, running, paused, etc.
var/paused_ticks = 0 //ticks this ss is taking to run right now.
var/paused_tick_usage //total tick_usage of all of our runs while pausing this run
@@ -28,6 +29,8 @@
var/datum/controller/subsystem/queue_next
var/datum/controller/subsystem/queue_prev
var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire
var/static/failure_strikes = 0 //How many times we suspect this subsystem has crashed the MC, 3 strikes and you're out!
//Do not override
@@ -168,7 +171,7 @@
if(can_fire && !(SS_NO_FIRE in flags))
msg = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]\t[msg]"
msg = "[round(cost,1)]ms|[round(tick_usage,1)]%([round(tick_overrun,1)]%)|[round(ticks,0.1)]\t[msg]"
else
msg = "OFFLINE\t[msg]"
+1
View File
@@ -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()
+2 -1
View File
@@ -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()
+1 -1
View File
@@ -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
+1
View File
@@ -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()
+2 -13
View File
@@ -42,6 +42,7 @@ SUBSYSTEM_DEF(blackbox)
msg_cargo = SSblackbox.msg_cargo
msg_other = SSblackbox.msg_other
feedback = SSblackbox.feedback
//no touchie
@@ -84,25 +85,13 @@ SUBSYSTEM_DEF(blackbox)
if (!SSdbcore.Connect())
return
var/round_id
var/datum/DBQuery/query_feedback_max_id = SSdbcore.NewQuery("SELECT MAX(round_id) AS round_id FROM [format_table_name("feedback")]")
if(!query_feedback_max_id.Execute())
return
while (query_feedback_max_id.NextRow())
round_id = query_feedback_max_id.item[1]
if (!isnum(round_id))
round_id = text2num(round_id)
round_id++
var/sqlrowlist = ""
for (var/datum/feedback_variable/FV in feedback)
if (sqlrowlist != "")
sqlrowlist += ", " //a comma (,) at the start of the first row to insert will trigger a SQL error
sqlrowlist += "(null, Now(), [round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")"
sqlrowlist += "(null, Now(), [GLOB.round_id], \"[sanitizeSQL(FV.get_variable())]\", [FV.get_value()], \"[sanitizeSQL(FV.get_details())]\")"
if (sqlrowlist == "")
return
+1
View File
@@ -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()
+1
View File
@@ -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
@@ -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()
+3 -2
View File
@@ -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()
+1
View File
@@ -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()
+1 -1
View File
@@ -308,7 +308,6 @@ SUBSYSTEM_DEF(job)
Debug("DO non-human failed, Player: [player], Job:[job.title]")
continue
// If the player wants that job on this level, then try give it to him.
if(player.client.prefs.GetJobDepartment(job, level) & job.flag)
@@ -319,6 +318,7 @@ SUBSYSTEM_DEF(job)
unassigned -= player
break
// Hand out random jobs to the people who didn't get any in the last check
// Also makes sure that they got their preference correct
for(var/mob/dead/new_player/player in unassigned)
+18
View File
@@ -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 ..()
+2 -10
View File
@@ -36,18 +36,10 @@ SUBSYSTEM_DEF(lighting)
for (i in 1 to GLOB.lighting_update_lights.len)
var/datum/light_source/L = GLOB.lighting_update_lights[i]
if (L.check() || QDELETED(L) || L.force_update)
L.remove_lum()
if (!QDELETED(L))
L.apply_lum()
L.update_corners()
else if (L.vis_update) //We smartly update only tiles that became (in) visible to use.
L.smart_vis_update()
L.needs_update = LIGHTING_NO_UPDATE
L.vis_update = FALSE
L.force_update = FALSE
L.needs_update = FALSE
if(init_tick_checks)
CHECK_TICK
else if (MC_TICK_CHECK)
+1
View File
@@ -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()
+1
View File
@@ -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()
+1 -1
View File
@@ -150,7 +150,7 @@ SUBSYSTEM_DEF(pai)
if(!(ROLE_PAI in G.client.prefs.be_special))
continue
//G << 'sound/misc/server-ready.ogg' //Alerting them to their consideration
to_chat(G, "<span class='ghostalert'>Someone is requesting a pAI personality! Use the pAI button to submit yourself as one.</span>")
to_chat(G, "<span class='ghostalert'>[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.</span>")
addtimer(CALLBACK(src, .proc/spam_again), spam_delay)
var/list/available = list()
for(var/datum/paiCandidate/c in SSpai.candidates)
+2 -1
View File
@@ -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)
+14 -8
View File
@@ -9,7 +9,6 @@ SUBSYSTEM_DEF(persistence)
var/list/obj/structure/chisel_message/chisel_messages = list()
var/list/saved_messages = list()
var/savefile/chisel_messages_sav
var/savefile/trophy_sav
var/list/saved_trophies = list()
@@ -75,14 +74,14 @@ SUBSYSTEM_DEF(persistence)
break //Who's been duping the bird?!
/datum/controller/subsystem/persistence/proc/LoadChiselMessages()
chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav")
var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav")
var/saved_json
chisel_messages_sav[SSmapping.config.map_name] >> saved_json
if(!saved_json)
return
var/saved_messages = json_decode(saved_json)
var/list/saved_messages = json_decode(saved_json)
for(var/item in saved_messages)
if(!islist(item))
@@ -104,16 +103,19 @@ SUBSYSTEM_DEF(persistence)
var/obj/structure/chisel_message/M = new(T)
M.unpack(item)
if(!M.loc)
M.persists = FALSE
qdel(M)
if(!QDELETED(M))
M.unpack(item)
log_world("Loaded [saved_messages.len] engraved messages on map [SSmapping.config.map_name]")
/datum/controller/subsystem/persistence/proc/LoadTrophies()
trophy_sav = new /savefile("data/npc_saves/TrophyItems.sav")
var/saved_json
trophy_sav >> saved_json
if(!saved_json)
return
var/decoded_json = json_decode(saved_json)
if(!islist(decoded_json))
@@ -172,9 +174,13 @@ SUBSYSTEM_DEF(persistence)
secret_satchels[SSmapping.config.map_name] << old_secret_satchels
/datum/controller/subsystem/persistence/proc/CollectChiselMessages()
var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav")
for(var/obj/structure/chisel_message/M in chisel_messages)
saved_messages += list(M.pack())
log_world("Saved [saved_messages.len] engraved messages on map [SSmapping.config.map_name]")
chisel_messages_sav[SSmapping.config.map_name] << json_encode(saved_messages)
/datum/controller/subsystem/persistence/proc/SaveChiselMessage(obj/structure/chisel_message/M)
@@ -190,4 +196,4 @@ SUBSYSTEM_DEF(persistence)
data["path"] = T.showpiece.type
data["message"] = T.trophy_message
data["placer_key"] = T.placer_key
saved_trophies += list(data)
saved_trophies += list(data)
@@ -5,7 +5,7 @@ PROCESSING_SUBSYSTEM_DEF(flightpacks)
stat_tag = "FM"
flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING
var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL
var/flightsuit_processing = FLIGHTSUIT_PROCESSING_NONE
/datum/controller/subsystem/processing/flightpacks/Initialize()
sync_flightsuit_processing()
@@ -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
+2 -1
View File
@@ -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)
+12 -1
View File
@@ -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
+1
View File
@@ -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()
+2 -1
View File
@@ -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.
+1
View File
@@ -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()
+8 -5
View File
@@ -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, "<span class='boldannounce'>Starting game...</span>")
@@ -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, "<font color='blue'>and...</font>")
@@ -625,8 +628,8 @@ SUBSYSTEM_DEF(ticker)
if(selected_tip)
m = selected_tip
else
var/list/randomtips = world.file2list("config/tips.txt")
var/list/memetips = world.file2list("config/sillytips.txt")
var/list/randomtips = world.file2list("strings/tips.txt")
var/list/memetips = world.file2list("strings/sillytips.txt")
if(randomtips.len && prob(95))
m = pick(randomtips)
else if(memetips.len)
+2 -1
View File
@@ -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
+1 -1
View File
@@ -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()
+3 -1
View File
@@ -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
+1
View File
@@ -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)
+4 -3
View File
@@ -482,6 +482,7 @@
/datum/action/language_menu/Trigger()
if(!..())
return FALSE
if(isliving(owner))
var/mob/living/L = owner
L.open_language_menu(usr)
if(ismob(owner))
var/mob/M = owner
var/datum/language_holder/H = M.get_language_holder()
H.open_language_menu(usr)
+1 -1
View File
@@ -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)

Some files were not shown because too many files have changed in this diff Show More