Overhauls and 2/28 sync (#244)

* map tweaks/shuttle engines

* helpers and defines

* global/onclick

* controllers and datums

* mapping

* game folder

* some other stuff

* some modules

* modules that aren't mobs

* some mob stuff

* new player stuff

* mob living

* silicon stuff

* simple animal things

* carbon/ayylmao

* update_icons

* carbon/human

* sounds and tools

* icons and stuff

* hippie grinder changes + tgui

* kitchen.dmi

* compile issues fixed

* mapfix

* Mapfixes 2.0

* mapedit2.0

* mapmerger pls

* Revert "mapedit2.0"

This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481.

* clean up vore folder + 2 hotfixes

* admin ticket refinement

* Blob tweaks and LAZYADD

* LAZYADD IS LAZY

* Magic strings purged

* DEFINES NEED HIGHER PRIORITIES

* Only a sleepless idiot deals in absolute TRUE|FALSE

* u h g

* progress bar fix

* reverts ticket logs

* there's always that one guy

* fixes and stuff

* 2/27 fixes

* game folder stuff

* stats

* some modules again

* clothing stuff

gets vg clothing out of the main files

* everything not mobs again

* mob stuff

* maps, tgui, sql stuff

* icons

* additional fixes and compile errors

* don't need this anymore

* Oh right this isn't needed anymore

* maint bar re-added

* that doesn't need to be here

* stupid events

* wtfeven

* probably makes Travis happy

* don't care to fix the grinder atm

* fixes vending sprites, changes turret

* lethal, not lethals

* overylays are finicky creatures

* lazy fix for bleeding edgy (#252)

* map tweaks/shuttle engines

* helpers and defines

* global/onclick

* controllers and datums

* mapping

* game folder

* some other stuff

* some modules

* modules that aren't mobs

* some mob stuff

* new player stuff

* mob living

* silicon stuff

* simple animal things

* carbon/ayylmao

* update_icons

* carbon/human

* sounds and tools

* icons and stuff

* hippie grinder changes + tgui

* kitchen.dmi

* compile issues fixed

* mapfix

* Mapfixes 2.0

* mapedit2.0

* mapmerger pls

* Revert "mapedit2.0"

This reverts commit 74139a3cacea10df7aafca06c0a10bd3daf3a481.

* clean up vore folder + 2 hotfixes

* admin ticket refinement

* Blob tweaks and LAZYADD

* LAZYADD IS LAZY

* Magic strings purged

* DEFINES NEED HIGHER PRIORITIES

* Only a sleepless idiot deals in absolute TRUE|FALSE

* u h g

* progress bar fix

* reverts ticket logs

* there's always that one guy

* fixes and stuff

* 2/27 fixes

* game folder stuff

* stats

* some modules again

* clothing stuff

gets vg clothing out of the main files

* everything not mobs again

* mob stuff

* maps, tgui, sql stuff

* icons

* additional fixes and compile errors

* don't need this anymore

* Oh right this isn't needed anymore

* maint bar re-added

* that doesn't need to be here

* stupid events

* wtfeven

* probably makes Travis happy

* don't care to fix the grinder atm

* fixes vending sprites, changes turret

* lethal, not lethals

* overylays are finicky creatures
This commit is contained in:
Poojawa
2017-02-28 09:30:49 -06:00
committed by GitHub
parent 93782cf716
commit 0bca862419
544 changed files with 309981 additions and 81206 deletions
+4 -1
View File
@@ -138,12 +138,15 @@ First, read the comments in this byond thread, starting here:http://www.byond.co
There are two key points here:
1) Defining a list in the type definition incurs a hidden proc call - init, if you must define a list at startup, do so in New() and avoid the overhead of a second call (init() and then new())
1) Defining a list in the type definition incurs a hidden proc call - init, if you must define a list at startup, do so in New()/Initialize and avoid the overhead of a second call (init() and then new())
2)Offsets list creation overhead to the point where the list is actually required (which for many objects, may be never at all).
Remember, this tradeoff makes sense in many cases but not all, you should think carefully about your implementation before deciding if this is an appropriate thing to do
###Prefer `Initialize` over `New` for atoms
Our game controller is pretty good at handling long operations and lag. But, it can't control what happens when the map is loaded, which calls `New` for all atoms on the map. If you're creating a new atom, use the `Initialize` proc to do what you would normally do in `New`. This cuts down on the number of proc calls needed when the world is loaded. See here for details on `Initialize`: https://github.com/tgstation/tgstation/blob/master/code/game/atoms.dm#L49
###No magic numbers or strings
Make these #defines with a name that more clearly states what it's for.
+10
View File
@@ -1,3 +1,13 @@
19 February 2017, by Jordie0608
Optimised and indexed significant portions of the schema.
See the file 'optimisations_2017-02-19.sql' for instructions on how to apply these changes to your database.
Remember to add a prefix to the table name if you use them
----------------------------------------------------
30 January 2017, by Lzimann
Modified table 'death', adding the columns 'mapname' and 'server'.
+207
View File
@@ -0,0 +1,207 @@
/*
It is recommended you do not perfom any of these queries while your server is live as they will lock the tables during execution.
Backup your database before starting; Breaking errors may occur when old data is not be compatible with new column formats.
i.e. A field that is null or empty due to rows existing before the column was added, data corruption or incorrect inputs will prevent altering the column to be NOT NULL.
To account where this is likely to occur, these queries check if fields have valid data and if not will replace invalid data with 0.
Some fields may be out of range for new column lengths, this will also cause a breaking error.
For instance `death`.`bruteloss` is now SMALLINT and won't accept any values over 65535.
Data in this table can thus be truncated using a query such as:
UPDATE `[database]`.`[table]` SET `[column]` = LEAST(`[column]`, [max column size])
To truncate a text field you would have to use SUBSTRING(), however I don't suggest you truncate any text fields.
If you wish to instead preserve this data you will need to modify the schema and queries to accomodate.
Take note some columns have been renamed, removed or changed type. Any services relying on these columns will have to be updated per changes.
----------------------------------------------------*/
START TRANSACTION;
ALTER TABLE `feedback`.`ban`
DROP COLUMN `rounds`
, CHANGE COLUMN `bantype` `bantype` ENUM('PERMABAN', 'TEMPBAN', 'JOB_PERMABAN', 'JOB_TEMPBAN', 'ADMIN_PERMABAN', 'ADMIN_TEMPBAN') NOT NULL
, CHANGE COLUMN `reason` `reason` VARCHAR(2048) NOT NULL
, CHANGE COLUMN `who` `who` VARCHAR(2048) NOT NULL
, CHANGE COLUMN `adminwho` `adminwho` VARCHAR(2048) NOT NULL
, CHANGE COLUMN `unbanned` `unbanned` TINYINT UNSIGNED NULL DEFAULT NULL
, ADD COLUMN `server_ip` INT UNSIGNED NOT NULL AFTER `serverip`
, ADD COLUMN `server_port` SMALLINT UNSIGNED NOT NULL AFTER `server_ip`
, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`
, ADD COLUMN `a_ipTEMP` INT UNSIGNED NOT NULL AFTER `a_ip`
, ADD COLUMN `unbanned_ipTEMP` INT UNSIGNED NULL DEFAULT NULL AFTER `unbanned_ip`;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`ban`
SET `server_ip` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`serverip`, ':', 1)), ''), INET_ATON('0.0.0.0'))
, `server_port` = IF(`serverip` LIKE '%:_%', CAST(SUBSTRING_INDEX(`serverip`, ':', -1) AS UNSIGNED), '0')
, `ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`ip`, ':', 1)), ''), INET_ATON('0.0.0.0'))
, `a_ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`a_ip`, ':', 1)), ''), INET_ATON('0.0.0.0'))
, `unbanned_ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`unbanned_ip`, ':', 1)), ''), INET_ATON('0.0.0.0'));
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`ban`
DROP COLUMN `unbanned_ip`
, DROP COLUMN `a_ip`
, DROP COLUMN `ip`
, DROP COLUMN `serverip`
, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL
, CHANGE COLUMN `a_ipTEMP` `a_ip` INT(10) UNSIGNED NOT NULL
, CHANGE COLUMN `unbanned_ipTEMP` `unbanned_ip` INT(10) UNSIGNED NULL DEFAULT NULL;
COMMIT;
START TRANSACTION;
ALTER TABLE `feedback`.`connection_log`
ADD COLUMN `server_ip` INT UNSIGNED NOT NULL AFTER `serverip`
, ADD COLUMN `server_port` SMALLINT UNSIGNED NOT NULL AFTER `server_ip`
, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`connection_log`
SET `server_ip` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`serverip`, ':', 1)), ''), INET_ATON('0.0.0.0'))
, `server_port` = IF(`serverip` LIKE '%:_%', CAST(SUBSTRING_INDEX(`serverip`, ':', -1) AS UNSIGNED), '0')
, `ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`ip`, ':', 1)), ''), INET_ATON('0.0.0.0'));
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`connection_log`
DROP COLUMN `ip`
, DROP COLUMN `serverip`
, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL;
COMMIT;
START TRANSACTION;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`death`
SET `bruteloss` = LEAST(`bruteloss`, 65535)
, `brainloss` = LEAST(`brainloss`, 65535)
, `fireloss` = LEAST(`fireloss`, 65535)
, `oxyloss` = LEAST(`oxyloss`, 65535);
ALTER TABLE `feedback`.`death`
CHANGE COLUMN `pod` `pod` VARCHAR(50) NOT NULL
, CHANGE COLUMN `coord` `coord` VARCHAR(32) NOT NULL
, CHANGE COLUMN `mapname` `mapname` VARCHAR(32) NOT NULL
, CHANGE COLUMN `job` `job` VARCHAR(32) NOT NULL
, CHANGE COLUMN `special` `special` VARCHAR(32) NULL DEFAULT NULL
, CHANGE COLUMN `name` `name` VARCHAR(96) NOT NULL
, CHANGE COLUMN `byondkey` `byondkey` VARCHAR(32) NOT NULL
, CHANGE COLUMN `laname` `laname` VARCHAR(96) NULL DEFAULT NULL
, CHANGE COLUMN `lakey` `lakey` VARCHAR(32) NULL DEFAULT NULL
, CHANGE COLUMN `gender` `gender` ENUM('neuter', 'male', 'female', 'plural') NOT NULL
, CHANGE COLUMN `bruteloss` `bruteloss` SMALLINT UNSIGNED NOT NULL
, CHANGE COLUMN `brainloss` `brainloss` SMALLINT UNSIGNED NOT NULL
, CHANGE COLUMN `fireloss` `fireloss` SMALLINT UNSIGNED NOT NULL
, CHANGE COLUMN `oxyloss` `oxyloss` SMALLINT UNSIGNED NOT NULL
, ADD COLUMN `server_ip` INT UNSIGNED NOT NULL AFTER `server`
, ADD COLUMN `server_port` SMALLINT UNSIGNED NOT NULL AFTER `server_ip`;
UPDATE `feedback`.`death`
SET `server_ip` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`server`, ':', 1)), ''), INET_ATON('0.0.0.0'))
, `server_port` = IF(`server` LIKE '%:_%', CAST(SUBSTRING_INDEX(`server`, ':', -1) AS UNSIGNED), '0');
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`death`
DROP COLUMN `server`;
COMMIT;
ALTER TABLE `feedback`.`library`
CHANGE COLUMN `category` `category` ENUM('Any', 'Fiction', 'Non-Fiction', 'Adult', 'Reference', 'Religion') NOT NULL
, CHANGE COLUMN `ckey` `ckey` VARCHAR(32) NOT NULL DEFAULT 'LEGACY'
, CHANGE COLUMN `datetime` `datetime` DATETIME NOT NULL
, CHANGE COLUMN `deleted` `deleted` TINYINT(1) UNSIGNED NULL DEFAULT NULL;
ALTER TABLE `feedback`.`messages`
CHANGE COLUMN `type` `type` ENUM('memo', 'message', 'message sent', 'note', 'watchlist entry') NOT NULL
, CHANGE COLUMN `text` `text` VARCHAR(2048) NOT NULL
, CHANGE COLUMN `secret` `secret` TINYINT(1) UNSIGNED NOT NULL;
START TRANSACTION;
ALTER TABLE `feedback`.`player`
ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`player`
SET `ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`ip`, ':', 1)), ''), INET_ATON('0.0.0.0'));
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`player`
DROP COLUMN `ip`
, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL;
COMMIT;
START TRANSACTION;
ALTER TABLE `feedback`.`poll_question`
CHANGE COLUMN `polltype` `polltype` ENUM('OPTION', 'TEXT', 'NUMVAL', 'MULTICHOICE', 'IRV') NOT NULL
, CHANGE COLUMN `adminonly` `adminonly` TINYINT(1) UNSIGNED NOT NULL
, CHANGE COLUMN `createdby_ckey` `createdby_ckey` VARCHAR(32) NULL DEFAULT NULL
, CHANGE COLUMN `dontshow` `dontshow` TINYINT(1) UNSIGNED NOT NULL
, ADD COLUMN `createdby_ipTEMP` INT UNSIGNED NOT NULL AFTER `createdby_ip`
, DROP COLUMN `for_trialmin`;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`poll_question`
SET `createdby_ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`createdby_ip`, ':', 1)), ''), INET_ATON('0.0.0.0'));
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`poll_question`
DROP COLUMN `createdby_ip`
, CHANGE COLUMN `createdby_ipTEMP` `createdby_ip` INT(10) UNSIGNED NOT NULL;
COMMIT;
START TRANSACTION;
ALTER TABLE `feedback`.`poll_textreply`
CHANGE COLUMN `replytext` `replytext` VARCHAR(2048) NOT NULL
, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`poll_textreply`
SET `ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`ip`, ':', 1)), ''), INET_ATON('0.0.0.0'));
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`poll_textreply`
DROP COLUMN `ip`
, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL;
COMMIT;
START TRANSACTION;
ALTER TABLE `feedback`.`poll_vote`
CHANGE COLUMN `ckey` `ckey` VARCHAR(32) NOT NULL
, ADD COLUMN `ipTEMP` INT UNSIGNED NOT NULL AFTER `ip`;
SET SQL_SAFE_UPDATES = 0;
UPDATE `feedback`.`poll_vote`
SET `ipTEMP` = COALESCE(NULLIF(INET_ATON(SUBSTRING_INDEX(`ip`, ':', 1)), ''), INET_ATON('0.0.0.0'));
SET SQL_SAFE_UPDATES = 1;
ALTER TABLE `feedback`.`poll_vote`
DROP COLUMN `ip`
, CHANGE COLUMN `ipTEMP` `ip` INT(10) UNSIGNED NOT NULL;
COMMIT;
/*----------------------------------------------------
These queries are to be run after the above.
These indexes are designed with only the codebase queries in mind.
You may find it helpful to modify or create your own indexes if you utilise additional queries for other services.
----------------------------------------------------*/
ALTER TABLE `feedback`.`ban`
ADD INDEX `idx_ban_checkban` (`ckey` ASC, `bantype` ASC, `expiration_time` ASC, `unbanned` ASC, `job` ASC)
, ADD INDEX `idx_ban_isbanned` (`ckey` ASC, `ip` ASC, `computerid` ASC, `bantype` ASC, `expiration_time` ASC, `unbanned` ASC)
, ADD INDEX `idx_ban_count` (`id` ASC, `a_ckey` ASC, `bantype` ASC, `expiration_time` ASC, `unbanned` ASC);
ALTER TABLE `feedback`.`ipintel`
ADD INDEX `idx_ipintel` (`ip` ASC, `intel` ASC, `date` ASC);
ALTER TABLE `feedback`.`library`
ADD INDEX `idx_lib_id_del` (`id` ASC, `deleted` ASC)
, ADD INDEX `idx_lib_del_title` (`deleted` ASC, `title` ASC)
, ADD INDEX `idx_lib_search` (`deleted` ASC, `author` ASC, `title` ASC, `category` ASC);
ALTER TABLE `feedback`.`messages`
ADD INDEX `idx_msg_ckey_time` (`targetckey` ASC, `timestamp` ASC)
, ADD INDEX `idx_msg_type_ckeys_time` (`type` ASC, `targetckey` ASC, `adminckey` ASC, `timestamp` ASC)
, ADD INDEX `idx_msg_type_ckey_time_odr` (`type` ASC, `targetckey` ASC, `timestamp` ASC);
ALTER TABLE `feedback`.`player`
ADD INDEX `idx_player_cid_ckey` (`computerid` ASC, `ckey` ASC)
, ADD INDEX `idx_player_ip_ckey` (`ip` ASC, `ckey` ASC);
ALTER TABLE `feedback`.`poll_option`
ADD INDEX `idx_pop_pollid` (`pollid` ASC);
ALTER TABLE `feedback`.`poll_question`
ADD INDEX `idx_pquest_question_time_ckey` (`question` ASC, `starttime` ASC, `endtime` ASC, `createdby_ckey` ASC, `createdby_ip` ASC)
, ADD INDEX `idx_pquest_time_admin` (`starttime` ASC, `endtime` ASC, `adminonly` ASC)
, ADD INDEX `idx_pquest_id_time_type_admin` (`id` ASC, `starttime` ASC, `endtime` ASC, `polltype` ASC, `adminonly` ASC);
ALTER TABLE `feedback`.`poll_vote`
ADD INDEX `idx_pvote_pollid_ckey` (`pollid` ASC, `ckey` ASC)
, ADD INDEX `idx_pvote_optionid_ckey` (`optionid` ASC, `ckey` ASC);
ALTER TABLE `feedback`.`poll_textreply`
ADD INDEX `idx_ptext_pollid_ckey` (`pollid` ASC, `ckey` ASC);
+116 -98
View File
@@ -59,18 +59,9 @@ CREATE TABLE `admin_ranks` (
`rank` varchar(40) NOT NULL,
`flags` int(16) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
insert into admin_ranks (rank, flags) values ('Moderator',2);
insert into admin_ranks (rank, flags) values ('Admin Candidate',2);
insert into admin_ranks (rank, flags) values ('Trial Admin',5638);
insert into admin_ranks (rank, flags) values ('Badmin',5727);
insert into admin_ranks (rank, flags) values ('Game Admin',8063);
insert into admin_ranks (rank, flags) values ('Game Master',65535);
insert into admin_ranks (rank, flags) values ('Host',65535);
insert into admin_ranks (rank, flags) values ('Coder',5168);
--
-- Table structure for table `ban`
--
@@ -81,28 +72,31 @@ DROP TABLE IF EXISTS `ban`;
CREATE TABLE `ban` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bantime` datetime NOT NULL,
`serverip` varchar(32) NOT NULL,
`bantype` varchar(32) NOT NULL,
`reason` text NOT NULL,
`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,
`rounds` int(11) DEFAULT NULL,
`expiration_time` datetime NOT NULL,
`ckey` varchar(32) NOT NULL,
`computerid` varchar(32) NOT NULL,
`ip` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`a_ckey` varchar(32) NOT NULL,
`a_computerid` varchar(32) NOT NULL,
`a_ip` varchar(32) NOT NULL,
`who` text NOT NULL,
`adminwho` text NOT NULL,
`a_ip` int(10) unsigned NOT NULL,
`who` varchar(2048) NOT NULL,
`adminwho` varchar(2048) NOT NULL,
`edits` text,
`unbanned` int(2) DEFAULT NULL,
`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` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
`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 */;
@@ -116,9 +110,10 @@ DROP TABLE IF EXISTS `connection_log`;
CREATE TABLE `connection_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime DEFAULT NULL,
`serverip` varchar(45) DEFAULT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`ckey` varchar(45) DEFAULT NULL,
`ip` varchar(18) DEFAULT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@@ -133,23 +128,23 @@ DROP TABLE IF EXISTS `death`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `death` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pod` text NOT NULL COMMENT 'Place of death',
`coord` text NOT NULL COMMENT 'X, Y, Z POD',
`mapname` text NOT NULL,
`server` text NOT NULL,
`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` text NOT NULL,
`special` text NOT NULL,
`name` text NOT NULL,
`byondkey` text NOT NULL,
`laname` text NOT NULL COMMENT 'Last attacker name',
`lakey` text NOT NULL COMMENT 'Last attacker key',
`gender` text NOT NULL,
`bruteloss` int(11) NOT NULL,
`brainloss` int(11) NOT NULL,
`fireloss` int(11) NOT NULL,
`oxyloss` int(11) NOT NULL,
`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,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -172,6 +167,22 @@ CREATE TABLE `feedback` (
) 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`
--
@@ -193,22 +204,49 @@ CREATE TABLE `legacy_population` (
--
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` varchar(45) NOT NULL,
`ckey` varchar(45) DEFAULT 'LEGACY',
`datetime` datetime DEFAULT NULL,
`deleted` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
`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 */;
--
-- Create an index to speed up the libary
-- Table structure for table `messages`
--
CREATE INDEX deleted_idx ON `library` (`deleted`);
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`
@@ -222,11 +260,13 @@ CREATE TABLE `player` (
`ckey` varchar(32) NOT NULL,
`firstseen` datetime NOT NULL,
`lastseen` datetime NOT NULL,
`ip` varchar(18) 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`)
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 */;
@@ -247,7 +287,8 @@ CREATE TABLE `poll_option` (
`descmin` varchar(32) DEFAULT NULL,
`descmid` varchar(32) DEFAULT NULL,
`descmax` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
PRIMARY KEY (`id`),
KEY `idx_pop_pollid` (`pollid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -260,17 +301,19 @@ DROP TABLE IF EXISTS `poll_question`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `poll_question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`polltype` varchar(16) NOT NULL DEFAULT 'OPTION',
`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) DEFAULT '0',
`adminonly` tinyint(1) unsigned NOT NULL,
`multiplechoiceoptions` int(2) DEFAULT NULL,
`createdby_ckey` varchar(45) NULL DEFAULT NULL,
`createdby_ip` varchar(45) NULL DEFAULT NULL,
`for_trialmin` varchar(45) NULL DEFAULT NULL,
`dontshow` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
`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 */;
@@ -286,10 +329,11 @@ CREATE TABLE `poll_textreply` (
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`ckey` varchar(32) NOT NULL,
`ip` varchar(18) NOT NULL,
`replytext` text NOT NULL,
`ip` int(10) unsigned NOT NULL,
`replytext` varchar(2048) NOT NULL,
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
PRIMARY KEY (`id`)
PRIMARY KEY (`id`),
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -305,47 +349,21 @@ CREATE TABLE `poll_vote` (
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`optionid` int(11) NOT NULL,
`ckey` varchar(255) NOT NULL,
`ip` varchar(16) 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`)
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 */;
--
-- 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 UNSIGNED NOT NULL ,
`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL ,
`intel` REAL NOT NULL DEFAULT '0',
PRIMARY KEY ( `ip` )
) ENGINE = INNODB;
/*!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` varchar(32) NOT NULL ,
`targetckey` varchar(32) NOT NULL ,
`adminckey` varchar(32) NOT NULL ,
`text` text NOT NULL ,
`timestamp` datetime NOT NULL ,
`server` varchar(32) NULL ,
`secret` tinyint(1) NULL DEFAULT 1 ,
`lasteditor` varchar(32) NULL ,
`edits` text NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 */;
+120 -96
View File
@@ -34,7 +34,7 @@ CREATE TABLE `SS13_admin` (
-- Table structure for table `SS13_admin_log`
--
DROP TABLE IF EXISTS `SS13_admin_log`;
DROP TABLE IF EXISTS `SS13_dmin_log`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_admin_log` (
@@ -59,18 +59,9 @@ CREATE TABLE `SS13_admin_ranks` (
`rank` varchar(40) NOT NULL,
`flags` int(16) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
insert into SS13_admin_ranks (rank, flags) values ('Moderator',2);
insert into SS13_admin_ranks (rank, flags) values ('Admin Candidate',2);
insert into SS13_admin_ranks (rank, flags) values ('Trial Admin',5638);
insert into SS13_admin_ranks (rank, flags) values ('Badmin',5727);
insert into SS13_admin_ranks (rank, flags) values ('Game Admin',8063);
insert into SS13_admin_ranks (rank, flags) values ('Game Master',65535);
insert into SS13_admin_ranks (rank, flags) values ('Host',65535);
insert into SS13_admin_ranks (rank, flags) values ('Coder',5168);
--
-- Table structure for table `SS13_ban`
--
@@ -81,28 +72,31 @@ DROP TABLE IF EXISTS `SS13_ban`;
CREATE TABLE `SS13_ban` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bantime` datetime NOT NULL,
`serverip` varchar(32) NOT NULL,
`bantype` varchar(32) NOT NULL,
`reason` text NOT NULL,
`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,
`rounds` int(11) DEFAULT NULL,
`expiration_time` datetime NOT NULL,
`ckey` varchar(32) NOT NULL,
`computerid` varchar(32) NOT NULL,
`ip` varchar(32) NOT NULL,
`ip` int(10) unsigned NOT NULL,
`a_ckey` varchar(32) NOT NULL,
`a_computerid` varchar(32) NOT NULL,
`a_ip` varchar(32) NOT NULL,
`who` text NOT NULL,
`adminwho` text NOT NULL,
`a_ip` int(10) unsigned NOT NULL,
`who` varchar(2048) NOT NULL,
`adminwho` varchar(2048) NOT NULL,
`edits` text,
`unbanned` int(2) DEFAULT NULL,
`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` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
`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 */;
@@ -116,9 +110,10 @@ DROP TABLE IF EXISTS `SS13_connection_log`;
CREATE TABLE `SS13_connection_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime DEFAULT NULL,
`serverip` varchar(45) DEFAULT NULL,
`server_ip` int(10) unsigned NOT NULL,
`server_port` smallint(5) unsigned NOT NULL,
`ckey` varchar(45) DEFAULT NULL,
`ip` varchar(18) DEFAULT NULL,
`ip` int(10) unsigned NOT NULL,
`computerid` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
@@ -133,22 +128,23 @@ DROP TABLE IF EXISTS `SS13_death`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_death` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pod` text NOT NULL COMMENT 'Place of death',
`coord` text NOT NULL COMMENT 'X, Y, Z POD',
`mapname` text NOT NULL,
`server` text NOT NULL,
`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` text NOT NULL,
`special` text NOT NULL,
`name` text NOT NULL,
`byondkey` text NOT NULL,
`laname` text NOT NULL COMMENT 'Last attacker name',
`lakey` text NOT NULL COMMENT 'Last attacker key',
`gender` text NOT NULL,
`bruteloss` int(11) NOT NULL,
`brainloss` int(11) NOT NULL,
`fireloss` int(11) NOT NULL,
`oxyloss` int(11) NOT NULL,
`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,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -171,6 +167,22 @@ CREATE TABLE `SS13_feedback` (
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `SS13_ipintel`
--
DROP TABLE IF EXISTS `SS13_ipintel`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_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 `SS13_legacy_population`
--
@@ -192,17 +204,49 @@ CREATE TABLE `SS13_legacy_population` (
--
DROP TABLE IF EXISTS `SS13_library`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_library` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`author` varchar(45) NOT NULL,
`title` varchar(45) NOT NULL,
`content` text NOT NULL,
`category` varchar(45) NOT NULL,
`ckey` varchar(45) DEFAULT 'LEGACY',
`datetime` datetime DEFAULT NULL,
`deleted` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
`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 `SS13_messages`
--
DROP TABLE IF EXISTS `SS13_messages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_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 `SS13_player`
@@ -216,11 +260,13 @@ CREATE TABLE `SS13_player` (
`ckey` varchar(32) NOT NULL,
`firstseen` datetime NOT NULL,
`lastseen` datetime NOT NULL,
`ip` varchar(18) 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`)
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 */;
@@ -241,7 +287,8 @@ CREATE TABLE `SS13_poll_option` (
`descmin` varchar(32) DEFAULT NULL,
`descmid` varchar(32) DEFAULT NULL,
`descmax` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
PRIMARY KEY (`id`),
KEY `idx_pop_pollid` (`pollid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -254,17 +301,19 @@ DROP TABLE IF EXISTS `SS13_poll_question`;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_poll_question` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`polltype` varchar(16) NOT NULL DEFAULT 'OPTION',
`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) DEFAULT '0',
`adminonly` tinyint(1) unsigned NOT NULL,
`multiplechoiceoptions` int(2) DEFAULT NULL,
`createdby_ckey` varchar(45) NULL DEFAULT NULL,
`createdby_ip` varchar(45) NULL DEFAULT NULL,
`for_trialmin` varchar(45) NULL DEFAULT NULL,
`dontshow` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
`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 */;
@@ -280,10 +329,11 @@ CREATE TABLE `SS13_poll_textreply` (
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`ckey` varchar(32) NOT NULL,
`ip` varchar(18) NOT NULL,
`replytext` text NOT NULL,
`ip` int(10) unsigned NOT NULL,
`replytext` varchar(2048) NOT NULL,
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
PRIMARY KEY (`id`)
PRIMARY KEY (`id`),
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -299,47 +349,21 @@ CREATE TABLE `SS13_poll_vote` (
`datetime` datetime NOT NULL,
`pollid` int(11) NOT NULL,
`optionid` int(11) NOT NULL,
`ckey` varchar(255) NOT NULL,
`ip` varchar(16) 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`)
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 */;
--
-- Table structure for table `SS13_ipintel`
--
DROP TABLE IF EXISTS `SS13_ipintel`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_ipintel` (
`ip` INT UNSIGNED NOT NULL ,
`date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL ,
`intel` REAL NOT NULL DEFAULT '0',
PRIMARY KEY ( `ip` )
) ENGINE = INNODB;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `SS13_messages`
--
DROP TABLE IF EXISTS `SS13_messages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_messages` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`type` varchar(32) NOT NULL ,
`targetckey` varchar(32) NOT NULL ,
`adminckey` varchar(32) NOT NULL ,
`text` text NOT NULL ,
`timestamp` datetime NOT NULL ,
`server` varchar(32) NULL ,
`secret` tinyint(1) NULL DEFAULT 1 ,
`lasteditor` varchar(32) NULL ,
`edits` text NULL ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!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 */;
@@ -90,6 +90,7 @@
/obj/item/seeds/glowshroom,
/obj/item/seeds/glowshroom,
/obj/item/weapon/reagent_containers/glass/bucket,
/obj/item/weapon/storage/bag/plants/portaseeder,
/turf/open/floor/engine/cult{
baseturf = /turf/open/floor/plating/lava/smooth
},
@@ -186,7 +186,7 @@
initial_gas_mix = "o2=14;n2=23;TEMP=300"
},
/obj/structure/shuttle/engine/propulsion/burst{
dir = 4
dir = 8
},
/turf/closed/wall/mineral/titanium/interior{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
@@ -22,15 +22,15 @@
/area/lavaland/surface/outdoors)
"f" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 4
dir = 8;
icon_state = "propulsion"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"g" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 4
dir = 8;
icon_state = "propulsion"
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered)
@@ -18,8 +18,8 @@
/area/ruin/unpowered)
"e" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
dir = 4;
icon_state = "propulsion"
},
/turf/template_noop,
/area/ruin/unpowered)
@@ -2,13 +2,13 @@
"ab" = (/turf/open/floor/plating/lava/smooth/lava_land_surface,/area/lavaland/surface/outdoors)
"ac" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"ad" = (/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"ae" = (/obj/structure/closet/secure_closet/bar{req_access = null;req_access_txt = "150"},/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"af" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/syndicake,/obj/item/weapon/reagent_containers/food/snacks/syndicake,/obj/item/weapon/reagent_containers/food/snacks/syndicake,/obj/structure/sign/barsign{pixel_y = 32;req_access = null;req_access_txt = "150"},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"ag" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/salad/validsalad,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"ah" = (/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi';icon_state = "minibar_left";name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"ai" = (/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi';icon_state = "minibar_right";name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"aj" = (/obj/structure/dresser,/obj/structure/mirror{desc = "Mirror mirror on the wall, who is the most robust of them all?";pixel_x = -26},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"ak" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21";layer = 4.1},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"ae" = (/obj/structure/closet/secure_closet/bar{req_access = null; req_access_txt = "150"},/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"af" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/syndicake,/obj/item/weapon/reagent_containers/food/snacks/syndicake,/obj/item/weapon/reagent_containers/food/snacks/syndicake,/obj/structure/sign/barsign{pixel_y = 32; req_access = null; req_access_txt = "150"},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"ag" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/salad/validsalad,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"ah" = (/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_left"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"ai" = (/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_right"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"aj" = (/obj/structure/dresser,/obj/structure/mirror{desc = "Mirror mirror on the wall, who is the most robust of them all?"; pixel_x = -26},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"ak" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"al" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"am" = (/obj/structure/table/wood,/obj/item/weapon/clipboard,/obj/item/toy/figure/syndie,/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"an" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
@@ -16,14 +16,14 @@
"ap" = (/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aq" = (/obj/item/stack/sheet/mineral/plastitanium{amount = 30},/obj/item/stack/rods{amount = 50},/obj/structure/table/reinforced,/turf/open/floor/plasteel/podhatch{dir = 9},/area/ruin/powered/syndicate_lava_base)
"ar" = (/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"as" = (/obj/effect/mob_spawn/human/lavaland_syndicate{tag = "icon-sleeper_s (EAST)";icon_state = "sleeper_s";dir = 4},/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"as" = (/obj/effect/mob_spawn/human/lavaland_syndicate{tag = "icon-sleeper_s (EAST)"; icon_state = "sleeper_s"; dir = 4},/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"at" = (/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"au" = (/obj/effect/mob_spawn/human/lavaland_syndicate{tag = "icon-sleeper_s (WEST)";icon_state = "sleeper_s";dir = 8},/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"av" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"au" = (/obj/effect/mob_spawn/human/lavaland_syndicate{tag = "icon-sleeper_s (WEST)"; icon_state = "sleeper_s"; dir = 8},/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"av" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"aw" = (/obj/item/stack/cable_coil/white,/obj/item/stack/cable_coil/white,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/obj/structure/table/reinforced,/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"ax" = (/obj/structure/table/wood,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"ay" = (/obj/structure/table/wood,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/m10mm,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/obj/item/ammo_box/magazine/sniper_rounds,/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"az" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"az" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"aA" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"aB" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/wood{icon_state = "wood-broken4"},/area/ruin/powered/syndicate_lava_base)
"aC" = (/obj/structure/table/wood,/obj/item/weapon/storage/box/drinkingglasses,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
@@ -31,153 +31,149 @@
"aE" = (/obj/structure/table/wood,/obj/item/weapon/lighter{pixel_y = 3},/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"aF" = (/obj/structure/table/wood,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"aG" = (/obj/structure/extinguisher_cabinet{pixel_x = 26},/turf/open/floor/wood,/area/ruin/powered/syndicate_lava_base)
"aH" = (/obj/effect/mob_spawn/human/lavaland_syndicate/comms{tag = "icon-sleeper_s (EAST)";icon_state = "sleeper_s";dir = 4},/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"aH" = (/obj/effect/mob_spawn/human/lavaland_syndicate/comms{tag = "icon-sleeper_s (EAST)"; icon_state = "sleeper_s"; dir = 4},/turf/open/floor/plasteel/grimy,/area/ruin/powered/syndicate_lava_base)
"aI" = (/obj/structure/sign/nosmoking_2,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"aJ" = (/obj/structure/closet/crate/bin,/obj/item/trash/syndi_cakes,/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"aK" = (/obj/structure/chair/stool/bar,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aL" = (/obj/structure/chair/stool/bar,/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"aM" = (/obj/structure/table/wood,/obj/item/weapon/lipstick/random{pixel_x = 3;pixel_y = 3},/obj/item/weapon/lipstick/random{pixel_x = -3;pixel_y = -3},/obj/item/weapon/lipstick/random,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aM" = (/obj/structure/table/wood,/obj/item/weapon/lipstick/random{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lipstick/random{pixel_x = -3; pixel_y = -3},/obj/item/weapon/lipstick/random,/obj/item/weapon/soap/syndie,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aN" = (/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aO" = (/obj/structure/dresser,/obj/structure/mirror{desc = "Mirror mirror on the wall, who is the most robust of them all?";pixel_x = 26},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aO" = (/obj/structure/dresser,/obj/structure/mirror{desc = "Mirror mirror on the wall, who is the most robust of them all?"; pixel_x = 26},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aP" = (/obj/item/target,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aQ" = (/obj/structure/closet/emcloset{anchored = 1},/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/device/flashlight/seclite,/obj/item/clothing/mask/gas,/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aR" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21";layer = 4.1},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aS" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0;name = "self destruct device"},/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"aT" = (/obj/machinery/door/airlock/hatch{name = "Dormitories";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aU" = (/obj/structure/closet/emcloset,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/device/flashlight/seclite,/obj/item/clothing/mask/gas,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"aV" = (/obj/machinery/door/airlock/hatch{name = "Storage Closet";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aW" = (/obj/machinery/door/airlock/hatch{name = "Restroom";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aX" = (/obj/structure/mirror{desc = "Mirror mirror on the wall, who is the most robust of them all?";pixel_x = 28},/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aR" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aS" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0; name = "self destruct device"},/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"aT" = (/obj/machinery/door/airlock/hatch{name = "Dormitories"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aU" = (/obj/structure/closet/emcloset,/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/device/flashlight/seclite,/obj/item/clothing/mask/gas,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"aV" = (/obj/machinery/door/airlock/hatch{name = "Storage Closet"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aW" = (/obj/machinery/door/airlock/hatch{name = "Restroom"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aX" = (/obj/structure/mirror{desc = "Mirror mirror on the wall, who is the most robust of them all?"; pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aY" = (/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"aZ" = (/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"ba" = (/obj/structure/closet/emcloset{anchored = 1},/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/device/flashlight/seclite,/obj/item/clothing/mask/gas,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"bb" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0;name = "self destruct device"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"aZ" = (/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"ba" = (/obj/structure/closet/emcloset{anchored = 1},/obj/item/weapon/tank/internals/emergency_oxygen/engi,/obj/item/device/flashlight/seclite,/obj/item/clothing/mask/gas,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"bb" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0; name = "self destruct device"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bc" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bd" = (/obj/structure/bookcase/random,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"be" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21";layer = 4.1},/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"be" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"bf" = (/obj/structure/bookcase/random,/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"bg" = (/obj/structure/toilet{tag = "icon-toilet00 (WEST)";icon_state = "toilet00";dir = 8},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bh" = (/obj/machinery/door/airlock/hatch{name = "Lounge";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bg" = (/obj/structure/toilet{tag = "icon-toilet00 (WEST)"; icon_state = "toilet00"; dir = 8},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bh" = (/obj/machinery/door/airlock/hatch{name = "Lounge"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bi" = (/obj/machinery/chem_dispenser,/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bj" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)";icon_state = "podhatch";dir = 1},/area/ruin/powered/syndicate_lava_base)
"bk" = (/obj/machinery/chem_master,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"bl" = (/obj/structure/noticeboard{pixel_y = 32},/obj/machinery/reagentgrinder{desc = "Used to grind things up into raw materials and liquids.";pixel_y = 5},/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bj" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)"; icon_state = "podhatch"; dir = 1},/area/ruin/powered/syndicate_lava_base)
"bk" = (/obj/machinery/chem_master,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"bl" = (/obj/structure/noticeboard{pixel_y = 32},/obj/machinery/reagentgrinder{desc = "Used to grind things up into raw materials and liquids."; pixel_y = 5},/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bm" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/folder/white,/obj/item/weapon/book/manual/wiki/chemistry,/obj/item/weapon/book/manual/wiki/chemistry,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bn" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/syndicate,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bn" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/syringes,/obj/item/weapon/gun/syringe/syndicate,/obj/item/weapon/storage/box/beakers,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bo" = (/turf/open/floor/plasteel/podhatch{dir = 9},/area/ruin/powered/syndicate_lava_base)
"bp" = (/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bq" = (/obj/structure/table/reinforced,/obj/machinery/reagentgrinder{desc = "Used to grind things up into raw materials and liquids.";pixel_y = 5},/obj/structure/noticeboard{pixel_y = 32},/turf/open/floor/plasteel/podhatch/corner,/area/ruin/powered/syndicate_lava_base)
"br" = (/obj/structure/reagent_dispensers/virusfood{pixel_y = 32},/obj/structure/table/reinforced,/obj/item/device/healthanalyzer,/obj/item/stack/sheet/mineral/plasma{amount = 5;layer = 3.1},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bs" = (/obj/structure/extinguisher_cabinet{pixel_x = 0;pixel_y = 32},/obj/machinery/computer/pandemic,/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bt" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/box/syringes,/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bu" = (/obj/structure/bed/roller,/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"bq" = (/obj/structure/table/reinforced,/obj/machinery/reagentgrinder{desc = "Used to grind things up into raw materials and liquids."; pixel_y = 5},/obj/structure/noticeboard{pixel_y = 32},/turf/open/floor/plasteel/podhatch/corner,/area/ruin/powered/syndicate_lava_base)
"br" = (/obj/structure/reagent_dispensers/virusfood{pixel_y = 32},/obj/structure/table/reinforced,/obj/item/device/healthanalyzer,/obj/item/stack/sheet/mineral/plasma{amount = 5; layer = 3.1},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bs" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 32},/obj/machinery/computer/pandemic,/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bt" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/syringes,/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bu" = (/obj/structure/bed/roller,/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"bv" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/ruin/powered/syndicate_lava_base)
"bw" = (/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bx" = (/obj/structure/bed/roller,/turf/open/floor/plasteel/vault{dir = 8},/area/space)
"bx" = (/obj/structure/bed/roller,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"by" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bz" = (/obj/structure/bed/roller,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bA" = (/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bB" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bC" = (/obj/machinery/door/window/brigdoor,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bD" = (/obj/machinery/chem_heater,/obj/structure/extinguisher_cabinet{pixel_x = -26},/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"bE" = (/obj/structure/chair/office/dark{dir = 1},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bF" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"bG" = (/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"bH" = (/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer{pixel_x = 3;pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = 3;pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = 3;pixel_y = 3},/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bI" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/wiki/infections,/obj/item/stack/sheet/mineral/silver{amount = 10},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"bJ" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bK" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen";req_access_txt = "150"},/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"bL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plasteel/vault{dir = 5},/area/space)
"bM" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/ballistic/automatic/c20r/toy/unrestricted,/obj/item/weapon/gun/ballistic/automatic/c20r/toy/unrestricted,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bN" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21";layer = 4.1},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bO" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/suit/toggle/labcoat,/obj/item/clothing/suit/toggle/labcoat,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bP" = (/obj/machinery/smartfridge/chemistry/virology,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"bQ" = (/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bR" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/podhatch{dir = 9},/area/ruin/powered/syndicate_lava_base)
"bS" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)";icon_state = "podhatch";dir = 1},/area/ruin/powered/syndicate_lava_base)
"bT" = (/obj/machinery/chem_heater,/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bU" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"bV" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bW" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen";req_access_txt = "150"},/turf/open/floor/plasteel/black,/area/space)
"bX" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bY" = (/obj/structure/table/reinforced,/obj/item/weapon/folder,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bZ" = (/obj/structure/table/reinforced,/obj/item/weapon/suppressor/specialoffer,/obj/item/weapon/gun/ballistic/automatic/toy/pistol/unrestricted,/obj/item/weapon/gun/ballistic/automatic/toy/pistol/unrestricted,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"ca" = (/obj/machinery/chem_master,/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cb" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cc" = (/obj/machinery/chem_dispenser,/obj/structure/extinguisher_cabinet{pixel_x = 26},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)";icon_state = "podhatch";dir = 4},/area/ruin/powered/syndicate_lava_base)
"cd" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/surgical,/obj/item/clothing/head/bio_hood/general,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"ce" = (/obj/machinery/shower{dir = 4;icon_state = "shower";name = "emergency shower"},/obj/machinery/shower{dir = 8;icon_state = "shower";name = "emergency shower"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cf" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)";icon_state = "podhatch";dir = 1},/area/ruin/powered/syndicate_lava_base)
"cg" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/stack/sheet/mineral/gold{amount = 10},/obj/item/stack/sheet/mineral/uranium{amount = 10},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)";icon_state = "podhatch";dir = 1},/area/ruin/powered/syndicate_lava_base)
"ch" = (/turf/open/floor/plasteel/vault{dir = 8},/area/space)
"ci" = (/obj/structure/bed/roller,/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cj" = (/obj/structure/sign/securearea,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"ck" = (/obj/machinery/door/airlock/hatch{name = "Firing Range";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cl" = (/obj/machinery/door/airlock/hatch{name = "Chemistry Lab";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cm" = (/obj/structure/sign/chemistry,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"cn" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0;name = "self destruct device"},/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"co" = (/obj/structure/sign/biohazard,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"cp" = (/obj/machinery/door/airlock/hatch{name = "Virology Lab";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cq" = (/obj/structure/rack,/obj/item/ammo_box/foambox{pixel_x = -3;pixel_y = 3},/obj/item/ammo_box/foambox,/obj/item/ammo_box/foambox{pixel_x = 3;pixel_y = -3},/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cr" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/turf/open/floor/plasteel/podhatch{dir = 9},/area/ruin/powered/syndicate_lava_base)
"cs" = (/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)";icon_state = "podhatch";dir = 1},/area/ruin/powered/syndicate_lava_base)
"ct" = (/turf/open/floor/plasteel/podhatch/corner{tag = "icon-podhatchcorner (EAST)";icon_state = "podhatchcorner";dir = 4},/area/ruin/powered/syndicate_lava_base)
"cu" = (/turf/open/floor/plasteel/podhatch/corner{tag = "icon-podhatchcorner (WEST)";icon_state = "podhatchcorner";dir = 8},/area/ruin/powered/syndicate_lava_base)
"cv" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21";layer = 4.1},/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/bluecross_2,/turf/open/floor/plating,/area/ruin/powered/syndicate_lava_base)
"cx" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3;pixel_y = 3},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = -3;pixel_y = -3},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"cy" = (/obj/machinery/sleeper/syndie{dir = 8},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cz" = (/obj/structure/closet/crate/secure,/obj/item/target,/obj/item/target,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/clown,/obj/item/target/clown,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"cA" = (/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"cB" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0;name = "self destruct device"},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cC" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cD" = (/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cE" = (/turf/open/floor/plasteel/podhatch/corner{tag = "icon-podhatchcorner (NORTH)";icon_state = "podhatchcorner";dir = 1},/area/ruin/powered/syndicate_lava_base)
"cF" = (/turf/open/floor/plasteel/podhatch/corner,/area/ruin/powered/syndicate_lava_base)
"cG" = (/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)";icon_state = "podhatch";dir = 6},/area/ruin/powered/syndicate_lava_base)
"cH" = (/obj/machinery/door/airlock/hatch{name = "Infirmary";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cI" = (/obj/structure/bed/roller,/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cJ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "lavalandsyndi";name = "Syndicate Research Experimentor Shutters"},/turf/open/floor/plating,/area/ruin/powered/syndicate_lava_base)
"cK" = (/obj/machinery/door/airlock/hatch{name = "Experimentation Room";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cL" = (/obj/machinery/door/airlock/hatch{name = "Telecommunications Control";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cM" = (/turf/open/floor/engine,/area/ruin/powered/syndicate_lava_base)
"cN" = (/obj/structure/noticeboard{pixel_y = 32},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cO" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/device/multitool,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cP" = (/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cQ" = (/obj/structure/sink{dir = 4;icon_state = "sink";pixel_x = 11;pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cR" = (/obj/item/stack/cable_coil/white{pixel_x = 3;pixel_y = 3},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/stack/cable_coil/white,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cS" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cT" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 0;dir = 8;freerange = 1;listening = 1;name = "Pirate Radio Listening Channel";pixel_x = 0},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cU" = (/obj/machinery/computer/camera_advanced,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cV" = (/obj/structure/filingcabinet/chestdrawer,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cW" = (/obj/item/weapon/cautery,/obj/item/weapon/scalpel,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cX" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cY" = (/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cZ" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"da" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/structure/extinguisher_cabinet{pixel_x = -26},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"db" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 1;dir = 8;freerange = 1;listening = 0;name = "Pirate Radio Broadcast Channel";pixel_x = 0},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dc" = (/obj/structure/sign/fire{pixel_x = -32},/turf/open/floor/engine,/area/ruin/powered/syndicate_lava_base)
"dd" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/obj/item/weapon/screwdriver/nuke,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"de" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/plasteel{amount = 15},/obj/item/device/electropack,/obj/item/device/taperecorder,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"df" = (/obj/structure/filingcabinet/security,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"dg" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dh" = (/obj/machinery/computer/message_monitor,/obj/item/weapon/paper/monitorkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"di" = (/turf/open/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)";dir = 5},/area/ruin/powered/syndicate_lava_base)
"dj" = (/obj/effect/baseturf_helper,/turf/open/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)";dir = 5},/area/ruin/powered/syndicate_lava_base)
"dk" = (/obj/machinery/button/door{id = "lavalandsyndi";name = "Syndicate Experimentor Lockdown Control";pixel_x = 26;req_access_txt = "150"},/turf/open/floor/engine,/area/ruin/powered/syndicate_lava_base)
"dl" = (/obj/machinery/button/door{id = "lavalandsyndi";name = "Syndicate Experimentor Lockdown Control";pixel_x = -26;req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"dm" = (/obj/item/stack/sheet/mineral/plastitanium{amount = 30},/obj/item/stack/rods{amount = 50},/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dn" = (/obj/structure/filingcabinet/medical,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"do" = (/turf/open/floor/plasteel/circuit/gcircuit,/area/ruin/powered/syndicate_lava_base)
"dp" = (/obj/machinery/door/poddoor/preopen{id = "lavalandsyndi";name = "Syndicate Research Experimentor Shutters"},/obj/machinery/door/airlock/hatch{name = "Experimentation Room";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dq" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dr" = (/obj/machinery/telecomms/relay/preset/ruskie{use_power = 0},/turf/open/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)";dir = 5},/area/ruin/powered/syndicate_lava_base)
"ds" = (/obj/machinery/door/airlock/hatch{name = "Syndicate Recon Outpost";req_access_txt = "150"},/obj/structure/fans/tiny,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dt" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen";req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"du" = (/obj/structure/sign/vacuum{pixel_x = -32},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dv" = (/obj/structure/sign/xeno_warning_mining{pixel_x = 32},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dw" = (/obj/structure/bed/roller,/obj/machinery/iv_drip,/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dx" = (/obj/structure/sign/securearea{pixel_y = 32},/turf/open/floor/plating/lava/smooth/lava_land_surface,/area/lavaland/surface/outdoors)
"bz" = (/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bA" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bB" = (/obj/machinery/door/window/brigdoor,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bC" = (/obj/machinery/chem_heater,/obj/structure/extinguisher_cabinet{pixel_x = -26},/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"bD" = (/obj/structure/chair/office/dark{dir = 1},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bE" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"bF" = (/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"bG" = (/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer{pixel_x = 3; pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = 3; pixel_y = 3},/obj/item/device/assembly/timer{pixel_x = 3; pixel_y = 3},/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bH" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/wiki/infections,/obj/item/stack/sheet/mineral/silver{amount = 10},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"bI" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bJ" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen"; req_access_txt = "150"},/turf/open/floor/plasteel/black,/area/ruin/powered/syndicate_lava_base)
"bK" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/ballistic/automatic/c20r/toy/unrestricted,/obj/item/weapon/gun/ballistic/automatic/c20r/toy/unrestricted,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bL" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bM" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/suit/toggle/labcoat,/obj/item/clothing/suit/toggle/labcoat,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bN" = (/obj/machinery/smartfridge/chemistry/virology,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"bO" = (/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bP" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/podhatch{dir = 9},/area/ruin/powered/syndicate_lava_base)
"bQ" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)"; icon_state = "podhatch"; dir = 1},/area/ruin/powered/syndicate_lava_base)
"bR" = (/obj/machinery/chem_heater,/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bS" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"bT" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bU" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"bV" = (/obj/structure/table/reinforced,/obj/item/weapon/folder,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/ears/earmuffs,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bW" = (/obj/structure/table/reinforced,/obj/item/weapon/suppressor/specialoffer,/obj/item/weapon/gun/ballistic/automatic/toy/pistol/unrestricted,/obj/item/weapon/gun/ballistic/automatic/toy/pistol/unrestricted,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bX" = (/obj/machinery/chem_master,/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"bY" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"bZ" = (/obj/machinery/chem_dispenser,/obj/structure/extinguisher_cabinet{pixel_x = 26},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"ca" = (/obj/structure/table/reinforced,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/surgical,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/science,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"cb" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; name = "emergency shower"},/obj/machinery/shower{dir = 8; icon_state = "shower"; name = "emergency shower"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cc" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)"; icon_state = "podhatch"; dir = 1},/area/ruin/powered/syndicate_lava_base)
"cd" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/stack/sheet/mineral/gold{amount = 10},/obj/item/stack/sheet/mineral/uranium{amount = 10},/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)"; icon_state = "podhatch"; dir = 1},/area/ruin/powered/syndicate_lava_base)
"ce" = (/obj/structure/bed/roller,/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cf" = (/obj/structure/sign/securearea,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"cg" = (/obj/machinery/door/airlock/hatch{name = "Firing Range"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"ch" = (/obj/machinery/door/airlock/hatch{name = "Chemistry Lab"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"ci" = (/obj/structure/sign/chemistry,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"cj" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0; name = "self destruct device"},/turf/open/floor/plasteel/podhatch{dir = 8},/area/ruin/powered/syndicate_lava_base)
"ck" = (/obj/structure/sign/biohazard,/turf/closed/wall/mineral/plastitanium,/area/ruin/powered/syndicate_lava_base)
"cl" = (/obj/machinery/door/airlock/hatch{name = "Virology Lab"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cm" = (/obj/structure/rack,/obj/item/ammo_box/foambox{pixel_x = -3; pixel_y = 3},/obj/item/ammo_box/foambox,/obj/item/ammo_box/foambox{pixel_x = 3; pixel_y = -3},/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cn" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/turf/open/floor/plasteel/podhatch{dir = 9},/area/ruin/powered/syndicate_lava_base)
"co" = (/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (NORTH)"; icon_state = "podhatch"; dir = 1},/area/ruin/powered/syndicate_lava_base)
"cp" = (/turf/open/floor/plasteel/podhatch/corner{tag = "icon-podhatchcorner (EAST)"; icon_state = "podhatchcorner"; dir = 4},/area/ruin/powered/syndicate_lava_base)
"cq" = (/turf/open/floor/plasteel/podhatch/corner{tag = "icon-podhatchcorner (WEST)"; icon_state = "podhatchcorner"; dir = 8},/area/ruin/powered/syndicate_lava_base)
"cr" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel/podhatch{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cs" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/bluecross_2,/turf/open/floor/plating,/area/ruin/powered/syndicate_lava_base)
"ct" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = -3; pixel_y = -3},/turf/open/floor/plasteel/vault,/area/ruin/powered/syndicate_lava_base)
"cu" = (/obj/machinery/sleeper/syndie{dir = 8},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cv" = (/obj/structure/closet/crate/secure,/obj/item/target,/obj/item/target,/obj/item/target/alien,/obj/item/target/alien,/obj/item/target/clown,/obj/item/target/clown,/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"cw" = (/turf/open/floor/plasteel/podhatch{dir = 10},/area/ruin/powered/syndicate_lava_base)
"cx" = (/obj/machinery/syndicatebomb/badmin/varplosion{can_unanchor = 0; name = "self destruct device"},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cy" = (/obj/structure/extinguisher_cabinet{pixel_y = -32},/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cz" = (/turf/open/floor/plasteel/podhatch,/area/ruin/powered/syndicate_lava_base)
"cA" = (/turf/open/floor/plasteel/podhatch/corner{tag = "icon-podhatchcorner (NORTH)"; icon_state = "podhatchcorner"; dir = 1},/area/ruin/powered/syndicate_lava_base)
"cB" = (/turf/open/floor/plasteel/podhatch/corner,/area/ruin/powered/syndicate_lava_base)
"cC" = (/turf/open/floor/plasteel/podhatch{tag = "icon-podhatch (SOUTHEAST)"; icon_state = "podhatch"; dir = 6},/area/ruin/powered/syndicate_lava_base)
"cD" = (/obj/machinery/door/airlock/hatch{name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cE" = (/obj/structure/bed/roller,/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cF" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/door/poddoor/preopen{id = "lavalandsyndi"; name = "Syndicate Research Experimentor Shutters"},/turf/open/floor/plating,/area/ruin/powered/syndicate_lava_base)
"cG" = (/obj/machinery/door/airlock/hatch{name = "Experimentation Room"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cH" = (/obj/machinery/door/airlock/hatch{name = "Telecommunications Control"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cI" = (/turf/open/floor/engine,/area/ruin/powered/syndicate_lava_base)
"cJ" = (/obj/structure/noticeboard{pixel_y = 32},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cK" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/device/multitool,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cL" = (/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cM" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cN" = (/obj/item/stack/cable_coil/white{pixel_x = 3; pixel_y = 3},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/stack/cable_coil/white,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cO" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cP" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; freerange = 1; listening = 1; name = "Pirate Radio Listening Channel"; pixel_x = 0},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cQ" = (/obj/machinery/computer/camera_advanced,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cR" = (/obj/structure/filingcabinet/chestdrawer,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cS" = (/obj/item/weapon/cautery,/obj/item/weapon/scalpel,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cT" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cU" = (/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cV" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cW" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/structure/extinguisher_cabinet{pixel_x = -26},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"cX" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; freerange = 1; listening = 0; name = "Pirate Radio Broadcast Channel"; pixel_x = 0},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"cY" = (/obj/structure/sign/fire{pixel_x = -32},/turf/open/floor/engine,/area/ruin/powered/syndicate_lava_base)
"cZ" = (/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/voice,/obj/item/device/assembly/voice,/obj/item/weapon/screwdriver/nuke,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"da" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/plasteel{amount = 15},/obj/item/device/electropack,/obj/item/device/taperecorder,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"db" = (/obj/structure/filingcabinet/security,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"dc" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dd" = (/obj/machinery/computer/message_monitor,/obj/item/weapon/paper/monitorkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"de" = (/turf/open/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)"; dir = 5},/area/ruin/powered/syndicate_lava_base)
"df" = (/obj/effect/baseturf_helper,/turf/open/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)"; dir = 5},/area/ruin/powered/syndicate_lava_base)
"dg" = (/obj/machinery/button/door{id = "lavalandsyndi"; name = "Syndicate Experimentor Lockdown Control"; pixel_x = 26; req_access_txt = "150"},/turf/open/floor/engine,/area/ruin/powered/syndicate_lava_base)
"dh" = (/obj/machinery/button/door{id = "lavalandsyndi"; name = "Syndicate Experimentor Lockdown Control"; pixel_x = -26; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"di" = (/obj/item/stack/sheet/mineral/plastitanium{amount = 30},/obj/item/stack/rods{amount = 50},/obj/structure/table/reinforced,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dj" = (/obj/structure/filingcabinet/medical,/turf/open/floor/plasteel/vault{dir = 5},/area/ruin/powered/syndicate_lava_base)
"dk" = (/turf/open/floor/plasteel/circuit/gcircuit,/area/ruin/powered/syndicate_lava_base)
"dl" = (/obj/machinery/door/poddoor/preopen{id = "lavalandsyndi"; name = "Syndicate Research Experimentor Shutters"},/obj/machinery/door/airlock/hatch{name = "Experimentation Room"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dm" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/structure/table/reinforced,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/obj/item/weapon/grenade/chem_grenade/large,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dn" = (/obj/machinery/telecomms/relay/preset/ruskie{use_power = 0},/turf/open/floor/plasteel/vault{tag = "icon-vault (NORTHEAST)"; dir = 5},/area/ruin/powered/syndicate_lava_base)
"do" = (/obj/machinery/door/airlock/hatch{name = "Syndicate Recon Outpost"; req_access_txt = "150"},/obj/structure/fans/tiny,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dp" = (/obj/machinery/door/airlock/hatch{name = "Monkey Pen"; req_access_txt = "150"},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dq" = (/obj/structure/sign/vacuum{pixel_x = -32},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dr" = (/obj/structure/sign/xeno_warning_mining{pixel_x = 32},/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"ds" = (/obj/structure/bed/roller,/obj/machinery/iv_drip,/mob/living/carbon/monkey,/turf/open/floor/plasteel/vault{dir = 8},/area/ruin/powered/syndicate_lava_base)
"dt" = (/obj/structure/sign/securearea{pixel_y = 32},/turf/open/floor/plating/lava/smooth/lava_land_surface,/area/lavaland/surface/outdoors)
(1,1,1) = {"
aaaaaaaaabaaaaabababababababababababababababababababababababababababababaaaa
@@ -195,26 +191,26 @@ ababababababababadapaPapadaQapaoaRadapaoapaoapaSadadaTadaTadadadadababababab
abababababacababadapaNapadaUaoapapaVaoapaoapaoapaTapapapapapaWaXadababababab
abababababababacadaYaNaZadbabbaobcadbdbeapaobcbfadaRapapapaRadbgadacabababab
abababababababacadapaNapadadadadadadadadbhbhadadadadadadadadadadadadadababab
abababababababacadaYaNaZadbibjbkblbmbnadbobpadbqbrbsbtbubvbwbzbybzbAadababab
abababababacabacadbBbCbBadbDbEbFbGbGbHbvaYaZbvbIbJapapapbvbKbybybKbyadababab
abababababacababadbMaNbNadaRapapapapbObvaYaZbvbPapaoaoaoaoaoaoaoaoaoadababab
abababababacabacadapapapadbQaoapbRbSbTbvaYaZbvbUapapbbbVbybKbybybXbyadababab
abababababababacadbYapbZadbQapapcacbccadaYaZadcdcebRcfcgbyaNcibyaNciadababab
ababababababacabadcjckadadcjclcmadbvadadcnaZadcocpadbvbvadadadadadadadababab
ababababababababadcqapaRbvcrcscscscscscsctcucscscscscscscvcwcxapcyadabababab
aaabababababacacadczapapckcAcBcCcDcDcDcDcEcFcDcDcDcDcDcDcGcHapapcIadabababab
aaabababababacadadadcJadadadadadadcKcjadaYaZadadcLcjadadadadapapcyadabababab
abababababababadcMcMcMcMcMcMcMcjaRapapadaYaZadaRapapcNbbcOadcPapcQadabababab
abababababababadcMcMcMcMcMcMcMcJcRapapadaYaZadapaocScTcUcVadcWcXcYadabababab
abababababababadcMcMcMcMcMcMcMcJbHapcZadaYaZaddaaodbbJapaNadadadadadabababab
ababababababacaddccMcMcMcMcMcMcJddapdeadaYaZaddfaodgdhapaNcLdidjdiadabababab
abababababababadcMcMcMcMcMcMdkaddlapdmadaYaZaddnapapapapbNaddododoadabababab
ababababababacadcMcMcMcMcMcMcMdpapapdqadcAcGadadadadadadadaddodrdoadabababab
ababababababacadcMcMcMcMcMcMcMaddaapaRaddsdsadacacacacacabadadadadadabababab
ababababababacadadadadadadadadadbvdtbvaddudvadacacacababababababacacabababab
ababababababacacacabababacacacaddwaNdwadaNaNadacababababacababababababababab
ababababababababababababababacadadadadaddsdsadababacacababababababababababab
abababababababababababababababababababdxababdxababababababababababababababab
abababababababacadaYaNaZadbibjbkblbmbnadbobpadbqbrbsbtbubvbwbxbybxbzadababab
abababababacabacadbAbBbAadbCbDbEbFbFbGbvaYaZbvbHbIapapapbvbJbybybJbyadababab
abababababacababadbKaNbLadaRapapapapbMbvaYaZbvbNapaoaoaoaoaoaoaoaoaoadababab
abababababacabacadapapapadbOaoapbPbQbRbvaYaZbvbSapapbbbTbybJbybybUbyadababab
abababababababacadbVapbWadbOapapbXbYbZadaYaZadcacbbPcccdbyaNcebyaNceadababab
ababababababacabadcfcgadadcfchciadbvadadcjaZadckcladbvbvadadadadadadadababab
ababababababababadcmapaRbvcncococococococpcqcococococococrcsctapcuadabababab
aaabababababacacadcvapapcgcwcxcyczczczczcAcBczczczczczczcCcDapapcEadabababab
aaabababababacadadadcFadadadadadadcGcfadaYaZadadcHcfadadadadapapcuadabababab
abababababababadcIcIcIcIcIcIcIcfaRapapadaYaZadaRapapcJbbcKadcLapcMadabababab
abababababababadcIcIcIcIcIcIcIcFcNapapadaYaZadapaocOcPcQcRadcScTcUadabababab
abababababababadcIcIcIcIcIcIcIcFbGapcVadaYaZadcWaocXbIapaNadadadadadabababab
ababababababacadcYcIcIcIcIcIcIcFcZapdaadaYaZaddbaodcddapaNcHdedfdeadabababab
abababababababadcIcIcIcIcIcIdgaddhapdiadaYaZaddjapapapapbLaddkdkdkadabababab
ababababababacadcIcIcIcIcIcIcIdlapapdmadcwcCadadadadadadadaddkdndkadabababab
ababababababacadcIcIcIcIcIcIcIadcWapaRaddodoadacacacacacabadadadadadabababab
ababababababacadadadadadadadadadbvdpbvaddqdradacacacababababababacacabababab
ababababababacacacabababacacacaddsaNdsadaNaNadacababababacababababababababab
ababababababababababababababacadadadadaddodoadababacacababababababababababab
abababababababababababababababababababdtababdtababababababababababababababab
abababababababababababababababababababababababababababababababababababababaa
aaababababababababababababababababababababababababababababababababababababaa
aaaaabaaababababababababababababababababababababababababababababababaaaaaaaa
+3 -3
View File
@@ -280,7 +280,7 @@
"ft" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine)
"fu" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine)
"fv" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access)
"fw" = (/obj/effect/mob_spawn/derelict_drone,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access)
"fw" = (/obj/item/drone_shell/dusty,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access)
"fx" = (/turf/open/floor/plasteel/airless,/area/derelict/bridge/access)
"fy" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access)
"fz" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access)
@@ -427,7 +427,7 @@
"ik" = (/obj/structure/chair,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical)
"il" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/medical)
"im" = (/obj/item/weapon/storage/box/lights/mixed,/turf/open/floor/plating/airless,/area/derelict/singularity_engine)
"in" = (/obj/effect/mob_spawn/derelict_drone,/turf/open/floor/plating/airless,/area/derelict/singularity_engine)
"in" = (/obj/item/drone_shell/dusty,/turf/open/floor/plating/airless,/area/derelict/singularity_engine)
"io" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/singularity_engine)
"ip" = (/obj/item/stack/cable_coil/cut{amount = 2;dir = 2;icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary)
"iq" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/ruin/unpowered/no_grav)
@@ -720,7 +720,7 @@
"nR" = (/turf/open/floor/plasteel/airless,/area/derelict/se_solar)
"nS" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/airless,/area/derelict/se_solar)
"nT" = (/obj/docking_port/stationary{dheight = 0;dir = 2;dwidth = 11;height = 22;id = "whiteship_z4";name = "KSS13: Derelict";width = 35},/turf/open/space,/area/space)
"nU" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-2";d2 = 2},/obj/effect/mob_spawn/derelict_drone,/turf/open/floor/plasteel/airless,/area/derelict/se_solar)
"nU" = (/obj/machinery/power/terminal{icon_state = "term";dir = 1},/obj/structure/cable{icon_state = "0-2";d2 = 2},/obj/item/drone_shell/dusty,/turf/open/floor/plasteel/airless,/area/derelict/se_solar)
"nV" = (/turf/open/floor/plating/airless,/area/derelict/se_solar)
"nW" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/se_solar)
"nX" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless,/area/derelict/se_solar)
@@ -99,7 +99,7 @@
/area/ruin/powered)
"ar" = (
/obj/structure/shuttle/engine/propulsion/burst{
dir = 4
dir = 8
},
/turf/open/floor/plating/airless,
/area/ruin/powered)
@@ -222,7 +222,7 @@
/area/ruin/powered)
"aN" = (
/obj/structure/shuttle/engine/propulsion/burst{
dir = 4
dir = 8
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered/no_grav)
@@ -626,9 +626,9 @@
/area/ruin/unpowered)
"ca" = (
/obj/structure/shuttle/engine/propulsion/burst/left{
tag = "icon-burst_l (EAST)";
dir = 8;
icon_state = "burst_l";
dir = 4
tag = "icon-burst_l (EAST)"
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered)
@@ -712,7 +712,7 @@
/area/ruin/unpowered)
"co" = (
/obj/structure/shuttle/engine/propulsion/burst{
dir = 4
dir = 8
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered)
@@ -847,9 +847,9 @@
/area/ruin/unpowered)
"cF" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
tag = "icon-burst_r (EAST)";
dir = 8;
icon_state = "burst_r";
dir = 4
tag = "icon-burst_r (EAST)"
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered)
+694 -43
View File
@@ -1,46 +1,697 @@
"a" = (/turf/open/space,/area/space)
"b" = (/turf/closed/mineral/random,/area/ruin/unpowered/no_grav)
"c" = (/turf/open/floor/plating/asteroid/airless,/area/ruin/unpowered/no_grav)
"d" = (/turf/closed/wall/mineral/clown,/area/ruin/unpowered)
"e" = (/obj/machinery/door/airlock/clown,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"f" = (/turf/open/floor/plating/asteroid/airless,/area/ruin/unpowered)
"g" = (/obj/effect/mob_spawn/human/clown,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"h" = (/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"i" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"j" = (/obj/structure/closet/crate{icon_state = "crateopen";opened = 1},/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"k" = (/obj/structure/closet/secure_closet{name = "clown locker";req_access_txt = "46"},/obj/item/clothing/shoes/clown_shoes/banana_shoes,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2;name = "2maintenance loot spawner"},/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"l" = (/obj/structure/shuttle/engine/heater{color = "#FFFF00";dir = 4;icon_state = "heater"},/obj/structure/window/reinforced{color = "#FFFF00";dir = 8},/turf/open/floor/plating/airless{color = "#FFFF00"},/area/ruin/unpowered)
"m" = (/obj/structure/shuttle/engine/propulsion{color = "#FFFF00";dir = 8;icon_state = "propulsion_l"},/turf/open/space,/area/ruin/unpowered)
"n" = (/turf/closed/mineral/random,/area/ruin/unpowered)
"o" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/asteroid/airless,/area/ruin/unpowered)
"p" = (/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"q" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/chair{dir = 8},/turf/open/floor/plating/asteroid/airless,/area/ruin/unpowered)
"r" = (/obj/effect/mob_spawn/human/clown{name = "Clown Pilot"},/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"s" = (/obj/item/weapon/paper{info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!"},/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"t" = (/obj/structure/grille{color = "#FFFF00"},/obj/structure/window/reinforced{color = "#FFFF00"},/obj/structure/window/reinforced{color = "#FFFF00";dir = 4},/obj/structure/window/reinforced{color = "#FFFF00";dir = 8},/turf/open/floor/plating/airless{color = "#FFFF00"},/area/ruin/unpowered)
"u" = (/obj/item/weapon/shard,/obj/structure/chair{dir = 8},/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"v" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"w" = (/obj/item/weapon/storage/bag/ore,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"x" = (/obj/item/weapon/pickaxe,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"y" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
"z" = (/obj/item/weapon/shovel,/turf/open/floor/mineral/bananium/airless,/area/ruin/unpowered)
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/open/space,
/area/space)
"b" = (
/turf/closed/mineral/random,
/area/ruin/unpowered/no_grav)
"c" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered/no_grav)
"d" = (
/turf/closed/wall/mineral/clown,
/area/ruin/unpowered)
"e" = (
/obj/machinery/door/airlock/clown,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"f" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
"g" = (
/obj/effect/mob_spawn/human/clown,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"h" = (
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"i" = (
/obj/structure/closet/crate,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"j" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
},
/obj/item/weapon/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"k" = (
/obj/structure/closet/secure_closet{
name = "clown locker";
req_access_txt = "46"
},
/obj/item/clothing/shoes/clown_shoes/banana_shoes,
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
name = "2maintenance loot spawner"
},
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"l" = (
/obj/structure/shuttle/engine/heater{
color = "#FFFF00";
dir = 4;
icon_state = "heater"
},
/obj/structure/window/reinforced{
color = "#FFFF00";
dir = 8
},
/turf/open/floor/plating/airless{
color = "#FFFF00"
},
/area/ruin/unpowered)
"m" = (
/obj/structure/shuttle/engine/propulsion{
color = "#FFFF00";
dir = 4;
icon_state = "propulsion_l"
},
/turf/open/space,
/area/ruin/unpowered)
"n" = (
/turf/closed/mineral/random,
/area/ruin/unpowered)
"o" = (
/obj/item/weapon/shard{
icon_state = "small"
},
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
"p" = (
/obj/item/weapon/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"q" = (
/obj/item/weapon/shard{
icon_state = "medium"
},
/obj/structure/chair{
dir = 8
},
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
"r" = (
/obj/effect/mob_spawn/human/clown{
name = "Clown Pilot"
},
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"s" = (
/obj/item/weapon/paper{
info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!"
},
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"t" = (
/obj/structure/grille{
color = "#FFFF00"
},
/obj/structure/window/reinforced{
color = "#FFFF00"
},
/obj/structure/window/reinforced{
color = "#FFFF00";
dir = 4
},
/obj/structure/window/reinforced{
color = "#FFFF00";
dir = 8
},
/turf/open/floor/plating/airless{
color = "#FFFF00"
},
/area/ruin/unpowered)
"u" = (
/obj/item/weapon/shard,
/obj/structure/chair{
dir = 8
},
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"v" = (
/obj/item/weapon/shard{
icon_state = "medium"
},
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"w" = (
/obj/item/weapon/storage/bag/ore,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"x" = (
/obj/item/weapon/pickaxe,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"y" = (
/obj/structure/closet/crate,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/obj/item/weapon/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"z" = (
/obj/item/weapon/shovel,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
(1,1,1) = {"
abbaaaaccccccaaaaaaaaaaaaaaa
bbbbaabbbbbccbbbaaaaaaaaaaaa
bbbbbbbbbbbccbbaaaaaaaaaaaaa
abbbbbbbbbbbbbbaaaaaaaaaaaaa
abbbbbbbbbbbbccaadddeeddddda
aabbbbbbbbbbbbcdddfghhiijklm
aaabbbbbbbbbbbbnnnohhhhhphlm
aabbbbbbbbbbbbbnnqrhsphphplm
aabbbbbbbbbbbbbthuhvhghhhplm
aabbbbbbbbbbbbbdddwxhhyyizlm
aabbbbbbbbbbbbbbbdddeeddddda
abbbbbbbbbbbbbbbbbbbbbbbbaaa
abbabbbbbccbbbbbbbbbbbaaaaaa
aaaabbbbcccbbbbbbbbbaaaaaaaa
aaaabbaaaaccbcbbcccaaaaaaaaa
aaaabaaaaaacbbbbbbcaaaaaaaaa
aaaaaaaaaaaaaabbbbcaaaaaaaaa
a
b
b
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
b
b
b
b
b
a
a
a
a
a
a
b
b
a
a
a
a
"}
(3,1,1) = {"
b
b
b
b
b
b
a
b
b
b
b
b
b
a
a
a
a
"}
(4,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
a
a
a
a
a
"}
(5,1,1) = {"
a
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(6,1,1) = {"
a
a
b
b
b
b
b
b
b
b
b
b
b
b
b
a
a
"}
(7,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
a
a
a
"}
(8,1,1) = {"
c
b
b
b
b
b
b
b
b
b
b
b
b
b
a
a
a
"}
(9,1,1) = {"
c
b
b
b
b
b
b
b
b
b
b
b
b
c
a
a
a
"}
(10,1,1) = {"
c
b
b
b
b
b
b
b
b
b
b
b
c
c
a
a
a
"}
(11,1,1) = {"
c
b
b
b
b
b
b
b
b
b
b
b
c
c
c
a
a
"}
(12,1,1) = {"
c
c
c
b
b
b
b
b
b
b
b
b
b
b
c
c
a
"}
(13,1,1) = {"
c
c
c
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(14,1,1) = {"
a
b
b
b
c
b
b
b
b
b
b
b
b
b
c
b
a
"}
(15,1,1) = {"
a
b
b
b
c
c
b
b
b
b
b
b
b
b
b
b
b
"}
(16,1,1) = {"
a
b
a
a
a
d
n
n
t
d
b
b
b
b
b
b
b
"}
(17,1,1) = {"
a
a
a
a
a
d
n
n
h
d
b
b
b
b
c
b
b
"}
(18,1,1) = {"
a
a
a
a
d
d
n
q
u
d
d
b
b
b
c
b
b
"}
(19,1,1) = {"
a
a
a
a
d
f
o
r
h
w
d
b
b
b
c
c
c
"}
(20,1,1) = {"
a
a
a
a
d
g
h
h
v
x
d
b
b
b
a
a
a
"}
(21,1,1) = {"
a
a
a
a
e
h
h
s
h
h
e
b
b
a
a
a
a
"}
(22,1,1) = {"
a
a
a
a
e
h
h
p
g
h
e
b
b
a
a
a
a
"}
(23,1,1) = {"
a
a
a
a
d
i
h
h
h
y
d
b
a
a
a
a
a
"}
(24,1,1) = {"
a
a
a
a
d
i
h
p
h
y
d
b
a
a
a
a
a
"}
(25,1,1) = {"
a
a
a
a
d
j
p
h
h
i
d
b
a
a
a
a
a
"}
(26,1,1) = {"
a
a
a
a
d
k
h
p
p
z
d
a
a
a
a
a
a
"}
(27,1,1) = {"
a
a
a
a
d
l
l
l
l
l
d
a
a
a
a
a
a
"}
(28,1,1) = {"
a
a
a
a
a
m
m
m
m
m
a
a
a
a
a
a
a
"}
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -43,9 +43,9 @@
/area/ruin/unpowered)
"l" = (
/obj/structure/shuttle/engine/propulsion{
tag = "icon-propulsion (WEST)";
dir = 4;
icon_state = "propulsion";
dir = 8
tag = "icon-propulsion (WEST)"
},
/turf/open/floor/plating/airless,
/area/ruin/unpowered)
@@ -23,9 +23,9 @@
/area/ruin/powered/authorship)
"e" = (
/obj/structure/shuttle/engine/propulsion{
tag = "icon-propulsion (EAST)";
dir = 8;
icon_state = "propulsion";
dir = 4
tag = "icon-propulsion (EAST)"
},
/turf/open/space,
/area/ruin/powered/authorship)
+3 -1
View File
@@ -147,7 +147,9 @@
/turf/closed/wall,
/area/ruin/powered/spacebar/bar)
"aG" = (
/obj/structure/closet/secure_closet/freezer/kitchen,
/obj/structure/closet/secure_closet/freezer/kitchen{
req_access = null
},
/turf/open/floor/wood,
/area/ruin/powered/spacebar/bar)
"aH" = (
+38 -38
View File
@@ -342,10 +342,10 @@
/turf/open/floor/plating,
/area/awaymission/centcomAway/maint)
"bc" = (
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"bd" = (
/turf/open/floor/plasteel/vault{
@@ -398,8 +398,8 @@
id = "XCCHangar1";
name = "XCC Main Hangar"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/hangar)
"bm" = (
/turf/open/floor/plasteel/vault{
@@ -998,23 +998,23 @@
/area/awaymission/centcomAway/hangar)
"dn" = (
/obj/structure/closet/crate,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"do" = (
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dp" = (
/obj/structure/closet/crate/large,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dq" = (
/obj/structure/dresser,
@@ -1045,10 +1045,10 @@
/area/awaymission/centcomAway/hangar)
"dv" = (
/obj/structure/closet/crate,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dw" = (
/obj/structure/tank_dispenser,
@@ -1085,10 +1085,10 @@
/area/awaymission/centcomAway/hangar)
"dB" = (
/obj/structure/ore_box,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dC" = (
/obj/structure/table,
@@ -1147,23 +1147,23 @@
/area/awaymission/centcomAway/hangar)
"dM" = (
/obj/structure/closet/crate/large,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dN" = (
/obj/structure/closet/crate,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dO" = (
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"dP" = (
/turf/open/floor/plasteel/yellow/side{
@@ -1494,8 +1494,8 @@
/area/awaymission/centcomAway/hangar)
"eS" = (
/obj/machinery/telecomms/relay/preset/ruskie,
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/general)
"eT" = (
/obj/machinery/door/airlock/engineering{
@@ -1841,16 +1841,16 @@
/turf/open/floor/plasteel/white,
/area/awaymission/centcomAway/general)
"fV" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/general)
"fW" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/general)
"fX" = (
/turf/open/floor/plasteel/green/corner,
@@ -1958,17 +1958,17 @@
},
/area/awaymission/centcomAway/hangar)
"gn" = (
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"go" = (
/obj/structure/table,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"gp" = (
/obj/machinery/shieldgen,
@@ -2151,7 +2151,7 @@
"gS" = (
/turf/open/floor/plating,
/obj/structure/shuttle/engine/propulsion/burst{
dir = 4
dir = 8
},
/turf/closed/wall/mineral/titanium/interior,
/area/awaymission/centcomAway/hangar)
@@ -2450,10 +2450,10 @@
pixel_y = 7;
req_access_txt = "2"
},
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"hL" = (
/obj/structure/reagent_dispensers/watertank,
@@ -2465,10 +2465,10 @@
pixel_x = -3;
pixel_y = -2
},
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"hN" = (
/obj/structure/rack,
@@ -2637,8 +2637,8 @@
id = "XCCsec3";
name = "XCC Main Access Shutters"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/general)
"iu" = (
/obj/structure/flora/ausbushes,
@@ -2685,12 +2685,12 @@
id = "XCCMechs";
name = "XCC Mech Bay"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/hangar)
"iz" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/hangar)
"iA" = (
/obj/machinery/mass_driver{
@@ -2698,8 +2698,8 @@
id = "XCCMechs";
name = "gravpult"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/hangar)
"iB" = (
/turf/open/floor/plasteel/loadingarea{
@@ -3114,8 +3114,8 @@
id = "XCCFerry";
name = "XCC Ferry Hangar"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/hangar)
"jM" = (
/obj/structure/chair,
@@ -3153,16 +3153,16 @@
id = "XCCsec1";
name = "XCC Checkpoint 1 Shutters"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/general)
"jS" = (
/obj/machinery/door/poddoor/shutters{
id = "XCCsec2";
name = "XCC Checkpoint 2 Shutters"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/general)
"jT" = (
/obj/structure/grille,
@@ -3255,10 +3255,10 @@
pixel_y = 7;
req_access_txt = "2"
},
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"kg" = (
/obj/machinery/gateway{
@@ -3277,10 +3277,10 @@
/turf/open/floor/plating,
/area/awaymission/centcomAway/hangar)
"kj" = (
/turf/open/floor/plasteel{
/obj/effect/turf_decal/delivery{
dir = 6
},
/obj/effect/turf_decal/delivery{
/turf/open/floor/plasteel{
dir = 6
},
/area/awaymission/centcomAway/general)
@@ -3752,8 +3752,8 @@
id = "XCCtdomemelee";
name = "XCC Thunderdome Melee"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"lB" = (
/obj/item/weapon/reagent_containers/glass/rag,
@@ -3807,8 +3807,8 @@
id = "XCCtdome";
name = "XCC Thunderdome"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"lK" = (
/obj/machinery/igniter,
@@ -3925,8 +3925,8 @@
id = "XCCtdomeguns";
name = "XCC Thunderdome Guns"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/awaymission/centcomAway/thunderdome)
"mc" = (
/obj/item/weapon/soap/nanotrasen,
@@ -4116,51 +4116,51 @@
/turf/open/floor/plasteel/cafeteria,
/area/awaymission/centcomAway/cafe)
"mE" = (
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mF" = (
/obj/structure/reagent_dispensers/watertank,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mG" = (
/obj/machinery/shieldgen,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mH" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mI" = (
/obj/machinery/portable_atmospherics/pump,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mJ" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mK" = (
/turf/open/floor/plating,
/obj/effect/turf_decal/stripes/line{
dir = 2
},
/turf/open/floor/plating,
/area/awaymission/centcomAway/cafe)
"mL" = (
/obj/structure/table,
File diff suppressed because it is too large Load Diff
+20 -20
View File
@@ -479,32 +479,32 @@
/obj/machinery/gateway{
dir = 9
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (NORTHWEST)"
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (NORTHWEST)"
},
/area/awaymission/research/interior/gateway)
"bB" = (
/obj/machinery/gateway{
dir = 1
},
/turf/open/floor/plasteel/black,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plasteel/black,
/area/awaymission/research/interior/gateway)
"bC" = (
/obj/machinery/gateway{
dir = 5
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (NORTHEAST)"
},
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (NORTHEAST)"
},
/area/awaymission/research/interior/gateway)
"bD" = (
/obj/structure/cable{
@@ -623,10 +623,10 @@
/obj/machinery/gateway{
dir = 8
},
/turf/open/floor/plasteel/black,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plasteel/black,
/area/awaymission/research/interior/gateway)
"bT" = (
/obj/machinery/gateway/centeraway{
@@ -638,12 +638,12 @@
/obj/machinery/gateway{
dir = 4
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (EAST)"
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (EAST)"
},
/area/awaymission/research/interior/gateway)
"bV" = (
/obj/structure/sign/nosmoking_1{
@@ -677,31 +677,31 @@
/obj/machinery/gateway{
dir = 10
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (SOUTHWEST)"
},
/obj/effect/turf_decal/stripes/line{
dir = 10
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (SOUTHWEST)"
},
/area/awaymission/research/interior/gateway)
"bZ" = (
/obj/machinery/gateway,
/obj/effect/landmark{
name = "awaystart"
},
/turf/open/floor/plasteel/black,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/black,
/area/awaymission/research/interior/gateway)
"ca" = (
/obj/machinery/gateway{
dir = 6
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (SOUTHEAST)"
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plasteel/black{
tag = "icon-warndark (SOUTHEAST)"
},
/area/awaymission/research/interior/gateway)
"cb" = (
/obj/machinery/power/apc{
@@ -4575,9 +4575,9 @@
"mf" = (
/turf/open/floor/plating/asteroid/airless,
/obj/structure/shuttle/engine/propulsion/burst{
tag = "icon-propulsion (WEST)";
dir = 4;
icon_state = "propulsion";
dir = 8
tag = "icon-propulsion (WEST)"
},
/turf/closed/wall/mineral/titanium/interior,
/area/awaymission/research/exterior)
+17 -17
View File
@@ -581,8 +581,8 @@
/area/awaymission/spacebattle/cruiser)
"bX" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "burst_l";
dir = 4
dir = 8;
icon_state = "burst_l"
},
/turf/open/space,
/area/awaymission/spacebattle/cruiser)
@@ -626,8 +626,8 @@
/area/awaymission/spacebattle/cruiser)
"cf" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 4
dir = 8;
icon_state = "propulsion"
},
/turf/open/space,
/area/awaymission/spacebattle/cruiser)
@@ -936,8 +936,8 @@
/area/awaymission/spacebattle/cruiser)
"df" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_r";
dir = 4
dir = 8;
icon_state = "propulsion_r"
},
/turf/open/space,
/area/awaymission/spacebattle/cruiser)
@@ -1067,10 +1067,10 @@
},
/area/awaymission/spacebattle/cruiser)
"dC" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/awaymission/spacebattle/cruiser)
"dD" = (
/obj/effect/decal/cleanable/blood,
@@ -1189,10 +1189,10 @@
},
/area/awaymission/spacebattle/cruiser)
"dW" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel,
/area/awaymission/spacebattle/cruiser)
"dX" = (
/obj/effect/mob_spawn/human/engineer/rig{
@@ -1287,10 +1287,10 @@
/area/awaymission/spacebattle/cruiser)
"ej" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plasteel,
/area/awaymission/spacebattle/cruiser)
"ek" = (
/obj/structure/grille,
@@ -2247,8 +2247,8 @@
/area/awaymission/spacebattle/syndicate7)
"hm" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_r";
dir = 8
dir = 4;
icon_state = "propulsion_r"
},
/turf/open/space,
/area/awaymission/spacebattle/syndicate7)
@@ -2273,10 +2273,10 @@
/area/awaymission/spacebattle/cruiser)
"hr" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
/turf/open/floor/plasteel,
/area/awaymission/spacebattle/cruiser)
"hs" = (
/obj/structure/girder,
@@ -2297,8 +2297,8 @@
/area/awaymission/spacebattle/syndicate7)
"hv" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_l";
dir = 8
dir = 4;
icon_state = "propulsion_l"
},
/turf/open/space,
/area/awaymission/spacebattle/syndicate7)
@@ -2387,10 +2387,10 @@
/turf/open/floor/plasteel,
/area/awaymission/spacebattle/cruiser)
"hM" = (
/turf/open/floor/plasteel,
/obj/effect/turf_decal/stripes/line{
dir = 6
},
/turf/open/floor/plasteel,
/area/awaymission/spacebattle/cruiser)
"hN" = (
/obj/structure/rack,
@@ -2596,8 +2596,8 @@
/area/awaymission/spacebattle/cruiser)
"iv" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "burst_r";
dir = 4
dir = 8;
icon_state = "burst_r"
},
/turf/open/space,
/area/awaymission/spacebattle/cruiser)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -9179,9 +9179,6 @@
})
"aoh" = (
/obj/machinery/door/firedoor,
/obj/machinery/mineral/ore_redemption{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -9190,6 +9187,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/obj/machinery/mineral/ore_redemption{
input_dir = 4;
output_dir = 8
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
"aoi" = (
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+26 -26
View File
@@ -720,7 +720,7 @@
icon_state = "1-4"
},
/mob/living/simple_animal/bot/secbot/beepsky{
desc = "Powered by tears and swet of laborer.";
desc = "Powered by the tears and sweat of laborers.";
name = "Prison Ofitser"
},
/turf/open/floor/plasteel{
@@ -1297,25 +1297,25 @@
id = "mining_internal"
},
/obj/structure/plasticflaps,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/area/mine/production)
"cG" = (
/obj/machinery/conveyor{
dir = 8;
id = "mining_internal"
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating{
tag = "icon-warnplate (NORTH)";
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/area/mine/production)
"cH" = (
/obj/machinery/light/small,
@@ -1333,13 +1333,13 @@
/obj/machinery/light/small{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/turf/open/floor/plating{
tag = "icon-warnplatecorner (EAST)";
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
/area/mine/production)
"cJ" = (
/obj/machinery/airalarm{
@@ -2151,10 +2151,10 @@
frequency = 1439;
pixel_y = 23
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/bot,
/area/mine/production)
"eu" = (
/obj/structure/extinguisher_cabinet{
@@ -2173,16 +2173,16 @@
/area/mine/production)
"ev" = (
/obj/structure/ore_box,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/bot,
/area/mine/production)
"ew" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/bot,
/area/mine/production)
"ex" = (
/obj/structure/cable{
@@ -2318,10 +2318,10 @@
/obj/machinery/light/small{
dir = 4
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/delivery,
/area/mine/production)
"eM" = (
/obj/structure/cable{
@@ -2451,10 +2451,10 @@
icon_state = "crateopen";
opened = 1
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/bot,
/area/mine/production)
"eX" = (
/obj/machinery/atmospherics/components/unary/vent_pump{
@@ -2488,12 +2488,12 @@
input_dir = 1;
output_dir = 2
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/area/mine/production)
"fa" = (
/obj/machinery/door/airlock/maintenance{
@@ -2572,13 +2572,13 @@
dir = 2;
id = "mining_internal"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating{
tag = "icon-warnplate (WEST)";
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/area/mine/production)
"fj" = (
/turf/open/floor/plasteel{
@@ -2678,12 +2678,12 @@
dir = 1;
output_dir = 2
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/stripes/line{
dir = 9
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/area/mine/production)
"fv" = (
/obj/machinery/atmospherics/components/unary/vent_pump{
@@ -2765,10 +2765,10 @@
},
/area/mine/laborcamp)
"fF" = (
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel{
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
},
/obj/effect/turf_decal/delivery,
/area/mine/laborcamp)
"fG" = (
/obj/machinery/mineral/processing_unit{
@@ -12288,7 +12288,7 @@ fK
fK
fK
dq
fP
dq
fL
fK
dq
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -68,8 +68,8 @@
/area/shuttle/escape)
"am" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 4
dir = 8;
icon_state = "propulsion"
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
+6 -6
View File
@@ -37,8 +37,8 @@
/area/shuttle/escape)
"h" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_r";
dir = 8
dir = 4;
icon_state = "propulsion_r"
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
@@ -69,8 +69,8 @@
/area/shuttle/escape)
"o" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 8
dir = 4;
icon_state = "propulsion"
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
@@ -96,8 +96,8 @@
/area/shuttle/escape)
"t" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_l";
dir = 8
dir = 4;
icon_state = "propulsion_l"
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
+728 -74
View File
@@ -1,77 +1,731 @@
"aa" = (/turf/open/space,/area/space)
"ab" = (/turf/closed/indestructible/riveted/uranium,/area/shuttle/escape)
"ac" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating{tag = "icon-wood-broken2";icon_state = "wood-broken2"},/area/shuttle/escape)
"ad" = (/obj/machinery/door/airlock/gold,/obj/effect/forcefield/luxury_shuttle{name = "Ticket Booth"},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"ae" = (/obj/docking_port/mobile/emergency{dir = 2;dwidth = 5;height = 14;name = "Luxury emergency shuttle";timid = 1;width = 25},/obj/machinery/door/airlock/gold,/obj/effect/forcefield/luxury_shuttle{name = "Ticket Booth"},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"af" = (/turf/open/floor/plating{tag = "icon-wood-broken3";icon_state = "wood-broken3"},/area/shuttle/escape)
"ag" = (/turf/open/floor/plating{tag = "icon-wood";icon_state = "wood"},/area/shuttle/escape)
"ah" = (/turf/open/floor/plating{tag = "icon-wood-broken";icon_state = "wood-broken"},/area/shuttle/escape)
"ai" = (/turf/open/floor/plating{tag = "icon-wood-broken5";icon_state = "wood-broken5"},/area/shuttle/escape)
"aj" = (/turf/open/floor/mineral/gold,/area/shuttle/escape)
"ak" = (/obj/item/weapon/twohanded/required/kirbyplants{tag = "icon-plant-10";icon_state = "plant-10"},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"al" = (/obj/structure/mirror{pixel_y = 32},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"am" = (/turf/open/floor/plating{tag = "icon-wood-broken7";icon_state = "wood-broken7"},/area/shuttle/escape)
"an" = (/turf/open/floor/plating{tag = "icon-wood-broken2";icon_state = "wood-broken2"},/area/shuttle/escape)
"ao" = (/turf/open/floor/plating{tag = "icon-wood-broken6";icon_state = "wood-broken6"},/area/shuttle/escape)
"ap" = (/obj/structure/toilet{dir = 4;icon_state = "toilet00";tag = "icon-toilet00 (NORTH)"},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"aq" = (/obj/machinery/door/airlock/gold,/turf/open/floor/mineral/gold,/area/shuttle/escape)
"ar" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/open/floor/plating/airless,/area/shuttle/escape)
"as" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/shuttle/escape)
"at" = (/turf/open/floor/carpet,/area/shuttle/escape)
"au" = (/obj/structure/chair/comfy,/turf/open/floor/carpet,/area/shuttle/escape)
"av" = (/obj/structure/chair/comfy{tag = "icon-comfychair (EAST)";icon_state = "comfychair";dir = 4},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"aw" = (/obj/machinery/computer/communications,/turf/open/floor/mineral/gold,/area/shuttle/escape)
"ax" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/meatballspaghetti,/turf/open/floor/carpet,/area/shuttle/escape)
"ay" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/notasandwich,/turf/open/floor/carpet,/area/shuttle/escape)
"az" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/pastatomato,/turf/open/floor/carpet,/area/shuttle/escape)
"aA" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/kebab/tofu,/turf/open/floor/carpet,/area/shuttle/escape)
"aB" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/honkdae,/turf/open/floor/carpet,/area/shuttle/escape)
"aC" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/enchiladas,/turf/open/floor/carpet,/area/shuttle/escape)
"aD" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/open/floor/carpet,/area/shuttle/escape)
"aE" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/burger/baconburger,/turf/open/floor/carpet,/area/shuttle/escape)
"aF" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/benedict,/turf/open/floor/carpet,/area/shuttle/escape)
"aG" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate,/turf/open/floor/carpet,/area/shuttle/escape)
"aH" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/chowmein,/turf/open/floor/carpet,/area/shuttle/escape)
"aI" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/dulcedebatataslice,/turf/open/floor/carpet,/area/shuttle/escape)
"aJ" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/salad/validsalad,/turf/open/floor/carpet,/area/shuttle/escape)
"aK" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/carneburrito,/turf/open/floor/carpet,/area/shuttle/escape)
"aL" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/chawanmushi,/turf/open/floor/carpet,/area/shuttle/escape)
"aM" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/mineral/gold,/area/shuttle/escape)
"aN" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/melonfruitbowl,/turf/open/floor/carpet,/area/shuttle/escape)
"aO" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/khachapuri,/turf/open/floor/carpet,/area/shuttle/escape)
"aP" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/grilledcheese,/turf/open/floor/carpet,/area/shuttle/escape)
"aQ" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry,/turf/open/floor/carpet,/area/shuttle/escape)
"aR" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/honeybun,/turf/open/floor/carpet,/area/shuttle/escape)
"aS" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/eggplantparm,/turf/open/floor/carpet,/area/shuttle/escape)
"aT" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/copypasta,/turf/open/floor/carpet,/area/shuttle/escape)
"aU" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/bearsteak,/turf/open/floor/carpet,/area/shuttle/escape)
"aV" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti,/turf/open/floor/carpet,/area/shuttle/escape)
"aW" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/cherrycupcake,/turf/open/floor/carpet,/area/shuttle/escape)
"aX" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza,/turf/open/floor/carpet,/area/shuttle/escape)
"aY" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/hotdog,/turf/open/floor/carpet,/area/shuttle/escape)
"aZ" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/pie/grapetart,/turf/open/floor/carpet,/area/shuttle/escape)
"ba" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/burger/superbite,/turf/open/floor/carpet,/area/shuttle/escape)
"bb" = (/obj/structure/table/wood/fancy,/obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake,/turf/open/floor/carpet,/area/shuttle/escape)
"bc" = (/obj/machinery/computer/station_alert,/turf/open/floor/mineral/gold,/area/shuttle/escape)
"bd" = (/obj/structure/chair/comfy{tag = "icon-comfychair (NORTH)";icon_state = "comfychair";dir = 1},/turf/open/floor/carpet,/area/shuttle/escape)
"be" = (/obj/machinery/computer/crew,/turf/open/floor/mineral/gold,/area/shuttle/escape)
"bf" = (/obj/machinery/sleeper{tag = "icon-sleeper-open (EAST)";icon_state = "sleeper-open";dir = 4},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"bg" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21";layer = 4.1;pixel_x = -3;pixel_y = 3},/turf/open/floor/mineral/gold,/area/shuttle/escape)
"bh" = (/turf/open/floor/plating/beach/coastline_b,/area/shuttle/escape)
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/open/space,
/area/space)
"ab" = (
/turf/closed/indestructible/riveted/uranium,
/area/shuttle/escape)
"ac" = (
/obj/machinery/door/airlock/external,
/turf/open/floor/plating{
tag = "icon-wood-broken2";
icon_state = "wood-broken2"
},
/area/shuttle/escape)
"ad" = (
/obj/machinery/door/airlock/gold,
/obj/effect/forcefield/luxury_shuttle{
name = "Ticket Booth"
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"ae" = (
/obj/docking_port/mobile/emergency{
dir = 2;
dwidth = 5;
height = 14;
name = "Luxury emergency shuttle";
timid = 1;
width = 25
},
/obj/machinery/door/airlock/gold,
/obj/effect/forcefield/luxury_shuttle{
name = "Ticket Booth"
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"af" = (
/turf/open/floor/plating{
tag = "icon-wood-broken3";
icon_state = "wood-broken3"
},
/area/shuttle/escape)
"ag" = (
/turf/open/floor/plating{
tag = "icon-wood";
icon_state = "wood"
},
/area/shuttle/escape)
"ah" = (
/turf/open/floor/plating{
tag = "icon-wood-broken";
icon_state = "wood-broken"
},
/area/shuttle/escape)
"ai" = (
/turf/open/floor/plating{
tag = "icon-wood-broken5";
icon_state = "wood-broken5"
},
/area/shuttle/escape)
"aj" = (
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"ak" = (
/obj/item/weapon/twohanded/required/kirbyplants{
tag = "icon-plant-10";
icon_state = "plant-10"
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"al" = (
/obj/structure/mirror{
pixel_y = 32
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"am" = (
/turf/open/floor/plating{
tag = "icon-wood-broken7";
icon_state = "wood-broken7"
},
/area/shuttle/escape)
"an" = (
/turf/open/floor/plating{
tag = "icon-wood-broken2";
icon_state = "wood-broken2"
},
/area/shuttle/escape)
"ao" = (
/turf/open/floor/plating{
tag = "icon-wood-broken6";
icon_state = "wood-broken6"
},
/area/shuttle/escape)
"ap" = (
/obj/structure/toilet{
dir = 4;
icon_state = "toilet00";
tag = "icon-toilet00 (NORTH)"
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"aq" = (
/obj/machinery/door/airlock/gold,
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"ar" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"as" = (
/obj/structure/shuttle/engine/heater{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"at" = (
/turf/open/floor/carpet,
/area/shuttle/escape)
"au" = (
/obj/structure/chair/comfy,
/turf/open/floor/carpet,
/area/shuttle/escape)
"av" = (
/obj/structure/chair/comfy{
tag = "icon-comfychair (EAST)";
icon_state = "comfychair";
dir = 4
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"aw" = (
/obj/machinery/computer/communications,
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"ax" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/meatballspaghetti,
/turf/open/floor/carpet,
/area/shuttle/escape)
"ay" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/notasandwich,
/turf/open/floor/carpet,
/area/shuttle/escape)
"az" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/pastatomato,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aA" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/kebab/tofu,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aB" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/honkdae,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aC" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/enchiladas,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aD" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/candiedapple,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aE" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/burger/baconburger,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aF" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/benedict,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aG" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aH" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/chowmein,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aI" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/dulcedebatataslice,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aJ" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/salad/validsalad,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aK" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/carneburrito,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aL" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/chawanmushi,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aM" = (
/obj/machinery/computer/emergency_shuttle,
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"aN" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/melonfruitbowl,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aO" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/khachapuri,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aP" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/grilledcheese,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aQ" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aR" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/honeybun,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aS" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/eggplantparm,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aT" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/copypasta,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aU" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/bearsteak,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aV" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aW" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/cherrycupcake,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aX" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aY" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/hotdog,
/turf/open/floor/carpet,
/area/shuttle/escape)
"aZ" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/pie/grapetart,
/turf/open/floor/carpet,
/area/shuttle/escape)
"ba" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/burger/superbite,
/turf/open/floor/carpet,
/area/shuttle/escape)
"bb" = (
/obj/structure/table/wood/fancy,
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake,
/turf/open/floor/carpet,
/area/shuttle/escape)
"bc" = (
/obj/machinery/computer/station_alert,
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"bd" = (
/obj/structure/chair/comfy{
tag = "icon-comfychair (NORTH)";
icon_state = "comfychair";
dir = 1
},
/turf/open/floor/carpet,
/area/shuttle/escape)
"be" = (
/obj/machinery/computer/crew,
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"bf" = (
/obj/machinery/sleeper{
tag = "icon-sleeper-open (EAST)";
icon_state = "sleeper-open";
dir = 4
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"bg" = (
/obj/item/weapon/twohanded/required/kirbyplants{
icon_state = "plant-21";
layer = 4.1;
pixel_x = -3;
pixel_y = 3
},
/turf/open/floor/mineral/gold,
/area/shuttle/escape)
"bh" = (
/turf/open/floor/plating/beach/coastline_b,
/area/shuttle/escape)
(1,1,1) = {"
aaababababababababababacabadabababababaeababababab
ababafagagagahagagaiagagabajajajajajajajabakajalab
abamaganagagagagagaoagafabajajajajajajajabapajajab
abababababababababababababajajajajajajajabababaqab
abababakajajajajajajajajajajajajajajajajajajajajab
arasabajatauauauauauauauauauauauauauauauatajavawab
arasabajataxayazaAaBaCaDaEaFaGaHaIaJaKaLatajavaMab
arasabajataNaOaPaQaRaSaTaUaVaWaXaYaZbabbatajavbcab
arasabajatbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdatajavbeab
abababajajajajajajajajajajajajajajajajajajajajajab
abbfajajajajajajajajajajajajajajajajajajajajajajab
abbfajajajbgbhbhbhbhbhbhbhbhbhbhbhbhbhbgajajajajab
abababakajbgbhbhbhbhbhbhbhbhbhbhbhbhbhbgajajajakab
aaabababababababababababababababababababababababab
aa
ab
ab
ab
ab
ar
ar
ar
ar
ab
ab
ab
ab
aa
"}
(2,1,1) = {"
ab
ab
am
ab
ab
as
as
as
as
ab
bf
bf
ab
ab
"}
(3,1,1) = {"
ab
af
ag
ab
ab
ab
ab
ab
ab
ab
aj
aj
ab
ab
"}
(4,1,1) = {"
ab
ag
an
ab
ak
aj
aj
aj
aj
aj
aj
aj
ak
ab
"}
(5,1,1) = {"
ab
ag
ag
ab
aj
at
at
at
at
aj
aj
aj
aj
ab
"}
(6,1,1) = {"
ab
ag
ag
ab
aj
au
ax
aN
bd
aj
aj
bg
bg
ab
"}
(7,1,1) = {"
ab
ah
ag
ab
aj
au
ay
aO
bd
aj
aj
bh
bh
ab
"}
(8,1,1) = {"
ab
ag
ag
ab
aj
au
az
aP
bd
aj
aj
bh
bh
ab
"}
(9,1,1) = {"
ab
ag
ag
ab
aj
au
aA
aQ
bd
aj
aj
bh
bh
ab
"}
(10,1,1) = {"
ab
ai
ao
ab
aj
au
aB
aR
bd
aj
aj
bh
bh
ab
"}
(11,1,1) = {"
ab
ag
ag
ab
aj
au
aC
aS
bd
aj
aj
bh
bh
ab
"}
(12,1,1) = {"
ac
ag
af
ab
aj
au
aD
aT
bd
aj
aj
bh
bh
ab
"}
(13,1,1) = {"
ab
ab
ab
ab
aj
au
aE
aU
bd
aj
aj
bh
bh
ab
"}
(14,1,1) = {"
ad
aj
aj
aj
aj
au
aF
aV
bd
aj
aj
bh
bh
ab
"}
(15,1,1) = {"
ab
aj
aj
aj
aj
au
aG
aW
bd
aj
aj
bh
bh
ab
"}
(16,1,1) = {"
ab
aj
aj
aj
aj
au
aH
aX
bd
aj
aj
bh
bh
ab
"}
(17,1,1) = {"
ab
aj
aj
aj
aj
au
aI
aY
bd
aj
aj
bh
bh
ab
"}
(18,1,1) = {"
ab
aj
aj
aj
aj
au
aJ
aZ
bd
aj
aj
bh
bh
ab
"}
(19,1,1) = {"
ab
aj
aj
aj
aj
au
aK
ba
bd
aj
aj
bh
bh
ab
"}
(20,1,1) = {"
ae
aj
aj
aj
aj
au
aL
bb
bd
aj
aj
bg
bg
ab
"}
(21,1,1) = {"
ab
ab
ab
ab
aj
at
at
at
at
aj
aj
aj
aj
ab
"}
(22,1,1) = {"
ab
ak
ap
ab
aj
aj
aj
aj
aj
aj
aj
aj
aj
ab
"}
(23,1,1) = {"
ab
aj
aj
ab
aj
av
av
av
av
aj
aj
aj
aj
ab
"}
(24,1,1) = {"
ab
al
aj
aq
aj
aw
aM
bc
be
aj
aj
aj
ak
ab
"}
(25,1,1) = {"
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
ab
"}
+23 -23
View File
@@ -73,8 +73,8 @@
/area/shuttle/abandoned)
"ak" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_l";
dir = 4
dir = 8;
icon_state = "propulsion_l"
},
/turf/open/floor/plating/airless,
/area/shuttle/abandoned)
@@ -236,8 +236,8 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"az" = (
/obj/structure/closet/crate{
@@ -254,8 +254,8 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"aA" = (
/obj/item/weapon/storage/box/lights/mixed,
@@ -277,8 +277,8 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"aB" = (
/obj/structure/closet/crate{
@@ -304,13 +304,13 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"aC" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion";
dir = 4
dir = 8;
icon_state = "propulsion"
},
/turf/open/floor/plating/airless,
/area/shuttle/abandoned)
@@ -431,10 +431,10 @@
/obj/machinery/door/airlock/titanium{
name = "cargo bay"
},
/turf/open/floor/plasteel{
/obj/effect/turf_decal/delivery{
dir = 1
},
/obj/effect/turf_decal/delivery{
/turf/open/floor/plasteel{
dir = 1
},
/area/shuttle/abandoned)
@@ -444,10 +444,10 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel{
/obj/effect/turf_decal/delivery{
dir = 1
},
/obj/effect/turf_decal/delivery{
/turf/open/floor/plasteel{
dir = 1
},
/area/shuttle/abandoned)
@@ -456,10 +456,10 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel{
/obj/effect/turf_decal/delivery{
dir = 1
},
/obj/effect/turf_decal/delivery{
/turf/open/floor/plasteel{
dir = 1
},
/area/shuttle/abandoned)
@@ -470,10 +470,10 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel{
/obj/effect/turf_decal/delivery{
dir = 1
},
/obj/effect/turf_decal/delivery{
/turf/open/floor/plasteel{
dir = 1
},
/area/shuttle/abandoned)
@@ -594,8 +594,8 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"bb" = (
/obj/structure/closet/emcloset,
@@ -603,8 +603,8 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"bc" = (
/obj/structure/closet/firecloset/full,
@@ -612,8 +612,8 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"bd" = (
/obj/machinery/door/airlock/titanium{
@@ -695,10 +695,10 @@
desc = "A thin layer of dust coating the floor.";
name = "dust"
},
/turf/open/floor/plasteel{
/obj/effect/turf_decal/delivery{
dir = 1
},
/obj/effect/turf_decal/delivery{
/turf/open/floor/plasteel{
dir = 1
},
/area/shuttle/abandoned)
@@ -1551,8 +1551,8 @@
/area/shuttle/abandoned)
"cO" = (
/obj/structure/shuttle/engine/propulsion{
icon_state = "propulsion_r";
dir = 4
dir = 8;
icon_state = "propulsion_r"
},
/turf/open/floor/plating/airless,
/area/shuttle/abandoned)
+233 -28
View File
@@ -1,31 +1,236 @@
"a" = (/turf/open/space,/area/space)
"b" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned)
"c" = (/obj/structure/shuttle/engine/propulsion/burst{tag = "icon-propulsion (NORTH)";icon_state = "propulsion";dir = 1},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned)
"d" = (/obj/machinery/door/airlock/glass{name = "Shuttle Airlock"},/turf/open/floor/plasteel/black,/area/shuttle/abandoned)
"e" = (/turf/open/floor/plasteel/black,/area/shuttle/abandoned)
"f" = (/turf/open/floor/plasteel,/area/shuttle/abandoned)
"g" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned)
"h" = (/obj/structure/window/reinforced{dir = 1;layer = 2.9},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/glass,/obj/item/weapon/gun/medbeam,/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"i" = (/obj/structure/chair,/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"j" = (/obj/structure/window/reinforced{dir = 1;layer = 2.9},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/glass,/obj/machinery/recharger,/obj/item/weapon/gun/energy/laser/retro,/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"k" = (/obj/structure/shuttle/engine/propulsion/burst{tag = "icon-propulsion (WEST)";icon_state = "propulsion";dir = 8},/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned)
"l" = (/obj/structure/chair{dir = 4},/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"m" = (/obj/machinery/computer/shuttle/white_ship,/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"n" = (/obj/structure/chair{dir = 8},/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"o" = (/obj/machinery/door/airlock/glass{name = "Shuttle Airlock"},/obj/docking_port/mobile{dheight = 0;dir = 8;dwidth = 4;height = 9;id = "whiteship";launch_status = 0;name = "White Ship";port_angle = 90;preferred_direction = 1;roundstart_move = "whiteship_away";timid = 1;width = 9},/turf/open/floor/plasteel/black,/area/shuttle/abandoned)
"p" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/table/glass,/obj/item/weapon/tank/internals/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/hardsuit/engine/elite,/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"q" = (/obj/structure/chair{dir = 1},/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"r" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/table/glass,/obj/item/clothing/shoes/magboots,/turf/open/floor/plating/abductor,/area/shuttle/abandoned)
"s" = (/obj/structure/shuttle/engine/propulsion/burst,/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned)
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/open/space,
/area/space)
"b" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned)
"c" = (
/obj/structure/shuttle/engine/propulsion/burst{
tag = "icon-propulsion (NORTH)";
icon_state = "propulsion";
dir = 1
},
/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned)
"d" = (
/obj/machinery/door/airlock/glass{
name = "Shuttle Airlock"
},
/turf/open/floor/plasteel/black,
/area/shuttle/abandoned)
"e" = (
/turf/open/floor/plasteel/black,
/area/shuttle/abandoned)
"f" = (
/turf/open/floor/plasteel,
/area/shuttle/abandoned)
"g" = (
/obj/structure/shuttle/engine/propulsion/burst{
dir = 8
},
/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned)
"h" = (
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/table/glass,
/obj/item/weapon/gun/medbeam,
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"i" = (
/obj/structure/chair,
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"j" = (
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/table/glass,
/obj/machinery/recharger,
/obj/item/weapon/gun/energy/laser/retro,
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"k" = (
/obj/structure/shuttle/engine/propulsion/burst{
dir = 4;
icon_state = "propulsion";
tag = "icon-propulsion (WEST)"
},
/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned)
"l" = (
/obj/structure/chair{
dir = 4
},
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"m" = (
/obj/machinery/computer/shuttle/white_ship,
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"n" = (
/obj/structure/chair{
dir = 8
},
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"o" = (
/obj/machinery/door/airlock/glass{
name = "Shuttle Airlock"
},
/obj/docking_port/mobile{
dheight = 0;
dir = 8;
dwidth = 4;
height = 9;
id = "whiteship";
launch_status = 0;
name = "White Ship";
port_angle = 90;
preferred_direction = 1;
roundstart_move = "whiteship_away";
timid = 1;
width = 9
},
/turf/open/floor/plasteel/black,
/area/shuttle/abandoned)
"p" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced,
/obj/structure/table/glass,
/obj/item/weapon/tank/internals/oxygen,
/obj/item/clothing/mask/breath,
/obj/item/clothing/suit/space/hardsuit/engine/elite,
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"q" = (
/obj/structure/chair{
dir = 1
},
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"r" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced,
/obj/structure/table/glass,
/obj/item/clothing/shoes/magboots,
/turf/open/floor/plating/abductor,
/area/shuttle/abandoned)
"s" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/closed/wall/mineral/titanium,
/area/shuttle/abandoned)
(1,1,1) = {"
aabcdcbaa
abbefebba
bbeefeebb
geehijeek
dfflmnffo
geepqreek
bbeefeebb
abbefebba
aabsdsbaa
a
a
b
g
d
g
b
a
a
"}
(2,1,1) = {"
a
b
b
e
f
e
b
b
a
"}
(3,1,1) = {"
b
b
e
e
f
e
e
b
b
"}
(4,1,1) = {"
c
e
e
h
l
p
e
e
s
"}
(5,1,1) = {"
d
f
f
i
m
q
f
f
d
"}
(6,1,1) = {"
c
e
e
j
n
r
e
e
s
"}
(7,1,1) = {"
b
b
e
e
f
e
e
b
b
"}
(8,1,1) = {"
a
b
b
e
f
e
b
b
a
"}
(9,1,1) = {"
a
a
b
k
o
k
b
a
a
"}
+4 -4
View File
@@ -4,9 +4,9 @@
/area/space)
"b" = (
/obj/structure/shuttle/engine/propulsion/burst/left{
tag = "icon-burst_l (EAST)";
dir = 8;
icon_state = "burst_l";
dir = 4
tag = "icon-burst_l (EAST)"
},
/turf/open/space,
/area/ruin/powered{
@@ -149,9 +149,9 @@
})
"w" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
tag = "icon-burst_r (EAST)";
dir = 8;
icon_state = "burst_r";
dir = 4
tag = "icon-burst_r (EAST)"
},
/turf/open/space,
/area/ruin/powered{
+4 -4
View File
@@ -4,9 +4,9 @@
/area/space)
"b" = (
/obj/structure/shuttle/engine/propulsion/burst/left{
tag = "icon-burst_l (EAST)";
dir = 8;
icon_state = "burst_l";
dir = 4
tag = "icon-burst_l (EAST)"
},
/turf/open/space,
/area/ruin/powered{
@@ -43,9 +43,9 @@
})
"f" = (
/obj/structure/shuttle/engine/propulsion/burst/right{
tag = "icon-burst_r (EAST)";
dir = 8;
icon_state = "burst_r";
dir = 4
tag = "icon-burst_r (EAST)"
},
/turf/open/space,
/area/ruin/powered{
+4 -4
View File
@@ -93,9 +93,9 @@
})
"n" = (
/obj/structure/shuttle/engine/propulsion{
tag = "icon-propulsion (EAST)";
dir = 8;
icon_state = "propulsion";
dir = 4
tag = "icon-propulsion (EAST)"
},
/turf/open/space,
/area/ruin/powered{
@@ -129,9 +129,9 @@
})
"r" = (
/obj/structure/shuttle/engine/propulsion{
tag = "icon-propulsion (WEST)";
dir = 4;
icon_state = "propulsion";
dir = 8
tag = "icon-propulsion (WEST)"
},
/turf/open/space,
/area/ruin/powered{
+12
View File
@@ -64,3 +64,15 @@
#define MILK_RATE 5
#define MILK_RATE_MULT 1
#define MILK_EFFICIENCY 1
// Admin ticket things
#define TICKET_RESOLVED "Yes"
#define TICKET_UNRESOLVED "No"
#define TICKET_UNASSIGNED "N/A"
#define TICKET_REPLIED "Yes"
#define TICKET_UNREPLIED "No"
#define TICKET_INACTIVE "No"
#define TICKET_ACTIVE "Yes"
+9 -4
View File
@@ -12,7 +12,8 @@ var/global/list/clockwork_generals_invoked = list("nezbere" = FALSE, "sevtug" =
var/global/list/all_clockwork_objects = list() //All clockwork items, structures, and effects in existence
var/global/list/all_clockwork_mobs = list() //All clockwork SERVANTS (not creatures) in existence
var/global/list/clockwork_component_cache = list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 0, HIEROPHANT_ANSIBLE = 0) //The pool of components that caches draw from
var/global/ratvar_awakens = 0 //If Ratvar has been summoned; not a boolean, for proper handling of multiple ratvars
var/global/ratvar_awakens = 0 //If Ratvar has been summoned; not a boolean, for proper handling of multiple Ratvars
var/global/nezbere_invoked = 0 //If Nezbere has been invoked; not a boolean, for proper handling of multiple Nezberes
var/global/clockwork_gateway_activated = FALSE //if a gateway to the celestial derelict has ever been successfully activated
var/global/list/all_scripture = list() //a list containing scripture instances; not used to track existing scripture
@@ -48,7 +49,9 @@ var/global/list/all_scripture = list() //a list containing scripture instances;
#define MAX_COMPONENTS_BEFORE_RAND (10*LOWER_PROB_PER_COMPONENT) //the number of each component, times LOWER_PROB_PER_COMPONENT, you need to have before component generation will become random
#define CLOCKWORK_GENERAL_COOLDOWN 3000 //how long clockwork generals go on cooldown after use, defaults to 5 minutes
#define GLOBAL_CLOCKWORK_GENERAL_COOLDOWN 3000 //how long globally-affecting clockwork generals go on cooldown after use, defaults to 5 minutes
#define CLOCKWORK_GENERAL_COOLDOWN 2000 //how long clockwork generals go on cooldown after use, defaults to 3 minutes 20 seconds
//clockcult power defines
#define MIN_CLOCKCULT_POWER 25 //the minimum amount of power clockcult machines will handle gracefully
@@ -83,9 +86,9 @@ var/global/list/all_scripture = list() //a list containing scripture instances;
#define GATEWAY_RATVAR_ARRIVAL 300 //when progress is at or above this, game over ratvar's here everybody go home
//Objective defines
#define CLOCKCULT_GATEWAY "gateway"
#define CLOCKCULT_GATEWAY "summon ratvar"
#define CLOCKCULT_ESCAPE "escape"
#define CLOCKCULT_ESCAPE "proselytize the station"
//misc clockcult stuff
#define MARAUDER_EMERGE_THRESHOLD 65 //marauders cannot emerge unless host is at this% or less health
@@ -95,3 +98,5 @@ var/global/list/all_scripture = list() //a list containing scripture instances;
#define PROSELYTIZER_REPAIR_PER_TICK 4 //how much a proselytizer repairs each tick, and also how many deciseconds each tick is
#define OCULAR_WARDEN_EXCLUSION_RANGE 3 //the range at which ocular wardens cannot be placed near other ocular wardens
#define RATVARIAN_SPEAR_DURATION 1800 //how long ratvarian spears last; defaults to 3 minutes
+9
View File
@@ -132,4 +132,13 @@
#define IS_SHARP 1
#define IS_SHARP_ACCURATE 2
//His Grace.
#define HIS_GRACE_SATIATED 0 //He hungers not. If bloodthirst is set to this, His Grace is asleep.
#define HIS_GRACE_PECKISH 20 //Slightly hungry.
#define HIS_GRACE_HUNGRY 60 //Getting closer. Increases damage up to a minimum of 20.
#define HIS_GRACE_FAMISHED 100 //Dangerous. Increases damage up to a minimum of 25 and cannot be dropped.
#define HIS_GRACE_STARVING 120 //Incredibly close to breaking loose. Increases damage up to a minimum of 30.
#define HIS_GRACE_CONSUME_OWNER 140 //His Grace consumes His owner at this point and becomes aggressive.
#define HIS_GRACE_FALL_ASLEEP 160 //If it reaches this point, He falls asleep and resets.
#define HIS_GRACE_FORCE_BONUS 4 //How much force is gained per kill.
+7 -2
View File
@@ -9,6 +9,7 @@
#define GIRDER_DISPLACED 3
#define GIRDER_DISASSEMBLED 4
//rwall construction states
#define INTACT 0
#define SUPPORT_LINES 1
@@ -18,6 +19,10 @@
#define SUPPORT_RODS 5
#define SHEATH 6
//plastic flaps construction states
#define PLASTIC_FLAPS_NORMAL 0
#define PLASTIC_FLAPS_DETACHED 1
//default_unfasten_wrench() return defines
#define CANT_UNFASTEN 0
#define FAILED_UNFASTEN 1
@@ -49,8 +54,7 @@
//Construction defines for the pinion airlock
#define GEAR_SECURE 1
#define GEAR_UNFASTENED 2
#define GEAR_LOOSE 3
#define GEAR_LOOSE 2
//other construction-related things
@@ -68,6 +72,7 @@
#define MAT_DIAMOND "$diamond"
#define MAT_URANIUM "$uranium"
#define MAT_PLASMA "$plasma"
#define MAT_BLUESPACE "$bluespace"
#define MAT_BANANIUM "$bananium"
#define MAT_TITANIUM "$titanium"
#define MAT_BIOMASS "$biomass"
+1 -1
View File
@@ -16,7 +16,7 @@
#define CONDUCT 64 // conducts electricity (metal etc.)
#define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way
#define NODECONSTRUCT 128 // For machines and structures that should not break into parts, eg, holodeck stuff
#define FPRINT 256 // takes a fingerprint
#define OVERLAY_QUEUED 256 //atom queued to SSoverlay
#define ON_BORDER 512 // item has priority to check when entering or leaving
#define EARBANGPROTECT 1024
+2
View File
@@ -128,6 +128,8 @@ var/list/static/global/pointed_types = typecacheof(list(
#define is_pointed(W) (is_type_in_typecache(W, pointed_types))
#define isbodypart(A) (istype(A, /obj/item/bodypart))
//Assemblies
#define isassembly(O) (istype(O, /obj/item/device/assembly))
+3
View File
@@ -74,3 +74,6 @@
#define HUD_LAYER 19
#define ABOVE_HUD_PLANE 20
#define ABOVE_HUD_LAYER 20
#define SPLASHSCREEN_LAYER 21
#define SPLASHSCREEN_PLANE 21
+4
View File
@@ -16,8 +16,12 @@
#define STATUS_EFFECT_POWERREGEN /datum/status_effect/cyborg_power_regen //Regenerates power on a given cyborg over time
#define STATUS_EFFECT_HISGRACE /datum/status_effect/his_grace //His Grace.
/////////////
// DEBUFFS //
/////////////
#define STATUS_EFFECT_SIGILMARK /datum/status_effect/sigil_mark
#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath.
+1 -1
View File
@@ -3,5 +3,5 @@
#define TICK_LIMIT_MC 70
#define TICK_LIMIT_MC_INIT_DEFAULT 98
#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ? stoplag() : 0 )
#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT )
#define CHECK_TICK if (world.tick_usage > CURRENT_TICKLIMIT) stoplag()
@@ -465,4 +465,35 @@
#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 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
+8 -2
View File
@@ -22,9 +22,15 @@
if (config.log_admin)
diary << "\[[time_stamp()]]ADMIN: [text]"
//Items using this proc are stripped from public logs - use with caution
/proc/log_admin_private(text)
admin_log.Add(text)
if (config.log_admin)
diary << "\[[time_stamp()]]ADMINPRIVATE: [text]"
/proc/log_adminsay(text)
if (config.log_adminchat)
log_admin("ASAY: [text]")
log_admin_private("ASAY: [text]")
/proc/log_dsay(text)
if (config.log_adminchat)
@@ -108,4 +114,4 @@
if(istype(T))
return "[A.loc] [COORD(T)] ([A.loc.type])"
else if(A.loc)
return "[A.loc] (0, 0, 0) ([A.loc.type])"
return "[A.loc] (0, 0, 0) ([A.loc.type])"
+2 -8
View File
@@ -17,12 +17,6 @@
var/area/Y = get_area(X)
return Y.name
/proc/get_area_master(O)
var/area/A = get_area(O)
if(A && A.master)
A = A.master
return A
/proc/get_area_by_name(N) //get area by its name
for(var/area/A in world)
if(A.name == N)
@@ -81,13 +75,13 @@
return heard
/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon)
var/area/our_area = get_area_master(the_area)
var/area/our_area = get_area(the_area)
for(var/C in living_mob_list)
if(!istype(C, check_type))
continue
if(C == must_be_alone)
continue
if(our_area == get_area_master(C))
if(our_area == get_area(C))
return 0
return 1
+15 -16
View File
@@ -238,32 +238,31 @@
else if(adjacencies & N_EAST)
se = "4-e"
var/list/New = list()
var/list/New
if(A.top_left_corner != nw)
A.overlays -= A.top_left_corner
A.cut_overlay(A.top_left_corner)
A.top_left_corner = nw
New += nw
LAZYADD(New, nw)
if(A.top_right_corner != ne)
A.overlays -= A.top_right_corner
A.cut_overlay(A.top_right_corner)
A.top_right_corner = ne
New += ne
LAZYADD(New, ne)
if(A.bottom_right_corner != sw)
A.overlays -= A.bottom_right_corner
A.cut_overlay(A.bottom_right_corner)
A.bottom_right_corner = sw
New += sw
LAZYADD(New, sw)
if(A.bottom_left_corner != se)
A.overlays -= A.bottom_left_corner
A.cut_overlay(A.bottom_left_corner)
A.bottom_left_corner = se
New += se
if(New.len)
LAZYADD(New, se)
if(New)
A.add_overlay(New)
/proc/find_type_in_direction(atom/source, direction)
var/turf/target_turf = get_step(source, direction)
if(!target_turf)
@@ -312,13 +311,13 @@
queue_smooth(A)
/atom/proc/clear_smooth_overlays()
overlays -= top_left_corner
cut_overlay(top_left_corner)
top_left_corner = null
overlays -= top_right_corner
cut_overlay(top_right_corner)
top_right_corner = null
overlays -= bottom_right_corner
cut_overlay(bottom_right_corner)
bottom_right_corner = null
overlays -= bottom_left_corner
cut_overlay(bottom_left_corner)
bottom_left_corner = null
/atom/proc/replace_smooth_overlays(nw, ne, sw, se)
-21
View File
@@ -943,27 +943,6 @@ var/global/list/friendly_animal_types = list()
return J
return 0
/atom/proc/cut_overlays()
overlays.Cut()
overlays += priority_overlays
/atom/proc/add_overlay(image, priority = 0)
var/list/new_overlays = overlays.Copy()
new_overlays -= image
if(priority)
if(!priority_overlays)
priority_overlays = list()
priority_overlays += image
new_overlays += image
else
if(priority_overlays)
new_overlays -= priority_overlays
new_overlays += image
new_overlays += priority_overlays
else
new_overlays += image
overlays = new_overlays
var/global/list/humanoid_icon_cache = list()
//For creating consistent icons for human looking simple animals
/proc/get_flat_human_icon(var/icon_id,var/outfit,var/datum/preferences/prefs)
+4 -2
View File
@@ -21,8 +21,10 @@
//return 1
//returns timestamp in a sql and ISO 8601 friendly format
/proc/SQLtime()
return time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
/proc/SQLtime(timevar)
if(!timevar)
timevar = world.realtime
return time2text(timevar, "YYYY-MM-DD hh:mm:ss")
/var/midnight_rollovers = 0
+58 -1
View File
@@ -1191,7 +1191,7 @@ B --><-- A
return
A.add_overlay(I)
sleep(duration)
A.overlays -= I
A.cut_overlay(I)
/proc/get_areas_in_z(zlevel)
. = list()
@@ -1286,6 +1286,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
#define QDEL_IN(item, time) addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, item), time, TIMER_STOPPABLE)
#define QDEL_NULL(item) qdel(item); item = null
/proc/random_nukecode()
var/val = rand(0, 99999)
@@ -1336,3 +1337,59 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR)
return FALSE
return TRUE
//WHATEVER YOU USE THIS FOR MUST BE SANITIZED TO SHIT, IT USES SHELL
//It also sleeps
//Set this to TRUE before calling
//This prevents RCEs from badmins
//kevinz000 if you touch this I will hunt you down
var/valid_HTTPSGet = FALSE
/proc/HTTPSGet(url)
if(findtext(url, "\""))
valid_HTTPSGet = FALSE
if(!valid_HTTPSGet)
if(usr)
CRASH("[usr.ckey]([usr]) just attempted an invalid HTTPSGet on: [url]!")
else
CRASH("Invalid HTTPSGet call on: [url]")
valid_HTTPSGet = FALSE
//"This has got to be the ugliest hack I have ever done"
//warning, here be dragons
/*
| @___oo
/\ /\ / (__,,,,|
) /^\) ^\/ _)
) /^\/ _)
) _ / / _)
/\ )/\/ || | )_)
< > |(,,) )__)
|| / \)___)\
| \____( )___) )___
\______(_______;;; __;;;
*/
var/temp_file = "HTTPSGetOutput.txt"
var/command
if(world.system_type == MS_WINDOWS)
command = "powershell -Command \"wget [url] -OutFile [temp_file]\""
else if(world.system_type == UNIX)
command = "wget -O [temp_file] [url]"
else
CRASH("Invalid world.system_type ([world.system_type])? Yell at Lummox.")
world.log << "HTTPSGet: [url]"
var/result = shell(command)
if(result != 0)
world.log << "Download failed: shell exited with code: [result]"
return
var/f = file(temp_file)
if(!f)
world.log << "Download failed: Temp file not found"
return
. = file2text(f)
f = null
fdel(temp_file)
-3
View File
@@ -9,9 +9,6 @@ var/changelog_hash = ""
var/ooc_allowed = 1 // used with admin verbs to disable ooc - not a config option apparently
var/dooc_allowed = 1
//citadel code
var/looc_allowed = 1
var/dlooc_allowed = 1
var/abandon_allowed = 1
var/enter_allowed = 1
var/guests_allowed = 1
-10
View File
@@ -55,14 +55,4 @@ var/list/awaydestinations = list() //a list of landmarks that the warpgate can t
//used by jump-to-area etc. Updated by area/updateName()
var/list/sortedAreas = list()
//List of preloaded templates
var/list/datum/map_template/map_templates = list()
var/list/datum/map_template/ruins_templates = list()
var/list/datum/map_template/space_ruins_templates = list()
var/list/datum/map_template/lava_ruins_templates = list()
var/list/datum/map_template/shuttle_templates = list()
var/list/datum/map_template/shelter_templates = list()
var/list/transit_markers = list()
+3 -2
View File
@@ -14,8 +14,9 @@
moved = 0
usr.update_action_buttons() //redraw buttons that are no longer considered "moved"
return 1
if(usr.next_move >= world.time) // Is this needed ?
if(usr.next_click > world.time)
return
usr.next_click = world.time + 1
linked_action.Trigger()
return 1
@@ -71,7 +72,7 @@
. = list()
.["bg_icon"] = ui_style_icon
.["bg_state"] = "template"
//TODO : Make these fit theme
.["toggle_icon"] = 'icons/mob/actions.dmi'
.["toggle_hide"] = "hide"
+58 -52
View File
@@ -16,49 +16,49 @@
if(!category)
return
var/obj/screen/alert/alert
var/obj/screen/alert/thealert
if(alerts[category])
alert = alerts[category]
if(new_master && new_master != alert.master)
WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [alert.master]")
thealert = alerts[category]
if(new_master && new_master != thealert.master)
WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [thealert.master]")
clear_alert(category)
return .()
else if(alert.type != type)
else if(thealert.type != type)
clear_alert(category)
return .()
else if(!severity || severity == alert.severity)
if(alert.timeout)
else if(!severity || severity == thealert.severity)
if(thealert.timeout)
clear_alert(category)
return .()
else //no need to update
return 0
else
alert = new type()
thealert = new type()
if(new_master)
var/old_layer = new_master.layer
var/old_plane = new_master.plane
new_master.layer = FLOAT_LAYER
new_master.plane = FLOAT_PLANE
alert.overlays += new_master
thealert.add_overlay(new_master)
new_master.layer = old_layer
new_master.plane = old_plane
alert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts()
alert.master = new_master
thealert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts()
thealert.master = new_master
else
alert.icon_state = "[initial(alert.icon_state)][severity]"
alert.severity = severity
thealert.icon_state = "[initial(thealert.icon_state)][severity]"
thealert.severity = severity
alerts[category] = alert
alerts[category] = thealert
if(client && hud_used)
hud_used.reorganize_alerts()
alert.transform = matrix(32, 6, MATRIX_TRANSLATE)
animate(alert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
thealert.transform = matrix(32, 6, MATRIX_TRANSLATE)
animate(thealert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
if(alert.timeout)
addtimer(CALLBACK(src, .proc/alert_timeout, alert, category), alert.timeout)
alert.timeout = world.time + alert.timeout - world.tick_lag
return alert
if(thealert.timeout)
addtimer(CALLBACK(src, .proc/alert_timeout, thealert, category), thealert.timeout)
thealert.timeout = world.time + thealert.timeout - world.tick_lag
return thealert
/mob/proc/alert_timeout(obj/screen/alert/alert, category)
if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout)
@@ -286,17 +286,15 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
else
name = "Next Tier Requirements"
var/validservants = 0
var/unconverted_ais_exist = FALSE
var/unconverted_ais_exist = get_unconverted_ais()
for(var/mob/living/L in living_mob_list)
if(is_servant_of_ratvar(L) && (ishuman(L) || issilicon(L)))
validservants++
else if(isAI(L))
unconverted_ais_exist++
var/req_servants = 0
var/req_caches = 0
var/req_cv = 0
var/req_ai = FALSE
desc = "Requirements for <b>[current_state] Scripture:</b>"
var/list/textlist = list("Requirements for <b>[current_state] Scripture:</b>")
switch(current_state) //get our requirements based on the tier
if(SCRIPTURE_SCRIPT)
req_servants = SCRIPT_SERVANT_REQ
@@ -314,31 +312,32 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
req_caches = JUDGEMENT_CACHE_REQ
req_cv = JUDGEMENT_CV_REQ
req_ai = TRUE
desc += "<br><b>[validservants]/[req_servants]</b> Servants"
textlist += "<br><b>[validservants]/[req_servants]</b> Servants"
if(validservants < req_servants)
icon_state += "-servants" //in this manner, generate an icon key based on what we're missing
else
desc += ": <b><font color=#5A6068>\[CHECK\]</font></b>"
desc += "<br><b>[clockwork_caches]/[req_caches]</b> Tinkerer's Caches"
textlist += ": <b><font color=#5A6068>\[CHECK\]</font></b>"
textlist += "<br><b>[clockwork_caches]/[req_caches]</b> Tinkerer's Caches"
if(clockwork_caches < req_caches)
icon_state += "-caches"
else
desc += ": <b><font color=#5A6068>\[CHECK\]</font></b>"
textlist += ": <b><font color=#5A6068>\[CHECK\]</font></b>"
if(req_cv) //cv only shows up if the tier requires it
desc += "<br><b>[clockwork_construction_value]/[req_cv]</b> Construction Value"
textlist += "<br><b>[clockwork_construction_value]/[req_cv]</b> Construction Value"
if(clockwork_construction_value < req_cv)
icon_state += "-cv"
else
desc += ": <b><font color=#5A6068>\[CHECK\]</font></b>"
textlist += ": <b><font color=#5A6068>\[CHECK\]</font></b>"
if(req_ai) //same for ai
if(unconverted_ais_exist)
if(unconverted_ais_exist > 1)
desc += "<br><b>[unconverted_ais_exist] unconverted AIs exist!</b><br>"
textlist += "<br><b>[unconverted_ais_exist] unconverted AIs exist!</b><br>"
else
desc += "<br><b>An unconverted AI exists!</b>"
textlist += "<br><b>An unconverted AI exists!</b>"
icon_state += "-ai"
else
desc += "<br>No unconverted AIs exist: <b><font color=#5A6068>\[CHECK\]</font></b>"
textlist += "<br>No unconverted AIs exist: <b><font color=#5A6068>\[CHECK\]</font></b>"
desc = textlist.Join()
/obj/screen/alert/clockwork/infodump
name = "Global Records"
@@ -351,55 +350,62 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
else
var/servants = 0
var/validservants = 0
var/unconverted_ais_exist = FALSE
var/unconverted_ais_exist = get_unconverted_ais()
var/list/scripture_states = scripture_unlock_check()
var/list/textlist
for(var/mob/living/L in living_mob_list)
if(is_servant_of_ratvar(L))
servants++
if(ishuman(L) || issilicon(L))
validservants++
else if(isAI(L))
unconverted_ais_exist++
if(servants > 1)
if(validservants > 1)
desc = "<b>[servants]</b> Servants, <b>[validservants]</b> of which count towards scripture.<br>"
textlist = list("<b>[servants]</b> Servants, <b>[validservants]</b> of which count towards scripture.<br>")
else
desc = "<b>[servants]</b> Servants, [validservants ? "<b>[validservants]</b> of which counts":"none of which count"] towards scripture.<br>"
textlist = list("<b>[servants]</b> Servants, [validservants ? "<b>[validservants]</b> of which counts":"none of which count"] towards scripture.<br>")
else
desc = "<b>[servants]</b> Servant, who [validservants ? "counts":"does not count"] towards scripture.<br>"
desc += "<b>[clockwork_caches ? "[clockwork_caches]</b> Tinkerer's Caches.":"No Tinkerer's Caches, construct one!</b>"]<br>\
textlist = list("<b>[servants]</b> Servant, who [validservants ? "counts":"does not count"] towards scripture.<br>")
textlist += "<b>[clockwork_caches ? "[clockwork_caches]</b> Tinkerer's Caches.":"No Tinkerer's Caches, construct one!</b>"]<br>\
<b>[clockwork_construction_value]</b> Construction Value.<br>"
if(clockwork_daemons)
desc += "<b>[clockwork_daemons]</b> Tinkerer's Daemons: <b>[servants * 0.2 < clockwork_daemons ? "DISABLED":"ACTIVE"]</b><br>"
textlist += "<b>[clockwork_daemons]</b> Tinkerer's Daemons: <b>[servants * 0.2 < clockwork_daemons ? "DISABLED":"ACTIVE"]</b><br>"
else
desc += "No Tinkerer's Daemons.<br>"
textlist += "No Tinkerer's Daemons.<br>"
for(var/obj/structure/destructible/clockwork/massive/celestial_gateway/G in all_clockwork_objects)
var/area/gate_area = get_area(G)
desc += "Ark Location: <b>[uppertext(gate_area.map_name)]</b><br>"
if(G.ratvar_portal)
desc += "Seconds until Ratvar's arrival: <b>[G.get_arrival_text(TRUE)]</b><br>"
textlist += "Ark Location: <b>[uppertext(gate_area.map_name)]</b><br>"
if(G.still_needs_components())
textlist += "Ark Components required: "
for(var/i in G.required_components)
if(G.required_components[i])
textlist += "<b><font color=[get_component_color_bright(i)]>[G.required_components[i]]</font></b> "
textlist += "<br>"
else
desc += "Seconds until Proselytization: <b>[G.get_arrival_text(TRUE)]</b><br>"
if(G.ratvar_portal)
textlist += "Seconds until Ratvar's arrival: <b>[G.get_arrival_text(TRUE)]</b><br>"
else
textlist += "Seconds until Proselytization: <b>[G.get_arrival_text(TRUE)]</b><br>"
if(unconverted_ais_exist)
if(unconverted_ais_exist > 1)
desc += "<b>[unconverted_ais_exist] unconverted AIs exist!</b><br>"
textlist += "<b>[unconverted_ais_exist] unconverted AIs exist!</b><br>"
else
desc += "<b>An unconverted AI exists!</b><br>"
textlist += "<b>An unconverted AI exists!</b><br>"
if(scripture_states[SCRIPTURE_REVENANT])
var/inathneq_available = clockwork_generals_invoked["inath-neq"] <= world.time
var/sevtug_available = clockwork_generals_invoked["sevtug"] <= world.time
var/nezbere_available = clockwork_generals_invoked["nezbere"] <= world.time
var/nezcrentr_available = clockwork_generals_invoked["nzcrentr"] <= world.time
if(inathneq_available || sevtug_available || nezbere_available || nezcrentr_available)
desc += "Generals available:<b>[inathneq_available ? "<br><font color=#1E8CE1>INATH-NEQ</font>":""][sevtug_available ? "<br><font color=#AF0AAF>SEVTUG</font>":""]\
textlist += "Generals available:<b>[inathneq_available ? "<br><font color=#1E8CE1>INATH-NEQ</font>":""][sevtug_available ? "<br><font color=#AF0AAF>SEVTUG</font>":""]\
[nezbere_available ? "<br><font color=#5A6068>NEZBERE</font>":""][nezcrentr_available ? "<br><font color=#DAAA18>NZCRENTR</font>":""]</b><br>"
else
desc += "Generals available: <b>NONE</b><br>"
textlist += "Generals available: <b>NONE</b><br>"
else
desc += "Generals available: <b>NONE</b><br>"
textlist += "Generals available: <b>NONE</b><br>"
for(var/i in scripture_states)
if(i != SCRIPTURE_DRIVER) //ignore the always-unlocked stuff
desc += "[i] Scripture: <b>[scripture_states[i] ? "UNLOCKED":"LOCKED"]</b><br>"
textlist += "[i] Scripture: <b>[scripture_states[i] ? "UNLOCKED":"LOCKED"]</b><br>"
desc = textlist.Join()
..()
//GUARDIANS
+10 -4
View File
@@ -36,7 +36,12 @@
/datum/hud/proc/apply_parallax_pref()
var/client/C = mymob.client
if(C.prefs)
if(C.prefs)
var/pref = C.prefs.parallax
if (isnull(pref))
pref = PARALLAX_HIGH
if (C.byond_version < 511)
pref = PARALLAX_DISABLE
switch(C.prefs.parallax)
if (PARALLAX_INSANE)
C.parallax_throttle = FALSE
@@ -220,8 +225,9 @@
/obj/screen/parallax_layer/proc/update_o(view)
if (!view)
view = world.view
var/list/new_overlays = list()
var/count = Ceiling(view/(480/world.icon_size))+1
var/list/new_overlays = new
for(var/x in -count to count)
for(var/y in -count to count)
if(x == 0 && y == 0)
@@ -229,8 +235,8 @@
var/image/I = image(icon, null, icon_state)
I.transform = matrix(1, 0, x*480, 0, 1, y*480)
new_overlays += I
overlays = new_overlays
cut_overlays()
add_overlay(new_overlays)
view_sized = view
/obj/screen/parallax_layer/layer_1
+1 -1
View File
@@ -11,7 +11,7 @@
backdrop.transform = matrix(200, 0, 0, 0, 200, 0)
backdrop.layer = BACKGROUND_LAYER
backdrop.blend_mode = BLEND_OVERLAY
overlays += backdrop
add_overlay(backdrop)
..()
/obj/screen/plane_master/game_world
+30
View File
@@ -21,6 +21,7 @@
/obj/screen/Destroy()
master = null
hud = null
return ..()
/obj/screen/examine(mob/user)
@@ -664,3 +665,32 @@
if(word_messages.len && talk_cooldown < world.time)
talk_cooldown = world.time + 10
L.say(pick(word_messages))
/obj/screen/splash
icon = 'icons/misc/fullscreen.dmi'
icon_state = "title"
screen_loc = "1,1"
layer = SPLASHSCREEN_LAYER
plane = SPLASHSCREEN_PLANE
var/client/holder
/obj/screen/splash/New(client/C, fadeout, qdel_after = TRUE)
..()
holder = C
holder.screen += src
var/titlescreen = TITLESCREEN
if(titlescreen)
icon_state = titlescreen
if(fadeout)
animate(src, alpha = 0, time = 30)
else
alpha = 0
animate(src, alpha = 255, time = 30)
if(qdel_after)
QDEL_IN(src, 30)
/obj/screen/splash/Destroy()
if(holder)
holder.screen -= src
holder = null
return ..()
+4
View File
@@ -60,6 +60,10 @@ var/global/list/milk_id_list = list("milk")
//mentor stuff
var/list/mentors = list()
//Looc stuff
var/global/looc_allowed = 1
var/global/dlooc_allowed = 1
/client/proc/reload_mentors()
set name = "Reload Mentors"
set category = "Admin"
+7 -10
View File
@@ -10,6 +10,9 @@
var/autoadmin = 0
var/autoadmin_rank = "Game Admin"
/datum/protected_configuration/SDQL_update()
return FALSE
/datum/protected_configuration/vv_get_var(var_name)
return debug_variable(var_name, "SECRET", 0, src)
@@ -76,6 +79,7 @@
var/forumurl = "http://tgstation13.org/phpBB/index.php" //default forums
var/rulesurl = "http://www.tgstation13.org/wiki/Rules" // default rules
var/githuburl = "https://www.github.com/tgstation/-tg-station" //default github
var/githubrepoid
var/forbid_singulo_possession = 0
var/useircbot = 0
@@ -247,15 +251,6 @@
var/error_silence_time = 6000 // How long a unique error will be silenced for
var/error_msg_delay = 50 // How long to wait between messaging admins about occurrences of a unique error
var/mentors_mobname_only = 0 // Only display mob name to mentors in mentorhelps
var/mentor_legacy_system = 0 // Whether to use the legacy mentor system (flat file) instead of SQL
// Discord crap.
var/discord_url = "hfdksjhfa.com"
var/discord_password
var/announce_watchlist = 0
var/announce_adminhelps = 0
/datum/configuration/New()
gamemode_cache = typecacheof(/datum/game_mode,TRUE)
for(var/T in gamemode_cache)
@@ -367,7 +362,7 @@
if("servername")
config.server_name = value
if("serversqlname")
config.server_sql_name = 1
config.server_sql_name = value
if("stationname")
config.station_name = value
if("hostedby")
@@ -384,6 +379,8 @@
config.rulesurl = value
if("githuburl")
config.githuburl = value
if("githubrepoid")
config.githubrepoid = value
if("guest_jobban")
config.guest_jobban = 1
if("guest_ban")
@@ -0,0 +1,8 @@
/datum/configuration
var/mentors_mobname_only = 0 // Only display mob name to mentors in mentorhelps
var/mentor_legacy_system = 0 // Whether to use the legacy mentor system (flat file) instead of SQL
// Discord crap.
var/discord_url = "hfdksjhfa.com"
var/discord_password
var/announce_watchlist = 0
var/announce_adminhelps = 0
+26 -5
View File
@@ -39,6 +39,7 @@ var/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/round_started = 0
@@ -49,6 +50,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
var/datum/subsystem/queue_tail //End of queue linked list (used for appending to the list)
var/queue_priority_count = 0 //Running total so that we don't have to loop thru the queue each run to split up the tick
var/queue_priority_count_bg = 0 //Same, but for background subsystems
var/map_loading = FALSE //Are we loading in a new map?
/datum/controller/master/New()
// Highlander-style: there can only be one! Kill off the old and replace it with the new.
@@ -129,24 +131,29 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
// Sort subsystems by init_order, so they initialize in the correct order.
sortTim(subsystems, /proc/cmp_subsystem_init)
var/start_timeofday = REALTIMEOFDAY
// Initialize subsystems.
CURRENT_TICKLIMIT = config.tick_limit_mc_init
for (var/datum/subsystem/SS in subsystems)
if (SS.flags & SS_NO_INIT)
continue
SS.Initialize(world.timeofday)
SS.Initialize(REALTIMEOFDAY)
CHECK_TICK
CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
var/time = (REALTIMEOFDAY - start_timeofday) / 10
world << "<span class='boldannounce'>Initializations complete!</span>"
log_world("Initializations complete.")
var/msg = "Initializations complete within [time] second[time == 1 ? "" : "s"]!"
world << "<span class='boldannounce'>[msg]</span>"
log_world(msg)
// Sort subsystems by display setting for easy access.
sortTim(subsystems, /proc/cmp_subsystem_display)
// Set world options.
world.sleep_offline = 1
world.fps = config.fps
var/initialized_tod = REALTIMEOFDAY
sleep(1)
initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10
// Loop.
Master.StartProcessing(0)
@@ -224,7 +231,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
normalsubsystems += tickersubsystems
lobbysubsystems += tickersubsystems
init_timeofday = world.timeofday
init_timeofday = REALTIMEOFDAY
init_time = world.time
iteration = 1
@@ -233,7 +240,7 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
var/list/subsystems_to_check
//the actual loop.
while (1)
tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((world.timeofday - init_timeofday) - (world.time - init_time)) / world.tick_lag)))
tickdrift = max(0, MC_AVERAGE_FAST(tickdrift, (((REALTIMEOFDAY - init_timeofday) - (world.time - init_time)) / world.tick_lag)))
if (processing <= 0)
CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
sleep(10)
@@ -496,3 +503,17 @@ var/CURRENT_TICKLIMIT = TICK_LIMIT_RUNNING
stat("Byond:", "(FPS:[world.fps]) (TickCount:[world.time/world.tick_lag]) (TickDrift:[round(Master.tickdrift,1)]([round((Master.tickdrift/(world.time/world.tick_lag))*100,0.1)]%))")
stat("Master Controller:", statclick.update("(TickRate:[Master.processing]) (Iteration:[Master.iteration])"))
/datum/controller/master/proc/StartLoadingMap()
//disallow more than one map to load at once, multithreading it will just cause race conditions
while(map_loading)
stoplag()
for(var/S in subsystems)
var/datum/subsystem/SS = S
SS.StartLoadingMap()
map_loading = TRUE
/datum/controller/master/proc/StopLoadingMap(bounds = null)
map_loading = FALSE
for(var/S in subsystems)
var/datum/subsystem/SS = S
SS.StopLoadingMap()
+8 -3
View File
@@ -154,8 +154,8 @@
//used to initialize the subsystem AFTER the map has loaded
/datum/subsystem/proc/Initialize(start_timeofday)
var/time = (world.timeofday - start_timeofday) / 10
var/msg = "Initialized [name] subsystem within [time] seconds!"
var/time = (REALTIMEOFDAY - start_timeofday) / 10
var/msg = "Initialized [name] subsystem within [time] second[time == 1 ? "" : "s"]!"
world << "<span class='boldannounce'>[msg]</span>"
log_world(msg)
return time
@@ -167,7 +167,7 @@
if(can_fire)
if(can_fire && !(SS_NO_FIRE in flags))
msg = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]\t[msg]"
else
msg = "OFFLINE\t[msg]"
@@ -211,3 +211,8 @@
return 0
. = ..()
//when we enter dmm_suite.load_map
/datum/subsystem/proc/StartLoadingMap()
//when we exit dmm_suite.load_map
/datum/subsystem/proc/StopLoadingMap()
+1 -2
View File
@@ -34,8 +34,7 @@ var/datum/subsystem/acid/SSacid
if(O.acid_level && O.acid_processing())
else
O.overlays -= acid_overlay
O.priority_overlays -= acid_overlay
O.cut_overlay(acid_overlay, TRUE)
processing -= O
if (MC_TICK_CHECK)
+2 -2
View File
@@ -268,11 +268,11 @@ var/datum/subsystem/air/SSair
else
T.requires_activation = TRUE
/datum/subsystem/air/proc/begin_map_load()
/datum/subsystem/air/StartLoadingMap()
LAZYINITLIST(queued_for_activation)
map_loading = TRUE
/datum/subsystem/air/proc/end_map_load()
/datum/subsystem/air/StopLoadingMap()
map_loading = FALSE
for(var/T in queued_for_activation)
add_to_active(T)
+104
View File
@@ -0,0 +1,104 @@
var/datum/subsystem/atoms/SSatoms
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE)
/datum/subsystem/atoms
name = "Atoms"
init_order = 11
flags = SS_NO_FIRE
var/initialized = INITIALIZATION_INSSATOMS
var/old_initialized
/datum/subsystem/atoms/New()
NEW_SS_GLOBAL(SSatoms)
/datum/subsystem/atoms/Initialize(timeofday)
fire_overlay.appearance_flags = RESET_COLOR
setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation.
initialized = INITIALIZATION_INNEW_MAPLOAD
InitializeAtoms()
return ..()
/datum/subsystem/atoms/proc/InitializeAtoms(list/atoms = null)
if(initialized == INITIALIZATION_INSSATOMS)
return
var/list/late_loaders
initialized = INITIALIZATION_INNEW_MAPLOAD
if(atoms)
for(var/I in atoms)
var/atom/A = I
if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call
var/start_tick = world.time
if(A.Initialize(TRUE))
LAZYADD(late_loaders, A)
if(start_tick != world.time)
WARNING("[A]: [A.type] slept during it's Initialize!")
CHECK_TICK
testing("Initialized [atoms.len] atoms")
else
#ifdef TESTING
var/count = 0
#endif
for(var/atom/A in world)
if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call
var/start_tick = world.time
if(A.Initialize(TRUE))
LAZYADD(late_loaders, A)
#ifdef TESTING
else
++count
#endif TESTING
if(start_tick != world.time)
WARNING("[A]: [A.type] slept during it's Initialize!")
CHECK_TICK
testing("Roundstart initialized [count] atoms")
initialized = INITIALIZATION_INNEW_REGULAR
if(late_loaders)
for(var/I in late_loaders)
var/atom/A = I
var/start_tick = world.time
A.Initialize(FALSE)
if(start_tick != world.time)
WARNING("[A]: [A.type] slept during it's Initialize!")
CHECK_TICK
testing("Late-initialized [late_loaders.len] atoms")
/datum/subsystem/atoms/proc/map_loader_begin()
old_initialized = initialized
initialized = INITIALIZATION_INSSATOMS
/datum/subsystem/atoms/proc/map_loader_stop()
initialized = old_initialized
/datum/subsystem/atoms/Recover()
initialized = SSatoms.initialized
if(initialized == INITIALIZATION_INNEW_MAPLOAD)
InitializeAtoms()
old_initialized = SSatoms.old_initialized
/datum/subsystem/atoms/proc/setupGenetics()
var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS)
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
avnums[i] = i
CHECK_TICK
for(var/A in subtypesof(/datum/mutation/human))
var/datum/mutation/human/B = new A()
if(B.dna_block == NON_SCANNABLE)
continue
B.dna_block = pick_n_take(avnums)
if(B.quality == POSITIVE)
good_mutations |= B
else if(B.quality == NEGATIVE)
bad_mutations |= B
else if(B.quality == MINOR_NEGATIVE)
not_good_mutations |= B
CHECK_TICK
+5 -12
View File
@@ -24,6 +24,7 @@ var/datum/subsystem/garbage_collector/SSgarbage
var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened.
// the types are stored as strings
var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call
var/list/noqdelhint = list()// list of all types that do not return a QDEL_HINT
// all types that did not respect qdel(A, force=TRUE) and returned one
@@ -168,13 +169,17 @@ var/datum/subsystem/garbage_collector/SSgarbage
del(D)
else if(isnull(D.gc_destroyed))
D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED
var/start_time = world.time
var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up.
if(world.time != start_time)
SSgarbage.sleptDestroy["[D.type]"]++
if(!D)
return
switch(hint)
if (QDEL_HINT_QUEUE) //qdel should queue the object for deletion.
SSgarbage.QueueForQueuing(D)
if (QDEL_HINT_IWILLGC)
D.gc_destroyed = world.time
return
if (QDEL_HINT_LETMELIVE) //qdel should let the object live after calling destory.
if(!force)
@@ -346,8 +351,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
//if find_references isn't working for some datum
//update this list using tools/DMTreeToGlobalsList
/datum/proc/find_references_in_globals()
SearchVar(last_irc_status)
SearchVar(failed_db_connections)
SearchVar(nextmap)
SearchVar(mapchanging)
SearchVar(rebootingpendingmapchange)
@@ -554,12 +557,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
SearchVar(ruin_landmarks)
SearchVar(awaydestinations)
SearchVar(sortedAreas)
SearchVar(map_templates)
SearchVar(ruins_templates)
SearchVar(space_ruins_templates)
SearchVar(lava_ruins_templates)
SearchVar(shuttle_templates)
SearchVar(shelter_templates)
SearchVar(transit_markers)
SearchVar(clients)
SearchVar(admins)
@@ -684,8 +681,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
SearchVar(wire_colors)
SearchVar(wire_color_directory)
SearchVar(wire_name_directory)
SearchVar(possiblethemes)
SearchVar(max_secret_rooms)
SearchVar(blood_splatter_icons)
SearchVar(all_radios)
SearchVar(radiochannels)
@@ -796,7 +791,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
SearchVar(brass_recipes)
SearchVar(disposalpipeID2State)
SearchVar(RPD_recipes)
SearchVar(highlander_claymores)
SearchVar(biblenames)
SearchVar(biblestates)
SearchVar(bibleitemstates)
@@ -842,7 +836,6 @@ var/datum/subsystem/garbage_collector/SSgarbage
SearchVar(pipenetwarnings)
SearchVar(the_gateway)
SearchVar(potentialRandomZlevels)
SearchVar(maploader)
SearchVar(use_preloader)
SearchVar(_preloader)
SearchVar(swapmaps_iconcache)
+73 -3
View File
@@ -2,13 +2,21 @@ var/datum/subsystem/mapping/SSmapping
/datum/subsystem/mapping
name = "Mapping"
init_order = 13
init_order = 12
flags = SS_NO_FIRE
display_order = 50
var/list/nuke_tiles = list()
var/list/nuke_threats = list()
var/list/map_templates = list()
var/list/ruins_templates = list()
var/list/space_ruins_templates = list()
var/list/lava_ruins_templates = list()
var/list/shuttle_templates = list()
var/list/shelter_templates = list()
/datum/subsystem/mapping/New()
NEW_SS_GLOBAL(SSmapping)
@@ -25,8 +33,6 @@ var/datum/subsystem/mapping/SSmapping
if (mining_type == "lavaland")
seedRuins(list(5), config.lavaland_budget, /area/lavaland/surface/outdoors, lava_ruins_templates)
spawn_rivers()
else
make_mining_asteroid_secrets()
// deep space ruins
var/space_zlevels = list()
@@ -68,3 +74,67 @@ var/datum/subsystem/mapping/SSmapping
/datum/subsystem/mapping/Recover()
flags |= SS_NO_INIT
map_templates = SSmapping.map_templates
ruins_templates = SSmapping.ruins_templates
space_ruins_templates = SSmapping.space_ruins_templates
lava_ruins_templates = SSmapping.lava_ruins_templates
shuttle_templates = SSmapping.shuttle_templates
shelter_templates = SSmapping.shelter_templates
/datum/subsystem/mapping/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup
var/list/filelist = flist(path)
for(var/map in filelist)
var/datum/map_template/T = new(path = "[path][map]", rename = "[map]")
map_templates[T.name] = T
preloadRuinTemplates()
preloadShuttleTemplates()
preloadShelterTemplates()
/datum/subsystem/mapping/proc/preloadRuinTemplates()
// Still supporting bans by filename
var/list/banned = generateMapList("config/lavaruinblacklist.txt")
banned += generateMapList("config/spaceruinblacklist.txt")
for(var/item in subtypesof(/datum/map_template/ruin))
var/datum/map_template/ruin/ruin_type = item
// screen out the abstract subtypes
if(!initial(ruin_type.id))
continue
var/datum/map_template/ruin/R = new ruin_type()
if(banned.Find(R.mappath))
continue
map_templates[R.name] = R
ruins_templates[R.name] = R
if(istype(R, /datum/map_template/ruin/lavaland))
lava_ruins_templates[R.name] = R
else if(istype(R, /datum/map_template/ruin/space))
space_ruins_templates[R.name] = R
/datum/subsystem/mapping/proc/preloadShuttleTemplates()
var/list/unbuyable = generateMapList("config/unbuyableshuttles.txt")
for(var/item in subtypesof(/datum/map_template/shuttle))
var/datum/map_template/shuttle/shuttle_type = item
if(!(initial(shuttle_type.suffix)))
continue
var/datum/map_template/shuttle/S = new shuttle_type()
if(unbuyable.Find(S.mappath))
S.can_be_bought = FALSE
shuttle_templates[S.shuttle_id] = S
map_templates[S.shuttle_id] = S
/datum/subsystem/mapping/proc/preloadShelterTemplates()
for(var/item in subtypesof(/datum/map_template/shelter))
var/datum/map_template/shelter/shelter_type = item
if(!(initial(shelter_type.mappath)))
continue
var/datum/map_template/shelter/S = new shelter_type()
shelter_templates[S.shelter_id] = S
map_templates[S.shelter_id] = S
@@ -1,89 +1,17 @@
var/datum/subsystem/objects/SSobj
#define INITIALIZATION_INSSOBJ 0 //New should not call Initialize
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
#define INITIALIZATION_INNEW_REGULAR 2 //New should call Initialize(FALSE)
/datum/subsystem/objects
name = "Objects"
init_order = 12
priority = 40
flags = SS_NO_INIT
var/initialized = INITIALIZATION_INSSOBJ
var/old_initialized
var/list/processing = list()
var/list/currentrun = list()
/datum/subsystem/objects/New()
NEW_SS_GLOBAL(SSobj)
/datum/subsystem/objects/Initialize(timeofdayl)
fire_overlay.appearance_flags = RESET_COLOR
setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation.
initialized = INITIALIZATION_INNEW_MAPLOAD
InitializeAtoms()
. = ..()
/datum/subsystem/objects/proc/InitializeAtoms(list/objects = null)
if(initialized == INITIALIZATION_INSSOBJ)
return
var/list/late_loaders
initialized = INITIALIZATION_INNEW_MAPLOAD
if(objects)
for(var/I in objects)
var/atom/A = I
if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call
var/start_tick = world.time
if(A.Initialize(TRUE))
LAZYADD(late_loaders, A)
if(start_tick != world.time)
WARNING("[A]: [A.type] slept during it's Initialize!")
CHECK_TICK
testing("Initialized [objects.len] atoms")
else
#ifdef TESTING
var/count = 0
#endif
for(var/atom/A in world)
if(!A.initialized) //this check is to make sure we don't call it twice on an object that was created in a previous Initialize call
var/start_tick = world.time
if(A.Initialize(TRUE))
LAZYADD(late_loaders, A)
#ifdef TESTING
else
++count
#endif TESTING
if(start_tick != world.time)
WARNING("[A]: [A.type] slept during it's Initialize!")
CHECK_TICK
testing("Roundstart initialized [count] atoms")
initialized = INITIALIZATION_INNEW_REGULAR
if(late_loaders)
for(var/I in late_loaders)
var/atom/A = I
var/start_tick = world.time
A.Initialize(FALSE)
if(start_tick != world.time)
WARNING("[A]: [A.type] slept during it's Initialize!")
CHECK_TICK
testing("Late-initialized [late_loaders.len] atoms")
/datum/subsystem/objects/proc/map_loader_begin()
old_initialized = initialized
initialized = INITIALIZATION_INSSOBJ
/datum/subsystem/objects/proc/map_loader_stop()
initialized = old_initialized
/datum/subsystem/objects/stat_entry()
..("P:[processing.len]")
/datum/subsystem/objects/fire(resumed = 0)
if (!resumed)
src.currentrun = processing.Copy()
@@ -101,10 +29,4 @@ var/datum/subsystem/objects/SSobj
return
/datum/subsystem/objects/Recover()
initialized = SSobj.initialized
if(initialized == INITIALIZATION_INNEW_MAPLOAD)
InitializeAtoms()
old_initialized = SSobj.old_initialized
if (istype(SSobj.processing))
processing = SSobj.processing
processing = SSobj.processing
@@ -0,0 +1,183 @@
var/datum/subsystem/processing/overlays/SSoverlays
/datum/subsystem/processing/overlays
name = "Overlay"
flags = SS_TICKER|SS_FIRE_IN_LOBBY
wait = 1
priority = 500
init_order = -6
stat_tag = "Ov"
currentrun = null
var/list/overlay_icon_state_caches
var/initialized = FALSE
/datum/subsystem/processing/overlays/New()
NEW_SS_GLOBAL(SSoverlays)
LAZYINITLIST(overlay_icon_state_caches)
/datum/subsystem/processing/overlays/Initialize()
initialized = TRUE
for(var/I in processing)
var/atom/A = I
A.compile_overlays()
CHECK_TICK
processing.Cut()
..()
/datum/subsystem/processing/overlays/Recover()
overlay_icon_state_caches = SSoverlays.overlay_icon_state_caches
processing = SSoverlays.processing
/datum/subsystem/processing/overlays/fire()
while(processing.len)
var/atom/thing = processing[processing.len]
processing.len--
if(thing)
thing.compile_overlays(FALSE)
if(MC_TICK_CHECK)
break
/atom/proc/compile_overlays()
if(LAZYLEN(priority_overlays) && LAZYLEN(our_overlays))
overlays = our_overlays + priority_overlays
else if(LAZYLEN(our_overlays))
overlays = our_overlays
else if(LAZYLEN(priority_overlays))
overlays = priority_overlays
else
overlays.Cut()
flags &= ~OVERLAY_QUEUED
/atom/proc/iconstate2appearance(iconstate)
var/static/image/stringbro = new()
var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches
var/list/cached_icon = icon_states_cache[icon]
if (cached_icon)
var/cached_appearance = cached_icon["[iconstate]"]
if (cached_appearance)
return cached_appearance
stringbro.icon = icon
stringbro.icon_state = iconstate
if (!cached_icon) //not using the macro to save an associated lookup
cached_icon = list()
icon_states_cache[icon] = cached_icon
var/cached_appearance = stringbro.appearance
cached_icon["[iconstate]"] = cached_appearance
return cached_appearance
#define NOT_QUEUED_ALREADY (!(flags & OVERLAY_QUEUED))
#define QUEUE_FOR_COMPILE flags |= OVERLAY_QUEUED; SSoverlays.processing += src;
/atom/proc/cut_overlays(priority = FALSE)
var/list/cached_overlays = our_overlays
var/list/cached_priority = priority_overlays
var/need_compile = FALSE
if(LAZYLEN(cached_overlays)) //don't queue empty lists, don't cut priority overlays
cached_overlays.Cut() //clear regular overlays
need_compile = TRUE
if(priority && LAZYLEN(cached_priority))
cached_priority.Cut()
need_compile = TRUE
if(NOT_QUEUED_ALREADY && need_compile)
QUEUE_FOR_COMPILE
/atom/proc/cut_overlay(list/overlays, priority)
var/static/image/appearance_bro = new()
if(!overlays)
return
if (!islist(overlays))
overlays = list(overlays)
else
listclearnulls(overlays)
for (var/i in 1 to length(overlays))
if (istext(overlays[i]))
overlays[i] = iconstate2appearance(overlays[i])
else
var/image/I = overlays[i]
appearance_bro.appearance = overlays[i]
appearance_bro.dir = I.dir
overlays[i] = appearance_bro.appearance
var/list/cached_overlays = our_overlays //sanic
var/list/cached_priority = priority_overlays
var/init_o_len = LAZYLEN(cached_overlays)
var/init_p_len = LAZYLEN(cached_priority) //starter pokemon
LAZYREMOVE(cached_overlays, overlays)
if(priority)
LAZYREMOVE(cached_priority, overlays)
if(NOT_QUEUED_ALREADY && ((init_o_len != LAZYLEN(cached_priority)) || (init_p_len != LAZYLEN(cached_overlays))))
QUEUE_FOR_COMPILE
/atom/proc/add_overlay(list/overlays, priority = FALSE)
var/static/image/appearance_bro = new()
if(!overlays)
return
if (!islist(overlays))
overlays = list(overlays)
else
listclearnulls(overlays)
for (var/i in 1 to length(overlays))
if (istext(overlays[i]))
overlays[i] = iconstate2appearance(overlays[i])
else
var/image/I = overlays[i]
appearance_bro.appearance = overlays[i]
appearance_bro.dir = I.dir
overlays[i] = appearance_bro.appearance
LAZYINITLIST(our_overlays) //always initialized after this point
LAZYINITLIST(priority_overlays)
var/list/cached_overlays = our_overlays //sanic
var/list/cached_priority = priority_overlays
var/init_o_len = cached_overlays.len
var/init_p_len = cached_priority.len //starter pokemon
var/need_compile
if(priority)
cached_priority += overlays //or in the image. Can we use [image] = image?
need_compile = init_p_len != cached_priority.len
else
cached_overlays += overlays
need_compile = init_o_len != cached_overlays.len
if(NOT_QUEUED_ALREADY && need_compile) //have we caught more pokemon?
QUEUE_FOR_COMPILE
/atom/proc/copy_overlays(atom/other, cut_old = FALSE) //copys our_overlays from another atom
if(!other)
if(cut_old)
cut_overlays()
return
var/list/cached_other = other.our_overlays
if(cached_other)
if(cut_old)
our_overlays = cached_other.Copy()
else
our_overlays |= cached_other
if(NOT_QUEUED_ALREADY)
QUEUE_FOR_COMPILE
else if(cut_old)
cut_overlays()
#undef NOT_QUEUED_ALREADY
#undef QUEUE_FOR_COMPILE
//TODO: Better solution for these?
/image/proc/add_overlay(x)
overlays += x
/image/proc/cut_overlay(x)
overlays -= x
/image/proc/cut_overlays(x)
overlays.Cut()
+37 -11
View File
@@ -1,10 +1,12 @@
#define ROUND_START_MUSIC_LIST "strings/round_start_sounds.txt"
var/round_start_time = 0
var/datum/subsystem/ticker/ticker
/datum/subsystem/ticker
name = "Ticker"
init_order = 0
init_order = 13
priority = 200
flags = SS_FIRE_IN_LOBBY|SS_KEEP_TIMING
@@ -39,7 +41,8 @@ var/datum/subsystem/ticker/ticker
var/tipped = 0 //Did we broadcast the tip of the day yet?
var/selected_tip // What will be the tip of the day?
var/timeLeft = 1200 //pregame timer
var/timeLeft //pregame timer
var/start_at
var/totalPlayers = 0 //used for pregame stats on statpanel
var/totalPlayersReady = 0 //used for pregame stats on statpanel
@@ -57,30 +60,36 @@ var/datum/subsystem/ticker/ticker
/datum/subsystem/ticker/New()
NEW_SS_GLOBAL(ticker)
login_music = pickweight(list('sound/ambience/title2.ogg' = 15, 'sound/ambience/title1.ogg' =15, 'sound/ambience/title3.ogg' =14, 'sound/ambience/title4.ogg' =14, 'sound/misc/i_did_not_grief_them.ogg' =14, 'sound/ambience/clown.ogg' = 9)) // choose title music!
if(SSevent.holidays && SSevent.holidays[APRIL_FOOLS])
login_music = 'sound/ambience/clown.ogg'
else
var/list/music = file2list(ROUND_START_MUSIC_LIST, "\n")
login_music = pick(music)
/datum/subsystem/ticker/Initialize(timeofday)
var/list/music = file2list(ROUND_START_MUSIC_LIST, "\n")
login_music = pick(music)
if(!syndicate_code_phrase)
syndicate_code_phrase = generate_code_phrase()
if(!syndicate_code_response)
syndicate_code_response = generate_code_phrase()
..()
start_at = world.time + (config.lobby_countdown * 10)
/datum/subsystem/ticker/fire()
switch(current_state)
if(GAME_STATE_STARTUP)
timeLeft = config.lobby_countdown * 10
world << "<span class='boldnotice'>Welcome to [station_name()]!</span>"
world << "Please set up your character and select \"Ready\". The game will start in [config.lobby_countdown] seconds."
current_state = GAME_STATE_PREGAME
if(Master.initializations_finished_with_no_players_logged_in)
start_at = world.time + (config.lobby_countdown * 10)
for(var/client/C in clients)
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
world << "<span class='boldnotice'>Welcome to [station_name()]!</span>"
current_state = GAME_STATE_PREGAME
fire()
if(GAME_STATE_PREGAME)
//lobby stats for statpanels
if(isnull(timeLeft))
timeLeft = max(0,start_at - world.time)
totalPlayers = 0
totalPlayersReady = 0
for(var/mob/new_player/player in player_list)
@@ -96,7 +105,7 @@ var/datum/subsystem/ticker/ticker
return
timeLeft -= wait
if(timeLeft <= 1200 && !modevoted) //Vote for the round type
if(timeLeft <= config.lobby_countdown && !modevoted) //Vote for the round type
send_gamemode_vote()
modevoted = TRUE
@@ -551,11 +560,17 @@ var/datum/subsystem/ticker/ticker
CHECK_TICK
//Adds the del() log to world.log in a format condensable by the runtime condenser found in tools
if(SSgarbage.didntgc.len)
if(SSgarbage.didntgc.len || SSgarbage.sleptDestroy.len)
var/dellog = ""
for(var/path in SSgarbage.didntgc)
dellog += "Path : [path] \n"
dellog += "Failures : [SSgarbage.didntgc[path]] \n"
if(path in SSgarbage.sleptDestroy)
dellog += "Sleeps : [SSgarbage.sleptDestroy[path]] \n"
SSgarbage.sleptDestroy -= path
for(var/path in SSgarbage.sleptDestroy)
dellog += "Path : [path] \n"
dellog += "Sleeps : [SSgarbage.sleptDestroy[path]] \n"
log_world(dellog)
CHECK_TICK
@@ -716,3 +731,14 @@ var/datum/subsystem/ticker/ticker
if(news_message)
send2otherserver(news_source, news_message,"News_Report")
/datum/subsystem/ticker/proc/GetTimeLeft()
if(isnull(ticker.timeLeft))
return max(0, start_at - world.time)
return timeLeft
/datum/subsystem/ticker/proc/SetTimeLeft(newtime)
if(newtime >= 0 && isnull(timeLeft)) //remember, negative means delayed
start_at = world.time + newtime
else
timeLeft = newtime
+29 -18
View File
@@ -40,20 +40,18 @@ var/datum/subsystem/timer/SStimer
..("B:[bucket_count] P:[length(processing)] H:[length(hashes)] C:[length(clienttime_timers)]")
/datum/subsystem/timer/fire(resumed = FALSE)
if (length(clienttime_timers))
for (var/thing in clienttime_timers)
var/datum/timedevent/ctime_timer = thing
if (ctime_timer.spent)
qdel(ctime_timer)
continue
if (ctime_timer.timeToRun <= REALTIMEOFDAY)
var/datum/callback/callBack = ctime_timer.callBack
ctime_timer.spent = TRUE
callBack.InvokeAsync()
qdel(ctime_timer)
if (MC_TICK_CHECK)
return
while(length(clienttime_timers))
var/datum/timedevent/ctime_timer = clienttime_timers[clienttime_timers.len]
if (ctime_timer.timeToRun <= REALTIMEOFDAY)
--clienttime_timers.len
var/datum/callback/callBack = ctime_timer.callBack
ctime_timer.spent = TRUE
callBack.InvokeAsync()
qdel(ctime_timer)
else
break //None of the rest are ready to run
if (MC_TICK_CHECK)
return
var/static/list/spent = list()
var/static/datum/timedevent/timer
@@ -208,11 +206,24 @@ var/datum/subsystem/timer/SStimer
SStimer.timer_id_dict["timerid[id]"] = src
if (callBack.object != GLOBAL_PROC)
LAZYINITLIST(callBack.object.active_timers)
callBack.object.active_timers += src
LAZYADD(callBack.object.active_timers, src)
if (flags & TIMER_CLIENT_TIME)
SStimer.clienttime_timers += src
//sorted insert
var/list/ctts = SStimer.clienttime_timers
var/cttl = length(ctts)
if(cttl)
var/datum/timedevent/Last = ctts[cttl]
if(Last.timeToRun >= timeToRun)
ctts += src
else if(cttl > 1)
for(var/I in cttl to 1)
var/datum/timedevent/E = ctts[I]
if(E.timeToRun <= timeToRun)
ctts.Insert(src, I)
break
else
ctts += src
return
//get the list of buckets
@@ -345,4 +356,4 @@ proc/addtimer(datum/callback/callback, wait, flags)
#undef BUCKET_LEN
#undef BUCKET_POS
#undef BUCKET_POS
+12 -13
View File
@@ -113,7 +113,8 @@
img = image(icon_icon, current_button, button_icon_state)
img.pixel_x = 0
img.pixel_y = 0
current_button.overlays = list(img)
current_button.cut_overlays(TRUE)
current_button.add_overlay(img)
current_button.button_icon_state = button_icon_state
@@ -329,32 +330,30 @@
/datum/action/item_action/hands_free/activate
name = "Activate"
/datum/action/item_action/hands_free/shift_nerves
name = "Shift Nerves"
/datum/action/item_action/toggle_research_scanner
name = "Toggle Research Scanner"
button_icon_state = "scan_mode"
var/active = FALSE
/datum/action/item_action/toggle_research_scanner/Trigger()
if(IsAvailable())
owner.research_scanner = !owner.research_scanner
owner << "<span class='notice'>Research analyzer is now [owner.research_scanner ? "active" : "deactivated"].</span>"
active = !active
if(active)
owner.research_scanner++
else
owner.research_scanner--
owner << "<span class='notice'>[target] research scanner has been [active ? "activated" : "deactivated"].</span>"
return 1
/datum/action/item_action/toggle_research_scanner/Remove(mob/M)
if(owner)
owner.research_scanner = 0
if(owner && active)
owner.research_scanner--
active = FALSE
..()
/datum/action/item_action/toggle_research_scanner/ApplyIcon(obj/screen/movable/action_button/current_button)
current_button.cut_overlays()
if(button_icon && button_icon_state)
var/image/img = image(button_icon, current_button, "scan_mode")
current_button.add_overlay(img)
/datum/action/item_action/organ_action
check_flags = AB_CHECK_CONSCIOUS
+40 -5
View File
@@ -313,19 +313,53 @@
var picked_group = pickweight(replaceable_groups)
switch(picked_group)
if(LAW_ZEROTH)
. = zeroth
set_zeroth_law(law)
if(LAW_ION)
ion[rand(1,ion.len)] = law
var/i = rand(1, ion.len)
. = ion[i]
ion[i] = law
if(LAW_INHERENT)
inherent[rand(1,inherent.len)] = law
var/i = rand(1, inherent.len)
. = inherent[i]
inherent[i] = law
if(LAW_SUPPLIED)
supplied[rand(1,supplied.len)] = law
var/i = rand(1, supplied.len)
. = supplied[i]
supplied[i] = law
/datum/ai_laws/proc/shuffle_laws(list/groups)
var/list/laws = list()
if(ion.len && (LAW_ION in groups))
laws += ion
if(inherent.len && (LAW_INHERENT in groups))
laws += inherent
if(supplied.len && (LAW_SUPPLIED in groups))
for(var/law in supplied)
if(length(law))
laws += law
if(ion.len && (LAW_ION in groups))
for(var/i = 1, i <= ion.len, i++)
ion[i] = pick_n_take(laws)
if(inherent.len && (LAW_INHERENT in groups))
for(var/i = 1, i <= inherent.len, i++)
inherent[i] = pick_n_take(laws)
if(supplied.len && (LAW_SUPPLIED in groups))
var/i = 1
for(var/law in supplied)
if(length(law))
supplied[i] = pick_n_take(laws)
if(!laws.len)
break
i++
/datum/ai_laws/proc/remove_law(number)
if(number <= 0)
return
if(inherent.len && number <= inherent.len)
inherent -= inherent[number]
. = inherent[number]
inherent -= .
return
var/list/supplied_laws = list()
for(var/index = 1, index <= supplied.len, index++)
@@ -334,7 +368,8 @@
supplied_laws += index //storing the law number instead of the law
if(supplied_laws.len && number <= (inherent.len+supplied_laws.len))
var/law_to_remove = supplied_laws[number-inherent.len]
supplied -= supplied[law_to_remove]
. = supplied[law_to_remove]
supplied -= .
return
/datum/ai_laws/proc/clear_supplied_laws()
+52 -16
View File
@@ -4,6 +4,7 @@ var/global/datum/getrev/revdata = new()
var/parentcommit
var/commit
var/list/testmerge = list()
var/has_pr_details = FALSE //example data in a testmerge entry when this is true: https://api.github.com/repositories/3234987/pulls/22586
var/date
/datum/getrev/New()
@@ -31,6 +32,44 @@ var/global/datum/getrev/revdata = new()
log_world(parentcommit)
log_world("Current map - [MAP_NAME]") //can't think of anywhere better to put it
/datum/getrev/proc/DownloadPRDetails()
if(!config.githubrepoid)
if(testmerge.len)
log_world("PR details download failed: No github repo config set")
return
if(!isnum(text2num(config.githubrepoid)))
log_world("PR details download failed: Invalid github repo id: [config.githubrepoid]")
return
for(var/line in testmerge)
if(!isnum(text2num(line)))
log_world("PR details download failed: Invalid PR number: [line]")
return
var/url = "https://api.github.com/repositories/[config.githubrepoid]/pulls/[line].json"
valid_HTTPSGet = TRUE
var/json = HTTPSGet(url)
if(!json)
return
testmerge[line] = json_decode(json)
if(!testmerge[line])
log_world("PR details download failed: null details returned")
return
CHECK_TICK
log_world("PR details successfully downloaded")
has_pr_details = TRUE
/datum/getrev/proc/GetTestMergeInfo(header = TRUE)
if(!testmerge.len)
return ""
. = header ? "The following pull requests are currently test merged:<br>" : ""
for(var/line in testmerge)
var/details = ""
if(has_pr_details)
details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["user"]["login"])
. += "<a href='[config.githuburl]/pull/[line]'>#[line][details]</a><br>"
/client/verb/showrevinfo()
set category = "OOC"
set name = "Show Server Revision"
@@ -39,12 +78,9 @@ var/global/datum/getrev/revdata = new()
if(revdata.parentcommit)
src << "<b>Server revision compiled on:</b> [revdata.date]"
if(revdata.testmerge.len)
for(var/line in revdata.testmerge)
if(line)
src << "Test merge active of PR <a href='[config.githuburl]/pull/[line]'>#[line]</a>"
src << "Based off master commit <a href='[config.githuburl]/commit/[revdata.parentcommit]'>[revdata.parentcommit]</a>"
else
src << "<a href='[config.githuburl]/commit/[revdata.parentcommit]'>[revdata.parentcommit]</a>"
src << revdata.GetTestMergeInfo()
src << "Based off master commit:"
src << "<a href='[config.githuburl]/commit/[revdata.parentcommit]'>[revdata.parentcommit]</a>"
else
src << "Revision unknown"
src << "<b>Current Infomational Settings:</b>"
@@ -56,8 +92,8 @@ var/global/datum/getrev/revdata = new()
src << "Allow Midround Antagonists: [config.midround_antag.len] of [config.modes.len] roundtypes"
if(config.show_game_type_odds)
if(ticker.current_state == GAME_STATE_PLAYING)
src <<"<b>Game Mode Odds for current round:</b>"
var/prob_sum = 0
var/current_odds_differ = FALSE
var/list/probs = list()
var/list/modes = config.gamemode_cache
for(var/mode in modes)
@@ -65,17 +101,18 @@ var/global/datum/getrev/revdata = new()
var/ctag = initial(M.config_tag)
if(!(ctag in config.probabilities))
continue
if((config.min_pop[ctag] && (config.min_pop[ctag] > ticker.totalPlayersReady)) || (initial(M.required_players) > ticker.totalPlayersReady))
continue
if(config.max_pop[ctag] && (config.max_pop[ctag] < ticker.totalPlayersReady))
if((config.min_pop[ctag] && (config.min_pop[ctag] > ticker.totalPlayersReady)) || (config.max_pop[ctag] && (config.max_pop[ctag] < ticker.totalPlayersReady)) || (initial(M.required_players) > ticker.totalPlayersReady))
current_odds_differ = TRUE
continue
probs[ctag] = 1
prob_sum += config.probabilities[ctag]
for(var/ctag in probs)
if(config.probabilities[ctag] > 0)
var/percentage = round(config.probabilities[ctag] / prob_sum * 100, 0.1)
src << "[ctag] [percentage]%"
if(current_odds_differ)
src <<"<b>Game Mode Odds for current round:</b>"
for(var/ctag in probs)
if(config.probabilities[ctag] > 0)
var/percentage = round(config.probabilities[ctag] / prob_sum * 100, 0.1)
src << "[ctag] [percentage]%"
src <<"<b>All Game Mode Odds:</b>"
var/sum = 0
for(var/ctag in config.probabilities)
@@ -84,4 +121,3 @@ var/global/datum/getrev/revdata = new()
if(config.probabilities[ctag] > 0)
var/percentage = round(config.probabilities[ctag] / sum * 100, 0.1)
src << "[ctag] [percentage]%"
return
-146
View File
@@ -1,146 +0,0 @@
/datum/map_template
var/name = "Default Template Name"
var/width = 0
var/height = 0
var/mappath = null
var/mapfile = null
var/loaded = 0 // Times loaded this round
/datum/map_template/New(path = null, map = null, rename = null)
if(path)
mappath = path
if(mappath)
preload_size(mappath)
if(map)
mapfile = map
if(rename)
name = rename
/datum/map_template/proc/preload_size(path)
var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE)
if(bounds)
width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1
height = bounds[MAP_MAXY]
return bounds
/proc/initTemplateBounds(var/list/bounds)
var/list/obj/machinery/atmospherics/atmos_machines = list()
var/list/obj/structure/cable/cables = list()
var/list/atom/atoms = list()
for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]),
locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])))
var/turf/B = L
atoms += B
for(var/A in B)
atoms += A
if(istype(A,/obj/structure/cable))
cables += A
continue
if(istype(A,/obj/machinery/atmospherics))
atmos_machines += A
continue
SSobj.InitializeAtoms(atoms)
SSmachine.setup_template_powernets(cables)
SSair.setup_template_machinery(atmos_machines)
SSair.end_map_load()
/datum/map_template/proc/load(turf/T, centered = FALSE)
if(centered)
T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z)
if(!T)
return
if(T.x+width > world.maxx)
return
if(T.y+height > world.maxy)
return
SSair.begin_map_load()
var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE)
if(!bounds)
SSair.end_map_load()
return 0
//initialize things that are normally initialized after map load
initTemplateBounds(bounds)
log_game("[name] loaded at at [T.x],[T.y],[T.z]")
return 1
/datum/map_template/proc/get_file()
if(mapfile)
. = mapfile
else if(mappath)
. = file(mappath)
if(!.)
log_world("The file of [src] appears to be empty/non-existent.")
/datum/map_template/proc/get_affected_turfs(turf/T, centered = FALSE)
var/turf/placement = T
if(centered)
var/turf/corner = locate(placement.x - round(width/2), placement.y - round(height/2), placement.z)
if(corner)
placement = corner
return block(placement, locate(placement.x+width-1, placement.y+height-1, placement.z))
/proc/preloadTemplates(path = "_maps/templates/") //see master controller setup
var/list/filelist = flist(path)
for(var/map in filelist)
var/datum/map_template/T = new(path = "[path][map]", rename = "[map]")
map_templates[T.name] = T
preloadRuinTemplates()
preloadShuttleTemplates()
preloadShelterTemplates()
/proc/preloadRuinTemplates()
// Still supporting bans by filename
var/list/banned = generateMapList("config/lavaruinblacklist.txt")
banned += generateMapList("config/spaceruinblacklist.txt")
for(var/item in subtypesof(/datum/map_template/ruin))
var/datum/map_template/ruin/ruin_type = item
// screen out the abstract subtypes
if(!initial(ruin_type.id))
continue
var/datum/map_template/ruin/R = new ruin_type()
if(banned.Find(R.mappath))
continue
map_templates[R.name] = R
ruins_templates[R.name] = R
if(istype(R, /datum/map_template/ruin/lavaland))
lava_ruins_templates[R.name] = R
else if(istype(R, /datum/map_template/ruin/space))
space_ruins_templates[R.name] = R
/proc/preloadShuttleTemplates()
var/list/unbuyable = generateMapList("config/unbuyableshuttles.txt")
for(var/item in subtypesof(/datum/map_template/shuttle))
var/datum/map_template/shuttle/shuttle_type = item
if(!(initial(shuttle_type.suffix)))
continue
var/datum/map_template/shuttle/S = new shuttle_type()
if(unbuyable.Find(S.mappath))
S.can_be_bought = FALSE
shuttle_templates[S.shuttle_id] = S
map_templates[S.shuttle_id] = S
/proc/preloadShelterTemplates()
for(var/item in subtypesof(/datum/map_template/shelter))
var/datum/map_template/shelter/shelter_type = item
if(!(initial(shelter_type.mappath)))
continue
var/datum/map_template/shelter/S = new shelter_type()
shelter_templates[S.shelter_id] = S
map_templates[S.shelter_id] = S
+5
View File
@@ -258,6 +258,11 @@
sheet_type = /obj/item/stack/sheet/mineral/plasma
coin_type = /obj/item/weapon/coin/plasma
/datum/material/bluespace
name = "Bluespace Mesh"
id = MAT_BLUESPACE
sheet_type = /obj/item/stack/sheet/bluespace_crystal
/datum/material/bananium
name = "Bananium"
id = MAT_BANANIUM
-1
View File
@@ -135,7 +135,6 @@
if(isAI(current))
var/mob/living/silicon/ai/A = current
A.set_zeroth_law("")
A.show_laws()
A.verbs -= /mob/living/silicon/ai/proc/choose_modules
A.malf_picker.remove_verbs(A)
qdel(A.malf_picker)
+133 -27
View File
@@ -9,12 +9,30 @@
var/slowed = FALSE
var/slowvalue = 1
/datum/riding/New(atom/movable/_ridden)
ridden = _ridden
/datum/riding/Destroy()
ridden = null
return ..()
/datum/riding/proc/handle_vehicle_layer()
if(ridden.dir != NORTH)
ridden.layer = ABOVE_MOB_LAYER
else
ridden.layer = OBJ_LAYER
/datum/riding/proc/on_vehicle_move()
for(var/mob/living/M in ridden.buckled_mobs)
ride_check(M)
handle_vehicle_offsets()
handle_vehicle_layer()
/datum/riding/proc/ride_check(mob/living/M)
return TRUE
/datum/riding/proc/force_dismount(mob/living/M)
ridden.unbuckle_mob(M)
//Override this to set your vehicle's various pixel offsets
//if they differ between directions, otherwise use the
@@ -36,7 +54,6 @@
return TRUE
return FALSE
//BUCKLE HOOKS
/datum/riding/proc/restore_position(mob/living/buckled_mob)
if(istype(buckled_mob))
@@ -45,11 +62,6 @@
if(buckled_mob.client)
buckled_mob.client.change_view(world.view)
//MOVEMENT
/datum/riding/proc/handle_ride(mob/user, direction)
if(user.incapacitated())
@@ -298,12 +310,59 @@
else
user << "<span class='notice'>You'll need something to guide the [ridden.name].</span>"
//CYBORGS. NO, THEY ARE NOT ANIMALS.
///////Humans. Yes, I said humans. No, this won't end well...//////////
/datum/riding/human
keytype = null
/datum/riding/human/ride_check(mob/living/M)
var/mob/living/carbon/human/H = ridden //IF this runtimes I'm blaming the admins.
if(M.incapacitated(FALSE, TRUE) || H.incapacitated(FALSE, TRUE))
M.visible_message("<span class='boldwarning'>[M] falls off of [ridden]!</span>")
ridden.unbuckle_mob(M)
return FALSE
if(M.restrained(TRUE))
M.visible_message("<span class='boldwarning'>[M] can't hang onto [ridden] with their hands cuffed!</span>") //Honestly this should put the ridden mob in a chokehold.
ridden.unbuckle_mob(M)
return FALSE
if(H.pulling == M)
H.stop_pulling()
/datum/riding/human/handle_vehicle_offsets()
for(var/mob/living/M in ridden.buckled_mobs)
M.setDir(ridden.dir)
switch(ridden.dir)
if(NORTH)
M.pixel_x = 0
M.pixel_y = 6
if(SOUTH)
M.pixel_x = 0
M.pixel_y = 6
if(EAST)
M.pixel_x = -6
M.pixel_y = 4
if(WEST)
M.pixel_x = 6
M.pixel_y = 4
/datum/riding/human/handle_vehicle_layer()
if(ridden.buckled_mobs && ridden.buckled_mobs.len)
if(ridden.dir == SOUTH)
ridden.layer = ABOVE_MOB_LAYER
else
ridden.layer = OBJ_LAYER
else
ridden.layer = MOB_LAYER
/datum/riding/human/force_dismount(mob/living/user)
ridden.unbuckle_mob(user)
user.Weaken(3)
user.Stun(3)
user.visible_message("<span class='boldwarning'>[ridden] pushes [user] off of them!</span>")
/datum/riding/cyborg
keytype = null
vehicle_move_delay = 1
/datum/riding/cyborg/proc/ride_check(mob/user)
/datum/riding/cyborg/ride_check(mob/user)
if(user.incapacitated())
var/kick = TRUE
if(istype(ridden, /mob/living/silicon/robot))
@@ -322,11 +381,12 @@
return
/datum/riding/cyborg/handle_vehicle_layer()
if(ridden.dir == SOUTH)
ridden.layer = ABOVE_MOB_LAYER
if(ridden.buckled_mobs && ridden.buckled_mobs.len)
if(ridden.dir == SOUTH)
ridden.layer = ABOVE_MOB_LAYER
else
ridden.layer = OBJ_LAYER
else
ridden.layer = OBJ_LAYER
if(!ridden.buckled_mobs)
ridden.layer = MOB_LAYER
/datum/riding/cyborg/handle_vehicle_offsets()
@@ -353,19 +413,65 @@
M.pixel_x = 6
M.pixel_y = 3
/datum/riding/cyborg/proc/on_vehicle_move()
for(var/mob/living/M in ridden.buckled_mobs)
ride_check(M)
handle_vehicle_offsets()
handle_vehicle_layer()
/datum/riding/cyborg/force_dismount(mob/living/M)
ridden.unbuckle_mob(M)
var/turf/target = get_edge_target_turf(ridden, ridden.dir)
var/turf/targetm = get_step(get_turf(ridden), ridden.dir)
M.Move(targetm)
M.visible_message("<span class='boldwarning'>[M] is thrown clear of [ridden]!</span>")
M.throw_at(target, 14, 5, ridden)
M.Weaken(3)
/datum/riding/cyborg/proc/force_dismount()
for(var/mob/living/M in ridden.buckled_mobs)
ridden.unbuckle_mob(M)
var/turf/target = get_edge_target_turf(ridden, ridden.dir)
var/turf/targetm = get_step(get_turf(ridden), ridden.dir)
M.Move(targetm)
M.visible_message("<span class='boldwarning'>[M] is thrown clear of [ridden] by rapid spinning!</span>")
M.throw_at(target, 14, 5, ridden)
M.Weaken(3)
/datum/riding/proc/equip_buckle_inhands(mob/living/carbon/human/user, amount_required = 1)
var/amount_equipped = 0
for(var/amount_needed = amount_required, amount_needed > 0, amount_needed--)
var/obj/item/riding_offhand/inhand = new /obj/item/riding_offhand(user)
inhand.rider = user
inhand.ridden = ridden
if(user.put_in_hands(inhand, TRUE))
amount_equipped++
else
break
if(amount_equipped >= amount_required)
return TRUE
else
unequip_buckle_inhands(user)
return FALSE
/datum/riding/proc/unequip_buckle_inhands(mob/living/carbon/user)
for(var/obj/item/riding_offhand/O in user.contents)
if(O.ridden != ridden)
CRASH("RIDING OFFHAND ON WRONG MOB")
continue
if(O.selfdeleting)
continue
else
qdel(O)
return TRUE
/obj/item/riding_offhand
name = "offhand"
icon = 'icons/obj/weapons.dmi'
icon_state = "offhand"
w_class = WEIGHT_CLASS_HUGE
flags = ABSTRACT | DROPDEL | NOBLUDGEON
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/mob/living/carbon/rider
var/mob/living/ridden
var/selfdeleting = FALSE
/obj/item/riding_offhand/dropped()
selfdeleting = TRUE
. = ..()
/obj/item/riding_offhand/equipped()
if(loc != rider)
selfdeleting = TRUE
qdel(src)
. = ..()
/obj/item/riding_offhand/Destroy()
if(selfdeleting)
if(rider in ridden.buckled_mobs)
ridden.unbuckle_mob(rider)
. = ..()
+1
View File
@@ -172,6 +172,7 @@
Outside of admin intervention, it cannot explode. \
It does, however, still dust anything on contact, emits high levels of radiation, and induce hallucinations in anyone looking at it without protective goggles. \
Emitters spawn powered on, expect admin notices, they are harmless."
credit_cost = 100000
/datum/map_template/shuttle/emergency/imfedupwiththisworld
suffix = "imfedupwiththisworld"
+151
View File
@@ -0,0 +1,151 @@
/mob/living
var/list/ownedSoullinks //soullinks we are the owner of
var/list/sharedSoullinks //soullinks we are a/the sharer of
/mob/living/Destroy()
for(var/s in ownedSoullinks)
var/datum/soullink/S = s
S.ownerDies(FALSE)
qdel(s) //If the owner is destroy()'d, the soullink is destroy()'d
ownedSoullinks = null
for(var/s in sharedSoullinks)
var/datum/soullink/S = s
S.sharerDies(FALSE)
S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed
sharedSoullinks = null
return ..()
//Keeps track of a Mob->Mob (potentially Player->Player) connection
//Can be used to trigger actions on one party when events happen to another
//Eg: shared deaths
//Can be used to form a linked list of mob-hopping
//Does NOT transfer with minds
/datum/soullink
var/mob/living/soulowner
var/mob/living/soulsharer
var/id //Optional ID, for tagging and finding specific instances
/datum/soullink/Destroy()
if(soulowner)
LAZYREMOVE(soulowner.ownedSoullinks, src)
soulowner = null
if(soulsharer)
LAZYREMOVE(soulsharer.sharedSoullinks, src)
soulsharer = null
return ..()
/datum/soullink/proc/removeSoulsharer(mob/living/sharer)
if(soulsharer == sharer)
soulsharer = null
LAZYREMOVE(sharer.sharedSoullinks, src)
//Used to assign variables, called primarily by soullink()
//Override this to create more unique soullinks (Eg: 1->Many relationships)
//Return TRUE/FALSE to return the soullink/null in soullink()
/datum/soullink/proc/parseArgs(mob/living/owner, mob/living/sharer)
if(!owner || !sharer)
return FALSE
soulowner = owner
soulsharer = sharer
LAZYADD(owner.ownedSoullinks, src)
LAZYADD(sharer.sharedSoullinks, src)
return TRUE
//Runs after /living death()
//Override this for content
/datum/soullink/proc/ownerDies(gibbed, mob/living/owner)
//Runs after /living death()
//Override this for content
/datum/soullink/proc/sharerDies(gibbed, mob/living/owner)
//Quick-use helper
/proc/soullink(typepath, ...)
var/datum/soullink/S = new typepath()
if(S.parseArgs(arglist(args.Copy(2, 0))))
return S
/////////////////
// MULTISHARER //
/////////////////
//Abstract soullink for use with 1 Owner -> Many Sharer setups
/datum/soullink/multisharer
var/list/soulsharers
/datum/soullink/multisharer/parseArgs(mob/living/owner, list/sharers)
if(!owner || !LAZYLEN(sharers))
return FALSE
soulowner = owner
soulsharers = sharers
LAZYADD(owner.ownedSoullinks, src)
for(var/l in sharers)
var/mob/living/L = l
LAZYADD(L.sharedSoullinks, src)
return TRUE
/datum/soullink/multisharer/removeSoulsharer(mob/living/sharer)
LAZYREMOVE(soulsharers, sharer)
/////////////////
// SHARED FATE //
/////////////////
//When the soulowner dies, the soulsharer dies, and vice versa
//This is intended for two players(or AI) and two mobs
/datum/soullink/sharedfate/ownerDies(gibbed, mob/living/owner)
if(soulsharer)
soulsharer.death(gibbed)
/datum/soullink/sharedfate/sharerDies(gibbed, mob/living/sharer)
if(soulowner)
soulowner.death(gibbed)
/////////////////
// SHARED BODY //
/////////////////
//When the soulsharer dies, they're placed in the soulowner, who remains alive
//If the soulowner dies, the soulsharer is killed and placed into the soulowner (who is still dying)
//This one is intended for one player moving between many mobs
/datum/soullink/sharedbody/ownerDies(gibbed, mob/living/owner)
if(soulowner && soulsharer)
if(soulsharer.mind)
soulsharer.mind.transfer_to(soulowner)
soulsharer.death(gibbed)
/datum/soullink/sharedbody/sharerDies(gibbed, mob/living/sharer)
if(soulowner && soulsharer && soulsharer.mind)
soulsharer.mind.transfer_to(soulowner)
//////////////////////
// REPLACEMENT POOL //
//////////////////////
//When the owner dies, one of the sharers is placed in the owner's body, fully healed
//Sort of a "winner-stays-on" soullink
//Gibbing ends it immediately
/datum/soullink/multisharer/replacementpool/ownerDies(gibbed, mob/living/owner)
if(LAZYLEN(soulsharers) && !gibbed) //let's not put them in some gibs
var/list/souls = shuffle(soulsharers.Copy())
for(var/l in souls)
var/mob/living/L = l
if(L.stat != DEAD && L.mind)
L.mind.transfer_to(soulowner)
soulowner.revive(TRUE, TRUE)
L.death(FALSE)
//Lose your claim to the throne!
/datum/soullink/multisharer/replacementpool/sharerDies(gibbed, mob/living/sharer)
removeSoulsharer(sharer)
+50
View File
@@ -151,3 +151,53 @@
return
playsound(cyborg, 'sound/effects/light_flicker.ogg', 50, 1)
cyborg.cell.give(power_to_give)
/datum/status_effect/his_grace
id = "his_grace"
duration = -1
tick_interval = 4
alert_type = /obj/screen/alert/status_effect/his_grace
var/bloodlust = 0
/obj/screen/alert/status_effect/his_grace
name = "His Grace"
desc = "His Grace hungers, and you must feed Him."
icon_state = "his_grace"
alerttooltipstyle = "hisgrace"
/obj/screen/alert/status_effect/his_grace/MouseEntered(location,control,params)
desc = initial(desc)
var/datum/status_effect/his_grace/HG = attached_effect
desc += "<br><font size=3><b>Current Bloodthirst: [HG.bloodlust]</b></font>\
<br>Becomes undroppable at <b>[HIS_GRACE_FAMISHED]</b>\
<br>Will consume you at <b>[HIS_GRACE_CONSUME_OWNER]</b>"
..()
/datum/status_effect/his_grace/on_apply()
add_logs(owner, null, "gained His Grace's stun immunity")
owner.add_stun_absorption("hisgrace", INFINITY, 3, null, "His Grace protects you from the stun!")
/datum/status_effect/his_grace/tick()
bloodlust = 0
var/graces = 0
for(var/obj/item/weapon/his_grace/HG in owner.held_items)
if(HG.bloodthirst > bloodlust)
bloodlust = HG.bloodthirst
if(HG.awakened)
graces++
if(!graces)
owner.apply_status_effect(STATUS_EFFECT_HISWRATH)
qdel(src)
return
var/grace_heal = bloodlust * 0.05
owner.adjustBruteLoss(-grace_heal)
owner.adjustFireLoss(-grace_heal)
owner.adjustToxLoss(-grace_heal, TRUE, TRUE)
owner.adjustOxyLoss(-(grace_heal * 2))
owner.adjustCloneLoss(-grace_heal)
/datum/status_effect/his_grace/on_remove()
add_logs(owner, null, "lost His Grace's stun immunity")
if(islist(owner.stun_absorption) && owner.stun_absorption["hisgrace"])
owner.stun_absorption -= "hisgrace"
+20
View File
@@ -9,3 +9,23 @@
/datum/status_effect/sigil_mark/tick()
if(owner.stat < stat_allowed)
qdel(src)
/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace
id = "his_wrath"
duration = -1
tick_interval = 4
alert_type = /obj/screen/alert/status_effect/his_wrath
/obj/screen/alert/status_effect/his_wrath
name = "His Wrath"
desc = "You fled from His Grace instead of feeding Him, and now you suffer."
icon_state = "his_grace"
alerttooltipstyle = "hisgrace"
/datum/status_effect/his_wrath/tick()
for(var/obj/item/weapon/his_grace/HG in owner.held_items)
qdel(src)
return
owner.adjustBruteLoss(0.1)
owner.adjustFireLoss(0.1)
owner.adjustToxLoss(0.2, TRUE, TRUE)
+2 -2
View File
@@ -14,7 +14,7 @@
if(!owner.stat)
owner << "You become frozen in a cube!"
cube = icon('icons/effects/freeze.dmi', "ice_cube")
owner.overlays += cube
owner.add_overlay(cube)
owner.update_canmove()
/datum/status_effect/freon/tick()
@@ -25,6 +25,6 @@
/datum/status_effect/freon/on_remove()
if(!owner.stat)
owner << "The cube melts!"
owner.overlays -= cube
owner.cut_overlay(cube)
owner.bodytemperature += 100
owner.update_canmove()
+2 -2
View File
@@ -46,7 +46,7 @@
A.mode = 1 // AALARM_MODE_SCRUB
A.apply_mode()
if(WIRE_ALARM) // Clear alarms.
var/area/AA = get_area_master(A)
var/area/AA = get_area(A)
if(AA.atmosalert(0, holder))
A.post_alert(0)
A.update_icon()
@@ -68,7 +68,7 @@
A.mode = 3 // AALARM_MODE_PANIC
A.apply_mode()
if(WIRE_ALARM) // Post alarm.
var/area/AA = get_area_master(A)
var/area/AA = get_area(A)
if(AA.atmosalert(2, holder))
A.post_alert(2)
A.update_icon()
+4 -2
View File
@@ -30,7 +30,8 @@
if(WIRE_SAFETY)
SSU.safeties = !SSU.safeties
if(WIRE_ZAP)
SSU.shock(usr)
if(usr)
SSU.shock(usr)
/datum/wires/suit_storage_unit/on_cut(wire, mend)
var/obj/machinery/suit_storage_unit/SSU = holder
@@ -40,4 +41,5 @@
if(WIRE_SAFETY)
SSU.safeties = mend
if(WIRE_ZAP)
SSU.shock(usr)
if(usr)
SSU.shock(usr)
+21 -22
View File
@@ -45,7 +45,6 @@
var/safe = 0 //Is the area teleport-safe: no space / radiation / aggresive mobs / other dangers
var/no_air = null
var/area/master // master area used for power calcluations
var/list/related // the other areas of the same type as this
var/parallax_movedir = 0
@@ -98,10 +97,9 @@ var/list/teleportlocs = list()
/area/New()
/area/Initialize()
icon_state = ""
layer = AREA_LAYER
master = src
uid = ++global_uid
related = list(src)
map_name = name // Save the initial (the name set in the map) name of the area.
@@ -238,6 +236,8 @@ var/list/teleportlocs = list()
RA.mouse_opacity = 0
RA.updateicon()
RA.ModifyFiredoors(TRUE)
for(var/obj/machinery/firealarm/F in RA)
F.update_icon()
for (var/mob/living/silicon/aiPlayer in player_list)
aiPlayer.cancelAlarm("Fire", src, source)
@@ -343,17 +343,17 @@ var/list/teleportlocs = list()
/area/proc/powered(chan) // return true if the area has power to given channel
if(!master.requires_power)
if(!requires_power)
return 1
if(master.always_unpowered)
if(always_unpowered)
return 0
switch(chan)
if(EQUIP)
return master.power_equip
return power_equip
if(LIGHT)
return master.power_light
return power_light
if(ENVIRON)
return master.power_environ
return power_environ
return 0
@@ -372,19 +372,19 @@ var/list/teleportlocs = list()
var/used = 0
switch(chan)
if(LIGHT)
used += master.used_light
used += used_light
if(EQUIP)
used += master.used_equip
used += used_equip
if(ENVIRON)
used += master.used_environ
used += used_environ
if(TOTAL)
used += master.used_light + master.used_equip + master.used_environ
used += used_light + used_equip + used_environ
if(STATIC_EQUIP)
used += master.static_equip
used += static_equip
if(STATIC_LIGHT)
used += master.static_light
used += static_light
if(STATIC_ENVIRON)
used += master.static_environ
used += static_environ
return used
/area/proc/addStaticPower(value, powerchannel)
@@ -397,20 +397,19 @@ var/list/teleportlocs = list()
static_environ += value
/area/proc/clear_usage()
master.used_equip = 0
master.used_light = 0
master.used_environ = 0
used_equip = 0
used_light = 0
used_environ = 0
/area/proc/use_power(amount, chan)
switch(chan)
if(EQUIP)
master.used_equip += amount
used_equip += amount
if(LIGHT)
master.used_light += amount
used_light += amount
if(ENVIRON)
master.used_environ += amount
used_environ += amount
/area/Entered(A)
+2 -2
View File
@@ -14,9 +14,9 @@
*/
/area/holodeck/powered(var/chan)
if(!master.requires_power)
if(!requires_power)
return 1
if(master.always_unpowered)
if(always_unpowered)
return 0
if(!linked)
return 0
+16 -10
View File
@@ -18,15 +18,14 @@
//Value used to increment ex_act() if reactionary_explosions is on
var/explosion_block = 0
//overlays that should remain on top and not normally be removed, like c4.
var/list/priority_overlays
var/list/atom_colours //used to store the different colors on an atom
//its inherent color, the colored paint applied on it, special color effect etc...
var/initialized = FALSE
var/list/our_overlays //our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate
var/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
/atom/New()
/atom/New(loc, ...)
//atom creation method that preloads variables at creation
if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
_preloader.load(src)
@@ -35,15 +34,16 @@
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
//lighting stuff
if(opacity && isturf(loc))
loc.UpdateAffectingLights()
if(opacity && isturf(src.loc))
src.loc.UpdateAffectingLights()
if(luminosity)
light = new(src)
var/do_initialize = SSobj.initialized
if(do_initialize > INITIALIZATION_INSSOBJ)
Initialize(do_initialize == INITIALIZATION_INNEW_MAPLOAD)
var/do_initialize = SSatoms.initialized
if(do_initialize > INITIALIZATION_INSSATOMS)
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
Initialize(arglist(args))
//. = ..() //uncomment if you are dumb enough to add a /datum/New() proc
//Called after New if the map is being loaded. mapload = TRUE
@@ -52,11 +52,12 @@
//Derivatives must not sleep
//Returning TRUE while mapload is TRUE will cause the object to be initialized again with mapload = FALSE when everything else is done
//(Useful for things that requires turfs to have air). This base may only be called once, however
//Other parameters are passed from New (excluding loc), this does not happen if mapload is TRUE
//Note: the following functions don't call the base for optimization and must copypasta:
// /turf/Initialize
// /turf/open/space/Initialize
/atom/proc/Initialize(mapload)
/atom/proc/Initialize(mapload, ...)
if(initialized)
stack_trace("Warning: [src]([type]) initialized multiple times!")
initialized = TRUE
@@ -74,6 +75,11 @@
AA.hide(list(src))
if(reagents)
qdel(reagents)
LAZYCLEARLIST(overlays)
LAZYCLEARLIST(priority_overlays)
//SSoverlays.processing -= src //we COULD do this, but it's better to just let it fall out of the processing queue
return ..()
/atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5)
+6 -6
View File
@@ -137,7 +137,6 @@
icon = 'icons/obj/device.dmi'
icon_state = "locator"
var/borg_to_spawn
var/list/possible_types = list("Assault", "Medical")
/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user)
if(used)
@@ -189,12 +188,13 @@
icon = 'icons/obj/device.dmi'
icon_state = "locator"
/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault
name = "syndicate assault cyborg teleporter"
borg_to_spawn = "Assault"
/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/attack_self(mob/user)
borg_to_spawn = input("What type?", "Cyborg Type", type) as null|anything in possible_types
if(!borg_to_spawn)
return
..()
/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical
name = "syndicate medical teleporter"
borg_to_spawn = "Medical"
/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T)
var/mob/living/silicon/robot/R
+1 -1
View File
@@ -14,7 +14,7 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b
config_tag = "blob"
antag_flag = ROLE_BLOB
required_players = 10
required_players = 25
required_enemies = 1
recommended_enemies = 1
-1
View File
@@ -36,7 +36,6 @@
if (aiPlayer.client)
var/law = "The station is under quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving. The nuclear failsafe must be activated at any cost, the code is: [nukecode]."
aiPlayer.set_zeroth_law(law)
aiPlayer << "Laws Updated: [law]"
else
..()
return
+6 -7
View File
@@ -98,7 +98,7 @@
del_on_death = 1
deathmessage = "explodes into a cloud of gas!"
var/death_cloud_size = 1 //size of cloud produced from a dying spore
var/list/human_overlays = list()
var/mob/living/carbon/human/oldguy
var/is_zombie = 0
gold_core_spawnable = 1
@@ -136,9 +136,9 @@
icon_state = "zombie"
H.hair_style = null
H.update_hair()
human_overlays = H.overlays
update_icons()
H.forceMove(src)
oldguy = H
visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
@@ -167,9 +167,9 @@
if(factory)
factory.spores -= src
factory = null
if(contents)
for(var/mob/M in contents)
M.loc = src.loc
if(oldguy)
oldguy.forceMove(get_turf(src))
oldguy = null
return ..()
/mob/living/simple_animal/hostile/blob/blobspore/update_icons()
@@ -178,8 +178,7 @@
else
remove_atom_colour(FIXED_COLOUR_PRIORITY)
if(is_zombie)
cut_overlays()
overlays = human_overlays
copy_overlays(oldguy, TRUE)
var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head")
if(overmind)
I.color = overmind.blob_reagent_datum.complementary_color
@@ -8,7 +8,7 @@
//Heals the things that the other regenerative abilities don't.
/obj/effect/proc_holder/changeling/panacea/sting_action(mob/user)
user << "<span class='notice'>We begin cleansing impurities from our form.</span>"
user << "<span class='notice'>We cleanse impurities from our form.</span>"
var/mob/living/simple_animal/borer/B = user.has_brain_worms()
if(B)
@@ -19,13 +19,20 @@
var/mob/living/carbon/C = user
C.vomit(0)
user << "<span class='notice'>A parasite exits our form.</span>"
var/obj/item/organ/body_egg/egg = user.getorgan(/obj/item/organ/body_egg)
if(egg)
egg.Remove(user)
var/list/bad_organs = list(
user.getorgan(/obj/item/organ/body_egg),
user.getorgan(/obj/item/organ/zombie_infection))
for(var/o in bad_organs)
var/obj/item/organ/O = o
if(!istype(O))
continue
O.Remove(user)
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(0)
egg.loc = get_turf(user)
O.forceMove(get_turf(user))
user.reagents.add_reagent("mutadone", 10)
user.reagents.add_reagent("pen_acid", 20)
@@ -1,12 +1,10 @@
//returns a list of scriptures and if they're unlocked or not
/proc/scripture_unlock_check()
var/servants = 0
var/unconverted_ai_exists = FALSE
var/unconverted_ai_exists = get_unconverted_ais()
for(var/mob/living/M in living_mob_list)
if(is_servant_of_ratvar(M) && (ishuman(M) || issilicon(M)))
servants++
else if(isAI(M))
unconverted_ai_exists = TRUE
. = list(SCRIPTURE_DRIVER = TRUE, SCRIPTURE_SCRIPT = FALSE, SCRIPTURE_APPLICATION = FALSE, SCRIPTURE_REVENANT = FALSE, SCRIPTURE_JUDGEMENT = FALSE)
//Drivers: always unlocked
.[SCRIPTURE_SCRIPT] = (servants >= SCRIPT_SERVANT_REQ && clockwork_caches >= SCRIPT_CACHE_REQ)
@@ -26,22 +24,34 @@
hierophant_message("<span class='large_brass'><i>Hierophant Network:</i> <b>[i] Scripture has been [.[i] ? "un":""]locked.</b></span>")
update_slab_info()
/proc/get_unconverted_ais()
. = 0
for(var/ai in ai_list)
var/mob/living/silicon/AI = ai
if(is_servant_of_ratvar(AI) || !isturf(AI.loc) || AI.z != ZLEVEL_STATION)
continue
.++
/proc/update_slab_info(obj/item/clockwork/slab/set_slab)
generate_all_scripture()
var/needs_update = FALSE //if everything needs an update, for whatever reason
for(var/s in all_scripture)
var/datum/clockwork_scripture/S = s
S.creation_update()
if(!set_slab)
var/datum/clockwork_scripture/S = all_scripture[s]
if(S.creation_update())
needs_update = TRUE
if(!set_slab || needs_update)
for(var/obj/item/clockwork/slab/S in all_clockwork_objects)
SStgui.update_uis(S)
S.update_quickbind()
else
SStgui.update_uis(set_slab)
set_slab.update_quickbind()
/proc/generate_all_scripture()
if(!all_scripture.len)
for(var/V in sortList(subtypesof(/datum/clockwork_scripture), /proc/cmp_clockscripture_priority))
var/datum/clockwork_scripture/S = new V
all_scripture += S
all_scripture[S.type] = S
//changes construction value
/proc/change_construction_value(amount)
@@ -5,6 +5,10 @@
var/finished = FALSE
var/in_progress = FALSE
/obj/effect/proc_holder/slab/Destroy()
slab = null
return ..()
/obj/effect/proc_holder/slab/remove_ranged_ability(msg)
..()
finished = TRUE
@@ -113,6 +113,10 @@
charge_delay = 2
/obj/item/clockwork/clockwork_proselytizer/ratvar_act()
if(nezbere_invoked)
charge_rate = 1250
else
charge_rate = initial(charge_rate)
if(ratvar_awakens)
uses_power = FALSE
speed_multiplier = initial(speed_multiplier) * 0.25

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