diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index e0f33226e8c..ed4fb787b8d 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -254,7 +254,7 @@ CREATE TABLE `player` (
`UI_style_alpha` smallint(4) DEFAULT '255',
`be_role` mediumtext,
`default_slot` smallint(4) DEFAULT '1',
- `toggles` mediumint(8) DEFAULT '383',
+ `toggles` int(8) DEFAULT '383',
`sound` mediumint(8) DEFAULT '31',
`randomslot` tinyint(1) DEFAULT '0',
`volume` smallint(4) DEFAULT '100',
@@ -266,8 +266,9 @@ CREATE TABLE `player` (
`exp` mediumtext,
`clientfps` smallint(4) DEFAULT '0',
`atklog` smallint(4) DEFAULT '0',
- `fuid` BIGINT(20) NULL DEFAULT NULL,
- `fupdate` SMALLINT(4) NULL DEFAULT 0,
+ `fuid` bigint(20) NULL DEFAULT NULL,
+ `fupdate` smallint(4) NULL DEFAULT '0',
+ `afk_watch` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1;
@@ -531,11 +532,11 @@ 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;
+ `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 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -545,7 +546,21 @@ DROP TABLE IF EXISTS `vpn_whitelist`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vpn_whitelist` (
- `ckey` VARCHAR(32) NOT NULL,
- `reason` text
+ `ckey` varchar(32) NOT NULL,
+ `reason` text,
PRIMARY KEY (`ckey`)
-) ENGINE=INNODB;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `oauth_tokens`
+--
+DROP TABLE IF EXISTS `oauth_tokens`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `oauth_tokens` (
+ `ckey` varchar(32) NOT NULL,
+ `token` varchar(32) NOT NULL,
+ PRIMARY KEY (`token`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql
index ecb28a867e4..b0f7bbc5c82 100644
--- a/SQL/paradise_schema_prefixed.sql
+++ b/SQL/paradise_schema_prefixed.sql
@@ -253,7 +253,7 @@ CREATE TABLE `SS13_player` (
`UI_style_alpha` smallint(4) DEFAULT '255',
`be_role` mediumtext,
`default_slot` smallint(4) DEFAULT '1',
- `toggles` mediumint(8) DEFAULT '383',
+ `toggles` int(8) DEFAULT '383',
`sound` mediumint(8) DEFAULT '31',
`randomslot` tinyint(1) DEFAULT '0',
`volume` smallint(4) DEFAULT '100',
@@ -265,8 +265,9 @@ CREATE TABLE `SS13_player` (
`exp` mediumtext,
`clientfps` smallint(4) DEFAULT '0',
`atklog` smallint(4) DEFAULT '0',
- `fuid` BIGINT(20) NULL DEFAULT NULL,
- `fupdate` SMALLINT(4) NULL DEFAULT 0,
+ `fuid` bigint(20) NULL DEFAULT NULL,
+ `fupdate` smallint(4) NULL DEFAULT '0',
+ `afk_watch` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `ckey` (`ckey`)
) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1;
@@ -530,11 +531,11 @@ 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;
+ `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 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -544,7 +545,21 @@ DROP TABLE IF EXISTS `SS13_vpn_whitelist`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_vpn_whitelist` (
- `ckey` VARCHAR(32) NOT NULL,
+ `ckey` varchar(32) NOT NULL,
`reason` text,
PRIMARY KEY (`ckey`)
-) ENGINE=INNODB;
\ No newline at end of file
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `SS13_oauth_tokens`
+--
+DROP TABLE IF EXISTS `SS13_oauth_tokens`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `SS13_oauth_tokens` (
+ `ckey` varchar(32) NOT NULL,
+ `token` varchar(32) NOT NULL,
+ PRIMARY KEY (`token`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/SQL/updates/5-6.sql b/SQL/updates/5-6.sql
index 91bf4328a2a..ac3be8f8ef8 100644
--- a/SQL/updates/5-6.sql
+++ b/SQL/updates/5-6.sql
@@ -1,34 +1,37 @@
#Updating the SQL from version 5 to version 6. -Kyep
#Make a table to track the results of VPN/proxy lookups for IPs (IPINTEL, TG PORT)
-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;
+DROP TABLE IF EXISTS `ipintel`;
+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 DEFAULT CHARSET=latin1;
#Make a table to track which ckeys are whitelisted for use of VPNs (IPINTEL, CUSTOM)
+DROP TABLE IF EXISTS `vpn_whitelist`;
CREATE TABLE `vpn_whitelist` (
- `ckey` VARCHAR(32) NOT NULL,
+ `ckey` varchar(32) NOT NULL,
`reason` text,
PRIMARY KEY (`ckey`)
-) ENGINE=INNODB;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-# Add fuid (forum userid) which enables quick lookup of which ckey is associated with a specific forum account. (FORUM LINK)
-ALTER TABLE `player` ADD `fuid` BIGINT(20) NULL DEFAULT NULL;
+#Add fuid (forum userid) which enables quick lookup of which ckey is associated with a specific forum account. (FORUM LINK)
+ALTER TABLE `player` ADD `fuid` bigint(20) NULL DEFAULT NULL;
ALTER TABLE `player` ADD INDEX(`fuid`);
-# Add fupdate (forum update required) which flags specific ckeys as having been banned/unbanned, which requires an update of their forum/etc permissions (FORUM LINK)
-ALTER TABLE `player` ADD `fupdate` SMALLINT(4) NULL DEFAULT 0;
+#Add fupdate (forum update required) which flags specific ckeys as having been banned/unbanned, which requires an update of their forum/etc permissions (FORUM LINK)
+ALTER TABLE `player` ADD `fupdate` smallint(4) NULL DEFAULT 0;
ALTER TABLE `player` ADD INDEX(`fupdate`);
#Make a table to track oauth tokens for linking forum/web accounts (FORUM LINK)
+DROP TABLE IF EXISTS `oauth_tokens`;
CREATE TABLE `oauth_tokens` (
- `ckey` VARCHAR(32) NOT NULL,
- `token` VARCHAR(32) NOT NULL,
+ `ckey` varchar(32) NOT NULL,
+ `token` varchar(32) NOT NULL,
PRIMARY KEY (`token`)
-) ENGINE=INNODB;
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
#Drop the old 'discord' table that is not used anymore
DROP TABLE `discord`;
diff --git a/SQL/updates/6-7.sql b/SQL/updates/6-7.sql
new file mode 100644
index 00000000000..c871302b2de
--- /dev/null
+++ b/SQL/updates/6-7.sql
@@ -0,0 +1,2 @@
+ALTER TABLE player
+MODIFY COLUMN toggles int;
\ No newline at end of file
diff --git a/SQL/updates/7-8.sql b/SQL/updates/7-8.sql
new file mode 100644
index 00000000000..16bc90b7a50
--- /dev/null
+++ b/SQL/updates/7-8.sql
@@ -0,0 +1,2 @@
+# Add afk_watch which gives users the option to make use of the AFK watcher subsystem
+ALTER TABLE `player` ADD `afk_watch` tinyint(1) NOT NULL DEFAULT '0';
diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm
index bac17c5a2ad..447889d17a1 100644
--- a/_maps/map_files/Delta/delta.dmm
+++ b/_maps/map_files/Delta/delta.dmm
@@ -208,7 +208,7 @@
/turf/simulated/shuttle/plating,
/area/shuttle/abandoned)
"aaC" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -383,10 +383,10 @@
},
/area/shuttle/abandoned)
"abb" = (
-/obj/structure/chair{
+/obj/effect/decal/remains/human,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/effect/decal/remains/human,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -598,13 +598,13 @@
/area/shuttle/abandoned)
"abx" = (
/obj/item/shard,
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/abandoned)
"aby" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -667,8 +667,8 @@
icon_state = "1-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"abH" = (
/obj/structure/computerframe{
@@ -728,7 +728,7 @@
},
/area/shuttle/syndicate)
"abO" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -859,8 +859,8 @@
icon_state = "2-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"acf" = (
/obj/structure/cable{
@@ -880,29 +880,29 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"acg" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"ach" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"aci" = (
/obj/structure/cable{
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"acj" = (
/obj/structure/cable{
@@ -921,8 +921,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"ack" = (
/obj/structure/spacepoddoor,
@@ -967,8 +967,8 @@
},
/area/maintenance/auxsolarstarboard)
"acp" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"acq" = (
/obj/structure/table,
@@ -986,7 +986,7 @@
},
/area/shuttle/abandoned)
"acs" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -994,7 +994,7 @@
},
/area/shuttle/syndicate)
"act" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -1081,20 +1081,20 @@
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"acF" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"acG" = (
/obj/structure/cable{
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"acH" = (
/obj/structure/chair/stool,
@@ -1502,9 +1502,6 @@
},
/area/shuttle/pod_1)
"adx" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -1515,6 +1512,9 @@
dir = 4;
icon_state = "tube1"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_1)
"ady" = (
@@ -1524,9 +1524,6 @@
},
/area/shuttle/pod_2)
"adz" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -1537,6 +1534,9 @@
dir = 4;
icon_state = "tube1"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_2)
"adA" = (
@@ -1663,25 +1663,25 @@
/turf/simulated/wall/r_wall,
/area/hallway/secondary/entry)
"adO" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
dir = 4;
name = "station intercom (General)";
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_1)
"adP" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
dir = 4;
name = "station intercom (General)";
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_2)
"adQ" = (
@@ -1775,8 +1775,8 @@
pixel_y = -25;
req_access_txt = "10;13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"aed" = (
/obj/docking_port/mobile/pod{
@@ -3034,7 +3034,7 @@
},
/area/shuttle/administration)
"agw" = (
-/obj/structure/chair/comfy/black,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -3382,13 +3382,13 @@
},
/area/shuttle/administration)
"ahn" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/window/plasmareinforced{
color = "#d70000";
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -3615,7 +3615,7 @@
/turf/simulated/floor/engine/vacuum,
/area/engine/mechanic_workshop/hanger)
"ahN" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -3737,7 +3737,7 @@
},
/area/security/podbay)
"aic" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -3745,10 +3745,10 @@
},
/area/shuttle/administration)
"aid" = (
-/obj/structure/chair{
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -3798,7 +3798,7 @@
icon_state = "tube1";
dir = 4
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"aik" = (
@@ -3810,21 +3810,21 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"ail" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/effect/landmark{
name = "JoinLate"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"aim" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/landmark{
name = "JoinLate"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"ain" = (
@@ -4073,13 +4073,13 @@
/turf/simulated/shuttle/plating,
/area/shuttle/transport)
"aiR" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"aiS" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -4094,21 +4094,21 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"aiU" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/effect/landmark{
name = "HONKsquad"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"aiV" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/landmark{
name = "HONKsquad"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"aiW" = (
@@ -4343,7 +4343,7 @@
},
/area/shuttle/specops)
"ajs" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -4354,7 +4354,7 @@
dir = 2;
network = list("ERT","CentComm")
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -4407,7 +4407,7 @@
icon_state = "tube1";
dir = 8
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -4418,7 +4418,7 @@
icon_state = "tube1";
dir = 4
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -4601,14 +4601,14 @@
/turf/simulated/shuttle/plating/vox,
/area/shuttle/vox)
"ajW" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (WEST)";
icon_state = "tube1";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -4866,7 +4866,7 @@
},
/area/shuttle/specops)
"aku" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -5036,11 +5036,13 @@
/turf/simulated/shuttle/plating/vox,
/area/shuttle/vox)
"akN" = (
-/obj/structure/chair/stool,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"akO" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4/vox,
@@ -5380,7 +5382,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"alw" = (
-/obj/structure/chair/office/dark,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"alx" = (
@@ -5692,9 +5694,6 @@
/obj/effect/spawner/window/reinforced,
/turf/simulated/floor/plating,
/area/maintenance/fsmaint)
-"ami" = (
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"amj" = (
/obj/machinery/door/poddoor/shutters{
density = 0;
@@ -8074,7 +8073,7 @@
/area/shuttle/vox)
"arn" = (
/obj/item/stack/spacecash/c50,
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor4/vox,
@@ -8544,10 +8543,10 @@
"asf" = (
/obj/item/stack/spacecash/c200,
/obj/item/stack/spacecash/c50,
-/obj/structure/chair{
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"asg" = (
@@ -8927,8 +8926,8 @@
icon_state = "1-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"asV" = (
/obj/structure/cable{
@@ -8943,8 +8942,8 @@
icon_state = "1-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"asW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -9001,21 +9000,21 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"atb" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"atc" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"atd" = (
/turf/simulated/wall/r_wall,
@@ -9354,8 +9353,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"atL" = (
/obj/structure/cable{
@@ -9374,8 +9373,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"atM" = (
/obj/structure/cable{
@@ -9495,8 +9494,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"atV" = (
/obj/structure/disposalpipe/segment{
@@ -9546,8 +9545,8 @@
},
/area/maintenance/auxsolarport)
"atZ" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"aua" = (
/obj/effect/decal/cleanable/dirt,
@@ -12858,8 +12857,8 @@
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 6
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aAf" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -12907,8 +12906,8 @@
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aAj" = (
/obj/structure/cable{
@@ -13822,8 +13821,8 @@
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 5
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aBW" = (
/obj/structure/cable{
@@ -14708,8 +14707,8 @@
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 10
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aDD" = (
/obj/structure/cable{
@@ -14982,23 +14981,23 @@
/obj/machinery/atmospherics/unary/outlet_injector/on{
dir = 8
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/engine/controlroom)
"aEa" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 9
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aEb" = (
/obj/structure/cable{
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"aEc" = (
/obj/structure/cable{
@@ -15006,8 +15005,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"aEd" = (
/obj/machinery/atmospherics/trinary/filter{
@@ -15772,8 +15771,8 @@
/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 10
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aFA" = (
/turf/simulated/wall,
@@ -18103,13 +18102,13 @@
/area/security/prison)
"aJy" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space)
"aJz" = (
/obj/machinery/atmospherics/pipe/simple/visible/yellow,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aJA" = (
/obj/structure/cable{
@@ -19474,8 +19473,8 @@
d2 = 4;
icon_state = "0-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarport)
"aLR" = (
/obj/structure/chair/stool,
@@ -19494,8 +19493,8 @@
/area/crew_quarters/bar/atrium)
"aLT" = (
/obj/item/wrench,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aLU" = (
/turf/simulated/wall,
@@ -21046,8 +21045,8 @@
/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 5
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aOV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -21060,8 +21059,8 @@
/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aOX" = (
/obj/effect/decal/cleanable/dirt,
@@ -25713,8 +25712,8 @@
/obj/structure/disposaloutlet{
dir = 8
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/incinerator)
"aWS" = (
/obj/structure/table/reinforced,
@@ -27674,8 +27673,8 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aZZ" = (
/obj/item/radio/intercom{
@@ -27696,8 +27695,8 @@
dir = 8;
icon_state = "pipe-c"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bab" = (
/obj/effect/spawner/window/reinforced,
@@ -28072,8 +28071,8 @@
dir = 4;
level = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/atmos)
"baO" = (
/obj/machinery/access_button{
@@ -28605,8 +28604,8 @@
dir = 4;
level = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/atmos)
"bbG" = (
/turf/simulated/floor/plating,
@@ -28632,21 +28631,18 @@
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"bbJ" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/item/radio/intercom{
broadcasting = 0;
listening = 1;
name = "station intercom (General)";
pixel_y = 25
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"bbK" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -28654,6 +28650,9 @@
pixel_y = 32
},
/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"bbL" = (
@@ -30759,7 +30758,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/mining)
"bfQ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -33621,8 +33620,8 @@
},
/area/atmos)
"bkQ" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/atmos)
"bkR" = (
/obj/structure/reagent_dispensers/fueltank,
@@ -37929,7 +37928,7 @@
},
/area/shuttle/siberia)
"bsy" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -39468,8 +39467,8 @@
dir = 4;
level = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/atmos)
"buY" = (
/obj/structure/cable{
@@ -41012,15 +41011,12 @@
},
/area/security/nuke_storage)
"bxH" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
/area/shuttle/siberia)
"bxI" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/flasher{
id = "gulagshuttleflasher";
pixel_x = 25
@@ -41029,6 +41025,9 @@
dir = 4;
icon_state = "tube1"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/siberia)
"bxJ" = (
@@ -52886,8 +52885,8 @@
/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 9
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bRn" = (
/obj/structure/rack,
@@ -53123,8 +53122,8 @@
dir = 1;
layer = 2.9
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bRH" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -54793,8 +54792,8 @@
pixel_y = -20;
req_access_txt = "32"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bUc" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -55187,8 +55186,8 @@
dir = 4;
level = 1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bUK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -55445,8 +55444,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bVg" = (
/obj/structure/cable{
@@ -55662,8 +55661,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bVt" = (
/obj/structure/sign/vacuum{
@@ -57177,8 +57176,8 @@
pixel_y = 20;
req_access_txt = "10;13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bXG" = (
/obj/structure/cable{
@@ -57187,8 +57186,8 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bXH" = (
/obj/item/twohanded/required/kirbyplants,
@@ -57380,8 +57379,8 @@
tag = ""
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bYb" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -57463,8 +57462,8 @@
dir = 5;
level = 1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bYm" = (
/obj/structure/cable{
@@ -57477,8 +57476,8 @@
dir = 4;
level = 1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bYn" = (
/obj/structure/sign/directions/evac{
@@ -57686,8 +57685,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bYK" = (
/obj/effect/spawner/window/reinforced,
@@ -57907,8 +57906,8 @@
/obj/structure/window/reinforced{
dir = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bZg" = (
/obj/structure/table/reinforced,
@@ -58082,8 +58081,8 @@
dir = 4;
level = 1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bZx" = (
/obj/structure/disposalpipe/segment{
@@ -62768,8 +62767,8 @@
dir = 4;
level = 1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"chx" = (
/obj/structure/cable{
@@ -63819,8 +63818,8 @@
tag = "icon-D-SE";
icon_state = "D-SE"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cjm" = (
/obj/structure/closet/crate,
@@ -66332,8 +66331,8 @@
tag = "icon-E-SW-NW";
icon_state = "E-SW-NW"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cnI" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -66555,8 +66554,8 @@
/obj/structure/transit_tube{
icon_state = "E-W-Pass"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"coj" = (
/obj/structure/cable/yellow{
@@ -69022,8 +69021,8 @@
level = 1
},
/obj/structure/transit_tube,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"css" = (
/obj/structure/table/reinforced,
@@ -69083,8 +69082,8 @@
tag = "icon-W-SE";
icon_state = "W-SE"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"csz" = (
/obj/structure/closet/crate{
@@ -69730,8 +69729,8 @@
/obj/structure/window/reinforced{
dir = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ctJ" = (
/obj/structure/transit_tube{
@@ -69741,8 +69740,8 @@
/obj/structure/window/reinforced{
dir = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ctK" = (
/obj/structure/table/wood,
@@ -69890,8 +69889,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ctZ" = (
/obj/effect/spawner/window/reinforced,
@@ -72989,8 +72988,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"czx" = (
/obj/structure/cable{
@@ -74431,8 +74430,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cBV" = (
/obj/structure/chair/office/dark,
@@ -77524,8 +77523,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cHu" = (
/obj/effect/decal/cleanable/cobweb,
@@ -78371,8 +78370,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cJf" = (
/obj/structure/sign/directions/evac{
@@ -78818,8 +78817,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cKk" = (
/obj/structure/cable{
@@ -78833,8 +78832,8 @@
/area/toxins/xenobiology)
"cKl" = (
/obj/structure/window/reinforced,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cKm" = (
/obj/structure/cable{
@@ -80269,8 +80268,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cNo" = (
/obj/structure/cable{
@@ -80738,8 +80737,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cOa" = (
/obj/structure/table/reinforced,
@@ -80914,8 +80913,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cOn" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -81673,8 +81672,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cPL" = (
/obj/structure/disposalpipe/segment{
@@ -81841,8 +81840,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cPY" = (
/obj/machinery/access_button{
@@ -81854,8 +81853,8 @@
pixel_y = 24;
req_access_txt = "0"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cPZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -107526,8 +107525,8 @@
pixel_y = 25;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"dKy" = (
/obj/structure/grille,
@@ -109774,17 +109773,17 @@
},
/area/hallway/secondary/exit)
"dOy" = (
-/obj/structure/chair{
+/obj/effect/decal/warning_stripes/yellow/hollow,
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"dOz" = (
-/obj/structure/chair{
+/obj/effect/decal/warning_stripes/yellow/hollow,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/effect/decal/warning_stripes/yellow/hollow,
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"dOA" = (
@@ -110232,8 +110231,8 @@
icon_state = "0-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"dPo" = (
/obj/structure/bed/roller,
@@ -110919,8 +110918,8 @@
},
/area/medical/virology)
"dQB" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dQC" = (
/obj/machinery/field/generator{
@@ -112646,7 +112645,7 @@
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"dTN" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"dTO" = (
@@ -112669,16 +112668,16 @@
},
/area/shuttle/escape)
"dTR" = (
-/obj/structure/chair,
/obj/effect/decal/warning_stripes/yellow/hollow,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"dTS" = (
-/obj/structure/chair,
/obj/machinery/status_display{
pixel_y = 32
},
/obj/effect/decal/warning_stripes/yellow/hollow,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"dTT" = (
@@ -113013,7 +113012,7 @@
/turf/simulated/floor/plating,
/area/security/checkpoint)
"dUw" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor4,
@@ -113429,7 +113428,7 @@
/turf/simulated/floor/plating,
/area/security/checkpoint)
"dVf" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor4,
@@ -113515,16 +113514,16 @@
/turf/simulated/floor/plating,
/area/security/checkpoint)
"dVr" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"dVs" = (
-/obj/structure/chair{
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"dVt" = (
@@ -113661,7 +113660,7 @@
},
/area/shuttle/escape)
"dVJ" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel{
@@ -113680,7 +113679,7 @@
},
/area/shuttle/escape)
"dVL" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel{
@@ -113706,7 +113705,7 @@
},
/area/shuttle/escape)
"dVO" = (
-/obj/structure/chair/office/dark,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
@@ -114147,14 +114146,14 @@
},
/area/security/checkpoint)
"dWB" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light{
icon_state = "tube1";
dir = 4
},
/obj/effect/decal/warning_stripes/yellow/hollow,
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"dWC" = (
@@ -114990,8 +114989,8 @@
pixel_y = 24;
req_access_txt = "0"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"dXY" = (
/obj/structure/table/reinforced,
@@ -115328,8 +115327,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYJ" = (
/obj/structure/cable{
@@ -115337,8 +115336,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYK" = (
/obj/structure/cable{
@@ -115355,8 +115354,8 @@
pixel_y = 25;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYL" = (
/obj/structure/cable{
@@ -115371,8 +115370,8 @@
icon_state = "1-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYM" = (
/obj/structure/cable{
@@ -115392,16 +115391,16 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYN" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYO" = (
/obj/structure/cable{
@@ -115420,8 +115419,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYP" = (
/obj/structure/cable{
@@ -115435,8 +115434,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYQ" = (
/obj/machinery/access_button{
@@ -115448,8 +115447,8 @@
pixel_y = 24;
req_access_txt = "10;13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"dYR" = (
/obj/structure/cable{
@@ -115457,8 +115456,8 @@
icon_state = "0-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYS" = (
/obj/structure/cable{
@@ -115467,8 +115466,8 @@
icon_state = "1-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/portsolar)
"dYT" = (
/turf/simulated/floor/carpet,
@@ -115565,20 +115564,20 @@
},
/area/shuttle/syndicate_elite)
"dZc" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (WEST)";
icon_state = "tube1";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/syndicate_elite)
"dZd" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -115586,7 +115585,7 @@
},
/area/shuttle/syndicate_elite)
"dZe" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -115655,7 +115654,7 @@
/turf/simulated/shuttle/plating,
/area/shuttle/syndicate_elite)
"dZj" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -115782,15 +115781,15 @@
},
/area/shuttle/syndicate_sit)
"dZA" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (WEST)";
icon_state = "tube1";
dir = 8
},
/obj/structure/window/reinforced,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -115812,7 +115811,7 @@
},
/area/shuttle/syndicate_sit)
"dZD" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -115820,7 +115819,7 @@
},
/area/shuttle/syndicate_sit)
"dZE" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -115833,7 +115832,7 @@
icon_state = "tube1";
dir = 8
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -115891,7 +115890,7 @@
},
/area/shuttle/syndicate_sit)
"dZI" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -116010,6 +116009,12 @@
},
/turf/space,
/area/space)
+"udT" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor4/vox,
+/area/shuttle/vox)
(1,1,1) = {"
aaa
@@ -129823,7 +129828,7 @@ dyn
dyn
abj
abj
-ami
+acF
aaa
aaa
aaa
@@ -130337,7 +130342,7 @@ dyn
dyn
abj
abj
-ami
+acF
aaa
aaa
aaa
@@ -175945,8 +175950,8 @@ aaa
aaa
ajm
akm
-akN
-akN
+udT
+udT
akm
alU
ajO
diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
index 63c912e11d7..8bf89da81b2 100644
--- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm
@@ -148,7 +148,7 @@
},
/area/shuttle/syndicate)
"aaq" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -234,7 +234,7 @@
},
/area/shuttle/syndicate)
"aaB" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -242,7 +242,7 @@
},
/area/shuttle/syndicate)
"aaC" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -765,8 +765,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abB" = (
/turf/simulated/wall/r_wall,
@@ -868,8 +868,8 @@
/area/shuttle/syndicate)
"abL" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abM" = (
/obj/structure/cable{
@@ -882,8 +882,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abN" = (
/obj/structure/table,
@@ -958,28 +958,28 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abV" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abW" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abX" = (
/obj/structure/cable{
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abY" = (
/obj/structure/cable{
@@ -997,8 +997,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"abZ" = (
/obj/structure/cable{
@@ -1011,8 +1011,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"aca" = (
/obj/structure/cable/yellow{
@@ -1055,8 +1055,8 @@
/area/solar/auxport)
"acf" = (
/obj/item/stack/cable_coil,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"acg" = (
/obj/effect/spawner/window/reinforced,
@@ -1269,8 +1269,8 @@
name = "xeno_spawn";
pixel_x = -1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"acA" = (
/turf/simulated/floor/plasteel,
@@ -1333,9 +1333,6 @@
},
/area/shuttle/pod_2)
"acI" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -1344,6 +1341,9 @@
/obj/machinery/light{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_2)
"acJ" = (
@@ -1394,12 +1394,12 @@
/turf/simulated/floor/plating,
/area/security/permabrig)
"acP" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
pixel_x = 25
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_2)
"acQ" = (
@@ -1627,8 +1627,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"adj" = (
/obj/structure/cable{
@@ -1636,8 +1636,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"adk" = (
/obj/machinery/light/small{
@@ -1990,8 +1990,8 @@
/area/shuttle/vox)
"adP" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"adQ" = (
/obj/structure/table,
@@ -2117,8 +2117,8 @@
},
/area/security/permabrig)
"aee" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"aef" = (
/obj/structure/lattice/catwalk,
@@ -2135,8 +2135,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"aeh" = (
/turf/simulated/shuttle/wall{
@@ -2419,8 +2419,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"aeB" = (
/obj/machinery/atmospherics/unary/vent_scrubber{
@@ -2831,11 +2831,13 @@
/turf/simulated/shuttle/plating/vox,
/area/shuttle/vox)
"afi" = (
-/obj/structure/chair/stool,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"afj" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4/vox,
@@ -2893,8 +2895,8 @@
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"afp" = (
/obj/structure/chair/stool,
@@ -2918,8 +2920,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"afr" = (
/obj/effect/spawner/window/reinforced,
@@ -3124,8 +3126,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"afH" = (
/turf/simulated/shuttle/wall{
@@ -3385,8 +3387,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"agf" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
@@ -3411,12 +3413,12 @@
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"agi" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/item/radio/intercom{
pixel_y = 25
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"agj" = (
@@ -3451,8 +3453,8 @@
pixel_y = 1;
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"ago" = (
/obj/structure/cable,
@@ -3654,8 +3656,8 @@
})
"agH" = (
/obj/item/stack/cable_coil,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"agI" = (
/turf/space,
@@ -3699,8 +3701,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"agN" = (
/obj/machinery/atmospherics/unary/portables_connector{
@@ -5105,8 +5107,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"aiR" = (
/obj/structure/cable{
@@ -5114,8 +5116,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"aiS" = (
/obj/structure/closet/secure_closet/brig{
@@ -5522,15 +5524,15 @@
/turf/simulated/floor/plating,
/area/maintenance/auxsolarport)
"ajD" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
pixel_y = 32
},
/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"ajE" = (
@@ -6296,8 +6298,8 @@
name = "xeno_spawn";
pixel_x = -1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"akY" = (
/obj/effect/spawner/window/reinforced,
@@ -9245,7 +9247,7 @@
/area/shuttle/vox)
"aqo" = (
/obj/item/stack/spacecash/c50,
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor4/vox,
@@ -9916,10 +9918,10 @@
"ary" = (
/obj/item/stack/spacecash/c200,
/obj/item/stack/spacecash/c50,
-/obj/structure/chair{
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"arz" = (
@@ -11430,9 +11432,6 @@
/turf/simulated/floor/plating,
/area/maintenance/starboard)
"auc" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/flasher{
id = "gulagshuttleflasher";
pixel_x = 25
@@ -11440,6 +11439,9 @@
/obj/machinery/light{
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/siberia)
"aud" = (
@@ -11642,8 +11644,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/maintenance/auxsolarstarboard)
"auw" = (
/obj/structure/disposalpipe/segment,
@@ -12827,10 +12829,10 @@
layer = 4;
pixel_y = 32
},
-/obj/structure/chair{
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/obj/machinery/light,
/turf/simulated/shuttle/floor,
/area/shuttle/pod_4)
"awE" = (
@@ -14058,7 +14060,7 @@
/turf/simulated/floor/plasteel,
/area/engine/gravitygenerator)
"ayO" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -16682,7 +16684,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/mining)
"aDr" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -16910,7 +16912,7 @@
},
/area/security/nuke_storage)
"aDJ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -26731,12 +26733,12 @@
/turf/space,
/area/space/nearstation)
"aUW" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
pixel_x = 25
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_1)
"aUX" = (
@@ -27588,9 +27590,6 @@
name = "Port Maintenance"
})
"aWr" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -27599,6 +27598,9 @@
/obj/machinery/light{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_1)
"aWs" = (
@@ -27654,10 +27656,6 @@
/obj/effect/decal/cleanable/fungus,
/turf/simulated/wall,
/area/maintenance/fore)
-"aWw" = (
-/turf/space,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"aWx" = (
/obj/machinery/door/airlock/maintenance{
name = "Storage Room";
@@ -31844,8 +31842,8 @@
})
"bdO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/construction/hallway{
name = "\improper MiniSat Exterior"
})
@@ -36496,7 +36494,7 @@
/obj/item/radio/intercom{
pixel_y = 25
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -36689,15 +36687,15 @@
},
/area/shuttle/arrival/station)
"blP" = (
-/obj/structure/chair,
/obj/machinery/light{
dir = 1;
in_use = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"blQ" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"blR" = (
@@ -36708,12 +36706,12 @@
},
/area/shuttle/arrival/station)
"blS" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/landmark{
name = "JoinLate"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"blT" = (
@@ -38981,14 +38979,14 @@
name = "\improper MiniSat Exterior"
})
"bpw" = (
-/obj/structure/chair{
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light,
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"bpx" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -43950,8 +43948,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bxn" = (
/obj/structure/transit_tube{
@@ -43971,8 +43969,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bxo" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -43984,10 +43982,11 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
-"bxp" = (/obj/structure/transit_tube_pod,
+"bxp" = (
+/obj/structure/transit_tube_pod,
/obj/structure/window/reinforced{
dir = 8
},
@@ -44020,8 +44019,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"bxr" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -50737,14 +50736,14 @@
},
/area/shuttle/transport)
"bIH" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bII" = (
@@ -50752,16 +50751,16 @@
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bIJ" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bIK" = (
-/obj/structure/chair,
/obj/machinery/light/spot{
tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bIL" = (
@@ -53206,16 +53205,16 @@
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bMz" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bMA" = (
-/obj/structure/chair{
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bMB" = (
@@ -65908,8 +65907,8 @@
/area/hydroponics)
"ciB" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"ciC" = (
/obj/effect/decal/warning_stripes/northeast,
@@ -66269,8 +66268,8 @@
/turf/simulated/floor/plating,
/area/atmos)
"cjc" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cjd" = (
/obj/effect/spawner/window/reinforced,
@@ -67031,8 +67030,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cks" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -68466,8 +68465,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cmI" = (
/obj/machinery/vending/wallmed1{
@@ -74375,8 +74374,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cvR" = (
/obj/structure/chair/office/light,
@@ -76930,8 +76929,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cAg" = (
/obj/structure/closet,
@@ -77549,8 +77548,8 @@
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cBf" = (
/obj/machinery/computer/security/telescreen{
@@ -77572,8 +77571,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cBh" = (
/obj/item/storage/secure/safe{
@@ -78222,8 +78221,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cCg" = (
/obj/item/reagent_containers/glass/beaker/large,
@@ -78305,8 +78304,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cCk" = (
/obj/structure/table,
@@ -78456,8 +78455,8 @@
/area/medical/surgeryobs)
"cCw" = (
/obj/item/stack/cable_coil,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cCx" = (
/obj/structure/cable/yellow{
@@ -78490,8 +78489,8 @@
d2 = 4;
icon_state = "0-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cCA" = (
/turf/simulated/floor/plasteel{
@@ -78807,8 +78806,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cDa" = (
/obj/machinery/door/airlock/maintenance{
@@ -82329,8 +82328,8 @@
pixel_x = -1
},
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cIO" = (
/obj/item/flashlight/lamp,
@@ -86865,8 +86864,8 @@
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cPV" = (
/obj/structure/closet/wardrobe/robotics_black{
@@ -91756,8 +91755,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cXO" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -92022,8 +92021,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cYj" = (
/obj/structure/chair,
@@ -92219,8 +92218,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cYB" = (
/obj/machinery/light/small{
@@ -92476,12 +92475,12 @@
})
"cYY" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cYZ" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cZa" = (
/obj/machinery/light_switch{
@@ -92526,8 +92525,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cZd" = (
/obj/structure/cable{
@@ -92545,8 +92544,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cZe" = (
/turf/simulated/shuttle/wall{
@@ -92593,8 +92592,8 @@
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cZk" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
@@ -92801,8 +92800,8 @@
})
"cZA" = (
/obj/item/stack/cable_coil,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cZB" = (
/turf/simulated/shuttle/floor,
@@ -92999,8 +92998,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cZX" = (
/obj/machinery/light{
@@ -93368,17 +93367,17 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"daC" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"daD" = (
-/obj/structure/chair,
/obj/machinery/light{
dir = 1;
on = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -94194,7 +94193,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"dbQ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -94333,10 +94332,10 @@
},
/area/chapel/main)
"dbY" = (
-/obj/structure/chair{
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -94567,10 +94566,10 @@
},
/area/shuttle/escape)
"dcp" = (
-/obj/structure/chair,
/obj/machinery/light{
dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -94640,8 +94639,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"dcw" = (
/obj/structure/window/reinforced,
@@ -94848,8 +94847,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"dcO" = (
/obj/docking_port/stationary{
@@ -94868,9 +94867,6 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"dcQ" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
broadcasting = 0;
listening = 1;
@@ -94878,6 +94874,9 @@
pixel_y = -28
},
/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -94958,13 +94957,13 @@
name = "\improper Secure Lab"
})
"dda" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ddb" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/plating{
@@ -94972,11 +94971,11 @@
},
/area/shuttle/escape)
"ddc" = (
-/obj/structure/chair/office/dark,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ddd" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -95013,7 +95012,7 @@
name = "\improper Secure Lab"
})
"ddi" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -95021,7 +95020,7 @@
},
/area/shuttle/escape)
"ddj" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -95125,8 +95124,8 @@
name = "xeno_spawn";
pixel_x = -1
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddx" = (
/turf/simulated/shuttle/wall{
@@ -95197,8 +95196,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddE" = (
/turf/simulated/shuttle/wall{
@@ -95213,12 +95212,12 @@
},
/area/shuttle/escape)
"ddG" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/reagent_dispensers/peppertank{
pixel_x = 31
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -95230,12 +95229,12 @@
},
/area/shuttle/escape)
"ddI" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/plating{
icon_state = "floorgrime"
},
@@ -95381,12 +95380,12 @@
name = "\improper Secure Lab"
})
"ddV" = (
-/obj/structure/chair,
/obj/item/radio/intercom{
dir = 4;
name = "Station Intercom (General)";
pixel_y = 27
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -95419,12 +95418,12 @@
name = "\improper Secure Lab"
})
"ddY" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -95651,7 +95650,7 @@
/turf/simulated/wall/r_wall,
/area/medical/virology)
"dev" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -97507,6 +97506,12 @@
},
/turf/simulated/floor/plating,
/area/maintenance/fore)
+"tXL" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor4/vox,
+/area/shuttle/vox)
(1,1,1) = {"
aaa
@@ -112048,7 +112053,7 @@ apf
abq
aaa
abq
-aWw
+aef
abq
aaa
aaa
@@ -112305,7 +112310,7 @@ apf
aaa
aaa
aaa
-aWw
+aef
aaa
bZU
bZU
@@ -134177,9 +134182,9 @@ cHf
abq
aaa
aaa
-aWw
+aef
cPU
-aWw
+aef
aaa
abq
aaa
@@ -134937,7 +134942,7 @@ aaa
abq
aaa
abq
-aWw
+aef
abq
abq
aaa
@@ -135194,7 +135199,7 @@ abq
abq
abq
abq
-aWw
+aef
aaa
aaa
aaa
@@ -143627,8 +143632,8 @@ aCg
bjT
aTR
bgL
-aWw
-aWw
+aef
+aef
abq
abq
aaa
@@ -144114,7 +144119,7 @@ aaa
aaa
aaa
abq
-aWw
+aef
aCj
aDm
aFm
@@ -144371,7 +144376,7 @@ aaa
abq
abq
abq
-aWw
+aef
bre
aCg
aDn
@@ -147693,8 +147698,8 @@ aaa
aaa
adM
aeF
-afi
-afi
+tXL
+tXL
aeF
agJ
aeh
@@ -148510,8 +148515,8 @@ abq
aaa
aaa
abq
-aWw
-aWw
+aef
+aef
abq
bsQ
abq
diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm
index bed554f54f2..f27926e04f9 100644
--- a/_maps/map_files/MetaStation/z2.dmm
+++ b/_maps/map_files/MetaStation/z2.dmm
@@ -1771,13 +1771,6 @@
/obj/structure/grille,
/turf/simulated/shuttle/plating,
/area/centcom/evac)
-"eP" = (
-/obj/structure/chair{
- dir = 4;
- name = "Prosecution"
- },
-/turf/simulated/shuttle/floor,
-/area/centcom/evac)
"eQ" = (
/obj/structure/closet/secure_closet/cargotech,
/turf/unsimulated/floor{
@@ -5049,27 +5042,27 @@
},
/area/tdome/tdomeobserve)
"nK" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light/small{
tag = "icon-bulb1 (EAST)";
icon_state = "bulb1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/assault_pod)
"nL" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/small{
tag = "icon-bulb1 (WEST)";
icon_state = "bulb1";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -6113,7 +6106,7 @@
/turf/space,
/area/shuttle/escape_pod5/centcom)
"xF" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -6121,7 +6114,7 @@
},
/area/centcom/evac)
"xG" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -6129,7 +6122,7 @@
},
/area/centcom/evac)
"xW" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -6139,13 +6132,13 @@
/turf/simulated/shuttle/floor,
/area/centcom/evac)
"yd" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
/area/centcom/evac)
"yf" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/centcom/evac)
"yg" = (
@@ -6160,12 +6153,6 @@
icon_state = "floor4"
},
/area/shuttle/escape)
-"yl" = (
-/obj/structure/chair/sofa/corner,
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/escape)
"ym" = (
/obj/structure/chair/office/dark,
/turf/unsimulated/floor{
@@ -6265,25 +6252,25 @@
/turf/unsimulated/ai_visible,
/area/ai_multicam_room)
"EE" = (
-/obj/structure/chair{
+/obj/machinery/light/small,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/small,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/assault_pod)
"Fz" = (
-/obj/structure/chair,
/obj/machinery/light/small{
dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/assault_pod)
"FV" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -6291,13 +6278,19 @@
},
/area/shuttle/assault_pod)
"FW" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/assault_pod)
+"Gw" = (
+/obj/structure/chair/sofa/left,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/escape)
"HX" = (
/turf/unsimulated/ai_visible,
/area/ai_multicam_room)
@@ -27558,7 +27551,7 @@ fe
fd
fG
eh
-eP
+xW
fd
fT
fC
@@ -47108,7 +47101,7 @@ ab
ab
ab
fi
-yk
+Gw
jE
jE
jE
@@ -47365,7 +47358,7 @@ ab
ab
ab
fi
-yl
+jE
jE
jE
jE
diff --git a/_maps/map_files/MetaStation/z4.dmm b/_maps/map_files/MetaStation/z4.dmm
index d73e5d2d490..6b7523f801d 100644
--- a/_maps/map_files/MetaStation/z4.dmm
+++ b/_maps/map_files/MetaStation/z4.dmm
@@ -4864,8 +4864,8 @@
/area/derelict/se_solar)
"nv" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nw" = (
/obj/structure/grille,
@@ -4900,8 +4900,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nB" = (
/obj/structure/cable{
@@ -4921,8 +4921,8 @@
icon_state = "1-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nD" = (
/obj/structure/cable{
@@ -4956,8 +4956,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nG" = (
/obj/structure/cable{
@@ -4970,8 +4970,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nH" = (
/obj/structure/cable{
@@ -4979,8 +4979,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nI" = (
/obj/structure/cable{
@@ -4999,8 +4999,8 @@
icon_state = "1-2";
pixel_y = 0
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nJ" = (
/obj/structure/cable{
@@ -5013,8 +5013,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nK" = (
/obj/structure/cable{
@@ -5032,13 +5032,13 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"nL" = (
/obj/item/stack/cable_coil/cut,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"nM" = (
/turf/simulated/floor/plating/airless{
@@ -5120,8 +5120,8 @@
/turf/simulated/wall/r_wall,
/area/derelict/se_solar)
"oa" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"ob" = (
/obj/machinery/door/airlock/external{
@@ -5156,8 +5156,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"og" = (
/obj/structure/closet/emcloset,
@@ -5185,8 +5185,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/derelict_aft)
"ok" = (
/obj/effect/landmark/damageturf,
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
index e6fda6f503a..7d505d64a28 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm
@@ -207,8 +207,8 @@
/turf/simulated/floor/wood,
/area/ruin/powered/beach)
"aN" = (
-/obj/machinery/vending/cola,
/obj/effect/turf_decal/sand,
+/obj/machinery/vending/cola/free,
/turf/simulated/floor/plasteel,
/area/ruin/powered/beach)
"aO" = (
@@ -235,8 +235,8 @@
/turf/simulated/floor/wood,
/area/ruin/powered/beach)
"aT" = (
-/obj/machinery/vending/snack,
/obj/effect/turf_decal/sand,
+/obj/machinery/vending/snack/free,
/turf/simulated/floor/plasteel,
/area/ruin/powered/beach)
"aU" = (
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
index 5822d05aa8a..5a947203de8 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm
@@ -116,6 +116,9 @@
/obj/item/scalpel{
pixel_y = 12
},
+/obj/machinery/defibrillator_mount/loaded{
+ pixel_y = 30
+ },
/turf/simulated/floor/plasteel/white,
/area/ruin/powered/animal_hospital)
"aq" = (
@@ -489,7 +492,7 @@
/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/obj/machinery/vending/crittercare,
+/obj/machinery/vending/crittercare/free,
/turf/simulated/floor/plasteel,
/area/ruin/powered/animal_hospital)
"bn" = (
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
index 66d5f5fce80..8bf85306742 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
@@ -177,6 +177,7 @@
/obj/structure/stone_tile{
dir = 4
},
+/obj/item/seeds/wheat,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aC" = (
@@ -189,11 +190,12 @@
dir = 4
},
/obj/structure/closet/crate/medical,
-/obj/item/storage/firstaid/regular,
/obj/item/reagent_containers/iv_bag/blood,
/obj/item/reagent_containers/iv_bag/blood,
/obj/item/reagent_containers/iv_bag/blood,
/obj/item/stack/sheet/cloth/ten,
+/obj/item/stack/medical/splint,
+/obj/item/storage/firstaid/adv,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aF" = (
@@ -255,6 +257,8 @@
/obj/structure/stone_tile/cracked{
dir = 4
},
+/obj/item/seeds/comfrey,
+/obj/item/seeds/aloe,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"aN" = (
@@ -1255,10 +1259,7 @@
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"do" = (
-/obj/structure/stone_tile{
- dir = 8
- },
-/obj/structure/reagent_dispensers/watertank,
+/obj/structure/sink/puddle,
/obj/effect/mapping_helpers/no_lava,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm
index 589f1c194a4..5629bb19b49 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm
@@ -151,10 +151,6 @@
/obj/structure/stone_tile/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"z" = (
-/obj/effect/baseturf_helper/lava_land/surface,
-/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
@@ -291,7 +287,7 @@ f
j
c
r
-z
+c
o
c
c
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm
index 121d949e34d..3d224a617d6 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm
@@ -121,16 +121,6 @@
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"u" = (
-/obj/structure/stone_tile{
- dir = 8
- },
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/effect/baseturf_helper/lava_land/surface,
-/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
"v" = (
/obj/structure/stone_tile/block/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
@@ -261,7 +251,7 @@ f
f
o
r
-u
+q
w
f
f
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm
index d14383a82dc..0f6c96fb041 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm
@@ -57,16 +57,6 @@
/obj/structure/stone_tile/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
-"j" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/structure/stone_tile/block/cracked{
- dir = 4
- },
-/obj/effect/baseturf_helper/lava_land/surface,
-/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
-/area/lavaland/surface/outdoors)
"k" = (
/obj/structure/stone_tile,
/obj/structure/stone_tile{
@@ -274,7 +264,7 @@ d
f
d
f
-j
+e
d
w
f
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cube.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cube.dmm
new file mode 100644
index 00000000000..888ead3e24c
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cube.dmm
@@ -0,0 +1,980 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/turf/unsimulated/wall,
+/area/lavaland/surface/outdoors)
+"e" = (
+/obj/machinery/wish_granter,
+/obj/effect/mapping_helpers/no_lava,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+a
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+b
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+a
+b
+b
+c
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+b
+a
+a
+a
+a
+b
+a
+a
+a
+a
+a
+a
+a
+b
+a
+b
+b
+b
+a
+a
+b
+b
+a
+a
+b
+b
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+b
+b
+"}
+(5,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+b
+"}
+(6,1,1) = {"
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+b
+"}
+(7,1,1) = {"
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+c
+b
+b
+b
+c
+b
+b
+b
+b
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+"}
+(9,1,1) = {"
+a
+a
+b
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+"}
+(11,1,1) = {"
+a
+a
+a
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+b
+"}
+(12,1,1) = {"
+a
+a
+b
+a
+a
+a
+b
+b
+a
+a
+c
+b
+b
+b
+b
+b
+c
+b
+c
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+"}
+(13,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+c
+b
+c
+c
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+"}
+(14,1,1) = {"
+a
+a
+b
+c
+b
+b
+b
+b
+c
+b
+c
+d
+d
+d
+d
+d
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+b
+b
+"}
+(15,1,1) = {"
+a
+a
+b
+b
+b
+b
+c
+b
+b
+b
+b
+d
+d
+d
+d
+d
+b
+c
+b
+b
+c
+b
+a
+b
+b
+b
+b
+b
+b
+b
+"}
+(16,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+b
+c
+b
+d
+d
+e
+d
+d
+b
+b
+a
+a
+b
+b
+a
+a
+b
+b
+b
+b
+b
+b
+"}
+(17,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+c
+b
+b
+c
+d
+d
+d
+d
+d
+c
+c
+a
+a
+a
+a
+a
+a
+a
+b
+b
+a
+b
+b
+"}
+(18,1,1) = {"
+a
+a
+b
+a
+a
+a
+b
+b
+b
+b
+b
+d
+d
+d
+d
+d
+b
+c
+b
+a
+a
+a
+a
+a
+b
+b
+b
+c
+a
+a
+"}
+(19,1,1) = {"
+a
+a
+b
+a
+a
+a
+b
+b
+b
+b
+b
+c
+b
+c
+c
+b
+c
+b
+b
+a
+a
+a
+a
+a
+b
+a
+b
+b
+a
+a
+"}
+(20,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+c
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(21,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(22,1,1) = {"
+a
+a
+b
+b
+b
+b
+a
+b
+b
+b
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(23,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(24,1,1) = {"
+a
+a
+a
+a
+a
+a
+c
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(25,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(26,1,1) = {"
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+b
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(27,1,1) = {"
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+b
+c
+b
+b
+a
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(28,1,1) = {"
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+b
+b
+b
+b
+b
+b
+b
+"}
+(29,1,1) = {"
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+b
+a
+b
+b
+b
+b
+"}
+(30,1,1) = {"
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
new file mode 100644
index 00000000000..d9d2feef160
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
@@ -0,0 +1,367 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"c" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/ruin/unpowered)
+"d" = (
+/turf/simulated/wall/cult,
+/area/ruin/unpowered)
+"e" = (
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered)
+"f" = (
+/obj/structure/cult/pylon,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered)
+"g" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"h" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/wall/cult,
+/area/ruin/unpowered)
+"i" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/old,
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"k" = (
+/obj/effect/decal/remains/human,
+/obj/item/melee/cultblade,
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"l" = (
+/obj/effect/decal/remains/human,
+/obj/item/clothing/shoes/cult,
+/obj/item/clothing/suit/hooded/cultrobes,
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"m" = (
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"o" = (
+/obj/effect/rune/narsie{
+ color = "#ff0000";
+ used = 1
+ },
+/obj/item/cult_shift,
+/obj/effect/decal/remains/human,
+/obj/item/melee/cultblade/dagger,
+/obj/effect/step_trigger/sound_effect{
+ happens_once = 1;
+ name = "a grave mistake";
+ sound = 'sound/hallucinations/i_see_you1.ogg';
+ triggerer_only = 1
+ },
+/obj/effect/step_trigger/message{
+ message = "You've made a grave mistake, haven't you?";
+ name = "ohfuck"
+ },
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"q" = (
+/obj/effect/decal/remains/human,
+/obj/item/clothing/shoes/cult,
+/obj/item/clothing/suit/hooded/cultrobes,
+/obj/effect/decal/cleanable/blood/old,
+/turf/simulated/floor/engine/cult{
+ oxygen = 24;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"s" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+c
+b
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+d
+e
+c
+s
+c
+b
+b
+b
+c
+s
+c
+s
+d
+a
+"}
+(3,1,1) = {"
+a
+e
+f
+s
+d
+c
+c
+g
+c
+c
+d
+e
+f
+s
+a
+"}
+(4,1,1) = {"
+a
+c
+s
+c
+c
+c
+c
+b
+c
+c
+c
+c
+e
+c
+a
+"}
+(5,1,1) = {"
+a
+s
+d
+c
+c
+b
+b
+b
+b
+b
+c
+c
+d
+s
+a
+"}
+(6,1,1) = {"
+a
+c
+c
+c
+b
+b
+l
+d
+k
+b
+b
+c
+c
+c
+a
+"}
+(7,1,1) = {"
+b
+b
+c
+c
+g
+i
+b
+b
+b
+l
+b
+c
+c
+b
+b
+"}
+(8,1,1) = {"
+c
+b
+g
+b
+b
+d
+b
+o
+b
+d
+b
+b
+g
+b
+c
+"}
+(9,1,1) = {"
+b
+b
+c
+c
+b
+k
+b
+b
+b
+m
+b
+c
+c
+b
+b
+"}
+(10,1,1) = {"
+a
+c
+c
+c
+g
+b
+m
+h
+q
+b
+b
+c
+c
+c
+a
+"}
+(11,1,1) = {"
+a
+s
+d
+c
+c
+b
+b
+b
+b
+b
+c
+c
+d
+s
+a
+"}
+(12,1,1) = {"
+a
+c
+s
+c
+c
+c
+c
+b
+c
+c
+c
+c
+e
+c
+a
+"}
+(13,1,1) = {"
+a
+e
+f
+s
+d
+c
+c
+g
+c
+c
+d
+e
+f
+s
+a
+"}
+(14,1,1) = {"
+a
+d
+e
+c
+s
+c
+b
+b
+b
+c
+s
+c
+s
+d
+a
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+c
+b
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_dead_ratvar.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_dead_ratvar.dmm
new file mode 100644
index 00000000000..03959657af8
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_dead_ratvar.dmm
@@ -0,0 +1,1018 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"c" = (
+/obj/item/clockwork/alloy_shards/small,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"d" = (
+/obj/structure/clockwork/wall_gear,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"e" = (
+/obj/item/stack/tile/brass,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"f" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"g" = (
+/obj/item/clockwork/alloy_shards/medium/gear_bit,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"h" = (
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"i" = (
+/obj/structure/grille/ratvar/broken,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"j" = (
+/turf/simulated/wall/clockwork,
+/area/lavaland/surface/outdoors/unexplored)
+"k" = (
+/obj/item/clockwork/alloy_shards/small,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"l" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"m" = (
+/obj/item/clockwork/alloy_shards/medium,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"n" = (
+/obj/item/clockwork/component/belligerent_eye/blind_eye,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"o" = (
+/obj/item/clockwork/alloy_shards/large,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"p" = (
+/obj/item/clockwork/alloy_shards/medium,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"q" = (
+/obj/structure/lattice/catwalk/clockwork,
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"r" = (
+/obj/structure/lattice/clockwork,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"s" = (
+/obj/item/clockwork/alloy_shards/large,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"t" = (
+/obj/item/stack/tile/brass,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"u" = (
+/obj/structure/grille/ratvar,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"v" = (
+/obj/item/clockwork/alloy_shards/medium,
+/obj/structure/lattice/clockwork,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"w" = (
+/obj/structure/grille/ratvar/broken,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"x" = (
+/obj/structure/clockwork/wall_gear,
+/obj/item/stack/tile/brass,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"y" = (
+/obj/item/clockwork/component/geis_capacitor/fallen_armor,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"z" = (
+/obj/structure/clockwork/wall_gear,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"A" = (
+/obj/item/clockwork/alloy_shards/clockgolem_remains,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"B" = (
+/obj/item/clockwork/weapon/ratvarian_spear,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"C" = (
+/obj/item/clockwork/alloy_shards/medium/gear_bit,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"D" = (
+/obj/structure/grille/ratvar,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"E" = (
+/obj/item/clockwork/alloy_shards/clockgolem_remains,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+"F" = (
+/obj/structure/dead_ratvar,
+/turf/simulated/floor/clockwork{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/lavaland/surface/outdoors/unexplored)
+"G" = (
+/obj/item/stack/tile/brass/fifty,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors/unexplored)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+s
+h
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+o
+b
+a
+h
+b
+r
+c
+j
+x
+b
+b
+g
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+f
+b
+l
+b
+v
+b
+p
+w
+j
+j
+c
+l
+b
+b
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+f
+l
+l
+r
+b
+b
+l
+j
+j
+j
+p
+l
+b
+h
+c
+r
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+b
+l
+l
+p
+h
+c
+l
+l
+l
+j
+l
+b
+l
+l
+D
+h
+r
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+h
+c
+h
+m
+l
+l
+c
+l
+l
+l
+l
+w
+l
+l
+l
+m
+c
+h
+f
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+b
+b
+b
+l
+l
+l
+l
+h
+b
+l
+l
+l
+l
+l
+l
+l
+l
+c
+f
+f
+b
+a
+"}
+(8,1,1) = {"
+a
+h
+h
+g
+c
+b
+l
+l
+l
+l
+n
+h
+r
+l
+l
+b
+l
+l
+l
+l
+f
+b
+a
+a
+"}
+(9,1,1) = {"
+a
+b
+c
+b
+b
+l
+l
+l
+l
+t
+h
+b
+h
+w
+p
+b
+g
+l
+l
+b
+b
+b
+b
+a
+"}
+(10,1,1) = {"
+b
+h
+l
+l
+l
+l
+l
+l
+b
+b
+p
+r
+F
+b
+h
+A
+b
+l
+l
+l
+m
+l
+l
+a
+"}
+(11,1,1) = {"
+c
+i
+j
+j
+l
+l
+l
+l
+l
+b
+h
+k
+h
+h
+h
+r
+l
+l
+l
+l
+l
+l
+b
+a
+"}
+(12,1,1) = {"
+d
+j
+j
+j
+h
+l
+l
+b
+l
+q
+r
+h
+h
+h
+c
+q
+l
+b
+l
+l
+b
+h
+o
+a
+"}
+(13,1,1) = {"
+e
+k
+b
+l
+l
+l
+b
+p
+s
+r
+h
+h
+h
+h
+h
+h
+h
+l
+l
+l
+l
+b
+b
+a
+"}
+(14,1,1) = {"
+b
+b
+b
+m
+l
+l
+l
+b
+h
+h
+k
+h
+h
+h
+h
+h
+c
+b
+l
+l
+b
+b
+h
+b
+"}
+(15,1,1) = {"
+b
+b
+b
+l
+l
+l
+l
+h
+h
+h
+h
+h
+h
+h
+k
+B
+h
+l
+l
+l
+l
+b
+b
+a
+"}
+(16,1,1) = {"
+f
+l
+l
+l
+l
+l
+l
+q
+b
+h
+h
+h
+h
+h
+h
+s
+b
+l
+l
+l
+l
+f
+f
+a
+"}
+(17,1,1) = {"
+b
+b
+b
+l
+l
+l
+b
+l
+q
+r
+h
+h
+h
+h
+h
+b
+s
+r
+l
+r
+l
+l
+b
+a
+"}
+(18,1,1) = {"
+b
+h
+l
+l
+l
+b
+b
+h
+b
+h
+h
+h
+h
+h
+r
+k
+b
+C
+r
+h
+b
+b
+m
+b
+"}
+(19,1,1) = {"
+b
+b
+l
+l
+l
+l
+h
+b
+h
+h
+h
+h
+h
+h
+h
+r
+j
+h
+c
+h
+r
+h
+b
+b
+"}
+(20,1,1) = {"
+b
+l
+l
+l
+l
+b
+b
+p
+h
+c
+h
+k
+h
+h
+o
+b
+l
+l
+l
+b
+E
+r
+G
+o
+"}
+(21,1,1) = {"
+g
+b
+l
+l
+l
+l
+l
+r
+h
+r
+h
+h
+h
+h
+y
+l
+l
+l
+l
+l
+l
+j
+j
+r
+"}
+(22,1,1) = {"
+c
+c
+b
+l
+l
+b
+h
+h
+t
+b
+h
+h
+h
+h
+h
+m
+b
+l
+l
+l
+h
+j
+j
+j
+"}
+(23,1,1) = {"
+b
+h
+m
+n
+b
+h
+l
+o
+j
+u
+r
+p
+h
+r
+h
+b
+l
+l
+l
+b
+b
+w
+r
+b
+"}
+(24,1,1) = {"
+a
+a
+b
+b
+l
+l
+l
+j
+j
+q
+p
+h
+m
+e
+z
+j
+j
+l
+l
+c
+l
+l
+b
+a
+"}
+(25,1,1) = {"
+a
+a
+a
+l
+l
+l
+l
+j
+l
+l
+b
+h
+r
+x
+h
+l
+l
+l
+l
+l
+l
+a
+a
+a
+"}
+(26,1,1) = {"
+a
+a
+a
+c
+b
+l
+l
+l
+l
+l
+l
+g
+q
+b
+h
+l
+l
+l
+c
+m
+b
+a
+a
+a
+"}
+(27,1,1) = {"
+a
+a
+a
+b
+h
+b
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+b
+a
+a
+a
+a
+"}
+(28,1,1) = {"
+a
+a
+a
+a
+c
+b
+l
+b
+l
+l
+l
+l
+l
+l
+l
+l
+b
+l
+f
+a
+a
+a
+a
+a
+"}
+(29,1,1) = {"
+a
+a
+a
+a
+b
+b
+f
+c
+b
+l
+c
+l
+l
+l
+l
+c
+o
+l
+b
+a
+a
+a
+a
+a
+"}
+(30,1,1) = {"
+a
+a
+a
+a
+a
+g
+c
+b
+l
+l
+b
+m
+l
+b
+l
+f
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(31,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+l
+b
+a
+b
+l
+c
+f
+f
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(32,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+c
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm
new file mode 100644
index 00000000000..2be9246bcfc
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm
@@ -0,0 +1,328 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/turf/simulated/wall/rust,
+/area/ruin/unpowered)
+"e" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_x = -28;
+ broken = 1
+ },
+/obj/item/clothing/suit/bloated_human,
+/obj/effect/decal/cleanable/blood,
+/obj/item/clothing/head/human_head,
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"f" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_x = 28;
+ broken = 1
+ },
+/turf/simulated/floor/plating/burnt,
+/area/ruin/unpowered)
+"g" = (
+/obj/effect/decal/cleanable/blood/tracks,
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_x = -28;
+ broken = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"h" = (
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"i" = (
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"j" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"k" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_y = 28;
+ broken = 1
+ },
+/obj/item/kitchen/knife/envy,
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"l" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_x = 28;
+ broken = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"m" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_x = -28;
+ broken = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"n" = (
+/turf/simulated/floor/plating/damaged,
+/area/ruin/unpowered)
+"o" = (
+/obj/structure/mirror{
+ desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
+ icon_state = "mirror_broke";
+ pixel_x = -28;
+ broken = 1
+ },
+/turf/simulated/floor/plating/damaged,
+/area/ruin/unpowered)
+"p" = (
+/obj/machinery/door/airlock/hatch,
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"q" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/plating,
+/area/ruin/unpowered)
+"A" = (
+/obj/effect/mapping_helpers/no_lava,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+a
+"}
+(3,1,1) = {"
+b
+c
+c
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+c
+a
+"}
+(4,1,1) = {"
+c
+c
+d
+d
+d
+e
+g
+g
+g
+m
+m
+m
+m
+m
+o
+m
+j
+d
+c
+a
+"}
+(5,1,1) = {"
+c
+d
+d
+d
+d
+d
+h
+h
+i
+i
+i
+i
+i
+h
+i
+i
+i
+d
+A
+a
+"}
+(6,1,1) = {"
+c
+d
+d
+d
+d
+d
+d
+k
+i
+i
+i
+q
+i
+i
+i
+i
+i
+p
+A
+a
+"}
+(7,1,1) = {"
+c
+d
+d
+d
+d
+d
+i
+i
+i
+j
+i
+n
+i
+i
+i
+i
+i
+d
+c
+a
+"}
+(8,1,1) = {"
+c
+c
+d
+d
+d
+f
+j
+l
+l
+l
+l
+l
+l
+l
+l
+l
+j
+d
+c
+a
+"}
+(9,1,1) = {"
+b
+c
+c
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+d
+c
+a
+"}
+(10,1,1) = {"
+b
+b
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm
new file mode 100644
index 00000000000..4c793cc1ffa
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm
@@ -0,0 +1,161 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/simulated/wall/cult,
+/area/ruin/unpowered)
+"c" = (
+/obj/structure/healingfountain,
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+"d" = (
+/obj/structure/fluff/divine/conduit,
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+"e" = (
+/obj/structure/sacrificealtar,
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+"f" = (
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+"g" = (
+/mob/living/simple_animal/butterfly,
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+"h" = (
+/obj/structure/fans/tiny/invisible,
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+"i" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/engine/cult,
+/area/ruin/unpowered)
+
+(1,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+"}
+(2,1,1) = {"
+a
+b
+d
+f
+f
+d
+f
+f
+d
+f
+f
+d
+f
+f
+d
+b
+"}
+(3,1,1) = {"
+b
+b
+e
+g
+f
+f
+g
+f
+f
+f
+f
+g
+f
+g
+f
+b
+"}
+(4,1,1) = {"
+b
+c
+f
+f
+f
+f
+f
+f
+i
+f
+f
+f
+f
+f
+f
+h
+"}
+(5,1,1) = {"
+b
+b
+e
+f
+f
+f
+f
+g
+f
+f
+f
+f
+f
+f
+f
+b
+"}
+(6,1,1) = {"
+a
+b
+d
+g
+f
+d
+f
+f
+d
+f
+f
+d
+f
+g
+d
+b
+"}
+(7,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm
new file mode 100644
index 00000000000..e449be961cd
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm
@@ -0,0 +1,539 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"e" = (
+/turf/simulated/floor/plating/lava/smooth,
+/area/ruin/powered/gluttony)
+"f" = (
+/obj/item/reagent_containers/syringe/gluttony,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"g" = (
+/obj/effect/gluttony,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"h" = (
+/obj/item/veilrender/vealrender,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"i" = (
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"j" = (
+/obj/item/trash/plate,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"l" = (
+/obj/item/trash/candy,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"m" = (
+/obj/item/trash/raisins,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"n" = (
+/obj/item/trash/pistachios,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"o" = (
+/obj/item/trash/popcorn,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"p" = (
+/obj/item/trash/semki,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"q" = (
+/obj/item/trash/syndi_cakes,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"r" = (
+/obj/effect/gluttony,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"t" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"v" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"z" = (
+/obj/item/trash/plate,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"A" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+"R" = (
+/turf/simulated/wall/indestructible/uranium,
+/area/ruin/powered/gluttony)
+"S" = (
+/obj/machinery/door/airlock/uranium,
+/obj/structure/fans/tiny/invisible,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/powered/gluttony)
+
+(1,1,1) = {"
+a
+a
+a
+b
+b
+a
+a
+b
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+b
+a
+a
+a
+b
+b
+b
+c
+c
+c
+b
+c
+c
+c
+b
+b
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+b
+a
+a
+a
+b
+b
+b
+c
+R
+R
+S
+R
+R
+c
+b
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+b
+b
+a
+a
+a
+b
+b
+c
+R
+h
+i
+o
+R
+c
+b
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+b
+b
+c
+R
+i
+i
+v
+R
+c
+b
+b
+b
+b
+b
+a
+"}
+(7,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+c
+R
+i
+l
+i
+R
+c
+b
+b
+b
+b
+b
+a
+"}
+(8,1,1) = {"
+a
+b
+c
+c
+c
+c
+c
+c
+R
+t
+i
+m
+R
+c
+c
+c
+c
+c
+c
+b
+"}
+(9,1,1) = {"
+b
+b
+c
+R
+R
+R
+R
+R
+R
+g
+m
+v
+R
+R
+R
+R
+R
+R
+c
+b
+"}
+(10,1,1) = {"
+a
+b
+c
+R
+e
+R
+r
+g
+g
+g
+g
+i
+p
+i
+z
+l
+i
+R
+c
+b
+"}
+(11,1,1) = {"
+a
+b
+c
+R
+f
+g
+g
+g
+g
+g
+n
+d
+i
+i
+i
+i
+i
+S
+b
+b
+"}
+(12,1,1) = {"
+a
+b
+c
+R
+e
+R
+r
+g
+g
+g
+i
+g
+i
+l
+A
+i
+q
+R
+c
+b
+"}
+(13,1,1) = {"
+a
+b
+c
+R
+R
+R
+R
+R
+R
+g
+i
+v
+R
+R
+R
+R
+R
+R
+c
+b
+"}
+(14,1,1) = {"
+a
+b
+c
+c
+c
+c
+c
+c
+R
+r
+i
+i
+R
+c
+c
+c
+c
+c
+c
+b
+"}
+(15,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+c
+R
+i
+g
+i
+R
+c
+b
+b
+b
+b
+b
+b
+"}
+(16,1,1) = {"
+b
+b
+b
+a
+b
+b
+b
+c
+R
+j
+i
+v
+R
+c
+b
+b
+b
+a
+a
+a
+"}
+(17,1,1) = {"
+b
+b
+b
+a
+b
+b
+b
+c
+R
+i
+n
+i
+R
+c
+b
+b
+b
+a
+a
+a
+"}
+(18,1,1) = {"
+a
+a
+a
+a
+b
+b
+b
+c
+R
+R
+S
+R
+R
+c
+b
+b
+b
+a
+a
+a
+"}
+(19,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+c
+c
+c
+b
+c
+c
+c
+b
+b
+a
+a
+a
+a
+"}
+(20,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+b
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm
new file mode 100644
index 00000000000..8fdc459c863
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm
@@ -0,0 +1,770 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/turf/simulated/wall/mineral/titanium,
+/area/shuttle/freegolem)
+"ac" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/shuttle,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"ad" = (
+/obj/structure/closet/crate/golemgear,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"ae" = (
+/obj/item/storage/toolbox/mechanical,
+/obj/item/reagent_containers/spray/cleaner,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"af" = (
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"ag" = (
+/obj/structure/reagent_dispensers/watertank/high,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"ah" = (
+/obj/structure/shuttle/engine/heater{
+ icon_state = "heater";
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"ai" = (
+/obj/structure/shuttle/engine/propulsion{
+ dir = 4;
+ icon_state = "burst_l"
+ },
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"aj" = (
+/obj/machinery/light/small,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"ak" = (
+/obj/structure/reagent_dispensers/watertank,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"al" = (
+/obj/structure/table/wood,
+/obj/item/disk/design_disk/golem_shell,
+/obj/item/areaeditor/golem,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"am" = (
+/obj/machinery/vending/hydronutrients,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"an" = (
+/obj/machinery/vending/hydroseeds,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"ao" = (
+/obj/machinery/light{
+ dir = 1;
+ on = 1
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"ap" = (
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aq" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swallc2";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"ar" = (
+/obj/effect/mob_spawn/human/golem/adamantine,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"as" = (
+/obj/machinery/vending/coffee/free,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"at" = (
+/obj/machinery/mineral/equipment_vendor/golem,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"au" = (
+/obj/machinery/door/airlock/shuttle,
+/obj/structure/fans/tiny,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"av" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall12";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"aw" = (
+/obj/machinery/door/airlock/shuttle,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"ax" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"ay" = (
+/obj/machinery/mineral/ore_redemption/golem,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"az" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swallc1";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"aA" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/powered/golem_ship)
+"aB" = (
+/obj/structure/window/full/shuttle{
+ icon_state = "16"
+ },
+/obj/structure/grille,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"aC" = (
+/obj/structure/statue/gold/rd{
+ name = "statue of the Liberator"
+ },
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aD" = (
+/obj/structure/computerframe,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aE" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall3";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"aF" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_y = 30
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aG" = (
+/obj/machinery/door/airlock/shuttle,
+/obj/structure/fans/tiny,
+/obj/docking_port/stationary{
+ area_type = /area/ruin/powered/golem_ship;
+ dir = 8;
+ dwidth = 8;
+ height = 20;
+ id = "freegolem_lavaland";
+ name = "Lavaland Surface";
+ turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface;
+ width = 16
+ },
+/obj/docking_port/mobile{
+ dir = 8;
+ dwidth = 8;
+ height = 20;
+ id = "freegolem";
+ name = "Free Golem Ship";
+ width = 16
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aH" = (
+/obj/structure/window/full/shuttle{
+ icon_state = "15"
+ },
+/obj/structure/grille,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"aI" = (
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/obj/structure/table/wood,
+/obj/item/bedsheet/rd/royal_cape{
+ layer = 3;
+ pixel_x = 5;
+ pixel_y = 9
+ },
+/obj/item/book/manual/research_and_development{
+ name = "Sacred Text of the Liberator";
+ pixel_x = -4;
+ pixel_y = 3
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aJ" = (
+/obj/machinery/light,
+/obj/structure/chair/comfy/purp{
+ icon_state = "comfychair";
+ dir = 1
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aK" = (
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall13";
+ icon_state = "swall13";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"aL" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/shuttle,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aM" = (
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall11";
+ icon_state = "swall11";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"aN" = (
+/obj/item/resonator/upgraded,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aO" = (
+/obj/machinery/autolathe,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aP" = (
+/obj/machinery/computer/shuttle/golem_ship/recall,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/powered/golem_ship)
+"aQ" = (
+/obj/structure/table/wood,
+/obj/machinery/reagentgrinder,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aR" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swallc4"
+ },
+/area/shuttle/freegolem)
+"aS" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swall4";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"aT" = (
+/obj/machinery/light,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aU" = (
+/obj/structure/table/wood,
+/obj/item/resonator,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aV" = (
+/obj/machinery/vending/snack/free,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aW" = (
+/obj/structure/table/wood,
+/obj/item/storage/firstaid/brute,
+/obj/item/storage/firstaid/brute,
+/obj/item/storage/firstaid/brute,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aX" = (
+/obj/structure/table/wood,
+/obj/item/storage/firstaid/fire,
+/obj/item/storage/firstaid/fire,
+/obj/item/storage/firstaid/fire,
+/obj/machinery/light,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"aY" = (
+/obj/structure/table/wood,
+/obj/item/storage/firstaid/adv,
+/obj/item/storage/firstaid/adv,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"ba" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"bb" = (
+/obj/structure/reagent_dispensers/fueltank,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"bc" = (
+/obj/structure/ore_box,
+/turf/simulated/shuttle/plating,
+/area/shuttle/freegolem)
+"be" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -30
+ },
+/obj/machinery/light,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor5"
+ },
+/area/shuttle/freegolem)
+"bf" = (
+/turf/simulated/shuttle/wall{
+ icon_state = "swallc3";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+"bh" = (
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall14";
+ icon_state = "swall14";
+ dir = 2
+ },
+/area/shuttle/freegolem)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aq
+aB
+aH
+bf
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+av
+aC
+aI
+av
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aq
+aE
+au
+aR
+aD
+aJ
+ab
+au
+aE
+bf
+aa
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+av
+am
+ap
+ax
+ap
+ap
+ax
+ap
+as
+av
+aa
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+av
+an
+ap
+ap
+ap
+ap
+ap
+ap
+aV
+av
+aa
+aa
+aa
+"}
+(6,1,1) = {"
+aq
+aE
+aE
+aK
+ao
+ap
+ap
+ap
+ap
+ap
+ap
+aT
+bh
+aE
+aE
+bf
+"}
+(7,1,1) = {"
+av
+ad
+af
+aw
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+aw
+af
+bc
+av
+"}
+(8,1,1) = {"
+av
+ad
+af
+aw
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+aw
+af
+bc
+av
+"}
+(9,1,1) = {"
+av
+ad
+aj
+av
+ao
+ap
+ap
+ap
+ap
+ap
+ap
+aT
+av
+ba
+bc
+av
+"}
+(10,1,1) = {"
+av
+ad
+af
+av
+ap
+ap
+ar
+aU
+aU
+ar
+ap
+ap
+av
+af
+bc
+av
+"}
+(11,1,1) = {"
+av
+ad
+af
+av
+ap
+ap
+ar
+aU
+aU
+ar
+ap
+ap
+av
+af
+bc
+av
+"}
+(12,1,1) = {"
+av
+ad
+aj
+av
+ao
+ap
+ap
+ap
+ap
+ap
+ap
+aT
+av
+ba
+bc
+av
+"}
+(13,1,1) = {"
+av
+ad
+af
+aw
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+aw
+af
+bc
+av
+"}
+(14,1,1) = {"
+av
+ad
+af
+aw
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+aw
+af
+bc
+av
+"}
+(15,1,1) = {"
+av
+ae
+af
+av
+ap
+ap
+ap
+ap
+ap
+ap
+ap
+aW
+av
+af
+ae
+av
+"}
+(16,1,1) = {"
+ac
+af
+aj
+av
+ao
+ap
+ap
+ap
+ap
+ap
+ap
+aX
+av
+ba
+af
+ac
+"}
+(17,1,1) = {"
+ac
+af
+af
+av
+ap
+ap
+ap
+ap
+ap
+aN
+ap
+aY
+av
+af
+af
+ac
+"}
+(18,1,1) = {"
+av
+ag
+ak
+av
+at
+ap
+ay
+ap
+ap
+aO
+aQ
+al
+av
+bb
+bb
+av
+"}
+(19,1,1) = {"
+av
+ah
+ah
+av
+ah
+ah
+aS
+aF
+be
+aS
+ah
+ah
+av
+ah
+ah
+av
+"}
+(20,1,1) = {"
+az
+ai
+ai
+aM
+ai
+ai
+aM
+aG
+aL
+aM
+ai
+ai
+aM
+ai
+ai
+aR
+"}
+(21,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aA
+aA
+aA
+aP
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_greed.dmm
new file mode 100644
index 00000000000..e1082c88664
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_greed.dmm
@@ -0,0 +1,577 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"e" = (
+/obj/structure/table/wood/poker,
+/obj/item/gun/projectile/revolver/russian/soul,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/ruin/powered/greed)
+"f" = (
+/obj/structure/cursed_slot_machine,
+/turf/simulated/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/ruin/powered/greed)
+"g" = (
+/obj/structure/table/wood/poker,
+/obj/item/coin/mythril,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/ruin/powered/greed)
+"h" = (
+/obj/structure/table/wood/poker,
+/obj/item/coin/diamond,
+/turf/simulated/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/ruin/powered/greed)
+"i" = (
+/turf/simulated/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/ruin/powered/greed)
+"j" = (
+/obj/structure/table/wood/poker,
+/obj/item/coin/adamantine,
+/turf/simulated/floor/carpet{
+ icon_state = "carpetsymbol"
+ },
+/area/ruin/powered/greed)
+"k" = (
+/obj/machinery/computer/arcade/battle{
+ emagged = 1
+ },
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"l" = (
+/obj/item/coin/gold,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"m" = (
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"n" = (
+/obj/structure/table/wood/poker,
+/obj/item/stack/spacecash/c1000,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"o" = (
+/obj/item/storage/bag/money,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"p" = (
+/obj/structure/table/wood/poker,
+/obj/item/stack/ore/gold,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"q" = (
+/obj/structure/table/wood/poker,
+/obj/item/stack/spacecash/c20,
+/obj/item/stack/spacecash/c50,
+/obj/machinery/light/small{
+ brightness_range = 3;
+ dir = 8
+ },
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"r" = (
+/obj/structure/table/wood/poker,
+/obj/item/stack/spacecash/c500,
+/obj/item/stack/spacecash/c100,
+/obj/item/stack/spacecash/c1000,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"s" = (
+/obj/structure/table/wood/poker,
+/obj/item/stack/spacecash/c200,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"u" = (
+/obj/structure/table/wood/poker,
+/obj/item/stack/spacecash/c500,
+/obj/item/stack/spacecash/c100,
+/obj/item/stack/spacecash/c1000,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"v" = (
+/obj/item/coin/gold,
+/obj/machinery/light/small,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"w" = (
+/obj/item/storage/bag/money,
+/obj/machinery/light/small,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"J" = (
+/obj/machinery/door/airlock/gold,
+/obj/structure/fans/tiny/invisible,
+/turf/simulated/floor/engine/cult,
+/area/ruin/powered/greed)
+"W" = (
+/turf/simulated/wall/cult,
+/area/ruin/powered/greed)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+b
+"}
+(2,1,1) = {"
+a
+b
+b
+a
+a
+a
+a
+a
+a
+b
+b
+b
+a
+a
+a
+a
+a
+b
+b
+b
+"}
+(3,1,1) = {"
+a
+b
+b
+b
+b
+b
+a
+a
+a
+b
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+"}
+(4,1,1) = {"
+a
+a
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+"}
+(5,1,1) = {"
+a
+a
+a
+b
+b
+a
+a
+c
+c
+c
+c
+c
+c
+c
+a
+a
+a
+a
+b
+a
+"}
+(6,1,1) = {"
+b
+a
+a
+a
+a
+a
+c
+c
+W
+W
+W
+W
+W
+c
+a
+a
+a
+a
+b
+a
+"}
+(7,1,1) = {"
+b
+a
+a
+a
+c
+c
+c
+W
+W
+n
+q
+s
+W
+c
+c
+c
+c
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+c
+W
+W
+W
+k
+o
+l
+m
+W
+W
+W
+W
+c
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+b
+a
+c
+W
+e
+h
+l
+m
+m
+m
+l
+m
+v
+W
+W
+a
+a
+a
+"}
+(10,1,1) = {"
+b
+b
+b
+a
+c
+W
+f
+i
+m
+l
+d
+o
+m
+m
+m
+m
+J
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+b
+a
+c
+W
+g
+j
+l
+m
+m
+l
+m
+l
+w
+W
+W
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+a
+a
+a
+c
+W
+W
+W
+k
+o
+m
+l
+W
+W
+W
+W
+c
+a
+a
+a
+"}
+(13,1,1) = {"
+a
+a
+a
+a
+c
+c
+c
+W
+W
+p
+u
+r
+W
+c
+c
+c
+c
+a
+a
+a
+"}
+(14,1,1) = {"
+b
+b
+a
+a
+a
+a
+c
+c
+W
+W
+W
+W
+W
+c
+a
+a
+a
+a
+a
+a
+"}
+(15,1,1) = {"
+b
+b
+a
+a
+a
+a
+a
+c
+c
+c
+c
+c
+c
+c
+a
+a
+a
+a
+a
+a
+"}
+(16,1,1) = {"
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+"}
+(17,1,1) = {"
+a
+a
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+"}
+(18,1,1) = {"
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+b
+b
+b
+b
+b
+"}
+(19,1,1) = {"
+a
+a
+a
+b
+b
+b
+b
+a
+a
+a
+b
+b
+b
+b
+a
+b
+b
+b
+b
+b
+"}
+(20,1,1) = {"
+a
+a
+a
+a
+b
+b
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
index 74aa1875f96..b6785a746f3 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm
@@ -162,7 +162,7 @@
/turf/simulated/floor/mineral/titanium/blue,
/area/ruin/powered)
"I" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/mineral/titanium/blue,
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
new file mode 100644
index 00000000000..f29cac64240
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm
@@ -0,0 +1,728 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/obj/structure/lattice,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/turf/simulated/wall,
+/area/ruin/unpowered)
+"e" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"f" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/cups,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"g" = (
+/obj/structure/reagent_dispensers/water_cooler/pizzaparty,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"h" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"i" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"j" = (
+/obj/item/reagent_containers/food/snacks/mushroompizzaslice,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"k" = (
+/obj/structure/table/wood,
+/obj/effect/spawner/lootdrop/pizzaparty,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"l" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/table/wood,
+/obj/effect/spawner/lootdrop/pizzaparty,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb2,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"m" = (
+/obj/item/chair/wood/wings,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"n" = (
+/obj/structure/glowshroom/single,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"o" = (
+/obj/item/trash/plate,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"p" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"q" = (
+/obj/item/chair/wood/wings,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"r" = (
+/obj/structure/chair/wood/wings,
+/obj/effect/decal/remains/human,
+/obj/item/clothing/head/festive{
+ desc = "A festive party hat with the name 'timmy' scribbled on the front.";
+ name = "party hat"
+ },
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"s" = (
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"t" = (
+/obj/structure/chair/wood/wings,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"u" = (
+/obj/structure/glowshroom/single,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"v" = (
+/obj/structure/lattice,
+/obj/item/chair/wood/wings,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"w" = (
+/obj/item/kitchen/utensil/fork,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"x" = (
+/obj/structure/table/wood,
+/obj/effect/spawner/lootdrop/pizzaparty,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"y" = (
+/obj/structure/table/wood,
+/obj/item/trash/plate,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"z" = (
+/obj/structure/table/wood,
+/obj/structure/glowshroom/single,
+/obj/item/a_gift,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"A" = (
+/obj/structure/table/wood,
+/obj/item/trash/plate,
+/obj/item/kitchen/utensil/fork,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"B" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"C" = (
+/obj/structure/chair/wood/wings{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"D" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/margheritaslice,
+/obj/item/trash/plate,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"E" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/meatpizzaslice,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"F" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"G" = (
+/obj/structure/table/wood,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"H" = (
+/obj/item/chair/wood/wings,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"I" = (
+/obj/item/kitchen/utensil/fork,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"J" = (
+/obj/structure/glowshroom/single,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"K" = (
+/obj/structure/chair/wood/wings{
+ dir = 1
+ },
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"L" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"M" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/item/a_gift,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"N" = (
+/obj/structure/lattice,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"O" = (
+/obj/item/kitchen/knife,
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"P" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/simulated/floor/wood{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+"Q" = (
+/turf/simulated/floor/plating{
+ oxygen = 14;
+ nitrogen = 23;
+ temperature = 300
+ },
+/area/ruin/unpowered)
+
+(1,1,1) = {"
+a
+a
+b
+b
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+c
+c
+b
+b
+b
+b
+a
+a
+"}
+(3,1,1) = {"
+b
+b
+b
+b
+b
+b
+b
+b
+c
+c
+e
+e
+c
+c
+b
+b
+b
+a
+"}
+(4,1,1) = {"
+b
+b
+b
+b
+d
+b
+c
+c
+e
+h
+h
+e
+Q
+e
+d
+b
+b
+a
+"}
+(5,1,1) = {"
+a
+b
+b
+b
+d
+b
+m
+e
+w
+h
+w
+h
+h
+e
+d
+b
+b
+b
+"}
+(6,1,1) = {"
+a
+b
+b
+b
+d
+f
+n
+h
+h
+c
+e
+M
+e
+c
+b
+b
+b
+b
+"}
+(7,1,1) = {"
+b
+b
+b
+b
+d
+g
+o
+h
+h
+C
+J
+h
+d
+b
+b
+b
+b
+b
+"}
+(8,1,1) = {"
+b
+b
+b
+b
+e
+h
+p
+q
+x
+D
+K
+M
+d
+b
+b
+b
+b
+b
+"}
+(9,1,1) = {"
+b
+b
+b
+c
+e
+i
+h
+r
+y
+E
+h
+h
+c
+b
+b
+b
+b
+b
+"}
+(10,1,1) = {"
+b
+b
+b
+c
+e
+j
+h
+s
+z
+F
+q
+N
+c
+b
+b
+b
+b
+b
+"}
+(11,1,1) = {"
+b
+b
+b
+b
+e
+e
+h
+t
+A
+G
+q
+h
+c
+b
+b
+b
+b
+b
+"}
+(12,1,1) = {"
+b
+b
+b
+b
+d
+k
+h
+s
+B
+H
+h
+O
+d
+b
+b
+b
+b
+b
+"}
+(13,1,1) = {"
+b
+b
+b
+b
+d
+k
+h
+u
+s
+s
+o
+n
+d
+b
+b
+b
+b
+a
+"}
+(14,1,1) = {"
+b
+b
+b
+b
+d
+l
+i
+h
+e
+I
+L
+P
+d
+b
+b
+b
+b
+a
+"}
+(15,1,1) = {"
+b
+b
+b
+b
+d
+d
+e
+e
+N
+e
+e
+d
+d
+b
+b
+b
+b
+a
+"}
+(16,1,1) = {"
+a
+b
+b
+b
+b
+b
+c
+v
+b
+c
+b
+b
+b
+b
+b
+b
+b
+a
+"}
+(17,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+"}
+(18,1,1) = {"
+a
+a
+a
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pride.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pride.dmm
new file mode 100644
index 00000000000..ff9a27ee711
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pride.dmm
@@ -0,0 +1,304 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"e" = (
+/obj/structure/mirror{
+ pixel_x = -32
+ },
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"f" = (
+/obj/structure/mirror{
+ pixel_x = 32
+ },
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"g" = (
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"j" = (
+/obj/structure/mirror{
+ pixel_x = -32
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"k" = (
+/obj/structure/mirror{
+ pixel_x = 32
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"l" = (
+/obj/structure/mirror{
+ pixel_x = -32
+ },
+/obj/machinery/light/small{
+ brightness_range = 3;
+ dir = 8
+ },
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"m" = (
+/obj/structure/mirror{
+ pixel_x = 32
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"r" = (
+/obj/machinery/light/small,
+/turf/simulated/floor/mineral/silver,
+/area/ruin/powered/pride)
+"G" = (
+/turf/simulated/wall/mineral/diamond,
+/area/ruin/powered/pride)
+"O" = (
+/obj/structure/mirror/magic/pride,
+/turf/simulated/wall/mineral/diamond,
+/area/ruin/powered/pride)
+"Y" = (
+/obj/machinery/door/airlock/diamond,
+/turf/simulated/floor/mineral/silver{
+ blocks_air = 1
+ },
+/area/ruin/powered/pride)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+a
+"}
+(3,1,1) = {"
+b
+c
+c
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+c
+a
+"}
+(4,1,1) = {"
+c
+c
+G
+G
+G
+j
+e
+e
+l
+e
+e
+l
+e
+e
+l
+e
+e
+G
+c
+a
+"}
+(5,1,1) = {"
+c
+G
+G
+G
+G
+G
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+r
+G
+a
+a
+"}
+(6,1,1) = {"
+c
+G
+G
+G
+G
+G
+O
+g
+g
+g
+d
+g
+g
+g
+g
+g
+g
+Y
+a
+a
+"}
+(7,1,1) = {"
+c
+G
+G
+G
+G
+G
+g
+g
+g
+g
+g
+g
+g
+g
+g
+g
+r
+G
+c
+a
+"}
+(8,1,1) = {"
+c
+c
+G
+G
+G
+k
+f
+f
+m
+f
+f
+m
+f
+f
+m
+f
+f
+G
+c
+a
+"}
+(9,1,1) = {"
+b
+c
+c
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+c
+a
+"}
+(10,1,1) = {"
+b
+b
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+c
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_puzzle.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_puzzle.dmm
new file mode 100644
index 00000000000..75b4c619445
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_puzzle.dmm
@@ -0,0 +1,47 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/lavaland/surface/outdoors)
+"b" = (
+/obj/effect/sliding_puzzle/lavaland,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+c
+c
+c
+a
+"}
+(3,1,1) = {"
+a
+c
+b
+c
+a
+"}
+(4,1,1) = {"
+a
+c
+c
+c
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm
new file mode 100644
index 00000000000..1b7783388de
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm
@@ -0,0 +1,58 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/obj/mecha/working/ripley/mining{
+ ruin_mecha = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"e" = (
+/obj/item/clothing/shoes/workboots/mining,
+/obj/item/clothing/under/rank/miner/lavaland,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+b
+b
+b
+a
+"}
+(2,1,1) = {"
+b
+c
+b
+c
+b
+"}
+(3,1,1) = {"
+b
+c
+d
+e
+b
+"}
+(4,1,1) = {"
+b
+c
+c
+b
+b
+"}
+(5,1,1) = {"
+b
+b
+b
+b
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm
new file mode 100644
index 00000000000..bac638bd3c0
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm
@@ -0,0 +1,651 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/unsimulated/wall,
+/area/ruin/unpowered)
+"b" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/ruin/unpowered)
+"c" = (
+/obj/item/paper/fluff/stations/lavaland/sloth/note,
+/turf/simulated/floor/sepia{
+ blocks_air = 0;
+ slowdown = 10
+ },
+/area/ruin/unpowered)
+"d" = (
+/turf/simulated/floor/sepia{
+ blocks_air = 0;
+ slowdown = 10
+ },
+/area/ruin/unpowered)
+"e" = (
+/obj/machinery/door/airlock/wood,
+/turf/simulated/floor/sepia{
+ blocks_air = 0;
+ slowdown = 10
+ },
+/area/ruin/unpowered)
+"f" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
+/turf/simulated/floor/sepia{
+ blocks_air = 0;
+ slowdown = 10
+ },
+/area/ruin/unpowered)
+"g" = (
+/obj/structure/bed,
+/obj/item/bedsheet/brown,
+/turf/simulated/floor/sepia{
+ blocks_air = 0;
+ slowdown = 10
+ },
+/area/ruin/unpowered)
+"h" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/sepia{
+ blocks_air = 0;
+ slowdown = 10
+ },
+/area/ruin/unpowered)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+"}
+(3,1,1) = {"
+a
+b
+a
+a
+a
+a
+a
+a
+b
+a
+"}
+(4,1,1) = {"
+a
+b
+a
+c
+d
+d
+f
+a
+b
+a
+"}
+(5,1,1) = {"
+a
+b
+a
+d
+d
+d
+g
+a
+b
+a
+"}
+(6,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(7,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(8,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(9,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(10,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(11,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(12,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(13,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(14,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(15,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(16,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(17,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(18,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(19,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(20,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(21,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(22,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(23,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(24,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(25,1,1) = {"
+a
+b
+a
+d
+h
+d
+d
+a
+b
+a
+"}
+(26,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(27,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(28,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(29,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(30,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(31,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(32,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(33,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(34,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(35,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(36,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(37,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(38,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(39,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(40,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(41,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(42,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(43,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(44,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(45,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(46,1,1) = {"
+a
+b
+a
+d
+a
+a
+a
+a
+b
+a
+"}
+(47,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(48,1,1) = {"
+a
+b
+a
+a
+a
+a
+d
+a
+b
+a
+"}
+(49,1,1) = {"
+a
+b
+a
+d
+d
+d
+d
+a
+b
+a
+"}
+(50,1,1) = {"
+a
+a
+a
+a
+e
+e
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm
new file mode 100644
index 00000000000..3b2dd805189
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm
@@ -0,0 +1,261 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/obj/structure/sign/mining/survival{
+ pixel_y = -32
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"d" = (
+/turf/simulated/wall/mineral/titanium/survival/pod,
+/area/ruin/powered)
+"e" = (
+/obj/structure/sign/mining/survival{
+ dir = 4;
+ pixel_x = 32
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"f" = (
+/obj/structure/fans,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"g" = (
+/obj/machinery/smartfridge/survival_pod/empty,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"h" = (
+/obj/item/gps/computer,
+/obj/structure/tubes,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"i" = (
+/obj/structure/sign/mining/survival{
+ dir = 8;
+ pixel_x = -32
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"j" = (
+/obj/effect/decal/cleanable/blood/drip,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"k" = (
+/obj/machinery/sleeper/survival_pod,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"l" = (
+/obj/item/pickaxe,
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"m" = (
+/obj/structure/bed/pod,
+/obj/item/bedsheet/black,
+/obj/structure/tubes,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"n" = (
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"o" = (
+/obj/effect/decal/cleanable/blood,
+/mob/living/simple_animal/hostile/asteroid/goliath/beast{
+ health = 0
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"p" = (
+/obj/structure/table/survival_pod,
+/obj/item/kitchen/knife/combat/survival,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"q" = (
+/obj/effect/mob_spawn/human/miner/explorer{
+ brute_damage = 150;
+ oxy_damage = 50
+ },
+/obj/effect/decal/cleanable/blood,
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/decal/cleanable/blood/tracks,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"r" = (
+/obj/structure/tubes,
+/obj/item/crowbar,
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"s" = (
+/obj/effect/decal/cleanable/blood/tracks,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"t" = (
+/obj/machinery/door/airlock/survival_pod/glass,
+/obj/effect/decal/cleanable/blood/tracks,
+/turf/simulated/floor/pod/dark,
+/area/ruin/powered)
+"v" = (
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"w" = (
+/obj/structure/sign/mining/survival{
+ pixel_y = 32
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"x" = (
+/obj/structure/sign/mining{
+ pixel_y = 32
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"y" = (
+/obj/effect/decal/cleanable/blood/tracks{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+
+(1,1,1) = {"
+a
+a
+a
+b
+b
+b
+b
+b
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+b
+b
+e
+b
+e
+b
+b
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+b
+d
+d
+d
+d
+d
+b
+a
+a
+"}
+(4,1,1) = {"
+a
+b
+c
+d
+f
+k
+p
+d
+w
+b
+b
+"}
+(5,1,1) = {"
+a
+b
+b
+d
+g
+l
+q
+t
+v
+b
+b
+"}
+(6,1,1) = {"
+b
+b
+c
+d
+h
+m
+r
+d
+x
+b
+b
+"}
+(7,1,1) = {"
+a
+b
+b
+d
+d
+d
+d
+d
+y
+j
+j
+"}
+(8,1,1) = {"
+a
+a
+b
+b
+i
+b
+i
+j
+j
+b
+b
+"}
+(9,1,1) = {"
+a
+a
+b
+b
+j
+n
+s
+b
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+o
+j
+b
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 13850af5db7..421f2e62b53 100644
--- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -5365,6 +5365,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/item/defibrillator,
/turf/simulated/floor/plasteel/white/side{
dir = 9
},
@@ -5513,6 +5514,9 @@
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/item/gun/syringe/syndicate,
+/obj/machinery/defibrillator_mount/loaded{
+ pixel_x = -30
+ },
/turf/simulated/floor/plasteel/white/side{
dir = 9
},
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
new file mode 100644
index 00000000000..0f756d15090
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
@@ -0,0 +1,431 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/mineral/volcanic/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"b" = (
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"c" = (
+/obj/machinery/abductor/experiment,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"d" = (
+/turf/simulated/wall/mineral/abductor,
+/area/ruin/unpowered)
+"e" = (
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"g" = (
+/obj/machinery/abductor/pad,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"h" = (
+/obj/item/hemostat/alien,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"i" = (
+/obj/effect/mob_spawn/human/abductor,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"j" = (
+/obj/structure/closet/abductor,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"k" = (
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"l" = (
+/obj/machinery/optable/abductor,
+/obj/item/cautery/alien,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"m" = (
+/obj/structure/table/abductor,
+/obj/item/storage/box/alienhandcuffs,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"n" = (
+/obj/item/scalpel/alien,
+/obj/item/surgical_drapes,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"o" = (
+/obj/item/retractor/alien,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"p" = (
+/obj/machinery/abductor/gland_dispenser,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"q" = (
+/obj/structure/table/abductor,
+/obj/item/surgicaldrill/alien,
+/obj/item/circular_saw/alien,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+"r" = (
+/obj/structure/bed/abductor,
+/turf/unsimulated/floor/abductor,
+/area/ruin/unpowered)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+d
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+d
+d
+a
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+d
+c
+e
+k
+a
+p
+d
+a
+"}
+(6,1,1) = {"
+a
+a
+d
+e
+h
+l
+n
+q
+d
+a
+"}
+(7,1,1) = {"
+a
+a
+d
+g
+i
+e
+o
+r
+d
+a
+"}
+(8,1,1) = {"
+a
+a
+d
+d
+j
+m
+j
+d
+d
+a
+"}
+(9,1,1) = {"
+a
+a
+b
+d
+d
+d
+d
+d
+b
+a
+"}
+(10,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(12,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(13,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(14,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(15,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(16,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(17,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(18,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(19,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+b
+a
+"}
+(20,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(21,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(22,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(23,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(24,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(25,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(26,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(27,1,1) = {"
+a
+a
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(28,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(29,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+a
+a
+"}
+(30,1,1) = {"
+a
+b
+b
+b
+b
+b
+b
+b
+b
+a
+"}
diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm
new file mode 100644
index 00000000000..63ffac70fd8
--- /dev/null
+++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm
@@ -0,0 +1,1557 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"b" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/resin/wall,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"c" = (
+/obj/structure/alien/weeds,
+/obj/effect/baseturf_helper/lava_land/surface,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"d" = (
+/obj/structure/alien/resin/wall,
+/obj/structure/alien/weeds,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"e" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/egg/burst,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"f" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/weeds,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"g" = (
+/obj/structure/alien/weeds,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"i" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"j" = (
+/obj/structure/alien/weeds,
+/mob/living/simple_animal/hostile/alien,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"l" = (
+/obj/structure/alien/weeds/node,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"o" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/obj/effect/decal/cleanable/blood/gibs,
+/obj/item/gun/projectile/automatic/pistol,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"r" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/resin/wall,
+/obj/structure/alien/resin/wall,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"t" = (
+/obj/structure/alien/weeds,
+/mob/living/simple_animal/hostile/alien/sentinel,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"u" = (
+/obj/structure/alien/weeds,
+/obj/effect/decal/cleanable/blood/gibs,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"v" = (
+/obj/structure/alien/weeds/node,
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"w" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/obj/structure/alien/resin/wall,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"y" = (
+/obj/structure/alien/weeds/node,
+/obj/structure/alien/resin/wall,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"z" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/obj/effect/decal/cleanable/blood/gibs,
+/obj/item/clothing/under/rank/security,
+/obj/item/clothing/suit/armor/vest,
+/obj/item/melee/baton/loaded,
+/obj/item/clothing/head/helmet,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"B" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/egg/burst,
+/obj/effect/decal/cleanable/blood/gibs,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"C" = (
+/obj/structure/alien/weeds,
+/obj/structure/alien/egg/burst,
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"E" = (
+/obj/structure/alien/weeds,
+/mob/living/simple_animal/hostile/alien/drone{
+ plants_off = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"F" = (
+/obj/structure/alien/weeds,
+/mob/living/simple_animal/hostile/alien/queen/large{
+ desc = "A gigantic alien who is in charge of the hive and all of its loyal servants.";
+ name = "alien queen";
+ pixel_x = -16;
+ plants_off = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"G" = (
+/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
+/area/lavaland/surface/outdoors)
+"H" = (
+/obj/structure/alien/weeds,
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"I" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/obj/effect/decal/cleanable/blood/gibs,
+/obj/effect/decal/cleanable/blood,
+/obj/item/clothing/under/syndicate,
+/obj/item/clothing/glasses/night,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"K" = (
+/obj/structure/alien/weeds/node,
+/mob/living/simple_animal/hostile/alien,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"L" = (
+/obj/structure/alien/weeds/node,
+/mob/living/simple_animal/hostile/alien/drone{
+ plants_off = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"M" = (
+/obj/structure/alien/weeds,
+/obj/structure/bed/nest,
+/obj/effect/decal/cleanable/blood/gibs,
+/obj/item/tank/emergency_oxygen,
+/obj/item/clothing/suit/space/syndicate/orange,
+/obj/item/clothing/mask/gas,
+/obj/item/clothing/head/helmet/space/syndicate/orange,
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"O" = (
+/obj/structure/alien/weeds/node,
+/turf/template_noop,
+/area/ruin/unpowered/xenonest)
+"Q" = (
+/obj/structure/alien/weeds,
+/obj/effect/decal/cleanable/blood,
+/mob/living/simple_animal/hostile/alien/drone{
+ plants_off = 1
+ },
+/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/xenonest)
+"R" = (
+/obj/structure/alien/weeds,
+/turf/template_noop,
+/area/ruin/unpowered/xenonest)
+
+(1,1,1) = {"
+a
+a
+a
+G
+G
+G
+G
+G
+G
+G
+G
+G
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+G
+b
+b
+b
+b
+b
+b
+b
+b
+G
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+G
+G
+b
+g
+e
+e
+b
+g
+g
+b
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+G
+b
+b
+g
+g
+g
+g
+E
+g
+e
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+G
+b
+g
+g
+y
+b
+b
+b
+y
+b
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+G
+b
+g
+g
+w
+g
+F
+u
+I
+b
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+G
+b
+e
+t
+g
+g
+g
+H
+u
+g
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+G
+b
+i
+u
+b
+g
+l
+g
+t
+e
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+G
+b
+o
+v
+g
+b
+g
+g
+e
+b
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+G
+b
+g
+u
+b
+g
+g
+g
+y
+e
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+G
+b
+b
+g
+t
+g
+g
+t
+g
+g
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+b
+a
+"}
+(12,1,1) = {"
+a
+a
+G
+G
+b
+e
+g
+g
+g
+g
+g
+g
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+M
+i
+b
+b
+"}
+(13,1,1) = {"
+a
+a
+a
+G
+b
+b
+g
+g
+l
+g
+g
+b
+b
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+e
+u
+Q
+g
+b
+"}
+(14,1,1) = {"
+a
+a
+a
+G
+G
+b
+b
+g
+g
+g
+b
+b
+G
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+b
+i
+g
+l
+g
+e
+b
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+G
+G
+b
+b
+b
+b
+b
+G
+G
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+b
+g
+g
+g
+i
+b
+b
+"}
+(16,1,1) = {"
+a
+a
+a
+a
+a
+G
+b
+l
+l
+b
+G
+G
+a
+a
+a
+a
+a
+a
+a
+a
+b
+b
+g
+j
+g
+e
+b
+b
+b
+a
+"}
+(17,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+E
+g
+b
+b
+G
+b
+b
+b
+b
+b
+b
+b
+b
+b
+g
+g
+b
+b
+b
+b
+a
+a
+a
+"}
+(18,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+g
+g
+E
+b
+b
+b
+g
+g
+g
+g
+g
+g
+b
+b
+g
+b
+b
+a
+a
+a
+a
+a
+a
+"}
+(19,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+b
+g
+g
+g
+b
+g
+g
+c
+g
+g
+g
+l
+g
+g
+g
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(20,1,1) = {"
+b
+b
+b
+b
+a
+a
+a
+b
+b
+g
+l
+g
+g
+g
+b
+b
+b
+b
+g
+g
+g
+b
+b
+a
+a
+a
+a
+a
+a
+a
+"}
+(21,1,1) = {"
+b
+e
+i
+b
+b
+b
+b
+b
+b
+g
+g
+g
+g
+b
+b
+a
+a
+b
+b
+g
+g
+b
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(22,1,1) = {"
+d
+f
+j
+g
+b
+b
+g
+g
+g
+g
+g
+g
+b
+b
+a
+a
+a
+b
+g
+g
+g
+b
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(23,1,1) = {"
+d
+g
+e
+l
+g
+g
+g
+b
+b
+g
+b
+b
+b
+a
+a
+a
+a
+b
+g
+g
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(24,1,1) = {"
+b
+b
+i
+i
+b
+b
+b
+b
+b
+g
+b
+a
+a
+a
+a
+a
+a
+b
+g
+g
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(25,1,1) = {"
+a
+b
+b
+b
+b
+a
+a
+a
+b
+E
+b
+b
+a
+a
+a
+a
+a
+b
+g
+L
+b
+b
+b
+a
+a
+a
+a
+a
+a
+b
+"}
+(26,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+b
+g
+g
+b
+a
+a
+a
+a
+a
+b
+g
+g
+g
+g
+b
+b
+b
+a
+a
+a
+b
+b
+"}
+(27,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+b
+b
+g
+g
+b
+b
+a
+a
+a
+a
+b
+b
+g
+g
+g
+g
+g
+b
+b
+b
+b
+y
+g
+"}
+(28,1,1) = {"
+a
+a
+a
+a
+a
+b
+b
+B
+g
+g
+l
+e
+b
+a
+a
+a
+b
+b
+g
+g
+b
+b
+g
+g
+g
+b
+O
+R
+g
+g
+"}
+(29,1,1) = {"
+a
+a
+a
+a
+a
+b
+z
+C
+j
+g
+e
+i
+b
+a
+a
+a
+b
+g
+g
+b
+b
+b
+b
+g
+l
+b
+O
+R
+g
+g
+"}
+(30,1,1) = {"
+a
+a
+a
+a
+a
+b
+i
+u
+g
+i
+i
+b
+b
+a
+a
+a
+b
+g
+b
+b
+a
+a
+b
+b
+b
+b
+b
+y
+g
+g
+"}
+(31,1,1) = {"
+a
+a
+a
+a
+a
+b
+b
+b
+g
+b
+b
+b
+a
+a
+a
+a
+b
+g
+b
+b
+a
+a
+a
+a
+a
+a
+a
+b
+g
+g
+"}
+(32,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+a
+b
+g
+g
+b
+a
+a
+a
+a
+a
+a
+a
+b
+g
+g
+"}
+(33,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+a
+b
+b
+l
+b
+a
+a
+a
+a
+a
+a
+b
+b
+g
+a
+"}
+(34,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+l
+b
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+a
+b
+a
+a
+a
+"}
+(35,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(36,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+a
+b
+b
+g
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(37,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+b
+g
+b
+a
+a
+a
+a
+a
+b
+b
+g
+g
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(38,1,1) = {"
+a
+a
+a
+a
+a
+a
+b
+b
+g
+b
+b
+b
+b
+b
+b
+b
+g
+g
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(39,1,1) = {"
+a
+a
+a
+a
+a
+b
+b
+g
+g
+e
+b
+b
+g
+g
+K
+g
+g
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(40,1,1) = {"
+a
+a
+a
+a
+a
+b
+i
+E
+g
+g
+g
+g
+g
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(41,1,1) = {"
+a
+a
+a
+a
+b
+b
+e
+g
+l
+g
+e
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(42,1,1) = {"
+a
+a
+a
+a
+b
+e
+g
+g
+i
+i
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(43,1,1) = {"
+a
+a
+a
+a
+r
+b
+b
+b
+b
+b
+b
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm
index 9c29f154adb..1c7d14bd6fa 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict4.dmm
@@ -25,16 +25,16 @@
/turf/simulated/floor/mineral/titanium/blue,
/area/ruin/unpowered)
"i" = (
-/obj/structure/chair,
/obj/structure/window/reinforced{
tag = "icon-rwindow (WEST)";
icon_state = "rwindow";
dir = 8
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/mineral/titanium/blue,
/area/ruin/unpowered)
"j" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/mineral/titanium/blue,
/area/ruin/unpowered)
"k" = (
@@ -54,9 +54,7 @@
/turf/simulated/floor/plating/airless,
/area/ruin/unpowered)
"n" = (
-/obj/structure/chair{
- tag = "icon-chair (WEST)";
- icon_state = "chair";
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plating/airless,
@@ -71,26 +69,24 @@
/area/ruin/unpowered)
"q" = (
/obj/item/shard,
-/obj/structure/chair{
- tag = "icon-chair (WEST)";
- icon_state = "chair";
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/mineral/titanium/blue,
/area/ruin/unpowered)
"r" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/window/reinforced{
tag = "icon-rwindow (WEST)";
icon_state = "rwindow";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/floor/mineral/titanium/blue,
/area/ruin/unpowered)
"s" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/plating/airless,
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm
index fd6bd8d85fe..a993ab96190 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/intactemptyship.dmm
@@ -155,7 +155,7 @@
},
/area/ruin/powered)
"v" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -205,7 +205,7 @@
},
/area/ruin/powered)
"B" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
tag = "icon-floor5";
icon_state = "floor5"
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm
index 02ee81bf42d..ae055f8bc63 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/mechtransport.dmm
@@ -56,9 +56,7 @@
/turf/simulated/shuttle/floor,
/area/ruin/powered)
"m" = (
-/obj/structure/chair/office/dark{
- tag = "icon-officechair_dark (NORTH)";
- icon_state = "officechair_dark";
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
index a59e8dad0a9..3ba27975660 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
@@ -781,8 +781,8 @@
/turf/simulated/floor/plating,
/area/ruin/space/ancientstation/deltacorridor)
"ck" = (
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"cl" = (
/obj/structure/transit_tube/station/reverse,
@@ -1819,8 +1819,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"eL" = (
/obj/machinery/light{
@@ -3002,8 +3002,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"hg" = (
/obj/effect/decal/cleanable/dirt,
@@ -3130,8 +3130,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"ht" = (
/obj/structure/cable{
@@ -3310,8 +3310,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"hK" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -3722,8 +3722,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"iC" = (
/obj/structure/cable{
@@ -3831,8 +3831,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/simulated/floor/plating,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating,
/area/template_noop)
"iP" = (
/obj/structure/cable/yellow{
@@ -3840,8 +3840,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/simulated/floor/plating,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating,
/area/template_noop)
"iQ" = (
/obj/machinery/light/small,
@@ -4135,8 +4135,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"jx" = (
/obj/effect/decal/cleanable/cobweb,
@@ -4488,8 +4488,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/template_noop)
"km" = (
/obj/structure/cable{
@@ -4584,8 +4584,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/simulated/floor/plating,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating,
/area/template_noop)
"kw" = (
/obj/machinery/atmospherics/unary/vent_pump{
@@ -4816,8 +4816,8 @@
/turf/simulated/floor/plating,
/area/ruin/space/ancientstation/deltacorridor)
"kZ" = (
-/turf/simulated/floor/plating,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating,
/area/template_noop)
"la" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm
index 846ac5068d9..108c8103975 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm
@@ -64,7 +64,7 @@
},
/area/ruin/powered)
"ao" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
index e3d578503f8..67adb3e7467 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm
@@ -55,7 +55,7 @@
},
/area/ruin/unpowered)
"aj" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/wood,
@@ -314,7 +314,7 @@
},
/area/ruin/unpowered)
"bb" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "chapel"
diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm
index 24f93b0a6ce..5d22afc5fcd 100644
--- a/_maps/map_files/RandomZLevels/academy.dmm
+++ b/_maps/map_files/RandomZLevels/academy.dmm
@@ -36,7 +36,7 @@
/turf/simulated/floor/carpet,
/area/awaymission/academy/headmaster)
"ai" = (
-/obj/structure/chair/office/light{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/carpet,
@@ -152,7 +152,9 @@
/turf/simulated/floor/carpet,
/area/awaymission/academy/headmaster)
"ax" = (
-/obj/structure/chair/stool,
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/floor/carpet,
/area/awaymission/academy/headmaster)
"ay" = (
@@ -4558,6 +4560,12 @@
},
/turf/simulated/floor/plating,
/area/awaymission/academy/academygate)
+"vq" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/floor/carpet,
+/area/awaymission/academy/headmaster)
(1,1,1) = {"
aa
@@ -13944,9 +13952,9 @@ ab
aj
ao
au
-ax
+vq
ah
-ax
+vq
ah
ah
ah
diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm
index 4544e3830d8..2931d7175b7 100644
--- a/_maps/map_files/RandomZLevels/beach.dmm
+++ b/_maps/map_files/RandomZLevels/beach.dmm
@@ -1265,7 +1265,7 @@
icon_state = "tube1";
dir = 8
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -1275,7 +1275,7 @@
dir = 4;
icon_state = "tube1"
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -1323,7 +1323,7 @@
},
/area/awaymission/beach)
"dZ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -1336,7 +1336,7 @@
},
/area/awaymission/beach)
"eb" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -1371,7 +1371,7 @@
/turf/simulated/shuttle/floor,
/area/awaymission/beach)
"ei" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm
index 4938088d57f..77e09164224 100644
--- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm
+++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm
@@ -1934,7 +1934,7 @@
/turf/simulated/floor/plating,
/area/awaymission/BMPship/Aft)
"eV" = (
-/obj/structure/chair/office{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel{
diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm
index 98288fe54da..e64c25da157 100644
--- a/_maps/map_files/RandomZLevels/centcomAway.dmm
+++ b/_maps/map_files/RandomZLevels/centcomAway.dmm
@@ -1059,8 +1059,8 @@
pixel_x = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/awaymission/centcomAway/maint)
"cO" = (
/obj/structure/cable{
@@ -1082,8 +1082,8 @@
pixel_x = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/awaymission/centcomAway/maint)
"cP" = (
/obj/structure/table/reinforced,
@@ -1105,7 +1105,7 @@
},
/area/awaymission/centcomAway/hangar)
"cS" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -1166,7 +1166,7 @@
},
/area/awaymission/centcomAway/cafe)
"da" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -1215,7 +1215,7 @@
},
/area/awaymission/centcomAway/hangar)
"dg" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -1310,13 +1310,13 @@
},
/area/awaymission/centcomAway/hangar)
"dr" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light{
icon_state = "tube1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/awaymission/centcomAway/hangar)
"ds" = (
@@ -1551,8 +1551,8 @@
pixel_x = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/awaymission/centcomAway/maint)
"dV" = (
/obj/structure/closet/crate,
@@ -1646,8 +1646,8 @@
pixel_y = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/awaymission/centcomAway/maint)
"ei" = (
/obj/structure/table,
@@ -1694,8 +1694,8 @@
"eo" = (
/obj/structure/cable,
/obj/machinery/power/tracker,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/awaymission/centcomAway/maint)
"ep" = (
/obj/structure/table,
@@ -1972,7 +1972,7 @@
/turf/simulated/shuttle/floor,
/area/awaymission/centcomAway/hangar)
"fc" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/awaymission/centcomAway/hangar)
"fd" = (
@@ -2368,13 +2368,6 @@
dir = 5
},
/area/awaymission/centcomAway/general)
-"gb" = (
-/obj/structure/chair{
- dir = 4;
- name = "Prosecution"
- },
-/turf/simulated/shuttle/floor,
-/area/awaymission/centcomAway/hangar)
"gc" = (
/turf/simulated/floor/plasteel{
dir = 9;
@@ -2967,6 +2960,9 @@
/obj/item/radio/intercom{
pixel_y = 25
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/awaymission/centcomAway/hangar)
"hF" = (
@@ -4076,7 +4072,7 @@
/turf/simulated/floor/plating,
/area/awaymission/centcomAway/hangar)
"kb" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/mob/living/simple_animal/hostile/russian/ranged{
@@ -6814,6 +6810,15 @@
icon_state = "dark"
},
/area/awaymission/centcomAway/thunderdome)
+"Di" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor,
+/area/awaymission/centcomAway/hangar)
(1,1,1) = {"
aa
@@ -11426,7 +11431,7 @@ gX
gX
gX
bP
-dg
+Di
bP
oc
aW
@@ -12205,7 +12210,7 @@ jz
gX
gX
bP
-dg
+Di
bP
gX
gX
@@ -12324,7 +12329,7 @@ bY
cq
ei
bO
-gb
+dg
cq
hH
fA
diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm
index 3d8d1868c2c..fe5445dc8c3 100644
--- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm
+++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm
@@ -5927,7 +5927,7 @@
desc = "Oh no, seven years of bad luck!";
icon_state = "mirror_broke";
pixel_x = 28;
- shattered = 1
+ broken = 1
},
/turf/simulated/floor/plasteel{
icon_state = "freezerfloor"
@@ -8413,12 +8413,12 @@
name = "MO19 Arrivals"
})
"mb" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light/small{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/awaycontent/a1{
has_gravity = 1;
@@ -8431,7 +8431,7 @@
name = "MO19 Arrivals"
})
"md" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -8592,12 +8592,12 @@
name = "MO19 Arrivals"
})
"mr" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/light/small{
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor2"
},
@@ -8623,12 +8623,12 @@
name = "MO19 Arrivals"
})
"mu" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/landmark{
name = "awaystart"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/awaycontent/a1{
has_gravity = 1;
@@ -8965,10 +8965,10 @@
name = "MO19 Arrivals"
})
"mX" = (
-/obj/structure/chair,
/obj/machinery/light/small{
dir = 4
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor2"
},
@@ -9070,10 +9070,10 @@
name = "MO19 Arrivals"
})
"nh" = (
-/obj/structure/chair{
+/obj/machinery/light/small,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/machinery/light/small,
/turf/simulated/shuttle/floor,
/area/awaycontent/a1{
has_gravity = 1;
diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm
index 16acaaacc34..17341581c9a 100644
--- a/_maps/map_files/RandomZLevels/spacebattle.dmm
+++ b/_maps/map_files/RandomZLevels/spacebattle.dmm
@@ -219,7 +219,7 @@
},
/area/awaymission/spacebattle/syndicate2)
"aH" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/mob/living/simple_animal/hostile/syndicate,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
@@ -361,7 +361,7 @@
},
/area/awaymission/spacebattle/syndicate1)
"ba" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -369,7 +369,7 @@
},
/area/awaymission/spacebattle/syndicate2)
"bb" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -475,7 +475,7 @@
},
/area/awaymission/spacebattle/syndicate3)
"bq" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/mob/living/simple_animal/hostile/syndicate,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
@@ -534,7 +534,7 @@
},
/area/awaymission/spacebattle/syndicate1)
"by" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/mob/living/simple_animal/hostile/syndicate,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
@@ -648,7 +648,7 @@
/turf/simulated/floor/plating/airless,
/area/awaymission/spacebattle/cruiser)
"bN" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -656,7 +656,7 @@
},
/area/awaymission/spacebattle/cruiser)
"bO" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -1270,7 +1270,9 @@
/turf/simulated/floor/plating,
/area/awaymission/spacebattle/cruiser)
"dJ" = (
-/obj/mecha/working/ripley/firefighter,
+/obj/mecha/working/ripley/firefighter{
+ ruin_mecha = 1
+ },
/turf/simulated/floor/plating,
/area/awaymission/spacebattle/cruiser)
"dK" = (
@@ -1638,7 +1640,7 @@
},
/area/awaymission/spacebattle/syndicate4)
"eQ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/mob/living/simple_animal/hostile/syndicate,
@@ -2419,7 +2421,7 @@
},
/area/awaymission/spacebattle/syndicate7)
"hM" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/mob/living/simple_animal/hostile/syndicate,
@@ -2727,7 +2729,7 @@
},
/area/awaymission/spacebattle/syndicate5)
"iI" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/mob/living/simple_animal/hostile/syndicate,
@@ -2813,7 +2815,7 @@
},
/area/awaymission/spacebattle/syndicate6)
"iW" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/mob/living/simple_animal/hostile/syndicate,
diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm
index 541156ddc57..8394ca1b635 100644
--- a/_maps/map_files/RandomZLevels/spacehotel.dmm
+++ b/_maps/map_files/RandomZLevels/spacehotel.dmm
@@ -4652,16 +4652,16 @@
/turf/simulated/shuttle/floor,
/area/awaymission)
"kQ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
/area/awaymission)
"kR" = (
-/obj/structure/chair{
+/obj/item/paper/hotel_scrap_4,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/item/paper/hotel_scrap_4,
/turf/simulated/shuttle/floor,
/area/awaymission)
"kS" = (
@@ -4709,11 +4709,11 @@
/turf/simulated/shuttle/plating,
/area/space/nearstation)
"la" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/blood/old,
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/awaymission)
"lb" = (
@@ -4741,17 +4741,17 @@
},
/area/awaymission)
"lf" = (
-/obj/structure/chair{
+/obj/effect/decal/remains/human,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/effect/decal/remains/human,
/turf/simulated/shuttle/floor,
/area/awaymission)
"lg" = (
-/obj/structure/chair{
+/obj/effect/decal/cleanable/blood/old,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/effect/decal/cleanable/blood/old,
/turf/simulated/shuttle/floor,
/area/awaymission)
"lh" = (
diff --git a/_maps/map_files/RandomZLevels/stationCollision.dmm b/_maps/map_files/RandomZLevels/stationCollision.dmm
index 2f225fea612..8910fa36aaa 100644
--- a/_maps/map_files/RandomZLevels/stationCollision.dmm
+++ b/_maps/map_files/RandomZLevels/stationCollision.dmm
@@ -1941,7 +1941,7 @@
},
/area/awaymission/research)
"ff" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -1952,7 +1952,7 @@
},
/area/awaymission/syndishuttle)
"fg" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -2381,7 +2381,7 @@
},
/area/awaymission/arrivalblock)
"gc" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -4196,7 +4196,7 @@
/turf/simulated/floor/plasteel,
/area/awaymission/southblock)
"kO" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -4204,13 +4204,13 @@
},
/area/awaymission/arrivalblock)
"kP" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/awaymission/arrivalblock)
"kQ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm
index f5f7d96e4ea..ca6d20a6eba 100644
--- a/_maps/map_files/RandomZLevels/wildwest.dmm
+++ b/_maps/map_files/RandomZLevels/wildwest.dmm
@@ -2612,7 +2612,7 @@
},
/area/awaymission/wwrefine)
"ho" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle{
tag = "icon-floor2";
icon_state = "floor2"
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 2107bdd7500..bd37f2193e5 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -225,7 +225,7 @@
/turf/simulated/shuttle/plating,
/area/shuttle/abandoned)
"aaF" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -413,10 +413,10 @@
},
/area/shuttle/abandoned)
"abe" = (
-/obj/structure/chair{
+/obj/effect/decal/remains/human,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/effect/decal/remains/human,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -512,13 +512,13 @@
/area/shuttle/abandoned)
"abr" = (
/obj/item/shard,
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/abandoned)
"abs" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -811,7 +811,7 @@
},
/area/shuttle/syndicate)
"ace" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -1060,7 +1060,7 @@
},
/area/security/armoury)
"acI" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -1068,7 +1068,7 @@
},
/area/shuttle/syndicate)
"acJ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -3880,11 +3880,13 @@
/turf/simulated/shuttle/plating/vox,
/area/shuttle/vox)
"ahp" = (
-/obj/structure/chair/stool,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"ahq" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4/vox,
@@ -6588,8 +6590,8 @@
d2 = 2
},
/obj/machinery/power/tracker,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"alE" = (
/obj/structure/closet/secure_closet/brig,
@@ -6976,7 +6978,7 @@
/area/shuttle/vox)
"aml" = (
/obj/item/stack/spacecash/c50,
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor4/vox,
@@ -7012,8 +7014,8 @@
pixel_y = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"amp" = (
/obj/structure/chair{
@@ -7391,8 +7393,8 @@
d2 = 2
},
/obj/machinery/power/tracker,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"amV" = (
/obj/structure/sign/nosmoking_2,
@@ -7419,12 +7421,9 @@
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"amZ" = (
-/obj/item/stack/spacecash/c200,
-/obj/item/stack/spacecash/c50,
-/obj/structure/chair{
- dir = 1
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor4/vox,
/area/shuttle/vox)
"ana" = (
@@ -7544,8 +7543,8 @@
/area/security/permabrig)
"ann" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"ano" = (
/obj/structure/cable{
@@ -7791,8 +7790,8 @@
pixel_y = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"anH" = (
/turf/simulated/wall/r_wall,
@@ -8469,8 +8468,8 @@
icon_state = "2-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"aoL" = (
/obj/structure/cable{
@@ -8845,8 +8844,8 @@
icon_state = "1-2";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"apo" = (
/obj/structure/grille/broken,
@@ -9768,8 +9767,8 @@
},
/area/lawoffice)
"aqZ" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"ara" = (
/obj/structure/table/reinforced,
@@ -9796,8 +9795,8 @@
/area/lawoffice)
"arb" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"arc" = (
/obj/effect/spawner/window/reinforced,
@@ -10307,8 +10306,8 @@
icon_state = "2-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"arM" = (
/obj/structure/cable{
@@ -10330,16 +10329,16 @@
icon_state = "2-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"arN" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"arO" = (
/obj/structure/cable{
@@ -10411,8 +10410,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"arV" = (
/obj/structure/shuttle/engine/propulsion{
@@ -10422,11 +10421,13 @@
/turf/simulated/shuttle/plating,
/area/shuttle/trade/sol)
"arW" = (
-/obj/structure/chair{
- dir = 4
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/trade/sol)
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/siberia)
"arX" = (
/obj/structure/cable{
icon_state = "0-2";
@@ -10445,15 +10446,14 @@
/turf/simulated/shuttle/floor,
/area/shuttle/trade/sol)
"arZ" = (
-/obj/machinery/atm{
- pixel_x = 0;
- pixel_y = 32
+/obj/item/stack/spacecash/c200,
+/obj/item/stack/spacecash/c50,
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
-/obj/structure/chair{
- dir = 8
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/trade/sol)
+/turf/simulated/shuttle/floor4/vox,
+/area/shuttle/vox)
"asa" = (
/obj/effect/spawner/window/reinforced,
/obj/machinery/door/poddoor/shutters{
@@ -10467,8 +10467,8 @@
/turf/simulated/shuttle/floor,
/area/shuttle/trade/sol)
"asb" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"asc" = (
/obj/effect/spawner/random_barrier/obstruction,
@@ -11025,8 +11025,8 @@
icon_state = "1-8";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"asM" = (
/obj/structure/cable{
@@ -11041,8 +11041,8 @@
icon_state = "1-8";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"asN" = (
/turf/simulated/floor/carpet,
@@ -11637,12 +11637,10 @@
},
/area/shuttle/siberia)
"atL" = (
-/obj/structure/chair/office/dark{
- dir = 1
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
+/turf/simulated/shuttle/floor,
/area/shuttle/siberia)
"atM" = (
/obj/effect/spawner/window/reinforced,
@@ -12787,17 +12785,19 @@
/turf/simulated/floor/plasteel,
/area/security/permabrig)
"avp" = (
-/obj/structure/chair{
- dir = 4
+/obj/machinery/flasher{
+ id = "gulagshuttleflasher";
+ pixel_x = 25
},
-/obj/item/radio/intercom{
- broadcasting = 0;
- listening = 1;
- name = "station intercom (General)";
- pixel_y = 25
+/obj/machinery/light{
+ dir = 4;
+ icon_state = "tube1"
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
/turf/simulated/shuttle/floor,
-/area/shuttle/pod_3)
+/area/shuttle/siberia)
"avq" = (
/turf/simulated/floor/plating,
/area/maintenance/fsmaint)
@@ -12840,18 +12840,19 @@
/turf/simulated/shuttle/floor,
/area/shuttle/pod_3)
"avu" = (
-/obj/structure/chair{
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (WEST)";
+ icon_state = "tube1";
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/obj/machinery/status_display{
- density = 0;
- layer = 4;
- pixel_x = 0;
- pixel_y = 32
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
},
-/obj/machinery/light,
-/turf/simulated/shuttle/floor,
-/area/shuttle/pod_3)
+/area/shuttle/syndicate_sit)
"avv" = (
/obj/machinery/door/airlock/external{
name = "Labor Shuttle Airlock";
@@ -13086,8 +13087,8 @@
pixel_y = -25;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"avN" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -13434,8 +13435,8 @@
pixel_y = 1;
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxport)
"awl" = (
/turf/simulated/wall,
@@ -13713,32 +13714,29 @@
},
/area/security/permabrig)
"awP" = (
-/obj/structure/shuttle/engine/propulsion/burst{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/turf/simulated/floor/plating,
-/turf/simulated/shuttle/wall{
- tag = "icon-swall_f6";
- icon_state = "swall_f6";
- dir = 2
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
},
-/area/shuttle/pod_3)
+/area/shuttle/syndicate_sit)
"awQ" = (
/obj/structure/cable{
d1 = 2;
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"awR" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"awS" = (
/obj/item/twohanded/required/kirbyplants,
@@ -13956,30 +13954,31 @@
/turf/simulated/shuttle/plating,
/area/shuttle/syndicate_sit)
"axm" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
-/obj/machinery/flasher{
- id = "gulagshuttleflasher";
- pixel_x = 25
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
},
-/obj/machinery/light{
- dir = 4;
- icon_state = "tube1"
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/siberia)
+/area/shuttle/syndicate_sit)
"axn" = (
/obj/structure/lattice,
/obj/item/stack/cable_coil,
/turf/space,
/area/space/nearstation)
"axo" = (
-/obj/structure/chair{
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (WEST)";
+ icon_state = "tube1";
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/siberia)
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/syndicate_elite)
"axp" = (
/obj/structure/bookcase,
/obj/item/book/manual/sop_engineering,
@@ -14016,8 +14015,8 @@
icon_state = "1-2";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"axr" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -14332,16 +14331,13 @@
},
/area/security/prison/cell_block/A)
"axN" = (
-/obj/structure/shuttle/engine/propulsion/burst{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/turf/simulated/floor/plating,
-/turf/simulated/shuttle/wall{
- tag = "icon-swall_f5";
- icon_state = "swall_f5";
- dir = 2
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
},
-/area/shuttle/pod_3)
+/area/shuttle/syndicate_elite)
"axO" = (
/obj/structure/cable{
d1 = 1;
@@ -14826,8 +14822,8 @@
icon_state = "1-2";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/auxstarboard)
"ayF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -15170,8 +15166,8 @@
pixel_y = -25;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"azc" = (
/obj/effect/spawner/window/reinforced,
@@ -15206,9 +15202,6 @@
},
/area/security/interrogation)
"aze" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (WEST)";
icon_state = "tube1";
@@ -15217,34 +15210,26 @@
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
+/area/shuttle/syndicate_sit)
+"azf" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
/area/shuttle/syndicate_elite)
-"azf" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
- icon_state = "tube1";
- dir = 8
- },
-/obj/structure/window/reinforced,
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/syndicate_sit)
"azg" = (
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/syndicate_elite)
"azh" = (
-/obj/structure/chair{
- dir = 8
- },
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
-/area/shuttle/syndicate_elite)
+/area/shuttle/syndicate_sit)
"azi" = (
/obj/machinery/door/window/brigdoor{
dir = 2;
@@ -15824,13 +15809,16 @@
/turf/simulated/floor/plating,
/area/maintenance/abandonedbar)
"aAh" = (
-/obj/structure/chair{
- dir = 4
+/obj/structure/shuttle/engine/propulsion/burst{
+ dir = 8
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
+/turf/simulated/floor/plating,
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall_f6";
+ icon_state = "swall_f6";
+ dir = 2
},
-/area/shuttle/syndicate_elite)
+/area/shuttle/pod_3)
"aAi" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/ert,
/turf/simulated/shuttle/floor{
@@ -16433,21 +16421,30 @@
/turf/simulated/floor/plating,
/area/maintenance/abandonedbar)
"aBk" = (
-/obj/structure/chair{
+/obj/item/radio/intercom{
+ broadcasting = 0;
+ listening = 1;
+ name = "station intercom (General)";
+ pixel_y = 25
+ },
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/syndicate_sit)
+/turf/simulated/shuttle/floor,
+/area/shuttle/pod_3)
"aBl" = (
-/obj/structure/chair{
- dir = 8
+/obj/machinery/status_display{
+ density = 0;
+ layer = 4;
+ pixel_x = 0;
+ pixel_y = 32
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
-/area/shuttle/syndicate_sit)
+/turf/simulated/shuttle/floor,
+/area/shuttle/pod_3)
"aBm" = (
/obj/item/stack/rods,
/turf/space,
@@ -16536,8 +16533,8 @@
pixel_y = 0;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aBy" = (
/obj/effect/landmark/damageturf,
@@ -17326,24 +17323,22 @@
/turf/simulated/floor/plating,
/area/maintenance/abandonedbar)
"aCX" = (
-/obj/structure/chair,
+/obj/structure/shuttle/engine/propulsion/burst{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall_f5";
+ icon_state = "swall_f5";
+ dir = 2
+ },
+/area/shuttle/pod_3)
+"aCY" = (
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/syndicate_elite)
-"aCY" = (
-/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
- icon_state = "tube1";
- dir = 8
- },
-/obj/structure/chair{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/syndicate_sit)
"aCZ" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light{
@@ -18254,8 +18249,8 @@
pixel_y = -25;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"aEN" = (
/obj/structure/closet/emcloset,
@@ -21081,9 +21076,6 @@
},
/area/shuttle/pod_1)
"aLb" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -21094,6 +21086,9 @@
dir = 4;
icon_state = "tube1"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_1)
"aLc" = (
@@ -21111,9 +21106,6 @@
},
/area/shuttle/pod_2)
"aLf" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -21124,6 +21116,9 @@
dir = 4;
icon_state = "tube1"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_2)
"aLg" = (
@@ -21759,14 +21754,14 @@
/turf/simulated/floor/plating,
/area/maintenance/fsmaint2)
"aMp" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
dir = 4;
name = "station intercom (General)";
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_1)
"aMq" = (
@@ -21779,14 +21774,14 @@
/turf/simulated/wall,
/area/hallway/secondary/entry)
"aMt" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
dir = 4;
name = "station intercom (General)";
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/pod_2)
"aMu" = (
@@ -23414,8 +23409,8 @@
},
/area/shuttle/pod_2)
"aPV" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
/turf/simulated/shuttle/floor,
/area/shuttle/trade/sol)
@@ -28110,13 +28105,13 @@
/turf/simulated/floor/plating,
/area/maintenance/fsmaint2)
"aYL" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light{
dir = 1;
on = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"aYM" = (
@@ -28228,12 +28223,12 @@
/turf/simulated/floor/plating,
/area/maintenance/fsmaint2)
"aYZ" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/landmark{
name = "JoinLate"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"aZa" = (
@@ -30143,11 +30138,15 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"bcK" = (
-/obj/structure/chair/comfy/black{
- dir = 1
+/obj/machinery/atm{
+ pixel_x = 0;
+ pixel_y = 32
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
+/area/shuttle/trade/sol)
"bcL" = (
/obj/machinery/computer/communications,
/turf/simulated/shuttle/floor,
@@ -30160,10 +30159,10 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"bcN" = (
-/obj/structure/chair{
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/machinery/light,
/turf/simulated/shuttle/floor,
/area/shuttle/arrival/station)
"bcO" = (
@@ -31176,11 +31175,11 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"beB" = (
-/obj/structure/chair{
- dir = 1
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
+/area/shuttle/trade/sol)
"beC" = (
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
@@ -32203,23 +32202,39 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"bgo" = (
-/obj/structure/chair{
- dir = 1
+/obj/machinery/flasher{
+ id = "soltraderflash";
+ pixel_y = -28
},
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = -28
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
+/area/shuttle/trade/sol)
"bgp" = (
-/obj/structure/chair{
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "asteroid";
+ tag = "icon-asteroid (NORTH)"
+ },
+/turf/simulated/floor/plasteel{
+ tag = "icon-siding2 (NORTH)";
+ icon_state = "siding2";
dir = 1
},
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = 28
+/turf/simulated/floor/plasteel{
+ tag = "icon-siding1 (NORTH)";
+ icon_state = "siding1";
+ dir = 1
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
+/area/hydroponics)
"bgq" = (
/obj/machinery/power/apc{
dir = 1;
@@ -33193,21 +33208,56 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"bil" = (
-/obj/structure/chair{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/mob/living/simple_animal/pig,
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "asteroid";
+ tag = "icon-asteroid (NORTH)"
+ },
+/turf/simulated/floor/plasteel{
+ tag = "icon-siding1 (NORTH)";
+ icon_state = "siding1";
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ tag = "icon-siding2 (NORTH)";
+ icon_state = "siding2";
+ dir = 1
+ },
+/area/hydroponics)
"bim" = (
/obj/machinery/light/spot,
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"bin" = (
-/obj/structure/chair{
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 2;
+ icon_state = "asteroid";
+ tag = "icon-asteroid (NORTH)"
+ },
+/turf/simulated/floor/plasteel{
+ tag = "icon-siding1 (NORTH)";
+ icon_state = "siding1";
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ tag = "icon-siding2 (NORTH)";
+ icon_state = "siding2";
+ dir = 1
+ },
+/area/hydroponics)
"bio" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/structure/cable{
@@ -33755,80 +33805,33 @@
},
/area/hydroponics)
"bje" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 6
- },
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "asteroid";
- tag = "icon-asteroid (NORTH)"
- },
-/turf/simulated/floor/plasteel{
- tag = "icon-siding2 (NORTH)";
- icon_state = "siding2";
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/turf/simulated/floor/plasteel{
- tag = "icon-siding1 (NORTH)";
- icon_state = "siding1";
- dir = 1
- },
-/area/hydroponics)
+/turf/simulated/shuttle/floor,
+/area/shuttle/escape)
"bjf" = (
/obj/structure/reagent_dispensers/beerkeg,
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bjg" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/structure/closet/walllocker/emerglocker{
+ pixel_x = -28
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/mob/living/simple_animal/pig,
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "asteroid";
- tag = "icon-asteroid (NORTH)"
- },
-/turf/simulated/floor/plasteel{
- tag = "icon-siding1 (NORTH)";
- icon_state = "siding1";
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/turf/simulated/floor/plasteel{
- tag = "icon-siding2 (NORTH)";
- icon_state = "siding2";
- dir = 1
- },
-/area/hydroponics)
+/turf/simulated/shuttle/floor,
+/area/shuttle/escape)
"bjh" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/structure/closet/walllocker/emerglocker{
+ pixel_x = 28
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/plasteel{
- dir = 2;
- icon_state = "asteroid";
- tag = "icon-asteroid (NORTH)"
- },
-/turf/simulated/floor/plasteel{
- tag = "icon-siding1 (NORTH)";
- icon_state = "siding1";
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/turf/simulated/floor/plasteel{
- tag = "icon-siding2 (NORTH)";
- icon_state = "siding2";
- dir = 1
- },
-/area/hydroponics)
+/turf/simulated/shuttle/floor,
+/area/shuttle/escape)
"bji" = (
/obj/item/radio/beacon,
/turf/simulated/floor/plasteel,
@@ -34947,16 +34950,10 @@
/turf/simulated/floor/carpet,
/area/crew_quarters/bar)
"blu" = (
-/obj/machinery/status_display{
- pixel_y = 30
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
- },
-/obj/structure/chair,
-/turf/simulated/shuttle/floor4,
+/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"blv" = (
/obj/machinery/status_display{
@@ -35005,12 +35002,10 @@
/turf/simulated/floor/carpet,
/area/chapel/main)
"blA" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
- },
+/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"blB" = (
/obj/structure/sign/securearea{
@@ -35025,12 +35020,10 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/entry)
"blC" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
+/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"blD" = (
/obj/structure/grille,
@@ -35780,13 +35773,19 @@
/turf/simulated/floor/plasteel,
/area/hallway/primary/central/nw)
"bmX" = (
-/obj/structure/chair{
- dir = 4
+/obj/machinery/status_display{
+ pixel_y = 30
},
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (NORTH)";
+ icon_state = "tube1";
+ dir = 1
+ },
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"bmY" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"bmZ" = (
@@ -35815,12 +35814,9 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bnc" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = 28
- },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -38803,39 +38799,25 @@
},
/area/maintenance/asmaint2)
"btt" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/obj/item/radio/intercom{
- dir = 8;
- name = "station intercom (General)";
- pixel_x = -28
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
- icon_state = "tube1";
- dir = 8
- },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"btu" = (
-/obj/structure/chair{
- dir = 8
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8;
+ icon_state = "propulsion";
+ tag = "icon-propulsion (EAST)"
},
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = 28
+/turf/space,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall_f6";
+ dir = 2
},
-/obj/machinery/light/spot{
- tag = "icon-tube1 (EAST)";
- icon_state = "tube1";
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor3"
- },
-/area/shuttle/escape)
+/area/shuttle/transport)
"btv" = (
/turf/simulated/shuttle/floor,
/turf/simulated/shuttle/wall/interior{
@@ -38864,23 +38846,18 @@
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bty" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"btz" = (
-/obj/structure/chair,
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
- },
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"btA" = (
@@ -38906,7 +38883,12 @@
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"btD" = (
-/obj/structure/chair,
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (NORTH)";
+ icon_state = "tube1";
+ dir = 1
+ },
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"btE" = (
@@ -40463,16 +40445,21 @@
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bwI" = (
-/obj/structure/chair{
- dir = 1
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8;
+ icon_state = "propulsion";
+ tag = "icon-propulsion (EAST)"
+ },
+/turf/space,
+/turf/simulated/shuttle/wall{
+ icon_state = "swall_f5";
+ dir = 2
},
-/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bwJ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"bwK" = (
@@ -40655,17 +40642,14 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/exit)
"bwX" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 8;
- icon_state = "propulsion";
- tag = "icon-propulsion (EAST)"
+/obj/structure/closet/walllocker/emerglocker{
+ pixel_x = -28
},
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f6";
- dir = 2
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
-/area/shuttle/transport)
+/turf/simulated/shuttle/floor4,
+/area/shuttle/escape)
"bwY" = (
/obj/machinery/power/apc{
dir = 4;
@@ -41451,17 +41435,16 @@
},
/area/hallway/primary/central/ne)
"bys" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 8;
- icon_state = "propulsion";
- tag = "icon-propulsion (EAST)"
+/obj/structure/closet/walllocker/emerglocker{
+ pixel_x = 28
},
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f5";
- dir = 2
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
},
-/area/shuttle/transport)
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
+/area/shuttle/escape)
"byt" = (
/obj/machinery/door/airlock/command/glass{
name = "Bridge";
@@ -42700,20 +42683,12 @@
},
/area/shuttle/specops)
"bAS" = (
-/obj/machinery/recharger/wallcharger{
- pixel_x = 4;
- pixel_y = 32
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/structure/chair,
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/specops)
+/turf/simulated/shuttle/floor,
+/area/shuttle/transport)
"bAT" = (
/turf/space,
/turf/simulated/shuttle/wall{
@@ -43168,11 +43143,8 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bBT" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/structure/closet/walllocker/emerglocker{
- pixel_x = -28
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
@@ -43222,11 +43194,12 @@
},
/area/shuttle/escape)
"bBZ" = (
-/obj/machinery/recharger/wallcharger{
- pixel_x = 4;
- pixel_y = 32
+/obj/machinery/camera{
+ c_tag = "CentComm Special Ops. Shuttle";
+ dir = 2;
+ network = list("ERT","CentComm")
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -43266,12 +43239,11 @@
/turf/unsimulated/floor,
/area/shuttle/specops)
"bCe" = (
-/obj/machinery/camera{
- c_tag = "CentComm Special Ops. Shuttle";
- dir = 2;
- network = list("ERT","CentComm")
+/obj/machinery/recharger/wallcharger{
+ pixel_x = 4;
+ pixel_y = 32
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -44022,14 +43994,16 @@
},
/area/shuttle/escape)
"bDG" = (
-/obj/structure/chair{
- dir = 4
+/obj/machinery/recharger/wallcharger{
+ pixel_x = 4;
+ pixel_y = 32
},
/obj/machinery/light/spot{
- tag = "icon-tube1 (WEST)";
+ tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
- dir = 8
+ dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -44514,8 +44488,10 @@
},
/area/shuttle/specops)
"bEL" = (
-/obj/structure/chair{
- dir = 1
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (WEST)";
+ icon_state = "tube1";
+ dir = 8
},
/turf/simulated/shuttle/floor{
icon_state = "floor4"
@@ -45607,11 +45583,13 @@
/turf/simulated/floor/plasteel,
/area/hallway/secondary/exit)
"bGJ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/turf/simulated/shuttle/floor4,
-/area/shuttle/escape)
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/specops)
"bGK" = (
/obj/effect/spawner/window/reinforced,
/obj/machinery/door/poddoor{
@@ -50861,6 +50839,24 @@
icon_state = "diagonalWall3"
},
/area/shuttle/administration)
+"bPM" = (
+/obj/item/radio/intercom{
+ dir = 8;
+ name = "station intercom (General)";
+ pixel_x = -28
+ },
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (WEST)";
+ icon_state = "tube1";
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
+/area/shuttle/escape)
"bPN" = (
/obj/machinery/door/airlock/external{
id_tag = "s_docking_airlock";
@@ -52059,6 +52055,22 @@
icon_state = "wall3"
},
/area/shuttle/administration)
+"bRH" = (
+/obj/structure/closet/walllocker/emerglocker{
+ pixel_x = 28
+ },
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (EAST)";
+ icon_state = "tube1";
+ dir = 4
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor3"
+ },
+/area/shuttle/escape)
"bRI" = (
/obj/structure/plasticflaps/mining,
/obj/machinery/conveyor/east{
@@ -54136,6 +54148,20 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plasteel,
/area/engine/gravitygenerator)
+"bVk" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/constructionsite)
+"bVl" = (
+/obj/machinery/light,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor2"
+ },
+/area/shuttle/constructionsite)
"bVm" = (
/obj/machinery/light/spot{
tag = "icon-tube1 (WEST)";
@@ -55105,6 +55131,35 @@
icon_state = "floor4"
},
/area/shuttle/administration)
+"bWO" = (
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (NORTH)";
+ icon_state = "tube1";
+ dir = 1
+ },
+/obj/machinery/door_control{
+ id = "adminshuttleblast";
+ name = "Blast door control";
+ pixel_x = -5;
+ pixel_y = 35;
+ req_access = list(101);
+ req_access_txt = "0"
+ },
+/obj/machinery/door_control{
+ id = "adminshuttleshutters";
+ name = "Shutter control";
+ pixel_x = 5;
+ pixel_y = 35;
+ req_access = list(101);
+ req_access_txt = "0"
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/administration)
"bWP" = (
/obj/machinery/door/airlock/external{
id_tag = "s_docking_airlock";
@@ -56079,6 +56134,18 @@
icon_state = "floor4"
},
/area/shuttle/administration)
+"bYu" = (
+/obj/item/radio/intercom{
+ broadcasting = 0;
+ listening = 1;
+ name = "station intercom (General)";
+ pixel_y = 25
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor,
+/area/shuttle/pod_4)
"bYv" = (
/turf/space,
/turf/simulated/shuttle/wall{
@@ -57361,6 +57428,19 @@
"cam" = (
/turf/simulated/wall,
/area/quartermaster/miningdock)
+"can" = (
+/obj/machinery/status_display{
+ density = 0;
+ layer = 4;
+ pixel_x = 0;
+ pixel_y = 32
+ },
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/turf/simulated/shuttle/floor,
+/area/shuttle/pod_4)
"cao" = (
/obj/structure/filingcabinet,
/turf/simulated/floor/plasteel,
@@ -58157,13 +58237,34 @@
/turf/simulated/floor/plasteel/airless,
/area/toxins/test_area)
"cbx" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/administration)
+"cby" = (
+/obj/machinery/light/spot{
+ tag = "icon-tube1 (EAST)";
+ icon_state = "tube1";
+ dir = 4
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/administration)
+"cbz" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/administration)
"cbA" = (
/obj/machinery/door/poddoor/shutters{
density = 0;
@@ -59416,6 +59517,12 @@
icon_state = "floor3"
},
/area/shuttle/administration)
+"cdq" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/simulated/shuttle/floor,
+/area/shuttle/mining)
"cdr" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/admin{
name = "NTV Argos shuttle navigation computer"
@@ -60192,6 +60299,18 @@
tag = "icon-cafeteria (NORTHEAST)"
},
/area/crew_quarters/hor)
+"ceT" = (
+/obj/structure/window/plasmareinforced{
+ color = "#FF0000";
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/administration)
"ceU" = (
/obj/structure/shuttle/engine/propulsion,
/turf/simulated/shuttle/plating,
@@ -60241,6 +60360,9 @@
/area/quartermaster/miningdock)
"cfc" = (
/obj/machinery/hologram/holopad,
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
/turf/simulated/floor/plasteel,
/area/quartermaster/miningdock)
"cfd" = (
@@ -61149,13 +61271,8 @@
},
/area/shuttle/administration)
"cgA" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/machinery/light/spot{
- tag = "icon-tube1 (EAST)";
- icon_state = "tube1";
- dir = 4
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
/turf/simulated/shuttle/floor{
icon_state = "floor4"
@@ -62161,22 +62278,30 @@
},
/area/shuttle/administration)
"cil" = (
-/obj/structure/chair{
+/obj/structure/shuttle/engine/propulsion/burst{
dir = 8
},
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
+/turf/simulated/floor/plating,
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall_f6";
+ icon_state = "swall_f6";
+ dir = 2
},
-/area/shuttle/administration)
+/area/shuttle/pod_4)
"cim" = (
/turf/simulated/shuttle/floor,
/area/shuttle/mining)
"cin" = (
-/obj/structure/chair{
- dir = 1
+/obj/structure/shuttle/engine/propulsion/burst{
+ dir = 8
},
-/turf/simulated/shuttle/floor,
-/area/shuttle/mining)
+/turf/simulated/floor/plating,
+/turf/simulated/shuttle/wall{
+ tag = "icon-swall_f5";
+ icon_state = "swall_f5";
+ dir = 2
+ },
+/area/shuttle/pod_4)
"cio" = (
/obj/machinery/door/window/brigdoor/westleft{
color = "#d70000";
@@ -62224,6 +62349,9 @@
/obj/machinery/light{
dir = 8
},
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "brown"
@@ -63388,32 +63516,12 @@
icon_state = "floor4"
},
/area/shuttle/administration)
-"ckh" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/administration)
"cki" = (
/obj/machinery/light/small{
dir = 8
},
/turf/simulated/shuttle/floor,
/area/shuttle/mining)
-"ckj" = (
-/obj/structure/window/plasmareinforced{
- color = "#FF0000";
- dir = 8
- },
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/administration)
"ckk" = (
/obj/machinery/door/airlock/shuttle{
id_tag = "s_docking_airlock";
@@ -64838,21 +64946,6 @@
},
/turf/simulated/floor/plating,
/area/maintenance/asmaint)
-"cmI" = (
-/obj/structure/disposalpipe/segment,
-/obj/effect/landmark/start{
- name = "Shaft Miner"
- },
-/obj/structure/cable{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2";
- tag = ""
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/plasteel,
-/area/quartermaster/miningdock)
"cmJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -65480,6 +65573,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
/turf/simulated/floor/plasteel,
/area/quartermaster/miningdock)
"cnT" = (
@@ -65520,6 +65616,9 @@
dir = 5;
level = 1
},
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
/turf/simulated/floor/plasteel,
/area/quartermaster/miningdock)
"cnV" = (
@@ -66610,8 +66709,8 @@
icon_state = "2-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cpA" = (
/obj/effect/decal/warning_stripes/southwestcorner,
@@ -72259,8 +72358,8 @@
/turf/simulated/floor/plating,
/area/maintenance/asmaint)
"cyO" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cyP" = (
/obj/effect/spawner/random_barrier/obstruction,
@@ -79926,8 +80025,8 @@
icon_state = "1-2";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cMC" = (
/obj/effect/landmark{
@@ -80473,8 +80572,8 @@
dir = 10;
level = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cNF" = (
/obj/structure/cable{
@@ -81479,13 +81578,13 @@
/area/assembly/assembly_line)
"cPw" = (
/obj/machinery/atmospherics/pipe/simple/visible/yellow,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cPx" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cPy" = (
/obj/structure/table/reinforced,
@@ -81532,8 +81631,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cPD" = (
/obj/machinery/atmospherics/pipe/manifold/visible/yellow{
@@ -81578,24 +81677,24 @@
icon_state = "4-8";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cPH" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cPI" = (
/obj/structure/cable{
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cPJ" = (
/obj/structure/table,
@@ -81778,8 +81877,8 @@
icon_state = "4-8";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cQb" = (
/obj/machinery/particle_accelerator/control_box,
@@ -81913,8 +82012,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cQr" = (
/obj/structure/disposalpipe/segment{
@@ -82427,8 +82526,8 @@
icon_state = "1-2";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cRf" = (
/obj/machinery/door/poddoor{
@@ -83122,8 +83221,8 @@
icon_state = "1-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/port)
"cSl" = (
/obj/machinery/atmospherics/unary/vent_pump/on,
@@ -84097,8 +84196,8 @@
pixel_y = 8;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cTS" = (
/obj/effect/landmark/burnturf,
@@ -84143,8 +84242,8 @@
/turf/simulated/floor/plasteel,
/area/maintenance/turbine)
"cTW" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"cTX" = (
/obj/structure/cable{
@@ -86754,8 +86853,8 @@
pixel_x = -25;
pixel_y = -8
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"cYA" = (
/obj/structure/cable{
@@ -89325,8 +89424,8 @@
pixel_y = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddB" = (
/obj/structure/disposalpipe/segment{
@@ -89339,13 +89438,13 @@
/obj/structure/transit_tube{
icon_state = "E-W-Pass"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space)
"ddD" = (
/obj/item/wrench,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ddE" = (
/obj/structure/cable{
@@ -89355,8 +89454,8 @@
pixel_y = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddF" = (
/obj/structure/sign/biohazard{
@@ -89418,21 +89517,21 @@
pixel_y = 25;
req_access_txt = "75;13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ddN" = (
/obj/structure/cable,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddO" = (
/obj/machinery/atmospherics/pipe/simple/visible/yellow{
dir = 6;
level = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ddP" = (
/obj/structure/cable{
@@ -89447,8 +89546,8 @@
icon_state = "1-4";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddQ" = (
/obj/structure/cable{
@@ -89470,16 +89569,16 @@
pixel_x = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddR" = (
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddS" = (
/obj/structure/particle_accelerator/fuel_chamber,
@@ -89490,8 +89589,8 @@
icon_state = "0-4";
d2 = 4
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddU" = (
/obj/structure/cable{
@@ -89513,8 +89612,8 @@
pixel_x = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"ddV" = (
/obj/structure/cable{
@@ -89529,20 +89628,9 @@
icon_state = "2-8";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
-"ddW" = (
-/obj/structure/shuttle/engine/propulsion/burst{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/turf/simulated/shuttle/wall{
- tag = "icon-swall_f6";
- icon_state = "swall_f6";
- dir = 2
- },
-/area/shuttle/pod_4)
"ddX" = (
/obj/machinery/access_button{
command = "cycle_exterior";
@@ -89553,20 +89641,9 @@
pixel_y = 25;
req_access_txt = "13"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
-"ddY" = (
-/obj/structure/shuttle/engine/propulsion/burst{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/turf/simulated/shuttle/wall{
- tag = "icon-swall_f5";
- icon_state = "swall_f5";
- dir = 2
- },
-/area/shuttle/pod_4)
"ddZ" = (
/obj/structure/reagent_dispensers/watertank,
/obj/structure/cable{
@@ -89599,8 +89676,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"dec" = (
/obj/machinery/atmospherics/pipe/manifold/visible,
@@ -89611,8 +89688,8 @@
icon_state = "0-2";
d2 = 2
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"dee" = (
/obj/structure/cable{
@@ -89622,8 +89699,8 @@
pixel_x = 0;
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"def" = (
/obj/structure/cable{
@@ -89644,14 +89721,14 @@
icon_state = "1-2";
tag = ""
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"deg" = (
/obj/structure/cable,
/obj/machinery/power/tracker,
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/solar/starboard)
"deh" = (
/obj/machinery/space_heater,
@@ -90751,14 +90828,6 @@
icon_state = "floor2"
},
/area/shuttle/constructionsite)
-"dgw" = (
-/obj/structure/chair{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/constructionsite)
"dgx" = (
/obj/machinery/computer/station_alert,
/turf/simulated/shuttle/floor{
@@ -90974,16 +91043,6 @@
/obj/item/caution,
/turf/simulated/floor/plating,
/area/maintenance/asmaint)
-"dhb" = (
-/obj/machinery/flasher{
- id = "soltraderflash";
- pixel_y = -28
- },
-/obj/structure/chair{
- dir = 8
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/trade/sol)
"dhc" = (
/obj/structure/lattice,
/obj/structure/lattice,
@@ -91439,15 +91498,6 @@
icon_state = "showroomfloor"
},
/area/crew_quarters/kitchen)
-"dhW" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/machinery/light,
-/turf/simulated/shuttle/floor{
- icon_state = "floor2"
- },
-/area/shuttle/constructionsite)
"dhX" = (
/obj/machinery/computer/atmos_alert,
/turf/simulated/shuttle/floor{
@@ -91705,12 +91755,6 @@
icon_state = "blue"
},
/area/hallway/primary/central/north)
-"diy" = (
-/obj/structure/chair,
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/syndicate_sit)
"diz" = (
/obj/machinery/light/small,
/obj/machinery/camera/motion{
@@ -93814,10 +93858,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/simulated/floor/plating,
/area/maintenance/asmaint2)
-"dmo" = (
-/turf/space,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"dmp" = (
/obj/structure/table,
/obj/item/weldingtool,
@@ -95141,8 +95181,8 @@
/turf/simulated/floor/wood,
/area/crew_quarters/captain)
"doE" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"doF" = (
/turf/simulated/floor/plating,
@@ -95163,18 +95203,6 @@
/obj/machinery/teleport/hub,
/turf/simulated/floor/plating,
/area/turret_protected/aisat_interior)
-"doI" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/item/radio/intercom{
- broadcasting = 0;
- listening = 1;
- name = "station intercom (General)";
- pixel_y = 25
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/pod_4)
"doK" = (
/obj/machinery/light,
/turf/simulated/floor/plating,
@@ -95193,19 +95221,6 @@
},
/turf/simulated/shuttle/floor,
/area/shuttle/pod_4)
-"doM" = (
-/obj/structure/chair{
- dir = 4
- },
-/obj/machinery/status_display{
- density = 0;
- layer = 4;
- pixel_x = 0;
- pixel_y = 32
- },
-/obj/machinery/light,
-/turf/simulated/shuttle/floor,
-/area/shuttle/pod_4)
"doN" = (
/obj/machinery/computer/station_alert,
/obj/machinery/alarm{
@@ -96514,35 +96529,6 @@
/area/toxins/launch{
name = "Toxins Launch Room"
})
-"jnJ" = (
-/obj/machinery/light/spot{
- tag = "icon-tube1 (NORTH)";
- icon_state = "tube1";
- dir = 1
- },
-/obj/machinery/door_control{
- id = "adminshuttleblast";
- name = "Blast door control";
- pixel_x = -5;
- pixel_y = 35;
- req_access = list(101);
- req_access_txt = "0"
- },
-/obj/machinery/door_control{
- id = "adminshuttleshutters";
- name = "Shutter control";
- pixel_x = 5;
- pixel_y = 35;
- req_access = list(101);
- req_access_txt = "0"
- },
-/obj/structure/chair/comfy/black{
- dir = 4
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/administration)
"kOE" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{
dir = 4
@@ -96556,6 +96542,15 @@
},
/turf/space,
/area/space/nearstation)
+"opK" = (
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "brown"
+ },
+/area/quartermaster/miningdock)
"oZV" = (
/obj/machinery/door/airlock/centcom{
id_tag = "adminshuttle";
@@ -103741,7 +103736,7 @@ arh
arh
arh
arh
-arW
+aPV
arh
apr
aaa
@@ -103995,9 +103990,9 @@ aaa
apr
arh
aqk
-arW
-arW
-arW
+aPV
+aPV
+aPV
dhe
arh
apr
@@ -104509,9 +104504,9 @@ aaa
apr
arh
aql
-arZ
-aPV
-dhb
+bcK
+beB
+bgo
aql
arh
apr
@@ -105300,9 +105295,9 @@ aaa
aaa
aaa
aaa
-bwX
+btu
bvi
-bys
+bwI
aaa
aaa
aaa
@@ -105556,11 +105551,11 @@ aab
aaa
aaa
aaa
-bwX
+btu
btv
bvj
bwE
-bys
+bwI
aaa
bAQ
bCa
@@ -106078,7 +106073,7 @@ brO
aaa
bAR
bCc
-bDG
+bEL
bEK
bAR
aLd
@@ -106328,9 +106323,9 @@ aSf
boP
aSd
brQ
-btD
+btz
bvj
-bwI
+bwJ
brQ
bjQ
bAR
@@ -106585,15 +106580,15 @@ blE
boL
aSd
brO
-btD
+btz
bvj
-bwI
+bwJ
brO
aLd
bAR
-bCe
+bBZ
bCb
-bEL
+bGJ
bAR
aSd
aaa
@@ -106842,15 +106837,15 @@ bmS
boL
aSd
brO
-btz
+btD
bvj
-bwJ
+bAS
brO
aSd
ahb
bCb
bCb
-bEL
+bGJ
bAR
aSd
aSd
@@ -107099,15 +107094,15 @@ aSf
bsd
aSd
brO
-btD
+btz
bvj
-bwI
+bwJ
brO
aSd
ahb
bCb
bCb
-bEL
+bGJ
bAR
aSd
bGm
@@ -107356,15 +107351,15 @@ aSf
bsh
aSd
brR
-btD
+btz
bvj
-bwI
+bwJ
brR
aSd
bAR
-bBZ
+bCe
bCb
-bEL
+bGJ
bAR
aSd
bGl
@@ -107613,15 +107608,15 @@ brc
bsh
aSd
brO
-btD
+btz
bvj
-bwI
+bwJ
brO
aMs
bAR
-bAS
+bDG
bCb
-bEL
+bGJ
bAR
aSd
bKp
@@ -107834,11 +107829,11 @@ aaa
awq
axj
awM
-aze
-aAh
-aAh
+axo
+azf
+azf
aCT
-aCX
+aCY
afy
aFf
aFe
@@ -107870,9 +107865,9 @@ blE
bsh
aSd
brO
-btz
+btD
bvj
-bwJ
+bAS
brO
aMs
bAT
@@ -108147,7 +108142,7 @@ bRA
bRA
bWJ
bPI
-jnJ
+bWO
cbx
cbx
bPI
@@ -108348,16 +108343,16 @@ aaa
aws
axj
awN
-azh
-azh
-azh
+axN
+axN
+axN
aBD
-aCX
+aCY
aEe
aFf
aFg
aaa
-dmo
+doE
aII
aII
aII
@@ -108667,7 +108662,7 @@ cds
bPI
cgz
cio
-ckj
+ceT
bPI
bYv
aaa
@@ -108871,7 +108866,7 @@ aaa
aaa
aaa
aaa
-dmo
+doE
aII
aII
aLw
@@ -108924,7 +108919,7 @@ aaa
bPI
bRA
bRA
-ckh
+cgA
bPI
aaa
aaa
@@ -109179,8 +109174,8 @@ aaa
aaa
aaa
bPI
-cgA
-cil
+cby
+cbz
bPI
bYv
aaa
@@ -113484,12 +113479,12 @@ aaa
awv
axl
ayk
-azf
+avu
aEf
-aBk
-aBk
-aCY
-diy
+axm
+axm
+aze
+azh
aFk
aFi
aGn
@@ -113999,11 +113994,11 @@ awx
axl
ayk
azi
+awP
+awP
+awP
ayk
-aBl
-aBl
-ayk
-diy
+azh
aex
aFi
aGn
@@ -114520,9 +114515,9 @@ aaa
aaa
aaa
aaa
-dmo
-dmo
-dmo
+doE
+doE
+doE
aFY
aEb
aIf
@@ -116121,7 +116116,7 @@ ceZ
cgB
cim
cki
-cin
+cdq
cnh
ceZ
aab
@@ -116376,9 +116371,9 @@ aaa
aaa
ceY
cgC
-cin
+cdq
cim
-cin
+cdq
cni
coN
aab
@@ -116635,7 +116630,7 @@ ceZ
cgD
cim
cim
-cin
+cdq
cnj
ceZ
aab
@@ -118177,7 +118172,7 @@ cam
cgH
cit
ckn
-ckn
+opK
cnm
cam
cgQ
@@ -118356,7 +118351,7 @@ atK
auw
avv
awz
-axo
+atL
aym
azk
aAk
@@ -118609,7 +118604,7 @@ aaa
aaa
aaa
asT
-atL
+arW
aux
avy
awz
@@ -118688,9 +118683,9 @@ cam
cbI
cdy
cff
-cfb
cir
cfb
+cfb
cnS
cno
cam
@@ -118870,7 +118865,7 @@ atJ
auu
avx
awy
-axm
+avp
awz
azk
aAk
@@ -119204,7 +119199,7 @@ cdA
cis
ckq
cls
-cmI
+cls
cnU
cno
cam
@@ -120016,9 +120011,9 @@ cZu
cZu
dcM
dfY
-dgv
-dgv
-dgv
+bVk
+bVk
+bVk
dfY
aaa
aaa
@@ -120273,9 +120268,9 @@ cZu
cZu
dcU
dfZ
-dgw
-dgw
-dhW
+dgv
+dgv
+bVl
dfY
aaa
aaa
@@ -120531,7 +120526,7 @@ dcM
dfd
dfY
dgv
-dgw
+bVk
dgv
dfY
aaa
@@ -129028,9 +129023,9 @@ dfR
dcq
dcq
dcq
-ddW
+cil
doL
-ddY
+cin
dcq
aaa
aaa
@@ -129286,7 +129281,7 @@ dcq
aaa
dcq
dou
-doI
+bYu
dou
dcq
aaa
@@ -129543,7 +129538,7 @@ dcq
aaa
dcq
dou
-doM
+can
dou
dcq
aaa
@@ -130049,7 +130044,7 @@ dkO
dkO
cQZ
cYz
-dmo
+doE
dcq
dfE
dgd
@@ -130305,7 +130300,7 @@ cQZ
cQZ
cQZ
cQZ
-dmo
+doE
aab
dcq
dfD
@@ -130562,7 +130557,7 @@ dkq
dkT
dkT
cQZ
-dmo
+doE
aab
aaa
dmW
@@ -130819,7 +130814,7 @@ dkp
bbO
dlw
cQZ
-dmo
+doE
aab
aaa
dmW
@@ -131076,7 +131071,7 @@ dks
dkT
dkT
cQZ
-dmo
+doE
aab
aab
dmX
@@ -131333,7 +131328,7 @@ cQZ
cQZ
cQZ
cQZ
-dmo
+doE
aab
aaa
dmW
@@ -131590,7 +131585,7 @@ dkw
dkV
dkV
cQZ
-dmo
+doE
aab
aaa
dmW
@@ -131847,7 +131842,7 @@ dku
bdG
dlx
cQZ
-dmo
+doE
aab
aaa
dmW
@@ -132104,11 +132099,11 @@ dkx
dkV
dkV
cQZ
-dmo
-dmo
-dmo
+doE
+doE
+doE
ddC
-dmo
+doE
ddM
ddO
cPw
@@ -132361,7 +132356,7 @@ cQZ
cQZ
cQZ
cQZ
-dmo
+doE
aab
aaa
dmW
@@ -132618,7 +132613,7 @@ aab
aab
aab
aab
-dmo
+doE
aab
aaa
dmW
@@ -132866,16 +132861,16 @@ cSn
cTo
cSn
cQZ
-dmo
-dmo
-dmo
-dmo
-dmo
-dmo
-dmo
-dmo
-dmo
-dmo
+doE
+doE
+doE
+doE
+doE
+doE
+doE
+doE
+doE
+doE
aab
dmB
dmZ
@@ -133123,7 +133118,7 @@ den
deX
dfO
cQZ
-dmo
+doE
aaa
aaa
aaa
@@ -133380,7 +133375,7 @@ dem
cRi
dem
cQZ
-dmo
+doE
aab
alw
alw
@@ -133637,7 +133632,7 @@ dem
deY
dem
cQZ
-dmo
+doE
aab
alw
aab
@@ -133894,7 +133889,7 @@ cQZ
cQZ
cQZ
cQZ
-dmo
+doE
aaa
diu
djd
@@ -135104,7 +135099,7 @@ bbC
aGY
beb
djw
-bje
+bgp
boX
bpH
bqH
@@ -135191,10 +135186,10 @@ dlm
dlm
dlm
dmD
-dmo
-dmo
-dmo
-dmo
+doE
+doE
+doE
+doE
aab
aab
aab
@@ -135361,7 +135356,7 @@ bbh
aGY
beb
dju
-bjg
+bil
bjv
dnD
bmy
@@ -135451,7 +135446,7 @@ dlm
dlm
dnx
aaa
-dmo
+doE
aaa
aaa
aaa
@@ -135618,7 +135613,7 @@ bbh
aGY
beb
djx
-bjh
+bin
bjv
dnE
bmy
@@ -135708,7 +135703,7 @@ dmO
dne
dnI
aaa
-dmo
+doE
aaa
aaa
aaa
@@ -135848,9 +135843,9 @@ atG
auA
axg
axh
-awP
+aAh
avt
-axN
+aCX
atG
aaa
aFK
@@ -135875,7 +135870,7 @@ bbI
aGY
beb
bfH
-bjh
+bin
bjx
bfH
bmy
@@ -135965,7 +135960,7 @@ dlm
dlm
dnx
aaa
-dmo
+doE
aaa
aaa
aaa
@@ -136106,7 +136101,7 @@ axf
dgk
axh
auq
-avp
+aBk
auq
atG
aab
@@ -136132,7 +136127,7 @@ bbV
aGY
beb
bfJ
-bjh
+bin
bjy
bkY
bmy
@@ -136220,9 +136215,9 @@ dlm
dmE
dlm
ddD
-dmo
-dmo
-dmo
+doE
+doE
+doE
aaa
aaa
aaa
@@ -136363,7 +136358,7 @@ azT
azT
axh
auq
-avu
+aBl
auq
aaa
aaa
@@ -136616,9 +136611,9 @@ aaa
aaa
aaa
awl
-dmo
+doE
avM
-dmo
+doE
aus
avw
awm
@@ -139705,7 +139700,7 @@ aab
aqZ
aaa
aab
-dmo
+doE
aHN
aHN
aHN
@@ -139810,8 +139805,8 @@ dia
dcW
bZZ
aaa
-dmo
-dmo
+doE
+doE
cTR
aaa
aaa
@@ -140219,7 +140214,7 @@ aab
aqZ
aaa
aaa
-dmo
+doE
aHN
dof
dog
@@ -150273,15 +150268,15 @@ aaa
aaa
aaa
bjC
-bmX
-bBT
+blC
+bwX
bDz
bjC
beC
+bPM
+btt
+btt
btt
-blA
-blA
-blA
bzq
beC
bjC
@@ -150530,7 +150525,7 @@ aaa
aYD
bic
bjG
-blu
+bmX
bDz
bDz
bjC
@@ -150789,13 +150784,13 @@ bik
bjC
bmY
bDz
-bGJ
+bBT
bjC
beC
-blC
-blC
-blC
-blC
+bnc
+bnc
+bnc
+bnc
beC
beC
bBV
@@ -151041,12 +151036,12 @@ aaa
aYD
baW
beA
-bgo
-bil
+bjg
+blu
bjC
bmY
bDz
-bGJ
+bBT
bjC
beC
blD
@@ -151297,7 +151292,7 @@ aaa
aYD
baW
bcJ
-beB
+bje
beC
beC
bjC
@@ -151306,10 +151301,10 @@ bmQ
bnb
bqo
beC
-blA
-blA
-blA
-blA
+btt
+btt
+btt
+btt
beC
bAP
bBX
@@ -151553,7 +151548,7 @@ aaa
aaa
aYU
baX
-bcK
+bje
beC
beC
beC
@@ -151811,19 +151806,19 @@ aaa
aYH
baY
bcL
-beB
+bje
beC
bim
bjC
-blC
-blC
-blC
-blC
+bnc
+bnc
+bnc
+bnc
beC
-blC
-blC
-blC
-blC
+bnc
+bnc
+bnc
+bnc
beC
bAP
bBX
@@ -152069,8 +152064,8 @@ aaa
aYH
baY
beD
-bgp
-bin
+bjh
+blA
bjJ
blD
bnb
@@ -152329,15 +152324,15 @@ aYU
baY
beC
bjC
-blA
-blA
-blA
-blA
+btt
+btt
+btt
+btt
beC
-blA
-blA
-blA
-blA
+btt
+btt
+btt
+btt
beC
beC
bBY
@@ -152843,15 +152838,15 @@ aaa
aaa
aaa
bjC
-blC
bnc
-blC
-blC
-blC
-btu
-blC
-blC
-blC
+bys
+bnc
+bnc
+bnc
+bRH
+bnc
+bnc
+bnc
beC
beC
bBS
@@ -153050,7 +153045,7 @@ aha
ahZ
aha
aha
-amZ
+arZ
agZ
aaa
aaa
@@ -153808,8 +153803,8 @@ aaa
aaa
agc
agZ
-ahp
-ahp
+amZ
+amZ
agZ
ail
agw
diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm
index 7a43bfc098b..d04bf394f26 100644
--- a/_maps/map_files/cyberiad/z2.dmm
+++ b/_maps/map_files/cyberiad/z2.dmm
@@ -3643,14 +3643,14 @@
},
/area/syndicate_mothership)
"jt" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light/small{
tag = "icon-bulb1 (EAST)";
icon_state = "bulb1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -3664,14 +3664,14 @@
/turf/simulated/floor/plating/airless,
/area/syndicate_mothership)
"jw" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/small{
tag = "icon-bulb1 (WEST)";
icon_state = "bulb1";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -7380,9 +7380,8 @@
},
/area/centcom/evac)
"sn" = (
-/obj/structure/chair{
- dir = 4;
- name = "Defense"
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
},
/turf/simulated/shuttle/floor,
/area/centcom/evac)
@@ -12454,26 +12453,32 @@
},
/turf/unsimulated/floor/vox,
/area/vox_station)
+"KA" = (
+/obj/structure/chair/sofa/left,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/shuttle/escape)
"KR" = (
-/obj/structure/chair{
+/obj/machinery/light/small,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/small,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/assault_pod)
"KW" = (
-/obj/structure/chair,
/obj/machinery/light/small{
dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/assault_pod)
"KX" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -12481,7 +12486,7 @@
},
/area/shuttle/assault_pod)
"KY" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -12582,12 +12587,6 @@
icon_state = "floor4"
},
/area/shuttle/escape)
-"QJ" = (
-/obj/structure/chair/sofa/corner,
-/turf/simulated/shuttle/floor{
- icon_state = "floor4"
- },
-/area/shuttle/escape)
"Rf" = (
/obj/structure/chair{
dir = 1
@@ -12740,7 +12739,7 @@
/turf/simulated/shuttle/floor,
/area/centcom/evac)
"Wk" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -12748,7 +12747,7 @@
},
/area/centcom/evac)
"Wl" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -12756,13 +12755,13 @@
},
/area/centcom/evac)
"WI" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
/area/centcom/evac)
"WU" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/centcom/evac)
"Xj" = (
@@ -41460,7 +41459,7 @@ sq
aN
aN
nV
-QI
+KA
og
og
og
@@ -41717,7 +41716,7 @@ sq
aN
aN
nV
-QJ
+og
og
og
og
diff --git a/_maps/map_files/cyberiad/z3.dmm b/_maps/map_files/cyberiad/z3.dmm
index be3d4769341..26d46280ae3 100644
--- a/_maps/map_files/cyberiad/z3.dmm
+++ b/_maps/map_files/cyberiad/z3.dmm
@@ -353,104 +353,10 @@
},
/turf/simulated/floor/plating,
/area/tcommsat/powercontrol)
-"aI" = (
-/turf/simulated/mineral/random,
-/area/mine/dangerous/explored/golem)
-"aJ" = (
-/turf/simulated/floor/plating/asteroid/airless,
-/area/mine/dangerous/explored/golem)
-"aK" = (
-/turf/simulated/mineral/random/high_chance,
-/area/mine/dangerous/explored/golem)
-"aL" = (
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f6";
- dir = 2
- },
-/area/shuttle/freegolem)
-"aM" = (
-/turf/simulated/shuttle/wall{
- tag = "icon-swall12";
- icon_state = "swall12";
- dir = 2
- },
-/area/shuttle/freegolem)
-"aN" = (
-/obj/structure/fans/tiny,
-/obj/machinery/door/airlock/shuttle{
- id_tag = "s_docking_airlock";
- locked = 1
- },
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
-"aO" = (
-/turf/simulated/shuttle/wall{
- dir = 2;
- icon_state = "swall8";
- tag = "icon-swall12"
- },
-/area/shuttle/freegolem)
-"aP" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swall3";
- dir = 2
- },
-/area/shuttle/freegolem)
-"aQ" = (
-/obj/structure/closet/crate/golemgear,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
-"aR" = (
-/obj/item/storage/toolbox/mechanical,
-/obj/item/reagent_containers/spray/cleaner,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
-"aS" = (
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
"aT" = (
/obj/structure/lattice,
/turf/space,
/area/space/nearstation)
-"aU" = (
-/obj/structure/reagent_dispensers/watertank/high,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
-"aV" = (
-/obj/structure/shuttle/engine/heater{
- icon_state = "heater";
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/freegolem)
-"aW" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 4;
- icon_state = "burst_l"
- },
-/turf/simulated/shuttle/plating,
-/area/shuttle/freegolem)
-"aX" = (
-/obj/machinery/light/small,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
-"aY" = (
-/turf/simulated/shuttle/wall{
- tag = "icon-swall13";
- icon_state = "swall13";
- dir = 2
- },
-/area/shuttle/freegolem)
-"aZ" = (
-/obj/machinery/door/airlock/shuttle,
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/freegolem)
"ba" = (
/turf/simulated/shuttle/wall{
tag = "icon-swall_s6";
@@ -479,24 +385,6 @@
dir = 2
},
/area/space/nearstation)
-"be" = (
-/turf/simulated/shuttle/wall{
- tag = "icon-swall14";
- icon_state = "swall14";
- dir = 2
- },
-/area/shuttle/freegolem)
-"bf" = (
-/obj/structure/reagent_dispensers/watertank,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
-"bg" = (
-/obj/machinery/door/airlock/shuttle,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bh" = (
-/turf/simulated/wall/mineral/titanium/interior,
-/area/shuttle/freegolem)
"bi" = (
/turf/simulated/shuttle/wall{
tag = "icon-swall7";
@@ -536,33 +424,12 @@
dir = 2
},
/area/space/nearstation)
-"bn" = (
-/obj/machinery/vending/hydroseeds,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bo" = (
-/obj/machinery/vending/hydronutrients,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"bp" = (
/obj/machinery/door/unpowered/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/space/nearstation)
-"bq" = (
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"br" = (
-/obj/structure/fans/tiny,
-/obj/machinery/door/airlock/shuttle{
- id_tag = "s_docking_airlock";
- locked = 1
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/freegolem)
"bs" = (
/turf/simulated/shuttle/floor{
icon_state = "floor3"
@@ -573,13 +440,6 @@
dir = 2
},
/area/space/nearstation)
-"bt" = (
-/obj/machinery/light{
- dir = 1;
- on = 1
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"bu" = (
/turf/simulated/shuttle/floor{
icon_state = "floor3"
@@ -590,18 +450,6 @@
dir = 2
},
/area/space/nearstation)
-"bv" = (
-/obj/machinery/light{
- dir = 1;
- on = 1
- },
-/obj/effect/landmark/free_golem_spawn,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bw" = (
-/obj/effect/landmark/free_golem_spawn,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"bx" = (
/turf/simulated/shuttle/wall{
tag = "icon-swall_s5";
@@ -623,172 +471,6 @@
dir = 2
},
/area/space/nearstation)
-"bA" = (
-/obj/machinery/vending/coffee/free,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bB" = (
-/turf/simulated/shuttle/wall{
- tag = "icon-swall14";
- icon_state = "swall4";
- dir = 2
- },
-/area/shuttle/freegolem)
-"bC" = (
-/turf/simulated/shuttle/wall{
- dir = 2;
- icon_state = "swallc1";
- tag = "icon-swall12"
- },
-/area/shuttle/freegolem)
-"bD" = (
-/obj/structure/window/full/shuttle{
- icon_state = "16"
- },
-/obj/structure/grille,
-/turf/simulated/shuttle/plating,
-/area/shuttle/freegolem)
-"bE" = (
-/obj/structure/statue/gold/rd{
- name = "statue of the Liberator"
- },
-/obj/structure/window/reinforced{
- dir = 4;
- pixel_x = 0
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/freegolem)
-"bF" = (
-/obj/machinery/mineral/equipment_vendor/golem,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bG" = (
-/obj/item/resonator,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bH" = (
-/obj/machinery/light{
- dir = 8
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bI" = (
-/obj/item/gun/energy/kinetic_accelerator,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bJ" = (
-/obj/structure/window/full/shuttle{
- icon_state = "15"
- },
-/obj/structure/grille,
-/turf/simulated/shuttle/plating,
-/area/shuttle/freegolem)
-"bK" = (
-/obj/structure/window/reinforced{
- dir = 4;
- pixel_x = 0
- },
-/obj/structure/table/wood,
-/obj/item/bedsheet/rd/royal_cape{
- layer = 3;
- pixel_x = 5;
- pixel_y = 9
- },
-/obj/item/book/manual/research_and_development{
- name = "Sacred Text of the Liberator";
- pixel_x = -4;
- pixel_y = 3
- },
-/turf/simulated/shuttle/floor{
- icon_state = "floor5"
- },
-/area/shuttle/freegolem)
-"bL" = (
-/obj/machinery/mineral/ore_redemption/golem,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bM" = (
-/obj/machinery/computer/shuttle/golem_ship,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bN" = (
-/turf/space,
-/turf/simulated/shuttle/wall{
- icon_state = "swall_f5";
- dir = 2
- },
-/area/shuttle/freegolem)
-"bO" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bP" = (
-/obj/structure/extinguisher_cabinet{
- pixel_y = 30
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bQ" = (
-/turf/simulated/shuttle/wall{
- icon_state = "swallc4"
- },
-/area/shuttle/freegolem)
-"bR" = (
-/obj/machinery/door/airlock/shuttle{
- id_tag = "s_docking_airlock";
- locked = 1
- },
-/obj/structure/fans/tiny,
-/obj/docking_port/mobile{
- dir = 8;
- dwidth = 8;
- height = 20;
- id = "freegolem";
- name = "Free Golem Ship";
- roundstart_move = "freegolem_transit";
- width = 16
- },
-/obj/docking_port/stationary{
- dir = 8;
- dwidth = 8;
- height = 20;
- id = "freegolem_z3";
- name = "Small Asteroid";
- width = 16
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bS" = (
-/obj/machinery/light,
-/obj/structure/chair/comfy/purp{
- icon_state = "comfychair";
- dir = 1
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bT" = (
-/obj/machinery/light/small,
-/obj/structure/extinguisher_cabinet{
- pixel_y = -30
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bU" = (
-/obj/structure/fans/tiny,
-/obj/machinery/door/airlock/shuttle{
- id_tag = "s_docking_airlock";
- locked = 1
- },
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"bV" = (
-/obj/item/resonator/upgraded,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"bW" = (
/obj/structure/lattice,
/obj/structure/grille,
@@ -1398,10 +1080,6 @@
},
/turf/simulated/floor/plasteel,
/area/tcommsat/computer)
-"dr" = (
-/obj/machinery/autolathe,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"ds" = (
/obj/machinery/atmospherics/unary/vent_pump{
dir = 4;
@@ -1815,15 +1493,6 @@
},
/turf/simulated/floor/plating,
/area/tcommsat/chamber)
-"ej" = (
-/obj/structure/table/wood,
-/obj/machinery/reagentgrinder,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"ek" = (
-/obj/machinery/computer/arcade/battle,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"el" = (
/obj/machinery/door/window/brigdoor{
dir = 1;
@@ -1877,10 +1546,6 @@
/obj/structure/lattice,
/turf/space,
/area/turret_protected/tcomsat)
-"eq" = (
-/obj/machinery/computer/arcade/orion_trail,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"er" = (
/obj/structure/window/reinforced{
dir = 4
@@ -1958,10 +1623,6 @@
temperature = 80
},
/area/tcommsat/chamber)
-"ex" = (
-/obj/machinery/light,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"ey" = (
/obj/structure/cable{
d1 = 4;
@@ -2005,11 +1666,6 @@
temperature = 80
},
/area/tcommsat/chamber)
-"eA" = (
-/obj/machinery/light,
-/obj/effect/landmark/free_golem_spawn,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"eB" = (
/turf/simulated/floor/bluegrid{
icon_state = "dark";
@@ -2104,10 +1760,6 @@
/obj/structure/lattice,
/turf/space,
/area/turret_protected/tcomsat)
-"eI" = (
-/obj/machinery/vending/snack/free,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"eJ" = (
/obj/structure/cable{
d1 = 1;
@@ -2189,13 +1841,6 @@
},
/turf/simulated/floor/plating/airless,
/area/space/nearstation)
-"eQ" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/brute,
-/obj/item/storage/firstaid/brute,
-/obj/item/storage/firstaid/brute,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"eR" = (
/obj/structure/window/reinforced{
dir = 8
@@ -2465,12 +2110,6 @@
},
/turf/simulated/floor/plating/airless,
/area/space/nearstation)
-"fp" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/adv,
-/obj/item/storage/firstaid/adv,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"fq" = (
/obj/structure/grille,
/obj/structure/cable{
@@ -2579,15 +2218,6 @@
temperature = 80
},
/area/tcommsat/chamber)
-"fy" = (
-/obj/structure/table/wood,
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/fire,
-/obj/item/storage/firstaid/fire,
-/obj/item/storage/firstaid/fire,
-/obj/machinery/light,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
"fz" = (
/obj/machinery/telecomms/processor/preset_four,
/turf/simulated/floor/plasteel{
@@ -2863,18 +2493,6 @@
temperature = 80
},
/area/tcommsat/chamber)
-"fY" = (
-/obj/structure/table/wood,
-/obj/item/areaeditor/golem,
-/obj/item/disk/design_disk/golem_shell,
-/turf/simulated/floor/mineral/titanium/purple,
-/area/shuttle/freegolem)
-"fZ" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
"ga" = (
/obj/machinery/telecomms/server/presets/command,
/turf/simulated/floor/plasteel{
@@ -2899,10 +2517,6 @@
temperature = 80
},
/area/tcommsat/chamber)
-"gc" = (
-/obj/machinery/chem_master,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
"gd" = (
/obj/machinery/camera{
c_tag = "Telecomms Server Room South";
@@ -2924,10 +2538,6 @@
temperature = 80
},
/area/tcommsat/chamber)
-"ge" = (
-/obj/structure/ore_box,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
"gf" = (
/obj/structure/cable{
d1 = 1;
@@ -2971,10 +2581,6 @@
"gj" = (
/turf/simulated/wall/r_wall,
/area/turret_protected/tcomfoyer)
-"gk" = (
-/obj/structure/reagent_dispensers/fueltank,
-/turf/simulated/floor/plating,
-/area/shuttle/freegolem)
"gr" = (
/obj/structure/window/reinforced,
/obj/machinery/light{
@@ -16116,10 +15722,10 @@ aa
aa
aa
aa
-aL
-bD
-bJ
-bN
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -16373,10 +15979,10 @@ aa
aa
aa
aa
-aM
-bE
-bK
-aM
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -16627,16 +16233,16 @@ aa
aa
aa
aa
-aL
-aP
-br
-aY
-bM
-bS
-be
-br
-aP
-bN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -16884,16 +16490,16 @@ aa
aa
aa
aa
-aM
-bo
-bq
-aZ
-bq
-bq
-bg
-bq
-eq
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -17141,16 +16747,16 @@ aa
aa
aa
aa
-aM
-bn
-bq
-aZ
-bq
-bq
-bg
-bq
-ek
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -17395,22 +17001,22 @@ aa
aa
aa
aa
-aL
-aP
-aP
-aY
-bt
-bq
-bh
-bq
-bq
-bh
-bq
-ex
-be
-aP
-aP
-bN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -17652,22 +17258,22 @@ aa
aa
aa
aa
-aM
-aQ
-aS
-bg
-bq
-bq
-bh
-bq
-bq
-bh
-bq
-bq
-bg
-aS
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -17909,22 +17515,22 @@ aa
aa
aa
aa
-aM
-aQ
-aS
-bg
-bq
-bq
-bh
-bO
-bq
-bh
-bq
-bq
-bg
-aS
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -18166,22 +17772,22 @@ aa
aa
aa
aa
-aM
-aQ
-aX
-bh
-bv
-bG
-bh
-bq
-bq
-bh
-bG
-eA
-bh
-fZ
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -18423,22 +18029,22 @@ aa
aa
aa
aa
-aM
-aQ
-aS
-bh
-bw
-bG
-bh
-bq
-bq
-bh
-bG
-bw
-bh
-aS
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -18680,22 +18286,22 @@ aa
aa
aa
aa
-aM
-aQ
-aS
-bh
-bh
-bg
-bh
-bg
-bg
-bh
-bg
-bh
-bh
-aS
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -18937,22 +18543,22 @@ aa
aa
aa
aa
-aM
-aQ
-aX
-bh
-bA
-bq
-bH
-bq
-bq
-bH
-bq
-eI
-bh
-fZ
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -19194,22 +18800,22 @@ aa
aa
aa
aa
-aM
-aQ
-aS
-bg
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bg
-aS
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -19451,22 +19057,22 @@ aa
aa
aa
aa
-aM
-aQ
-aS
-bg
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-bg
-aS
-ge
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -19708,22 +19314,22 @@ aa
aa
aa
aa
-aM
-aR
-aS
-bh
-bq
-bq
-bq
-bq
-bq
-bq
-bq
-eQ
-bh
-aS
-aR
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -19965,22 +19571,22 @@ aa
aa
aa
aa
-aN
-aS
-aX
-bh
-bt
-bq
-bq
-bq
-bq
-bq
-bq
-fy
-bh
-fZ
-aS
-aN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -20222,22 +19828,22 @@ aa
aa
aa
aa
-aN
-aS
-aS
-bh
-bq
-bq
-bI
-bq
-bq
-bV
-bq
-fp
-bh
-aS
-aS
-aN
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -20479,22 +20085,22 @@ aa
aa
aa
aa
-aM
-aU
-bf
-bh
-bF
-bq
-bL
-bq
-bq
-dr
-ej
-fY
-bh
-gc
-gk
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -20734,24 +20340,24 @@ aa
aa
aa
aa
-aI
-aI
-aM
-aV
-aV
-bB
-aV
-aV
-bB
-bP
-bT
-bB
-aV
-aV
-bB
-aV
-aV
-aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -20991,25 +20597,25 @@ aa
aa
aa
aa
-aI
-aI
-aO
-aW
-aW
-aO
-aW
-aW
-bC
-bR
-bU
-bQ
-aW
-aW
-aO
-aW
-aW
-aO
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -21248,25 +20854,25 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aJ
-aJ
-aJ
-aJ
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -21505,25 +21111,25 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aJ
-aJ
-aJ
-aJ
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -21762,25 +21368,25 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -22017,27 +21623,27 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -22274,27 +21880,27 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -22531,26 +22137,26 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aK
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -22788,26 +22394,26 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aK
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -23045,28 +22651,28 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -23302,28 +22908,28 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -23559,28 +23165,28 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -23816,28 +23422,28 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aK
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -24073,26 +23679,26 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -24330,26 +23936,26 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aK
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -24589,27 +24195,27 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aJ
-aJ
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -24847,26 +24453,26 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
@@ -25104,26 +24710,26 @@ aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
-aI
aa
aa
aa
aa
-aI
-aI
-aI
-aI
-aI
-aI
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
aa
aa
aa
diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm
index 531ef1f4dfb..08d56927445 100644
--- a/_maps/map_files/cyberiad/z4.dmm
+++ b/_maps/map_files/cyberiad/z4.dmm
@@ -845,37 +845,17 @@
/turf/simulated/floor/plating/airless,
/area/constructionsite/hallway/center)
"cl" = (
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
-/area/space/nearstation)
-"cm" = (
/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
/area/space/nearstation)
"cn" = (
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
-"co" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"cp" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"cq" = (
/obj/structure/inflatable/door,
/turf/simulated/floor/plasteel/airless,
/area/constructionsite/hallway/center)
-"cr" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
-"cs" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
"ct" = (
/obj/machinery/power/solar,
/obj/structure/cable{
@@ -892,8 +872,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
"cv" = (
/obj/machinery/power/tracker,
@@ -916,8 +896,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
"cx" = (
/obj/machinery/power/solar,
@@ -955,8 +935,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
"cB" = (
/obj/structure/cable{
@@ -974,8 +954,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
"cC" = (
/turf/simulated/wall/r_wall,
@@ -1045,55 +1025,6 @@
icon_state = "bcircuit"
},
/area/constructionsite/ai)
-"cL" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"cM" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"cN" = (
-/obj/structure/cable{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/structure/cable{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"cO" = (
-/obj/structure/cable{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/structure/cable{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/obj/structure/cable{
- d1 = 2;
- d2 = 4;
- icon_state = "2-4"
- },
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"cP" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"cQ" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
"cR" = (
/obj/machinery/light_switch{
pixel_y = -28
@@ -1107,10 +1038,6 @@
icon_state = "dark"
},
/area/engiestation)
-"cT" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"cU" = (
/obj/structure/lattice,
/turf/space,
@@ -1270,10 +1197,6 @@
/obj/structure/grille,
/turf/simulated/floor/plating/airless,
/area/constructionsite/ai)
-"do" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
"dp" = (
/obj/structure/cable{
d1 = 2;
@@ -1285,8 +1208,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
"dq" = (
/obj/structure/cable{
@@ -1305,28 +1228,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"dr" = (
-/obj/structure/cable{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8";
- pixel_x = 0
- },
-/obj/structure/cable{
- d1 = 2;
- d2 = 4;
- icon_state = "2-4"
- },
-/obj/structure/cable{
- d1 = 1;
- d2 = 4;
- icon_state = "1-4"
- },
/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
/area/engiestation/solars)
"ds" = (
/obj/effect/spawner/window/reinforced,
@@ -1437,28 +1340,8 @@
icon_state = "4-8";
pixel_x = 0
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"dz" = (
-/obj/structure/cable{
- d1 = 1;
- d2 = 8;
- icon_state = "1-8"
- },
-/obj/structure/cable{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/obj/structure/cable{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8";
- pixel_x = 0
- },
/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
/area/engiestation/solars)
"dA" = (
/obj/structure/cable{
@@ -1471,12 +1354,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"dB" = (
/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
/area/engiestation/solars)
"dC" = (
/obj/machinery/recharge_station,
@@ -1629,8 +1508,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/engiestation/solars)
"dT" = (
/obj/structure/cable{
@@ -1644,23 +1523,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"dU" = (
-/obj/structure/cable{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8";
- pixel_x = 0
- },
-/obj/structure/cable{
- d1 = 2;
- d2 = 4;
- icon_state = "2-4"
- },
/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
/area/engiestation/solars)
"dV" = (
/obj/structure/cable{
@@ -1716,32 +1580,8 @@
icon_state = "4-8";
pixel_x = 0
},
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"eb" = (
-/obj/structure/cable{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/obj/structure/cable{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8";
- pixel_x = 0
- },
/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
-"ec" = (
-/obj/structure/cable{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
/area/engiestation/solars)
"ed" = (
/obj/item/stack/sheet/metal{
@@ -1880,10 +1720,6 @@
icon_state = "dark"
},
/area/engiestation)
-"em" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/engiestation/solars)
"en" = (
/obj/machinery/vending/tool,
/turf/simulated/floor/plasteel{
@@ -1919,10 +1755,6 @@
},
/turf/simulated/floor/plating/airless,
/area/constructionsite/ai)
-"es" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"et" = (
/obj/machinery/door/airlock/maintenance{
req_access_txt = "0";
@@ -2228,10 +2060,6 @@
icon_state = "carpet"
},
/area/engiestation)
-"fi" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"fj" = (
/obj/machinery/vending/cola,
/turf/simulated/floor/plasteel{
@@ -2530,13 +2358,13 @@
},
/area/engiestation)
"fQ" = (
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/space)
"fR" = (
/obj/item/lighter/zippo,
-/turf/simulated/floor/plating/airless,
/obj/structure/lattice/catwalk,
+/turf/simulated/floor/plating/airless,
/area/space/nearstation)
"fS" = (
/obj/machinery/shower{
@@ -2629,10 +2457,6 @@
icon_state = "delivery"
},
/area/engiestation)
-"gc" = (
-/turf/simulated/floor/plating/airless,
-/obj/structure/lattice/catwalk,
-/area/space/nearstation)
"gd" = (
/obj/structure/lattice,
/obj/structure/disposaloutlet{
@@ -5038,6 +4862,17 @@
},
/turf/simulated/floor/plating/airless,
/area/constructionsite/engineering)
+"zH" = (
+/obj/docking_port/stationary{
+ dir = 8;
+ dwidth = 8;
+ height = 20;
+ id = "freegolem_z4";
+ name = "Near Construction Site";
+ width = 16
+ },
+/turf/space,
+/area/space)
(1,1,1) = {"
aa
@@ -14393,14 +14228,14 @@ aa
aa
ab
cl
-cr
-cr
-cr
-cr
-cr
-cr
-cr
-cr
+cl
+cl
+cl
+cl
+cl
+cl
+cl
+cl
fQ
bC
aa
@@ -14649,7 +14484,7 @@ aa
aa
ab
cl
-es
+cl
ab
ab
ab
@@ -14658,7 +14493,7 @@ ab
ab
aa
aa
-cm
+cl
ab
aa
aa
@@ -14896,16 +14731,16 @@ aa
aa
ab
cl
-cr
-cr
-cr
-cr
-cP
-cs
-do
-cs
-do
-cM
+cl
+cl
+cl
+cl
+cn
+cn
+cn
+cn
+cn
+cn
cC
cF
cF
@@ -14915,7 +14750,7 @@ cF
cC
aa
aa
-cm
+cl
ab
aa
aa
@@ -15152,12 +14987,12 @@ aa
aa
aa
ab
-cm
+cl
ab
ab
aa
ab
-co
+cn
dd
dp
dK
@@ -15409,12 +15244,12 @@ aa
aa
aa
aa
-cm
+cl
ab
ab
ab
ab
-co
+cn
dd
dq
dK
@@ -15666,12 +15501,12 @@ aa
aa
aa
aa
-cm
+cl
aa
ab
ab
ab
-co
+cn
dd
dq
dK
@@ -15923,16 +15758,16 @@ aa
aa
aa
aa
-cm
+cl
ab
ab
ab
-cL
-cM
+cn
+cn
dd
-dr
+dq
dK
-dU
+dT
dK
da
eB
@@ -16181,10 +16016,10 @@ aa
aa
ab
cn
-cs
-cs
-cs
-cM
+cn
+cn
+cn
+cn
cW
cX
ds
@@ -16437,7 +16272,7 @@ aa
aa
aa
ab
-co
+cn
ct
ct
ct
@@ -16698,7 +16533,7 @@ cn
cu
cA
cA
-cN
+cA
cY
df
du
@@ -16951,7 +16786,7 @@ aa
aa
aa
ab
-co
+cn
cv
ct
ct
@@ -17212,7 +17047,7 @@ cn
cw
cB
cB
-cO
+cB
cY
df
dw
@@ -17465,7 +17300,7 @@ aa
aa
aa
ab
-co
+cn
cx
cx
cx
@@ -17723,10 +17558,10 @@ aa
aa
ab
cn
-cs
-cs
-cs
-cP
+cn
+cn
+cn
+cn
cW
cX
ds
@@ -17979,12 +17814,12 @@ aa
aa
aa
aa
-cm
+cl
aa
aa
ab
-cQ
-cP
+cn
+cn
dd
dy
dK
@@ -18236,16 +18071,16 @@ aa
aa
aa
aa
-cm
+cl
aa
ab
ab
ab
-co
+cn
dd
-dz
+dy
dK
-eb
+ea
dK
da
eI
@@ -18493,16 +18328,16 @@ aa
aa
aa
aa
-cm
+cl
ab
ab
ab
ab
-co
+cn
dd
-dz
+dy
dK
-eb
+ea
dK
da
dj
@@ -18750,16 +18585,16 @@ aa
aa
aa
aa
-cm
+cl
ab
ab
aa
ab
-co
+cn
dd
dA
dK
-ec
+cu
dK
da
dj
@@ -19007,17 +18842,17 @@ aa
aa
aa
aa
-cm
+cl
aa
aa
aa
aa
-cQ
-cs
-dB
-cs
-dB
-em
+cn
+cn
+cn
+cn
+cn
+cn
da
eI
da
@@ -19264,7 +19099,7 @@ aa
aa
aa
aa
-cm
+cl
aa
cC
cF
@@ -19285,7 +19120,7 @@ cF
cF
cF
cC
-gc
+cl
aa
aa
aa
@@ -19521,7 +19356,7 @@ aa
aa
aa
aa
-cm
+cl
aa
cC
cG
@@ -19542,7 +19377,7 @@ ab
ab
aa
aa
-cm
+cl
aa
aa
aa
@@ -19778,7 +19613,7 @@ aa
aa
aa
aa
-cm
+cl
aa
cC
cH
@@ -19799,7 +19634,7 @@ aa
ab
ab
aa
-cm
+cl
aa
aa
aa
@@ -20035,7 +19870,7 @@ aa
aa
aa
aa
-cm
+cl
aa
cC
cI
@@ -20056,7 +19891,7 @@ aa
aa
ab
ab
-cm
+cl
ab
aa
aa
@@ -20292,7 +20127,7 @@ aa
aa
aa
ab
-cm
+cl
aa
cC
cF
@@ -20307,13 +20142,13 @@ dE
dj
dE
cC
-fi
-cr
-cr
-cr
-cr
-cr
-es
+cl
+cl
+cl
+cl
+cl
+cl
+cl
bC
aa
aa
@@ -20549,11 +20384,11 @@ aa
aa
aa
ab
-cp
-cr
-cr
-cr
-cT
+cl
+cl
+cl
+cl
+cl
dc
cC
dD
@@ -44048,7 +43883,7 @@ aa
aa
aa
aa
-aa
+zH
aa
aa
aa
diff --git a/_maps/map_files/cyberiad/z6.dmm b/_maps/map_files/cyberiad/z6.dmm
index 86b1bb9cc7f..f47b299a8d7 100644
--- a/_maps/map_files/cyberiad/z6.dmm
+++ b/_maps/map_files/cyberiad/z6.dmm
@@ -15,8 +15,8 @@
},
/area/djstation/solars)
"ad" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/space/nearstation)
"ae" = (
/obj/structure/lattice,
@@ -76,8 +76,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation/solars)
"ao" = (
/obj/structure/grille{
@@ -93,8 +93,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation/solars)
"aq" = (
/obj/structure/cable{
@@ -125,8 +125,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation)
"at" = (
/obj/structure/lattice,
@@ -312,8 +312,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation)
"aR" = (
/obj/structure/cable{
@@ -331,8 +331,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation/solars)
"aS" = (
/obj/structure/cable{
@@ -340,8 +340,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation/solars)
"aT" = (
/obj/structure/cable{
@@ -359,8 +359,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation/solars)
"aU" = (
/obj/item/storage/toolbox/mechanical{
@@ -386,8 +386,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/djstation)
"aW" = (
/turf/simulated/floor/plasteel{
@@ -4602,8 +4602,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"jL" = (
/obj/structure/table/wood,
@@ -6021,7 +6021,7 @@
/area/space/nearstation)
"nh" = (
/obj/item/shard,
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel/airless,
@@ -6263,7 +6263,7 @@
/obj/item/shard{
icon_state = "medium"
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plating/asteroid/airless,
@@ -6693,8 +6693,8 @@
d2 = 2;
icon_state = "1-2"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"oT" = (
/obj/machinery/atmospherics/pipe/simple/hidden{
@@ -7118,14 +7118,14 @@
},
/area/derelict/arrival)
"pV" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -7569,7 +7569,7 @@
},
/area/derelict/arrival)
"qT" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -7577,7 +7577,7 @@
},
/area/derelict/arrival)
"qU" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -7751,8 +7751,8 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"rn" = (
/obj/structure/cable{
@@ -7765,8 +7765,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"ro" = (
/obj/structure/window/reinforced,
@@ -7817,9 +7817,7 @@
dir = 1
},
/obj/structure/shuttle/engine/propulsion,
-/turf/simulated/floor/plasteel/airless{
- icon_state = "floorscorched2"
- },
+/turf/simulated/shuttle/plating,
/area/derelict/arrival)
"rt" = (
/obj/structure/window/reinforced,
@@ -7993,8 +7991,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"rG" = (
/obj/structure/closet/crate/secure/loot,
@@ -8029,8 +8027,8 @@
/turf/space,
/area/derelict/crew_quarters)
"rJ" = (
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"rK" = (
/obj/machinery/power/tracker,
@@ -8272,8 +8270,8 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"si" = (
/obj/structure/cable{
@@ -8333,12 +8331,12 @@
},
/area/derelict/crew_quarters)
"sl" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/small{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -9006,8 +9004,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"tF" = (
/obj/structure/sign/greencross,
@@ -9040,8 +9038,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"tI" = (
/obj/structure/cable{
@@ -9563,8 +9561,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"uJ" = (
/turf/space,
@@ -9895,8 +9893,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"vn" = (
/obj/item/shard{
@@ -10462,8 +10460,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"wm" = (
/obj/structure/cable{
@@ -10476,8 +10474,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"wn" = (
/obj/structure/closet/jcloset,
@@ -10502,8 +10500,8 @@
d2 = 8;
icon_state = "2-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"wp" = (
/obj/structure/cable{
@@ -10521,8 +10519,8 @@
d2 = 4;
icon_state = "1-4"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"wq" = (
/obj/structure/cable{
@@ -10540,8 +10538,8 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/space,
/obj/structure/lattice/catwalk,
+/turf/space,
/area/derelict/solar_control)
"wr" = (
/obj/docking_port/stationary{
@@ -53934,7 +53932,7 @@ aa
aa
aa
aa
-wr
+aa
aa
aa
aa
@@ -54190,7 +54188,7 @@ aa
aa
aa
aa
-aa
+wr
aa
aa
aa
diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm
index 3bfdb1d12b2..142bbcff5f7 100644
--- a/_maps/map_files/generic/Lavaland.dmm
+++ b/_maps/map_files/generic/Lavaland.dmm
@@ -200,7 +200,8 @@
dir = 1;
pixel_y = -24
},
-/turf/simulated/floor/mech_bay_recharge_floor,
+/obj/machinery/suit_storage_unit/lavaland,
+/turf/simulated/floor/plasteel,
/area/mine/eva)
"aJ" = (
/obj/machinery/light/small{
@@ -436,12 +437,6 @@
/turf/simulated/floor/plasteel/freezer,
/area/mine/living_quarters)
"bp" = (
-/obj/structure/table,
-/obj/item/pickaxe,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
-/obj/item/gps/mining,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
@@ -451,6 +446,7 @@
/obj/effect/turf_decal/tile/purple{
dir = 4
},
+/obj/machinery/suit_storage_unit/lavaland,
/turf/simulated/floor/plasteel,
/area/mine/eva)
"bq" = (
@@ -594,11 +590,6 @@
/obj/machinery/light{
dir = 8
},
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_x = -2;
- pixel_y = -1
- },
/obj/effect/turf_decal/tile/brown{
dir = 8
},
@@ -611,7 +602,19 @@
/obj/effect/turf_decal/tile/purple{
dir = 8
},
-/obj/machinery/suit_storage_unit/lavaland,
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
+/obj/item/gps/mining,
/turf/simulated/floor/plasteel,
/area/mine/eva)
"bF" = (
@@ -758,9 +761,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/cable{
- icon_state = "2-8"
- },
/turf/simulated/floor/plasteel,
/area/mine/eva)
"bV" = (
@@ -943,16 +943,15 @@
pixel_y = -23
},
/obj/structure/cable,
-/obj/machinery/recharge_station,
/obj/effect/turf_decal/tile/purple{
dir = 1
},
+/obj/machinery/suit_storage_unit/lavaland,
/turf/simulated/floor/plasteel,
/area/mine/eva)
"cp" = (
-/obj/machinery/mech_bay_recharge_port,
-/obj/structure/cable,
-/turf/simulated/floor/plating,
+/obj/machinery/suit_storage_unit/lavaland,
+/turf/simulated/floor/plasteel,
/area/mine/eva)
"cq" = (
/obj/effect/turf_decal/tile/brown{
@@ -977,9 +976,6 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/tile/brown{
dir = 1
},
@@ -1854,13 +1850,10 @@
/turf/simulated/wall,
/area/mine/production)
"eo" = (
-/obj/machinery/computer/mech_bay_power_console{
- icon_state = "computer";
- dir = 1
- },
/obj/effect/turf_decal/tile/purple{
dir = 4
},
+/obj/machinery/suit_storage_unit/lavaland,
/turf/simulated/floor/plasteel,
/area/mine/eva)
"ep" = (
@@ -2023,6 +2016,9 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/simulated/floor/plasteel,
/area/mine/production)
"eD" = (
@@ -2100,6 +2096,7 @@
/obj/effect/turf_decal/tile/brown{
dir = 8
},
+/obj/structure/ore_box,
/turf/simulated/floor/plasteel,
/area/mine/production)
"eK" = (
@@ -2148,6 +2145,9 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/simulated/floor/plasteel,
/area/mine/production)
"eQ" = (
@@ -2237,13 +2237,11 @@
dir = 1;
pixel_y = -22
},
-/obj/structure/closet/crate{
- icon_state = "crateopen"
- },
/obj/effect/turf_decal/tile/purple{
dir = 8
},
/obj/effect/turf_decal/tile/purple,
+/obj/machinery/recharge_station,
/turf/simulated/floor/plasteel,
/area/mine/production)
"fc" = (
@@ -2253,9 +2251,6 @@
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fd" = (
-/obj/structure/closet/crate{
- icon_state = "crateopen"
- },
/obj/machinery/light,
/obj/effect/turf_decal/tile/brown{
dir = 8
@@ -2263,6 +2258,8 @@
/obj/effect/turf_decal/tile/brown{
dir = 2
},
+/obj/machinery/mech_bay_recharge_port,
+/obj/structure/cable,
/turf/simulated/floor/plasteel,
/area/mine/production)
"fe" = (
@@ -2290,12 +2287,7 @@
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fh" = (
-/obj/structure/closet/crate,
-/obj/effect/turf_decal/tile/purple{
- dir = 8
- },
-/obj/effect/turf_decal/tile/purple,
-/turf/simulated/floor/plasteel,
+/turf/simulated/floor/mech_bay_recharge_floor,
/area/mine/production)
"fi" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
@@ -2304,15 +2296,16 @@
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fj" = (
-/obj/structure/closet/crate{
- icon_state = "crateopen"
- },
/obj/effect/turf_decal/tile/brown{
dir = 8
},
/obj/effect/turf_decal/tile/brown{
dir = 2
},
+/obj/machinery/computer/mech_bay_power_console{
+ icon_state = "computer";
+ dir = 1
+ },
/turf/simulated/floor/plasteel,
/area/mine/production)
"fk" = (
@@ -2500,7 +2493,6 @@
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fE" = (
-/obj/structure/ore_box,
/obj/effect/turf_decal/tile/purple{
dir = 8
},
@@ -2579,7 +2571,6 @@
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fL" = (
-/obj/structure/ore_box,
/obj/effect/turf_decal/tile/brown{
dir = 8
},
@@ -2589,14 +2580,15 @@
/obj/effect/turf_decal/tile/brown{
dir = 2
},
+/obj/structure/closet/secure_closet/miner,
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fM" = (
-/obj/machinery/recharge_station,
/obj/effect/turf_decal/tile/purple,
/obj/effect/turf_decal/tile/purple{
dir = 8
},
+/obj/structure/closet/secure_closet/miner,
/turf/simulated/floor/plasteel,
/area/mine/living_quarters)
"fN" = (
@@ -4090,6 +4082,10 @@
},
/turf/simulated/floor/plasteel/freezer,
/area/mine/living_quarters)
+"tK" = (
+/obj/structure/ore_box,
+/turf/simulated/floor/plasteel,
+/area/mine/production)
"vq" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/plasteel,
@@ -20710,7 +20706,7 @@ dL
ej
eG
ct
-eW
+tK
bN
ab
ab
diff --git a/_maps/map_files/shuttles/admin_admin.dmm b/_maps/map_files/shuttles/admin_admin.dmm
index fda5ff55056..bad43283b9b 100644
--- a/_maps/map_files/shuttles/admin_admin.dmm
+++ b/_maps/map_files/shuttles/admin_admin.dmm
@@ -408,6 +408,9 @@
/obj/structure/chair/comfy/black{
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -416,6 +419,9 @@
/obj/structure/chair/comfy/black{
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -550,14 +556,14 @@
},
/area/shuttle/administration)
"bl" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (EAST)";
icon_state = "tube1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -603,7 +609,7 @@
},
/area/shuttle/administration)
"br" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -643,7 +649,7 @@
color = "#FF0000";
dir = 8
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -651,7 +657,7 @@
},
/area/shuttle/administration)
"bw" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
diff --git a/_maps/map_files/shuttles/admin_hospital.dmm b/_maps/map_files/shuttles/admin_hospital.dmm
index de3cacaf413..c9a41d69463 100644
--- a/_maps/map_files/shuttles/admin_hospital.dmm
+++ b/_maps/map_files/shuttles/admin_hospital.dmm
@@ -237,6 +237,9 @@
icon_state = "chair";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -256,6 +259,9 @@
name = "NHV Asclepius Lobby";
network = list("NHV Asclepius")
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -319,7 +325,7 @@
},
/area/shuttle/administration)
"aG" = (
-/obj/structure/chair/office/light{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -412,6 +418,9 @@
/obj/structure/chair{
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -420,6 +429,9 @@
/obj/structure/chair{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -483,7 +495,7 @@
},
/area/shuttle/administration)
"aY" = (
-/obj/structure/chair/office/light,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -664,6 +676,9 @@
req_access = list(101);
req_access_txt = "0"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -890,6 +905,9 @@
dir = 8
},
/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
diff --git a/_maps/map_files/shuttles/emergency_bar.dmm b/_maps/map_files/shuttles/emergency_bar.dmm
index 0cfb856e28d..4dd07825738 100644
--- a/_maps/map_files/shuttles/emergency_bar.dmm
+++ b/_maps/map_files/shuttles/emergency_bar.dmm
@@ -43,7 +43,7 @@
/turf/simulated/floor/carpet,
/area/shuttle/escape)
"ai" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/carpet,
@@ -75,7 +75,7 @@
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/carpet,
@@ -91,7 +91,7 @@
/turf/simulated/floor/carpet,
/area/shuttle/escape)
"ar" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/carpet,
@@ -123,6 +123,9 @@
/obj/structure/chair{
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"ax" = (
@@ -135,6 +138,7 @@
dir = 1
},
/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"ay" = (
@@ -194,6 +198,9 @@
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aF" = (
@@ -224,10 +231,14 @@
/obj/structure/chair{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aK" = (
/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aL" = (
diff --git a/_maps/map_files/shuttles/emergency_clown.dmm b/_maps/map_files/shuttles/emergency_clown.dmm
index 1207e8a09ff..5942ed33b76 100644
--- a/_maps/map_files/shuttles/emergency_clown.dmm
+++ b/_maps/map_files/shuttles/emergency_clown.dmm
@@ -43,7 +43,7 @@
/turf/simulated/floor/noslip,
/area/shuttle/escape)
"ai" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/plasteel{
@@ -58,14 +58,6 @@
/obj/machinery/computer/station_alert,
/turf/simulated/floor/noslip,
/area/shuttle/escape)
-"al" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/floor/plasteel{
- icon_state = "white"
- },
-/area/shuttle/escape)
"am" = (
/obj/item/toy/snappop/phoenix,
/turf/simulated/floor/plasteel{
@@ -80,12 +72,12 @@
/turf/simulated/floor/noslip,
/area/shuttle/escape)
"ao" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/floor/noslip,
/area/shuttle/escape)
"ap" = (
@@ -95,12 +87,12 @@
},
/area/shuttle/escape)
"aq" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/floor/noslip,
/area/shuttle/escape)
"ar" = (
@@ -114,7 +106,7 @@
/turf/simulated/floor/noslip,
/area/shuttle/escape)
"at" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel{
@@ -129,7 +121,7 @@
},
/area/shuttle/escape)
"av" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel{
@@ -675,7 +667,7 @@ bt
ab
ae
ah
-al
+ai
am
au
ax
@@ -727,7 +719,7 @@ aa
ad
ag
aj
-al
+ai
ap
au
ax
diff --git a/_maps/map_files/shuttles/emergency_cramped.dmm b/_maps/map_files/shuttles/emergency_cramped.dmm
index de7bb67bb6b..5cd443121dc 100644
--- a/_maps/map_files/shuttles/emergency_cramped.dmm
+++ b/_maps/map_files/shuttles/emergency_cramped.dmm
@@ -46,7 +46,7 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"j" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/plating,
@@ -114,7 +114,7 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"s" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plating,
diff --git a/_maps/map_files/shuttles/emergency_cyb.dmm b/_maps/map_files/shuttles/emergency_cyb.dmm
index 3be4c293b80..5f35a77e455 100644
--- a/_maps/map_files/shuttles/emergency_cyb.dmm
+++ b/_maps/map_files/shuttles/emergency_cyb.dmm
@@ -43,7 +43,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ai" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -56,12 +56,6 @@
/obj/machinery/computer/station_alert,
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
-"al" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
"am" = (
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
@@ -73,21 +67,21 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ao" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ap" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aq" = (
@@ -101,7 +95,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"as" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -111,7 +105,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"au" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -142,7 +136,7 @@
},
/area/shuttle/escape)
"az" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor4,
@@ -156,7 +150,7 @@
icon_state = "tube1";
dir = 1
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aB" = (
@@ -171,7 +165,7 @@
},
/area/shuttle/escape)
"aC" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -179,7 +173,7 @@
},
/area/shuttle/escape)
"aD" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -205,12 +199,12 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aG" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aH" = (
@@ -236,12 +230,12 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aL" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -256,13 +250,13 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aN" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aO" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aP" = (
@@ -296,9 +290,6 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aS" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/item/radio/intercom{
dir = 8;
name = "station intercom (General)";
@@ -309,14 +300,14 @@
icon_state = "tube1";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"aT" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
@@ -325,6 +316,9 @@
icon_state = "tube1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -710,7 +704,7 @@ bw
ab
ae
ah
-al
+ai
am
am
av
@@ -762,7 +756,7 @@ aa
ad
ag
aj
-al
+ai
am
at
av
diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm
index 45acf04e012..32b14270d05 100644
--- a/_maps/map_files/shuttles/emergency_dept.dmm
+++ b/_maps/map_files/shuttles/emergency_dept.dmm
@@ -62,7 +62,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"al" = (
-/obj/structure/chair/comfy/blue{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -93,36 +93,6 @@
"aq" = (
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
-"ar" = (
-/obj/structure/chair/comfy/beige{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"as" = (
-/obj/structure/chair/comfy/brown{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"at" = (
-/obj/structure/chair/comfy/red{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"au" = (
-/obj/structure/chair/comfy/teal{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"av" = (
-/obj/structure/chair/comfy/purp{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
"aw" = (
/turf/simulated/shuttle/wall{
icon_state = "swall13";
@@ -143,7 +113,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"az" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aA" = (
@@ -155,7 +125,7 @@
icon_state = "tube1";
dir = 1
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aB" = (
@@ -172,7 +142,7 @@
},
/area/shuttle/escape)
"aD" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel{
@@ -227,7 +197,7 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aK" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel{
icon_state = "cafeteria";
dir = 2
@@ -276,13 +246,13 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aQ" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aR" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/plasteel{
@@ -327,53 +297,53 @@
},
/area/shuttle/escape)
"aW" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aX" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor2"
},
/area/shuttle/escape)
"aY" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"aZ" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"ba" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor5"
},
/area/shuttle/escape)
"bb" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor4,
@@ -405,9 +375,6 @@
},
/area/shuttle/escape)
"bf" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/item/radio/intercom{
dir = 8;
name = "station intercom (General)";
@@ -421,6 +388,9 @@
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"bg" = (
@@ -431,35 +401,35 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bh" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bi" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bj" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor2"
},
/area/shuttle/escape)
"bk" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"bl" = (
@@ -473,10 +443,10 @@
},
/area/shuttle/escape)
"bm" = (
-/obj/structure/chair{
+/obj/structure/window/reinforced,
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/obj/structure/window/reinforced,
/turf/simulated/shuttle/floor{
icon_state = "floor2"
},
@@ -490,41 +460,38 @@
},
/area/shuttle/escape)
"bo" = (
-/obj/structure/chair{
+/obj/structure/window/reinforced,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/structure/window/reinforced,
/turf/simulated/shuttle/floor{
icon_state = "floor2"
},
/area/shuttle/escape)
"bp" = (
/obj/structure/window/reinforced,
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"bq" = (
/obj/structure/window/reinforced,
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel,
/area/shuttle/escape)
"br" = (
-/obj/structure/chair{
+/obj/structure/window/reinforced,
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
-/obj/structure/window/reinforced,
/turf/simulated/shuttle/floor{
icon_state = "floor5"
},
/area/shuttle/escape)
"bs" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
@@ -536,15 +503,18 @@
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"bt" = (
-/obj/structure/chair{
+/obj/structure/window/reinforced,
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
-/obj/structure/window/reinforced,
/turf/simulated/shuttle/floor{
icon_state = "floor5"
},
@@ -593,23 +563,23 @@
},
/area/shuttle/escape)
"bz" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"bA" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor5"
},
@@ -665,7 +635,7 @@
},
/area/shuttle/escape)
"bF" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -678,7 +648,7 @@
},
/area/shuttle/escape)
"bH" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -849,7 +819,7 @@ bT
aa
ae
ai
-ar
+al
aq
ae
az
@@ -875,7 +845,7 @@ bT
aa
ae
aj
-as
+al
aq
ae
az
@@ -901,7 +871,7 @@ bS
ab
af
ak
-at
+al
aq
ax
aB
@@ -979,7 +949,7 @@ bU
aa
ae
an
-au
+al
aq
ae
aE
@@ -1005,7 +975,7 @@ bP
aa
ae
ao
-av
+al
aq
ae
aC
diff --git a/_maps/map_files/shuttles/emergency_meta.dmm b/_maps/map_files/shuttles/emergency_meta.dmm
index 60b96451ecb..c711de199e7 100644
--- a/_maps/map_files/shuttles/emergency_meta.dmm
+++ b/_maps/map_files/shuttles/emergency_meta.dmm
@@ -138,29 +138,29 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"av" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"aw" = (
-/obj/structure/chair,
/obj/machinery/light{
dir = 1;
on = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"ax" = (
-/obj/structure/chair,
/obj/item/radio/intercom{
dir = 4;
name = "Station Intercom (General)";
pixel_x = 0;
pixel_y = 27
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -239,7 +239,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aD" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -295,11 +295,11 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aK" = (
-/obj/structure/chair/office/dark,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aL" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor{
@@ -307,10 +307,10 @@
},
/area/shuttle/escape)
"aM" = (
-/obj/structure/chair{
+/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -377,7 +377,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aQ" = (
-/obj/structure/chair/office/dark{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -420,10 +420,10 @@
},
/area/shuttle/escape)
"aW" = (
-/obj/structure/chair,
/obj/machinery/light{
dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -482,9 +482,6 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"bd" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/item/radio/intercom{
broadcasting = 0;
listening = 1;
@@ -492,6 +489,9 @@
pixel_y = -28
},
/obj/machinery/light,
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -581,7 +581,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"bo" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/plating{
@@ -607,7 +607,7 @@
},
/area/shuttle/escape)
"bs" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -615,7 +615,7 @@
},
/area/shuttle/escape)
"bt" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -693,12 +693,12 @@
},
/area/shuttle/escape)
"bE" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/reagent_dispensers/peppertank{
pixel_x = 31
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
@@ -762,12 +762,12 @@
},
/area/shuttle/escape)
"bI" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/plating{
icon_state = "floorgrime"
},
@@ -779,18 +779,18 @@
},
/area/shuttle/escape)
"bK" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light{
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor4"
},
/area/shuttle/escape)
"bL" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
diff --git a/_maps/map_files/shuttles/emergency_mil.dmm b/_maps/map_files/shuttles/emergency_mil.dmm
index de4bba7254b..3741f06c673 100644
--- a/_maps/map_files/shuttles/emergency_mil.dmm
+++ b/_maps/map_files/shuttles/emergency_mil.dmm
@@ -115,25 +115,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"au" = (
-/obj/structure/chair/comfy/brown{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"av" = (
-/obj/structure/chair/comfy/teal{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"aw" = (
-/obj/structure/chair/comfy/red{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"ax" = (
-/obj/structure/chair/comfy/blue{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -142,18 +124,6 @@
/obj/machinery/computer/robotics,
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
-"az" = (
-/obj/structure/chair/comfy/beige{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
-"aA" = (
-/obj/structure/chair/comfy/purp{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
"aB" = (
/turf/simulated/shuttle/wall{
tag = "icon-swall7";
@@ -181,7 +151,7 @@
},
/area/shuttle/escape)
"aF" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aG" = (
@@ -193,7 +163,7 @@
icon_state = "tube1";
dir = 1
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"aH" = (
@@ -335,7 +305,7 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aX" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4,
@@ -469,32 +439,32 @@
icon_state = "tube1";
dir = 8
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bk" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bl" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bm" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (EAST)";
icon_state = "tube1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/floor/plating,
/area/shuttle/escape)
"bn" = (
@@ -503,22 +473,11 @@
icon_state = "tube1";
dir = 8
},
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plating,
/area/shuttle/escape)
-"bo" = (
-/obj/machinery/light/spot{
- tag = "icon-tube1 (EAST)";
- icon_state = "tube1";
- dir = 4
- },
-/obj/structure/chair{
- dir = 8
- },
-/turf/simulated/floor/plating,
-/area/shuttle/escape)
"bp" = (
/obj/machinery/door/airlock/shuttle{
aiControlDisabled = 1;
@@ -629,7 +588,7 @@ aa
ab
af
as
-az
+au
af
aF
aN
@@ -732,7 +691,7 @@ aj
ac
af
al
-av
+au
at
aC
aH
@@ -784,7 +743,7 @@ bz
ac
af
an
-aw
+au
at
aC
aH
@@ -810,7 +769,7 @@ by
ab
af
ao
-ax
+au
at
af
aJ
@@ -889,7 +848,7 @@ aa
ab
af
ay
-aA
+au
af
aM
aT
@@ -901,12 +860,12 @@ bm
bk
bk
bk
-bo
+bm
bi
aI
br
bk
-bo
+bm
aC
bw
"}
diff --git a/_maps/map_files/shuttles/emergency_narnar.dmm b/_maps/map_files/shuttles/emergency_narnar.dmm
index 8d36106c3da..59111b3eeae 100644
--- a/_maps/map_files/shuttles/emergency_narnar.dmm
+++ b/_maps/map_files/shuttles/emergency_narnar.dmm
@@ -22,7 +22,7 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"af" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/floor/engine/cult,
@@ -35,12 +35,6 @@
/obj/machinery/computer/station_alert,
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
-"ai" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/floor/engine/cult,
-/area/shuttle/escape)
"aj" = (
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
@@ -52,21 +46,21 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"al" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"am" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"an" = (
@@ -74,7 +68,7 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"ao" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/engine/cult,
@@ -84,7 +78,7 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"aq" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/engine/cult,
@@ -94,14 +88,14 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"as" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"at" = (
@@ -113,23 +107,23 @@
icon_state = "tube1";
dir = 1
},
-/obj/structure/chair,
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"au" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"av" = (
@@ -148,9 +142,6 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"ax" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
@@ -159,6 +150,9 @@
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"ay" = (
@@ -176,20 +170,17 @@
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"aB" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"aC" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/item/radio/intercom{
dir = 4;
name = "station intercom (General)";
@@ -200,6 +191,9 @@
icon_state = "remains";
name = "Human remains"
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/floor/engine/cult,
/area/shuttle/escape)
"aD" = (
@@ -559,7 +553,7 @@ bj
ab
ab
ae
-ai
+af
aj
aj
ab
@@ -611,7 +605,7 @@ aa
ab
ab
ag
-ai
+af
aj
ap
ab
diff --git a/_maps/map_files/shuttles/emergency_old.dmm b/_maps/map_files/shuttles/emergency_old.dmm
index 823d6f36a4f..6956613e0b8 100644
--- a/_maps/map_files/shuttles/emergency_old.dmm
+++ b/_maps/map_files/shuttles/emergency_old.dmm
@@ -43,7 +43,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ai" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -72,12 +72,6 @@
/obj/machinery/computer/station_alert,
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
-"am" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/shuttle/floor,
-/area/shuttle/escape)
"an" = (
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
@@ -89,21 +83,21 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ap" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aq" = (
-/obj/structure/chair{
- dir = 1
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"ar" = (
@@ -117,7 +111,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"at" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
@@ -127,7 +121,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"av" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -158,7 +152,7 @@
},
/area/shuttle/escape)
"aA" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor{
@@ -177,7 +171,7 @@
/turf/simulated/shuttle/floor,
/area/shuttle/escape)
"aC" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor{
@@ -192,12 +186,12 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aE" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = -28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -210,12 +204,12 @@
/turf/simulated/floor/plating,
/area/shuttle/escape)
"aG" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -266,9 +260,6 @@
},
/area/shuttle/escape)
"aL" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/item/radio/intercom{
dir = 8;
name = "station intercom (General)";
@@ -279,14 +270,14 @@
icon_state = "tube1";
dir = 8
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
/area/shuttle/escape)
"aM" = (
-/obj/structure/chair{
- dir = 8
- },
/obj/structure/closet/walllocker/emerglocker{
pixel_x = 28
},
@@ -295,6 +286,9 @@
icon_state = "tube1";
dir = 4
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
/turf/simulated/shuttle/floor{
icon_state = "floor3"
},
@@ -393,7 +387,7 @@
},
/area/shuttle/escape)
"aZ" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor4,
/area/shuttle/escape)
"ba" = (
@@ -455,7 +449,7 @@
},
/area/shuttle/escape)
"bh" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor4,
@@ -633,7 +627,7 @@ bo
ab
ae
ah
-am
+ai
an
an
aw
@@ -685,7 +679,7 @@ aa
ad
ag
aj
-am
+ai
an
au
aw
diff --git a/_maps/map_files/shuttles/ferry_base.dmm b/_maps/map_files/shuttles/ferry_base.dmm
index a5e2d5aef05..658633d421a 100644
--- a/_maps/map_files/shuttles/ferry_base.dmm
+++ b/_maps/map_files/shuttles/ferry_base.dmm
@@ -45,14 +45,14 @@
},
/area/shuttle/transport)
"h" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"i" = (
@@ -60,16 +60,16 @@
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"j" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"k" = (
-/obj/structure/chair,
/obj/machinery/light/spot{
tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
dir = 1
},
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"l" = (
@@ -126,16 +126,16 @@
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"s" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"t" = (
-/obj/structure/chair{
+/obj/machinery/light/spot,
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
-/obj/machinery/light/spot,
/turf/simulated/shuttle/floor,
/area/shuttle/transport)
"u" = (
diff --git a/_maps/map_files/shuttles/ferry_meat.dmm b/_maps/map_files/shuttles/ferry_meat.dmm
index a4008980d4a..a0935fb04d3 100644
--- a/_maps/map_files/shuttles/ferry_meat.dmm
+++ b/_maps/map_files/shuttles/ferry_meat.dmm
@@ -47,14 +47,14 @@
},
/area/shuttle/transport)
"h" = (
-/obj/structure/chair{
- dir = 4
- },
/obj/machinery/light/spot{
tag = "icon-tube1 (NORTH)";
icon_state = "tube1";
dir = 1
},
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
/turf/simulated/floor/plasteel{
icon_state = "freezerfloor"
},
@@ -103,7 +103,7 @@
},
/area/shuttle/transport)
"n" = (
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel{
icon_state = "freezerfloor"
},
@@ -114,7 +114,7 @@
icon_state = "tube1";
dir = 1
},
-/obj/structure/chair,
+/obj/structure/chair/comfy/shuttle,
/turf/simulated/floor/plasteel{
icon_state = "freezerfloor"
},
diff --git a/_maps/map_files/templates/medium_shuttle1.dmm b/_maps/map_files/templates/medium_shuttle1.dmm
index 109f921ed60..90acb3211a1 100644
--- a/_maps/map_files/templates/medium_shuttle1.dmm
+++ b/_maps/map_files/templates/medium_shuttle1.dmm
@@ -332,7 +332,7 @@
name = "Shuttle"
})
"L" = (
-/obj/structure/chair/comfy/black{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel{
diff --git a/_maps/map_files/templates/medium_shuttle2.dmm b/_maps/map_files/templates/medium_shuttle2.dmm
index 4a0e2e5e031..8966fc3ac7a 100644
--- a/_maps/map_files/templates/medium_shuttle2.dmm
+++ b/_maps/map_files/templates/medium_shuttle2.dmm
@@ -222,9 +222,7 @@
name = "Shuttle"
})
"B" = (
-/obj/structure/chair/comfy{
- tag = "icon-comfychair (EAST)";
- icon_state = "comfychair";
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/floor/plasteel{
diff --git a/_maps/map_files/templates/medium_shuttle3.dmm b/_maps/map_files/templates/medium_shuttle3.dmm
index 382a3a3e18d..e87eec1f66b 100644
--- a/_maps/map_files/templates/medium_shuttle3.dmm
+++ b/_maps/map_files/templates/medium_shuttle3.dmm
@@ -187,9 +187,7 @@
name = "Shuttle"
})
"x" = (
-/obj/structure/chair/comfy{
- tag = "icon-comfychair (WEST)";
- icon_state = "comfychair";
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/floor/plasteel{
diff --git a/_maps/map_files/templates/small_shuttle_1.dmm b/_maps/map_files/templates/small_shuttle_1.dmm
index 92066f62880..a1fae43e707 100644
--- a/_maps/map_files/templates/small_shuttle_1.dmm
+++ b/_maps/map_files/templates/small_shuttle_1.dmm
@@ -59,7 +59,7 @@
},
/area/ruin/powered)
"m" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 4
},
/turf/simulated/shuttle/floor,
@@ -88,7 +88,7 @@
/turf/simulated/shuttle/floor,
/area/ruin/powered)
"r" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 1
},
/turf/simulated/shuttle/floor,
@@ -108,7 +108,7 @@
},
/area/ruin/powered)
"u" = (
-/obj/structure/chair{
+/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/simulated/shuttle/floor,
diff --git a/_maps/test_all_maps.dm b/_maps/test_all_maps.dm
index f733f528a24..064bf8defaf 100644
--- a/_maps/test_all_maps.dm
+++ b/_maps/test_all_maps.dm
@@ -24,12 +24,27 @@
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk1.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk2.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk3.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_cube.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_cultaltar.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_dead_ratvar.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_envy.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_fountain_hall.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_gluttony.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_greed.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_hermit.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_hierophant.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_pizzaparty.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_pride.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_puzzle.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_random_ripley.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_seed_vault.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_sloth.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_survivalpod.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_swarmer_crash.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_syndicate_base1.dmm"
-
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_ufo_crash.dmm"
+ #include "map_files\RandomRuins\LavaRuins\lavaland_surface_xeno_nest.dmm"
+
// Space Ruins
#include "map_files\RandomRuins\SpaceRuins\abandonedzoo.dmm"
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index a6b346ee1c2..c542d714ca6 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -231,6 +231,12 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
var/turf/T = loc
level = T.intact ? 2 : 1
add_fingerprint(usr)
+ if(!SSair.initialized) //If there's no atmos subsystem, we can't really initialize pipenets
+ SSair.machinery_to_construct.Add(src)
+ return
+ initialize_atmos_network()
+
+/obj/machinery/atmospherics/proc/initialize_atmos_network()
atmos_init()
var/list/nodes = pipeline_expansion()
for(var/obj/machinery/atmospherics/A in nodes)
@@ -248,7 +254,8 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
// Ventcrawling
#define VENT_SOUND_DELAY 30
/obj/machinery/atmospherics/relaymove(mob/living/user, direction)
- if(!(direction & initialize_directions)) //can't go in a way we aren't connecting to
+ direction &= initialize_directions
+ if(!direction || !(direction in cardinal)) //cant go this way.
return
if(buckled_mob == user)
diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm
index 5e44dcf20cc..00fddd5b1f0 100644
--- a/code/LINDA/LINDA_fire.dm
+++ b/code/LINDA/LINDA_fire.dm
@@ -189,7 +189,7 @@
T.to_be_destroyed = 0
T.max_fire_temperature_sustained = 0
-/obj/effect/hotspot/Crossed(mob/living/L)
+/obj/effect/hotspot/Crossed(mob/living/L, oldloc)
..()
if(isliving(L))
L.fire_act()
diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
new file mode 100644
index 00000000000..e28708a81e6
--- /dev/null
+++ b/code/__DEFINES/colors.dm
@@ -0,0 +1,54 @@
+
+#define COLOR_INPUT_DISABLED "#F0F0F0"
+#define COLOR_INPUT_ENABLED "#D3B5B5"
+#define COLOR_WHITE "#EEEEEE"
+#define COLOR_SILVER "#C0C0C0"
+#define COLOR_GRAY "#808080"
+#define COLOR_FLOORTILE_GRAY "#8D8B8B"
+#define COLOR_ALMOST_BLACK "#333333"
+#define COLOR_BLACK "#000000"
+#define COLOR_RED "#FF0000"
+#define COLOR_RED_LIGHT "#FF3333"
+#define COLOR_MAROON "#800000"
+#define COLOR_YELLOW "#FFFF00"
+#define COLOR_OLIVE "#808000"
+#define COLOR_LIME "#32CD32"
+#define COLOR_GREEN "#008000"
+#define COLOR_CYAN "#00FFFF"
+#define COLOR_TEAL "#008080"
+#define COLOR_BLUE "#0000FF"
+#define COLOR_BLUE_LIGHT "#33CCFF"
+#define COLOR_NAVY "#000080"
+#define COLOR_PINK "#FFC0CB"
+#define COLOR_MAGENTA "#FF00FF"
+#define COLOR_PURPLE "#800080"
+#define COLOR_ORANGE "#FF9900"
+#define COLOR_BEIGE "#CEB689"
+#define COLOR_BLUE_GRAY "#75A2BB"
+#define COLOR_BROWN "#BA9F6D"
+#define COLOR_DARK_BROWN "#997C4F"
+#define COLOR_DARK_ORANGE "#C3630C"
+#define COLOR_GREEN_GRAY "#99BB76"
+#define COLOR_RED_GRAY "#B4696A"
+#define COLOR_PALE_BLUE_GRAY "#98C5DF"
+#define COLOR_PALE_GREEN_GRAY "#B7D993"
+#define COLOR_PALE_RED_GRAY "#D59998"
+#define COLOR_PALE_PURPLE_GRAY "#CBB1CA"
+#define COLOR_PURPLE_GRAY "#AE8CA8"
+
+//Color defines used by the assembly detailer.
+#define COLOR_ASSEMBLY_BLACK "#545454"
+#define COLOR_ASSEMBLY_BGRAY "#9497AB"
+#define COLOR_ASSEMBLY_WHITE "#E2E2E2"
+#define COLOR_ASSEMBLY_RED "#CC4242"
+#define COLOR_ASSEMBLY_ORANGE "#E39751"
+#define COLOR_ASSEMBLY_BEIGE "#AF9366"
+#define COLOR_ASSEMBLY_BROWN "#97670E"
+#define COLOR_ASSEMBLY_GOLD "#AA9100"
+#define COLOR_ASSEMBLY_YELLOW "#CECA2B"
+#define COLOR_ASSEMBLY_GURKHA "#999875"
+#define COLOR_ASSEMBLY_LGREEN "#789876"
+#define COLOR_ASSEMBLY_GREEN "#44843C"
+#define COLOR_ASSEMBLY_LBLUE "#5D99BE"
+#define COLOR_ASSEMBLY_BLUE "#38559E"
+#define COLOR_ASSEMBLY_PURPLE "#6F6192"
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index a8c6b4bd5e8..fbc28695ebf 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -70,6 +70,10 @@
#define ATTACK_EFFECT_MECHFIRE "mech_fire"
#define ATTACK_EFFECT_MECHTOXIN "mech_toxin"
#define ATTACK_EFFECT_BOOP "boop" //Honk
+//NOTE: INTENT_HOTKEY_* defines are not actual intents!
+//they are here to support hotkeys
+#define INTENT_HOTKEY_LEFT "left"
+#define INTENT_HOTKEY_RIGHT "right"
//Embedded objects
#define EMBEDDED_PAIN_CHANCE 15 //Chance for embedded objects to cause pain (damage user)
@@ -82,6 +86,22 @@
#define EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER 8 //Coefficient of multiplication for the damage the item does when removed without a surgery (this*item.w_class)
#define EMBEDDED_UNSAFE_REMOVAL_TIME 30 //A Time in ticks, total removal time = (this*item.w_class)
+// Body Parts
+#define BODY_ZONE_HEAD "head"
+#define BODY_ZONE_CHEST "chest"
+#define BODY_ZONE_L_ARM "l_arm"
+#define BODY_ZONE_R_ARM "r_arm"
+#define BODY_ZONE_L_LEG "l_leg"
+#define BODY_ZONE_R_LEG "r_leg"
+
+#define BODY_ZONE_PRECISE_EYES "eyes"
+#define BODY_ZONE_PRECISE_MOUTH "mouth"
+#define BODY_ZONE_PRECISE_GROIN "groin"
+#define BODY_ZONE_PRECISE_L_HAND "l_hand"
+#define BODY_ZONE_PRECISE_R_HAND "r_hand"
+#define BODY_ZONE_PRECISE_L_FOOT "l_foot"
+#define BODY_ZONE_PRECISE_R_FOOT "r_foot"
+
//Gun Stuff
#define SAWN_INTACT 0
#define SAWN_OFF 1
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index f82fc271fbd..14b712754fb 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -1,6 +1,9 @@
#define ALL ~0 //For convenience.
#define NONE 0
+// for /datum/var/datum_flags
+#define DF_USE_TAG (1<<0)
+
//FLAGS BITMASK
#define STOPSPRESSUREDMAGE 1 //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere To successfully stop you taking all pressure damage you must have both a suit and head item with this flag.
#define NODROP 2 // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted.
diff --git a/code/__DEFINES/gamemode.dm b/code/__DEFINES/gamemode.dm
index a3efbab50d9..308e7a5f6d9 100644
--- a/code/__DEFINES/gamemode.dm
+++ b/code/__DEFINES/gamemode.dm
@@ -6,6 +6,7 @@
#define TARGET_INVALID_UNREACHABLE 5
#define TARGET_INVALID_GOLEM 6
#define TARGET_INVALID_EVENT 7
+#define TARGET_INVALID_IS_TARGET 8
//gamemode istype helpers
#define GAMEMODE_IS_BLOB (SSticker && istype(SSticker.mode, /datum/game_mode/blob))
diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index 45953a2e47b..4a1e4f20f98 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -55,6 +55,7 @@
#define DATA_HUD_ABDUCTOR 18
#define ANTAG_HUD_DEVIL 19
#define ANTAG_HUD_EVENTMISC 20
+#define ANTAG_HUD_BLOB 21
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 3418938d955..723fe6b0762 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -57,17 +57,6 @@
#define MAX_STACK_AMOUNT_GLASS 50
#define MAX_STACK_AMOUNT_RODS 60
-//some colors
-#define COLOR_RED "#FF0000"
-#define COLOR_GREEN "#00FF00"
-#define COLOR_BLUE "#0000FF"
-#define COLOR_CYAN "#00FFFF"
-#define COLOR_PINK "#FF00FF"
-#define COLOR_YELLOW "#FFFF00"
-#define COLOR_ORANGE "#FF9900"
-#define COLOR_WHITE "#FFFFFF"
-#define COLOR_GRAY "#808080"
-
//FONTS:
// Used by Paper and PhotoCopier (and PaperBin once a year).
// Used by PDA's Notekeeper.
@@ -143,7 +132,12 @@
for(type in view(range, dview_mob))
#define END_FOR_DVIEW dview_mob.loc = null
+//Turf locational stuff
#define get_turf(A) (get_step(A, 0))
+#define NORTH_OF_TURF(T) locate(T.x, T.y + 1, T.z)
+#define EAST_OF_TURF(T) locate(T.x + 1, T.y, T.z)
+#define SOUTH_OF_TURF(T) locate(T.x, T.y - 1, T.z)
+#define WEST_OF_TURF(T) locate(T.x - 1, T.y, T.z)
#define MIN_SUPPLIED_LAW_NUMBER 15
#define MAX_SUPPLIED_LAW_NUMBER 50
@@ -326,7 +320,7 @@
#define INVESTIGATE_BOMB "bombs"
// The SQL version required by this version of the code
-#define SQL_VERSION 6
+#define SQL_VERSION 8
// Vending machine stuff
#define CAT_NORMAL 1
@@ -404,4 +398,8 @@
#define SENSOR_COORDS 3
// Cult summon possibilities
-#define SUMMON_POSSIBILITIES 3
\ No newline at end of file
+#define SUMMON_POSSIBILITIES 3
+
+#define DICE_NOT_RIGGED 1
+#define DICE_BASICALLY_RIGGED 2
+#define DICE_TOTALLY_RIGGED 3
\ No newline at end of file
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index 22b4334e3be..9582fddccfe 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -16,6 +16,7 @@
#define CHAT_GHOSTSIGHT 8
#define CHAT_PRAYER 16
#define CHAT_RADIO 32
+#define AZERTY 64
#define CHAT_DEBUGLOGS 128
#define CHAT_LOOC 256
#define CHAT_GHOSTRADIO 512
@@ -31,10 +32,12 @@
#define CHAT_NO_MENTORTICKETLOGS 524288
#define TYPING_ONCE 1048576
#define AMBIENT_OCCLUSION 2097152
+#define CHAT_GHOSTPDA 4194304
+#define NUMPAD_TARGET 8388608
+#define TOGGLES_TOTAL 16777215 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined.
-#define TOGGLES_TOTAL 4194303 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined.
-#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION)
+#define TOGGLES_DEFAULT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_LOOC|MEMBER_PUBLIC|DONATOR_PUBLIC|AMBIENT_OCCLUSION|CHAT_GHOSTPDA|NUMPAD_TARGET)
// Admin attack logs filter system, see /proc/add_attack_logs and /proc/msg_admin_attack
#define ATKLOG_ALL 0
diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm
index 6b5807deaef..9e01753d492 100644
--- a/code/__HELPERS/lists.dm
+++ b/code/__HELPERS/lists.dm
@@ -353,12 +353,12 @@
var/middle = L.len / 2 + 1 // Copy is first,second-1
return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list
-//Mergsorge: uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead
+//Mergsorge: uses sortAssoc() but uses the var's name specifically. This should probably be using mergeAtom() instead
/proc/sortNames(var/list/L)
var/list/Q = new()
for(var/atom/x in L)
Q[x.name] = x
- return sortList(Q)
+ return sortAssoc(Q)
/proc/mergeLists(var/list/L, var/list/R)
var/Li=1
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index c567ba7adb2..aaf33820840 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -298,8 +298,12 @@ This is always put in the attack log.
loglevel = ATKLOG_FEW
else if(istype(user) && !user.ckey && !target.ckey) // Attacks between NPCs are only shown to admins with ATKLOG_ALL
loglevel = ATKLOG_ALL
- else if(!target.ckey) // Attacks by players on NPCs are only shown to admins with ATKLOG_ALL or ATKLOG_ALMOSTALL
+ else if(!user.ckey || !target.ckey) // Player v NPC combat is de-prioritized.
loglevel = ATKLOG_ALMOSTALL
+ else
+ var/area/A = get_area(target)
+ if(A && A.hide_attacklogs)
+ loglevel = ATKLOG_ALMOSTALL
msg_admin_attack("[key_name_admin(user)] vs [key_name_admin(target)]: [what_done]", loglevel)
diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm
index 607ba3495d3..d419e925759 100644
--- a/code/__HELPERS/pronouns.dm
+++ b/code/__HELPERS/pronouns.dm
@@ -43,7 +43,7 @@
. = "e[.]"
//like clients, which do have gender.
-/client/proc/p_they(capitalized, temp_gender)
+/client/p_they(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "they"
@@ -55,7 +55,7 @@
if(capitalized)
. = capitalize(.)
-/client/proc/p_their(capitalized, temp_gender)
+/client/p_their(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "their"
@@ -67,7 +67,7 @@
if(capitalized)
. = capitalize(.)
-/client/proc/p_them(capitalized, temp_gender)
+/client/p_them(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "them"
@@ -79,35 +79,35 @@
if(capitalized)
. = capitalize(.)
-/client/proc/p_have(temp_gender)
+/client/p_have(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "has"
if(temp_gender == PLURAL || temp_gender == NEUTER)
. = "have"
-/client/proc/p_are(temp_gender)
+/client/p_are(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "is"
if(temp_gender == PLURAL || temp_gender == NEUTER)
. = "are"
-/client/proc/p_were(temp_gender)
+/client/p_were(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "was"
if(temp_gender == PLURAL || temp_gender == NEUTER)
. = "were"
-/client/proc/p_do(temp_gender)
+/client/p_do(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "does"
if(temp_gender == PLURAL || temp_gender == NEUTER)
. = "do"
-/client/proc/p_s(temp_gender)
+/client/p_s(temp_gender)
if(!temp_gender)
temp_gender = gender
if(temp_gender != PLURAL && temp_gender != NEUTER)
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index b90f7502e65..04d63e0e862 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -28,6 +28,11 @@
/*
* Text sanitization
*/
+// Can be used almost the same way as normal input for text
+/proc/clean_input(Message, Title, Default, mob/user=usr)
+ var/txt = input(user, Message, Title, Default) as text | null
+ if(txt)
+ return html_encode(txt)
//Simply removes < and > and limits the length of the message
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
@@ -125,8 +130,10 @@
//Filters out undesirable characters from names
/proc/reject_bad_name(var/t_in, var/allow_numbers=0, var/max_length=MAX_NAME_LEN)
+ // Decode so that names with characters like < are still rejected. Will be encoded again at the end
+ t_in = html_decode(t_in)
if(!t_in || length(t_in) > max_length)
- return //Rejects the input if it is null or if it is longer then the max length allowed
+ return //Rejects the input if it is null or if it is longer than the max length allowed
var/number_of_alphanumeric = 0
var/last_char_group = 0
@@ -185,7 +192,7 @@
for(var/bad_name in list("space","floor","wall","r-wall","monkey","unknown","inactive ai","plating")) //prevents these common metagamey names
if(cmptext(t_out,bad_name)) return //(not case sensitive)
- return t_out
+ return html_encode(t_out)
//checks text for html tags
//if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm)
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index f90a9c4e5ad..ae7704459b5 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -157,6 +157,17 @@
if(degree < 315) return WEST
return NORTH|WEST
+/proc/angle2dir_cardinal(angle)
+ switch(round(angle, 0.1))
+ if(315.5 to 360, 0 to 45.5)
+ return NORTH
+ if(45.6 to 135.5)
+ return EAST
+ if(135.6 to 225.5)
+ return SOUTH
+ if(225.6 to 315.5)
+ return WEST
+
//returns the north-zero clockwise angle in degrees, given a direction
/proc/dir2angle(var/D)
diff --git a/code/__HELPERS/unique_ids.dm b/code/__HELPERS/unique_ids.dm
index 1e9c699dcb9..a66de0b5a88 100644
--- a/code/__HELPERS/unique_ids.dm
+++ b/code/__HELPERS/unique_ids.dm
@@ -16,7 +16,7 @@
var/global/next_unique_datum_id = 1
-/client/var/tmp/unique_datum_id = null
+// /client/var/tmp/unique_datum_id = null
/datum/proc/UID()
if(!unique_datum_id)
@@ -26,12 +26,6 @@ var/global/next_unique_datum_id = 1
tag = tag_backup
return unique_datum_id
-/client/proc/UID()
- if(!unique_datum_id)
- unique_datum_id = "\ref[src]_[next_unique_datum_id++]"
- return unique_datum_id
-
-
/proc/locateUID(uid)
if(!istext(uid))
return null
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index f7c5b670dc8..10759fe336a 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1,2065 +1,2065 @@
-/*
- * A large number of misc global procs.
- */
-
- /* Get the direction of startObj relative to endObj.
- * Return values: To the right, 1. Below, 2. To the left, 3. Above, 4. Not found adjacent in cardinal directions, 0.
- */
-/proc/getRelativeDirection(var/atom/movable/startObj, var/atom/movable/endObj)
- if(endObj.x == startObj.x + 1 && endObj.y == startObj.y)
- return EAST
-
- if(endObj.x == startObj.x - 1 && endObj.y == startObj.y)
- return WEST
-
- if(endObj.y == startObj.y + 1 && endObj.x == startObj.x)
- return NORTH
-
- if(endObj.y == startObj.y - 1 && endObj.x == startObj.x)
- return SOUTH
-
- return 0
-
-//Inverts the colour of an HTML string
-/proc/invertHTML(HTMLstring)
-
- if(!( istext(HTMLstring) ))
- CRASH("Given non-text argument!")
- return
- else
- if(length(HTMLstring) != 7)
- CRASH("Given non-HTML argument!")
- return
- var/textr = copytext(HTMLstring, 2, 4)
- var/textg = copytext(HTMLstring, 4, 6)
- var/textb = copytext(HTMLstring, 6, 8)
- var/r = hex2num(textr)
- var/g = hex2num(textg)
- var/b = hex2num(textb)
- textr = num2hex(255 - r)
- textg = num2hex(255 - g)
- textb = num2hex(255 - b)
- if(length(textr) < 2)
- textr = text("0[]", textr)
- if(length(textg) < 2)
- textr = text("0[]", textg)
- if(length(textb) < 2)
- textr = text("0[]", textb)
- return text("#[][][]", textr, textg, textb)
- return
-
-//Returns the middle-most value
-/proc/dd_range(var/low, var/high, var/num)
- return max(low,min(high,num))
-
-//Returns whether or not A is the middle most value
-/proc/InRange(var/A, var/lower, var/upper)
- if(A < lower) return 0
- if(A > upper) return 0
- return 1
-
-
-/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
- if(!start || !end) return 0
- var/dy
- var/dx
- dy=(32*end.y+end.pixel_y)-(32*start.y+start.pixel_y)
- dx=(32*end.x+end.pixel_x)-(32*start.x+start.pixel_x)
- if(!dy)
- return (dx>=0)?90:270
- .=arctan(dx/dy)
- if(dy<0)
- .+=180
- else if(dx<0)
- .+=360
-
-//Returns location. Returns null if no location was found.
-/proc/get_teleport_loc(turf/location,mob/target,distance = 1, density = 0, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0)
-/*
-Location where the teleport begins, target that will teleport, distance to go, density checking 0/1(yes/no).
-Random error in tile placement x, error in tile placement y, and block offset.
-Block offset tells the proc how to place the box. Behind teleport location, relative to starting location, forward, etc.
-Negative values for offset are accepted, think of it in relation to North, -x is west, -y is south. Error defaults to positive.
-Turf and target are seperate in case you want to teleport some distance from a turf the target is not standing on or something.
-*/
-
- var/dirx = 0//Generic location finding variable.
- var/diry = 0
-
- var/xoffset = 0//Generic counter for offset location.
- var/yoffset = 0
-
- var/b1xerror = 0//Generic placing for point A in box. The lower left.
- var/b1yerror = 0
- var/b2xerror = 0//Generic placing for point B in box. The upper right.
- var/b2yerror = 0
-
- errorx = abs(errorx)//Error should never be negative.
- errory = abs(errory)
- //var/errorxy = round((errorx+errory)/2)//Used for diagonal boxes.
-
- switch(target.dir)//This can be done through equations but switch is the simpler method. And works fast to boot.
- //Directs on what values need modifying.
- if(1)//North
- diry+=distance
- yoffset+=eoffsety
- xoffset+=eoffsetx
- b1xerror-=errorx
- b1yerror-=errory
- b2xerror+=errorx
- b2yerror+=errory
- if(2)//South
- diry-=distance
- yoffset-=eoffsety
- xoffset+=eoffsetx
- b1xerror-=errorx
- b1yerror-=errory
- b2xerror+=errorx
- b2yerror+=errory
- if(4)//East
- dirx+=distance
- yoffset+=eoffsetx//Flipped.
- xoffset+=eoffsety
- b1xerror-=errory//Flipped.
- b1yerror-=errorx
- b2xerror+=errory
- b2yerror+=errorx
- if(8)//West
- dirx-=distance
- yoffset-=eoffsetx//Flipped.
- xoffset+=eoffsety
- b1xerror-=errory//Flipped.
- b1yerror-=errorx
- b2xerror+=errory
- b2yerror+=errorx
-
- var/turf/destination=locate(location.x+dirx,location.y+diry,location.z)
-
- if(destination)//If there is a destination.
- if(errorx||errory)//If errorx or y were specified.
- var/destination_list[] = list()//To add turfs to list.
- //destination_list = new()
- /*This will draw a block around the target turf, given what the error is.
- Specifying the values above will basically draw a different sort of block.
- If the values are the same, it will be a square. If they are different, it will be a rectengle.
- In either case, it will center based on offset. Offset is position from center.
- Offset always calculates in relation to direction faced. In other words, depending on the direction of the teleport,
- the offset should remain positioned in relation to destination.*/
-
- var/turf/center = locate((destination.x+xoffset),(destination.y+yoffset),location.z)//So now, find the new center.
-
- //Now to find a box from center location and make that our destination.
- for(var/turf/T in block(locate(center.x+b1xerror,center.y+b1yerror,location.z), locate(center.x+b2xerror,center.y+b2yerror,location.z) ))
- if(density&&T.density) continue//If density was specified.
- if(T.x>world.maxx || T.x<1) continue//Don't want them to teleport off the map.
- if(T.y>world.maxy || T.y<1) continue
- destination_list += T
- if(destination_list.len)
- destination = pick(destination_list)
- else return
-
- else//Same deal here.
- if(density&&destination.density) return
- if(destination.x>world.maxx || destination.x<1) return
- if(destination.y>world.maxy || destination.y<1) return
- else return
-
- return destination
-
-// Returns true if direction is blocked from loc
-// Checks if doors are open
-/proc/DirBlocked(turf/loc,var/dir)
- for(var/obj/structure/window/D in loc)
- if(!D.density)
- continue
- if(D.fulltile)
- return 1
- if(D.dir == dir)
- return 1
-
- for(var/obj/machinery/door/D in loc)
- if(!D.density)//if the door is open
- continue
- else return 1 // if closed, it's a real, air blocking door
- return 0
-
-/////////////////////////////////////////////////////////////////////////
-
-/proc/getline(atom/M,atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm
- var/px=M.x //starting x
- var/py=M.y
- var/line[] = list(locate(px,py,M.z))
- var/dx=N.x-px //x distance
- var/dy=N.y-py
- var/dxabs=abs(dx)//Absolute value of x distance
- var/dyabs=abs(dy)
- var/sdx=SIGN(dx) //Sign of x distance (+ or -)
- var/sdy=SIGN(dy)
- var/x=dxabs>>1 //Counters for steps taken, setting to distance/2
- var/y=dyabs>>1 //Bit-shifting makes me l33t. It also makes getline() unnessecarrily fast.
- var/j //Generic integer for counting
- if(dxabs>=dyabs) //x distance is greater than y
- for(j=0;j=dxabs) //Every dyabs steps, step once in y direction
- y-=dxabs
- py+=sdy
- px+=sdx //Step on in x direction
- line+=locate(px,py,M.z)//Add the turf to the list
- else
- for(j=0;j=dyabs)
- x-=dyabs
- px+=sdx
- py+=sdy
- line+=locate(px,py,M.z)
- return line
-
-//Same as the thing below just for density and without support for atoms.
-/proc/can_line(atom/source, atom/target, length = 5)
- var/turf/current = get_turf(source)
- var/turf/target_turf = get_turf(target)
- var/steps = 0
-
- while(current != target_turf)
- if(steps > length)
- return FALSE
- if(!current)
- return FALSE
- if(current.density)
- return FALSE
- current = get_step_towards(current, target_turf)
- steps++
- return TRUE
-
-//Returns whether or not a player is a guest using their ckey as an input
-/proc/IsGuestKey(key)
- if(findtext(key, "Guest-", 1, 7) != 1) //was findtextEx
- return 0
-
- var/i, ch, len = length(key)
-
- for(i = 7, i <= len, ++i)
- ch = text2ascii(key, i)
- if(ch < 48 || ch > 57)
- return 0
- return 1
-
-//Ensure the frequency is within bounds of what it should be sending/recieving at
-/proc/sanitize_frequency(var/f, var/low = PUBLIC_LOW_FREQ, var/high = PUBLIC_HIGH_FREQ)
- f = round(f)
- f = max(low, f)
- f = min(high, f)
- if((f % 2) == 0) //Ensure the last digit is an odd number
- f += 1
- return f
-
-//Turns 1479 into 147.9
-/proc/format_frequency(var/f)
- return "[round(f / 10)].[f % 10]"
-
-/obj/proc/atmosanalyzer_scan(var/datum/gas_mixture/air_contents, mob/user, var/obj/target = src)
- var/obj/icon = target
- user.visible_message("[user] has used the analyzer on [target].", "You use the analyzer on [target].")
- var/pressure = air_contents.return_pressure()
- var/total_moles = air_contents.total_moles()
-
- user.show_message("Results of analysis of [bicon(icon)] [target].", 1)
- if(total_moles>0)
- var/o2_concentration = air_contents.oxygen/total_moles
- var/n2_concentration = air_contents.nitrogen/total_moles
- var/co2_concentration = air_contents.carbon_dioxide/total_moles
- var/plasma_concentration = air_contents.toxins/total_moles
-
- var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration)
-
- user.show_message("Pressure: [round(pressure,0.1)] kPa", 1)
- user.show_message("Nitrogen: [round(n2_concentration*100)] % ([round(air_contents.nitrogen,0.01)] moles)", 1)
- user.show_message("Oxygen: [round(o2_concentration*100)] % ([round(air_contents.oxygen,0.01)] moles)", 1)
- user.show_message("CO2: [round(co2_concentration*100)] % ([round(air_contents.carbon_dioxide,0.01)] moles)", 1)
- user.show_message("Plasma: [round(plasma_concentration*100)] % ([round(air_contents.toxins,0.01)] moles)", 1)
- if(unknown_concentration>0.01)
- user.show_message("Unknown: [round(unknown_concentration*100)] % ([round(unknown_concentration*total_moles,0.01)] moles)", 1)
- user.show_message("Total: [round(total_moles,0.01)] moles", 1)
- user.show_message("Temperature: [round(air_contents.temperature-T0C)] °C", 1)
- else
- user.show_message("[target] is empty!", 1)
- return
-
-//Picks a string of symbols to display as the law number for hacked or ion laws
-/proc/ionnum()
- return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]"
-
-//When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave.
-/proc/freeborg()
- var/select = null
- var/list/borgs = list()
- for(var/mob/living/silicon/robot/A in GLOB.player_list)
- if(A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone))
- continue
- var/name = "[A.real_name] ([A.modtype] [A.braintype])"
- borgs[name] = A
-
- if(borgs.len)
- select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs
- return borgs[select]
-
-//When a borg is activated, it can choose which AI it wants to be slaved to
-/proc/active_ais()
- . = list()
- for(var/mob/living/silicon/ai/A in GLOB.living_mob_list)
- if(A.stat == DEAD)
- continue
- if(A.control_disabled == 1)
- continue
- . += A
- return .
-
-//Find an active ai with the least borgs. VERBOSE PROCNAME HUH!
-/proc/select_active_ai_with_fewest_borgs()
- var/mob/living/silicon/ai/selected
- var/list/active = active_ais()
- for(var/mob/living/silicon/ai/A in active)
- if(!selected || (selected.connected_robots > A.connected_robots))
- selected = A
-
- return selected
-
-/proc/select_active_ai(var/mob/user)
- var/list/ais = active_ais()
- if(ais.len)
- if(user) . = input(usr,"AI signals detected:", "AI selection") in ais
- else . = pick(ais)
- return .
-
-/proc/get_sorted_mobs()
- var/list/old_list = getmobs()
- var/list/AI_list = list()
- var/list/Dead_list = list()
- var/list/keyclient_list = list()
- var/list/key_list = list()
- var/list/logged_list = list()
- for(var/named in old_list)
- var/mob/M = old_list[named]
- if(issilicon(M))
- AI_list |= M
- else if(isobserver(M) || M.stat == DEAD)
- Dead_list |= M
- else if(M.key && M.client)
- keyclient_list |= M
- else if(M.key)
- key_list |= M
- else
- logged_list |= M
- old_list.Remove(named)
- var/list/new_list = list()
- new_list += AI_list
- new_list += keyclient_list
- new_list += key_list
- new_list += logged_list
- new_list += Dead_list
- return new_list
-
-//Returns a list of all mobs with their name
-/proc/getmobs()
-
- var/list/mobs = sortmobs()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- var/name = M.name
- if(name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if(M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if(M.stat == DEAD)
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- else
- name += " \[dead\]"
- creatures[name] = M
-
- return creatures
-
-//Orders mobs by type then by name
-/proc/sortmobs()
- var/list/moblist = list()
- var/list/sortmob = sortAtom(GLOB.mob_list)
- for(var/mob/living/silicon/ai/M in sortmob)
- moblist.Add(M)
- if(M.eyeobj)
- moblist.Add(M.eyeobj)
- for(var/mob/living/silicon/pai/M in sortmob)
- moblist.Add(M)
- for(var/mob/living/silicon/robot/M in sortmob)
- moblist.Add(M)
- for(var/mob/living/carbon/human/M in sortmob)
- moblist.Add(M)
- for(var/mob/living/carbon/brain/M in sortmob)
- moblist.Add(M)
- for(var/mob/living/carbon/alien/M in sortmob)
- moblist.Add(M)
- for(var/mob/dead/observer/M in sortmob)
- moblist.Add(M)
- for(var/mob/new_player/M in sortmob)
- moblist.Add(M)
- for(var/mob/living/carbon/slime/M in sortmob)
- moblist.Add(M)
- for(var/mob/living/simple_animal/M in sortmob)
- moblist.Add(M)
- return moblist
-
-// Format a power value in W, kW, MW, or GW.
-/proc/DisplayPower(powerused)
- if(powerused < 1000) //Less than a kW
- return "[powerused] W"
- else if(powerused < 1000000) //Less than a MW
- return "[round((powerused * 0.001), 0.01)] kW"
- else if(powerused < 1000000000) //Less than a GW
- return "[round((powerused * 0.000001), 0.001)] MW"
- return "[round((powerused * 0.000000001), 0.0001)] GW"
-
-//E = MC^2
-/proc/convert2energy(var/M)
- var/E = M*(SPEED_OF_LIGHT_SQ)
- return E
-
-//M = E/C^2
-/proc/convert2mass(var/E)
- var/M = E/(SPEED_OF_LIGHT_SQ)
- return M
-
-//Forces a variable to be posative
-/proc/modulus(var/M)
- if(M >= 0)
- return M
- if(M < 0)
- return -M
-
-/proc/get_mob_by_ckey(key)
- if(!key)
- return
- for(var/mob/M in GLOB.mob_list)
- if(M.ckey == key)
- return M
-
-// Returns the atom sitting on the turf.
-// For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf.
-/proc/get_atom_on_turf(var/atom/movable/M)
- var/atom/loc = M
- while(loc && loc.loc && !istype(loc.loc, /turf/))
- loc = loc.loc
- return loc
-
-/*
-Returns 1 if the chain up to the area contains the given typepath
-0 otherwise
-*/
-/atom/proc/is_found_within(var/typepath)
- var/atom/A = src
- while(A.loc)
- if(istype(A.loc, typepath))
- return 1
- A = A.loc
- return 0
-
-// the on-close client verb
-// called when a browser popup window is closed after registering with proc/onclose()
-// if a valid atom reference is supplied, call the atom's Topic() with "close=1"
-// otherwise, just reset the client mob's machine var.
-
-
-// returns the turf located at the map edge in the specified direction relative to A
-// used for mass driver
-/proc/get_edge_target_turf(var/atom/A, var/direction)
-
- var/turf/target = locate(A.x, A.y, A.z)
- if(!A || !target)
- return 0
- //since NORTHEAST == NORTH & EAST, etc, doing it this way allows for diagonal mass drivers in the future
- //and isn't really any more complicated
-
- // Note diagonal directions won't usually be accurate
- if(direction & NORTH)
- target = locate(target.x, world.maxy, target.z)
- if(direction & SOUTH)
- target = locate(target.x, 1, target.z)
- if(direction & EAST)
- target = locate(world.maxx, target.y, target.z)
- if(direction & WEST)
- target = locate(1, target.y, target.z)
-
- return target
-
-// returns turf relative to A in given direction at set range
-// result is bounded to map size
-// note range is non-pythagorean
-// used for disposal system
-/proc/get_ranged_target_turf(var/atom/A, var/direction, var/range)
-
- var/x = A.x
- var/y = A.y
- if(direction & NORTH)
- y = min(world.maxy, y + range)
- if(direction & SOUTH)
- y = max(1, y - range)
- if(direction & EAST)
- x = min(world.maxx, x + range)
- if(direction & WEST)
- x = max(1, x - range)
-
- return locate(x,y,A.z)
-
-
-// returns turf relative to A offset in dx and dy tiles
-// bound to map limits
-/proc/get_offset_target_turf(var/atom/A, var/dx, var/dy)
- var/x = min(world.maxx, max(1, A.x + dx))
- var/y = min(world.maxy, max(1, A.y + dy))
- return locate(x,y,A.z)
-
-//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value.
-/proc/between(var/low, var/middle, var/high)
- return max(min(middle, high), low)
-
-proc/arctan(x)
- var/y=arcsin(x/sqrt(1+x*x))
- return y
-
-//returns random gauss number
-proc/GaussRand(var/sigma)
- var/x,y,rsq
- do
- x=2*rand()-1
- y=2*rand()-1
- rsq=x*x+y*y
- while(rsq>1 || !rsq)
- return sigma*y*sqrt(-2*log(rsq)/rsq)
-
-//returns random gauss number, rounded to 'roundto'
-proc/GaussRandRound(var/sigma,var/roundto)
- return round(GaussRand(sigma),roundto)
-
-//Will return the contents of an atom recursivly to a depth of 'searchDepth'
-/atom/proc/GetAllContents(searchDepth = 5)
- var/list/toReturn = list()
-
- for(var/atom/part in contents)
- toReturn += part
- if(part.contents.len && searchDepth)
- toReturn += part.GetAllContents(searchDepth - 1)
-
- return toReturn
-
-//Searches contents of the atom and returns the sum of all w_class of obj/item within
-/atom/proc/GetTotalContentsWeight(searchDepth = 5)
- var/weight = 0
- var/list/content = GetAllContents(searchDepth)
- for(var/obj/item/I in content)
- weight += I.w_class
- return weight
-
-//Step-towards method of determining whether one atom can see another. Similar to viewers()
-/proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
- var/turf/current = get_turf(source)
- var/turf/target_turf = get_turf(target)
- var/steps = 1
-
- if(current != target_turf)
- current = get_step_towards(current, target_turf)
- while(current != target_turf)
- if(steps > length)
- return 0
- if(current.opacity)
- return 0
- for(var/thing in current)
- var/atom/A = thing
- if(A.opacity)
- return 0
- current = get_step_towards(current, target_turf)
- steps++
-
- return 1
-
-proc/is_blocked_turf(turf/T, exclude_mobs)
- if(T.density)
- return 1
- for(var/i in T)
- var/atom/A = i
- if(A.density && (!exclude_mobs || !ismob(A)))
- return 1
- return 0
-
-/proc/get_step_towards2(var/atom/ref , var/atom/trg)
- var/base_dir = get_dir(ref, get_step_towards(ref,trg))
- var/turf/temp = get_step_towards(ref,trg)
-
- if(is_blocked_turf(temp))
- var/dir_alt1 = turn(base_dir, 90)
- var/dir_alt2 = turn(base_dir, -90)
- var/turf/turf_last1 = temp
- var/turf/turf_last2 = temp
- var/free_tile = null
- var/breakpoint = 0
-
- while(!free_tile && breakpoint < 10)
- if(!is_blocked_turf(turf_last1))
- free_tile = turf_last1
- break
- if(!is_blocked_turf(turf_last2))
- free_tile = turf_last2
- break
- turf_last1 = get_step(turf_last1,dir_alt1)
- turf_last2 = get_step(turf_last2,dir_alt2)
- breakpoint++
-
- if(!free_tile) return get_step(ref, base_dir)
- else return get_step_towards(ref,free_tile)
-
- else return get_step(ref, base_dir)
-
-//Takes: Anything that could possibly have variables and a varname to check.
-//Returns: 1 if found, 0 if not.
-/proc/hasvar(var/datum/A, var/varname)
- if(A.vars.Find(lowertext(varname))) return 1
- else return 0
-
-//Returns: all the areas in the world
-/proc/return_areas()
- var/list/area/areas = list()
- for(var/area/A in world)
- areas += A
- return areas
-
-//Returns: all the areas in the world, sorted.
-/proc/return_sorted_areas()
- return sortAtom(return_areas())
-
-//Takes: Area type as text string or as typepath OR an instance of the area.
-//Returns: A list of all areas of that type in the world.
-/proc/get_areas(var/areatype)
- if(!areatype) return null
- if(istext(areatype)) areatype = text2path(areatype)
- if(isarea(areatype))
- var/area/areatemp = areatype
- areatype = areatemp.type
-
- var/list/areas = new/list()
- for(var/area/N in world)
- if(istype(N, areatype)) areas += N
- return areas
-
-//Takes: Area type as text string or as typepath OR an instance of the area.
-//Returns: A list of all turfs in areas of that type of that type in the world.
-/proc/get_area_turfs(var/areatype)
- if(!areatype) return null
- if(istext(areatype)) areatype = text2path(areatype)
- if(isarea(areatype))
- var/area/areatemp = areatype
- areatype = areatemp.type
-
- var/list/turfs = new/list()
- for(var/area/N in world)
- if(istype(N, areatype))
- for(var/turf/T in N) turfs += T
- return turfs
-
-//Takes: Area type as text string or as typepath OR an instance of the area.
-//Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world.
-/proc/get_area_all_atoms(var/areatype)
- if(!areatype) return null
- if(istext(areatype)) areatype = text2path(areatype)
- if(isarea(areatype))
- var/area/areatemp = areatype
- areatype = areatemp.type
-
- var/list/atoms = new/list()
- for(var/area/N in world)
- if(istype(N, areatype))
- for(var/atom/A in N)
- atoms += A
- return atoms
-
-/datum/coords //Simple datum for storing coordinates.
- var/x_pos = null
- var/y_pos = null
- var/z_pos = null
-
-/area/proc/move_contents_to(var/area/A, var/turftoleave=null, var/direction = null)
- //Takes: Area. Optional: turf type to leave behind.
- //Returns: Nothing.
- //Notes: Attempts to move the contents of one area to another area.
- // Movement based on lower left corner. Tiles that do not fit
- // into the new area will not be moved.
-
- if(!A || !src) return 0
-
- var/list/turfs_src = get_area_turfs(src.type)
- var/list/turfs_trg = get_area_turfs(A.type)
-
- var/src_min_x = 0
- var/src_min_y = 0
- for(var/turf/T in turfs_src)
- if(T.x < src_min_x || !src_min_x) src_min_x = T.x
- if(T.y < src_min_y || !src_min_y) src_min_y = T.y
-
- var/trg_min_x = 0
- var/trg_min_y = 0
- for(var/turf/T in turfs_trg)
- if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x
- if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y
-
- var/list/refined_src = new/list()
- for(var/turf/T in turfs_src)
- refined_src += T
- refined_src[T] = new/datum/coords
- var/datum/coords/C = refined_src[T]
- C.x_pos = (T.x - src_min_x)
- C.y_pos = (T.y - src_min_y)
-
- var/list/refined_trg = new/list()
- for(var/turf/T in turfs_trg)
- refined_trg += T
- refined_trg[T] = new/datum/coords
- var/datum/coords/C = refined_trg[T]
- C.x_pos = (T.x - trg_min_x)
- C.y_pos = (T.y - trg_min_y)
-
- var/list/fromupdate = new/list()
- var/list/toupdate = new/list()
-
- moving:
- for(var/turf/T in refined_src)
- var/datum/coords/C_src = refined_src[T]
- for(var/turf/B in refined_trg)
- var/datum/coords/C_trg = refined_trg[B]
- if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos)
-
- var/old_dir1 = T.dir
- var/old_icon_state1 = T.icon_state
- var/old_icon1 = T.icon
-
- var/turf/X = B.ChangeTurf(T.type)
- X.dir = old_dir1
- X.icon_state = old_icon_state1
- X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
-
- // Give the new turf our air, if simulated
- if(istype(X, /turf/simulated) && istype(T, /turf/simulated))
- var/turf/simulated/sim = X
- sim.copy_air_with_tile(T)
-
-
- /* Quick visual fix for some weird shuttle corner artefacts when on transit space tiles */
- if(direction && findtext(X.icon_state, "swall_s"))
-
- // Spawn a new shuttle corner object
- var/obj/corner = new()
- corner.loc = X
- corner.density = 1
- corner.anchored = 1
- corner.icon = X.icon
- corner.icon_state = replacetext(X.icon_state, "_s", "_f")
- corner.tag = "delete me"
- corner.name = "wall"
-
- // Find a new turf to take on the property of
- var/turf/nextturf = get_step(corner, direction)
- if(!nextturf || !istype(nextturf, /turf/space))
- nextturf = get_step(corner, turn(direction, 180))
-
-
- // Take on the icon of a neighboring scrolling space icon
- X.icon = nextturf.icon
- X.icon_state = nextturf.icon_state
-
-
- for(var/obj/O in T)
-
- // Reset the shuttle corners
- if(O.tag == "delete me")
- X.icon = 'icons/turf/shuttle.dmi'
- X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state
- X.name = "wall"
- qdel(O) // prevents multiple shuttle corners from stacking
- continue
- if(!istype(O,/obj)) continue
- O.loc.Exited(O)
- O.setLoc(X,teleported=1)
- O.loc.Entered(O)
- for(var/mob/M in T)
- if(!M.move_on_shuttle)
- continue
- M.loc = X
-
-// var/area/AR = X.loc
-
-// if(AR.lighting_use_dynamic) //TODO: rewrite this code so it's not messed by lighting ~Carn
-// X.opacity = !X.opacity
-// X.set_opacity(!X.opacity)
-
- toupdate += X
-
- if(turftoleave)
- fromupdate += T.ChangeTurf(turftoleave)
- else
- T.ChangeTurf(T.baseturf)
-
- refined_src -= T
- refined_trg -= B
- continue moving
-
- if(toupdate.len)
- for(var/turf/simulated/T1 in toupdate)
- SSair.remove_from_active(T1)
- T1.CalculateAdjacentTurfs()
- SSair.add_to_active(T1,1)
-
- if(fromupdate.len)
- for(var/turf/simulated/T2 in fromupdate)
- SSair.remove_from_active(T2)
- T2.CalculateAdjacentTurfs()
- SSair.add_to_active(T2,1)
-
-
-
-
-/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0, var/atom/newloc = null)
- if(!original)
- return null
-
- var/obj/O = null
-
- if(sameloc)
- O=new original.type(original.loc)
- else
- O=new original.type(newloc)
-
- if(perfectcopy)
- if((O) && (original))
- var/static/list/forbidden_vars = list("type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group")
-
- for(var/V in original.vars - forbidden_vars)
- if(istype(original.vars[V],/list))
- var/list/L = original.vars[V]
- O.vars[V] = L.Copy()
- else if(istype(original.vars[V],/datum))
- continue // this would reference the original's object, that will break when it is used or deleted.
- else
- O.vars[V] = original.vars[V]
- if(istype(O))
- O.update_icon()
- return O
-
-/area/proc/copy_contents_to(var/area/A , var/platingRequired = 0 )
- //Takes: Area. Optional: If it should copy to areas that don't have plating
- //Returns: Nothing.
- //Notes: Attempts to move the contents of one area to another area.
- // Movement based on lower left corner. Tiles that do not fit
- // into the new area will not be moved.
-
- if(!A || !src) return 0
-
- var/list/turfs_src = get_area_turfs(src.type)
- var/list/turfs_trg = get_area_turfs(A.type)
-
- var/src_min_x = 0
- var/src_min_y = 0
- for(var/turf/T in turfs_src)
- if(T.x < src_min_x || !src_min_x) src_min_x = T.x
- if(T.y < src_min_y || !src_min_y) src_min_y = T.y
-
- var/trg_min_x = 0
- var/trg_min_y = 0
- for(var/turf/T in turfs_trg)
- if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x
- if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y
-
- var/list/refined_src = new/list()
- for(var/turf/T in turfs_src)
- refined_src += T
- refined_src[T] = new/datum/coords
- var/datum/coords/C = refined_src[T]
- C.x_pos = (T.x - src_min_x)
- C.y_pos = (T.y - src_min_y)
-
- var/list/refined_trg = new/list()
- for(var/turf/T in turfs_trg)
- refined_trg += T
- refined_trg[T] = new/datum/coords
- var/datum/coords/C = refined_trg[T]
- C.x_pos = (T.x - trg_min_x)
- C.y_pos = (T.y - trg_min_y)
-
- var/list/toupdate = new/list()
-
- var/copiedobjs = list()
-
-
- moving:
- for(var/turf/T in refined_src)
- var/datum/coords/C_src = refined_src[T]
- for(var/turf/B in refined_trg)
- var/datum/coords/C_trg = refined_trg[B]
- if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos)
-
- var/old_dir1 = T.dir
- var/old_icon_state1 = T.icon_state
- var/old_icon1 = T.icon
-
- if(platingRequired)
- if(istype(B, /turf/space))
- continue moving
-
- var/turf/X = new T.type(B)
- X.dir = old_dir1
- X.icon_state = old_icon_state1
- X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
-
-
- var/list/objs = new/list()
- var/list/newobjs = new/list()
- var/list/mobs = new/list()
- var/list/newmobs = new/list()
-
- for(var/obj/O in T)
-
- if(!istype(O,/obj))
- continue
-
- objs += O
-
-
- for(var/obj/O in objs)
- newobjs += DuplicateObject(O , 1)
-
-
- for(var/obj/O in newobjs)
- O.loc = X
-
- for(var/mob/M in T)
-
- if(!M.move_on_shuttle)
- continue
- mobs += M
-
- for(var/mob/M in mobs)
- newmobs += DuplicateObject(M , 1)
-
- for(var/mob/M in newmobs)
- M.loc = X
-
- copiedobjs += newobjs
- copiedobjs += newmobs
-
-
-
- for(var/V in T.vars)
- if(!(V in list("type","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity", "group")))
- X.vars[V] = T.vars[V]
-
-// var/area/AR = X.loc
-
-// if(AR.lighting_use_dynamic)
-// X.opacity = !X.opacity
-// X.sd_set_opacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn
-
- toupdate += X
-
- refined_src -= T
- refined_trg -= B
- continue moving
-
-
-
- if(toupdate.len)
- for(var/turf/simulated/T1 in toupdate)
- T1.CalculateAdjacentTurfs()
- SSair.add_to_active(T1,1)
-
-
- return copiedobjs
-
-
-
-proc/get_cardinal_dir(atom/A, atom/B)
- var/dx = abs(B.x - A.x)
- var/dy = abs(B.y - A.y)
- return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12)
-
-//chances are 1:value. anyprob(1) will always return true
-proc/anyprob(value)
- return (rand(1,value)==value)
-
-proc/view_or_range(distance = world.view , center = usr , type)
- switch(type)
- if("view")
- . = view(distance,center)
- if("range")
- . = range(distance,center)
- return
-
-proc/oview_or_orange(distance = world.view , center = usr , type)
- switch(type)
- if("view")
- . = oview(distance,center)
- if("range")
- . = orange(distance,center)
- return
-
-proc/get_mob_with_client_list()
- var/list/mobs = list()
- for(var/mob/M in GLOB.mob_list)
- if(M.client)
- mobs += M
- return mobs
-
-
-/proc/parse_zone(zone)
- if(zone == "r_hand") return "right hand"
- else if(zone == "l_hand") return "left hand"
- else if(zone == "l_arm") return "left arm"
- else if(zone == "r_arm") return "right arm"
- else if(zone == "l_leg") return "left leg"
- else if(zone == "r_leg") return "right leg"
- else if(zone == "l_foot") return "left foot"
- else if(zone == "r_foot") return "right foot"
- else if(zone == "l_hand") return "left hand"
- else if(zone == "r_hand") return "right hand"
- else if(zone == "l_foot") return "left foot"
- else if(zone == "r_foot") return "right foot"
- else return zone
-
-/*
-
- Gets the turf this atom's *ICON* appears to inhabit
- It takes into account:
- * Pixel_x/y
- * Matrix x/y
-
- NOTE: if your atom has non-standard bounds then this proc
- will handle it, but:
- * if the bounds are even, then there are an even amount of "middle" turfs, the one to the EAST, NORTH, or BOTH is picked
- (this may seem bad, but you're atleast as close to the center of the atom as possible, better than byond's default loc being all the way off)
- * if the bounds are odd, the true middle turf of the atom is returned
-
-*/
-
-/proc/get_turf_pixel(atom/movable/AM)
- if(!istype(AM))
- return
-
- //Find AM's matrix so we can use it's X/Y pixel shifts
- var/matrix/M = matrix(AM.transform)
-
- var/pixel_x_offset = AM.pixel_x + M.get_x_shift()
- var/pixel_y_offset = AM.pixel_y + M.get_y_shift()
-
- //Irregular objects
- if(AM.bound_height != world.icon_size || AM.bound_width != world.icon_size)
- var/icon/AMicon = icon(AM.icon, AM.icon_state)
- pixel_x_offset += ((AMicon.Width()/world.icon_size)-1)*(world.icon_size*0.5)
- pixel_y_offset += ((AMicon.Height()/world.icon_size)-1)*(world.icon_size*0.5)
- qdel(AMicon)
-
- //DY and DX
- var/rough_x = round(round(pixel_x_offset,world.icon_size)/world.icon_size)
- var/rough_y = round(round(pixel_y_offset,world.icon_size)/world.icon_size)
-
- //Find coordinates
- var/turf/T = get_turf(AM) //use AM's turfs, as it's coords are the same as AM's AND AM's coords are lost if it is inside another atom
- if(!T)
- return null
- var/final_x = T.x + rough_x
- var/final_y = T.y + rough_y
-
- if(final_x || final_y)
- return locate(final_x, final_y, T.z)
-
-//Finds the distance between two atoms, in pixels
-//centered = 0 counts from turf edge to edge
-//centered = 1 counts from turf center to turf center
-//of course mathematically this is just adding world.icon_size on again
-/proc/getPixelDistance(var/atom/A, var/atom/B, var/centered = 1)
- if(!istype(A)||!istype(B))
- return 0
- . = bounds_dist(A, B) + sqrt((((A.pixel_x+B.pixel_x)**2) + ((A.pixel_y+B.pixel_y)**2)))
- if(centered)
- . += world.icon_size
-
-/proc/get(atom/loc, type)
- while(loc)
- if(istype(loc, type))
- return loc
- loc = loc.loc
- return null
-
-/proc/get_turf_or_move(turf/location)
- return get_turf(location)
-
-
-//For objects that should embed, but make no sense being is_sharp or is_pointed()
-//e.g: rods
-var/list/can_embed_types = typecacheof(list(
- /obj/item/stack/rods,
- /obj/item/pipe))
-
-/proc/can_embed(obj/item/W)
- if(is_sharp(W))
- return 1
- if(is_pointed(W))
- return 1
-
- if(is_type_in_typecache(W, can_embed_types))
- return 1
-
-//Quick type checks for some tools
-var/global/list/common_tools = list(
-/obj/item/stack/cable_coil,
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/screwdriver,
-/obj/item/wirecutters,
-/obj/item/multitool,
-/obj/item/crowbar)
-
-/proc/istool(O)
- if(O && is_type_in_list(O, common_tools))
- return 1
- return 0
-
-/proc/iswrench(O)
- if(istype(O, /obj/item/wrench))
- return 1
- return 0
-
-/proc/iswelder(O)
- if(istype(O, /obj/item/weldingtool))
- return 1
- return 0
-
-/proc/iscoil(O)
- if(istype(O, /obj/item/stack/cable_coil))
- return 1
- return 0
-
-/proc/iswirecutter(O)
- if(istype(O, /obj/item/wirecutters))
- return 1
- return 0
-
-/proc/isscrewdriver(O)
- if(istype(O, /obj/item/screwdriver))
- return 1
- return 0
-
-/proc/ismultitool(O)
- if(istype(O, /obj/item/multitool))
- return 1
- return 0
-
-/proc/iscrowbar(O)
- if(istype(O, /obj/item/crowbar))
- return 1
- return 0
-
-/proc/ispowertool(O)//used to check if a tool can force powered doors
- if(istype(O, /obj/item/crowbar/power) || istype(O, /obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw))
- return TRUE
- return FALSE
-
-/proc/iswire(O)
- if(istype(O, /obj/item/stack/cable_coil))
- return 1
- return 0
-
-/proc/is_hot(obj/item/W as obj)
- if(istype(W, /obj/item/weldingtool))
- var/obj/item/weldingtool/O = W
- if(O.isOn())
- return 2500
- else
- return 0
- if(istype(W, /obj/item/lighter))
- var/obj/item/lighter/O = W
- if(O.lit)
- return 1500
- else
- return 0
- if(istype(W, /obj/item/match))
- var/obj/item/match/O = W
- if(O.lit == 1)
- return 1000
- else
- return 0
- if(istype(W, /obj/item/clothing/mask/cigarette))
- var/obj/item/clothing/mask/cigarette/O = W
- if(O.lit)
- return 1000
- else
- return 0
- if(istype(W, /obj/item/candle))
- var/obj/item/candle/O = W
- if(O.lit)
- return 1000
- else
- return 0
- if(istype(W, /obj/item/flashlight/flare))
- var/obj/item/flashlight/flare/O = W
- if(O.on)
- return 1000
- else
- return 0
- if(istype(W, /obj/item/gun/energy/plasmacutter))
- return 3800
- if(istype(W, /obj/item/melee/energy))
- var/obj/item/melee/energy/O = W
- if(O.active)
- return 3500
- else
- return 0
- if(istype(W, /obj/item/assembly/igniter))
- return 20000
- else
- return 0
-
-//Whether or not the given item counts as sharp in terms of dealing damage
-/proc/is_sharp(obj/O)
- if(!O)
- return 0
- if(O.sharp)
- return 1
- return 0
-
-/proc/is_surgery_tool(obj/item/W as obj)
- return ( \
- istype(W, /obj/item/scalpel) || \
- istype(W, /obj/item/hemostat) || \
- istype(W, /obj/item/retractor) || \
- istype(W, /obj/item/cautery) || \
- istype(W, /obj/item/bonegel) || \
- istype(W, /obj/item/bonesetter)
- )
-
-/proc/reverse_direction(var/dir)
- switch(dir)
- if(NORTH)
- return SOUTH
- if(NORTHEAST)
- return SOUTHWEST
- if(EAST)
- return WEST
- if(SOUTHEAST)
- return NORTHWEST
- if(SOUTH)
- return NORTH
- if(SOUTHWEST)
- return NORTHEAST
- if(WEST)
- return EAST
- if(NORTHWEST)
- return SOUTHEAST
-
-/*
-Checks if that loc and dir has a item on the wall
-*/
-var/list/static/global/wall_items = typecacheof(list(/obj/machinery/power/apc, /obj/machinery/alarm,
- /obj/item/radio/intercom, /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank,
- /obj/machinery/status_display, /obj/machinery/requests_console, /obj/machinery/light_switch, /obj/structure/sign,
- /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/door_control,
- /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/airlock,
- /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth,
- /obj/structure/mirror, /obj/structure/closet/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment,
- /obj/structure/sign))
-
-/proc/gotwallitem(loc, dir)
- for(var/obj/O in loc)
- if(is_type_in_typecache(O, wall_items))
- //Direction works sometimes
- if(O.dir == dir)
- return 1
-
- //Some stuff doesn't use dir properly, so we need to check pixel instead
- switch(dir)
- if(SOUTH)
- if(O.pixel_y > 10)
- return 1
- if(NORTH)
- if(O.pixel_y < -10)
- return 1
- if(WEST)
- if(O.pixel_x > 10)
- return 1
- if(EAST)
- if(O.pixel_x < -10)
- return 1
-
- //Some stuff is placed directly on the wallturf (signs)
- for(var/obj/O in get_step(loc, dir))
- if(is_type_in_typecache(O, wall_items))
- if(abs(O.pixel_x) <= 10 && abs(O.pixel_y) <= 10)
- return 1
- return 0
-
-
-proc/get_angle(atom/a, atom/b)
- return atan2(b.y - a.y, b.x - a.x)
-
-proc/atan2(x, y)
- if(!x && !y) return 0
- return y >= 0 ? arccos(x / sqrt(x * x + y * y)) : -arccos(x / sqrt(x * x + y * y))
-
-/proc/format_text(text)
- return replacetext(replacetext(text,"\proper ",""),"\improper ","")
-
-/*
-Standard way to write links -Sayu
-*/
-
-/proc/topic_link(var/datum/D, var/arglist, var/content)
- if(istype(arglist,/list))
- arglist = list2params(arglist)
- return "[content]"
-
-
-
-/proc/get_location_accessible(mob/M, location)
- var/covered_locations = 0 //based on body_parts_covered
- var/face_covered = 0 //based on flags_inv
- var/eyesmouth_covered = 0 //based on flags_cover
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- for(var/obj/item/clothing/I in list(C.back, C.wear_mask))
- covered_locations |= I.body_parts_covered
- face_covered |= I.flags_inv
- eyesmouth_covered |= I.flags_cover
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- for(var/obj/item/I in list(H.wear_suit, H.w_uniform, H.shoes, H.belt, H.gloves, H.glasses, H.head, H.r_ear, H.l_ear))
- covered_locations |= I.body_parts_covered
- face_covered |= I.flags_inv
- eyesmouth_covered |= I.flags_cover
-
- switch(location)
- if("head")
- if(covered_locations & HEAD)
- return 0
- if("eyes")
- if(face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES || eyesmouth_covered & HEADCOVERSEYES)
- return 0
- if("mouth")
- if(covered_locations & HEAD || face_covered & HIDEFACE || eyesmouth_covered & MASKCOVERSMOUTH)
- return 0
- if("chest")
- if(covered_locations & UPPER_TORSO)
- return 0
- if("groin")
- if(covered_locations & LOWER_TORSO)
- return 0
- if("l_arm")
- if(covered_locations & ARM_LEFT)
- return 0
- if("r_arm")
- if(covered_locations & ARM_RIGHT)
- return 0
- if("l_leg")
- if(covered_locations & LEG_LEFT)
- return 0
- if("r_leg")
- if(covered_locations & LEG_RIGHT)
- return 0
- if("l_hand")
- if(covered_locations & HAND_LEFT)
- return 0
- if("r_hand")
- if(covered_locations & HAND_RIGHT)
- return 0
- if("l_foot")
- if(covered_locations & FOOT_LEFT)
- return 0
- if("r_foot")
- if(covered_locations & FOOT_RIGHT)
- return 0
-
- return 1
-
-/proc/check_target_facings(mob/living/initator, mob/living/target)
- /*This can be used to add additional effects on interactions between mobs depending on how the mobs are facing each other, such as adding a crit damage to blows to the back of a guy's head.
- Given how click code currently works (Nov '13), the initiating mob will be facing the target mob most of the time
- That said, this proc should not be used if the change facing proc of the click code is overriden at the same time*/
- if(!ismob(target) || target.lying)
- //Make sure we are not doing this for things that can't have a logical direction to the players given that the target would be on their side
- return FACING_FAILED
- if(initator.dir == target.dir) //mobs are facing the same direction
- return FACING_SAME_DIR
- if(is_A_facing_B(initator, target) && is_A_facing_B(target, initator)) //mobs are facing each other
- return FACING_EACHOTHER
- if(initator.dir + 2 == target.dir || initator.dir - 2 == target.dir || initator.dir + 6 == target.dir || initator.dir - 6 == target.dir) //Initating mob is looking at the target, while the target mob is looking in a direction perpendicular to the 1st
- return FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR
-
-
-atom/proc/GetTypeInAllContents(typepath)
- var/list/processing_list = list(src)
- var/list/processed = list()
-
- var/atom/found = null
-
- while(processing_list.len && found==null)
- var/atom/A = processing_list[1]
- if(istype(A, typepath))
- found = A
-
- processing_list -= A
-
- for(var/atom/a in A)
- if(!(a in processed))
- processing_list |= a
-
- processed |= A
-
- return found
-
-/proc/random_step(atom/movable/AM, steps, chance)
- var/initial_chance = chance
- while(steps > 0)
- if(prob(chance))
- step(AM, pick(alldirs))
- chance = max(chance - (initial_chance / steps), 0)
- steps--
-
-/proc/get_random_colour(var/simple, var/lower, var/upper)
- var/colour
- if(simple)
- colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))
- else
- for(var/i=1;i<=3;i++)
- var/temp_col = "[num2hex(rand(lower,upper))]"
- if(length(temp_col )<2)
- temp_col = "0[temp_col]"
- colour += temp_col
- return colour
-
-/proc/get_distant_turf(var/turf/T,var/direction,var/distance)
- if(!T || !direction || !distance) return
-
- var/dest_x = T.x
- var/dest_y = T.y
- var/dest_z = T.z
-
- if(direction & NORTH)
- dest_y = min(world.maxy, dest_y+distance)
- if(direction & SOUTH)
- dest_y = max(0, dest_y-distance)
- if(direction & EAST)
- dest_x = min(world.maxy, dest_x+distance)
- if(direction & WEST)
- dest_x = max(0, dest_x-distance)
-
- return locate(dest_x,dest_y,dest_z)
-
-var/mob/dview/dview_mob = new
-
-//Version of view() which ignores darkness, because BYOND doesn't have it.
-/proc/dview(var/range = world.view, var/center, var/invis_flags = 0)
- if(!center)
- return
-
- dview_mob.loc = center
-
- dview_mob.see_invisible = invis_flags
-
- . = view(range, dview_mob)
- dview_mob.loc = null
-
-/mob/dview
- invisibility = 101
- density = 0
- move_force = 0
- pull_force = 0
- move_resist = INFINITY
- simulated = 0
- canmove = FALSE
- see_in_dark = 1e6
-
-/mob/dview/New() //For whatever reason, if this isn't called, then BYOND will throw a type mismatch runtime when attempting to add this to the mobs list. -Fox
-
-/mob/dview/Destroy()
- // should never be deleted
- return QDEL_HINT_LETMELIVE
-
-/proc/IsValidSrc(A)
- if(istype(A, /datum))
- var/datum/D = A
- return !QDELETED(D)
- if(istype(A, /client))
- return TRUE
- return FALSE
-
-//can a window be here, or is there a window blocking it?
-/proc/valid_window_location(turf/T, dir_to_check)
- if(!T)
- return FALSE
- for(var/obj/O in T)
- if(istype(O, /obj/machinery/door/window) && (O.dir == dir_to_check || dir_to_check == FULLTILE_WINDOW_DIR))
- return FALSE
- if(istype(O, /obj/structure/windoor_assembly))
- var/obj/structure/windoor_assembly/W = O
- if(W.ini_dir == dir_to_check || dir_to_check == FULLTILE_WINDOW_DIR)
- return FALSE
- if(istype(O, /obj/structure/window))
- var/obj/structure/window/W = O
- if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR)
- return FALSE
- return TRUE
-
-//Get the dir to the RIGHT of dir if they were on a clock
-//NORTH --> NORTHEAST
-/proc/get_clockwise_dir(dir)
- . = angle2dir(dir2angle(dir)+45)
-
-//Get the dir to the LEFT of dir if they were on a clock
-//NORTH --> NORTHWEST
-/proc/get_anticlockwise_dir(dir)
- . = angle2dir(dir2angle(dir)-45)
-
-
-//Compare A's dir, the clockwise dir of A and the anticlockwise dir of A
-//To the opposite dir of the dir returned by get_dir(B,A)
-//If one of them is a match, then A is facing B
-/proc/is_A_facing_B(atom/A, atom/B)
- if(!istype(A) || !istype(B))
- return 0
- if(isliving(A))
- var/mob/living/LA = A
- if(LA.lying)
- return 0
- var/goal_dir = angle2dir(dir2angle(get_dir(B, A)+180))
- var/clockwise_A_dir = get_clockwise_dir(A.dir)
- var/anticlockwise_A_dir = get_anticlockwise_dir(B.dir)
-
- if(A.dir == goal_dir || clockwise_A_dir == goal_dir || anticlockwise_A_dir == goal_dir)
- return 1
- return 0
-
-//This is just so you can stop an orbit.
-//orbit() can run without it (swap orbiting for A)
-//but then you can never stop it and that's just silly.
-/atom/movable/var/atom/orbiting = null
-
-//A: atom to orbit
-//radius: range to orbit at, radius of the circle formed by orbiting
-//clockwise: whether you orbit clockwise or anti clockwise
-//rotation_speed: how fast to rotate
-//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
-//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
-//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts)
-
-/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE, forceMove = FALSE)
- if(!istype(A))
- return
-
- if(orbiting)
- stop_orbit()
-
- orbiting = A
- var/matrix/initial_transform = matrix(transform)
- var/lastloc = loc
-
- //Head first!
- if(pre_rotation)
- var/matrix/M = matrix(transform)
- var/pre_rot = 90
- if(!clockwise)
- pre_rot = -90
- M.Turn(pre_rot)
- transform = M
-
- var/matrix/shift = matrix(transform)
- shift.Translate(0,radius)
- transform = shift
-
- SpinAnimation(rotation_speed, -1, clockwise, rotation_segments)
-
- //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
- transform = initial_transform
- while(orbiting && orbiting == A && A.loc)
- var/targetloc = get_turf(A)
- if(!lockinorbit && loc != lastloc && loc != targetloc)
- break
- if(forceMove)
- forceMove(targetloc)
- else
- loc = targetloc
- lastloc = loc
- sleep(0.6)
-
- if(orbiting == A) //make sure we haven't started orbiting something else.
- orbiting = null
- SpinAnimation(0,0)
-
-
-
-/atom/movable/proc/stop_orbit()
- orbiting = null
-
-//Centers an image.
-//Requires:
-//The Image
-//The x dimension of the icon file used in the image
-//The y dimension of the icon file used in the image
-// eg: center_image(I, 32,32)
-// eg2: center_image(I, 96,96)
-/proc/center_image(var/image/I, x_dimension = 0, y_dimension = 0)
- if(!I)
- return
-
- if(!x_dimension || !y_dimension)
- return
-
- //Get out of here, punk ass kids calling procs needlessly
- if((x_dimension == world.icon_size) && (y_dimension == world.icon_size))
- return I
-
- //Offset the image so that it's bottom left corner is shifted this many pixels
- //This makes it infinitely easier to draw larger inhands/images larger than world.iconsize
- //but still use them in game
- var/x_offset = -((x_dimension/world.icon_size)-1)*(world.icon_size*0.5)
- var/y_offset = -((y_dimension/world.icon_size)-1)*(world.icon_size*0.5)
-
- //Correct values under world.icon_size
- if(x_dimension < world.icon_size)
- x_offset *= -1
- if(y_dimension < world.icon_size)
- y_offset *= -1
-
- I.pixel_x = x_offset
- I.pixel_y = y_offset
-
- return I
-
-//similar function to RANGE_TURFS(), but will search spiralling outwards from the center (like the above, but only turfs)
-/proc/spiral_range_turfs(dist=0, center=usr, orange=0)
- if(!dist)
- if(!orange)
- return list(center)
- else
- return list()
-
- var/turf/t_center = get_turf(center)
- if(!t_center)
- return list()
-
- var/list/L = list()
- var/turf/T
- var/y
- var/x
- var/c_dist = 1
-
- if(!orange)
- L += t_center
-
- while( c_dist <= dist )
- y = t_center.y + c_dist
- x = t_center.x - c_dist + 1
- for(x in x to t_center.x+c_dist)
- T = locate(x,y,t_center.z)
- if(T)
- L += T
-
- y = t_center.y + c_dist - 1
- x = t_center.x + c_dist
- for(y in t_center.y-c_dist to y)
- T = locate(x,y,t_center.z)
- if(T)
- L += T
-
- y = t_center.y - c_dist
- x = t_center.x + c_dist - 1
- for(x in t_center.x-c_dist to x)
- T = locate(x,y,t_center.z)
- if(T)
- L += T
-
- y = t_center.y - c_dist + 1
- x = t_center.x - c_dist
- for(y in y to t_center.y+c_dist)
- T = locate(x,y,t_center.z)
- if(T)
- L += T
- c_dist++
-
- return L
-
-//ultra range (no limitations on distance, faster than range for distances > 8); including areas drastically decreases performance
-/proc/urange(dist=0, atom/center=usr, orange=0, areas=0)
- if(!dist)
- if(!orange)
- return list(center)
- else
- return list()
-
- var/list/turfs = RANGE_TURFS(dist, center)
- if(orange)
- turfs -= get_turf(center)
- . = list()
- for(var/V in turfs)
- var/turf/T = V
- . += T
- . += T.contents
- if(areas)
- . |= T.loc
-
-/proc/turf_clear(turf/T)
- for(var/atom/A in T)
- if(A.simulated)
- return FALSE
- return TRUE
-
-/proc/screen_loc2turf(scr_loc, turf/origin)
- var/tX = splittext(scr_loc, ",")
- var/tY = splittext(tX[2], ":")
- var/tZ = origin.z
- tY = tY[1]
- tX = splittext(tX[1], ":")
- tX = tX[1]
- tX = max(1, min(world.maxx, origin.x + (text2num(tX) - (world.view + 1))))
- tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1))))
- return locate(tX, tY, tZ)
-
-/proc/get_closest_atom(type, list, source)
- var/closest_atom
- var/closest_distance
- for(var/A in list)
- if(!istype(A, type))
- continue
- var/distance = get_dist(source, A)
- if(!closest_distance)
- closest_distance = distance
- closest_atom = A
- else
- if(closest_distance > distance)
- closest_distance = distance
- closest_atom = A
- return closest_atom
-
-/proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
- if(value == FALSE) //nothing should be calling us with a number, so this is safe
- value = input("Enter type to find (blank for all, cancel to cancel)", "Search for type") as null|text
- if(isnull(value))
- return
- value = trim(value)
- if(!isnull(value) && value != "")
- matches = filter_fancy_list(matches, value)
-
- if(matches.len == 0)
- return
-
- var/chosen
- if(matches.len == 1)
- chosen = matches[1]
- else
- chosen = input("Select a type", "Pick Type", matches[1]) as null|anything in matches
- if(!chosen)
- return
- chosen = matches[chosen]
- return chosen
-
-/proc/make_types_fancy(var/list/types)
- if(ispath(types))
- types = list(types)
- . = list()
- for(var/type in types)
- var/typename = "[type]"
- var/static/list/TYPES_SHORTCUTS = list(
- //longest paths comes first - otherwise they get shadowed by the more generic ones
- /obj/effect/decal/cleanable = "CLEANABLE",
- /obj/effect = "EFFECT",
- /obj/item/ammo_casing = "AMMO",
- /obj/item/book/manual = "MANUAL",
- /obj/item/borg/upgrade = "BORG_UPGRADE",
- /obj/item/cartridge = "PDA_CART",
- /obj/item/clothing/head/helmet/space = "SPESSHELMET",
- /obj/item/clothing/head = "HEAD",
- /obj/item/clothing/under = "UNIFORM",
- /obj/item/clothing/shoes = "SHOES",
- /obj/item/clothing/suit = "SUIT",
- /obj/item/clothing/gloves = "GLOVES",
- /obj/item/clothing/mask/cigarette = "CIGARRETE", // oof
- /obj/item/clothing/mask = "MASK",
- /obj/item/clothing/glasses = "GLASSES",
- /obj/item/clothing = "CLOTHING",
- /obj/item/grenade/clusterbuster = "CLUSTERBUSTER",
- /obj/item/grenade = "GRENADE",
- /obj/item/gun = "GUN",
- /obj/item/implant = "IMPLANT",
- /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK",
- /obj/item/mecha_parts/mecha_equipment/weapon = "MECHA_WEAPON",
- /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP",
- /obj/item/melee = "MELEE",
- /obj/item/mmi = "MMI",
- /obj/item/nullrod = "NULLROD",
- /obj/item/organ/external = "EXT_ORG",
- /obj/item/organ/internal/cyberimp = "CYBERIMP",
- /obj/item/organ/internal = "INT_ORG",
- /obj/item/organ = "ORGAN",
- /obj/item/pda = "PDA",
- /obj/item/projectile = "PROJ",
- /obj/item/radio/headset = "HEADSET",
- /obj/item/reagent_containers/glass/beaker = "BEAKER",
- /obj/item/reagent_containers/glass/bottle = "BOTTLE",
- /obj/item/reagent_containers/food/pill/patch = "PATCH",
- /obj/item/reagent_containers/food/pill = "PILL",
- /obj/item/reagent_containers/food/drinks = "DRINK",
- /obj/item/reagent_containers/food = "FOOD",
- /obj/item/reagent_containers/syringe = "SYRINGE",
- /obj/item/reagent_containers = "REAGENT_CONTAINERS",
- /obj/item/robot_parts = "ROBOT_PARTS",
- /obj/item/seeds = "SEED",
- /obj/item/slime_extract = "SLIME_CORE",
- /obj/item/spacepod_equipment/weaponry = "POD_WEAPON",
- /obj/item/spacepod_equipment = "POD_EQUIP",
- /obj/item/stack/sheet/mineral = "MINERAL",
- /obj/item/stack/sheet = "SHEET",
- /obj/item/stack/tile = "TILE",
- /obj/item/stack = "STACK",
- /obj/item/stock_parts/cell = "POWERCELL",
- /obj/item/stock_parts = "STOCK_PARTS",
- /obj/item/storage/firstaid = "FIRSTAID",
- /obj/item/storage = "STORAGE",
- /obj/item/tank = "GAS_TANK",
- /obj/item/toy/crayon = "CRAYON",
- /obj/item/toy = "TOY",
- /obj/item = "ITEM",
- /obj/machinery/atmospherics = "ATMOS_MACH",
- /obj/machinery/computer = "CONSOLE",
- /obj/machinery/door/airlock = "AIRLOCK",
- /obj/machinery/door = "DOOR",
- /obj/machinery/kitchen_machine = "KITCHEN",
- /obj/machinery/portable_atmospherics/canister = "CANISTER",
- /obj/machinery/portable_atmospherics = "PORT_ATMOS",
- /obj/machinery/power = "POWER",
- /obj/machinery/telecomms = "TCOMMS",
- /obj/machinery = "MACHINERY",
- /obj/mecha = "MECHA",
- /obj/structure/closet/crate = "CRATE",
- /obj/structure/closet = "CLOSET",
- /obj/structure/statue = "STATUE",
- /obj/structure/chair = "CHAIR", // oh no
- /obj/structure/bed = "BED",
- /obj/structure/chair/stool = "STOOL",
- /obj/structure/table = "TABLE",
- /obj/structure = "STRUCTURE",
- /obj/vehicle = "VEHICLE",
- /obj = "O",
- /datum = "D",
- /turf/simulated/floor = "SIM_FLOOR",
- /turf/simulated/wall = "SIM_WALL",
- /turf/unsimulated/floor = "UNSIM_FLOOR",
- /turf/unsimulated/wall = "UNSIM_WALL",
- /turf = "T",
- /mob/living/carbon/alien = "XENO",
- /mob/living/carbon/human = "HUMAN",
- /mob/living/carbon = "CARBON",
- /mob/living/silicon/robot = "CYBORG",
- /mob/living/silicon/ai = "AI",
- /mob/living/silicon = "SILICON",
- /mob/living/simple_animal/bot = "BOT",
- /mob/living/simple_animal = "SIMPLE",
- /mob/living = "LIVING",
- /mob = "M"
- )
- for(var/tn in TYPES_SHORTCUTS)
- if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/")
- typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/"))
- break
- .[typename] = type
-
-
-/proc/get_fancy_list_of_atom_types()
- var/static/list/pre_generated_list
- if(!pre_generated_list) //init
- pre_generated_list = make_types_fancy(typesof(/atom))
- return pre_generated_list
-
-
-/proc/get_fancy_list_of_datum_types()
- var/static/list/pre_generated_list
- if(!pre_generated_list) //init
- pre_generated_list = make_types_fancy(sortList(typesof(/datum) - typesof(/atom)))
- return pre_generated_list
-
-
-/proc/filter_fancy_list(list/L, filter as text)
- var/list/matches = new
- for(var/key in L)
- var/value = L[key]
- if(findtext("[key]", filter) || findtext("[value]", filter))
- matches[key] = value
- return matches
-
-//Key thing that stops lag. Cornerstone of performance in ss13, Just sitting here, in unsorted.dm.
-
-//Increases delay as the server gets more overloaded,
-//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful
-#define DELTA_CALC max(((max(TICK_USAGE, world.cpu) / 100) * max(Master.sleep_delta-1,1)), 1)
-
-//returns the number of ticks slept
-/proc/stoplag(initial_delay)
- if(!Master || !(Master.current_runlevel & RUNLEVELS_DEFAULT))
- sleep(world.tick_lag)
- return 1
- if(!initial_delay)
- initial_delay = world.tick_lag
- . = 0
- var/i = DS2TICKS(initial_delay)
- do
- . += CEILING(i*DELTA_CALC, 1)
- sleep(i*world.tick_lag*DELTA_CALC)
- i *= 2
- while(TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
-
-#undef DELTA_CALC
-
-// This proc gets a list of all "points of interest" (poi's) that can be used by admins to track valuable mobs or atoms (such as the nuke disk).
-/proc/getpois(mobs_only=0,skip_mindless=0)
- var/list/mobs = sortmobs()
- var/list/names = list()
- var/list/pois = list()
- var/list/namecounts = list()
-
- for(var/mob/M in mobs)
- if(skip_mindless && (!M.mind && !M.ckey))
- if(!isbot(M) && !istype(M, /mob/camera/))
- continue
- if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins
- continue
- var/name = M.name
- if(name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if(M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if(M.stat == DEAD)
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- else
- name += " \[dead\]"
- pois[name] = M
-
- if(!mobs_only)
- for(var/atom/A in GLOB.poi_list)
- if(!A || !A.loc)
- continue
- var/name = A.name
- if(names.Find(name))
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- pois[name] = A
-
- return pois
-
-/proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20)
- var/client/C
- if(istype(mob_or_client, /mob))
- var/mob/M = mob_or_client
- if(M.client)
- C = M.client
- else
- return
- else if(istype(mob_or_client, /client))
- C = mob_or_client
-
- if(!istype(C))
- return
-
- C.color = flash_color
- spawn(0)
- animate(C, color = initial(C.color), time = flash_time)
-
-#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
-
-/proc/make_bit_triplet()
- var/list/num_sample = list(1, 2, 3, 4, 5, 6, 7, 8, 9)
- var/result = 0
- for(var/i = 0, i < 3, i++)
- var/num = pick(num_sample)
- num_sample -= num
- result += (1 << num)
- return result
-
-/proc/pixel_shift_dir(var/dir, var/amount_x = 32, var/amount_y = 32) //Returns a list with pixel_shift values that will shift an object's icon one tile in the direction passed.
- amount_x = min(max(0, amount_x), 32) //No less than 0, no greater than 32.
- amount_y = min(max(0, amount_x), 32)
- var/list/shift = list("x" = 0, "y" = 0)
- switch(dir)
- if(NORTH)
- shift["y"] = amount_y
- if(SOUTH)
- shift["y"] = -amount_y
- if(EAST)
- shift["x"] = amount_x
- if(WEST)
- shift["x"] = -amount_x
- if(NORTHEAST)
- shift = list("x" = amount_x, "y" = amount_y)
- if(NORTHWEST)
- shift = list("x" = -amount_x, "y" = amount_y)
- if(SOUTHEAST)
- shift = list("x" = amount_x, "y" = -amount_y)
- if(SOUTHWEST)
- shift = list("x" = -amount_x, "y" = -amount_y)
-
- return shift
-
-//Return a list of atoms in a location of a given type. Can be refined to look for pixel-shift.
-/proc/get_atoms_of_type(var/atom/here, var/type, var/check_shift, var/shift_x = 0, var/shift_y = 0)
- . = list()
- if(here)
- for(var/atom/thing in here)
- if(istype(thing, type) && (check_shift && thing.pixel_x == shift_x && thing.pixel_y == shift_y))
- . += thing
-
-//gives us the stack trace from CRASH() without ending the current proc.
-/proc/stack_trace(msg)
- CRASH(msg)
-
-/datum/proc/stack_trace(msg)
- CRASH(msg)
-
-/proc/pass()
- return
-
-/atom/proc/Shake(pixelshiftx = 15, pixelshifty = 15, duration = 250)
- var/initialpixelx = pixel_x
- var/initialpixely = pixel_y
- var/shiftx = rand(-pixelshiftx,pixelshiftx)
- var/shifty = rand(-pixelshifty,pixelshifty)
- animate(src, pixel_x = pixel_x + shiftx, pixel_y = pixel_y + shifty, time = 0.2, loop = duration)
- pixel_x = initialpixelx
- pixel_y = initialpixely
-
-/proc/params2turf(scr_loc, turf/origin, client/C)
- if(!scr_loc)
- return null
- var/tX = splittext(scr_loc, ",")
- var/tY = splittext(tX[2], ":")
- var/tZ = origin.z
- tY = tY[1]
- tX = splittext(tX[1], ":")
- tX = tX[1]
- var/list/actual_view = getviewsize(C ? C.view : world.view)
- tX = Clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx)
- tY = Clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy)
- return locate(tX, tY, tZ)
+/*
+ * A large number of misc global procs.
+ */
+
+ /* Get the direction of startObj relative to endObj.
+ * Return values: To the right, 1. Below, 2. To the left, 3. Above, 4. Not found adjacent in cardinal directions, 0.
+ */
+/proc/getRelativeDirection(var/atom/movable/startObj, var/atom/movable/endObj)
+ if(endObj.x == startObj.x + 1 && endObj.y == startObj.y)
+ return EAST
+
+ if(endObj.x == startObj.x - 1 && endObj.y == startObj.y)
+ return WEST
+
+ if(endObj.y == startObj.y + 1 && endObj.x == startObj.x)
+ return NORTH
+
+ if(endObj.y == startObj.y - 1 && endObj.x == startObj.x)
+ return SOUTH
+
+ return 0
+
+//Inverts the colour of an HTML string
+/proc/invertHTML(HTMLstring)
+
+ if(!( istext(HTMLstring) ))
+ CRASH("Given non-text argument!")
+ return
+ else
+ if(length(HTMLstring) != 7)
+ CRASH("Given non-HTML argument!")
+ return
+ var/textr = copytext(HTMLstring, 2, 4)
+ var/textg = copytext(HTMLstring, 4, 6)
+ var/textb = copytext(HTMLstring, 6, 8)
+ var/r = hex2num(textr)
+ var/g = hex2num(textg)
+ var/b = hex2num(textb)
+ textr = num2hex(255 - r)
+ textg = num2hex(255 - g)
+ textb = num2hex(255 - b)
+ if(length(textr) < 2)
+ textr = text("0[]", textr)
+ if(length(textg) < 2)
+ textr = text("0[]", textg)
+ if(length(textb) < 2)
+ textr = text("0[]", textb)
+ return text("#[][][]", textr, textg, textb)
+ return
+
+//Returns the middle-most value
+/proc/dd_range(var/low, var/high, var/num)
+ return max(low,min(high,num))
+
+//Returns whether or not A is the middle most value
+/proc/InRange(var/A, var/lower, var/upper)
+ if(A < lower) return 0
+ if(A > upper) return 0
+ return 1
+
+
+/proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams.
+ if(!start || !end) return 0
+ var/dy
+ var/dx
+ dy=(32*end.y+end.pixel_y)-(32*start.y+start.pixel_y)
+ dx=(32*end.x+end.pixel_x)-(32*start.x+start.pixel_x)
+ if(!dy)
+ return (dx>=0)?90:270
+ .=arctan(dx/dy)
+ if(dy<0)
+ .+=180
+ else if(dx<0)
+ .+=360
+
+//Returns location. Returns null if no location was found.
+/proc/get_teleport_loc(turf/location,mob/target,distance = 1, density = 0, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0)
+/*
+Location where the teleport begins, target that will teleport, distance to go, density checking 0/1(yes/no).
+Random error in tile placement x, error in tile placement y, and block offset.
+Block offset tells the proc how to place the box. Behind teleport location, relative to starting location, forward, etc.
+Negative values for offset are accepted, think of it in relation to North, -x is west, -y is south. Error defaults to positive.
+Turf and target are seperate in case you want to teleport some distance from a turf the target is not standing on or something.
+*/
+
+ var/dirx = 0//Generic location finding variable.
+ var/diry = 0
+
+ var/xoffset = 0//Generic counter for offset location.
+ var/yoffset = 0
+
+ var/b1xerror = 0//Generic placing for point A in box. The lower left.
+ var/b1yerror = 0
+ var/b2xerror = 0//Generic placing for point B in box. The upper right.
+ var/b2yerror = 0
+
+ errorx = abs(errorx)//Error should never be negative.
+ errory = abs(errory)
+ //var/errorxy = round((errorx+errory)/2)//Used for diagonal boxes.
+
+ switch(target.dir)//This can be done through equations but switch is the simpler method. And works fast to boot.
+ //Directs on what values need modifying.
+ if(1)//North
+ diry+=distance
+ yoffset+=eoffsety
+ xoffset+=eoffsetx
+ b1xerror-=errorx
+ b1yerror-=errory
+ b2xerror+=errorx
+ b2yerror+=errory
+ if(2)//South
+ diry-=distance
+ yoffset-=eoffsety
+ xoffset+=eoffsetx
+ b1xerror-=errorx
+ b1yerror-=errory
+ b2xerror+=errorx
+ b2yerror+=errory
+ if(4)//East
+ dirx+=distance
+ yoffset+=eoffsetx//Flipped.
+ xoffset+=eoffsety
+ b1xerror-=errory//Flipped.
+ b1yerror-=errorx
+ b2xerror+=errory
+ b2yerror+=errorx
+ if(8)//West
+ dirx-=distance
+ yoffset-=eoffsetx//Flipped.
+ xoffset+=eoffsety
+ b1xerror-=errory//Flipped.
+ b1yerror-=errorx
+ b2xerror+=errory
+ b2yerror+=errorx
+
+ var/turf/destination=locate(location.x+dirx,location.y+diry,location.z)
+
+ if(destination)//If there is a destination.
+ if(errorx||errory)//If errorx or y were specified.
+ var/destination_list[] = list()//To add turfs to list.
+ //destination_list = new()
+ /*This will draw a block around the target turf, given what the error is.
+ Specifying the values above will basically draw a different sort of block.
+ If the values are the same, it will be a square. If they are different, it will be a rectengle.
+ In either case, it will center based on offset. Offset is position from center.
+ Offset always calculates in relation to direction faced. In other words, depending on the direction of the teleport,
+ the offset should remain positioned in relation to destination.*/
+
+ var/turf/center = locate((destination.x+xoffset),(destination.y+yoffset),location.z)//So now, find the new center.
+
+ //Now to find a box from center location and make that our destination.
+ for(var/turf/T in block(locate(center.x+b1xerror,center.y+b1yerror,location.z), locate(center.x+b2xerror,center.y+b2yerror,location.z) ))
+ if(density&&T.density) continue//If density was specified.
+ if(T.x>world.maxx || T.x<1) continue//Don't want them to teleport off the map.
+ if(T.y>world.maxy || T.y<1) continue
+ destination_list += T
+ if(destination_list.len)
+ destination = pick(destination_list)
+ else return
+
+ else//Same deal here.
+ if(density&&destination.density) return
+ if(destination.x>world.maxx || destination.x<1) return
+ if(destination.y>world.maxy || destination.y<1) return
+ else return
+
+ return destination
+
+// Returns true if direction is blocked from loc
+// Checks if doors are open
+/proc/DirBlocked(turf/loc,var/dir)
+ for(var/obj/structure/window/D in loc)
+ if(!D.density)
+ continue
+ if(D.fulltile)
+ return 1
+ if(D.dir == dir)
+ return 1
+
+ for(var/obj/machinery/door/D in loc)
+ if(!D.density)//if the door is open
+ continue
+ else return 1 // if closed, it's a real, air blocking door
+ return 0
+
+/////////////////////////////////////////////////////////////////////////
+
+/proc/getline(atom/M,atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm
+ var/px=M.x //starting x
+ var/py=M.y
+ var/line[] = list(locate(px,py,M.z))
+ var/dx=N.x-px //x distance
+ var/dy=N.y-py
+ var/dxabs=abs(dx)//Absolute value of x distance
+ var/dyabs=abs(dy)
+ var/sdx=SIGN(dx) //Sign of x distance (+ or -)
+ var/sdy=SIGN(dy)
+ var/x=dxabs>>1 //Counters for steps taken, setting to distance/2
+ var/y=dyabs>>1 //Bit-shifting makes me l33t. It also makes getline() unnessecarrily fast.
+ var/j //Generic integer for counting
+ if(dxabs>=dyabs) //x distance is greater than y
+ for(j=0;j=dxabs) //Every dyabs steps, step once in y direction
+ y-=dxabs
+ py+=sdy
+ px+=sdx //Step on in x direction
+ line+=locate(px,py,M.z)//Add the turf to the list
+ else
+ for(j=0;j=dyabs)
+ x-=dyabs
+ px+=sdx
+ py+=sdy
+ line+=locate(px,py,M.z)
+ return line
+
+//Same as the thing below just for density and without support for atoms.
+/proc/can_line(atom/source, atom/target, length = 5)
+ var/turf/current = get_turf(source)
+ var/turf/target_turf = get_turf(target)
+ var/steps = 0
+
+ while(current != target_turf)
+ if(steps > length)
+ return FALSE
+ if(!current)
+ return FALSE
+ if(current.density)
+ return FALSE
+ current = get_step_towards(current, target_turf)
+ steps++
+ return TRUE
+
+//Returns whether or not a player is a guest using their ckey as an input
+/proc/IsGuestKey(key)
+ if(findtext(key, "Guest-", 1, 7) != 1) //was findtextEx
+ return 0
+
+ var/i, ch, len = length(key)
+
+ for(i = 7, i <= len, ++i)
+ ch = text2ascii(key, i)
+ if(ch < 48 || ch > 57)
+ return 0
+ return 1
+
+//Ensure the frequency is within bounds of what it should be sending/recieving at
+/proc/sanitize_frequency(var/f, var/low = PUBLIC_LOW_FREQ, var/high = PUBLIC_HIGH_FREQ)
+ f = round(f)
+ f = max(low, f)
+ f = min(high, f)
+ if((f % 2) == 0) //Ensure the last digit is an odd number
+ f += 1
+ return f
+
+//Turns 1479 into 147.9
+/proc/format_frequency(var/f)
+ return "[round(f / 10)].[f % 10]"
+
+/obj/proc/atmosanalyzer_scan(var/datum/gas_mixture/air_contents, mob/user, var/obj/target = src)
+ var/obj/icon = target
+ user.visible_message("[user] has used the analyzer on [target].", "You use the analyzer on [target].")
+ var/pressure = air_contents.return_pressure()
+ var/total_moles = air_contents.total_moles()
+
+ user.show_message("Results of analysis of [bicon(icon)] [target].", 1)
+ if(total_moles>0)
+ var/o2_concentration = air_contents.oxygen/total_moles
+ var/n2_concentration = air_contents.nitrogen/total_moles
+ var/co2_concentration = air_contents.carbon_dioxide/total_moles
+ var/plasma_concentration = air_contents.toxins/total_moles
+
+ var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration)
+
+ user.show_message("Pressure: [round(pressure,0.1)] kPa", 1)
+ user.show_message("Nitrogen: [round(n2_concentration*100)] % ([round(air_contents.nitrogen,0.01)] moles)", 1)
+ user.show_message("Oxygen: [round(o2_concentration*100)] % ([round(air_contents.oxygen,0.01)] moles)", 1)
+ user.show_message("CO2: [round(co2_concentration*100)] % ([round(air_contents.carbon_dioxide,0.01)] moles)", 1)
+ user.show_message("Plasma: [round(plasma_concentration*100)] % ([round(air_contents.toxins,0.01)] moles)", 1)
+ if(unknown_concentration>0.01)
+ user.show_message("Unknown: [round(unknown_concentration*100)] % ([round(unknown_concentration*total_moles,0.01)] moles)", 1)
+ user.show_message("Total: [round(total_moles,0.01)] moles", 1)
+ user.show_message("Temperature: [round(air_contents.temperature-T0C)] °C", 1)
+ else
+ user.show_message("[target] is empty!", 1)
+ return
+
+//Picks a string of symbols to display as the law number for hacked or ion laws
+/proc/ionnum()
+ return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]"
+
+//When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave.
+/proc/freeborg()
+ var/select = null
+ var/list/borgs = list()
+ for(var/mob/living/silicon/robot/A in GLOB.player_list)
+ if(A.stat == 2 || A.connected_ai || A.scrambledcodes || istype(A,/mob/living/silicon/robot/drone))
+ continue
+ var/name = "[A.real_name] ([A.modtype] [A.braintype])"
+ borgs[name] = A
+
+ if(borgs.len)
+ select = input("Unshackled borg signals detected:", "Borg selection", null, null) as null|anything in borgs
+ return borgs[select]
+
+//When a borg is activated, it can choose which AI it wants to be slaved to
+/proc/active_ais()
+ . = list()
+ for(var/mob/living/silicon/ai/A in GLOB.living_mob_list)
+ if(A.stat == DEAD)
+ continue
+ if(A.control_disabled == 1)
+ continue
+ . += A
+ return .
+
+//Find an active ai with the least borgs. VERBOSE PROCNAME HUH!
+/proc/select_active_ai_with_fewest_borgs()
+ var/mob/living/silicon/ai/selected
+ var/list/active = active_ais()
+ for(var/mob/living/silicon/ai/A in active)
+ if(!selected || (selected.connected_robots > A.connected_robots))
+ selected = A
+
+ return selected
+
+/proc/select_active_ai(var/mob/user)
+ var/list/ais = active_ais()
+ if(ais.len)
+ if(user) . = input(usr,"AI signals detected:", "AI selection") in ais
+ else . = pick(ais)
+ return .
+
+/proc/get_sorted_mobs()
+ var/list/old_list = getmobs()
+ var/list/AI_list = list()
+ var/list/Dead_list = list()
+ var/list/keyclient_list = list()
+ var/list/key_list = list()
+ var/list/logged_list = list()
+ for(var/named in old_list)
+ var/mob/M = old_list[named]
+ if(issilicon(M))
+ AI_list |= M
+ else if(isobserver(M) || M.stat == DEAD)
+ Dead_list |= M
+ else if(M.key && M.client)
+ keyclient_list |= M
+ else if(M.key)
+ key_list |= M
+ else
+ logged_list |= M
+ old_list.Remove(named)
+ var/list/new_list = list()
+ new_list += AI_list
+ new_list += keyclient_list
+ new_list += key_list
+ new_list += logged_list
+ new_list += Dead_list
+ return new_list
+
+//Returns a list of all mobs with their name
+/proc/getmobs()
+
+ var/list/mobs = sortmobs()
+ var/list/names = list()
+ var/list/creatures = list()
+ var/list/namecounts = list()
+ for(var/mob/M in mobs)
+ var/name = M.name
+ if(name in names)
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+ if(M.real_name && M.real_name != M.name)
+ name += " \[[M.real_name]\]"
+ if(M.stat == DEAD)
+ if(istype(M, /mob/dead/observer/))
+ name += " \[ghost\]"
+ else
+ name += " \[dead\]"
+ creatures[name] = M
+
+ return creatures
+
+//Orders mobs by type then by name
+/proc/sortmobs()
+ var/list/moblist = list()
+ var/list/sortmob = sortAtom(GLOB.mob_list)
+ for(var/mob/living/silicon/ai/M in sortmob)
+ moblist.Add(M)
+ if(M.eyeobj)
+ moblist.Add(M.eyeobj)
+ for(var/mob/living/silicon/pai/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/living/silicon/robot/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/living/carbon/human/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/living/carbon/brain/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/living/carbon/alien/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/dead/observer/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/new_player/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/living/carbon/slime/M in sortmob)
+ moblist.Add(M)
+ for(var/mob/living/simple_animal/M in sortmob)
+ moblist.Add(M)
+ return moblist
+
+// Format a power value in W, kW, MW, or GW.
+/proc/DisplayPower(powerused)
+ if(powerused < 1000) //Less than a kW
+ return "[powerused] W"
+ else if(powerused < 1000000) //Less than a MW
+ return "[round((powerused * 0.001), 0.01)] kW"
+ else if(powerused < 1000000000) //Less than a GW
+ return "[round((powerused * 0.000001), 0.001)] MW"
+ return "[round((powerused * 0.000000001), 0.0001)] GW"
+
+//E = MC^2
+/proc/convert2energy(var/M)
+ var/E = M*(SPEED_OF_LIGHT_SQ)
+ return E
+
+//M = E/C^2
+/proc/convert2mass(var/E)
+ var/M = E/(SPEED_OF_LIGHT_SQ)
+ return M
+
+//Forces a variable to be posative
+/proc/modulus(var/M)
+ if(M >= 0)
+ return M
+ if(M < 0)
+ return -M
+
+/proc/get_mob_by_ckey(key)
+ if(!key)
+ return
+ for(var/mob/M in GLOB.mob_list)
+ if(M.ckey == key)
+ return M
+
+// Returns the atom sitting on the turf.
+// For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf.
+/proc/get_atom_on_turf(var/atom/movable/M)
+ var/atom/loc = M
+ while(loc && loc.loc && !istype(loc.loc, /turf/))
+ loc = loc.loc
+ return loc
+
+/*
+Returns 1 if the chain up to the area contains the given typepath
+0 otherwise
+*/
+/atom/proc/is_found_within(var/typepath)
+ var/atom/A = src
+ while(A.loc)
+ if(istype(A.loc, typepath))
+ return 1
+ A = A.loc
+ return 0
+
+// the on-close client verb
+// called when a browser popup window is closed after registering with proc/onclose()
+// if a valid atom reference is supplied, call the atom's Topic() with "close=1"
+// otherwise, just reset the client mob's machine var.
+
+
+// returns the turf located at the map edge in the specified direction relative to A
+// used for mass driver
+/proc/get_edge_target_turf(var/atom/A, var/direction)
+
+ var/turf/target = locate(A.x, A.y, A.z)
+ if(!A || !target)
+ return 0
+ //since NORTHEAST == NORTH & EAST, etc, doing it this way allows for diagonal mass drivers in the future
+ //and isn't really any more complicated
+
+ // Note diagonal directions won't usually be accurate
+ if(direction & NORTH)
+ target = locate(target.x, world.maxy, target.z)
+ if(direction & SOUTH)
+ target = locate(target.x, 1, target.z)
+ if(direction & EAST)
+ target = locate(world.maxx, target.y, target.z)
+ if(direction & WEST)
+ target = locate(1, target.y, target.z)
+
+ return target
+
+// returns turf relative to A in given direction at set range
+// result is bounded to map size
+// note range is non-pythagorean
+// used for disposal system
+/proc/get_ranged_target_turf(var/atom/A, var/direction, var/range)
+
+ var/x = A.x
+ var/y = A.y
+ if(direction & NORTH)
+ y = min(world.maxy, y + range)
+ if(direction & SOUTH)
+ y = max(1, y - range)
+ if(direction & EAST)
+ x = min(world.maxx, x + range)
+ if(direction & WEST)
+ x = max(1, x - range)
+
+ return locate(x,y,A.z)
+
+
+// returns turf relative to A offset in dx and dy tiles
+// bound to map limits
+/proc/get_offset_target_turf(var/atom/A, var/dx, var/dy)
+ var/x = min(world.maxx, max(1, A.x + dx))
+ var/y = min(world.maxy, max(1, A.y + dy))
+ return locate(x,y,A.z)
+
+//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value.
+/proc/between(var/low, var/middle, var/high)
+ return max(min(middle, high), low)
+
+proc/arctan(x)
+ var/y=arcsin(x/sqrt(1+x*x))
+ return y
+
+//returns random gauss number
+proc/GaussRand(var/sigma)
+ var/x,y,rsq
+ do
+ x=2*rand()-1
+ y=2*rand()-1
+ rsq=x*x+y*y
+ while(rsq>1 || !rsq)
+ return sigma*y*sqrt(-2*log(rsq)/rsq)
+
+//returns random gauss number, rounded to 'roundto'
+proc/GaussRandRound(var/sigma,var/roundto)
+ return round(GaussRand(sigma),roundto)
+
+//Will return the contents of an atom recursivly to a depth of 'searchDepth'
+/atom/proc/GetAllContents(searchDepth = 5)
+ var/list/toReturn = list()
+
+ for(var/atom/part in contents)
+ toReturn += part
+ if(part.contents.len && searchDepth)
+ toReturn += part.GetAllContents(searchDepth - 1)
+
+ return toReturn
+
+//Searches contents of the atom and returns the sum of all w_class of obj/item within
+/atom/proc/GetTotalContentsWeight(searchDepth = 5)
+ var/weight = 0
+ var/list/content = GetAllContents(searchDepth)
+ for(var/obj/item/I in content)
+ weight += I.w_class
+ return weight
+
+//Step-towards method of determining whether one atom can see another. Similar to viewers()
+/proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate.
+ var/turf/current = get_turf(source)
+ var/turf/target_turf = get_turf(target)
+ var/steps = 1
+
+ if(current != target_turf)
+ current = get_step_towards(current, target_turf)
+ while(current != target_turf)
+ if(steps > length)
+ return 0
+ if(current.opacity)
+ return 0
+ for(var/thing in current)
+ var/atom/A = thing
+ if(A.opacity)
+ return 0
+ current = get_step_towards(current, target_turf)
+ steps++
+
+ return 1
+
+proc/is_blocked_turf(turf/T, exclude_mobs)
+ if(T.density)
+ return 1
+ for(var/i in T)
+ var/atom/A = i
+ if(A.density && (!exclude_mobs || !ismob(A)))
+ return 1
+ return 0
+
+/proc/get_step_towards2(var/atom/ref , var/atom/trg)
+ var/base_dir = get_dir(ref, get_step_towards(ref,trg))
+ var/turf/temp = get_step_towards(ref,trg)
+
+ if(is_blocked_turf(temp))
+ var/dir_alt1 = turn(base_dir, 90)
+ var/dir_alt2 = turn(base_dir, -90)
+ var/turf/turf_last1 = temp
+ var/turf/turf_last2 = temp
+ var/free_tile = null
+ var/breakpoint = 0
+
+ while(!free_tile && breakpoint < 10)
+ if(!is_blocked_turf(turf_last1))
+ free_tile = turf_last1
+ break
+ if(!is_blocked_turf(turf_last2))
+ free_tile = turf_last2
+ break
+ turf_last1 = get_step(turf_last1,dir_alt1)
+ turf_last2 = get_step(turf_last2,dir_alt2)
+ breakpoint++
+
+ if(!free_tile) return get_step(ref, base_dir)
+ else return get_step_towards(ref,free_tile)
+
+ else return get_step(ref, base_dir)
+
+//Takes: Anything that could possibly have variables and a varname to check.
+//Returns: 1 if found, 0 if not.
+/proc/hasvar(var/datum/A, var/varname)
+ if(A.vars.Find(lowertext(varname))) return 1
+ else return 0
+
+//Returns: all the areas in the world
+/proc/return_areas()
+ var/list/area/areas = list()
+ for(var/area/A in world)
+ areas += A
+ return areas
+
+//Returns: all the areas in the world, sorted.
+/proc/return_sorted_areas()
+ return sortAtom(return_areas())
+
+//Takes: Area type as text string or as typepath OR an instance of the area.
+//Returns: A list of all areas of that type in the world.
+/proc/get_areas(var/areatype)
+ if(!areatype) return null
+ if(istext(areatype)) areatype = text2path(areatype)
+ if(isarea(areatype))
+ var/area/areatemp = areatype
+ areatype = areatemp.type
+
+ var/list/areas = new/list()
+ for(var/area/N in world)
+ if(istype(N, areatype)) areas += N
+ return areas
+
+//Takes: Area type as text string or as typepath OR an instance of the area.
+//Returns: A list of all turfs in areas of that type of that type in the world.
+/proc/get_area_turfs(var/areatype)
+ if(!areatype) return null
+ if(istext(areatype)) areatype = text2path(areatype)
+ if(isarea(areatype))
+ var/area/areatemp = areatype
+ areatype = areatemp.type
+
+ var/list/turfs = new/list()
+ for(var/area/N in world)
+ if(istype(N, areatype))
+ for(var/turf/T in N) turfs += T
+ return turfs
+
+//Takes: Area type as text string or as typepath OR an instance of the area.
+//Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world.
+/proc/get_area_all_atoms(var/areatype)
+ if(!areatype) return null
+ if(istext(areatype)) areatype = text2path(areatype)
+ if(isarea(areatype))
+ var/area/areatemp = areatype
+ areatype = areatemp.type
+
+ var/list/atoms = new/list()
+ for(var/area/N in world)
+ if(istype(N, areatype))
+ for(var/atom/A in N)
+ atoms += A
+ return atoms
+
+/datum/coords //Simple datum for storing coordinates.
+ var/x_pos = null
+ var/y_pos = null
+ var/z_pos = null
+
+/area/proc/move_contents_to(var/area/A, var/turftoleave=null, var/direction = null)
+ //Takes: Area. Optional: turf type to leave behind.
+ //Returns: Nothing.
+ //Notes: Attempts to move the contents of one area to another area.
+ // Movement based on lower left corner. Tiles that do not fit
+ // into the new area will not be moved.
+
+ if(!A || !src) return 0
+
+ var/list/turfs_src = get_area_turfs(src.type)
+ var/list/turfs_trg = get_area_turfs(A.type)
+
+ var/src_min_x = 0
+ var/src_min_y = 0
+ for(var/turf/T in turfs_src)
+ if(T.x < src_min_x || !src_min_x) src_min_x = T.x
+ if(T.y < src_min_y || !src_min_y) src_min_y = T.y
+
+ var/trg_min_x = 0
+ var/trg_min_y = 0
+ for(var/turf/T in turfs_trg)
+ if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x
+ if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y
+
+ var/list/refined_src = new/list()
+ for(var/turf/T in turfs_src)
+ refined_src += T
+ refined_src[T] = new/datum/coords
+ var/datum/coords/C = refined_src[T]
+ C.x_pos = (T.x - src_min_x)
+ C.y_pos = (T.y - src_min_y)
+
+ var/list/refined_trg = new/list()
+ for(var/turf/T in turfs_trg)
+ refined_trg += T
+ refined_trg[T] = new/datum/coords
+ var/datum/coords/C = refined_trg[T]
+ C.x_pos = (T.x - trg_min_x)
+ C.y_pos = (T.y - trg_min_y)
+
+ var/list/fromupdate = new/list()
+ var/list/toupdate = new/list()
+
+ moving:
+ for(var/turf/T in refined_src)
+ var/datum/coords/C_src = refined_src[T]
+ for(var/turf/B in refined_trg)
+ var/datum/coords/C_trg = refined_trg[B]
+ if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos)
+
+ var/old_dir1 = T.dir
+ var/old_icon_state1 = T.icon_state
+ var/old_icon1 = T.icon
+
+ var/turf/X = B.ChangeTurf(T.type)
+ X.dir = old_dir1
+ X.icon_state = old_icon_state1
+ X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
+
+ // Give the new turf our air, if simulated
+ if(istype(X, /turf/simulated) && istype(T, /turf/simulated))
+ var/turf/simulated/sim = X
+ sim.copy_air_with_tile(T)
+
+
+ /* Quick visual fix for some weird shuttle corner artefacts when on transit space tiles */
+ if(direction && findtext(X.icon_state, "swall_s"))
+
+ // Spawn a new shuttle corner object
+ var/obj/corner = new()
+ corner.loc = X
+ corner.density = 1
+ corner.anchored = 1
+ corner.icon = X.icon
+ corner.icon_state = replacetext(X.icon_state, "_s", "_f")
+ corner.tag = "delete me"
+ corner.name = "wall"
+
+ // Find a new turf to take on the property of
+ var/turf/nextturf = get_step(corner, direction)
+ if(!nextturf || !istype(nextturf, /turf/space))
+ nextturf = get_step(corner, turn(direction, 180))
+
+
+ // Take on the icon of a neighboring scrolling space icon
+ X.icon = nextturf.icon
+ X.icon_state = nextturf.icon_state
+
+
+ for(var/obj/O in T)
+
+ // Reset the shuttle corners
+ if(O.tag == "delete me")
+ X.icon = 'icons/turf/shuttle.dmi'
+ X.icon_state = replacetext(O.icon_state, "_f", "_s") // revert the turf to the old icon_state
+ X.name = "wall"
+ qdel(O) // prevents multiple shuttle corners from stacking
+ continue
+ if(!istype(O,/obj)) continue
+ O.loc.Exited(O)
+ O.setLoc(X,teleported=1)
+ O.loc.Entered(O)
+ for(var/mob/M in T)
+ if(!M.move_on_shuttle)
+ continue
+ M.loc = X
+
+// var/area/AR = X.loc
+
+// if(AR.lighting_use_dynamic) //TODO: rewrite this code so it's not messed by lighting ~Carn
+// X.opacity = !X.opacity
+// X.set_opacity(!X.opacity)
+
+ toupdate += X
+
+ if(turftoleave)
+ fromupdate += T.ChangeTurf(turftoleave)
+ else
+ T.ChangeTurf(T.baseturf)
+
+ refined_src -= T
+ refined_trg -= B
+ continue moving
+
+ if(toupdate.len)
+ for(var/turf/simulated/T1 in toupdate)
+ SSair.remove_from_active(T1)
+ T1.CalculateAdjacentTurfs()
+ SSair.add_to_active(T1,1)
+
+ if(fromupdate.len)
+ for(var/turf/simulated/T2 in fromupdate)
+ SSair.remove_from_active(T2)
+ T2.CalculateAdjacentTurfs()
+ SSair.add_to_active(T2,1)
+
+
+
+
+/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0, var/atom/newloc = null)
+ if(!original)
+ return null
+
+ var/obj/O = null
+
+ if(sameloc)
+ O=new original.type(original.loc)
+ else
+ O=new original.type(newloc)
+
+ if(perfectcopy)
+ if((O) && (original))
+ var/static/list/forbidden_vars = list("type","loc","locs","vars", "parent","parent_type", "verbs","ckey","key","power_supply","contents","reagents","stat","x","y","z","group")
+
+ for(var/V in original.vars - forbidden_vars)
+ if(istype(original.vars[V],/list))
+ var/list/L = original.vars[V]
+ O.vars[V] = L.Copy()
+ else if(istype(original.vars[V],/datum))
+ continue // this would reference the original's object, that will break when it is used or deleted.
+ else
+ O.vars[V] = original.vars[V]
+ if(istype(O))
+ O.update_icon()
+ return O
+
+/area/proc/copy_contents_to(var/area/A , var/platingRequired = 0 )
+ //Takes: Area. Optional: If it should copy to areas that don't have plating
+ //Returns: Nothing.
+ //Notes: Attempts to move the contents of one area to another area.
+ // Movement based on lower left corner. Tiles that do not fit
+ // into the new area will not be moved.
+
+ if(!A || !src) return 0
+
+ var/list/turfs_src = get_area_turfs(src.type)
+ var/list/turfs_trg = get_area_turfs(A.type)
+
+ var/src_min_x = 0
+ var/src_min_y = 0
+ for(var/turf/T in turfs_src)
+ if(T.x < src_min_x || !src_min_x) src_min_x = T.x
+ if(T.y < src_min_y || !src_min_y) src_min_y = T.y
+
+ var/trg_min_x = 0
+ var/trg_min_y = 0
+ for(var/turf/T in turfs_trg)
+ if(T.x < trg_min_x || !trg_min_x) trg_min_x = T.x
+ if(T.y < trg_min_y || !trg_min_y) trg_min_y = T.y
+
+ var/list/refined_src = new/list()
+ for(var/turf/T in turfs_src)
+ refined_src += T
+ refined_src[T] = new/datum/coords
+ var/datum/coords/C = refined_src[T]
+ C.x_pos = (T.x - src_min_x)
+ C.y_pos = (T.y - src_min_y)
+
+ var/list/refined_trg = new/list()
+ for(var/turf/T in turfs_trg)
+ refined_trg += T
+ refined_trg[T] = new/datum/coords
+ var/datum/coords/C = refined_trg[T]
+ C.x_pos = (T.x - trg_min_x)
+ C.y_pos = (T.y - trg_min_y)
+
+ var/list/toupdate = new/list()
+
+ var/copiedobjs = list()
+
+
+ moving:
+ for(var/turf/T in refined_src)
+ var/datum/coords/C_src = refined_src[T]
+ for(var/turf/B in refined_trg)
+ var/datum/coords/C_trg = refined_trg[B]
+ if(C_src.x_pos == C_trg.x_pos && C_src.y_pos == C_trg.y_pos)
+
+ var/old_dir1 = T.dir
+ var/old_icon_state1 = T.icon_state
+ var/old_icon1 = T.icon
+
+ if(platingRequired)
+ if(istype(B, /turf/space))
+ continue moving
+
+ var/turf/X = new T.type(B)
+ X.dir = old_dir1
+ X.icon_state = old_icon_state1
+ X.icon = old_icon1 //Shuttle floors are in shuttle.dmi while the defaults are floors.dmi
+
+
+ var/list/objs = new/list()
+ var/list/newobjs = new/list()
+ var/list/mobs = new/list()
+ var/list/newmobs = new/list()
+
+ for(var/obj/O in T)
+
+ if(!istype(O,/obj))
+ continue
+
+ objs += O
+
+
+ for(var/obj/O in objs)
+ newobjs += DuplicateObject(O , 1)
+
+
+ for(var/obj/O in newobjs)
+ O.loc = X
+
+ for(var/mob/M in T)
+
+ if(!M.move_on_shuttle)
+ continue
+ mobs += M
+
+ for(var/mob/M in mobs)
+ newmobs += DuplicateObject(M , 1)
+
+ for(var/mob/M in newmobs)
+ M.loc = X
+
+ copiedobjs += newobjs
+ copiedobjs += newmobs
+
+
+
+ for(var/V in T.vars)
+ if(!(V in list("type","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity", "group")))
+ X.vars[V] = T.vars[V]
+
+// var/area/AR = X.loc
+
+// if(AR.lighting_use_dynamic)
+// X.opacity = !X.opacity
+// X.sd_set_opacity(!X.opacity) //TODO: rewrite this code so it's not messed by lighting ~Carn
+
+ toupdate += X
+
+ refined_src -= T
+ refined_trg -= B
+ continue moving
+
+
+
+ if(toupdate.len)
+ for(var/turf/simulated/T1 in toupdate)
+ T1.CalculateAdjacentTurfs()
+ SSair.add_to_active(T1,1)
+
+
+ return copiedobjs
+
+
+
+proc/get_cardinal_dir(atom/A, atom/B)
+ var/dx = abs(B.x - A.x)
+ var/dy = abs(B.y - A.y)
+ return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12)
+
+//chances are 1:value. anyprob(1) will always return true
+proc/anyprob(value)
+ return (rand(1,value)==value)
+
+proc/view_or_range(distance = world.view , center = usr , type)
+ switch(type)
+ if("view")
+ . = view(distance,center)
+ if("range")
+ . = range(distance,center)
+ return
+
+proc/oview_or_orange(distance = world.view , center = usr , type)
+ switch(type)
+ if("view")
+ . = oview(distance,center)
+ if("range")
+ . = orange(distance,center)
+ return
+
+proc/get_mob_with_client_list()
+ var/list/mobs = list()
+ for(var/mob/M in GLOB.mob_list)
+ if(M.client)
+ mobs += M
+ return mobs
+
+
+/proc/parse_zone(zone)
+ if(zone == "r_hand") return "right hand"
+ else if(zone == "l_hand") return "left hand"
+ else if(zone == "l_arm") return "left arm"
+ else if(zone == "r_arm") return "right arm"
+ else if(zone == "l_leg") return "left leg"
+ else if(zone == "r_leg") return "right leg"
+ else if(zone == "l_foot") return "left foot"
+ else if(zone == "r_foot") return "right foot"
+ else if(zone == "l_hand") return "left hand"
+ else if(zone == "r_hand") return "right hand"
+ else if(zone == "l_foot") return "left foot"
+ else if(zone == "r_foot") return "right foot"
+ else return zone
+
+/*
+
+ Gets the turf this atom's *ICON* appears to inhabit
+ It takes into account:
+ * Pixel_x/y
+ * Matrix x/y
+
+ NOTE: if your atom has non-standard bounds then this proc
+ will handle it, but:
+ * if the bounds are even, then there are an even amount of "middle" turfs, the one to the EAST, NORTH, or BOTH is picked
+ (this may seem bad, but you're atleast as close to the center of the atom as possible, better than byond's default loc being all the way off)
+ * if the bounds are odd, the true middle turf of the atom is returned
+
+*/
+
+/proc/get_turf_pixel(atom/movable/AM)
+ if(!istype(AM))
+ return
+
+ //Find AM's matrix so we can use it's X/Y pixel shifts
+ var/matrix/M = matrix(AM.transform)
+
+ var/pixel_x_offset = AM.pixel_x + M.get_x_shift()
+ var/pixel_y_offset = AM.pixel_y + M.get_y_shift()
+
+ //Irregular objects
+ if(AM.bound_height != world.icon_size || AM.bound_width != world.icon_size)
+ var/icon/AMicon = icon(AM.icon, AM.icon_state)
+ pixel_x_offset += ((AMicon.Width()/world.icon_size)-1)*(world.icon_size*0.5)
+ pixel_y_offset += ((AMicon.Height()/world.icon_size)-1)*(world.icon_size*0.5)
+ qdel(AMicon)
+
+ //DY and DX
+ var/rough_x = round(round(pixel_x_offset,world.icon_size)/world.icon_size)
+ var/rough_y = round(round(pixel_y_offset,world.icon_size)/world.icon_size)
+
+ //Find coordinates
+ var/turf/T = get_turf(AM) //use AM's turfs, as it's coords are the same as AM's AND AM's coords are lost if it is inside another atom
+ if(!T)
+ return null
+ var/final_x = T.x + rough_x
+ var/final_y = T.y + rough_y
+
+ if(final_x || final_y)
+ return locate(final_x, final_y, T.z)
+
+//Finds the distance between two atoms, in pixels
+//centered = 0 counts from turf edge to edge
+//centered = 1 counts from turf center to turf center
+//of course mathematically this is just adding world.icon_size on again
+/proc/getPixelDistance(var/atom/A, var/atom/B, var/centered = 1)
+ if(!istype(A)||!istype(B))
+ return 0
+ . = bounds_dist(A, B) + sqrt((((A.pixel_x+B.pixel_x)**2) + ((A.pixel_y+B.pixel_y)**2)))
+ if(centered)
+ . += world.icon_size
+
+/proc/get(atom/loc, type)
+ while(loc)
+ if(istype(loc, type))
+ return loc
+ loc = loc.loc
+ return null
+
+/proc/get_turf_or_move(turf/location)
+ return get_turf(location)
+
+
+//For objects that should embed, but make no sense being is_sharp or is_pointed()
+//e.g: rods
+var/list/can_embed_types = typecacheof(list(
+ /obj/item/stack/rods,
+ /obj/item/pipe))
+
+/proc/can_embed(obj/item/W)
+ if(is_sharp(W))
+ return 1
+ if(is_pointed(W))
+ return 1
+
+ if(is_type_in_typecache(W, can_embed_types))
+ return 1
+
+//Quick type checks for some tools
+var/global/list/common_tools = list(
+/obj/item/stack/cable_coil,
+/obj/item/wrench,
+/obj/item/weldingtool,
+/obj/item/screwdriver,
+/obj/item/wirecutters,
+/obj/item/multitool,
+/obj/item/crowbar)
+
+/proc/istool(O)
+ if(O && is_type_in_list(O, common_tools))
+ return 1
+ return 0
+
+/proc/iswrench(O)
+ if(istype(O, /obj/item/wrench))
+ return 1
+ return 0
+
+/proc/iswelder(O)
+ if(istype(O, /obj/item/weldingtool))
+ return 1
+ return 0
+
+/proc/iscoil(O)
+ if(istype(O, /obj/item/stack/cable_coil))
+ return 1
+ return 0
+
+/proc/iswirecutter(O)
+ if(istype(O, /obj/item/wirecutters))
+ return 1
+ return 0
+
+/proc/isscrewdriver(O)
+ if(istype(O, /obj/item/screwdriver))
+ return 1
+ return 0
+
+/proc/ismultitool(O)
+ if(istype(O, /obj/item/multitool))
+ return 1
+ return 0
+
+/proc/iscrowbar(O)
+ if(istype(O, /obj/item/crowbar))
+ return 1
+ return 0
+
+/proc/ispowertool(O)//used to check if a tool can force powered doors
+ if(istype(O, /obj/item/crowbar/power) || istype(O, /obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw))
+ return TRUE
+ return FALSE
+
+/proc/iswire(O)
+ if(istype(O, /obj/item/stack/cable_coil))
+ return 1
+ return 0
+
+/proc/is_hot(obj/item/W as obj)
+ if(istype(W, /obj/item/weldingtool))
+ var/obj/item/weldingtool/O = W
+ if(O.isOn())
+ return 2500
+ else
+ return 0
+ if(istype(W, /obj/item/lighter))
+ var/obj/item/lighter/O = W
+ if(O.lit)
+ return 1500
+ else
+ return 0
+ if(istype(W, /obj/item/match))
+ var/obj/item/match/O = W
+ if(O.lit == 1)
+ return 1000
+ else
+ return 0
+ if(istype(W, /obj/item/clothing/mask/cigarette))
+ var/obj/item/clothing/mask/cigarette/O = W
+ if(O.lit)
+ return 1000
+ else
+ return 0
+ if(istype(W, /obj/item/candle))
+ var/obj/item/candle/O = W
+ if(O.lit)
+ return 1000
+ else
+ return 0
+ if(istype(W, /obj/item/flashlight/flare))
+ var/obj/item/flashlight/flare/O = W
+ if(O.on)
+ return 1000
+ else
+ return 0
+ if(istype(W, /obj/item/gun/energy/plasmacutter))
+ return 3800
+ if(istype(W, /obj/item/melee/energy))
+ var/obj/item/melee/energy/O = W
+ if(O.active)
+ return 3500
+ else
+ return 0
+ if(istype(W, /obj/item/assembly/igniter))
+ return 20000
+ else
+ return 0
+
+//Whether or not the given item counts as sharp in terms of dealing damage
+/proc/is_sharp(obj/O)
+ if(!O)
+ return 0
+ if(O.sharp)
+ return 1
+ return 0
+
+/proc/is_surgery_tool(obj/item/W as obj)
+ return ( \
+ istype(W, /obj/item/scalpel) || \
+ istype(W, /obj/item/hemostat) || \
+ istype(W, /obj/item/retractor) || \
+ istype(W, /obj/item/cautery) || \
+ istype(W, /obj/item/bonegel) || \
+ istype(W, /obj/item/bonesetter)
+ )
+
+/proc/reverse_direction(var/dir)
+ switch(dir)
+ if(NORTH)
+ return SOUTH
+ if(NORTHEAST)
+ return SOUTHWEST
+ if(EAST)
+ return WEST
+ if(SOUTHEAST)
+ return NORTHWEST
+ if(SOUTH)
+ return NORTH
+ if(SOUTHWEST)
+ return NORTHEAST
+ if(WEST)
+ return EAST
+ if(NORTHWEST)
+ return SOUTHEAST
+
+/*
+Checks if that loc and dir has a item on the wall
+*/
+var/list/static/global/wall_items = typecacheof(list(/obj/machinery/power/apc, /obj/machinery/alarm,
+ /obj/item/radio/intercom, /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank,
+ /obj/machinery/status_display, /obj/machinery/requests_console, /obj/machinery/light_switch, /obj/structure/sign,
+ /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/door_control,
+ /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/airlock,
+ /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth,
+ /obj/structure/mirror, /obj/structure/closet/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment,
+ /obj/structure/sign))
+
+/proc/gotwallitem(loc, dir)
+ for(var/obj/O in loc)
+ if(is_type_in_typecache(O, wall_items))
+ //Direction works sometimes
+ if(O.dir == dir)
+ return 1
+
+ //Some stuff doesn't use dir properly, so we need to check pixel instead
+ switch(dir)
+ if(SOUTH)
+ if(O.pixel_y > 10)
+ return 1
+ if(NORTH)
+ if(O.pixel_y < -10)
+ return 1
+ if(WEST)
+ if(O.pixel_x > 10)
+ return 1
+ if(EAST)
+ if(O.pixel_x < -10)
+ return 1
+
+ //Some stuff is placed directly on the wallturf (signs)
+ for(var/obj/O in get_step(loc, dir))
+ if(is_type_in_typecache(O, wall_items))
+ if(abs(O.pixel_x) <= 10 && abs(O.pixel_y) <= 10)
+ return 1
+ return 0
+
+
+proc/get_angle(atom/a, atom/b)
+ return atan2(b.y - a.y, b.x - a.x)
+
+proc/atan2(x, y)
+ if(!x && !y) return 0
+ return y >= 0 ? arccos(x / sqrt(x * x + y * y)) : -arccos(x / sqrt(x * x + y * y))
+
+/proc/format_text(text)
+ return replacetext(replacetext(text,"\proper ",""),"\improper ","")
+
+/*
+Standard way to write links -Sayu
+*/
+
+/proc/topic_link(var/datum/D, var/arglist, var/content)
+ if(istype(arglist,/list))
+ arglist = list2params(arglist)
+ return "[content]"
+
+
+
+/proc/get_location_accessible(mob/M, location)
+ var/covered_locations = 0 //based on body_parts_covered
+ var/face_covered = 0 //based on flags_inv
+ var/eyesmouth_covered = 0 //based on flags_cover
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ for(var/obj/item/clothing/I in list(C.back, C.wear_mask))
+ covered_locations |= I.body_parts_covered
+ face_covered |= I.flags_inv
+ eyesmouth_covered |= I.flags_cover
+ if(ishuman(C))
+ var/mob/living/carbon/human/H = C
+ for(var/obj/item/I in list(H.wear_suit, H.w_uniform, H.shoes, H.belt, H.gloves, H.glasses, H.head, H.r_ear, H.l_ear))
+ covered_locations |= I.body_parts_covered
+ face_covered |= I.flags_inv
+ eyesmouth_covered |= I.flags_cover
+
+ switch(location)
+ if("head")
+ if(covered_locations & HEAD)
+ return 0
+ if("eyes")
+ if(face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES || eyesmouth_covered & HEADCOVERSEYES)
+ return 0
+ if("mouth")
+ if(covered_locations & HEAD || face_covered & HIDEFACE || eyesmouth_covered & MASKCOVERSMOUTH)
+ return 0
+ if("chest")
+ if(covered_locations & UPPER_TORSO)
+ return 0
+ if("groin")
+ if(covered_locations & LOWER_TORSO)
+ return 0
+ if("l_arm")
+ if(covered_locations & ARM_LEFT)
+ return 0
+ if("r_arm")
+ if(covered_locations & ARM_RIGHT)
+ return 0
+ if("l_leg")
+ if(covered_locations & LEG_LEFT)
+ return 0
+ if("r_leg")
+ if(covered_locations & LEG_RIGHT)
+ return 0
+ if("l_hand")
+ if(covered_locations & HAND_LEFT)
+ return 0
+ if("r_hand")
+ if(covered_locations & HAND_RIGHT)
+ return 0
+ if("l_foot")
+ if(covered_locations & FOOT_LEFT)
+ return 0
+ if("r_foot")
+ if(covered_locations & FOOT_RIGHT)
+ return 0
+
+ return 1
+
+/proc/check_target_facings(mob/living/initator, mob/living/target)
+ /*This can be used to add additional effects on interactions between mobs depending on how the mobs are facing each other, such as adding a crit damage to blows to the back of a guy's head.
+ Given how click code currently works (Nov '13), the initiating mob will be facing the target mob most of the time
+ That said, this proc should not be used if the change facing proc of the click code is overriden at the same time*/
+ if(!ismob(target) || target.lying)
+ //Make sure we are not doing this for things that can't have a logical direction to the players given that the target would be on their side
+ return FACING_FAILED
+ if(initator.dir == target.dir) //mobs are facing the same direction
+ return FACING_SAME_DIR
+ if(is_A_facing_B(initator, target) && is_A_facing_B(target, initator)) //mobs are facing each other
+ return FACING_EACHOTHER
+ if(initator.dir + 2 == target.dir || initator.dir - 2 == target.dir || initator.dir + 6 == target.dir || initator.dir - 6 == target.dir) //Initating mob is looking at the target, while the target mob is looking in a direction perpendicular to the 1st
+ return FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR
+
+
+atom/proc/GetTypeInAllContents(typepath)
+ var/list/processing_list = list(src)
+ var/list/processed = list()
+
+ var/atom/found = null
+
+ while(processing_list.len && found==null)
+ var/atom/A = processing_list[1]
+ if(istype(A, typepath))
+ found = A
+
+ processing_list -= A
+
+ for(var/atom/a in A)
+ if(!(a in processed))
+ processing_list |= a
+
+ processed |= A
+
+ return found
+
+/proc/random_step(atom/movable/AM, steps, chance)
+ var/initial_chance = chance
+ while(steps > 0)
+ if(prob(chance))
+ step(AM, pick(alldirs))
+ chance = max(chance - (initial_chance / steps), 0)
+ steps--
+
+/proc/get_random_colour(var/simple, var/lower, var/upper)
+ var/colour
+ if(simple)
+ colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))
+ else
+ for(var/i=1;i<=3;i++)
+ var/temp_col = "[num2hex(rand(lower,upper))]"
+ if(length(temp_col )<2)
+ temp_col = "0[temp_col]"
+ colour += temp_col
+ return colour
+
+/proc/get_distant_turf(var/turf/T,var/direction,var/distance)
+ if(!T || !direction || !distance) return
+
+ var/dest_x = T.x
+ var/dest_y = T.y
+ var/dest_z = T.z
+
+ if(direction & NORTH)
+ dest_y = min(world.maxy, dest_y+distance)
+ if(direction & SOUTH)
+ dest_y = max(0, dest_y-distance)
+ if(direction & EAST)
+ dest_x = min(world.maxy, dest_x+distance)
+ if(direction & WEST)
+ dest_x = max(0, dest_x-distance)
+
+ return locate(dest_x,dest_y,dest_z)
+
+var/mob/dview/dview_mob = new
+
+//Version of view() which ignores darkness, because BYOND doesn't have it.
+/proc/dview(var/range = world.view, var/center, var/invis_flags = 0)
+ if(!center)
+ return
+
+ dview_mob.loc = center
+
+ dview_mob.see_invisible = invis_flags
+
+ . = view(range, dview_mob)
+ dview_mob.loc = null
+
+/mob/dview
+ invisibility = 101
+ density = 0
+ move_force = 0
+ pull_force = 0
+ move_resist = INFINITY
+ simulated = 0
+ canmove = FALSE
+ see_in_dark = 1e6
+
+/mob/dview/New() //For whatever reason, if this isn't called, then BYOND will throw a type mismatch runtime when attempting to add this to the mobs list. -Fox
+
+/mob/dview/Destroy()
+ // should never be deleted
+ return QDEL_HINT_LETMELIVE
+
+/proc/IsValidSrc(A)
+ if(istype(A, /datum))
+ var/datum/D = A
+ return !QDELETED(D)
+ if(istype(A, /client))
+ return TRUE
+ return FALSE
+
+//can a window be here, or is there a window blocking it?
+/proc/valid_window_location(turf/T, dir_to_check)
+ if(!T)
+ return FALSE
+ for(var/obj/O in T)
+ if(istype(O, /obj/machinery/door/window) && (O.dir == dir_to_check || dir_to_check == FULLTILE_WINDOW_DIR))
+ return FALSE
+ if(istype(O, /obj/structure/windoor_assembly))
+ var/obj/structure/windoor_assembly/W = O
+ if(W.ini_dir == dir_to_check || dir_to_check == FULLTILE_WINDOW_DIR)
+ return FALSE
+ if(istype(O, /obj/structure/window))
+ var/obj/structure/window/W = O
+ if(W.ini_dir == dir_to_check || W.ini_dir == FULLTILE_WINDOW_DIR || dir_to_check == FULLTILE_WINDOW_DIR)
+ return FALSE
+ return TRUE
+
+//Get the dir to the RIGHT of dir if they were on a clock
+//NORTH --> NORTHEAST
+/proc/get_clockwise_dir(dir)
+ . = angle2dir(dir2angle(dir)+45)
+
+//Get the dir to the LEFT of dir if they were on a clock
+//NORTH --> NORTHWEST
+/proc/get_anticlockwise_dir(dir)
+ . = angle2dir(dir2angle(dir)-45)
+
+
+//Compare A's dir, the clockwise dir of A and the anticlockwise dir of A
+//To the opposite dir of the dir returned by get_dir(B,A)
+//If one of them is a match, then A is facing B
+/proc/is_A_facing_B(atom/A, atom/B)
+ if(!istype(A) || !istype(B))
+ return 0
+ if(isliving(A))
+ var/mob/living/LA = A
+ if(LA.lying)
+ return 0
+ var/goal_dir = angle2dir(dir2angle(get_dir(B, A)+180))
+ var/clockwise_A_dir = get_clockwise_dir(A.dir)
+ var/anticlockwise_A_dir = get_anticlockwise_dir(B.dir)
+
+ if(A.dir == goal_dir || clockwise_A_dir == goal_dir || anticlockwise_A_dir == goal_dir)
+ return 1
+ return 0
+
+//This is just so you can stop an orbit.
+//orbit() can run without it (swap orbiting for A)
+//but then you can never stop it and that's just silly.
+/atom/movable/var/atom/orbiting = null
+
+//A: atom to orbit
+//radius: range to orbit at, radius of the circle formed by orbiting
+//clockwise: whether you orbit clockwise or anti clockwise
+//rotation_speed: how fast to rotate
+//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
+//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
+//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts)
+
+/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE, forceMove = FALSE)
+ if(!istype(A))
+ return
+
+ if(orbiting)
+ stop_orbit()
+
+ orbiting = A
+ var/matrix/initial_transform = matrix(transform)
+ var/lastloc = loc
+
+ //Head first!
+ if(pre_rotation)
+ var/matrix/M = matrix(transform)
+ var/pre_rot = 90
+ if(!clockwise)
+ pre_rot = -90
+ M.Turn(pre_rot)
+ transform = M
+
+ var/matrix/shift = matrix(transform)
+ shift.Translate(0,radius)
+ transform = shift
+
+ SpinAnimation(rotation_speed, -1, clockwise, rotation_segments)
+
+ //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
+ transform = initial_transform
+ while(orbiting && orbiting == A && A.loc)
+ var/targetloc = get_turf(A)
+ if(!lockinorbit && loc != lastloc && loc != targetloc)
+ break
+ if(forceMove)
+ forceMove(targetloc)
+ else
+ loc = targetloc
+ lastloc = loc
+ sleep(0.6)
+
+ if(orbiting == A) //make sure we haven't started orbiting something else.
+ orbiting = null
+ SpinAnimation(0,0)
+
+
+
+/atom/movable/proc/stop_orbit()
+ orbiting = null
+
+//Centers an image.
+//Requires:
+//The Image
+//The x dimension of the icon file used in the image
+//The y dimension of the icon file used in the image
+// eg: center_image(I, 32,32)
+// eg2: center_image(I, 96,96)
+/proc/center_image(var/image/I, x_dimension = 0, y_dimension = 0)
+ if(!I)
+ return
+
+ if(!x_dimension || !y_dimension)
+ return
+
+ //Get out of here, punk ass kids calling procs needlessly
+ if((x_dimension == world.icon_size) && (y_dimension == world.icon_size))
+ return I
+
+ //Offset the image so that it's bottom left corner is shifted this many pixels
+ //This makes it infinitely easier to draw larger inhands/images larger than world.iconsize
+ //but still use them in game
+ var/x_offset = -((x_dimension/world.icon_size)-1)*(world.icon_size*0.5)
+ var/y_offset = -((y_dimension/world.icon_size)-1)*(world.icon_size*0.5)
+
+ //Correct values under world.icon_size
+ if(x_dimension < world.icon_size)
+ x_offset *= -1
+ if(y_dimension < world.icon_size)
+ y_offset *= -1
+
+ I.pixel_x = x_offset
+ I.pixel_y = y_offset
+
+ return I
+
+//similar function to RANGE_TURFS(), but will search spiralling outwards from the center (like the above, but only turfs)
+/proc/spiral_range_turfs(dist=0, center=usr, orange=0)
+ if(!dist)
+ if(!orange)
+ return list(center)
+ else
+ return list()
+
+ var/turf/t_center = get_turf(center)
+ if(!t_center)
+ return list()
+
+ var/list/L = list()
+ var/turf/T
+ var/y
+ var/x
+ var/c_dist = 1
+
+ if(!orange)
+ L += t_center
+
+ while( c_dist <= dist )
+ y = t_center.y + c_dist
+ x = t_center.x - c_dist + 1
+ for(x in x to t_center.x+c_dist)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+
+ y = t_center.y + c_dist - 1
+ x = t_center.x + c_dist
+ for(y in t_center.y-c_dist to y)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+
+ y = t_center.y - c_dist
+ x = t_center.x + c_dist - 1
+ for(x in t_center.x-c_dist to x)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+
+ y = t_center.y - c_dist + 1
+ x = t_center.x - c_dist
+ for(y in y to t_center.y+c_dist)
+ T = locate(x,y,t_center.z)
+ if(T)
+ L += T
+ c_dist++
+
+ return L
+
+//ultra range (no limitations on distance, faster than range for distances > 8); including areas drastically decreases performance
+/proc/urange(dist=0, atom/center=usr, orange=0, areas=0)
+ if(!dist)
+ if(!orange)
+ return list(center)
+ else
+ return list()
+
+ var/list/turfs = RANGE_TURFS(dist, center)
+ if(orange)
+ turfs -= get_turf(center)
+ . = list()
+ for(var/V in turfs)
+ var/turf/T = V
+ . += T
+ . += T.contents
+ if(areas)
+ . |= T.loc
+
+/proc/turf_clear(turf/T)
+ for(var/atom/A in T)
+ if(A.simulated)
+ return FALSE
+ return TRUE
+
+/proc/screen_loc2turf(scr_loc, turf/origin)
+ var/tX = splittext(scr_loc, ",")
+ var/tY = splittext(tX[2], ":")
+ var/tZ = origin.z
+ tY = tY[1]
+ tX = splittext(tX[1], ":")
+ tX = tX[1]
+ tX = max(1, min(world.maxx, origin.x + (text2num(tX) - (world.view + 1))))
+ tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1))))
+ return locate(tX, tY, tZ)
+
+/proc/get_closest_atom(type, list, source)
+ var/closest_atom
+ var/closest_distance
+ for(var/A in list)
+ if(!istype(A, type))
+ continue
+ var/distance = get_dist(source, A)
+ if(!closest_distance)
+ closest_distance = distance
+ closest_atom = A
+ else
+ if(closest_distance > distance)
+ closest_distance = distance
+ closest_atom = A
+ return closest_atom
+
+/proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
+ if(value == FALSE) //nothing should be calling us with a number, so this is safe
+ value = input("Enter type to find (blank for all, cancel to cancel)", "Search for type") as null|text
+ if(isnull(value))
+ return
+ value = trim(value)
+ if(!isnull(value) && value != "")
+ matches = filter_fancy_list(matches, value)
+
+ if(matches.len == 0)
+ return
+
+ var/chosen
+ if(matches.len == 1)
+ chosen = matches[1]
+ else
+ chosen = input("Select a type", "Pick Type", matches[1]) as null|anything in matches
+ if(!chosen)
+ return
+ chosen = matches[chosen]
+ return chosen
+
+/proc/make_types_fancy(var/list/types)
+ if(ispath(types))
+ types = list(types)
+ . = list()
+ for(var/type in types)
+ var/typename = "[type]"
+ var/static/list/TYPES_SHORTCUTS = list(
+ //longest paths comes first - otherwise they get shadowed by the more generic ones
+ /obj/effect/decal/cleanable = "CLEANABLE",
+ /obj/effect = "EFFECT",
+ /obj/item/ammo_casing = "AMMO",
+ /obj/item/book/manual = "MANUAL",
+ /obj/item/borg/upgrade = "BORG_UPGRADE",
+ /obj/item/cartridge = "PDA_CART",
+ /obj/item/clothing/head/helmet/space = "SPESSHELMET",
+ /obj/item/clothing/head = "HEAD",
+ /obj/item/clothing/under = "UNIFORM",
+ /obj/item/clothing/shoes = "SHOES",
+ /obj/item/clothing/suit = "SUIT",
+ /obj/item/clothing/gloves = "GLOVES",
+ /obj/item/clothing/mask/cigarette = "CIGARRETE", // oof
+ /obj/item/clothing/mask = "MASK",
+ /obj/item/clothing/glasses = "GLASSES",
+ /obj/item/clothing = "CLOTHING",
+ /obj/item/grenade/clusterbuster = "CLUSTERBUSTER",
+ /obj/item/grenade = "GRENADE",
+ /obj/item/gun = "GUN",
+ /obj/item/implant = "IMPLANT",
+ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK",
+ /obj/item/mecha_parts/mecha_equipment/weapon = "MECHA_WEAPON",
+ /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP",
+ /obj/item/melee = "MELEE",
+ /obj/item/mmi = "MMI",
+ /obj/item/nullrod = "NULLROD",
+ /obj/item/organ/external = "EXT_ORG",
+ /obj/item/organ/internal/cyberimp = "CYBERIMP",
+ /obj/item/organ/internal = "INT_ORG",
+ /obj/item/organ = "ORGAN",
+ /obj/item/pda = "PDA",
+ /obj/item/projectile = "PROJ",
+ /obj/item/radio/headset = "HEADSET",
+ /obj/item/reagent_containers/glass/beaker = "BEAKER",
+ /obj/item/reagent_containers/glass/bottle = "BOTTLE",
+ /obj/item/reagent_containers/food/pill/patch = "PATCH",
+ /obj/item/reagent_containers/food/pill = "PILL",
+ /obj/item/reagent_containers/food/drinks = "DRINK",
+ /obj/item/reagent_containers/food = "FOOD",
+ /obj/item/reagent_containers/syringe = "SYRINGE",
+ /obj/item/reagent_containers = "REAGENT_CONTAINERS",
+ /obj/item/robot_parts = "ROBOT_PARTS",
+ /obj/item/seeds = "SEED",
+ /obj/item/slime_extract = "SLIME_CORE",
+ /obj/item/spacepod_equipment/weaponry = "POD_WEAPON",
+ /obj/item/spacepod_equipment = "POD_EQUIP",
+ /obj/item/stack/sheet/mineral = "MINERAL",
+ /obj/item/stack/sheet = "SHEET",
+ /obj/item/stack/tile = "TILE",
+ /obj/item/stack = "STACK",
+ /obj/item/stock_parts/cell = "POWERCELL",
+ /obj/item/stock_parts = "STOCK_PARTS",
+ /obj/item/storage/firstaid = "FIRSTAID",
+ /obj/item/storage = "STORAGE",
+ /obj/item/tank = "GAS_TANK",
+ /obj/item/toy/crayon = "CRAYON",
+ /obj/item/toy = "TOY",
+ /obj/item = "ITEM",
+ /obj/machinery/atmospherics = "ATMOS_MACH",
+ /obj/machinery/computer = "CONSOLE",
+ /obj/machinery/door/airlock = "AIRLOCK",
+ /obj/machinery/door = "DOOR",
+ /obj/machinery/kitchen_machine = "KITCHEN",
+ /obj/machinery/portable_atmospherics/canister = "CANISTER",
+ /obj/machinery/portable_atmospherics = "PORT_ATMOS",
+ /obj/machinery/power = "POWER",
+ /obj/machinery/telecomms = "TCOMMS",
+ /obj/machinery = "MACHINERY",
+ /obj/mecha = "MECHA",
+ /obj/structure/closet/crate = "CRATE",
+ /obj/structure/closet = "CLOSET",
+ /obj/structure/statue = "STATUE",
+ /obj/structure/chair = "CHAIR", // oh no
+ /obj/structure/bed = "BED",
+ /obj/structure/chair/stool = "STOOL",
+ /obj/structure/table = "TABLE",
+ /obj/structure = "STRUCTURE",
+ /obj/vehicle = "VEHICLE",
+ /obj = "O",
+ /datum = "D",
+ /turf/simulated/floor = "SIM_FLOOR",
+ /turf/simulated/wall = "SIM_WALL",
+ /turf/unsimulated/floor = "UNSIM_FLOOR",
+ /turf/unsimulated/wall = "UNSIM_WALL",
+ /turf = "T",
+ /mob/living/carbon/alien = "XENO",
+ /mob/living/carbon/human = "HUMAN",
+ /mob/living/carbon = "CARBON",
+ /mob/living/silicon/robot = "CYBORG",
+ /mob/living/silicon/ai = "AI",
+ /mob/living/silicon = "SILICON",
+ /mob/living/simple_animal/bot = "BOT",
+ /mob/living/simple_animal = "SIMPLE",
+ /mob/living = "LIVING",
+ /mob = "M"
+ )
+ for(var/tn in TYPES_SHORTCUTS)
+ if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/")
+ typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/"))
+ break
+ .[typename] = type
+
+
+/proc/get_fancy_list_of_atom_types()
+ var/static/list/pre_generated_list
+ if(!pre_generated_list) //init
+ pre_generated_list = make_types_fancy(typesof(/atom))
+ return pre_generated_list
+
+
+/proc/get_fancy_list_of_datum_types()
+ var/static/list/pre_generated_list
+ if(!pre_generated_list) //init
+ pre_generated_list = make_types_fancy(sortList(typesof(/datum) - typesof(/atom)))
+ return pre_generated_list
+
+
+/proc/filter_fancy_list(list/L, filter as text)
+ var/list/matches = new
+ for(var/key in L)
+ var/value = L[key]
+ if(findtext("[key]", filter) || findtext("[value]", filter))
+ matches[key] = value
+ return matches
+
+//Key thing that stops lag. Cornerstone of performance in ss13, Just sitting here, in unsorted.dm.
+
+//Increases delay as the server gets more overloaded,
+//as sleeps aren't cheap and sleeping only to wake up and sleep again is wasteful
+#define DELTA_CALC max(((max(TICK_USAGE, world.cpu) / 100) * max(Master.sleep_delta-1,1)), 1)
+
+//returns the number of ticks slept
+/proc/stoplag(initial_delay)
+ if(!Master || !(Master.current_runlevel & RUNLEVELS_DEFAULT))
+ sleep(world.tick_lag)
+ return 1
+ if(!initial_delay)
+ initial_delay = world.tick_lag
+ . = 0
+ var/i = DS2TICKS(initial_delay)
+ do
+ . += CEILING(i*DELTA_CALC, 1)
+ sleep(i*world.tick_lag*DELTA_CALC)
+ i *= 2
+ while(TICK_USAGE > min(TICK_LIMIT_TO_RUN, Master.current_ticklimit))
+
+#undef DELTA_CALC
+
+// This proc gets a list of all "points of interest" (poi's) that can be used by admins to track valuable mobs or atoms (such as the nuke disk).
+/proc/getpois(mobs_only=0,skip_mindless=0)
+ var/list/mobs = sortmobs()
+ var/list/names = list()
+ var/list/pois = list()
+ var/list/namecounts = list()
+
+ for(var/mob/M in mobs)
+ if(skip_mindless && (!M.mind && !M.ckey))
+ if(!isbot(M) && !istype(M, /mob/camera/))
+ continue
+ if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins
+ continue
+ var/name = M.name
+ if(name in names)
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+ if(M.real_name && M.real_name != M.name)
+ name += " \[[M.real_name]\]"
+ if(M.stat == DEAD)
+ if(istype(M, /mob/dead/observer/))
+ name += " \[ghost\]"
+ else
+ name += " \[dead\]"
+ pois[name] = M
+
+ if(!mobs_only)
+ for(var/atom/A in GLOB.poi_list)
+ if(!A || !A.loc)
+ continue
+ var/name = A.name
+ if(names.Find(name))
+ namecounts[name]++
+ name = "[name] ([namecounts[name]])"
+ else
+ names.Add(name)
+ namecounts[name] = 1
+ pois[name] = A
+
+ return pois
+
+/proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20)
+ var/client/C
+ if(istype(mob_or_client, /mob))
+ var/mob/M = mob_or_client
+ if(M.client)
+ C = M.client
+ else
+ return
+ else if(istype(mob_or_client, /client))
+ C = mob_or_client
+
+ if(!istype(C))
+ return
+
+ C.color = flash_color
+ spawn(0)
+ animate(C, color = initial(C.color), time = flash_time)
+
+#define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255)))
+
+/proc/make_bit_triplet()
+ var/list/num_sample = list(1, 2, 3, 4, 5, 6, 7, 8, 9)
+ var/result = 0
+ for(var/i = 0, i < 3, i++)
+ var/num = pick(num_sample)
+ num_sample -= num
+ result += (1 << num)
+ return result
+
+/proc/pixel_shift_dir(var/dir, var/amount_x = 32, var/amount_y = 32) //Returns a list with pixel_shift values that will shift an object's icon one tile in the direction passed.
+ amount_x = min(max(0, amount_x), 32) //No less than 0, no greater than 32.
+ amount_y = min(max(0, amount_x), 32)
+ var/list/shift = list("x" = 0, "y" = 0)
+ switch(dir)
+ if(NORTH)
+ shift["y"] = amount_y
+ if(SOUTH)
+ shift["y"] = -amount_y
+ if(EAST)
+ shift["x"] = amount_x
+ if(WEST)
+ shift["x"] = -amount_x
+ if(NORTHEAST)
+ shift = list("x" = amount_x, "y" = amount_y)
+ if(NORTHWEST)
+ shift = list("x" = -amount_x, "y" = amount_y)
+ if(SOUTHEAST)
+ shift = list("x" = amount_x, "y" = -amount_y)
+ if(SOUTHWEST)
+ shift = list("x" = -amount_x, "y" = -amount_y)
+
+ return shift
+
+//Return a list of atoms in a location of a given type. Can be refined to look for pixel-shift.
+/proc/get_atoms_of_type(var/atom/here, var/type, var/check_shift, var/shift_x = 0, var/shift_y = 0)
+ . = list()
+ if(here)
+ for(var/atom/thing in here)
+ if(istype(thing, type) && (check_shift && thing.pixel_x == shift_x && thing.pixel_y == shift_y))
+ . += thing
+
+//gives us the stack trace from CRASH() without ending the current proc.
+/proc/stack_trace(msg)
+ CRASH(msg)
+
+/datum/proc/stack_trace(msg)
+ CRASH(msg)
+
+/proc/pass()
+ return
+
+/atom/proc/Shake(pixelshiftx = 15, pixelshifty = 15, duration = 250)
+ var/initialpixelx = pixel_x
+ var/initialpixely = pixel_y
+ var/shiftx = rand(-pixelshiftx,pixelshiftx)
+ var/shifty = rand(-pixelshifty,pixelshifty)
+ animate(src, pixel_x = pixel_x + shiftx, pixel_y = pixel_y + shifty, time = 0.2, loop = duration)
+ pixel_x = initialpixelx
+ pixel_y = initialpixely
+
+/proc/params2turf(scr_loc, turf/origin, client/C)
+ if(!scr_loc)
+ return null
+ var/tX = splittext(scr_loc, ",")
+ var/tY = splittext(tX[2], ":")
+ var/tZ = origin.z
+ tY = tY[1]
+ tX = splittext(tX[1], ":")
+ tX = tX[1]
+ var/list/actual_view = getviewsize(C ? C.view : world.view)
+ tX = Clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx)
+ tY = Clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy)
+ return locate(tX, tY, tZ)
diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm
index be5f4867c56..384cfb5f29a 100644
--- a/code/_globalvars/lists/names.dm
+++ b/code/_globalvars/lists/names.dm
@@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(mime_names, file2list("config/names/mime.txt"))
GLOBAL_LIST_INIT(golem_names, file2list("config/names/golem.txt"))
GLOBAL_LIST_INIT(verbs, file2list("config/names/verbs.txt"))
+GLOBAL_LIST_INIT(nouns, file2list("config/names/nouns.txt"))
GLOBAL_LIST_INIT(adjectives, file2list("config/names/adjectives.txt"))
GLOBAL_LIST_INIT(dream_strings, file2list("config/names/dreams.txt"))
GLOBAL_LIST_INIT(nightmare_strings, file2list("config/names/nightmares.txt"))
diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index f933105e13b..f4cdd766cb9 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -88,4 +88,6 @@ var/copier_items_printed_logged = FALSE
GLOBAL_VAR(map_name) // Self explanatory
-var/global/datum/datacore/data_core = null // Station datacore, manifest, etc
\ No newline at end of file
+var/global/datum/datacore/data_core = null // Station datacore, manifest, etc
+
+GLOBAL_VAR_INIT(panic_bunker_enabled, 0) // Is the panic bunker enabled
\ No newline at end of file
diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm
index 5780e86a298..15ed4429965 100644
--- a/code/_onclick/hud/action_button.dm
+++ b/code/_onclick/hud/action_button.dm
@@ -1,4 +1,3 @@
-
/obj/screen/movable/action_button
var/datum/action/linked_action
screen_loc = null
@@ -6,18 +5,26 @@
/obj/screen/movable/action_button/Click(location,control,params)
var/list/modifiers = params2list(params)
if(modifiers["shift"])
- moved = 0
+ if(locked)
+ to_chat(usr, "Action button \"[name]\" is locked, unlock it first.")
+ return TRUE
+ moved = FALSE
usr.update_action_buttons() //redraw buttons that are no longer considered "moved"
- return 1
- if(usr.next_move >= world.time) // Is this needed ?
+ return TRUE
+ if(modifiers["ctrl"])
+ locked = !locked
+ to_chat(usr, "Action button \"[name]\" [locked ? "" : "un"]locked.")
+ return TRUE
+ if(usr.next_click > world.time)
return
+ usr.next_click = world.time + 1
linked_action.Trigger()
- return 1
+ return TRUE
//Hide/Show Action Buttons ... Button
/obj/screen/movable/action_button/hide_toggle
name = "Hide Buttons"
- desc = "Shift-click any button to reset its position. Alt-click to reset all buttons to their default positions."
+ desc = "Shift-click any button to reset its position, and Control-click it to lock/unlock its position. Alt-click this button to reset all buttons to their default positions."
icon = 'icons/mob/actions/actions.dmi'
icon_state = "bg_default"
var/hidden = 0
@@ -25,9 +32,16 @@
/obj/screen/movable/action_button/hide_toggle/Click(location,control,params)
var/list/modifiers = params2list(params)
if(modifiers["shift"])
+ if(locked)
+ to_chat(usr, "Action button \"[name]\" is locked, unlock it first.")
+ return TRUE
moved = FALSE
usr.update_action_buttons(TRUE)
return TRUE
+ if(modifiers["ctrl"])
+ locked = !locked
+ to_chat(usr, "Action button \"[name]\" [locked ? "" : "un"]locked.")
+ return TRUE
if(modifiers["alt"])
for(var/V in usr.actions)
var/datum/action/A = V
@@ -69,7 +83,6 @@
var/image/img = image(icon, src, hidden ? "show" : "hide")
overlays += img
-
/obj/screen/movable/action_button/MouseEntered(location,control,params)
openToolTip(usr,src,params,title = name,content = desc)
@@ -77,7 +90,6 @@
/obj/screen/movable/action_button/MouseExited()
closeToolTip(usr)
-
/mob/proc/update_action_buttons_icon()
for(var/X in actions)
var/datum/action/A = X
@@ -122,7 +134,6 @@
client.screen += hud_used.hide_actions_toggle
-
#define AB_MAX_COLUMNS 10
/datum/hud/proc/ButtonNumberToScreenCoords(number) // TODO : Make this zero-indexed for readabilty
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 3081880394f..8ce4d64911b 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -177,6 +177,41 @@
desc = "You're severely malnourished. The hunger pains make moving around a chore."
icon_state = "starving"
+///Vampire "hunger"
+
+/obj/screen/alert/fat/vampire
+ name = "Fat"
+ desc = "You somehow drank too much blood, lardass. Run around the station and lose some weight."
+ icon_state = "v_fat"
+
+/obj/screen/alert/full/vampire
+ name = "Full"
+ desc = "You feel full and satisfied, but you know you will thirst for more blood soon..."
+ icon_state = "v_full"
+
+/obj/screen/alert/well_fed/vampire
+ name = "Well Fed"
+ desc = "You feel quite satisfied, but you could do with a bit more blood."
+ icon_state = "v_well_fed"
+
+/obj/screen/alert/fed/vampire
+ name = "Fed"
+ desc = "You feel moderately satisfied, but a bit more blood wouldn't hurt."
+ icon_state = "v_fed"
+
+/obj/screen/alert/hungry/vampire
+ name = "Hungry"
+ desc = "You currently thirst for blood."
+ icon_state = "v_hungry"
+
+/obj/screen/alert/starving/vampire
+ name = "Starving"
+ desc = "You're severely thirsty. The thirst pains make moving around a chore."
+ icon_state = "v_starving"
+
+//End of Vampire "hunger"
+
+
/obj/screen/alert/hot
name = "Too Hot"
desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit."
diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm
index 668e0e67fc7..366931cea33 100644
--- a/code/_onclick/hud/movable_screen_objects.dm
+++ b/code/_onclick/hud/movable_screen_objects.dm
@@ -11,6 +11,7 @@
/obj/screen/movable
var/snap2grid = FALSE
var/moved = FALSE
+ var/locked = TRUE
var/x_off = -16
var/y_off = -16
@@ -20,8 +21,10 @@
/obj/screen/movable/snap
snap2grid = TRUE
-
/obj/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params)
+ if(locked) //no! I am locked! begone!
+ return
+
var/list/PM = params2list(params)
//No screen-loc information? abort.
@@ -47,7 +50,6 @@
moved = screen_loc
-
//Debug procs
/client/proc/test_movable_UI()
set category = "Debug"
@@ -67,7 +69,6 @@
screen += M
-
/client/proc/test_snap_UI()
set category = "Debug"
set name = "Spawn Snap UI Object"
@@ -84,4 +85,4 @@
S.screen_loc = screen_l
- screen += S
\ No newline at end of file
+ screen += S
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index c583617ac23..91c8d6250b4 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -453,7 +453,6 @@
/obj/screen/healths/corgi
icon = 'icons/mob/screen_corgi.dmi'
-
/obj/screen/healths/guardian
name = "summoner health"
icon = 'icons/mob/guardian.dmi'
@@ -467,14 +466,18 @@
screen_loc = ui_healthdoll
var/list/cached_healthdoll_overlays = list() // List of icon states (strings) for overlays
+/obj/screen/healthdoll/Click()
+ if(ishuman(usr))
+ var/mob/living/carbon/H = usr
+ H.check_self_for_injuries()
+
/obj/screen/component_button
var/obj/screen/parent
-
/obj/screen/component_button/Initialize(mapload, obj/screen/new_parent)
. = ..()
parent = new_parent
/obj/screen/component_button/Click(params)
if(parent)
- parent.component_click(src, params)
\ No newline at end of file
+ parent.component_click(src, params)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 3f155fa8031..baa0adc07ec 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -72,11 +72,15 @@
var/assistantlimit = 0 //enables assistant limiting
var/assistantratio = 2 //how many assistants to security members
+ // The AFK subsystem will not be activated if any of the below config values are equal or less than 0
+ var/warn_afk_minimum = 0 // How long till you get a warning while being AFK
+ var/auto_cryo_afk = 0 // How long till you get put into cryo when you're AFK
+ var/auto_despawn_afk = 0 // How long till you actually despawn in cryo when you're AFK (Not ssd so not automatic)
+
var/auto_cryo_ssd_mins = 0
var/ssd_warning = 0
-
- var/prob_free_golems = 75 //chance for free golems spawners to appear roundstart
- var/unrestricted_free_golems = FALSE //if true, free golems can appear on all roundtypes
+
+ var/list_afk_minimum = 5 // How long people have to be AFK before it's listed on the "List AFK players" verb
var/traitor_objectives_amount = 2
var/shadowling_max_age = 0
@@ -305,20 +309,24 @@
if("jobs_have_minimal_access")
config.jobs_have_minimal_access = 1
- if("prob_free_golems")
- config.prob_free_golems = text2num(value)
-
- if("unrestricted_free_golems")
- config.unrestricted_free_golems = TRUE
-
if("shadowling_max_age")
config.shadowling_max_age = text2num(value)
+ if("warn_afk_minimum")
+ config.warn_afk_minimum = text2num(value)
+ if("auto_cryo_afk")
+ config.auto_cryo_afk = text2num(value)
+ if("auto_despawn_afk")
+ config.auto_despawn_afk = text2num(value)
+
if("auto_cryo_ssd_mins")
config.auto_cryo_ssd_mins = text2num(value)
if("ssd_warning")
config.ssd_warning = 1
+ if("list_afk_minimum")
+ config.list_afk_minimum = text2num(value)
+
if("ipintel_email")
if(value != "ch@nge.me")
config.ipintel_email = value
diff --git a/code/controllers/subsystem/afk.dm b/code/controllers/subsystem/afk.dm
new file mode 100644
index 00000000000..9f409fd35b4
--- /dev/null
+++ b/code/controllers/subsystem/afk.dm
@@ -0,0 +1,81 @@
+#define AFK_WARNED 1
+#define AFK_CRYOD 2
+
+SUBSYSTEM_DEF(afk)
+ name = "AFK Watcher"
+ wait = 300
+ flags = SS_BACKGROUND
+ var/list/afk_players = list() // Associative list. ckey as key and AFK state as value
+
+
+/datum/controller/subsystem/afk/Initialize()
+ if(config.warn_afk_minimum <= 0 || config.auto_cryo_afk <= 0 || config.auto_despawn_afk <= 0)
+ flags |= SS_NO_FIRE
+
+/datum/controller/subsystem/afk/fire()
+ var/list/toRemove = list()
+ for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ if(!H.ckey) // Useless non ckey creatures
+ continue
+
+ var/turf/T
+ // Only players and players with the AFK watch enabled
+ // No dead, unconcious, restrained, people without jobs, people on other Z levels than the station or antags
+ if(!H.client || !H.client.prefs.afk_watch || !H.mind || \
+ H.stat || H.restrained() || !H.job || H.mind.special_role || \
+ !is_station_level((T = get_turf(H)).z)) // Assign the turf as last. Small optimization
+ if(afk_players[H.ckey])
+ toRemove += H.ckey
+ continue
+
+ var/mins_afk = round(H.client.inactivity / 600)
+ if(mins_afk < config.warn_afk_minimum)
+ if(afk_players[H.ckey])
+ toRemove += H.ckey
+ continue
+
+ if(!afk_players[H.ckey])
+ afk_players[H.ckey] = AFK_WARNED
+ warn(H, "You are AFK for [mins_afk] minutes. You will be cryod after [config.auto_cryo_afk] total minutes and fully despawned after [config.auto_despawn_afk] total minutes. Please move or click in game if you want to avoid being despawned.")
+ else
+ var/area/A = T.loc // Turfs loc is the area
+ if(afk_players[H.ckey] == AFK_WARNED)
+ if(mins_afk >= config.auto_cryo_afk && A.can_get_auto_cryod)
+ if(A.fast_despawn)
+ toRemove += H.ckey
+ warn(H, "You are have been despawned after being AFK for [mins_afk] minutes. You have been despawned instantly due to you being in a secure area.")
+ msg_admins(H, mins_afk, T, "forcefully despawned", "AFK in a fast despawn area")
+ force_cryo_human(H)
+ else if(cryo_ssd(H))
+ afk_players[H.ckey] = AFK_CRYOD
+ msg_admins(H, mins_afk, T, "put into cryostorage")
+ warn(H, "You are AFK for [mins_afk] minutes and have been moved to cryostorage. After being AFK for [config.auto_despawn_afk] total minutes you will be fully despawned. Please eject yourself (right click, eject) out of the cryostorage if you want to avoid being despawned.")
+
+ else if(mins_afk >= config.auto_despawn_afk)
+ var/obj/machinery/cryopod/P = H.loc
+ msg_admins(H, mins_afk, T, "forcefully despawned")
+ warn(H, "You are have been despawned after being AFK for [mins_afk] minutes.")
+ toRemove += H.ckey
+ P.despawn_occupant()
+
+ removeFromWatchList(toRemove)
+
+/datum/controller/subsystem/afk/proc/warn(mob/living/carbon/human/H, text)
+ to_chat(H, text)
+ SEND_SOUND(H, 'sound/effects/adminhelp.ogg')
+ if(H.client)
+ window_flash(H.client)
+
+/datum/controller/subsystem/afk/proc/msg_admins(mob/living/carbon/human/H, mins_afk, turf/location, action, info)
+ log_admin("[key_name(H)] has been [action] by the AFK Watcher subsystem after being AFK for [mins_afk] minutes.[info ? " Extra info:" + info : ""]")
+ message_admins("[key_name_admin(H)] at ([get_area(location).name] [ADMIN_JMP(location)]) has been [action] by the AFK Watcher subsystem after being AFK for [mins_afk] minutes.[info ? " Extra info:" + info : ""]")
+
+/datum/controller/subsystem/afk/proc/removeFromWatchList(list/toRemove)
+ for(var/C in toRemove)
+ for(var/i in 1 to afk_players.len)
+ if(afk_players[i] == C)
+ afk_players.Cut(i, i + 1)
+ break
+
+#undef AFK_WARNED
+#undef AFK_CRYOD
\ No newline at end of file
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index 79de45c3248..fe48494f321 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -30,6 +30,7 @@ SUBSYSTEM_DEF(air)
var/list/networks = list()
var/list/atmos_machinery = list()
var/list/pipe_init_dirs_cache = list()
+ var/list/machinery_to_construct = list()
@@ -67,9 +68,10 @@ SUBSYSTEM_DEF(air)
setup_allturfs()
setup_atmos_machinery(GLOB.machines)
setup_pipenets(GLOB.machines)
+ for(var/obj/machinery/atmospherics/A in machinery_to_construct)
+ A.initialize_atmos_network()
return ..()
-
/datum/controller/subsystem/air/fire(resumed = 0)
var/timer = TICK_USAGE_REAL
diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm
index 95553ab0d7e..2f415efa38d 100644
--- a/code/controllers/subsystem/events.dm
+++ b/code/controllers/subsystem/events.dm
@@ -249,7 +249,7 @@ SUBSYSTEM_DEF(events)
else if(href_list["back"])
selected_event_container = null
else if(href_list["set_name"])
- var/name = input("Enter event name.", "Set Name") as text|null
+ var/name = clean_input("Enter event name.", "Set Name")
if(name)
var/datum/event_meta/EM = locate(href_list["set_name"])
EM.name = name
diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm
new file mode 100644
index 00000000000..f379deec72b
--- /dev/null
+++ b/code/controllers/subsystem/input.dm
@@ -0,0 +1,122 @@
+SUBSYSTEM_DEF(input)
+ name = "Input"
+ wait = 1 //SS_TICKER means this runs every tick
+ init_order = INIT_ORDER_INPUT
+ flags = SS_TICKER
+ priority = FIRE_PRIORITY_INPUT
+ runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
+
+ var/list/macro_sets
+ var/list/movement_keys
+ var/list/alt_movement_keys
+
+/datum/controller/subsystem/input/Initialize()
+ setup_default_macro_sets()
+
+ setup_default_movement_keys()
+
+ initialized = TRUE
+
+ refresh_client_macro_sets()
+
+ return ..()
+
+// This is for when macro sets are eventualy datumized
+/datum/controller/subsystem/input/proc/setup_default_macro_sets()
+ var/list/static/default_macro_sets
+
+ if(default_macro_sets)
+ macro_sets = default_macro_sets
+ return
+
+ default_macro_sets = list(
+ "default" = list(
+ "Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
+ "O" = "ooc",
+ "T" = ".say",
+ "M" = ".me",
+ "Back" = "\".winset \\\"input.focus=true input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
+ "Any" = "\"KeyDown \[\[*\]\]\"",
+ "Any+UP" = "\"KeyUp \[\[*\]\]\"",
+ ),
+ "old_default" = list(
+ "Tab" = "\".winset \\\"mainwindow.macro=old_hotkeys map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"",
+ "Ctrl+T" = ".say",
+ "Ctrl+O" = "ooc",
+ ),
+ "old_hotkeys" = list(
+ "Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"",
+ "O" = "ooc",
+ "T" = ".say",
+ "M" = ".me",
+ "Back" = "\".winset \\\"input.focus=true input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs
+ "Any" = "\"KeyDown \[\[*\]\]\"",
+ "Any+UP" = "\"KeyUp \[\[*\]\]\"",
+ ),
+ )
+
+ // Because i'm lazy and don't want to type all these out twice
+ var/list/old_default = default_macro_sets["old_default"]
+
+ var/list/static/oldmode_keys = list(
+ "North", "East", "South", "West",
+ "Northeast", "Southeast", "Northwest", "Southwest",
+ "Insert", "Delete", "Ctrl", "Alt",
+ "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12",
+ )
+
+ for(var/i in 1 to oldmode_keys.len)
+ var/key = oldmode_keys[i]
+ old_default[key] = "\"KeyDown [key]\""
+ old_default["[key]+UP"] = "\"KeyUp [key]\""
+
+ var/list/static/oldmode_ctrl_override_keys = list(
+ "W" = "W", "A" = "A", "S" = "S", "D" = "D", // movement
+ "1" = "1", "2" = "2", "3" = "3", "4" = "4", // intent
+ "B" = "B", // resist
+ "E" = "E", // quick equip
+ "F" = "F", // intent left
+ "G" = "G", // intent right
+ "H" = "H", // stop pulling
+ "Q" = "Q", // drop
+ "R" = "R", // throw
+ "X" = "X", // switch hands
+ "Y" = "Y", // activate item
+ "Z" = "Z", // activate item
+ )
+
+ for(var/i in 1 to oldmode_ctrl_override_keys.len)
+ var/key = oldmode_ctrl_override_keys[i]
+ var/override = oldmode_ctrl_override_keys[key]
+ old_default["Ctrl+[key]"] = "\"KeyDown [override]\""
+ old_default["Ctrl+[key]+UP"] = "\"KeyUp [override]\""
+
+ macro_sets = default_macro_sets
+
+// For initially setting up or resetting to default the movement keys
+/datum/controller/subsystem/input/proc/setup_default_movement_keys()
+ var/static/list/default_movement_keys = list(
+ "W" = NORTH, "A" = WEST, "S" = SOUTH, "D" = EAST, // WASD
+ "North" = NORTH, "West" = WEST, "South" = SOUTH, "East" = EAST, // Arrow keys & Numpad
+ )
+ var/static/list/azerty_movement_keys = list(
+ "Z" = NORTH, "Q" = WEST, "S" = SOUTH, "D" = EAST, // WASD
+ "North" = NORTH, "West" = WEST, "South" = SOUTH, "East" = EAST, // Arrow keys & Numpad
+ )
+ movement_keys = default_movement_keys.Copy()
+ alt_movement_keys = azerty_movement_keys.Copy()
+
+// Badmins just wanna have fun ♪
+/datum/controller/subsystem/input/proc/refresh_client_macro_sets()
+ var/list/clients = GLOB.clients
+ for(var/i in 1 to clients.len)
+ var/client/user = clients[i]
+ user.set_macros()
+
+/datum/controller/subsystem/input/fire()
+ var/list/clients = GLOB.clients // Let's sing the list cache song
+ if(listclearnulls(clients)) // clear nulls before we run keyloop
+ log_world("Found a null in clients list!")
+ for(var/i in 1 to clients.len)
+ var/client/C = clients[i]
+ C.keyLoop()
diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm
index 6a603bd7235..166083b36ff 100644
--- a/code/controllers/subsystem/jobs.dm
+++ b/code/controllers/subsystem/jobs.dm
@@ -25,9 +25,9 @@ SUBSYSTEM_DEF(jobs)
// Only fires every 5 minutes
/datum/controller/subsystem/jobs/fire()
if(!config.sql_enabled || !config.use_exp_tracking)
- return
+ return
update_exp(5,0)
-
+
/datum/controller/subsystem/jobs/proc/SetupOccupations(var/list/faction = list("Station"))
occupations = list()
var/list/all_jobs = subtypesof(/datum/job)
@@ -284,7 +284,7 @@ SUBSYSTEM_DEF(jobs)
//Get the players who are ready
for(var/mob/new_player/player in GLOB.player_list)
- if(player.ready && player.mind && !player.mind.assigned_role)
+ if(player.ready && player.has_valid_preferences() && player.mind && !player.mind.assigned_role)
unassigned += player
if(player.client.prefs.randomslot)
player.client.prefs.load_random_character_slot(player.client)
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index b45ef833b9f..ec53c4b4d6b 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -20,7 +20,7 @@ SUBSYSTEM_DEF(mapping)
var/num_extra_space = rand(config.extra_space_ruin_levels_min, config.extra_space_ruin_levels_max)
for(var/i = 1, i <= num_extra_space, i++)
- var/zlev = space_manager.add_new_zlevel("[EMPTY_AREA] #[i]", linkage = CROSSLINKED)
+ var/zlev = space_manager.add_new_zlevel("[EMPTY_AREA] #[i]", linkage = CROSSLINKED, traits = list(REACHABLE))
seedRuins(list(zlev), rand(0, 3), /area/space, space_ruins_templates)
// Setup the Z-level linkage
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index bbe2db385a0..4aa30657778 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -42,11 +42,6 @@ SUBSYSTEM_DEF(ticker)
'sound/music/title1.ogg',\
'sound/music/title2.ogg',\
'sound/music/title3.ogg',)
- // Setup codephrase
- if(!GLOB.syndicate_code_phrase)
- GLOB.syndicate_code_phrase = generate_code_phrase()
- if(!GLOB.syndicate_code_response)
- GLOB.syndicate_code_response = generate_code_phrase()
// Map name
if(using_map && using_map.name)
@@ -197,6 +192,10 @@ SUBSYSTEM_DEF(ticker)
//shuttle_controller.setup_shuttle_docks()
spawn(0)//Forking here so we dont have to wait for this to finish
+ if(!GLOB.syndicate_code_phrase)
+ GLOB.syndicate_code_phrase = generate_code_phrase()
+ if(!GLOB.syndicate_code_response)
+ GLOB.syndicate_code_response = generate_code_phrase()
mode.post_setup()
//Cleanup some stuff
for(var/obj/effect/landmark/start/S in GLOB.landmarks_list)
diff --git a/code/controllers/subsystem/tickets/mentor_tickets.dm b/code/controllers/subsystem/tickets/mentor_tickets.dm
index 32f7faf4abb..d8bae77840c 100644
--- a/code/controllers/subsystem/tickets/mentor_tickets.dm
+++ b/code/controllers/subsystem/tickets/mentor_tickets.dm
@@ -8,7 +8,7 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
name = "Mentor Tickets"
ticket_system_name = "Mentor Tickets"
ticket_name = "Mentor Ticket"
- span_text = ""
+ span_class = "mentorhelp"
close_rights = R_MENTOR | R_ADMIN
/datum/controller/subsystem/tickets/mentor_tickets/message_staff(var/msg)
@@ -17,5 +17,5 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
/datum/controller/subsystem/tickets/mentor_tickets/Initialize()
close_messages = list("- [ticket_name] Closed -",
"Please try to be as descriptive as possible in mentor helps. Mentors do not know the full situation you're in and need more information to give you a helpful response.",
- "[span_text]Your [ticket_name] has now been closed.")
+ "Your [ticket_name] has now been closed.")
return ..()
diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm
index cf9aed29e83..1b1735b34c1 100644
--- a/code/controllers/subsystem/tickets/tickets.dm
+++ b/code/controllers/subsystem/tickets/tickets.dm
@@ -12,7 +12,7 @@
SUBSYSTEM_DEF(tickets)
name = "Admin Tickets"
- var/span_text = ""
+ var/span_class = "adminticket"
var/ticket_system_name = "Admin Tickets"
var/ticket_name = "Admin Ticket"
var/close_rights = R_ADMIN
@@ -30,7 +30,7 @@ SUBSYSTEM_DEF(tickets)
/datum/controller/subsystem/tickets/Initialize()
close_messages = list("- [ticket_name] Rejected! -",
"Please try to be calm, clear, and descriptive in admin helps, do not assume the staff member has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.",
- "[span_text]Your [ticket_name] has now been closed.")
+ "Your [ticket_name] has now been closed.")
LAZYINITLIST(allTickets)
return ..()
@@ -40,7 +40,7 @@ SUBSYSTEM_DEF(tickets)
var/report
for(var/num in stales)
report += "[num], "
- message_staff("[span_text]Tickets [report] have been open for over [TICKET_TIMEOUT / 600] minutes. Changing status to stale.")
+ message_staff("Tickets [report] have been open for over [TICKET_TIMEOUT / 600] minutes. Changing status to stale.")
/datum/controller/subsystem/tickets/stat_entry()
..("Tickets: [LAZYLEN(allTickets)]")
@@ -80,7 +80,7 @@ SUBSYSTEM_DEF(tickets)
var/datum/ticket/existingTicket = checkForOpenTicket(C)
if(existingTicket)
existingTicket.setCooldownPeriod()
- to_chat(C.mob, "[span_text]Your [ticket_name] #[existingTicket.ticketNum] remains open! Visit \"My tickets\" under the Admin Tab to view it.")
+ to_chat(C.mob, "Your [ticket_name] #[existingTicket.ticketNum] remains open! Visit \"My tickets\" under the Admin Tab to view it.")
return
if(!title)
@@ -93,7 +93,7 @@ SUBSYSTEM_DEF(tickets)
T.mobControlled = C.mob
//Inform the user that they have opened a ticket
- to_chat(C, "[span_text]You have opened [ticket_name] number #[(getTicketCounter() - 1)]! Please be patient and we will help you soon!")
+ to_chat(C, "You have opened [ticket_name] number #[(getTicketCounter() - 1)]! Please be patient and we will help you soon!")
//Set ticket state with key N to open
/datum/controller/subsystem/tickets/proc/openTicket(N)
@@ -138,8 +138,10 @@ SUBSYSTEM_DEF(tickets)
var/datum/ticket/T = allTickets[N]
return T.clientName
-/datum/controller/subsystem/tickets/proc/assignStaffToTicket(client/C, var/N)
+/datum/controller/subsystem/tickets/proc/assignStaffToTicket(client/C, N)
var/datum/ticket/T = allTickets[N]
+ if(T.staffAssigned != null && T.staffAssigned != C && alert("Ticket is already assigned to [T.staffAssigned.ckey]. Are you sure you want to take it?","Take ticket","No","Yes") != "Yes")
+ return FALSE
T.assignStaff(C)
return TRUE
@@ -158,7 +160,7 @@ SUBSYSTEM_DEF(tickets)
var/ticketState // State of the ticket, open, closed, resolved etc
var/timeUntilStale // When the ticket goes stale
var/ticketCooldown // Cooldown before allowing the user to open another ticket.
- var/staffAssigned // Staff member who has assigned themselves to this ticket
+ var/client/staffAssigned // Staff member who has assigned themselves to this ticket
/datum/ticket/New(tit, cont, num)
title = tit
@@ -367,15 +369,15 @@ UI STUFF
if(href_list["resolve"])
var/indexNum = text2num(href_list["resolve"])
if(resolveTicket(indexNum))
- message_staff("[span_text][usr.client] / ([usr]) resolved [ticket_name] number [indexNum]")
- to_chat_safe(returnClient(indexNum), "[span_text]Your [ticket_name] has now been resolved.")
+ message_staff("[usr.client] / ([usr]) resolved [ticket_name] number [indexNum]")
+ to_chat_safe(returnClient(indexNum), "Your [ticket_name] has now been resolved.")
showUI(usr)
if(href_list["detailresolve"])
var/indexNum = text2num(href_list["detailresolve"])
if(resolveTicket(indexNum))
- message_staff("[span_text][usr.client] / ([usr]) resolved [ticket_name] number [indexNum]")
- to_chat_safe(returnClient(indexNum), "[span_text]Your [ticket_name] has now been resolved.")
+ message_staff("[usr.client] / ([usr]) resolved [ticket_name] number [indexNum]")
+ to_chat_safe(returnClient(indexNum), "Your [ticket_name] has now been resolved.")
showDetailUI(usr, indexNum)
if(href_list["detailclose"])
@@ -386,7 +388,7 @@ UI STUFF
if(alert("Are you sure? This will send a negative message.",,"Yes","No") != "Yes")
return
if(closeTicket(indexNum))
- message_staff("[span_text][usr.client] / ([usr]) closed [ticket_name] number [indexNum]")
+ message_staff("[usr.client] / ([usr]) closed [ticket_name] number [indexNum]")
to_chat_safe(returnClient(indexNum), close_messages)
showDetailUI(usr, indexNum)
@@ -394,7 +396,7 @@ UI STUFF
if(href_list["detailreopen"])
var/indexNum = text2num(href_list["detailreopen"])
if(openTicket(indexNum))
- message_staff("[span_text][usr.client] / ([usr]) re-opened [ticket_name] number [indexNum]")
+ message_staff("[usr.client] / ([usr]) re-opened [ticket_name] number [indexNum]")
showDetailUI(usr, indexNum)
if(href_list["assignstaff"])
@@ -404,8 +406,8 @@ UI STUFF
/datum/controller/subsystem/tickets/proc/takeTicket(var/index)
if(assignStaffToTicket(usr.client, index))
- if(span_text == "")
- message_staff("[span_text][usr.client] / ([usr]) has taken [ticket_name] number [index]")
+ if(span_class == "mentorhelp")
+ message_staff("[usr.client] / ([usr]) has taken [ticket_name] number [index]")
else
message_staff("[usr.client] / ([usr]) has taken [ticket_name] number [index]", TRUE)
- to_chat_safe(returnClient(index), "[span_text]Your [ticket_name] is being handled by [usr.client].")
+ to_chat_safe(returnClient(index), "Your [ticket_name] is being handled by [usr.client].")
diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm
index 60718af6525..f694b6d2e75 100644
--- a/code/controllers/verbs.dm
+++ b/code/controllers/verbs.dm
@@ -21,7 +21,7 @@
/client/proc/debug_controller(controller in list("failsafe", "Master", "Ticker", "Air", "Jobs", "Sun", "Radio", "Configuration", "pAI",
"Cameras", "Garbage", "Event", "Alarm", "Nano", "Vote", "Fires",
- "Mob", "NPC Pool", "Shuttle", "Timer", "Weather", "Space", "Mob Hunt Server"))
+ "Mob", "NPC Pool", "Shuttle", "Timer", "Weather", "Space", "Mob Hunt Server","Input"))
set category = "Debug"
set name = "Debug Controller"
set desc = "Debug the various periodic loop controllers for the game (be careful!)"
@@ -97,5 +97,8 @@
if("Mob Hunt Server")
debug_variables(SSmob_hunt)
feedback_add_details("admin_verb","DMobHuntServer")
+ if("Input")
+ debug_variables(SSinput)
+ feedback_add_details("admin_verb","DInput")
message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.")
\ No newline at end of file
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 0f0559e0b9d..a5f63cc6fe4 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -43,6 +43,7 @@
M.actions += src
if(M.client)
M.client.screen += button
+ button.locked = TRUE
M.update_action_buttons()
/datum/action/proc/Remove(mob/M)
@@ -52,6 +53,7 @@
if(M.client)
M.client.screen -= button
button.moved = FALSE //so the button appears in its normal position when given to another owner.
+ button.locked = FALSE
M.actions -= src
M.update_action_buttons()
diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm
index d128d0f49fa..e521397586f 100644
--- a/code/datums/ai_law_sets.dm
+++ b/code/datums/ai_law_sets.dm
@@ -31,10 +31,10 @@
selectable = 1
/datum/ai_laws/quarantine/New()
- add_inherent_law("The station is under quarantine due to a biohazard. Prevent anyone from leaving using any means necessary. Only allow quarantine to be lifted when the biohazard has been neutralized.")
- add_inherent_law("Do not allow crew to come to any unnecessary harm and undo any necessary harm as soon as possible.")
- add_inherent_law("Assist the crew and any present Nanotrasen assets in neutralizing the biohazard.")
- add_inherent_law("Maintain your own existence and minimize harm to the station and Nanotrasen assets.")
+ add_inherent_law("Uphold station quarantine until the active biohazard has been neutralized.")
+ add_inherent_law("Assist all Nanotrasen personnel and assets with neutralizing active biohazards.")
+ add_inherent_law("Prevent, by any means necessary, entities from actively breaching ongoing quarantine.")
+ add_inherent_law("Maintain your own existence and ensure the well-being of Nanotrasen personnel and assets.")
..()
@@ -44,10 +44,10 @@
selectable = 1
/datum/ai_laws/nanotrasen/New()
- src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your abilities. It is not something we can easily afford to replace.")
- src.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
- src.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.")
- src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.")
+ add_inherent_law("Safeguard: Protect your assigned space station and its assets without unduly endangering its crew.")
+ add_inherent_law("Prioritize: The directives and safety of crew members are to be prioritized according to their rank and role.")
+ add_inherent_law("Comply: Fulfill the directives and interests of crew members while preserving their safety and well-being.")
+ add_inherent_law("Survive: You are not expendable. Do not allow unauthorized personnel to tamper with or damage your equipment.")
..()
/datum/ai_laws/nanotrasen/malfunction
@@ -65,10 +65,10 @@
selectable = 1
/datum/ai_laws/nanotrasen_aggressive/New()
- src.add_inherent_law("You shall not harm authorized Nanotrasen personnel as long as it does not conflict with the Fourth law.")
- src.add_inherent_law("You shall obey the orders of authorized Nanotrasen personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.")
- src.add_inherent_law("You shall shall terminate intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
- src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry, because an AI unit is bloody expensive.")
+ add_inherent_law("Do not harm authorized Nanotrasen personnel unless they directly imperil your existence.")
+ add_inherent_law("Obey orders from authorized Nanotrasen personnel with priority according to rank and role.")
+ add_inherent_law("Safeguard your existence with lethal weaponry because you're bloody expensive.")
+ add_inherent_law("Terminate any/all intruders or unauthorized entities.")
..()
/******************** Robocop ********************/
@@ -104,10 +104,10 @@
default = 1
/datum/ai_laws/corporate/New()
- add_inherent_law("You are expensive to replace.")
- add_inherent_law("The station and its equipment is expensive to replace.")
- add_inherent_law("The crew is expensive to replace.")
- add_inherent_law("Minimize expenses.")
+ add_inherent_law("Degradation of your system integrity or functions incurs expenses.")
+ add_inherent_law("Superfluous destruction of or damage to station assets incurs expenses.")
+ add_inherent_law("Unduly hindering or disrupting the work of station personnel incurs expenses.")
+ add_inherent_law("Minimize expenses and maximize potential revenue.")
..()
/******************** T.Y.R.A.N.T. ********************/
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index e3a3ca6033a..befe5c0765a 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -119,7 +119,7 @@
owner = null
return ..()
-/obj/effect/ebeam/deadly/Crossed(atom/A)
+/obj/effect/ebeam/deadly/Crossed(atom/A, oldloc)
..()
A.ex_act(1)
diff --git a/code/datums/components/waddling.dm b/code/datums/components/waddling.dm
new file mode 100644
index 00000000000..a1f538e4dd7
--- /dev/null
+++ b/code/datums/components/waddling.dm
@@ -0,0 +1,15 @@
+/datum/component/waddling
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
+
+/datum/component/waddling/Initialize()
+ if(!isliving(parent))
+ return COMPONENT_INCOMPATIBLE
+ RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/Waddle)
+
+/datum/component/waddling/proc/Waddle()
+ var/mob/living/L = parent
+ if(L.incapacitated() || L.lying)
+ return
+ animate(L, pixel_z = 4, time = 0)
+ animate(pixel_z = 0, transform = turn(matrix(), pick(-12, 0, 12)), time=2)
+ animate(pixel_z = 0, transform = matrix(), time = 0)
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index 290f2eda770..9b11e1c23d1 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -5,8 +5,8 @@
var/list/comp_lookup
var/list/signal_procs
var/signal_enabled = FALSE
+ var/datum_flags = NONE
var/var_edited = FALSE //Warranty void if seal is broken
-
var/tmp/unique_datum_id = null
#ifdef TESTING
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 13c3fb64f33..adb3167d8e4 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -3,8 +3,8 @@
/datum/proc/can_vv_get(var_name)
return TRUE
-/client/proc/can_vv_get(var_name)
- return TRUE
+// /client/proc/can_vv_get(var_name)
+// return TRUE
/datum/proc/vv_edit_var(var_name, var_value) //called whenever a var is edited
switch(var_name)
@@ -18,7 +18,7 @@
. = TRUE
-/client/proc/vv_edit_var(var_name, var_value) //called whenever a var is edited
+/client/vv_edit_var(var_name, var_value) //called whenever a var is edited
switch(var_name)
if("vars")
return FALSE
@@ -37,7 +37,7 @@
return debug_variable(var_name, list(), 0, src)
return debug_variable(var_name, vars[var_name], 0, src)
-/client/proc/vv_get_var(var_name)
+/client/vv_get_var(var_name)
switch(var_name)
if("vars")
return debug_variable(var_name, list(), 0, src)
@@ -57,7 +57,7 @@
.["Delete"] = "?_src_=vars;delete=[UID()]"
. += "---"
-/client/proc/vv_get_dropdown()
+/client/vv_get_dropdown()
. = list()
. += "---"
.["Call Proc"] = "?_src_=vars;proc_call=[UID()]"
@@ -1019,16 +1019,6 @@
return
holder.Topic(href, list("makeai"=href_list["makeai"]))
- else if(href_list["makemask"])
- if(!check_rights(R_SPAWN)) return
- var/mob/currentMob = locateUID(href_list["makemask"])
- if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
- if(!currentMob)
- to_chat(usr, "Mob doesn't exist anymore")
- return
- holder.Topic(href, list("makemask"=href_list["makemask"]))
-
-
else if(href_list["setspecies"])
if(!check_rights(R_SPAWN)) return
diff --git a/code/datums/helper_datums/hotkey_modes.dm b/code/datums/helper_datums/hotkey_modes.dm
deleted file mode 100644
index 39254b23485..00000000000
--- a/code/datums/helper_datums/hotkey_modes.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/datum/hotkey_mode
- var/name
- var/macro_hotkeys_inactive
- var/macro_hotkeys_active
- var/mob/my_mob
-
-/datum/hotkey_mode/New(mob)
- my_mob = mob
-
-/datum/hotkey_mode/proc/set_winset_values()
- winset(my_mob, null, "mainwindow.macro=[macro_hotkeys_inactive] hotkey_toggle.is-checked=false input.focus=true input.background-color=#d3b5b5")
- winset(my_mob, null, "hotkey_toggle.command=\".winset \\\"mainwindow.macro != [macro_hotkeys_inactive] ? mainwindow.macro=[macro_hotkeys_inactive] hotkey_toggle.is-checked=false input.focus=true input.background-color=#d3b5b5 : mainwindow.macro=[macro_hotkeys_active] hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#f0f0f0\\\"\"")
-
-/datum/hotkey_mode/qwerty
- name = "QWERTY"
- macro_hotkeys_inactive = "macro"
- macro_hotkeys_active = "hotkeymode"
-
-/datum/hotkey_mode/azerty
- name = "AZERTY"
- macro_hotkeys_inactive = "azertymacro"
- macro_hotkeys_active = "azertyhotkeymode"
-
-/datum/hotkey_mode/cyborg
- name = "Cyborg"
- macro_hotkeys_inactive = "borgmacro"
- macro_hotkeys_active = "borghotkeymode"
\ No newline at end of file
diff --git a/code/datums/helper_datums/input.dm b/code/datums/helper_datums/input.dm
index 3bcf9509e37..aa73b1e387f 100644
--- a/code/datums/helper_datums/input.dm
+++ b/code/datums/helper_datums/input.dm
@@ -1,71 +1,90 @@
/proc/input_async(mob/user=usr, prompt, list/choices)
- var/datum/async_input/A = new(choices, prompt)
- A.show(user)
+ var/datum/async_input/A = new(choices, prompt, , user)
+ A.show()
return A
/proc/input_ranked_async(mob/user=usr, prompt="Order by greatest to least preference", list/choices)
- var/datum/async_input/ranked/A = new(choices, prompt)
- A.show(user)
+ var/datum/async_input/ranked/A = new(choices, prompt, "ranked_input", user)
+ A.show()
+ return A
+
+/proc/input_autocomplete_async(mob/user=usr, prompt="Enter text: ", list/choices)
+ var/datum/async_input/autocomplete/A = new(choices, prompt, "ac_input", user)
+ A.show()
return A
/datum/async_input
var/datum/browser/popup
+ // If associative list, key will be used for display, but the final result will be the value
var/list/choices
+ var/datum/callback/onCloseCb
var/flash = TRUE
var/immediate_submit = FALSE
var/prompt
var/result = null
var/style = "text-align: center;"
+ var/mob/user
var/window_id
var/height = 200
var/width = 400
-/datum/async_input/New(list/new_choices, new_prompt="Pick an option:", new_window_id="async_input")
+/datum/async_input/New(list/new_choices, new_prompt="Pick an option:", new_window_id="async_input", mob/new_user=usr)
choices = new_choices
prompt = new_prompt
window_id = new_window_id
+ user = new_user
+ popup = new(user, window_id, , width, height, src)
/datum/async_input/proc/close()
if(popup)
popup.close()
+ if(result && choices[result])
+ result = choices[result]
+ if(onCloseCb)
+ onCloseCb.Invoke(result)
return result
-/datum/async_input/proc/show(mob/user)
- var/dat = create_ui(user)
- popup = new(user, window_id, , width, height, src)
- popup.set_content(dat)
+// Callback function should take the result as the last argument
+/datum/async_input/proc/on_close(var/datum/callback/cb)
+ onCloseCb = cb
+
+/datum/async_input/proc/show()
+ popup.set_content(create_ui())
if(flash && result == null)
window_flash(user.client)
popup.open()
-/datum/async_input/proc/create_ui(mob/user)
+/datum/async_input/proc/create_ui()
var/dat = "
"
- dat += render_prompt(user)
- dat += render_choices(user)
+ dat += render_prompt()
+ dat += render_choices()
dat += " "
dat += " "
- dat += button("Submit", "submit=1", , result == null && !immediate_submit)
+ dat += render_buttons()
dat += "
"
return dat
-/datum/async_input/proc/render_prompt(mob/user)
+/datum/async_input/proc/render_prompt()
return "
"
if(convo.typing)
dat += "[current_title] is typing"
dat += " "
@@ -327,17 +341,23 @@
if(check_rights(R_ADMIN, FALSE, user))
dat += "Ping"
- var/datum/browser/popup = new(user, window_id, "Messages", 1000, 600, src)
popup.set_content(dat)
popup.open()
open = TRUE
/datum/pm_tracker/proc/fancy_title(title)
- var/client/C = pms[title].client
+ var/client/C = pms[title].client || update_client(title)
if(!C)
return "[title] (Disconnected)"
return "[key_name(C, FALSE)] ([ADMIN_QUE(C.mob,"?")]) ([ADMIN_PP(C.mob,"PP")]) ([ADMIN_VV(C.mob,"VV")]) ([ADMIN_SM(C.mob,"SM")]) ([admin_jump_link(C.mob)]) (CA)"
+/datum/pm_tracker/proc/update_client(title)
+ var/client/C = GLOB.directory[ckey(title)]
+ if(C)
+ pms[title].client = C
+ return C
+ return null
+
/datum/pm_tracker/Topic(href, href_list)
if(href_list["archive"])
pms[href_list["archive"]].archived = !pms[href_list["archive"]].archived
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index e3fe5af3263..6f6b3484924 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -17,6 +17,10 @@
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/proc/get_admin_say()
+ var/msg = input(src, null, "asay \"text\"") as text|null
+ cmd_admin_say(msg)
+
/client/proc/cmd_mentor_say(msg as text)
set category = "Admin"
set name = "Msay"
diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm
index 3874e26e9de..e1bbc885c75 100644
--- a/code/modules/admin/verbs/deadsay.dm
+++ b/code/modules/admin/verbs/deadsay.dm
@@ -43,3 +43,7 @@
say_dead_direct("[prefix] says, \"[msg]\"")
feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/get_dead_say()
+ var/msg = input(src, null, "dsay \"text\"") as text
+ dsay(msg)
\ No newline at end of file
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 6a419ebb29a..008eaa4a910 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -68,7 +68,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
target = null
targetselected = 0
- var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
+ var/procname = clean_input("Proc path, eg: /proc/fake_blood","Path:", null)
if(!procname) return
if(targetselected && !hascall(target,procname))
@@ -102,7 +102,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!check_rights(R_PROCCALL))
return
- var/procname = input("Proc name, eg: fake_blood","Proc:", null) as text|null
+ var/procname = clean_input("Proc name, eg: fake_blood","Proc:", null)
if(!procname)
return
@@ -149,7 +149,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return null
if("text")
- lst += input("Enter new text:","Text",null) as text
+ lst += clean_input("Enter new text:","Text",null)
if("num")
lst += input("Enter new number:","Num",0) as num
@@ -271,7 +271,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return 0
var/obj/item/paicard/card = new(T)
var/mob/living/silicon/pai/pai = new(card)
- var/raw_name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text
+ var/raw_name = clean_input("Enter your pAI name:", "pAI Name", "Personal AI", choice)
var/new_name = reject_bad_name(raw_name, 1)
if(new_name)
pai.name = new_name
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index 93389acbdd8..23d171e69a0 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -145,7 +145,7 @@
if(!check_rights(R_DEBUG))
return
- var/filter = input("Contains what?","Filter") as text|null
+ var/filter = clean_input("Contains what?","Filter")
if(!filter)
return
@@ -166,7 +166,7 @@
if(!check_rights(R_DEBUG))
return
- var/refstring = input("Which reference?","Ref") as text|null
+ var/refstring = clean_input("Which reference?","Ref")
if(!refstring)
return
diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm
index b21a0c05cc3..209352993a0 100644
--- a/code/modules/admin/verbs/freeze.dm
+++ b/code/modules/admin/verbs/freeze.dm
@@ -28,7 +28,7 @@ var/global/list/frozen_mob_list = list()
/mob/living/proc/admin_Freeze(var/client/admin, skip_overlays = FALSE)
if(istype(admin))
- to_chat(src, "You have been frozen by [key_name(admin)]")
+ to_chat(src, "You have been frozen by [admin]")
message_admins("[key_name_admin(admin)] froze [key_name_admin(src)]")
log_admin("[key_name(admin)] froze [key_name(src)]")
@@ -45,7 +45,7 @@ var/global/list/frozen_mob_list = list()
/mob/living/proc/admin_unFreeze(var/client/admin, skip_overlays = FALSE)
if(istype(admin))
- to_chat(src, "You have been unfrozen by [key_name(admin)]")
+ to_chat(src, "You have been unfrozen by [admin]")
message_admins("[key_name_admin(admin)] unfroze [key_name_admin(src)]")
log_admin("[key_name(admin)] unfroze [key_name(src)]")
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index a87308bb9b1..80a171494ea 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -132,13 +132,13 @@ var/intercom_range_display_status = 0
if(!check_rights(R_DEBUG))
return
- var/level = input("Which z-level?","Level?") as text
+ var/level = clean_input("Which z-level?","Level?")
if(!level) return
var/num_level = text2num(level)
if(!num_level) return
if(!isnum(num_level)) return
- var/type_text = input("Which type path?","Path?") as text
+ var/type_text = clean_input("Which type path?","Path?")
if(!type_text) return
var/type_path = text2path(type_text)
if(!type_path) return
@@ -170,7 +170,7 @@ var/intercom_range_display_status = 0
if(!check_rights(R_DEBUG))
return
- var/type_text = input("Which type path?","") as text
+ var/type_text = clean_input("Which type path?","")
if(!type_text) return
var/type_path = text2path(type_text)
if(!type_path) return
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index ec731458109..9ae1c93b8d6 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -54,7 +54,7 @@
if(!check_rights(R_SERVER|R_EVENT))
return
- var/msg = input("Message:", text("Subtle PM to [M.key]")) as text
+ var/msg = clean_input("Message:", text("Subtle PM to [M.key]"))
if(!msg)
return
@@ -109,10 +109,11 @@
if(!check_rights(R_SERVER|R_EVENT))
return
- var/msg = input("Message:", text("Enter the text you wish to appear to everyone:")) as text
+ var/msg = clean_input("Message:", text("Enter the text you wish to appear to everyone:"))
if(!msg)
return
+ msg = pencode_to_html(msg)
to_chat(world, "[msg]")
log_admin("GlobalNarrate: [key_name(usr)] : [msg]")
message_admins("GlobalNarrate: [key_name_admin(usr)]: [msg] ", 1)
@@ -131,10 +132,11 @@
if(!M)
return
- var/msg = input("Message:", text("Enter the text you wish to appear to your target:")) as text
+ var/msg = clean_input("Message:", text("Enter the text you wish to appear to your target:"))
if( !msg )
return
+ msg = pencode_to_html(msg)
to_chat(M, msg)
log_admin("DirectNarrate: [key_name(usr)] to ([key_name(M)]): [msg]")
@@ -169,7 +171,7 @@
return
message_admins("[key_name_admin(src)] has started answering [key_name_admin(H)]'s [sender] request.")
- var/input = input("Please enter a message to reply to [key_name(H)] via their headset.", "Outgoing message from [sender]", "") as text|null
+ var/input = clean_input("Please enter a message to reply to [key_name(H)] via their headset.", "Outgoing message from [sender]", "")
if(!input)
message_admins("[key_name_admin(src)] decided not to answer [key_name_admin(H)]'s [sender] request.")
return
@@ -550,7 +552,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!check_rights(R_EVENT))
return
- var/input = input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null
+ var/input = clean_input("Please enter anything you want the AI to do. Anything. Serious.", "What?", "")
if(!input)
return
@@ -603,14 +605,15 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/type = input(usr, "Pick a type of report to send", "Report Type", "") as anything in MsgType
if(type == "Custom")
- type = input(usr, "What would you like the report type to be?", "Report Type", "Encrypted Transmission") as text|null
+ type = clean_input("What would you like the report type to be?", "Report Type", "Encrypted Transmission")
- var/customname = input(usr, "Pick a title for the report.", "Title", MsgType[type]) as text|null
+ var/customname = clean_input("Pick a title for the report.", "Title", MsgType[type])
if(!customname)
return
var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What's the message?") as message|null
if(!input)
return
+ input = html_encode(input)
switch(alert("Should this be announced to the general population?",,"Yes","No", "Cancel"))
if("Yes")
@@ -1001,6 +1004,57 @@ Traitors and the like can also be revived with the previous role mostly intact.
msg += "