diff --git a/README.md b/README.md index 2f4e16270c3..93bb70efc80 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,8 @@ The SQL backend for the library and stats tracking requires a MySQL server. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/paradise_schema.sql or /SQL/paradise_schema_prefix.sql, depending on if you want table prefixes. -More detailed setup instructions are located on /tg/station's wiki: http://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database +More detailed setup instructions are located on our wiki: +https://nanotrasen.se/wiki/index.php/Setting_up_the_Database --- diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 19521d79686..ed4fb787b8d 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -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 ff4026c7d00..b0f7bbc5c82 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -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/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 bed79c4f587..f57aa9bae01 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, @@ -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, @@ -7421,10 +7423,10 @@ "amZ" = ( /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) "ana" = ( @@ -10422,7 +10424,7 @@ /turf/simulated/shuttle/plating, /area/shuttle/trade/sol) "arW" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor, @@ -10449,7 +10451,7 @@ pixel_x = 0; pixel_y = 32 }, -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor, @@ -11416,6 +11418,10 @@ id_tag = "secmaintdorm1"; name = "Room 1" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "ats" = ( @@ -11423,6 +11429,10 @@ id_tag = "secmaintdorm2"; name = "Room 2" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "att" = ( @@ -11637,7 +11647,7 @@ }, /area/shuttle/siberia) "atL" = ( -/obj/structure/chair/office/dark{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor{ @@ -12787,15 +12797,15 @@ /turf/simulated/floor/plasteel, /area/security/permabrig) "avp" = ( -/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) "avq" = ( @@ -12840,9 +12850,6 @@ /turf/simulated/shuttle/floor, /area/shuttle/pod_3) "avu" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/machinery/status_display{ density = 0; layer = 4; @@ -12850,6 +12857,9 @@ pixel_y = 32 }, /obj/machinery/light, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, /turf/simulated/shuttle/floor, /area/shuttle/pod_3) "avv" = ( @@ -13172,6 +13182,25 @@ /turf/simulated/floor/plasteel, /area/security/lobby) "avU" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) +"avV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plasteel, +/area/security/lobby) +"avW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ name = "Internal Affairs Office"; @@ -13185,40 +13214,16 @@ dir = 4; level = 1 }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, /turf/simulated/floor/plasteel{ tag = "icon-cult"; icon_state = "cult"; dir = 2 }, /area/lawoffice) -"avV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/security/lobby) -"avW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/machinery/door/airlock/security/glass{ - id_tag = "BrigEast"; - name = "Brig East Entrance"; - req_access_txt = "63" - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkredcorners" - }, -/area/security/prison/cell_block/A) "avX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -13286,11 +13291,12 @@ name = "Brig East Entrance"; req_access_txt = "63" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; + dir = 1; icon_state = "darkredcorners" }, /area/security/prison/cell_block/A) @@ -13713,16 +13719,31 @@ }, /area/security/permabrig) "awP" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Secure Gate"; + name = "Security Blast Door"; + opacity = 0 }, -/turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - tag = "icon-swall_f6"; - icon_state = "swall_f6"; - dir = 2 +/obj/machinery/door/airlock/security/glass{ + id_tag = "BrigEast"; + name = "Brig East Entrance"; + req_access_txt = "63" }, -/area/shuttle/pod_3) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkredcorners" + }, +/area/security/prison/cell_block/A) "awQ" = ( /obj/structure/cable{ d1 = 2; @@ -13956,9 +13977,6 @@ /turf/simulated/shuttle/plating, /area/shuttle/syndicate_sit) "axm" = ( -/obj/structure/chair{ - dir = 8 - }, /obj/machinery/flasher{ id = "gulagshuttleflasher"; pixel_x = 25 @@ -13967,6 +13985,9 @@ dir = 4; icon_state = "tube1" }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, /turf/simulated/shuttle/floor, /area/shuttle/siberia) "axn" = ( @@ -13975,7 +13996,7 @@ /turf/space, /area/space/nearstation) "axo" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor, @@ -14332,16 +14353,15 @@ }, /area/security/prison/cell_block/A) "axN" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, /turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - tag = "icon-swall_f5"; - icon_state = "swall_f5"; - dir = 2 - }, -/area/shuttle/pod_3) +/area/maintenance/fsmaint) "axO" = ( /obj/structure/cable{ d1 = 1; @@ -15206,28 +15226,28 @@ }, /area/security/interrogation) "aze" = ( -/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) "azf" = ( -/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" }, @@ -15238,7 +15258,7 @@ }, /area/shuttle/syndicate_elite) "azh" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor{ @@ -15824,7 +15844,7 @@ /turf/simulated/floor/plating, /area/maintenance/abandonedbar) "aAh" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor{ @@ -16433,21 +16453,13 @@ /turf/simulated/floor/plating, /area/maintenance/abandonedbar) "aBk" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, /area/shuttle/syndicate_sit) -"aBl" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/simulated/shuttle/floor{ - icon_state = "floor4" - }, -/area/shuttle/syndicate_sit) "aBm" = ( /obj/item/stack/rods, /turf/space, @@ -16573,14 +16585,16 @@ /turf/simulated/floor/plating, /area/security/prisonershuttle) "aBC" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "floorgrime" +/turf/simulated/floor/plating, +/turf/simulated/shuttle/wall{ + tag = "icon-swall_f6"; + icon_state = "swall_f6"; + dir = 2 }, -/area/maintenance/fsmaint) +/area/shuttle/pod_3) "aBD" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/shuttle/floor{ @@ -17326,7 +17340,7 @@ /turf/simulated/floor/plating, /area/maintenance/abandonedbar) "aCX" = ( -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -17337,9 +17351,6 @@ icon_state = "tube1"; dir = 8 }, -/obj/structure/chair{ - dir = 4 - }, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -17773,17 +17784,18 @@ /turf/simulated/wall, /area/crew_quarters/mrchangs) "aDO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Magistrate's Office"; - req_access_txt = "74" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, /turf/simulated/floor/plasteel{ - tag = "icon-cult"; - icon_state = "cult"; - dir = 2 + icon_state = "floorgrime" }, -/area/magistrateoffice) +/area/maintenance/fsmaint) "aDP" = ( /turf/simulated/wall, /area/civilian/barber) @@ -18998,25 +19010,12 @@ /turf/simulated/floor/wood, /area/crew_quarters/courtroom) "aGv" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Magistrate's Office"; - req_access_txt = "74" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - tag = "icon-cult"; - icon_state = "cult"; - dir = 2 - }, -/area/magistrateoffice) +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "aGw" = ( /obj/structure/disposalpipe/junction{ dir = 1; @@ -19682,16 +19681,16 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "aHV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Detective"; - req_access = null; - req_access_txt = "4" +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "grimy" +/turf/simulated/floor/plating, +/turf/simulated/shuttle/wall{ + tag = "icon-swall_f5"; + icon_state = "swall_f5"; + dir = 2 }, -/area/security/detectives_office) +/area/shuttle/pod_3) "aHW" = ( /obj/structure/cable{ d1 = 1; @@ -20064,15 +20063,21 @@ }, /area/maintenance/fpmaint2) "aIM" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Magistrate's Office"; + req_access_txt = "74" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood{ - tag = "icon-wood-broken3"; - icon_state = "wood-broken3" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, -/area/maintenance/fpmaint2) +/turf/simulated/floor/plasteel{ + tag = "icon-cult"; + icon_state = "cult"; + dir = 2 + }, +/area/magistrateoffice) "aIN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -20155,6 +20160,10 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "aIZ" = ( @@ -20735,25 +20744,15 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/fore) "aKp" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Courtroom"; - req_access_txt = "63" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - density = 0; - dir = 4; - icon_state = "open"; - id_tag = "courtroomshutters"; - layer = 3.21; - name = "Courtroom Privacy Shutters"; - opacity = 0 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/courtroom) +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "aKq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -20814,20 +20813,29 @@ }, /area/lawoffice) "aKx" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Magistrate's Office"; + req_access_txt = "74" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/maintenance/fsmaint) +/turf/simulated/floor/plasteel{ + tag = "icon-cult"; + icon_state = "cult"; + dir = 2 + }, +/area/magistrateoffice) "aKy" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -21081,9 +21089,6 @@ }, /area/shuttle/pod_1) "aLb" = ( -/obj/structure/chair{ - dir = 1 - }, /obj/machinery/status_display{ density = 0; layer = 4; @@ -21094,6 +21099,9 @@ dir = 4; icon_state = "tube1" }, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, /turf/simulated/shuttle/floor, /area/shuttle/pod_1) "aLc" = ( @@ -21111,9 +21119,6 @@ }, /area/shuttle/pod_2) "aLf" = ( -/obj/structure/chair{ - dir = 1 - }, /obj/machinery/status_display{ density = 0; layer = 4; @@ -21124,6 +21129,9 @@ dir = 4; icon_state = "tube1" }, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, /turf/simulated/shuttle/floor, /area/shuttle/pod_2) "aLg" = ( @@ -21136,17 +21144,20 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "aLh" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security{ + name = "Detective"; + req_access = null; + req_access_txt = "4" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/visible/purple, -/turf/simulated/floor/plating, -/area/maintenance/fpmaint2) +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/security/detectives_office) "aLi" = ( /obj/structure/cable{ d1 = 2; @@ -21181,6 +21192,10 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "aLl" = ( @@ -21218,22 +21233,15 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/wood{ + tag = "icon-wood-broken3"; + icon_state = "wood-broken3" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, -/turf/simulated/floor/plating, /area/maintenance/fpmaint2) "aLo" = ( /obj/structure/cable{ @@ -21759,14 +21767,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 +21787,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" = ( @@ -22072,32 +22080,15 @@ /turf/simulated/floor/carpet, /area/crew_quarters/courtroom) "aNe" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Courtroom"; - req_access_txt = "63" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/door/poddoor/shutters{ - density = 0; - dir = 4; - icon_state = "open"; - id_tag = "courtroomshutters"; - layer = 3.21; - name = "Courtroom Privacy Shutters"; - opacity = 0 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/courtroom) +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "aNf" = ( /obj/machinery/access_button{ command = "cycle_interior"; @@ -22456,13 +22447,29 @@ /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "aNS" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom"; + req_access_txt = "63" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fpmaint2) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 4; + icon_state = "open"; + id_tag = "courtroomshutters"; + layer = 3.21; + name = "Courtroom Privacy Shutters"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/courtroom) "aNT" = ( /obj/machinery/status_display{ layer = 4; @@ -22564,15 +22571,10 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "aOb" = ( @@ -22884,21 +22886,52 @@ /turf/simulated/floor/plating, /area/maintenance/electrical) "aON" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - icon_state = "swall_f5"; - dir = 2 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/area/shuttle/pod_1) +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/purple, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint2) "aOO" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - icon_state = "swall_f9"; - dir = 2 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom"; + req_access_txt = "63" }, -/area/shuttle/pod_1) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 4; + icon_state = "open"; + id_tag = "courtroomshutters"; + layer = 3.21; + name = "Courtroom Privacy Shutters"; + opacity = 0 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/courtroom) "aOP" = ( /obj/machinery/light/small{ dir = 8 @@ -22983,11 +23016,18 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/fsmaint) @@ -23050,9 +23090,27 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/maintenance/fsmaint) +/area/maintenance/fpmaint2) "aPi" = ( /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -23351,13 +23409,21 @@ /turf/simulated/wall, /area/maintenance/electrical) "aPP" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - icon_state = "swall_f5"; - dir = 2 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/area/shuttle/pod_2) +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "aPQ" = ( /obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -23406,15 +23472,18 @@ }, /area/hallway/secondary/entry) "aPU" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - icon_state = "swall_f9"; - dir = 2 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/area/shuttle/pod_2) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "aPV" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor, @@ -24124,23 +24193,13 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint) "aRm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, +/obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/floor/plating, -/area/maintenance/fpmaint) +/turf/simulated/shuttle/wall{ + icon_state = "swall_f5"; + dir = 2 + }, +/area/shuttle/pod_1) "aRn" = ( /obj/structure/cable{ d1 = 4; @@ -24292,21 +24351,13 @@ }, /area/hallway/primary/starboard/west) "aRz" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, +/obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/turf/simulated/shuttle/wall{ + icon_state = "swall_f9"; + dir = 2 + }, +/area/shuttle/pod_1) "aRA" = ( /obj/structure/cable{ d1 = 1; @@ -24525,16 +24576,13 @@ /turf/simulated/floor/plating, /area/hallway/secondary/entry) "aRV" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/floor/plating, -/area/maintenance/fpmaint) +/turf/simulated/shuttle/wall{ + icon_state = "swall_f5"; + dir = 2 + }, +/area/shuttle/pod_2) "aRW" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -24555,19 +24603,13 @@ /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "aRY" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/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, +/obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/floor/plating, -/area/maintenance/fpmaint2) +/turf/simulated/shuttle/wall{ + icon_state = "swall_f9"; + dir = 2 + }, +/area/shuttle/pod_2) "aRZ" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -25183,12 +25225,23 @@ /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "aTs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, /obj/machinery/door/airlock/maintenance{ - name = "Chapel Maintenance"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "aTt" = ( @@ -25990,10 +26043,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, -/area/maintenance/fpmaint2) +/area/maintenance/fpmaint) "aVc" = ( /turf/simulated/wall, /area/security/checkpoint2) @@ -26458,24 +26510,14 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4; - level = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, /turf/simulated/floor/plating, -/area/maintenance/fpmaint) +/area/maintenance/fpmaint2) "aVM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -27588,18 +27630,12 @@ /turf/simulated/floor/plasteel, /area/storage/primary) "aXT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/tranquillite{ - name = "Mime's Office"; - req_access_txt = "46" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/simulated/floor/plasteel{ - icon_state = "tranquillite"; - dir = 4; - icon_regular_floor = "yellowsiding"; - icon_plating = "plating" - }, -/area/mimeoffice) +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "aXU" = ( /obj/item/flag/mime, /obj/machinery/power/apc{ @@ -28110,13 +28146,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 +28264,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" = ( @@ -29458,13 +29494,15 @@ }, /area/crew_quarters/dorms) "bbx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/bananium{ - name = "Clown's Office"; - req_access_txt = "46" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/simulated/floor/wood, -/area/clownoffice) +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint2) "bby" = ( /obj/machinery/camera{ c_tag = "Medbay Morgue"; @@ -30012,14 +30050,27 @@ /turf/simulated/floor/carpet/black, /area/chapel/office) "bcv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/machinery/door/airlock/maintenance{ - name = "Library Maintenance"; req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, /turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/area/maintenance/fpmaint) "bcw" = ( /obj/machinery/alarm{ pixel_y = 25 @@ -30143,7 +30194,7 @@ /turf/simulated/shuttle/floor, /area/shuttle/escape) "bcK" = ( -/obj/structure/chair/comfy/black{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor, @@ -30160,10 +30211,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" = ( @@ -31137,15 +31188,31 @@ }, /area/hallway/primary/central/north) "bew" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Chapel Office"; - req_access_txt = "22" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 }, -/area/chapel/office) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "bex" = ( /obj/machinery/requests_console{ department = "Arrival Shuttle"; @@ -31175,12 +31242,6 @@ /obj/machinery/computer/station_alert, /turf/simulated/shuttle/floor, /area/shuttle/escape) -"beB" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/simulated/shuttle/floor, -/area/shuttle/escape) "beC" = ( /turf/simulated/shuttle/floor, /area/shuttle/escape) @@ -31444,14 +31505,22 @@ }, /area/crew_quarters/dorms) "bfa" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/tranquillite{ + name = "Mime's Office"; + req_access_txt = "46" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/fpmaint) +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "tranquillite"; + dir = 4; + icon_regular_floor = "yellowsiding"; + icon_plating = "plating" + }, +/area/mimeoffice) "bfb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4; @@ -31507,8 +31576,20 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, +/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, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/maintenance/fpmaint) +/area/maintenance/fpmaint2) "bfg" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -32203,21 +32284,21 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "bgo" = ( -/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) "bgp" = ( -/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) "bgq" = ( @@ -33193,7 +33274,7 @@ /turf/simulated/shuttle/floor, /area/shuttle/escape) "bil" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor, @@ -33203,7 +33284,7 @@ /turf/simulated/shuttle/floor, /area/shuttle/escape) "bin" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor, @@ -33755,80 +33836,48 @@ }, /area/hydroponics) "bje" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/bananium{ + name = "Clown's Office"; + req_access_txt = "46" }, -/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 - }, -/turf/simulated/floor/plasteel{ - tag = "icon-siding1 (NORTH)"; - icon_state = "siding1"; - dir = 1 - }, -/area/hydroponics) +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/wood, +/area/clownoffice) "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/machinery/door/airlock/maintenance{ + name = "Chapel Maintenance"; + req_access_txt = "12" }, -/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/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; dir = 1 }, -/turf/simulated/floor/plasteel{ - tag = "icon-siding2 (NORTH)"; - icon_state = "siding2"; - dir = 1 - }, -/area/hydroponics) +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "bjh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/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/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; dir = 1 }, -/turf/simulated/floor/plasteel{ - tag = "icon-siding2 (NORTH)"; - icon_state = "siding2"; - dir = 1 - }, -/area/hydroponics) +/turf/simulated/floor/plating, +/area/maintenance/fpmaint2) "bji" = ( /obj/item/radio/beacon, /turf/simulated/floor/plasteel, @@ -34955,7 +35004,7 @@ icon_state = "tube1"; dir = 1 }, -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor4, /area/shuttle/escape) "blv" = ( @@ -35005,7 +35054,7 @@ /turf/simulated/floor/carpet, /area/chapel/main) "blA" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor{ @@ -35025,7 +35074,7 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "blC" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor{ @@ -35780,13 +35829,13 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/central/nw) "bmX" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /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 +35864,12 @@ /turf/simulated/floor/plating, /area/shuttle/escape) "bnc" = ( -/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" }, @@ -37082,9 +37131,8 @@ /turf/simulated/floor/plasteel, /area/assembly/chargebay) "bpE" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/freezer{ - req_access_txt = "28" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, /obj/structure/cable{ d1 = 1; @@ -37092,12 +37140,12 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "showroomfloor" - }, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "bpF" = ( /obj/machinery/alarm{ dir = 1; @@ -37369,18 +37417,18 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "bqj" = ( -/obj/machinery/door/airlock{ - name = "Port Emergency Storage"; - req_access_txt = "0" +/obj/machinery/door/airlock/maintenance{ + name = "Library Maintenance"; + req_access_txt = "12" }, -/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, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, /turf/simulated/floor/plating, -/area/storage/emergency2) +/area/maintenance/fsmaint2) "bqk" = ( /obj/structure/chair/wood/wings{ tag = "icon-wooden_chair_wings (WEST)"; @@ -38803,9 +38851,6 @@ }, /area/maintenance/asmaint2) "btt" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/item/radio/intercom{ dir = 8; name = "station intercom (General)"; @@ -38816,14 +38861,14 @@ icon_state = "tube1"; dir = 8 }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, /turf/simulated/shuttle/floor{ icon_state = "floor3" }, /area/shuttle/escape) "btu" = ( -/obj/structure/chair{ - dir = 8 - }, /obj/structure/closet/walllocker/emerglocker{ pixel_x = 28 }, @@ -38832,6 +38877,9 @@ icon_state = "tube1"; dir = 4 }, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, /turf/simulated/shuttle/floor{ icon_state = "floor3" }, @@ -38864,23 +38912,23 @@ /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 +38954,7 @@ /turf/simulated/shuttle/floor, /area/shuttle/transport) "btD" = ( -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor, /area/shuttle/transport) "btE" = ( @@ -39977,20 +40025,19 @@ }, /area/crew_quarters/kitchen) "bvN" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass{ + name = "Chapel Office"; + req_access_txt = "22" }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/office) "bvO" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -40257,17 +40304,18 @@ }, /area/hallway/secondary/exit) "bwl" = ( +/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen"; - req_access_txt = "28" +/obj/machinery/door/airlock{ + name = "Bar Office"; + req_access_txt = "25" }, -/turf/simulated/floor/plasteel{ - dir = 2; - icon_state = "cafeteria"; - tag = "icon-cafeteria (NORTHEAST)" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/area/crew_quarters/kitchen) +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "bwm" = ( /turf/simulated/floor/plasteel{ dir = 10; @@ -40463,16 +40511,16 @@ /turf/simulated/shuttle/floor, /area/shuttle/transport) "bwI" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor, /area/shuttle/transport) "bwJ" = ( -/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) "bwK" = ( @@ -40655,17 +40703,25 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bwX" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion"; - tag = "icon-propulsion (EAST)" +/obj/machinery/door/airlock/maintenance{ + name = "Bar Maintenance"; + req_access_txt = "12" }, -/turf/space, -/turf/simulated/shuttle/wall{ - icon_state = "swall_f6"; - dir = 2 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" }, -/area/shuttle/transport) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "bwY" = ( /obj/machinery/power/apc{ dir = 4; @@ -41451,17 +41507,18 @@ }, /area/hallway/primary/central/ne) "bys" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8; - icon_state = "propulsion"; - tag = "icon-propulsion (EAST)" +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/space, -/turf/simulated/shuttle/wall{ - icon_state = "swall_f5"; - dir = 2 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/area/shuttle/transport) +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "byt" = ( /obj/machinery/door/airlock/command/glass{ name = "Bridge"; @@ -42709,7 +42766,7 @@ icon_state = "tube1"; dir = 1 }, -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -43168,12 +43225,12 @@ /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 = 4 + }, /turf/simulated/shuttle/floor4, /area/shuttle/escape) "bBU" = ( @@ -43226,7 +43283,7 @@ pixel_x = 4; pixel_y = 32 }, -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -43271,7 +43328,7 @@ dir = 2; network = list("ERT","CentComm") }, -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -43364,10 +43421,12 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/maintenance/port) +/area/maintenance/fpmaint) "bCr" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, @@ -44022,9 +44081,6 @@ }, /area/shuttle/escape) "bDG" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/machinery/light/spot{ tag = "icon-tube1 (WEST)"; icon_state = "tube1"; @@ -44514,7 +44570,7 @@ }, /area/shuttle/specops) "bEL" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor{ @@ -45003,22 +45059,29 @@ /turf/simulated/floor/wood, /area/bridge/meeting_room) "bFJ" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 6 }, -/turf/simulated/floor/plating, -/area/maintenance/port) +/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 + }, +/turf/simulated/floor/plasteel{ + tag = "icon-siding1 (NORTH)"; + icon_state = "siding1"; + dir = 1 + }, +/area/hydroponics) "bFK" = ( /obj/machinery/computer/communications, /turf/simulated/floor/wood, @@ -45607,7 +45670,7 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bGJ" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor4, @@ -48031,18 +48094,29 @@ /turf/simulated/floor/plasteel, /area/assembly/chargebay) "bLn" = ( -/obj/machinery/door/airlock/research{ - name = "Research Division Access"; - req_access_txt = "47" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/mob/living/simple_animal/pig, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 2; + icon_state = "asteroid"; + tag = "icon-asteroid (NORTH)" }, -/area/medical/research{ - name = "Research Division" - }) +/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) "bLo" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -48422,26 +48496,28 @@ /turf/simulated/floor/plasteel, /area/assembly/robotics) "bLU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Disposal Access"; - req_access_txt = "12" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "asteroid"; + tag = "icon-asteroid (NORTH)" }, -/turf/simulated/floor/plating, -/area/maintenance/port) +/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) "bLV" = ( /obj/item/storage/firstaid/o2{ pixel_x = 5; @@ -48724,18 +48800,18 @@ /area/quartermaster/office) "bMz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay"; - req_access_txt = "31" +/obj/machinery/door/airlock/glass{ + name = "Chapel Office"; + req_access_txt = "22" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/turf/simulated/floor/plasteel, -/area/quartermaster/storage) +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/office) "bMA" = ( /obj/machinery/mineral/ore_redemption, /turf/simulated/floor/plasteel, @@ -48768,13 +48844,26 @@ /turf/simulated/wall, /area/hallway/primary/central/sw) "bMF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office"; - req_access_txt = "50" +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/freezer{ + req_access_txt = "28" }, -/turf/simulated/floor/plasteel, -/area/quartermaster/office) +/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, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "showroomfloor" + }, +/area/crew_quarters/kitchen) "bMG" = ( /turf/simulated/wall/r_wall, /area/crew_quarters/heads) @@ -49626,25 +49715,19 @@ /turf/simulated/floor/plasteel, /area/quartermaster/office) "bNP" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Delivery Office"; - req_access_txt = "50" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/quartermaster/office) +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/port) "bNQ" = ( /obj/machinery/light{ icon_state = "tube1"; @@ -49919,24 +50002,14 @@ }, /area/quartermaster/office) "bOn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay"; - req_access_txt = "31" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/quartermaster/storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/port) "bOo" = ( /obj/effect/landmark{ name = "blobstart" @@ -50585,25 +50658,19 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bPr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 +/obj/machinery/door/airlock{ + name = "Port Emergency Storage"; + req_access_txt = "0" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance"; - req_access_txt = "5" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/reception) +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/storage/emergency2) "bPs" = ( /obj/machinery/status_display, /turf/simulated/wall/r_wall, @@ -50626,25 +50693,17 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bPv" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion"; + tag = "icon-propulsion (EAST)" }, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance"; - req_access_txt = "5" +/turf/space, +/turf/simulated/shuttle/wall{ + icon_state = "swall_f6"; + dir = 2 }, -/turf/simulated/floor/plasteel{ - tag = "icon-whiteblue (WEST)"; - icon_state = "whiteblue"; - dir = 8 - }, -/area/medical/reception) +/area/shuttle/transport) "bPw" = ( /obj/machinery/atmospherics/unary/vent_scrubber{ dir = 4; @@ -50656,25 +50715,24 @@ /turf/simulated/floor/plating, /area/maintenance/disposal) "bPx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" }, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyerPort"; - name = "Medbay Entrance"; - req_access_txt = "5" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/area/medical/reception) +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "bPy" = ( /obj/structure/table, /obj/item/assembly/prox_sensor{ @@ -50861,6 +50919,22 @@ icon_state = "diagonalWall3" }, /area/shuttle/administration) +"bPM" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Kitchen"; + req_access_txt = "28" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/crew_quarters/kitchen) "bPN" = ( /obj/machinery/door/airlock/external{ id_tag = "s_docking_airlock"; @@ -50936,22 +51010,17 @@ /turf/simulated/floor/plating, /area/quartermaster/storage) "bPU" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 +/obj/structure/shuttle/engine/propulsion{ + dir = 8; + icon_state = "propulsion"; + tag = "icon-propulsion (EAST)" }, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medbay Emergency Entrance"; - req_access_txt = "5" +/turf/space, +/turf/simulated/shuttle/wall{ + icon_state = "swall_f5"; + dir = 2 }, -/obj/effect/decal/warning_stripes/northeast, -/turf/simulated/floor/plasteel, -/area/hallway/primary/central/se) +/area/shuttle/transport) "bPV" = ( /obj/effect/landmark/start{ name = "Cargo Technician" @@ -52059,6 +52128,27 @@ icon_state = "wall3" }, /area/shuttle/administration) +"bRH" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "bRI" = ( /obj/structure/plasticflaps/mining, /obj/machinery/conveyor/east{ @@ -52533,36 +52623,44 @@ /turf/simulated/floor/plating, /area/medical/chemistry) "bSz" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medical Supplies"; - req_access_txt = "5" +/obj/machinery/door/airlock/research{ + name = "Research Division Access"; + req_access_txt = "47" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plasteel{ - tag = "icon-whitebluefull"; - icon_state = "whitebluefull" + icon_state = "white" }, -/area/medical/biostorage) +/area/medical/research{ + name = "Research Division" + }) "bSA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - id_tag = "MedbayFoyer"; - name = "Medical Supplies"; - req_access_txt = "5" +/obj/machinery/door/airlock/maintenance{ + name = "Disposal Access"; + req_access_txt = "12" }, -/turf/simulated/floor/plasteel{ - tag = "icon-whitebluefull"; - icon_state = "whitebluefull" +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/area/medical/biostorage) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "bSB" = ( /obj/machinery/atmospherics/unary/cryo_cell, /turf/simulated/floor/plasteel{ @@ -54136,6 +54234,48 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) +"bVk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office"; + req_access_txt = "50" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/quartermaster/office) +"bVl" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + req_access_txt = "31" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/quartermaster/storage) "bVm" = ( /obj/machinery/light/spot{ tag = "icon-tube1 (WEST)"; @@ -54397,20 +54537,17 @@ }, /area/toxins/lab) "bVH" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Delivery Office"; + req_access_txt = "50" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0; - tag = "" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/turf/simulated/floor/plasteel, +/area/quartermaster/office) "bVI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -55105,6 +55242,29 @@ icon_state = "floor4" }, /area/shuttle/administration) +"bWO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + req_access_txt = "31" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/quartermaster/storage) "bWP" = ( /obj/machinery/door/airlock/external{ id_tag = "s_docking_airlock"; @@ -55311,19 +55471,21 @@ /turf/simulated/floor/plasteel, /area/quartermaster/office) "bXi" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Office"; - req_access_txt = "50" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/quartermaster/office) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "bXj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9; @@ -56079,6 +56241,27 @@ icon_state = "floor4" }, /area/shuttle/administration) +"bYu" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyerPort"; + name = "Medbay Entrance"; + req_access_txt = "5" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plasteel{ + tag = "icon-whiteblue (WEST)"; + icon_state = "whiteblue"; + dir = 8 + }, +/area/medical/reception) "bYv" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -57075,31 +57258,25 @@ /area/medical/genetics_cloning) "bZR" = ( /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/medical/glass{ - id_tag = "CloningDoor"; - name = "Genetics Cloning"; - req_access_txt = "0"; - req_one_access_txt = "5;9" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + id_tag = "MedbayFoyerPort"; + name = "Medbay Entrance"; + req_access_txt = "5" }, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + icon_state = "white" }, -/area/medical/genetics_cloning) +/area/medical/reception) "bZS" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1; @@ -57361,6 +57538,27 @@ "cam" = ( /turf/simulated/wall, /area/quartermaster/miningdock) +"can" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyerPort"; + name = "Medbay Entrance"; + req_access_txt = "5" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/medical/reception) "cao" = ( /obj/structure/filingcabinet, /turf/simulated/floor/plasteel, @@ -58073,32 +58271,28 @@ }, /area/crew_quarters/hor) "cbr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Biohazard_medi"; - name = "Quarantine Lockdown"; - opacity = 0 - }, /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; - name = "Medbay Emergency Entrance"; + name = "Medical Supplies"; req_access_txt = "5" }, -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plasteel, -/area/hallway/primary/central/se) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plasteel{ + tag = "icon-whitebluefull"; + icon_state = "whitebluefull" + }, +/area/medical/biostorage) "cbs" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -58157,13 +58351,47 @@ /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/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyer"; + name = "Medical Supplies"; + req_access_txt = "5" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plasteel{ + tag = "icon-whitebluefull"; + icon_state = "whitebluefull" + }, +/area/medical/biostorage) +"cbz" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Office"; + req_access_txt = "50" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plasteel, +/area/quartermaster/office) "cbA" = ( /obj/machinery/door/poddoor/shutters{ density = 0; @@ -58234,9 +58462,6 @@ d2 = 4; icon_state = "0-4" }, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "cbI" = ( @@ -58400,16 +58625,25 @@ /area/medical/genetics_cloning) "cbY" = ( /obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, /obj/machinery/door/airlock/medical/glass{ - id_tag = "CloningDoor"; - name = "Genetics Cloning"; - req_access_txt = "0"; - req_one_access_txt = "5;9" + id_tag = "MedbayFoyer"; + name = "Medbay Emergency Entrance"; + req_access_txt = "5" }, -/turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" +/obj/effect/decal/warning_stripes/northeast, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, -/area/medical/genetics_cloning) +/turf/simulated/floor/plasteel, +/area/hallway/primary/central/se) "cbZ" = ( /obj/structure/cable{ d1 = 4; @@ -59419,6 +59653,37 @@ icon_state = "floor3" }, /area/shuttle/administration) +"cdq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "CloningDoor"; + name = "Genetics Cloning"; + req_access_txt = "0"; + req_one_access_txt = "5;9" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/medical/genetics_cloning) "cdr" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/admin{ name = "NTV Argos shuttle navigation computer" @@ -60195,6 +60460,37 @@ tag = "icon-cafeteria (NORTHEAST)" }, /area/crew_quarters/hor) +"ceT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Biohazard_medi"; + name = "Quarantine Lockdown"; + opacity = 0 + }, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "MedbayFoyer"; + name = "Medbay Emergency Entrance"; + req_access_txt = "5" + }, +/obj/effect/decal/warning_stripes/southeast, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/central/se) "ceU" = ( /obj/structure/shuttle/engine/propulsion, /turf/simulated/shuttle/plating, @@ -61155,14 +61451,14 @@ }, /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 = 8 + }, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -61520,11 +61816,21 @@ /turf/simulated/wall, /area/medical/paramedic) "chi" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + id_tag = "CloningDoor"; + name = "Genetics Cloning"; + req_access_txt = "0"; + req_one_access_txt = "5;9" }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint) +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/medical/genetics_cloning) "chj" = ( /obj/structure/cable{ d1 = 4; @@ -62167,7 +62473,7 @@ }, /area/shuttle/administration) "cil" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor{ @@ -62178,7 +62484,7 @@ /turf/simulated/shuttle/floor, /area/shuttle/mining) "cin" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor, @@ -62230,6 +62536,9 @@ /obj/machinery/light{ dir = 8 }, +/obj/effect/landmark/start{ + name = "Shaft Miner" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" @@ -62971,31 +63280,15 @@ }, /area/medical/ward) "cjA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre"; - req_access_txt = "45" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" - }, -/obj/machinery/holosign/surgery{ - id = "surgery1" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/medical/surgery1) +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "cjB" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -63033,31 +63326,21 @@ }, /area/medical/ward) "cjD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre"; - req_access_txt = "45" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; + d1 = 1; + d2 = 2; + icon_state = "1-2"; tag = "" }, -/obj/machinery/holosign/surgery{ - id = "surgery2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/medical/surgery2) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "cjE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -63395,7 +63678,7 @@ }, /area/shuttle/administration) "ckh" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor{ @@ -63413,7 +63696,7 @@ color = "#FF0000"; dir = 8 }, -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 1 }, /turf/simulated/shuttle/floor{ @@ -63473,9 +63756,6 @@ pixel_x = 24 }, /obj/structure/disposalpipe/segment, -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "ckp" = ( @@ -63710,20 +63990,22 @@ /turf/simulated/floor/plasteel, /area/quartermaster/qm) "ckI" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command{ + id_tag = "blueshieldofficedoor"; + name = "Blueshield's Office"; + req_access_txt = "67" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/wood, +/area/blueshield) "ckJ" = ( /obj/structure/sink{ pixel_y = 30 @@ -63759,14 +64041,15 @@ }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ - id_tag = "blueshieldofficedoor"; - name = "Blueshield's Office"; - req_access_txt = "67" + id_tag = "ntrepofficedoor"; + name = "NT Representative's Office"; + req_access_txt = "73" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/wood, -/area/blueshield) +/area/ntrep) "ckO" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -63775,21 +64058,14 @@ }, /area/hallway/primary/aft) "ckP" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/door/airlock{ + name = "Custodial Closet"; + req_access_txt = "26" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command{ - id_tag = "ntrepofficedoor"; - name = "NT Representative's Office"; - req_access_txt = "73" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/ntrep) +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plasteel, +/area/janitor) "ckQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -63810,13 +64086,20 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "ckT" = ( -/obj/machinery/door/airlock{ - name = "Custodial Closet"; - req_access_txt = "26" +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/janitor) +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "ckU" = ( /obj/machinery/body_scanconsole, /obj/machinery/camera{ @@ -63902,8 +64185,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, -/area/maintenance/asmaint) +/area/maintenance/asmaint2) "clb" = ( /obj/structure/table/glass, /obj/machinery/computer/med_data/laptop, @@ -64674,35 +64958,15 @@ }, /area/medical/medbreak) "cmt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/medical/glass{ - id_tag = ""; - name = "Staff Room"; - req_access_txt = "5"; - req_one_access_txt = "0" - }, -/turf/simulated/floor/plasteel{ - dir = 2; - icon_state = "cafeteria"; - tag = "icon-cafeteria (NORTHEAST)" - }, -/area/medical/medbay2) +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "cmu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64847,21 +65111,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, @@ -65489,6 +65738,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" = ( @@ -65529,6 +65781,9 @@ dir = 5; level = 1 }, +/obj/effect/landmark/start{ + name = "Shaft Miner" + }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "cnV" = ( @@ -66402,12 +66657,22 @@ /turf/simulated/wall, /area/maintenance/genetics) "cpk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, /obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance"; - req_access_txt = "5" + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, /turf/simulated/floor/plating, -/area/maintenance/genetics) +/area/maintenance/asmaint) "cpl" = ( /obj/structure/cable, /obj/structure/table, @@ -67121,6 +67386,36 @@ icon_state = "whitepurple" }, /area/toxins/mixing) +"cqo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access_txt = "45" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/machinery/holosign/surgery{ + id = "surgery1" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/medical/surgery1) "cqp" = ( /obj/machinery/camera{ c_tag = "Research Toxins Launch Room"; @@ -67279,6 +67574,17 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cqw" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access_txt = "45" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -67286,11 +67592,17 @@ pixel_x = 0; tag = "" }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/holosign/surgery{ + id = "surgery2" }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint) +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/medical/surgery2) "cqx" = ( /obj/machinery/doppler_array{ dir = 4 @@ -67368,6 +67680,7 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cqG" = ( @@ -69245,6 +69558,13 @@ /area/medical/research{ name = "Research Division" }) +"ctD" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "ctE" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -69328,6 +69648,16 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/engine/controlroom) +"ctK" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "ctL" = ( /obj/machinery/light{ dir = 4; @@ -71347,17 +71677,38 @@ /area/maintenance/asmaint) "cxj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Xenobiology Research"; - req_access_txt = "47" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/medical/glass{ + id_tag = ""; + name = "Staff Room"; + req_access_txt = "5"; + req_one_access_txt = "0" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" }, -/area/toxins/xenobiology) +/area/medical/medbay2) "cxk" = ( /obj/structure/cable{ icon_state = "0-4"; @@ -72009,20 +72360,8 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; dir = 4 }, /turf/simulated/floor/plating, @@ -72160,23 +72499,15 @@ /area/construction) "cyE" = ( /obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" + name = "Medbay Maintenance"; + req_access_txt = "5" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, /turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/area/maintenance/genetics) "cyF" = ( /obj/structure/cable{ d1 = 4; @@ -72304,18 +72635,22 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "cyT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0; - tag = "" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Xenobiology Research"; + req_access_txt = "47" }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/xenobiology) "cyU" = ( /obj/item/twohanded/required/kirbyplants, /obj/structure/extinguisher_cabinet{ @@ -72599,6 +72934,9 @@ /turf/simulated/floor/plating, /area/storage/tech) "czx" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -72606,10 +72944,8 @@ pixel_x = 0; tag = "" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Tech Storage"; - req_access_txt = "23" +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -72617,8 +72953,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, /turf/simulated/floor/plating, -/area/storage/tech) +/area/maintenance/asmaint) "czy" = ( /obj/structure/cable{ d1 = 4; @@ -73301,24 +73641,28 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "cAG" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; tag = "" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Xenobiology Research"; - req_access_txt = "47" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "white" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/area/toxins/xenobiology) +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "cAH" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -73749,22 +74093,22 @@ /turf/simulated/floor/plating, /area/medical/psych) "cBx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Psych Office"; - req_access_txt = "64" - }, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0; + tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/medical/psych) +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "cBy" = ( /obj/machinery/atmospherics/unary/vent_scrubber{ dir = 1; @@ -74361,11 +74705,13 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "cCF" = ( -/obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ - name = "Alternate Construction Area"; req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cCG" = ( @@ -74392,16 +74738,26 @@ d1 = 4; d2 = 8; icon_state = "4-8"; - pixel_y = 0; + pixel_x = 0; tag = "" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Alternate Construction Area"; - req_access_txt = "12" +/obj/machinery/door/airlock/engineering{ + name = "Tech Storage"; + req_access_txt = "23" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/storage/tech) "cCJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -74843,20 +75199,25 @@ /turf/simulated/floor/plating, /area/toxins/misc_lab) "cDv" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; tag = "" }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research{ + name = "Xenobiology Research"; + req_access_txt = "47" }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/xenobiology) "cDw" = ( /turf/simulated/floor/plasteel{ icon_state = "white" @@ -75709,16 +76070,15 @@ /turf/simulated/wall/r_wall, /area/engine/mechanic_workshop) "cFe" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ + name = "Alternate Construction Area"; req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cFf" = ( @@ -76240,25 +76600,24 @@ }, /area/toxins/misc_lab) "cFT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Mechanic Workshop"; - req_access_txt = "70"; - req_one_access_txt = "0" +/obj/machinery/door/airlock/maintenance{ + name = "Alternate Construction Area"; + req_access_txt = "12" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plating, +/area/maintenance/consarea) "cFU" = ( /obj/structure/window/reinforced, /obj/structure/table/reinforced, @@ -76740,9 +77099,23 @@ /turf/simulated/wall/r_wall, /area/atmos/control) "cGL" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/maintenance/genetics) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Psych Office"; + req_access_txt = "64" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/wood, +/area/medical/psych) "cGM" = ( /obj/structure/cable{ d1 = 2; @@ -77241,16 +77614,18 @@ d1 = 1; d2 = 2; icon_state = "1-2"; - pixel_y = 0; tag = "" }, +/obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, -/area/maintenance/aft) +/area/maintenance/apmaint) "cHF" = ( /obj/structure/cable{ d1 = 1; @@ -77389,23 +77764,24 @@ /turf/simulated/wall, /area/engine/break_room) "cHR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering"; - req_access_txt = "32"; - req_one_access_txt = "0" +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/engine/break_room) +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "cHS" = ( /obj/structure/table, /obj/item/book/manual/supermatter_engine, @@ -78614,18 +78990,29 @@ }, /area/engine/mechanic_workshop) "cJY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/door/airlock/engineering/glass{ + name = "Mechanic Workshop"; + req_access_txt = "70"; + req_one_access_txt = "0" }, -/turf/simulated/floor/plating, -/area/maintenance/aft) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/mechanic_workshop) "cJZ" = ( /turf/simulated/wall, /area/hallway/primary/aft) @@ -79831,9 +80218,20 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "cMq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/aft) "cMr" = ( @@ -80891,16 +81289,19 @@ }, /area/assembly/assembly_line) "cOs" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; + pixel_y = 0; tag = "" }, -/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, /area/maintenance/aft) "cOt" = ( @@ -83959,22 +84360,27 @@ /turf/simulated/floor/plating/airless, /area/space/nearstation) "cTG" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Engineering Shuttle"; - req_access_txt = "0"; - req_one_access_txt = "10;24" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering"; + req_access_txt = "32"; + req_one_access_txt = "0" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/engi_shuttle) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/engine/break_room) "cTH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -88164,8 +88570,9 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/area/maintenance/aft) "dbi" = ( /obj/structure/closet/crate, /obj/item/clothing/under/color/lightpurple, @@ -88219,17 +88626,19 @@ /turf/simulated/floor/plasteel, /area/escapepodbay) "dbp" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, -/area/maintenance/asmaint) +/area/maintenance/aft) "dbq" = ( /obj/structure/cable{ d1 = 1; @@ -88698,11 +89107,9 @@ /area/maintenance/asmaint) "dci" = ( /obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/genetics) @@ -89542,16 +89949,23 @@ /turf/space, /area/solar/starboard) "ddW" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 +/obj/machinery/door/airlock/maintenance{ + name = "Engineering Shuttle"; + req_access_txt = "0"; + req_one_access_txt = "10;24" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - tag = "icon-swall_f6"; - icon_state = "swall_f6"; - dir = 2 - }, -/area/shuttle/pod_4) +/area/maintenance/engi_shuttle) "ddX" = ( /obj/machinery/access_button{ command = "cycle_exterior"; @@ -89566,16 +89980,12 @@ /turf/space, /area/space/nearstation) "ddY" = ( -/obj/structure/shuttle/engine/propulsion/burst{ - dir = 8 +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, +/obj/effect/mapping_helpers/airlock/unres, /turf/simulated/floor/plating, -/turf/simulated/shuttle/wall{ - tag = "icon-swall_f5"; - icon_state = "swall_f5"; - dir = 2 - }, -/area/shuttle/pod_4) +/area/maintenance/asmaint2) "ddZ" = ( /obj/structure/reagent_dispensers/watertank, /obj/structure/cable{ @@ -89739,6 +90149,33 @@ oxygen = 0 }, /area/atmos) +"deo" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) +"dep" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/genetics) "deq" = ( /obj/machinery/computer/guestpass, /turf/simulated/wall, @@ -90131,18 +90568,19 @@ /turf/simulated/floor/plating, /area/storage/secure) "dff" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, +/obj/machinery/door/airlock/maintenance, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_x = 0 + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, -/area/maintenance/port) +/area/maintenance/asmaint2) "dfg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -90577,6 +91015,16 @@ "dfV" = ( /turf/simulated/floor/plating, /area/storage/secure) +"dfW" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "dfX" = ( /turf/space, /turf/simulated/shuttle/wall{ @@ -90641,6 +91089,23 @@ dir = 6 }, /area/maintenance/storage) +"dge" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Biohazard Disposals"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/mapping_helpers/airlock/unres, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) +"dgf" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + icon_state = "airlock_unres_helper"; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "dgg" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ level = 2 @@ -90760,14 +91225,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{ @@ -90795,6 +91252,17 @@ /obj/machinery/light/small, /turf/simulated/floor/plating, /area/maintenance/asmaint2) +"dgC" = ( +/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) "dgD" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -90988,7 +91456,7 @@ id = "soltraderflash"; pixel_y = -28 }, -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor, @@ -91416,30 +91884,16 @@ }, /area/crew_quarters/toilet) "dhT" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Bar Office"; - req_access_txt = "25" +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"dhU" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Bar Maintenance"; - req_access_txt = "12" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/turf/simulated/shuttle/wall{ + tag = "icon-swall_f5"; + icon_state = "swall_f5"; + dir = 2 + }, +/area/shuttle/pod_4) "dhV" = ( /obj/structure/sink/kitchen{ pixel_y = 28 @@ -91449,9 +91903,6 @@ }, /area/crew_quarters/kitchen) "dhW" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/machinery/light, /turf/simulated/shuttle/floor{ icon_state = "floor2" @@ -91500,16 +91951,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"die" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) "dif" = ( /turf/simulated/shuttle/wall{ tag = "icon-swall2"; @@ -91715,7 +92156,7 @@ }, /area/hallway/primary/central/north) "diy" = ( -/obj/structure/chair, +/obj/structure/chair/comfy/shuttle, /turf/simulated/shuttle/floor{ icon_state = "floor4" }, @@ -92879,14 +93320,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/wall, /area/maintenance/asmaint2) -"dkG" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Biohazard Disposals"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/asmaint) "dkH" = ( /obj/machinery/light/small{ dir = 4; @@ -93547,10 +93980,6 @@ /area/aisat/maintenance{ name = "\improper AI Satellite Service" }) -"dlL" = ( -/obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) "dlM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/small, @@ -93823,10 +94252,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"dmo" = ( -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) "dmp" = ( /obj/structure/table, /obj/item/weldingtool, @@ -95149,6 +95574,10 @@ /obj/item/crowbar, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"doE" = ( +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "doF" = ( /turf/simulated/floor/plating, /area/toxins/launch{ @@ -95169,15 +95598,15 @@ /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 }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, /turf/simulated/shuttle/floor, /area/shuttle/pod_4) "doK" = ( @@ -95199,9 +95628,6 @@ /turf/simulated/shuttle/floor, /area/shuttle/pod_4) "doM" = ( -/obj/structure/chair{ - dir = 4 - }, /obj/machinery/status_display{ density = 0; layer = 4; @@ -95209,6 +95635,9 @@ pixel_y = 32 }, /obj/machinery/light, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, /turf/simulated/shuttle/floor, /area/shuttle/pod_4) "doN" = ( @@ -96123,20 +96552,6 @@ "dsw" = ( /turf/simulated/floor/mech_bay_recharge_floor, /area/shuttle/escape) -"dsx" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) "dsy" = ( /obj/machinery/light/small{ dir = 4 @@ -96541,7 +96956,7 @@ req_access = list(101); req_access_txt = "0" }, -/obj/structure/chair/comfy/black{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor{ @@ -96555,6 +96970,12 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"mMw" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/shuttle/floor4/vox, +/area/shuttle/vox) "nMi" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 @@ -96600,15 +97021,6 @@ icon_state = "floor4" }, /area/shuttle/administration) -"qnV" = ( -/obj/effect/landmark/start{ - name = "Shaft Miner" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "brown" - }, -/area/quartermaster/miningdock) "qUv" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /turf/space, @@ -96640,6 +97052,14 @@ icon_state = "floor4" }, /area/shuttle/administration) +"sUK" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor4" + }, +/area/shuttle/syndicate_sit) "uxy" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 @@ -96669,6 +97089,23 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"vUm" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/shuttle/floor{ + icon_state = "floor2" + }, +/area/shuttle/constructionsite) +"wVD" = ( +/obj/effect/landmark/start{ + name = "Shaft Miner" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "brown" + }, +/area/quartermaster/miningdock) "xAw" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 8 @@ -105314,9 +105751,9 @@ aaa aaa aaa aaa -bwX +bPv bvi -bys +bPU aaa aaa aaa @@ -105570,11 +106007,11 @@ aab aaa aaa aaa -bwX +bPv btv bvj bwE -bys +bPU aaa bAQ bCa @@ -106063,7 +106500,7 @@ aaa aJP aLa aLa -aON +aRm aOP aMs aVf @@ -106577,7 +107014,7 @@ aaa aJQ aLa aLa -aOO +aRz aOR aQa aMd @@ -107091,7 +107528,7 @@ aaa aJR aLe aLe -aPP +aRV aOP aMs aPJ @@ -107605,7 +108042,7 @@ aaa aJT aLe aLe -aPU +aRY aOR aQa aPQ @@ -108371,14 +108808,14 @@ aEe aFf aFg aaa -dmo +doE aII aII aII aII aHS aLg -aNS +aVL aQw aRe aSd @@ -108885,7 +109322,7 @@ aaa aaa aaa aaa -dmo +doE aII aII aLw @@ -109688,7 +110125,7 @@ bqr bBr bqr bqr -bFJ +bRH bCf bCf bCf @@ -110944,7 +111381,7 @@ aHh aIx aIx aJU -aLh +aON aLl aGn aOV @@ -111492,7 +111929,7 @@ bIe bJu bnK bCh -bLU +bSA bCf bCf bCf @@ -111716,7 +112153,7 @@ aLk aGn aGn aPc -aLn +aPh aGn aGn aGn @@ -112236,7 +112673,7 @@ aGn aGn aGn aRu -aRY +bff aSF aTz aVh @@ -113019,7 +113456,7 @@ beP bgz bse bvd -dff +bNP dfg dfh dgU @@ -113511,7 +113948,7 @@ aGn aGn aGn aHn -aIM +aLn aGn aKe aLq @@ -114013,9 +114450,9 @@ awx axl ayk azi -ayk -aBl -aBl +sUK +sUK +sUK ayk diy aex @@ -114037,7 +114474,7 @@ aGn aPc aGn aSK -aVb +bjh aWl aYi bag @@ -114083,7 +114520,7 @@ aaa cng coL coL -cqF +ctK coL cvk cwx @@ -114534,9 +114971,9 @@ aaa aaa aaa aaa -dmo -dmo -dmo +doE +doE +doE aFY aEb aIf @@ -114804,7 +115241,7 @@ aGn aGn aGn aGn -aLk +bbx aGn aGn aUy @@ -114854,7 +115291,7 @@ aaa cng coL coL -cqF +ctK coL coL cwx @@ -116089,7 +116526,7 @@ aPi aPi aHS aMA -aRm +bcv aMA aKb aNx @@ -116148,11 +116585,11 @@ csu csu cCE cAF -cFe +cHE cGf cGf cGf -cJY +cMq cJn cLi cNA @@ -116371,7 +116808,7 @@ bwY bsk bnD bBf -bCq +bOn bJy bKG bxb @@ -116411,7 +116848,7 @@ cFW cIJ cEY cLm -cMq +dbh cNB cNB cPu @@ -116658,7 +117095,7 @@ ctU cgQ cgQ cgQ -cqF +cCF cgQ cgQ cgQ @@ -116874,7 +117311,7 @@ beK bgh bmf bkr -bCq +bOn bCs bCs bCs @@ -117902,7 +118339,7 @@ beN bgA blO bph -bqj +bPr brz bsD bui @@ -117940,7 +118377,7 @@ cam aab cgQ ctU -cqF +ctK coL coL coL @@ -118176,8 +118613,8 @@ bFq bFm bxb bKB -bMz -bOn +bVl +bWO bKB bxb bxb @@ -118191,7 +118628,7 @@ cam cgH cit ckn -qnV +wVD cnm cam cgQ @@ -118446,7 +118883,7 @@ cam cam cam cgG -cir +cfb cfb cnG cnl @@ -118702,9 +119139,9 @@ cam cbI cdy cff -cfb cir cfb +cfb cnS cno cam @@ -119183,7 +119620,7 @@ aSz aSz aSz aSz -bfa +bys biE bmx bpj @@ -119203,7 +119640,7 @@ bDU bNs bHc byC -bNP +bVk bMx bSM bUn @@ -119218,7 +119655,7 @@ cdA cis ckq cls -cmI +cls cnU cno cam @@ -119230,7 +119667,7 @@ cvo cvo cvo cvo -cCF +cFe cvo cEY cEP @@ -119491,7 +119928,7 @@ cwF cwF cEY cEO -cFT +cJY cGH cEY cEY @@ -119723,7 +120160,7 @@ bzJ bQe bDX bDX -bXi +cbz bzJ bYK bYM @@ -120007,7 +120444,7 @@ cvo cEQ cGb cGM -cHE +cOs cIP cIP cKJ @@ -120030,9 +120467,9 @@ cZu cZu dcM dfY -dgv -dgv -dgv +vUm +vUm +vUm dfY aaa aaa @@ -120232,7 +120669,7 @@ bzE bzE bzE bNX -bMF +bVH bBn bBn bBn @@ -120287,8 +120724,8 @@ cZu cZu dcU dfZ -dgw -dgw +dgv +dgv dhW dfY aaa @@ -120545,7 +120982,7 @@ dcM dfd dfY dgv -dgw +vUm dgv dfY aaa @@ -121286,7 +121723,7 @@ cvo cvo cvo cvo -cCI +cFT cvo cvo cEQ @@ -121304,7 +121741,7 @@ cKb cKb cRI cSj -cTG +ddW cUY cZC dar @@ -121545,7 +121982,7 @@ czN cyg cCH coL -cqF +ctK cEQ cGj cJZ @@ -121786,7 +122223,7 @@ caw bTz cfq ciy -ckI +cjD cly cly cly @@ -121802,7 +122239,7 @@ cti cly cAH cly -cDv +cHR cFg cGm cnA @@ -122267,7 +122704,7 @@ aXZ bmu aPi aPi -bff +bCq bgS bmV bkv @@ -122752,7 +123189,7 @@ aoe aMO aod aod -avU +avW aod aod aoe @@ -122814,7 +123251,7 @@ bMG cdV cfu ciL -ckN +ckI ccK cmK com @@ -123016,14 +123453,14 @@ aIo aIl aIl aDe -aDO +aIM aIl aIl aHA aHA -aKp +aNS aHA -aNe +aOO aHA aHA aEl @@ -124054,7 +124491,7 @@ aLV aJF aOA aPD -aRV +aVb aTw aVE aYa @@ -124356,7 +124793,7 @@ bTJ ces cgi cji -ckP +ckN clL cmM coo @@ -124560,7 +124997,7 @@ aCi aCf aCn aFr -aGv +aKx aHG aHG aKv @@ -125084,7 +125521,7 @@ aSN aPH aEj aMA -aVL +bew aMA aMA aMA @@ -125139,7 +125576,7 @@ cgW cvx cvx cvx -czx +cCI cvx cvx cvx @@ -125153,7 +125590,7 @@ cJk cHG cHG cNS -cOs +dbp cPl cRR cQE @@ -126093,8 +126530,8 @@ aoq arq asZ aAx -avW awc +awP aAx azI aAP @@ -126107,7 +126544,7 @@ aFw aJh aKy aEj -aKx +aPb awl awl awl @@ -126160,7 +126597,7 @@ chc chc chc chc -cqw +cpk cJZ csD ctX @@ -126371,7 +126808,7 @@ avq avq avq avq -aHp +axN aRx aUw aDN @@ -126432,7 +126869,7 @@ cFj cGN cHU cLM -cHR +cTG cLM cHQ cHQ @@ -126617,7 +127054,7 @@ aHE axe aFz aFz -aHV +aLh aFz axe awl @@ -127440,7 +127877,7 @@ bSi ceF cgj cjl -ckT +ckP clQ cnr cor @@ -128468,13 +128905,13 @@ bSi ccn cgI cjn -cla +ckT clS cPd cos cPd cqY -chi +ctD csL csL cvI @@ -129042,9 +129479,9 @@ dfR dcq dcq dcq -ddW +dgC doL -ddY +dhT dcq aaa aaa @@ -129192,7 +129629,7 @@ aJp aJp aJp aNW -aPb +aPP aQm aSm aTE @@ -129242,7 +129679,7 @@ cjo chf cdW ceb -chi +cmt csL cqZ crX @@ -130063,7 +130500,7 @@ dkO dkO cQZ cYz -dmo +doE dcq dfE dgd @@ -130261,8 +130698,8 @@ bPc chh bQV bSu -bPU -cbr +cbY +ceT bSu bQV chf @@ -130275,7 +130712,7 @@ csL cqD csL chf -chi +cyu chf chf chf @@ -130319,7 +130756,7 @@ cQZ cQZ cQZ cQZ -dmo +doE aab dcq dfD @@ -130576,7 +131013,7 @@ dkq dkT dkT cQZ -dmo +doE aab aaa dmW @@ -130833,7 +131270,7 @@ dkp bbO dlw cQZ -dmo +doE aab aaa dmW @@ -131090,7 +131527,7 @@ dks dkT dkT cQZ -dmo +doE aab aab dmX @@ -131261,7 +131698,7 @@ aUS bjc baJ beH -dhT +bwl bft aYd bnQ @@ -131347,7 +131784,7 @@ cQZ cQZ cQZ cQZ -dmo +doE aab aaa dmW @@ -131604,7 +132041,7 @@ dkw dkV dkV cQZ -dmo +doE aab aaa dmW @@ -131861,7 +132298,7 @@ dku bdG dlx cQZ -dmo +doE aab aaa dmW @@ -132071,7 +132508,7 @@ caA cfE cfE cfE -cjA +cqo cCW cCW chu @@ -132118,11 +132555,11 @@ dkx dkV dkV cQZ -dmo -dmo -dmo +doE +doE +doE ddC -dmo +doE ddM ddO cPw @@ -132375,7 +132812,7 @@ cQZ cQZ cQZ cQZ -dmo +doE aab aaa dmW @@ -132523,7 +132960,7 @@ aIq avq aAc aBt -aHp +aGv aCh aEw aFI @@ -132546,7 +132983,7 @@ aOI bjl bbc bfn -dhU +bwX djk dkN boM @@ -132572,7 +133009,7 @@ bHO bHO bHO bHO -bPv +bYu bSR bZJ cbO @@ -132632,7 +133069,7 @@ aab aab aab aab -dmo +doE aab aaa dmW @@ -132829,7 +133266,7 @@ bLA bLA bLA bLA -bPr +bZR bYe bZK cbQ @@ -132880,16 +133317,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 @@ -133086,7 +133523,7 @@ bLB bNr bPm bNz -bPx +can crA bZJ cuv @@ -133137,7 +133574,7 @@ den deX dfO cQZ -dmo +doE aaa aaa aaa @@ -133288,7 +133725,7 @@ ajb awl arR awl -aHp +avU aqc aya awl @@ -133313,7 +133750,7 @@ aZC bbu bdj bfr -aOa +bpE bjo bbd bdT @@ -133356,7 +133793,7 @@ caA cfH cfH cfH -cjD +cqw cDf cDf cnz @@ -133394,7 +133831,7 @@ dem cRi dem cQZ -dmo +doE aab alw alw @@ -133561,7 +133998,7 @@ aSP aSP aSP aSP -aPh +aPU aQH aSQ aVs @@ -133585,7 +134022,7 @@ bpN bog bpN bog -bwl +bPM bdT bdT bAk @@ -133651,7 +134088,7 @@ dem deY dem cQZ -dmo +doE aab alw aab @@ -133908,7 +134345,7 @@ cQZ cQZ cQZ cQZ -dmo +doE aaa diu djd @@ -134064,7 +134501,7 @@ awF awF avq aya -aBC +aDO aqc atG aaa @@ -134349,7 +134786,7 @@ bdL bfE biY boQ -bpE +bMF bqB brY btI @@ -134834,7 +135271,7 @@ avb aAQ awF aye -aHp +axN avq aAS atG @@ -134852,7 +135289,7 @@ aPm aVv aXf aXf -bbx +bje aKn aKm aVU @@ -135118,7 +135555,7 @@ bbC aGY beb djw -bje +bFJ boX bpH bqH @@ -135205,10 +135642,10 @@ dlm dlm dlm dmD -dmo -dmo -dmo -dmo +doE +doE +doE +doE aab aab aab @@ -135375,7 +135812,7 @@ bbh aGY beb dju -bjg +bLn bjv dnD bmy @@ -135399,7 +135836,7 @@ bLS bTU bQB bRb -bSz +cbr bJR bZN cbU @@ -135465,7 +135902,7 @@ dlm dlm dnx aaa -dmo +doE aaa aaa aaa @@ -135621,7 +136058,7 @@ aPm aPm aSZ aLA -aXT +bfa aIh aLA aLA @@ -135632,7 +136069,7 @@ bbh aGY beb djx -bjh +bLU bjv dnE bmy @@ -135656,7 +136093,7 @@ bMY bOV bQE bOV -bSA +cby cuo bZP cbW @@ -135678,7 +136115,7 @@ cwX cpS czZ cAt -cBx +cGL cCS cEh cmy @@ -135722,7 +136159,7 @@ dmO dne dnI aaa -dmo +doE aaa aaa aaa @@ -135862,9 +136299,9 @@ atG auA axg axh -awP +aBC avt -axN +aHV atG aaa aFK @@ -135889,7 +136326,7 @@ bbI aGY beb bfH -bjh +bLU bjx bfH bmy @@ -135979,7 +136416,7 @@ dlm dlm dnx aaa -dmo +doE aaa aaa aaa @@ -136146,7 +136583,7 @@ bbV aGY beb bfJ -bjh +bLU bjy bkY bmy @@ -136172,8 +136609,8 @@ bLK bLK bLK bTZ -bZR -cbY +cdq +chi bTZ bWd chr @@ -136185,7 +136622,7 @@ chz chr ckC ckC -cmt +cxj ckC ciY cwZ @@ -136234,9 +136671,9 @@ dlm dmE dlm ddD -dmo -dmo -dmo +doE +doE +doE aaa aaa aaa @@ -136630,9 +137067,9 @@ aaa aaa aaa awl -dmo +doE avM -dmo +doE aus avw awm @@ -136905,7 +137342,7 @@ aFJ aPq aRv aTb -aMn +aXT aGY aGY aGY @@ -137511,7 +137948,7 @@ cps diq djm cps -dkG +dge dla dlr dlN @@ -138243,7 +138680,7 @@ ckL cga cga cga -cpk +cyE cxb cxJ cAb @@ -138273,7 +138710,7 @@ cJt cJG chf chf -dbp +deo chf cBN chf @@ -138959,7 +139396,7 @@ aGY aGX aGX aGX -aRz +aTs aMz aOF aOG @@ -138980,7 +139417,7 @@ bfR bfR bfR bfR -bvN +bPx byQ bAW bCN @@ -139045,7 +139482,7 @@ cOm cOm daJ dbq -dci +dep cac cac cac @@ -139469,7 +139906,7 @@ aGX aHc aIv aGX -aMn +aOa aGX aGX aGX @@ -139548,16 +139985,16 @@ ciY ciY ciY ciY -cGL +dci ciY cIb ciY ciY -cGL +dci ciY ciY ciY -cGL +dci cep cep aaa @@ -139719,7 +140156,7 @@ aab aqZ aaa aab -dmo +doE aHN aHN aHN @@ -139824,8 +140261,8 @@ dia dcW bZZ aaa -dmo -dmo +doE +doE cTR aaa aaa @@ -139982,10 +140419,10 @@ aCy aMf aNf aGY -aMn +aNe aGY aGY -aMn +aNe aGY aGY aPK @@ -140233,7 +140670,7 @@ aab aqZ aaa aaa -dmo +doE aHN dof dog @@ -140254,7 +140691,7 @@ aGX aGX aWA aYY -bcv +bqj bfU bhx bij @@ -140498,7 +140935,7 @@ aJI aGY aGX aGX -aMn +aKp aGX aGX aGY @@ -141626,7 +142063,7 @@ aaa aaa bGH cuQ -dlL +dgf cuQ bGH aaa @@ -142035,14 +142472,14 @@ aab aAf aAf aAf -aMn +aKp aAf aHb aMz aMz aIE aGX -aMn +aKp aMz aGX aOG @@ -142357,7 +142794,7 @@ bLR cvG bIi cxN -cyu +czx cBR cBR cDq @@ -142406,7 +142843,7 @@ dnR dnS dnX dom -dmo +doE aab aaa aaa @@ -142663,7 +143100,7 @@ bZZ bZZ bZZ bZZ -dmo +doE aab aaa aaa @@ -142845,11 +143282,11 @@ bHQ bJq bJq bKT -bLn +bSz bNn bPi bRT -bLn +bSz bUP bVF bWl @@ -142870,10 +143307,10 @@ csH cny cvH cwt -cxj +cyT cyC cAi -cAG +cDv cBA cCU cEm @@ -142904,14 +143341,14 @@ aab aab aab bGH -die +dff dhR bGH bGH bGH bGH cuQ -dlL +dgf cuQ bGH bGH @@ -143085,7 +143522,7 @@ bcu ber bga bis -bew +bMz bcD bld blw @@ -143385,7 +143822,7 @@ bIi bIi bIi cxN -cyE +cAG cAP cAP cDu @@ -143890,11 +144327,11 @@ chS cjQ bYj cmx -dsx +cla dsz cpT dsz -dsx +cla ctH cAS cAS @@ -144367,7 +144804,7 @@ aYA baA baz baz -bew +bvN bgg bgg baz @@ -144709,7 +145146,7 @@ cuQ aaa cuQ cuQ -dlL +dgf cuQ bGG bKl @@ -144876,7 +145313,7 @@ aMz aQI aGY aSi -aTs +bjg aUX aUX aZF @@ -144927,7 +145364,7 @@ cgs bGG cuQ cxS -cyT +cBx cAP cCh cDw @@ -145678,7 +146115,7 @@ bPq bPq bPq bUS -bVH +bXi bWv bYn caS @@ -146453,7 +146890,7 @@ big big big big -dbh +cjA aYS aaa dbP @@ -146759,7 +147196,7 @@ bGH bGG dgy bGG -dbh +dfW dia cuQ djQ @@ -148035,7 +148472,7 @@ aab bGH bGG bGG -dbh +ddY bGG dcJ ddJ @@ -148300,7 +148737,7 @@ cuQ dfc bGG bGG -dbh +ddY bGG bGG bGH @@ -149062,7 +149499,7 @@ aaa aab aaa aaa -dmo +doE aab aaa aaa @@ -149319,7 +149756,7 @@ aaa aab aaa aaa -dmo +doE aab aaa aaa @@ -149827,7 +150264,7 @@ aaa aaa aaa aaa -dmo +doE aaa aaa aaa @@ -150084,7 +150521,7 @@ aaa aaa aaa aaa -dmo +doE aaa aaa aaa @@ -150341,7 +150778,7 @@ aaa aaa aaa aaa -dmo +doE aaa aaa aaa @@ -150598,7 +151035,7 @@ aaa aaa aaa aaa -dmo +doE aaa aaa aaa @@ -150855,7 +151292,7 @@ aaa aaa aaa aaa -dmo +doE aaa aaa aaa @@ -151112,7 +151549,7 @@ aaa aaa aaa aaa -dmo +doE aaa aaa aaa @@ -151311,7 +151748,7 @@ aaa aYD baW bcJ -beB +bcK beC beC bjC @@ -151825,7 +152262,7 @@ aaa aYH baY bcL -beB +bcK beC bim bjC @@ -153822,8 +154259,8 @@ aaa aaa agc agZ -ahp -ahp +mMw +mMw agZ ail agw diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 7a43bfc098b..d3417ba50f3 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) @@ -12231,6 +12230,12 @@ "FL" = ( /turf/simulated/wall/r_wall, /area/adminconstruction) +"Ga" = ( +/obj/machinery/computer/shuttle/ert, +/turf/unsimulated/floor{ + icon_state = "dark" + }, +/area/centcom/specops) "GP" = ( /turf/unsimulated/floor{ icon_state = "gcircuit" @@ -12454,26 +12459,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 +12492,7 @@ }, /area/shuttle/assault_pod) "KY" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 8 }, /turf/simulated/shuttle/floor{ @@ -12582,12 +12593,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 +12745,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 +12753,7 @@ }, /area/centcom/evac) "Wl" = ( -/obj/structure/chair{ +/obj/structure/chair/comfy/shuttle{ dir = 4 }, /turf/simulated/shuttle/floor{ @@ -12756,13 +12761,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" = ( @@ -31702,7 +31707,7 @@ pb uj uj uj -uj +Ga sX we we @@ -41460,7 +41465,7 @@ sq aN aN nV -QI +KA og og og @@ -41717,7 +41722,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/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 d81ea35e1e9..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) 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/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 9f2556df3a4..049f2541bc1 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -57,6 +57,89 @@ #define MAX_STACK_AMOUNT_GLASS 50 #define MAX_STACK_AMOUNT_RODS 60 +//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" +#define COLOR_BLACK "#000000" +#define COLOR_NAVY_BLUE "#000080" +#define COLOR_LIGHT_GREEN "#008000" +#define COLOR_DARK_GRAY "#404040" +#define COLOR_MAROON "#800000" +#define COLOR_PURPLE "#800080" +#define COLOR_VIOLET "#9933ff" +#define COLOR_OLIVE "#808000" +#define COLOR_BROWN_ORANGE "#824b28" +#define COLOR_DARK_ORANGE "#b95a00" +#define COLOR_GRAY40 "#666666" +#define COLOR_GRAY20 "#333333" +#define COLOR_GRAY15 "#151515" +#define COLOR_SEDONA "#cc6600" +#define COLOR_DARK_BROWN "#917448" +#define COLOR_DEEP_SKY_BLUE "#00e1ff" +#define COLOR_LIME "#00ff00" +#define COLOR_TEAL "#33cccc" +#define COLOR_PALE_PINK "#bf89ba" +#define COLOR_YELLOW_GRAY "#c9a344" +#define COLOR_PALE_YELLOW "#c1bb7a" +#define COLOR_WARM_YELLOW "#b3863c" +#define COLOR_RED_GRAY "#aa5f61" +#define COLOR_BROWN "#b19664" +#define COLOR_GREEN_GRAY "#8daf6a" +#define COLOR_DARK_GREEN_GRAY "#54654c" +#define COLOR_BLUE_GRAY "#6a97b0" +#define COLOR_DARK_BLUE_GRAY "#3e4855" +#define COLOR_SUN "#ec8b2f" +#define COLOR_PURPLE_GRAY "#a2819e" +#define COLOR_BLUE_LIGHT "#33ccff" +#define COLOR_RED_LIGHT "#ff3333" +#define COLOR_BEIGE "#ceb689" +#define COLOR_BABY_BLUE "#89cff0" +#define COLOR_PALE_GREEN_GRAY "#aed18b" +#define COLOR_PALE_RED_GRAY "#cc9090" +#define COLOR_PALE_PURPLE_GRAY "#bda2ba" +#define COLOR_PALE_BLUE_GRAY "#8bbbd5" +#define COLOR_LUMINOL "#66ffff" +#define COLOR_SILVER "#c0c0c0" +#define COLOR_GRAY80 "#cccccc" +#define COLOR_OFF_WHITE "#eeeeee" +#define COLOR_GOLD "#6d6133" +#define COLOR_NT_RED "#9d2300" +#define COLOR_BOTTLE_GREEN "#1f6b4f" +#define COLOR_PALE_BTL_GREEN "#57967f" +#define COLOR_GUNMETAL "#545c68" +#define COLOR_WALL_GUNMETAL "#353a42" +#define COLOR_STEEL "#a8b0b2" +#define COLOR_MUZZLE_FLASH "#ffffb2" +#define COLOR_CHESTNUT "#996633" +#define COLOR_BEASTY_BROWN "#663300" +#define COLOR_WHEAT "#ffff99" +#define COLOR_CYAN_BLUE "#3366cc" +#define COLOR_LIGHT_CYAN "#66ccff" +#define COLOR_PAKISTAN_GREEN "#006600" +#define COLOR_HULL "#436b8e" +#define COLOR_AMBER "#ffbf00" +#define COLOR_COMMAND_BLUE "#46698c" +#define COLOR_SKY_BLUE "#5ca1cc" +#define COLOR_PALE_ORANGE "#b88a3b" +#define COLOR_CIVIE_GREEN "#b7f27d" +#define COLOR_TITANIUM "#d1e6e3" +#define COLOR_DARK_GUNMETAL "#4c535b" +#define COLOR_BRONZE "#8c7853" +#define COLOR_BRASS "#b99d71" +#define COLOR_INDIGO "#4b0082" +#define COLOR_ALUMINIUM "#bbbbbb" +#define COLOR_CRYSTAL "#00c8a5" +#define COLOR_ASTEROID_ROCK "#735555" +#define COLOR_NULLGLASS "#ff6088" +#define COLOR_DIAMOND "#d8d4ea" + //FONTS: // Used by Paper and PhotoCopier (and PaperBin once a year). // Used by PDA's Notekeeper. @@ -132,7 +215,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 @@ -315,7 +403,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 7 +#define SQL_VERSION 8 // Vending machine stuff #define CAT_NORMAL 1 @@ -393,4 +481,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/__HELPERS/game.dm b/code/__HELPERS/game.dm index 27b69284a3d..abd9aeb5a03 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -19,6 +19,12 @@ return A return 0 +/proc/get_location_name(atom/X, format_text = FALSE) + var/area/A = isarea(X) ? X : get_area(X) + if(!A) + return null + return format_text ? format_text(A.name) : A.name + /proc/get_areas_in_range(dist=0, atom/center=usr) if(!dist) var/turf/T = get_turf(center) 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/text.dm b/code/__HELPERS/text.dm index b90f7502e65..08af11a128c 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) @@ -538,6 +545,43 @@ proc/checkhtml(var/t) text = copytext(text, 1, MAX_PAPER_MESSAGE_LEN) return text +/proc/convert_pencode_arg(text, tag, arg) + arg = sanitize_simple(html_encode(arg), list("''"="","\""="", "?"="")) + // https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html#rule-4---css-escape-and-strictly-validate-before-inserting-untrusted-data-into-html-style-property-values + var/list/style_attacks = list("javascript:", "expression", "byond:", "file:") + + for(var/style_attack in style_attacks) + if(findtext(arg, style_attack)) + // Do not attempt to render dangerous things + return text + + if(tag == "class") + return "" + + if(tag == "style") + return "" + + if(tag == "img") + var/list/img_props = splittext(arg, ";") + if(img_props.len == 3) + return "" + if(img_props.len == 2) + return "" + return "" + + return text + +/proc/admin_pencode_to_html() + var/text = pencode_to_html(arglist(args)) + var/regex/R = new(@"\[(.*?) (.*?)\]", "ge") + text = R.Replace(text, /proc/convert_pencode_arg) + + text = replacetext(text, "\[/class\]", "") + text = replacetext(text, "\[/style\]", "") + text = replacetext(text, "\[/img\]", "") + + return text + /proc/html_to_pencode(text) text = replacetext(text, "
", "\n") text = replacetext(text, "
", "\[center\]") 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/_defines.dm b/code/_onclick/hud/_defines.dm index e3d423130e5..58e82733abe 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -107,14 +107,20 @@ #define ui_healthdoll "EAST-1:28,CENTER-1:15" #define ui_health "EAST-1:28,CENTER:17" #define ui_internal "EAST-1:28,CENTER+1:19" - //borgs + +//borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. + +//aliens #define ui_alien_health "EAST-1:28,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. - +//constructs #define ui_construct_pull "EAST-1:28,SOUTH+1:10" //above the zone_sel icon #define ui_construct_health "EAST,CENTER:15" //same height as humans, hugging the right border +//slimes +#define ui_slime_health "EAST,CENTER:15" //same as borgs, constructs and humans + //Pop-up inventory #define ui_shoes "WEST+1:8,SOUTH:5" diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 15ed4429965..b70c98908f5 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -2,6 +2,25 @@ var/datum/action/linked_action screen_loc = null +/obj/screen/movable/action_button/MouseDrop(over_object) + if((istype(over_object, /obj/screen/movable/action_button) && !istype(over_object, /obj/screen/movable/action_button/hide_toggle))) + if(locked) + to_chat(usr, "Action button \"[name]\" is locked, unlock it first.") + closeToolTip(usr) + return + var/obj/screen/movable/action_button/B = over_object + var/list/actions = usr.actions + actions.Swap(actions.Find(linked_action), actions.Find(B.linked_action)) + moved = FALSE + B.moved = FALSE + closeToolTip(usr) + usr.update_action_buttons() + else if(istype(over_object, /obj/screen/movable/action_button/hide_toggle)) + closeToolTip(usr) + else + closeToolTip(usr) + return ..() + /obj/screen/movable/action_button/Click(location,control,params) var/list/modifiers = params2list(params) if(modifiers["shift"]) @@ -29,6 +48,13 @@ icon_state = "bg_default" var/hidden = 0 +/obj/screen/movable/action_button/hide_toggle/MouseDrop(over_object) + if(istype(over_object, /obj/screen/movable/action_button)) + closeToolTip(usr) + else + closeToolTip(usr) + return ..() + /obj/screen/movable/action_button/hide_toggle/Click(location,control,params) var/list/modifiers = params2list(params) if(modifiers["shift"]) @@ -83,9 +109,9 @@ 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) - +/obj/screen/movable/action_button/MouseEntered(location, control, params) + if(!QDELETED(src)) + openToolTip(usr, src, params, title = name, content = desc) /obj/screen/movable/action_button/MouseExited() closeToolTip(usr) diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 0b1a6d1c6c4..dc98d887279 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -256,4 +256,10 @@ //Add multicamera camera using = new /obj/screen/ai/add_multicam() using.screen_loc = ui_ai_add_multicam - static_inventory += using \ No newline at end of file + static_inventory += using + +//Intent + using = new /obj/screen/act_intent/robot/AI() + using.icon_state = mymob.a_intent + static_inventory += using + action_intent = using \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 91c8d6250b4..8bc65fcf691 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -95,6 +95,9 @@ icon = 'icons/mob/screen_robot.dmi' screen_loc = ui_borg_intents +/obj/screen/act_intent/robot/AI + screen_loc = "EAST-1:32,SOUTH:70" + /obj/screen/mov_intent name = "run/walk toggle" icon_state = "running" @@ -453,6 +456,12 @@ /obj/screen/healths/corgi icon = 'icons/mob/screen_corgi.dmi' +/obj/screen/healths/slime + icon = 'icons/mob/screen_slime.dmi' + icon_state = "slime_health0" + screen_loc = ui_slime_health + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + /obj/screen/healths/guardian name = "summoner health" icon = 'icons/mob/guardian.dmi' diff --git a/code/_onclick/hud/slime.dm b/code/_onclick/hud/slime.dm new file mode 100644 index 00000000000..9f5621b75ee --- /dev/null +++ b/code/_onclick/hud/slime.dm @@ -0,0 +1,18 @@ +/mob/living/carbon/slime/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/slime(src) + +/mob/living/simple_animal/slime/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/slime(src) + +/datum/hud/slime/New(mob/owner) + ..() + mymob.healths = new /obj/screen/healths/slime() + infodisplay += mymob.healths + + mymob.pullin = new /obj/screen/pull() + mymob.pullin.icon = 'icons/mob/screen_slime.dmi' + mymob.pullin.update_icon(mymob) + mymob.pullin.screen_loc = ui_construct_pull + hotkeybuttons += mymob.pullin 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 index fa46e50f779..f379deec72b 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -33,25 +33,22 @@ SUBSYSTEM_DEF(input) "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", - "F3" = "say", + "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+T" = ".say", "Ctrl+O" = "ooc", - "F3" = "say", ), "old_hotkeys" = list( "Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", "O" = "ooc", - "T" = "say", - "M" = "me", - "F3" = "say", + "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 \[\[*\]\]\"", @@ -118,6 +115,8 @@ SUBSYSTEM_DEF(input) /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/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/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/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/helper_datums/input.dm b/code/datums/helper_datums/input.dm index aa73b1e387f..4c3dc6a1cf4 100644 --- a/code/datums/helper_datums/input.dm +++ b/code/datums/helper_datums/input.dm @@ -100,15 +100,20 @@ height = 400 immediate_submit = TRUE +/datum/async_input/ranked/New() + ..() + popup.add_script("rankedInput.js", 'html/browser/rankedInput.js') + popup.add_head_content("Drag and drop or use the buttons to reorder") + /datum/async_input/ranked/render_choices() var/dat = "
" - dat += "" + dat += "
" for(var/i = 1, i <= choices.len, i++) var/choice = choices[i] dat += "" dat += "" dat += "" - dat += "" + dat += "" dat += "" dat += "
[button("+", i != 1 ? "upvote=[i]" : "", , i == 1)][button("-", i != choices.len ? "downvote=[i]" : "", , i == choices.len)][i]. [choice][i]. [choice]
" dat += "
" @@ -131,6 +136,15 @@ show() return + if(href_list["cut"] && href_list["insert"]) + var/cut = text2num(href_list["cut"]) + var/insert = text2num(href_list["insert"]) + var/choice = choices[cut] + choices.Cut(cut, cut + 1) + choices.Insert(insert, choice) + show() + return + ..() /datum/async_input/autocomplete diff --git a/code/datums/hud.dm b/code/datums/hud.dm index e5948a47e30..365a4309413 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -22,7 +22,8 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),\ ANTAG_HUD_DEVIL = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden()\ + ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()\ ) /datum/atom_hud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 266821db766..0ab0453cb95 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -42,6 +42,7 @@ var/list/kills = list() var/list/datum/objective/objectives = list() var/list/datum/objective/special_verbs = list() + var/list/targets = list() var/has_been_rev = 0//Tracks if this mind has been a rev or not diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index caec5fa8ea6..67e5438656e 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -12,6 +12,14 @@ Comes with a rustic wooden bar and suicidal bartender." suffix = "lavaland_biodome_beach.dmm" +/datum/map_template/ruin/lavaland/cube + name = "The Wishgranter Cube" + id = "wishgranter-cube" + description = "Nothing good can come from this. Learn from their mistakes and turn around." + suffix = "lavaland_surface_cube.dmm" + cost = 10 + allow_duplicates = FALSE + /datum/map_template/ruin/lavaland/seed_vault name = "Seed Vault" id = "seed-vault" @@ -38,6 +46,15 @@ datum/map_template/ruin/lavaland/ash_walker cost = 20 allow_duplicates = FALSE +/datum/map_template/ruin/lavaland/free_golem + name = "Free Golem Ship" + id = "golem-ship" + description = "Lumbering humanoids, made out of precious metals, move inside this ship. They frequently leave to mine more minerals, which they somehow turn into more of them. \ + Seem very intent on research and individual liberty, and also geology based naming?" + cost = 20 + suffix = "lavaland_surface_golem_ship.dmm" + allow_duplicates = FALSE + /datum/map_template/ruin/lavaland/animal_hospital name = "Animal Hospital" id = "animal-hospital" @@ -46,6 +63,49 @@ datum/map_template/ruin/lavaland/ash_walker suffix = "lavaland_surface_animal_hospital.dmm" allow_duplicates = FALSE +/datum/map_template/ruin/lavaland/sin + cost = 10 + allow_duplicates = FALSE + +/datum/map_template/ruin/lavaland/sin/envy + name = "Ruin of Envy" + id = "envy" + description = "When you get what they have, then you'll finally be happy." + suffix = "lavaland_surface_envy.dmm" + +/datum/map_template/ruin/lavaland/sin/gluttony + name = "Ruin of Gluttony" + id = "gluttony" + description = "If you eat enough, then eating will be all that you do." + suffix = "lavaland_surface_gluttony.dmm" + +/datum/map_template/ruin/lavaland/sin/greed + name = "Ruin of Greed" + id = "greed" + description = "Sure you don't need magical powers, but you WANT them, and that's what's important." + suffix = "lavaland_surface_greed.dmm" + +/datum/map_template/ruin/lavaland/sin/pride + name = "Ruin of Pride" + id = "pride" + description = "Wormhole lifebelts are for LOSERS, who you are better than." + suffix = "lavaland_surface_pride.dmm" + +/datum/map_template/ruin/lavaland/sin/sloth + name = "Ruin of Sloth" + id = "sloth" + description = "..." + suffix = "lavaland_surface_sloth.dmm" + cost = 0 + +/datum/map_template/ruin/lavaland/ratvar + name = "Dead God" + id = "ratvar" + description = "Ratvars final resting place." + suffix = "lavaland_surface_dead_ratvar.dmm" + cost = 0 + allow_duplicates = FALSE + /datum/map_template/ruin/lavaland/hierophant name = "Hierophant's Arena" id = "hierophant" @@ -70,6 +130,51 @@ datum/map_template/ruin/lavaland/ash_walker name = "Blood-Drunk Miner (Hunter)" suffix = "lavaland_surface_blooddrunk3.dmm" +/datum/map_template/ruin/lavaland/ufo_crash + name = "UFO Crash" + id = "ufo-crash" + description = "Turns out that keeping your abductees unconscious is really important. Who knew?" + suffix = "lavaland_surface_ufo_crash.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/xeno_nest + name = "Xenomorph Nest" + id = "xeno-nest" + description = "These xenomorphs got bored of horrifically slaughtering people on space stations, and have settled down on a nice lava filled hellscape to focus on what's really important in life. \ + Quality memes." + suffix = "lavaland_surface_xeno_nest.dmm" + cost = 20 + +/datum/map_template/ruin/lavaland/fountain + name = "Fountain Hall" + id = "fountain" + description = "The fountain has a warning on the side. DANGER: May have undeclared side effects that only become obvious when implemented." + suffix = "lavaland_surface_fountain_hall.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/survivalcapsule + name = "Survival Capsule Ruins" + id = "survivalcapsule" + description = "What was once sanctuary to the common miner, is now their tomb." + suffix = "lavaland_surface_survivalpod.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/pizza + name = "Ruined Pizza Party" + id = "pizza" + description = "Little Timmy's birthday pizza-bash took a turn for the worse when a bluespace anomaly passed by." + suffix = "lavaland_surface_pizzaparty.dmm" + allow_duplicates = FALSE + cost = 5 + +/datum/map_template/ruin/lavaland/cultaltar + name = "Summoning Ritual" + id = "cultaltar" + description = "A place of vile worship, the scrawling of blood in the middle glowing eerily. A demonic laugh echoes throughout the caverns" + suffix = "lavaland_surface_cultaltar.dmm" + allow_duplicates = FALSE + cost = 10 + /datum/map_template/ruin/lavaland/hermit name = "Makeshift Shelter" id = "hermitcave" @@ -84,4 +189,19 @@ datum/map_template/ruin/lavaland/ash_walker description = "A Syndicate shuttle had an unfortunate stowaway..." suffix = "lavaland_surface_swarmer_crash.dmm" allow_duplicates = FALSE - cost = 20 \ No newline at end of file + cost = 20 + +/datum/map_template/ruin/lavaland/miningripley + name = "Ripley" + id = "ripley" + description = "A heavily-damaged mining ripley, property of a very unfortunate miner. You might have to do a bit of work to fix this thing up." + suffix = "lavaland_surface_random_ripley.dmm" + allow_duplicates = FALSE + cost = 5 + +/datum/map_template/ruin/lavaland/puzzle + name = "Ancient Puzzle" + id = "puzzle" + description = "Mystery to be solved." + suffix = "lavaland_surface_puzzle.dmm" + cost = 5 \ No newline at end of file diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index df9e3f8f0ef..4c1fb437046 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1107,10 +1107,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 2 /datum/uplink_item/stealthy_tools/thermal - name = "Thermal Imaging Glasses" - desc = "These glasses are thermals disguised as engineers' optical meson scanners. They allow you to see organisms through walls by capturing the upper portion of the infra-red light spectrum, emitted as heat and light by objects. Hotter objects, such as warm bodies, cybernetic organisms and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks." + name = "Thermal Chameleon Glasses" + desc = "These glasses are thermals with Syndicate chameleon technology built into them. They allow you to see organisms through walls by capturing the upper portion of the infra-red light spectrum, emitted as heat and light by objects. Hotter objects, such as warm bodies, cybernetic organisms and artificial intelligence cores emit more of this light than cooler objects like walls and airlocks." reference = "THIG" - item = /obj/item/clothing/glasses/thermal/syndi + item = /obj/item/clothing/glasses/chameleon/thermal cost = 6 /datum/uplink_item/stealthy_tools/traitor_belt diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index 3c3906a25eb..3a70d05029e 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -95,7 +95,7 @@ receivers -= M garbled_receivers |= M for(var/mob/M in GLOB.dead_mob_list) - if(M.client && M.stat == DEAD) + if(M.client && M.stat == DEAD && !isnewplayer(M)) receivers |= M return list(receivers, garbled_receivers) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 91af56437cf..d5b4faef17c 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -50,6 +50,7 @@ var/list/ghostteleportlocs = list() icon_state = "start" requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + hide_attacklogs = TRUE /area/adminconstruction @@ -57,6 +58,7 @@ var/list/ghostteleportlocs = list() icon_state = "start" requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + hide_attacklogs = TRUE /area/space icon_state = "space" @@ -522,6 +524,7 @@ var/list/ghostteleportlocs = list() icon_state = "thunder" requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + hide_attacklogs = TRUE /area/tdome/arena_source @@ -1400,10 +1403,12 @@ var/list/ghostteleportlocs = list() name = "\improper Prison Wing" icon_state = "sec_prison_perma" fast_despawn = TRUE + can_get_auto_cryod = FALSE /area/security/prison name = "\improper Prison Wing" icon_state = "sec_prison" + can_get_auto_cryod = FALSE /area/security/prison/prison_break() for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) @@ -1432,14 +1437,17 @@ var/list/ghostteleportlocs = list() /area/security/execution name = "\improper Execution" icon_state = "execution" + can_get_auto_cryod = FALSE /area/security/processing name = "\improper Prisoner Processing" icon_state = "prisonerprocessing" + can_get_auto_cryod = FALSE /area/security/interrogation name = "\improper Interrogation" icon_state = "interrogation" + can_get_auto_cryod = FALSE /area/security/seceqstorage name = "\improper Security Equipment Storage" @@ -1456,6 +1464,7 @@ var/list/ghostteleportlocs = list() /area/security/interrogationobs name = "\improper Interrogation Observation" icon_state = "security" + can_get_auto_cryod = FALSE /area/security/evidence name = "\improper Evidence Room" @@ -1464,6 +1473,7 @@ var/list/ghostteleportlocs = list() /area/security/prisonlockers name = "\improper Prisoner Lockers" icon_state = "sec_prison_lockers" + can_get_auto_cryod = FALSE /area/security/medbay name = "\improper Security Medbay" @@ -1472,6 +1482,7 @@ var/list/ghostteleportlocs = list() /area/security/prisonershuttle name = "\improper Security Prisoner Shuttle" icon_state = "security" + can_get_auto_cryod = FALSE /area/security/warden name = "\improper Warden's Office" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 638fe29ab6d..2e7448ec5c8 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -33,7 +33,7 @@ var/static_equip var/static_light = FALSE var/static_environ - + var/has_gravity = TRUE var/list/apc = list() var/no_air = null @@ -64,6 +64,8 @@ 'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg') var/fast_despawn = FALSE + var/can_get_auto_cryod = TRUE + var/hide_attacklogs = FALSE // For areas such as thunderdome, lavaland syndiebase, etc which generate a lot of spammy attacklogs. Reduces log priority. /area/Initialize(mapload) GLOB.all_areas += src diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 450470c8c61..d72c6cc0406 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -16,7 +16,7 @@ icon_state = "dk_yellow" /area/ruin/powered/golem_ship - name = "Free Golem Ship" + name = "Free Golem Landing" icon_state = "dk_yellow" /area/ruin/powered/greed @@ -37,6 +37,7 @@ icon_state = "dk_yellow" ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg') report_alerts = FALSE + hide_attacklogs = TRUE /area/ruin/unpowered/syndicate_lava_base/engineering name = "Syndicate Lavaland Engineering" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c52df8c7912..757f036c691 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -361,7 +361,7 @@ fingerprintshidden += text("\[[time_stamp()]\] (Wearing gloves). Real name: [], Key: []",H.real_name, H.key) fingerprintslast = H.ckey return 0 - if(!( fingerprints )) + if(!fingerprints) if(fingerprintslast != H.ckey) //Add the list if it does not exist. if(!fingerprintshidden) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 486b553bb8e..1a23dc71070 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -219,7 +219,7 @@ // Previously known as HasEntered() // This is automatically called when something enters your square -/atom/movable/Crossed(atom/movable/AM) +/atom/movable/Crossed(atom/movable/AM, oldloc) SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM) /atom/movable/Bump(atom/A, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump(). @@ -245,7 +245,9 @@ if(destination) destination.Entered(src) for(var/atom/movable/AM in destination) - AM.Crossed(src) + if(AM == src) + continue + AM.Crossed(src, old_loc) var/turf/oldturf = get_turf(old_loc) var/turf/destturf = get_turf(destination) var/old_z = (oldturf ? oldturf.z : null) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 061d8ef91e7..c0d977d0ee9 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -437,4 +437,18 @@ var/global/list/bad_blocks[0] var/datum/species/S = data["species"] species = new S b_type = data["b_type"] - real_name = data["real_name"] \ No newline at end of file + real_name = data["real_name"] + +/datum/dna/proc/transfer_identity(mob/living/carbon/human/destination) + if(!istype(destination)) + return + + // We manually set the species to ensure all proper species change procs are called. + destination.set_species(species.type, retain_damage = TRUE) + var/datum/dna/new_dna = Clone() + new_dna.species = destination.dna.species + destination.dna = new_dna + destination.dna.species.handle_dna(destination) // Handle DNA has to be re-called as the DNA was changed. + + destination.UpdateAppearance() + domutcheck(destination, null, MUTCHK_FORCED) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 30934a07214..df61106c4ab 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -14,7 +14,6 @@ var/list/blob_nodes = list() required_enemies = 1 recommended_enemies = 1 restricted_jobs = list("Cyborg", "AI") - free_golems_disabled = TRUE var/declared = 0 var/burst = 0 @@ -43,9 +42,11 @@ var/list/blob_nodes = list() for(var/j = 0, j < cores_to_spawn, j++) if(!possible_blobs.len) break + var/datum/mind/blob = pick(possible_blobs) infected_crew += blob blob.special_role = SPECIAL_ROLE_BLOB + update_blob_icons_added(blob) blob.restricted_roles = restricted_jobs log_game("[key_name(blob)] has been selected as a Blob") possible_blobs -= blob @@ -67,8 +68,11 @@ var/list/blob_nodes = list() var/datum/mind/blobmind = blob.mind if(!istype(blobmind)) return 0 + infected_crew += blobmind blobmind.special_role = SPECIAL_ROLE_BLOB + update_blob_icons_added(blobmind) + log_game("[key_name(blob)] has been selected as a Blob") greet_blob(blobmind) to_chat(blob, "You feel very tired and bloated! You don't have long before you burst!") @@ -186,16 +190,21 @@ var/list/blob_nodes = list() return ..() /datum/game_mode/blob/proc/stage(var/stage) - switch(stage) if(0) send_intercept(1) declared = 1 - if(1) event_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg') - if(2) send_intercept(2) - return +/datum/game_mode/proc/update_blob_icons_added(datum/mind/mob_mind) + var/datum/atom_hud/antag/antaghud = huds[ANTAG_HUD_BLOB] + antaghud.join_hud(mob_mind.current) + set_antag_hud(mob_mind.current, "hudblob") + +/datum/game_mode/proc/update_blob_icons_removed(datum/mind/mob_mind) + var/datum/atom_hud/antag/antaghud = huds[ANTAG_HUD_BLOB] + antaghud.leave_hud(mob_mind.current) + set_antag_hud(mob_mind.current, null) \ No newline at end of file diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 2743277edb7..d6d4a91cf19 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -25,7 +25,8 @@ if(blob_nodes.len) var/list/nodes = list() for(var/i = 1; i <= blob_nodes.len; i++) - nodes["Blob Node #[i]"] = blob_nodes[i] + var/obj/structure/blob/node/B = blob_nodes[i] + nodes["Blob Node #[i] ([get_location_name(B)])"] = B var/node_name = input(src, "Choose a node to jump to.", "Node Jump") in nodes var/obj/structure/blob/node/chosen_node = nodes[node_name] if(chosen_node) @@ -388,7 +389,7 @@ set name = "Blob Broadcast" set desc = "Speak with your blob spores and blobbernauts as your mouthpieces. This action is free." - var/speak_text = input(usr, "What would you like to say with your minions?", "Blob Broadcast", null) as text + var/speak_text = clean_input("What would you like to say with your minions?", "Blob Broadcast", null) if(!speak_text) return diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index bf56d1687c5..ed06ec4086d 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -142,7 +142,7 @@ take_damage(Proj.damage, Proj.damage_type) return 0 -/obj/structure/blob/Crossed(var/mob/living/L) +/obj/structure/blob/Crossed(var/mob/living/L, oldloc) ..() L.blob_act(src) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 90ab53dfde2..021eb7461f5 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -43,7 +43,6 @@ var/global/list/all_cults = list() required_players = 30 required_enemies = 3 recommended_enemies = 4 - free_golems_disabled = TRUE var/datum/mind/sacrifice_target = null var/finished = 0 diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index e93556ca843..2586c63bc91 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -42,7 +42,7 @@ for(var/mob/M in GLOB.player_list) if(iscultist(M)) to_chat(M, my_message) - else if(M in GLOB.dead_mob_list) + else if((M in GLOB.dead_mob_list) && !isnewplayer(M)) to_chat(M, " (F) [my_message] ") log_say("(CULT) [message]", user) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index c2dd811d640..c6a6a3b7490 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -271,7 +271,7 @@ var/list/blacklisted_pylon_turfs = typecacheof(list( return return -/obj/effect/gateway/Crossed(AM as mob|obj) +/obj/effect/gateway/Crossed(AM as mob|obj, oldloc) spawn(0) return return diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index ef2a970adb3..ad073b4bf54 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -494,9 +494,8 @@ var/list/teleport_runes = list() /obj/effect/rune/narsie/New() ..() - cultist_name = "Summon [SSticker.cultdat.entity_name]" - cultist_desc = "tears apart dimensional barriers, calling forth [SSticker.cultdat.entity_title3]. Requires 9 invokers." - + cultist_name = "Summon [SSticker.cultdat ? SSticker.cultdat.entity_name : "your god"]" + cultist_desc = "tears apart dimensional barriers, calling forth [SSticker.cultdat ? SSticker.cultdat.entity_title3 : "your god"]. Requires 9 invokers." /obj/effect/rune/narsie/check_icon() return diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 92fc09490ec..08633ef92f4 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -1,4 +1,5 @@ /obj/item/paper/talisman + icon = 'icons/obj/paper.dmi' icon_state = "paper_talisman" var/cultist_name = "talisman" var/cultist_desc = "A basic talisman. It serves no purpose." @@ -7,6 +8,9 @@ var/uses = 1 var/health_cost = 0 //The amount of health taken from the user when invoking the talisman +/obj/item/paper/talisman/update_icon()//overriding this so the update_icon doesn't turn them into normal looking paper + SEND_SIGNAL(src, COMSIG_OBJ_UPDATE_ICON) + /obj/item/paper/talisman/examine(mob/user) if(iscultist(user) || user.stat == DEAD) to_chat(user, "Name: [cultist_name]") @@ -49,6 +53,7 @@ //Supply Talisman: Has a few unique effects. Granted only to starter cultists. /obj/item/paper/talisman/supply cultist_name = "Supply Talisman" + icon_state = "supply" cultist_desc = "A multi-use talisman that can create various objects. Intended to increase the cult's strength early on." invocation = null uses = 3 @@ -117,6 +122,7 @@ //Rite of Translocation: Same as rune /obj/item/paper/talisman/teleport cultist_name = "Talisman of Teleportation" + icon_state = "teleport" cultist_desc = "A single-use talisman that will teleport a user to a random rune of the same keyword." invocation = "Sas'so c'arta forbici!" health_cost = 5 @@ -159,6 +165,7 @@ /obj/item/paper/talisman/summon_tome cultist_name = "Talisman of Tome Summoning" + icon_state = "tome" cultist_desc = "A one-use talisman that will call an untranslated tome from the archives of a cult." invocation = "N'ath reth sh'yro eth d'raggathnor!" health_cost = 1 @@ -173,6 +180,7 @@ /obj/item/paper/talisman/true_sight cultist_name = "Talisman of Veiling" + icon_state = "veil" cultist_desc = "A multi-use talisman that hides nearby runes. On its second use, will reveal nearby runes." invocation = "Kla'atu barada nikt'o!" health_cost = 1 @@ -197,6 +205,7 @@ //Rite of False Truths: Same as rune /obj/item/paper/talisman/make_runes_fake cultist_name = "Talisman of Disguising" + icon_state = "disguising" cultist_desc = "A talisman that will make nearby runes appear fake." invocation = "By'o nar'nar!" @@ -212,6 +221,7 @@ //Rite of Disruption: Weaker than rune /obj/item/paper/talisman/emp cultist_name = "Talisman of Electromagnetic Pulse" + icon_state = "emp" cultist_desc = "A talisman that will cause a moderately-sized electromagnetic pulse." invocation = "Ta'gh fara'qha fel d'amar det!" health_cost = 5 @@ -226,6 +236,7 @@ //Rite of Disorientation: Stuns and inhibit speech on a single target for quite some time /obj/item/paper/talisman/stun cultist_name = "Talisman of Stunning" + icon_state = "stunning" cultist_desc = "A talisman that will stun and inhibit speech on a single target. To use, attack target directly." invocation = "Dream sign:Evil sealing talisman!" health_cost = 10 @@ -271,6 +282,7 @@ //Rite of Arming: Equips cultist armor on the user, where available /obj/item/paper/talisman/armor cultist_name = "Talisman of Arming" + icon_state = "arming" cultist_desc = "A talisman that will equip the invoker with cultist equipment if there is a slot to equip it to." invocation = "N'ath reth sh'yro eth draggathnor!" @@ -301,6 +313,7 @@ //Talisman of Horrors: Breaks the mind of the victim with nightmarish hallucinations /obj/item/paper/talisman/horror cultist_name = "Talisman of Horrors" + icon_state = "horror" cultist_desc = "A talisman that will break the mind of the victim with nightmarish hallucinations." invocation = "Lo'Nab Na'Dm!" @@ -316,6 +329,7 @@ //Talisman of Fabrication: Creates a construct shell out of 25 metal sheets. /obj/item/paper/talisman/construction cultist_name = "Talisman of Construction" + icon_state = "construction" cultist_desc = "Use this talisman on at least twenty-five metal sheets to create an empty construct shell or on plasteel to make runed metal" invocation = "Ethra p'ni dedol!" uses = 25 @@ -360,6 +374,7 @@ //Talisman of Shackling: Applies special cuffs directly from the talisman /obj/item/paper/talisman/shackle cultist_name = "Talisman of Shackling" + icon_state = "shackling" cultist_desc = "Use this talisman on a victim to handcuff them with dark bindings." invocation = "In'totum Lig'abis!" uses = 4 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index e344c2b2029..aa366415f31 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -27,7 +27,6 @@ var/recommended_enemies = 0 var/newscaster_announcements = null var/ert_disabled = 0 - var/free_golems_disabled = FALSE var/uplink_welcome = "Syndicate Uplink Console:" var/uplink_uses = 20 @@ -81,7 +80,6 @@ // feedback_set_details("revision","[revdata.revision]") feedback_set_details("server_ip","[world.internet_address]:[world.port]") generate_station_goals() - check_free_golems() start_state = new /datum/station_state() start_state.count() return 1 @@ -513,12 +511,6 @@ proc/display_roundstart_logout_report() var/datum/station_goal/G = V G.print_result() -/datum/game_mode/proc/check_free_golems() //check config and gamemode for free golems setting and run the prob to check if the round will have free golems spawned or not - if((config.unrestricted_free_golems || !free_golems_disabled) && prob(config.prob_free_golems)) - for(var/obj/effect/landmark/free_golem_spawn/L in GLOB.landmarks_list) - if(isturf(L.loc)) - new /obj/effect/mob_spawn/human/golem/adamantine(L.loc) - /datum/game_mode/proc/update_eventmisc_icons_added(datum/mind/mob_mind) var/datum/atom_hud/antag/antaghud = huds[ANTAG_HUD_EVENTMISC] antaghud.join_hud(mob_mind.current) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index e73474bad7d..fb3c10e25ec 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -545,7 +545,7 @@ light_color = LIGHT_COLOR_CYAN health = 10 -/obj/structure/swarmer/trap/Crossed(var/atom/movable/AM) +/obj/structure/swarmer/trap/Crossed(var/atom/movable/AM, oldloc) if(isliving(AM)) var/mob/living/L = AM if(!istype(L, /mob/living/simple_animal/hostile/swarmer)) diff --git a/code/game/gamemodes/miniantags/guardian/types/fire.dm b/code/game/gamemodes/miniantags/guardian/types/fire.dm index 58f4873e800..0c5052f48bd 100644 --- a/code/game/gamemodes/miniantags/guardian/types/fire.dm +++ b/code/game/gamemodes/miniantags/guardian/types/fire.dm @@ -42,7 +42,7 @@ do_teleport(M, M, 10) new /obj/effect/temp_visual/guardian/phase/out(get_turf(M)) -/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj) +/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj, oldloc) ..() collision_ignite(AM) diff --git a/code/game/gamemodes/miniantags/guardian/types/ranged.dm b/code/game/gamemodes/miniantags/guardian/types/ranged.dm index 3e57a059d10..fe8a566ad52 100644 --- a/code/game/gamemodes/miniantags/guardian/types/ranged.dm +++ b/code/game/gamemodes/miniantags/guardian/types/ranged.dm @@ -103,7 +103,7 @@ invisibility = 1 -/obj/item/effect/snare/Crossed(AM as mob|obj) +/obj/item/effect/snare/Crossed(AM as mob|obj, oldloc) if(isliving(AM)) var/turf/snare_loc = get_turf(loc) if(spawner) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 4e9d507c9ea..cf808f3709d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -12,7 +12,6 @@ proc/issyndicate(mob/living/M as mob) required_players = 30 // 30 players - 5 players to be the nuke ops = 25 players remaining required_enemies = 5 recommended_enemies = 5 - free_golems_disabled = TRUE var/const/agents_possible = 5 //If we ever need more syndicate agents. diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index bfc30780b81..07ee2219157 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -165,10 +165,13 @@ var/targetitem = input("Select item to search for.", "Item Mode Select","") as null|anything in item_names if(!targetitem) return - var/list/obj/item/target_candidates = get_all_of_type(item_paths[targetitem], subtypes = TRUE) - for(var/obj/item/candidate in target_candidates) - if(!is_admin_level(candidate.loc.z)) - target = candidate + + var/list/target_candidates = get_all_of_type(item_paths[targetitem], subtypes = TRUE) + for(var/obj/item/candidate in target_candidates) + if(!is_admin_level((get_turf(candidate)).z)) + target = candidate + break + if(!target) to_chat(usr, "Failed to locate [targetitem]!") return diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 2d1b55c5b99..836c51d5a2c 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -25,6 +25,8 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu /datum/objective/proc/is_invalid_target(datum/mind/possible_target) if(possible_target == owner) return TARGET_INVALID_IS_OWNER + if(possible_target in owner.targets) + return TARGET_INVALID_IS_TARGET if(!ishuman(possible_target.current)) return TARGET_INVALID_NOT_HUMAN if(!possible_target.current.stat == DEAD) @@ -52,7 +54,6 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu if(possible_targets.len > 0) target = pick(possible_targets) - /datum/objective/assassinate martyr_compatible = 1 @@ -361,9 +362,12 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu var/datum/theft_objective/O = new thefttype if(owner.assigned_role in O.protected_jobs) continue + if(O in owner.targets) + continue if(O.flags & 2) continue - steal_target=O + steal_target = O + explanation_text = "Steal [steal_target]. One was last seen in [get_location()]. " if(islist(O.protected_jobs) && O.protected_jobs.len) explanation_text += "It may also be in the possession of the [jointext(O.protected_jobs, ", ")]." diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index c2855f5c338..3edf5b14e58 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -87,6 +87,7 @@ yandere_one.owner = traitor traitor.objectives += yandere_one yandere_one.find_target() + traitor.targets += yandere_one.target objective_count++ var/datum/objective/maroon/yandere_two = new yandere_two.owner = traitor @@ -99,6 +100,7 @@ kill_objective.owner = traitor kill_objective.find_target() traitor.objectives += kill_objective + traitor.targets += kill_objective.target var/datum/objective/survive/survive_objective = new survive_objective.owner = traitor @@ -124,26 +126,31 @@ destroy_objective.owner = traitor destroy_objective.find_target() traitor.objectives += destroy_objective + traitor.targets += destroy_objective.target else if(prob(5)) var/datum/objective/debrain/debrain_objective = new debrain_objective.owner = traitor debrain_objective.find_target() traitor.objectives += debrain_objective + traitor.targets += debrain_objective.target else if(prob(30)) var/datum/objective/maroon/maroon_objective = new maroon_objective.owner = traitor maroon_objective.find_target() traitor.objectives += maroon_objective + traitor.targets += maroon_objective.target else var/datum/objective/assassinate/kill_objective = new kill_objective.owner = traitor kill_objective.find_target() traitor.objectives += kill_objective + traitor.targets += kill_objective.target else var/datum/objective/steal/steal_objective = new steal_objective.owner = traitor steal_objective.find_target() traitor.objectives += steal_objective + traitor.targets += steal_objective.steal_target if(is_hijacker && objective_count <= config.traitor_objectives_amount) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount if(!(locate(/datum/objective/hijack) in traitor.objectives)) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 5eb4b3f0242..7e1a375f15d 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -261,8 +261,10 @@ for(var/mob/living/carbon/C in hearers(4)) if(C == user) continue - if(ishuman(C) && (C:l_ear || C:r_ear) && istype((C:l_ear || C:r_ear), /obj/item/clothing/ears/earmuffs)) - continue + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs)) + continue if(!affects(C)) continue to_chat(C, "You hear a ear piercing shriek and your senses dull!") @@ -347,8 +349,16 @@ SSticker.mode.vampire_enthralled.Add(H.mind) SSticker.mode.vampire_enthralled[H.mind] = user.mind H.mind.special_role = SPECIAL_ROLE_VAMPIRE_THRALL - to_chat(H, "You have been Enthralled by [user]. Follow [user.p_their()] every command.") + + var/datum/objective/protect/serve_objective = new + serve_objective.owner = user.mind + serve_objective.target = H.mind + serve_objective.explanation_text = "You have been Enthralled by [user]. Follow [user.p_their()] every command." + H.mind.objectives += serve_objective + + to_chat(H, "You have been Enthralled by [user]. Follow [user.p_their()] every command.") to_chat(user, "You have successfully Enthralled [H]. If [H.p_they()] refuse[H.p_s()] to do as you say just adminhelp.") + H.Stun(2) add_attack_logs(user, H, "Vampire-thralled") diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 7d941a41bde..6f96d4c22e2 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -906,3 +906,13 @@ spellname = "sacred flame" icon_state ="booksacredflame" desc = "Become one with the flames that burn within... and invite others to do so as well." + +/obj/item/spellbook/oneuse/random + icon_state = "random_book" + +/obj/item/spellbook/oneuse/random/initialize() + . = ..() + var/static/banned_spells = list(/obj/item/spellbook/oneuse/mime, /obj/item/spellbook/oneuse/mime/fingergun, /obj/item/spellbook/oneuse/mime/fingergun/fake, /obj/item/spellbook/oneuse/mime/greaterwall) + var/real_type = pick(subtypesof(/obj/item/spellbook/oneuse) - banned_spells) + new real_type(loc) + qdel(src) \ No newline at end of file diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 0f21c006f8d..131afd84fff 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -7,8 +7,8 @@ required_players = 20 required_enemies = 1 recommended_enemies = 1 - free_golems_disabled = TRUE var/use_huds = 1 + var/finished = 0 var/but_wait_theres_more = 0 diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 394fe3d0908..a31f694f7fc 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -601,28 +601,29 @@ proc/get_all_job_icons() //For all existing HUD icons return GLOB.joblist + list("Prisoner") /obj/proc/GetJobName() //Used in secHUD icon generation - var/obj/item/card/id/I + var/assignmentName = "Unknown" + var/rankName = "Unknown" if(istype(src, /obj/item/pda)) var/obj/item/pda/P = src - I = P.id + assignmentName = P.ownjob + rankName = P.ownrank else if(istype(src, /obj/item/card/id)) - I = src + var/obj/item/card/id/I = src + assignmentName = I.assignment + rankName = I.rank + - if(I) - var/job_icons = get_all_job_icons() - var/centcom = get_all_centcom_jobs() + var/job_icons = get_all_job_icons() + var/centcom = get_all_centcom_jobs() - if(I.assignment in centcom) //Return with the NT logo if it is a Centcom job - return "Centcom" - if(I.rank in centcom) - return "Centcom" - - if(I.assignment in job_icons) //Check if the job has a hud icon - return I.assignment - if(I.rank in job_icons) - return I.rank - - else - return + if(assignmentName in centcom) //Return with the NT logo if it is a Centcom job + return "Centcom" + if(rankName in centcom) + return "Centcom" + if(assignmentName in job_icons) //Check if the job has a hud icon + return assignmentName + if(rankName in job_icons) + return rankName + return "Unknown" //Return unknown if none of the above apply diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 10db762c9f2..22c2d47e3b9 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -193,7 +193,38 @@ backpack = /obj/item/storage/backpack/explorer satchel = /obj/item/storage/backpack/explorer +/datum/outfit/job/mining/equipped + name = "Shaft Miner" + suit = /obj/item/clothing/suit/hooded/explorer + mask = /obj/item/clothing/mask/gas/explorer + glasses = /obj/item/clothing/glasses/meson + suit_store = /obj/item/tank/emergency_oxygen + internals_slot = slot_s_store + backpack_contents = list( + /obj/item/flashlight/seclite=1,\ + /obj/item/kitchen/knife/combat/survival=1, + /obj/item/mining_voucher=1, + /obj/item/t_scanner/adv_mining_scanner/lesser=1, + /obj/item/gun/energy/kinetic_accelerator=1,\ + /obj/item/stack/marker_beacon/ten=1 + ) + + backpack = /obj/item/storage/backpack/explorer + satchel = /obj/item/storage/backpack/explorer + +/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + if(istype(H.wear_suit, /obj/item/clothing/suit/hooded)) + var/obj/item/clothing/suit/hooded/S = H.wear_suit + S.ToggleHood() + +/datum/outfit/job/miner/equipped/hardsuit + name = "Shaft Miner (Equipment + Hardsuit)" + suit = /obj/item/clothing/suit/space/hardsuit/mining + mask = /obj/item/clothing/mask/breath //Griff //BS12 EDIT diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 2ee1e93683d..af73a13f27c 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -99,7 +99,7 @@ icon_state = "table2-idle" return 0 -/obj/machinery/optable/Crossed(atom/movable/AM) +/obj/machinery/optable/Crossed(atom/movable/AM, oldloc) . = ..() if(iscarbon(AM) && LAZYLEN(injected_reagents)) to_chat(AM, "You feel a series of tiny pricks!") diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index d262b523808..1d0b8dde152 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -357,7 +357,7 @@ return O:id_tag in sensors /obj/machinery/computer/general_air_control/linkWith(mob/user, obj/O, link/context) - sensors[O:id_tag] = reject_bad_name(input(user, "Choose a sensor label:", "Sensor Label") as text|null, allow_numbers=1) + sensors[O:id_tag] = reject_bad_name(clean_input(user, "Choose a sensor label:", "Sensor Label"), allow_numbers=1) return 1 /obj/machinery/computer/general_air_control/large_tank_control diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index d404db8ae0a..a34a49ca051 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -334,9 +334,6 @@ /obj/item/circuitboard/white_ship name = "circuit Board (White Ship)" build_path = /obj/machinery/computer/shuttle/white_ship -/obj/item/circuitboard/golem_ship - name = "circuit Board (Golem Ship)" - build_path = /obj/machinery/computer/shuttle/golem_ship /obj/item/circuitboard/shuttle/syndicate name = "circuit board (Syndicate Shuttle)" build_path = /obj/machinery/computer/shuttle/syndicate @@ -346,7 +343,9 @@ /obj/item/circuitboard/shuttle/syndicate/drop_pod name = "circuit board (Syndicate Drop Pod)" build_path = /obj/machinery/computer/shuttle/syndicate/drop_pod - +/obj/item/circuitboard/shuttle/golem_ship + name = "circuit Board (Golem Ship)" + build_path = /obj/machinery/computer/shuttle/golem_ship /obj/item/circuitboard/HolodeckControl name = "Circuit board (Holodeck Control)" diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index d064dbda743..be27b0600cf 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -156,7 +156,7 @@ message_cooldown = 0 if("callshuttle") - var/input = input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + var/input = clean_input("Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") if(!input || ..() || !is_authenticated(usr)) SSnanoui.update_uis(src) return @@ -217,11 +217,11 @@ setMenuState(usr,COMM_SCREEN_STAT) if("setmsg1") - stat_msg1 = input("Line 1", "Enter Message Text", stat_msg1) as text|null + stat_msg1 = clean_input("Line 1", "Enter Message Text", stat_msg1) setMenuState(usr,COMM_SCREEN_STAT) if("setmsg2") - stat_msg2 = input("Line 2", "Enter Message Text", stat_msg2) as text|null + stat_msg2 = clean_input("Line 2", "Enter Message Text", stat_msg2) setMenuState(usr,COMM_SCREEN_STAT) if("nukerequest") diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index fb09b40f440..dbe766a2c44 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -466,7 +466,7 @@ active2.fields["comments"] -= active2.fields["comments"][index] if(href_list["search"]) - var/t1 = input("Search String: (Name, DNA, or ID)", "Med. records", null, null) as text + var/t1 = clean_input("Search String: (Name, DNA, or ID)", "Med. records", null, null) if(!t1 || ..()) return 1 active1 = null diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 87d35c2d7b4..d6e000d660d 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -281,7 +281,7 @@ auth = 0 screen = 0 else - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + var/dkey = trim(clean_input("Please enter the decryption key.")) if(dkey && dkey != "") if(src.linkedServer.decryptkey == dkey) auth = 1 @@ -332,7 +332,7 @@ message = noserver else if(auth) - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + var/dkey = trim(clean_input("Please enter the decryption key.")) if(dkey && dkey != "") if(src.linkedServer.decryptkey == dkey) var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) @@ -395,7 +395,7 @@ //Select Your Name if("Sender") - customsender = input(usr, "Please enter the sender's name.") as text|null + customsender = clean_input("Please enter the sender's name.") //Select Receiver if("Recepient") @@ -414,11 +414,11 @@ //Enter custom job if("RecJob") - customjob = input(usr, "Please enter the sender's job.") as text|null + customjob = clean_input("Please enter the sender's job.") //Enter message if("Message") - custommessage = input(usr, "Please enter your message.") as text|null + custommessage = clean_input("Please enter your message.") custommessage = sanitize(copytext(custommessage, 1, MAX_MESSAGE_LEN)) //Send message diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index c0c8c2d349e..bed10bb0923 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -398,7 +398,7 @@ switch(href_list["field"]) if("name") if(istype(active1, /datum/data/record)) - var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text) + var/t1 = reject_bad_name(clean_input("Please input name:", "Secure. records", active1.fields["name"], null)) if(!t1 || !length(trim(t1)) || ..() || active1 != a1) return 1 active1.fields["name"] = t1 diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index ac10eb6e22d..5647ae73766 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -245,7 +245,7 @@ switch(href_list["field"]) if("name") if(istype(active1, /datum/data/record)) - var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text) + var/t1 = reject_bad_name(clean_input("Please input name:", "Secure. records", active1.fields["name"], null)) if(!t1 || !length(trim(t1)) || incapable || active1 != a1) return 1 active1.fields["name"] = t1 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index cf580edd5ea..17b6f9e55c8 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -311,6 +311,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/update_icon(state=0, override=0) if(operating && !override) return + check_unres() icon_state = density ? "closed" : "open" switch(state) if(0) @@ -333,7 +334,6 @@ About the new airlock wires panel: var/image/sparks_overlay var/image/note_overlay var/notetype = note_type() - switch(state) if(AIRLOCK_CLOSED) frame_overlay = get_airlock_overlay("closed", icon) @@ -621,6 +621,31 @@ About the new airlock wires panel: if(user) attack_ai(user) +/obj/machinery/door/airlock/proc/check_unres() //unrestricted sides. This overlay indicates which directions the player can access even without an ID + if(hasPower() && unres_sides) + if(unres_sides & NORTH) + var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_n") //layer=src.layer+1 + I.pixel_y = 32 + set_light(l_range = 1, l_power = 1, l_color = "#00FF00") + add_overlay(I) + if(unres_sides & SOUTH) + var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_s") //layer=src.layer+1 + I.pixel_y = -32 + set_light(l_range = 1, l_power = 1, l_color = "#00FF00") + add_overlay(I) + if(unres_sides & EAST) + var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_e") //layer=src.layer+1 + I.pixel_x = 32 + set_light(l_range = 1, l_power = 1, l_color = "#00FF00") + add_overlay(I) + if(unres_sides & WEST) + var/image/I = image(icon='icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_w") //layer=src.layer+1 + I.pixel_x = -32 + set_light(l_range = 1, l_power = 1, l_color = "#00FF00") + add_overlay(I) + else + set_light(0) + /obj/machinery/door/airlock/CanPass(atom/movable/mover, turf/target, height=0) if(isElectrified() && density && istype(mover, /obj/item)) var/obj/item/I = mover diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index df63da64f2b..01d90795a87 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -11,6 +11,8 @@ var/list/conf_access = null var/one_access = 0 //if set to 1, door would receive req_one_access instead of req_access var/const/max_brain_damage = 60 // Maximum brain damage a mob can have until it can't use the electronics + var/unres_sides = 0 + var/unres_direction = null /obj/item/airlock_electronics/attack_self(mob/user) if(!ishuman(user) && !isrobot(user)) @@ -23,14 +25,22 @@ return var/t1 = text("Access control
\n") + t1 += "
" + t1 += " Unrestricted Access Settings
" + var/list/Directions = list("North","South",,"East",,,,"West") + for(var/direction in cardinal) + if (unres_direction && unres_direction == direction) + t1 += "[Directions[direction]]
" + else + t1 += "[Directions[direction]]
" + + t1 += "
" t1 += "Access requirement is set to " t1 += one_access ? "ONE
" : "ALL
" t1 += conf_access == null ? "All
" : "All
" - t1 += "
" - var/list/accesses = get_all_accesses() for(var/acc in accesses) var/aname = get_access_desc(acc) @@ -64,6 +74,14 @@ if(href_list["access"]) toggle_access(href_list["access"]) + + if(href_list["unres_direction"]) + unres_direction = text2num(href_list["unres_direction"]) + if (unres_sides == unres_direction) + unres_sides = 0 + unres_direction = null + else + unres_sides = unres_direction attack_self(usr) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 0dd301d5542..fdfaae71477 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -28,7 +28,7 @@ var/real_explosion_block //ignore this, just use explosion_block var/heat_proof = FALSE // For rglass-windowed airlocks and firedoors var/emergency = FALSE - + var/unres_sides = 0 //Unrestricted sides. A bitflag for which direction (if any) can open the door with no access //Multi-tile doors var/width = 1 @@ -55,6 +55,10 @@ ..() update_dir() +/obj/machinery/door/power_change() + ..() + update_icon() + /obj/machinery/door/proc/update_dir() if(width > 1) if(dir in list(EAST, WEST)) @@ -175,10 +179,15 @@ /obj/machinery/door/allowed(mob/M) if(emergency) return TRUE + if(unrestricted_side(M)) + return TRUE if(!requiresID()) return FALSE // Intentional. machinery/door/requiresID() always == 1. airlocks, however, == 0 if ID scan is disabled. Yes, this var is poorly named. return ..() +/obj/machinery/door/proc/unrestricted_side(mob/M) //Allows for specific side of airlocks to be unrestrected (IE, can exit maint freely, but need access to enter) + return get_dir(src, M) & unres_sides + /obj/machinery/door/proc/try_to_weld(obj/item/weldingtool/W, mob/user) return diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 5209003fc59..b1a6f96e2eb 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -76,6 +76,21 @@ name = "Airlock Controller" tag_secure = 1 +/obj/machinery/embedded_controller/radio/airlock/airlock_controller/Initialize(mapload, given_id_tag, given_frequency, given_tag_exterior_door, given_tag_interior_door, given_tag_airpump, given_tag_chamber_sensor) + if(given_id_tag) + id_tag = given_id_tag + if(given_frequency) + set_frequency(given_frequency) + if(given_tag_exterior_door) + tag_exterior_door = given_tag_exterior_door + if(given_tag_interior_door) + tag_interior_door = given_tag_interior_door + if(given_tag_airpump) + tag_airpump = given_tag_airpump + if(given_tag_chamber_sensor) + tag_chamber_sensor = given_tag_chamber_sensor + ..() + /obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) @@ -129,7 +144,6 @@ name = "Access Controller" tag_secure = 1 - /obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon() if(on && program) if(program.memory["processing"]) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2bc9196740e..f8305e0fb7d 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -553,9 +553,7 @@ Class Procs: threatcount += 2 if(check_records || check_arrest) - var/perpname = perp.name - if(id) - perpname = id.registered_name + var/perpname = perp.get_visible_name(TRUE) var/datum/data/record/R = find_security_record("name", perpname) if(check_records && !R) diff --git a/code/game/machinery/telecomms/ntsl2.dm b/code/game/machinery/telecomms/ntsl2.dm index 04f85750516..a5c4f3f1464 100644 --- a/code/game/machinery/telecomms/ntsl2.dm +++ b/code/game/machinery/telecomms/ntsl2.dm @@ -409,10 +409,10 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) // if(href_list["table"] && href_list["table"] in tables) // if(requires_unlock[href_list["table"]] && !source.unlocked) // return - // var/new_key = input(user, "Provide a key for the new row.", "New Row") as text|null + // var/new_key = clean_input(user, "Provide a key for the new row.", "New Row") // if(!new_key) // return - // var/new_value = input(user, "Provide a new value for the key [new_key]", "New Row") as text|null + // var/new_value = clean_input(user, "Provide a new value for the key [new_key]", "New Row") // if(new_value == null) // return // if(word_blacklist.Find(new_value)) //uh oh, they tried to be naughty @@ -439,7 +439,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) if(href_list["array"] && href_list["array"] in arrays) if(requires_unlock[href_list["array"]] && !source.unlocked) return - var/new_value = input(user, "Provide a value for the new index.", "New Index") as text|null + var/new_value = clean_input(user, "Provide a value for the new index.", "New Index") if(new_value == null) return var/list/array = vars[href_list["array"]] diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 6dbafe2534f..cf7937474c8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1083,6 +1083,7 @@ premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2, /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1, /obj/item/lighter/zippo = 3) + prices = list() /obj/machinery/vending/cigarette/New() ..() @@ -1131,7 +1132,6 @@ product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" icon_state = "wallmed" icon_deny = "wallmed-deny" - req_access = list(access_medical) density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, /obj/item/reagent_containers/hypospray/autoinjector = 4, /obj/item/healthanalyzer = 1) contraband = list(/obj/item/reagent_containers/syringe/charcoal = 4, /obj/item/reagent_containers/syringe/antiviral = 4, /obj/item/reagent_containers/food/pill/tox = 1) @@ -1142,7 +1142,6 @@ desc = "Wall-mounted Medical Equipment dispenser." icon_state = "wallmed" icon_deny = "wallmed-deny" - req_access = list(access_medical) density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/reagent_containers/hypospray/autoinjector = 5, /obj/item/reagent_containers/syringe/charcoal = 3, /obj/item/stack/medical/bruise_pack = 3, /obj/item/stack/medical/ointment = 3, /obj/item/healthanalyzer = 3) diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index b2851129a29..c4c4c674294 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -13,26 +13,28 @@ /obj/machinery/wish_granter/attack_hand(mob/living/carbon/user) . = ..() + if(.) - return + return ..() + if(charges <= 0) - to_chat(user, "The Wish Granter lies silent.") - return + to_chat(user, "The Wish Granter lies silent.") + return TRUE else if(!ishuman(user)) - to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.") + to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's..") return else if(is_special_character(user)) - to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.") + to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.") else if(!insisting) - to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?") + to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?") insisting = TRUE else - to_chat(user, "You speak. [pick("I want the station to disappear", "Humanity is corrupt, mankind must be destroyed", "I want to be rich", "I want to rule the world", "I want immortality.")]. The Wish Granter answers.") - to_chat(user, "Your head pounds for a moment, before your vision clears. You are the avatar of the Wish Granter, and your power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first.") + to_chat(user, "You speak. [pick("I want the station to disappear", "Humanity is corrupt, mankind must be destroyed", "I want to be rich", "I want to rule the world", "I want immortality.")]. The Wish Granter answers.") + to_chat(user, "Your head pounds for a moment, before your vision clears. You are the avatar of the Wish Granter, and your power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first.") charges-- insisting = FALSE @@ -46,37 +48,43 @@ var/list/types = list() /obj/machinery/wish_granter/super/attack_hand(mob/living/carbon/user) + . = ..() + + if(.) + return ..() + if(!ishuman(user)) - to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.") - return - else if(is_special_character(user) || jobban_isbanned(user, ROLE_TRAITOR) || jobban_isbanned(user, "Syndicate")) - to_chat(user, "Something instinctual makes you pull away.") - return + to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.") + return TRUE + + if(is_special_character(user) || jobban_isbanned(user, ROLE_TRAITOR) || jobban_isbanned(user, "Syndicate")) + to_chat(user, "Something instinctual makes you pull away.") + return TRUE + + to_chat(user, "Your touch makes the Wish Granter stir. Are you really sure you want to do this?") + + for(var/supname in GLOB.all_superheroes) + types += supname + + var/wish + if(types.len == 1) + wish = pick(types) else - - to_chat(user, "Your touch makes the Wish Granter stir. Are you really sure you want to do this?") - - for(var/supname in GLOB.all_superheroes) - types += supname - - var/wish - if(types.len == 1) - wish = pick(types) - else - wish = input("You want to become...","Wish") as null|anything in types + wish = input("You want to become...", "Wish") as null|anything in types - if(!src || !wish || user.stat == DEAD || (get_dist(src, user) > 4)) //another check after the input to check if someone already used it, closed it, or if they're dead, or if they ran off - return + if(!wish || user.stat == DEAD || (get_dist(src, user) > 4)) // Another check after the input to check if someone already used it, closed it, or if they're dead, or if they ran off. + return - var/datum/superheroes/S = GLOB.all_superheroes[wish] - if(S.activated) - to_chat(user,"There can only be one! Pick something else!") - return + var/datum/superheroes/S = GLOB.all_superheroes[wish] + if(S.activated) + to_chat(user,"There can only be one! Pick something else!") + return - S.create(user) - S.activated = TRUE //sets this superhero as taken so we don't have duplicates - playsound(src.loc, 'sound/effects/bamf.ogg', 50, 1) - visible_message("The wishgranter fades into mist..") - add_attack_logs(null, user, "Became [GLOB.all_superheroes[wish]]") - notify_ghosts("[GLOB.all_superheroes[wish]] has appeared in [get_area(user)].", source = user) - qdel(src) + S.create(user) + S.activated = TRUE //sets this superhero as taken so we don't have duplicates + + playsound(src.loc, 'sound/effects/bamf.ogg', 50, 1) + visible_message("The wishgranter fades into mist..") + add_attack_logs(null, user, "Became [GLOB.all_superheroes[wish]]") + notify_ghosts("[GLOB.all_superheroes[wish]] has appeared in [get_area(user)].", source = user) + qdel(src) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2ff5cabaaaa..258d0eb7898 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -23,6 +23,7 @@ infra_luminosity = 15 //byond implementation is bugged. force = 5 armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming. var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items) var/can_move = 0 // time of next allowed movement var/mob/living/carbon/occupant = null diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index e4c001a508a..516b57e898a 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -3,4 +3,5 @@ /obj/mecha/working/New() ..() - trackers += new /obj/item/mecha_parts/mecha_tracking(src) + if(!ruin_mecha) + trackers += new /obj/item/mecha_parts/mecha_tracking(src) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 3c5fea2a967..c410a9130a0 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -88,7 +88,7 @@ var/global/list/image/splatter_cache = list() return TRUE //Add "bloodiness" of this blood's type, to the human's shoes -/obj/effect/decal/cleanable/blood/Crossed(atom/movable/O) +/obj/effect/decal/cleanable/blood/Crossed(atom/movable/O, oldloc) if(!off_floor && ishuman(O)) var/mob/living/carbon/human/H = O var/obj/item/organ/external/l_foot = H.get_organ("l_foot") diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index 8598381aaf1..1e45c2aa4cf 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -29,7 +29,7 @@ var/global/list/image/fluidtrack_cache = list() blood_state = BLOOD_STATE_HUMAN //the icon state to load images from -/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O) +/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O, oldloc) if(ishuman(O)) var/mob/living/carbon/human/H = O var/obj/item/clothing/shoes/S = H.shoes diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index d061aca8d95..8bb117b832c 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -345,7 +345,7 @@ steam.start() -- spawns the effect return 1 -/obj/effect/effect/bad_smoke/Crossed(mob/living/carbon/M as mob ) +/obj/effect/effect/bad_smoke/Crossed(mob/living/carbon/M as mob, oldloc) ..() if(istype(M, /mob/living/carbon)) if(M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT)) @@ -569,7 +569,7 @@ steam.start() -- spawns the effect M.coughedtime = 0 return -/obj/effect/effect/sleep_smoke/Crossed(mob/living/carbon/M as mob ) +/obj/effect/effect/sleep_smoke/Crossed(mob/living/carbon/M as mob, oldloc) ..() if(istype(M, /mob/living/carbon)) if(M.internal != null && M.wear_mask && (M.wear_mask.flags & AIRTIGHT)) @@ -672,7 +672,7 @@ steam.start() -- spawns the effect R.updatehealth() return -/obj/effect/effect/mustard_gas/Crossed(mob/living/carbon/human/R as mob ) +/obj/effect/effect/mustard_gas/Crossed(mob/living/carbon/human/R as mob, oldloc) ..() if(istype(R, /mob/living/carbon/human)) if(R.internal != null && usr.wear_mask && (R.wear_mask.flags & AIRTIGHT) && R.wear_suit != null && !istype(R.wear_suit, /obj/item/clothing/suit/storage/labcoat) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket) && !istype(R.wear_suit, /obj/item/clothing/suit/straight_jacket && !istype(R.wear_suit, /obj/item/clothing/suit/armor))) @@ -984,7 +984,7 @@ steam.start() -- spawns the effect qdel(src) -/obj/structure/foam/Crossed(var/atom/movable/AM) +/obj/structure/foam/Crossed(var/atom/movable/AM, oldloc) if(metal) return diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index b44c4e3dd1b..f134bd44b10 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -94,7 +94,7 @@ spawn(5) qdel(src) -/obj/effect/particle_effect/foam/Crossed(atom/movable/AM) +/obj/effect/particle_effect/foam/Crossed(atom/movable/AM, oldloc) if(metal) return diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index ddce32f68fa..93ab0c8e51b 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -52,7 +52,7 @@ steps-- return 1 -/obj/effect/particle_effect/smoke/Crossed(mob/living/M) +/obj/effect/particle_effect/smoke/Crossed(mob/living/M, oldloc) if(!istype(M)) return smoke_mob(M) @@ -207,4 +207,4 @@ return 1 /datum/effect_system/smoke_spread/sleeping - effect_type = /obj/effect/particle_effect/smoke/sleeping \ No newline at end of file + effect_type = /obj/effect/particle_effect/smoke/sleeping diff --git a/code/game/objects/effects/mapping_helpers.dm b/code/game/objects/effects/mapping_helpers.dm index 909e63a98ba..44a16c5ae5f 100644 --- a/code/game/objects/effects/mapping_helpers.dm +++ b/code/game/objects/effects/mapping_helpers.dm @@ -67,6 +67,23 @@ /obj/effect/mapping_helpers/no_lava icon_state = "no_lava" +/obj/effect/mapping_helpers/airlock + layer = DOOR_HELPER_LAYER + +/obj/effect/mapping_helpers/airlock/unres + name = "airlock unresctricted side helper" + icon_state = "airlock_unres_helper" + +/obj/effect/mapping_helpers/airlock/unres/Initialize(mapload) + if(!mapload) + log_world("### MAP WARNING, [src] spawned outside of mapload!") + return + var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in src.loc + if(airlock) + airlock.unres_sides ^= dir + else + log_world("### MAP WARNING, [src] failed to find an airlock at [AREACOORD(src)]") + ..() /obj/effect/mapping_helpers/no_lava/New() var/turf/T = get_turf(src) T.flags |= NO_LAVA_GEN diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 547df1b96ef..76e28f013a1 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -11,7 +11,7 @@ /obj/effect/mine/proc/mineEffect(mob/living/victim) to_chat(victim, "*click*") -/obj/effect/mine/Crossed(AM as mob|obj) +/obj/effect/mine/Crossed(AM as mob|obj, oldloc) if(!isliving(AM)) return var/mob/living/M = AM diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 691ed994875..f36902664f8 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -3,7 +3,6 @@ desc = "Looks unstable. Best to test it with the clown." icon = 'icons/obj/stationobjs.dmi' icon_state = "portal" - density = TRUE unacidable = TRUE anchored = TRUE @@ -17,9 +16,6 @@ var/can_multitool_to_remove = FALSE var/ignore_tele_proof_area_setting = FALSE -/obj/effect/portal/Bumped(mob/M as mob|obj) - teleport(M) - /obj/effect/portal/New(loc, turf/target, creator = null, lifespan = 300) ..() @@ -49,10 +45,13 @@ /obj/effect/portal/singularity_act() return -/obj/effect/portal/Crossed(atom/movable/AM) +/obj/effect/portal/Crossed(atom/movable/AM, oldloc) if(isobserver(AM)) return ..() + if(target && (get_turf(oldloc) == get_turf(target))) + return ..() + if(!teleport(AM)) return ..() diff --git a/code/game/objects/effects/spawners/airlock_spawner.dm b/code/game/objects/effects/spawners/airlock_spawner.dm new file mode 100644 index 00000000000..496f02c61d1 --- /dev/null +++ b/code/game/objects/effects/spawners/airlock_spawner.dm @@ -0,0 +1,345 @@ +/* +Spawners for mappers. Just plonk one down of the desired size and it will place the machinery for you. The red arrow things indicate where the chamber is. +This spawner places pipe leading up to the interior door, you will need to finish it off yourself with a connector, canister, and pipe connecting the two. It also assumes you already put in wall and floor. +*/ + +#define HALF_X round((tiles_in_x_direction - 1) * 0.5) //These are required so that the airlock can be in the middle of the chamber wall +#define HALF_Y round((tiles_in_y_direction - 1) * 0.5) +#define CHAMBER_LONG 1 +#define CHAMBER_SQUARE 2 +#define CHAMBER_BIGGER 3 +#define DOOR_NORMAL_PLACEMENT 1 +#define DOOR_FLIPPED_PLACEMENT 2 + +#define AIRPUMP_TAG "[id_to_link]_pump" +#define SENSOR_TAG "[id_to_link]_sensor" +#define OUTER_DOOR_TAG "[id_to_link]_outer" +#define INNER_DOOR_TAG "[id_to_link]_inner" + +/obj/effect/spawner/airlock + name = "1 by 1 airlock spawner (interior north, exterior south)" + desc = "If you can see this, there's probably a missing airlock here. Better tell an admin and report this on the github." + icon = 'icons/obj/airlock_spawner.dmi' + icon_state = "1x1_N_to_S" + layer = SPLASHSCREEN_PLANE //So we absolutely always appear above everything else. We delete ourself after spawning so this is fine + var/interior_direction = NORTH //This is also the direction the spawner will send the pipe + var/exterior_direction = SOUTH + var/opposite_interior_direction //We're checking these often enough for them to merit their own vars + var/interior_direction_cw + var/interior_direction_ccw + var/north_or_south_interior //Used a bit everywhere for locational stuff + var/north_or_south_exterior //Likewise + var/tiles_in_x_direction = 1 + var/tiles_in_y_direction = 1 + var/id_to_link + var/radio_frequency = 1379 + var/required_access = list(access_external_airlocks) + var/door_name = "external access" + var/door_type = /obj/machinery/door/airlock/external/glass + var/one_door_interior //For square airlocks, if you set this then a) only one door will spawn, and b) you can choose if the door should go opposite to how it normally goes. Please use the define + var/one_door_exterior //See above + +/obj/effect/spawner/airlock/Initialize() + ..() + forceMove(locate(x + 1, y + 1, z)) //Needs to move because our icon_state implies we are one turf to the northeast, when we're not + opposite_interior_direction = turn(interior_direction, 180) //Do it this way (instead of setting it directly) to avoid code mishaps + interior_direction_cw = turn(interior_direction, 90) + interior_direction_ccw = turn(interior_direction, 270) + if(interior_direction == NORTH || interior_direction == SOUTH) + north_or_south_interior = TRUE + if(exterior_direction == NORTH || exterior_direction == SOUTH) + north_or_south_exterior = TRUE + id_to_link = "[UID()]" //We want unique IDs, this will give us a unique ID + var/turf/turf_interior = get_airlock_location(interior_direction) + var/turf/turf_exterior = get_airlock_location(exterior_direction) + handle_door_creation(turf_interior, TRUE, one_door_interior) + handle_door_creation(turf_exterior, FALSE, one_door_exterior) + handle_pipes_creation(turf_interior) + handle_control_placement() + qdel(src) + +/obj/effect/spawner/airlock/proc/get_airlock_location(desired_direction) //Finds a turf to place an airlock and returns it, this turf will be in the middle of the relevant wall + var/turf/T + switch(desired_direction) + if(NORTH) + T = locate(x + HALF_X, y + tiles_in_y_direction, z) + if(SOUTH) + T = locate(x + HALF_X, y - 1, z) + if(EAST) + T = locate(x + tiles_in_x_direction, y + HALF_Y, z) + if(WEST) + T = locate(x - 1, y + HALF_Y, z) + return T + +/obj/effect/spawner/airlock/proc/handle_door_creation(turf/T, is_this_an_interior_airlock, one_door_only) //Creates a door (or two) and also creates a button + var/obj/machinery/door/airlock/A + if(one_door_only != DOOR_FLIPPED_PLACEMENT) + A = new door_type(T) + handle_door_stuff(A, is_this_an_interior_airlock) + var/obj/machinery/access_button/the_button = spawn_button(T, is_this_an_interior_airlock ? interior_direction : exterior_direction) + if(one_door_only == DOOR_NORMAL_PLACEMENT) //We only need one door, we are done + return + if(!(tiles_in_x_direction % 2) && (is_this_an_interior_airlock && north_or_south_interior || !is_this_an_interior_airlock && north_or_south_exterior)) //Handle extra airlock for aesthetics + A = new door_type(get_step(T, EAST)) + handle_door_stuff(A, is_this_an_interior_airlock) + if(one_door_only == DOOR_FLIPPED_PLACEMENT) + the_button.forceMove(get_step(the_button, EAST)) + else if(!(tiles_in_y_direction % 2) && (is_this_an_interior_airlock && !north_or_south_interior || !is_this_an_interior_airlock && !north_or_south_exterior)) //Handle extra airlock for aesthetics + A = new door_type(get_step(T, NORTH)) + handle_door_stuff(A, is_this_an_interior_airlock) + if(one_door_only == DOOR_FLIPPED_PLACEMENT) + the_button.forceMove(get_step(the_button, NORTH)) + +/obj/effect/spawner/airlock/proc/handle_door_stuff(obj/machinery/door/airlock/A, is_this_an_interior_airlock) //This sets up the door vars correctly and then locks it before first use + A.set_frequency(radio_frequency) + A.id_tag = is_this_an_interior_airlock ? INNER_DOOR_TAG : OUTER_DOOR_TAG + A.req_access = required_access + A.name = door_name + A.lock() + +/obj/effect/spawner/airlock/proc/spawn_button(turf/T, some_direction) + var/obj/machinery/access_button/the_button = new(T) + the_button.master_tag = id_to_link + the_button.set_frequency(radio_frequency) + switch(some_direction) + if(NORTH) + the_button.pixel_x -= 25 + the_button.pixel_y = 7 + if(EAST) + the_button.pixel_x = 7 + the_button.pixel_y = -25 + if(SOUTH) + the_button.pixel_x -= 25 + the_button.pixel_y -= 7 + if(WEST) + the_button.pixel_x -= 7 + the_button.pixel_y -= 25 + the_button.req_access = required_access + return the_button + +/obj/effect/spawner/airlock/proc/handle_control_placement() //Stick the sensor and controller on the same bit of wall, this will ONLY be unsuitable if airlocks are on both the south and west turfs + var/turf/T = get_turf(src) + var/obj/machinery/airlock_sensor/AS = new(T) + var/obj/machinery/embedded_controller/radio/airlock/airlock_controller/AC = new(T, id_to_link, radio_frequency, OUTER_DOOR_TAG, INNER_DOOR_TAG, AIRPUMP_TAG, SENSOR_TAG) + AC.req_access = required_access + AS.id_tag = SENSOR_TAG + AS.set_frequency(radio_frequency) + if(interior_direction != WEST && exterior_direction != WEST) //If west wall is free, place stuff there + AC.pixel_x -= 25 + AC.pixel_y += 9 + AS.pixel_x -= 25 + AS.pixel_y -= 9 + else if(interior_direction != SOUTH && exterior_direction != SOUTH) //If south wall is free, place stuff there + AC.pixel_x += 9 + AC.pixel_y -= 25 + AS.pixel_x -= 9 + AS.pixel_y -= 25 + else //Send them over to the other side of the chamber + T = locate(x + tiles_in_x_direction - 1, y + tiles_in_y_direction - 1, z) + AC.forceMove(T) + AS.forceMove(T) + AC.pixel_x += 25 + AC.pixel_y += 9 + AS.pixel_x += 25 + AS.pixel_y -= 9 + +/obj/effect/spawner/airlock/proc/handle_pipes_creation(turf/T) //This places all required piping down, then properly initializes it. T is the turf that the interior airlock occupies + var/turf/below_T = get_step(T, opposite_interior_direction) + + var/two_way_pipe = interior_direction | opposite_interior_direction + var/chamber_shape //This determines the layout of the chamber and therefore how many vents should be present + if(tiles_in_x_direction == 2 && tiles_in_y_direction == 2) + chamber_shape = CHAMBER_SQUARE + else if(tiles_in_x_direction > 1 && tiles_in_y_direction > 1) + chamber_shape = CHAMBER_BIGGER + else + chamber_shape = CHAMBER_LONG + pipe_creation_helper(/obj/machinery/atmospherics/pipe/simple/visible, T, interior_direction, two_way_pipe) + switch(chamber_shape) + if(CHAMBER_LONG) //Easy enough, place a single vent + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + below_T, + interior_direction) + if(CHAMBER_SQUARE) //We need a T-manifold and two vents for this + pipe_creation_helper(/obj/machinery/atmospherics/pipe/manifold/visible, + below_T, + north_or_south_interior ? WEST : SOUTH, + NORTH | EAST | (north_or_south_interior ? SOUTH : WEST)) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + get_step(below_T, opposite_interior_direction), + interior_direction) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + north_or_south_interior ? EAST_OF_TURF(below_T) : NORTH_OF_TURF(below_T), + turn(interior_direction, interior_direction == SOUTH || interior_direction == EAST ? -90 : 90)) + if(CHAMBER_BIGGER) //We need a central column of manifolds and a vent either side of each manifold + var/depth = north_or_south_interior ? tiles_in_y_direction : tiles_in_x_direction + var/turf/put_thing_here = below_T + for(var/i in 1 to depth) + if(i != depth)//We're placing more pipe later, so we need a 4-way manifold + pipe_creation_helper(/obj/machinery/atmospherics/pipe/manifold4w/visible, put_thing_here, interior_direction, NORTH | EAST | SOUTH | WEST) + else //We stop here, so place a T-manifold down + pipe_creation_helper(/obj/machinery/atmospherics/pipe/manifold/visible, + put_thing_here, + opposite_interior_direction, + interior_direction_cw | interior_direction | interior_direction_ccw) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + get_step(put_thing_here, interior_direction_cw), + interior_direction_ccw) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + get_step(put_thing_here, interior_direction_ccw), + interior_direction_cw) + put_thing_here = get_step(put_thing_here, opposite_interior_direction) //Now move the turf we're generating stuff from 1 forward + +/obj/effect/spawner/airlock/proc/pipe_creation_helper(path, location, direction, initialization_directions) //Create some kind of atmospherics machinery and initialize it properly + var/obj/machinery/atmospherics/A = new path(location) + A.dir = direction + A.on_construction(A.dir, initialization_directions ? initialization_directions : A.dir) + if(istype(A, /obj/machinery/atmospherics/unary/vent_pump/high_volume)) + var/obj/machinery/atmospherics/unary/vent_pump/high_volume/created_pump = A + created_pump.id_tag = AIRPUMP_TAG + created_pump.set_frequency(radio_frequency) + + +//Premade airlocks for mappers, probably won't need all of these but whatever +/obj/effect/spawner/airlock/s_to_n + name = "1 by 1 airlock spawner (interior south, exterior north)" + icon_state = "1x1_S_to_N" + interior_direction = SOUTH + exterior_direction = NORTH +/obj/effect/spawner/airlock/e_to_w + name = "1 by 1 airlock spawner (interior east, exterior west)" + icon_state = "1x1_E_to_W" + interior_direction = EAST + exterior_direction = WEST +/obj/effect/spawner/airlock/w_to_e + name = "1 by 1 airlock spawner (interior west, exterior east)" + icon_state = "1x1_W_to_E" + interior_direction = WEST + exterior_direction = EAST + +/obj/effect/spawner/airlock/long //Long and thin + name = "long airlock spawner (interior north, exterior south)" + icon_state = "1x2_N_to_S" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/s_to_n/long + name = "long airlock spawner (interior south, exterior north)" + icon_state = "1x2_S_to_N" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/e_to_w/long + name = "long airlock spawner (interior east, exterior west)" + icon_state = "1x2_E_to_W" + tiles_in_x_direction = 2 +/obj/effect/spawner/airlock/w_to_e/long + name = "long airlock spawner (interior west, exterior east)" + icon_state = "1x2_W_to_E" + tiles_in_x_direction = 2 + +/obj/effect/spawner/airlock/long/square //Square + name = "square airlock spawner (interior north, exterior south)" + icon_state = "2x2_N_to_S" + tiles_in_x_direction = 2 +/obj/effect/spawner/airlock/s_to_n/long/square + name = "square airlock spawner (interior south, exterior north)" + icon_state = "2x2_S_to_N" + tiles_in_x_direction = 2 +/obj/effect/spawner/airlock/e_to_w/long/square + name = "square airlock spawner (interior east, exterior west)" + icon_state = "2x2_E_to_W" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/w_to_e/long/square + name = "square airlock spawner (interior west, exterior east)" + icon_state = "2x2_W_to_E" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/long/square/e_to_s + name = "square airlock spawner (interior east, exterior south)" + icon_state = "2x2_E_to_S" + interior_direction = EAST + exterior_direction = SOUTH + +/obj/effect/spawner/airlock/long/square/wide + name = "rectangular airlock spawner (interior north, exterior south)" + icon_state = "3x2_N_to_S" + tiles_in_x_direction = 3 +/obj/effect/spawner/airlock/s_to_n/long/square/wide + name = "rectangular airlock spawner (interior south, exterior north)" + icon_state = "3x2_S_to_N" + tiles_in_x_direction = 3 +/obj/effect/spawner/airlock/e_to_w/long/square/wide + name = "rectangular airlock spawner (interior east, exterior west)" + icon_state = "3x2_E_to_W" + tiles_in_y_direction = 3 +/obj/effect/spawner/airlock/w_to_e/long/square/wide + name = "rectangular airlock spawner (interior west, exterior east)" + icon_state = "3x2_W_to_E" + tiles_in_y_direction = 3 + +/obj/effect/spawner/airlock/long/square/three + name = "3 by 3 square airlock spawner (interior north, exterior south)" + icon_state = "3x3_N_to_S" + interior_direction = NORTH + exterior_direction = SOUTH + tiles_in_x_direction = 3 + tiles_in_y_direction = 3 + +/obj/effect/spawner/airlock/e_to_w/arrivals + required_access = null + +/obj/effect/spawner/airlock/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/e_to_w/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/s_to_n/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/long/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/long/square/engine + required_access = list(access_engine) + door_name = "engine external access" + icon_state = "2x2_N_to_S_leftdoors" + door_type = /obj/machinery/door/airlock/external + one_door_interior = DOOR_NORMAL_PLACEMENT + one_door_exterior = DOOR_NORMAL_PLACEMENT +/obj/effect/spawner/airlock/long/square/engine/reversed + icon_state = "2x2_N_to_S_rightdoors" + one_door_interior = DOOR_FLIPPED_PLACEMENT + one_door_exterior = DOOR_FLIPPED_PLACEMENT + +/obj/effect/spawner/airlock/w_to_e/long/square/wide/mining + door_name = "mining external access" + required_access = list(access_mining) +/obj/effect/spawner/airlock/long/square/wide/mining + door_name = "mining external access" + required_access = list(access_mining) + +/obj/effect/spawner/airlock/e_to_w/minisat + door_name = "minisat external access" + required_access = list(access_minisat) +/obj/effect/spawner/airlock/long/square/e_to_s/telecoms + door_name = "telecoms external access" + required_access = list(access_tcomsat, access_external_airlocks) + door_type = /obj/machinery/door/airlock/external + +/obj/effect/spawner/airlock/long/square/three/syndicate + name = "3 by 3 square airlock spawner (interior west, exterior north)" + icon_state = "3x3_W_to_N" + interior_direction = WEST + exterior_direction = NORTH + door_name = "ship external access" + req_access = list(access_syndicate) + door_type = /obj/machinery/door/airlock/external + +#undef HALF_X +#undef HALF_Y +#undef CHAMBER_LONG +#undef CHAMBER_SQUARE +#undef CHAMBER_BIGGER +#undef DOOR_NORMAL_PLACEMENT +#undef DOOR_FLIPPED_PLACEMENT +#undef AIRPUMP_TAG +#undef SENSOR_TAG +#undef OUTER_DOOR_TAG +#undef INNER_DOOR_TAG diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index e8cd72b81e9..c1231e698fc 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -1,23 +1,43 @@ /* Simple object type, calls a proc when "stepped" on by something */ /obj/effect/step_trigger - var/affect_ghosts = 0 - var/stopper = 1 // stops throwers - invisibility = 101 // nope cant see this shit - anchored = 1 + var/affect_ghosts = FALSE + var/stopper = TRUE // stops throwers + var/mobs_only = FALSE + invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit + anchored = TRUE /obj/effect/step_trigger/proc/Trigger(var/atom/movable/A) - return 0 + return FALSE -/obj/effect/step_trigger/Crossed(H as mob|obj) - ..() +/obj/effect/step_trigger/Crossed(var/H, oldloc) + . = ..() if(!H) return - if(istype(H, /mob/dead/observer) && !affect_ghosts) + if(isobserver(H) && !affect_ghosts) + return + if(!ismob(H) && mobs_only) return Trigger(H) +/obj/effect/step_trigger/singularity_act() + return +/obj/effect/step_trigger/singularity_pull() + return + +/* Sends a message to mob when triggered*/ + +/obj/effect/step_trigger/message + var/message //the message to give to the mob + var/once = 1 + mobs_only = TRUE + +/obj/effect/step_trigger/message/Trigger(mob/M) + if(M.client) + to_chat(M, "[message]") + if(once) + qdel(src) /* Tosses things in a certain direction */ @@ -30,57 +50,57 @@ var/nostop = 0 // if 1: will only be stopped by teleporters var/list/affecting = list() - Trigger(var/atom/A) - if(!A || !istype(A, /atom/movable)) +/obj/effect/step_trigger/thrower/Trigger(atom/A) + if(!A || !ismovableatom(A)) + return + var/atom/movable/AM = A + var/curtiles = 0 + var/stopthrow = 0 + for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) + if(AM in T.affecting) return - var/atom/movable/AM = A - var/curtiles = 0 - var/stopthrow = 0 - for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) - if(AM in T.affecting) - return - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.canmove = 0 + if(isliving(AM)) + var/mob/living/M = AM + if(immobilize) + M.canmove = FALSE - affecting.Add(AM) - while(AM && !stopthrow) - if(tiles) - if(curtiles >= tiles) - break - if(AM.z != src.z) + affecting.Add(AM) + while(AM && !stopthrow) + if(tiles) + if(curtiles >= tiles) break + if(AM.z != src.z) + break - curtiles++ + curtiles++ - sleep(speed) + sleep(speed) - // Calculate if we should stop the process - if(!nostop) - for(var/obj/effect/step_trigger/T in get_step(AM, direction)) - if(T.stopper && T != src) - stopthrow = 1 - else - for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) - if(T.stopper) - stopthrow = 1 + // Calculate if we should stop the process + if(!nostop) + for(var/obj/effect/step_trigger/T in get_step(AM, direction)) + if(T.stopper && T != src) + stopthrow = 1 + else + for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction)) + if(T.stopper) + stopthrow = 1 - if(AM) - var/predir = AM.dir - step(AM, direction) - if(!facedir) - AM.dir = predir + if(AM) + var/predir = AM.dir + step(AM, direction) + if(!facedir) + AM.setDir(predir) - affecting.Remove(AM) + affecting.Remove(AM) - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.canmove = 1 + if(isliving(AM)) + var/mob/living/M = AM + if(immobilize) + M.canmove = TRUE /* Stops things thrown by a thrower, doesn't do anything */ @@ -93,12 +113,11 @@ var/teleport_y = 0 var/teleport_z = 0 - Trigger(var/atom/movable/A) - if(teleport_x && teleport_y && teleport_z) +/obj/effect/step_trigger/teleporter/Trigger(atom/movable/A) + if(teleport_x && teleport_y && teleport_z) - A.x = teleport_x - A.y = teleport_y - A.z = teleport_z + var/turf/T = locate(teleport_x, teleport_y, teleport_z) + A.forceMove(T) /* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ @@ -107,11 +126,73 @@ var/teleport_y_offset = 0 var/teleport_z_offset = 0 - Trigger(var/atom/movable/A) - if(teleport_x && teleport_y && teleport_z) - if(teleport_x_offset && teleport_y_offset && teleport_z_offset) +/obj/effect/step_trigger/teleporter/random/Trigger(atom/movable/A) + if(teleport_x && teleport_y && teleport_z) + if(teleport_x_offset && teleport_y_offset && teleport_z_offset) - A.x = rand(teleport_x, teleport_x_offset) - A.y = rand(teleport_y, teleport_y_offset) - A.z = rand(teleport_z, teleport_z_offset) + var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset)) + if (T) + A.forceMove(T) +/* Fancy teleporter, creates sparks and smokes when used */ + +/obj/effect/step_trigger/teleport_fancy + var/locationx + var/locationy + var/uses = 1 //0 for infinite uses + var/entersparks = 0 + var/exitsparks = 0 + var/entersmoke = 0 + var/exitsmoke = 0 + +/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M) + var/dest = locate(locationx, locationy, z) + M.Move(dest) + + if(entersparks) + var/datum/effect_system/spark_spread/s = new + s.set_up(4, 1, src) + s.start() + if(exitsparks) + var/datum/effect_system/spark_spread/s = new + s.set_up(4, 1, dest) + s.start() + + if(entersmoke) + var/datum/effect_system/smoke_spread/s = new + s.set_up(4, 1, src, 0) + s.start() + if(exitsmoke) + var/datum/effect_system/smoke_spread/s = new + s.set_up(4, 1, dest, 0) + s.start() + + uses-- + if(uses == 0) + qdel(src) + +/* Simple sound player, Mapper friendly! */ + +/obj/effect/step_trigger/sound_effect + var/sound //eg. path to the sound, inside '' eg: 'growl.ogg' + var/volume = 100 + var/freq_vary = 1 //Should the frequency of the sound vary? + var/extra_range = 0 // eg World.view = 7, extra_range = 1, 7+1 = 8, 8 turfs radius + var/happens_once = 0 + var/triggerer_only = 0 //Whether the triggerer is the only person who hears this + + +/obj/effect/step_trigger/sound_effect/Trigger(atom/movable/A) + var/turf/T = get_turf(A) + + if(!T) + return + + if(triggerer_only && ismob(A)) + var/mob/B = A + B.playsound_local(T, sound, volume, freq_vary) + else + playsound(T, sound, volume, freq_vary, extra_range) + + if(happens_once) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm index f6b654ccbbe..1dc126faa6c 100644 --- a/code/game/objects/effects/temporary_visuals/clockcult.dm +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -6,6 +6,10 @@ randomdir = 0 layer = ABOVE_NORMAL_TURF_LAYER +/obj/effect/temp_visual/ratvar/door + icon_state = "ratvardoorglow" + layer = CLOSED_DOOR_LAYER //above closed doors + /obj/effect/temp_visual/ratvar/door/window icon_state = "ratvarwindoorglow" layer = ABOVE_WINDOW_LAYER @@ -16,9 +20,27 @@ /obj/effect/temp_visual/ratvar/beam/grille layer = BELOW_OBJ_LAYER +/obj/effect/temp_visual/ratvar/beam/itemconsume + layer = HIGH_OBJ_LAYER + +/obj/effect/temp_visual/ratvar/beam/falsewall + layer = OBJ_LAYER + +/obj/effect/temp_visual/ratvar/beam/catwalk + layer = LATTICE_LAYER + +/obj/effect/temp_visual/ratvar/wall + icon_state = "ratvarwallglow" + +/obj/effect/temp_visual/ratvar/wall/false + layer = OBJ_LAYER + /obj/effect/temp_visual/ratvar/floor icon_state = "ratvarfloorglow" +/obj/effect/temp_visual/ratvar/floor/catwalk + layer = LATTICE_LAYER + /obj/effect/temp_visual/ratvar/window icon_state = "ratvarwindowglow" layer = ABOVE_OBJ_LAYER @@ -26,6 +48,10 @@ /obj/effect/temp_visual/ratvar/window/single icon_state = "ratvarwindowglow_s" +/obj/effect/temp_visual/ratvar/gear + icon_state = "ratvargearglow" + layer = BELOW_OBJ_LAYER + /obj/effect/temp_visual/ratvar/grille icon_state = "ratvargrilleglow" layer = BELOW_OBJ_LAYER diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 073cd0df669..9dbb02553ca 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -578,7 +578,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/proc/is_equivalent(obj/item/I) return I == src -/obj/item/Crossed(atom/movable/AM) +/obj/item/Crossed(atom/movable/AM, oldloc) . = ..() if(prob(trip_chance) && ishuman(AM)) var/mob/living/carbon/human/H = AM diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 7ce7b07193d..77aef9bb71d 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -4,6 +4,7 @@ /obj/item/storage/pill_bottle/happy name = "Happy pills" desc = "Highly illegal drug. When you want to see the rainbow." + wrapper_color = COLOR_PINK /obj/item/storage/pill_bottle/happy/New() ..() @@ -18,6 +19,7 @@ /obj/item/storage/pill_bottle/zoom name = "Zoom pills" desc = "Highly illegal drug. Trade brain for speed." + wrapper_color = COLOR_BLUE /obj/item/storage/pill_bottle/zoom/New() ..() @@ -49,15 +51,12 @@ adulterants-- reagents.add_reagent(pick_list("chemistry_tools.json", "CYBERPUNK_drug_adulterants"), 3) - - /obj/item/storage/pill_bottle/random_drug_bottle name = "pill bottle (???)" desc = "Huh." + allow_wrap = FALSE /obj/item/storage/pill_bottle/random_drug_bottle/New() ..() for(var/i in 1 to 5) new /obj/item/reagent_containers/food/pill/random_drugs(src) - - diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 05d9d4389ad..a80352c01ba 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -50,6 +50,7 @@ to_chat(user, "[D]'s ID scan is disabled!") return if(D.check_access(src.ID)) + D.add_hiddenprint(user) switch(mode) if(WAND_OPEN) if(D.density) diff --git a/code/game/objects/items/devices/voice.dm b/code/game/objects/items/devices/voice.dm index 339271cdcca..38bcd16f01e 100644 --- a/code/game/objects/items/devices/voice.dm +++ b/code/game/objects/items/devices/voice.dm @@ -34,7 +34,7 @@ A.UpdateButtonIcon() /obj/item/voice_changer/proc/set_voice(mob/user) - var/chosen_voice = input(user, "What voice would you like to mimic? Leave this empty to use the voice on your ID card.", "Set Voice Changer", voice) as text + var/chosen_voice = clean_input("What voice would you like to mimic? Leave this empty to use the voice on your ID card.", "Set Voice Changer", voice, user) if(!chosen_voice) voice = null to_chat(user, "You are now mimicking the voice on your ID card.") diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index 587b1d27d14..e51bac10005 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -123,6 +123,7 @@ /obj/item/storage/pill_bottle/random_meds name = "unlabelled pillbottle" desc = "The sheer recklessness of this bottle's existence astounds you." + allow_wrap = FALSE var/labelled = FALSE /obj/item/storage/pill_bottle/random_meds/New() diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 0bdc88c5b52..0e95f509463 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -195,8 +195,6 @@ heal_burn = 25 //Medical Herbs// - - /obj/item/stack/medical/bruise_pack/comfrey name = "\improper Comfrey leaf" singular_name = "Comfrey leaf" @@ -217,48 +215,55 @@ color = "#4CC5C7" heal_burn = 12 - -//Splints// - - +// Splints /obj/item/stack/medical/splint name = "medical splints" singular_name = "medical splint" icon_state = "splint" - unique_handling = 1 + unique_handling = TRUE self_delay = 100 + var/other_delay = 0 /obj/item/stack/medical/splint/attack(mob/living/M, mob/user) if(..()) - return 1 + return TRUE if(ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) var/limb = affecting.name + if(!(affecting.limb_name in list("l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot"))) to_chat(user, "You can't apply a splint there!") - return + return TRUE + if(affecting.status & ORGAN_SPLINTED) to_chat(user, "[H]'s [limb] is already splinted!") - if(alert(user, "Would you like to remove the splint from [H]'s [limb]?", "Removing.", "Yes", "No") == "Yes") + if(alert(user, "Would you like to remove the splint from [H]'s [limb]?", "Splint removal.", "Yes", "No") == "Yes") affecting.status &= ~ORGAN_SPLINTED H.handle_splints() to_chat(user, "You remove the splint from [H]'s [limb].") - return - if(M == user) - user.visible_message("[user] starts to apply [src] to [user.p_their()] [limb].", \ - "You start to apply [src] to your [limb].", \ - "You hear something being wrapped.") - if(!do_mob(user, H, self_delay)) - return - else - user.visible_message("[user] applies [src] to [H]'s [limb].", \ - "You apply [src] to [H]'s [limb].", \ - "You hear something being wrapped.") + return TRUE + + if((M == user && self_delay > 0) || (M != user && other_delay > 0)) + user.visible_message("[user] starts to apply [src] to [H]'s [limb].", \ + "You start to apply [src] to [H]'s [limb].", \ + "You hear something being wrapped.") + + if(M == user && !do_mob(user, H, self_delay)) + return TRUE + else if(!do_mob(user, H, other_delay)) + return TRUE + + user.visible_message("[user] applies [src] to [H]'s [limb].", \ + "You apply [src] to [H]'s [limb].") affecting.status |= ORGAN_SPLINTED affecting.splinted_count = H.step_count H.handle_splints() - use(1) + +/obj/item/stack/medical/splint/tribal + name = "tribal splints" + icon_state = "tribal_splint" + other_delay = 50 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c32a65f3def..9ec921fef92 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -16,6 +16,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list( new /datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("chair", /obj/structure/chair, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("shuttle seat", /obj/structure/chair/comfy/shuttle, 2, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, one_per_turf = 1, on_floor = 1), @@ -216,6 +217,8 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \ null, \ new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \ new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \ + null, \ + new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/sunglasses/blindfold, 3), \ ) /obj/item/stack/sheet/cloth @@ -335,10 +338,13 @@ var/global/list/datum/stack_recipe/cult = list ( \ * Brass */ var/global/list/datum/stack_recipe/brass_recipes = list (\ + new/datum/stack_recipe("wall gear", /obj/structure/clockwork/wall_gear, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ + null, new/datum/stack_recipe/window("brass windoor", /obj/machinery/door/window/clockwork, 2, time = 30, on_floor = TRUE, window_checks = TRUE), \ null, new/datum/stack_recipe/window("directional brass window", /obj/structure/window/reinforced/clockwork, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe/window("fulltile brass window", /obj/structure/window/reinforced/clockwork/fulltile, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("brass chair", /obj/structure/chair/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ ) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 75decb95413..f0830f34c40 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -31,7 +31,7 @@ if(S.merge_type == merge_type) merge(S) -/obj/item/stack/Crossed(obj/O) +/obj/item/stack/Crossed(obj/O, oldloc) if(amount >= max_amount || ismob(loc)) // Prevents unnecessary call. Also prevents merging stack automatically in a mob's inventory return if(istype(O, merge_type) && !O.throwing) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 09712304f87..a8ddcf6d315 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -208,6 +208,7 @@ origin_tech = null attack_verb = list("attacked", "struck", "hit") brightness_on = 0 + sharp_when_wielded = FALSE // It's a toy /obj/item/twohanded/dualsaber/toy/hit_reaction() return 0 @@ -283,7 +284,7 @@ ..() pop_burst() -/obj/item/toy/snappop/Crossed(H as mob|obj) +/obj/item/toy/snappop/Crossed(H as mob|obj, oldloc) if(ishuman(H) || issilicon(H)) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H if(issilicon(H) || M.m_intent == MOVE_INTENT_RUN) diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 40fc1bf7d56..736ba1cc767 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/dice.dmi' icon_state = "dicebag" can_hold = list(/obj/item/dice) + allow_wrap = FALSE /obj/item/storage/pill_bottle/dice/New() ..() @@ -25,20 +26,34 @@ if(special_die == "100") new /obj/item/dice/d100(src) +/obj/item/storage/pill_bottle/dice/suicide_act(mob/user) + user.visible_message("[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!") + return (OXYLOSS) + /obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6 name = "die" desc = "A die with six sides. Basic and servicable." icon = 'icons/obj/dice.dmi' icon_state = "d6" w_class = WEIGHT_CLASS_TINY + var/sides = 6 var/result = null var/list/special_faces = list() //entries should match up to sides var if used -/obj/item/dice/New() - result = rand(1, sides) + var/rigged = DICE_NOT_RIGGED + var/rigged_value + +/obj/item/dice/Initialize(mapload) + . = ..() + if(!result) + result = roll(sides) update_icon() +/obj/item/dice/suicide_act(mob/user) + user.visible_message("[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!") + return (OXYLOSS) + /obj/item/dice/d1 name = "d1" desc = "A die with one side. Deterministic!" @@ -117,11 +132,19 @@ . = ..() /obj/item/dice/proc/diceroll(mob/user) - result = rand(1, sides) - var/fake_result = rand(1, sides)//Daredevil isn't as good as he used to be + result = roll(sides) + if(rigged != DICE_NOT_RIGGED && result != rigged_value) + if(rigged == DICE_BASICALLY_RIGGED && prob(Clamp(1/(sides - 1) * 100, 25, 80))) + result = rigged_value + else if(rigged == DICE_TOTALLY_RIGGED) + result = rigged_value + + . = result + + var/fake_result = roll(sides)//Daredevil isn't as good as he used to be var/comment = "" if(sides == 20 && result == 20) - comment = "Nat 20!" + comment = "NAT 20!" else if(sides == 20 && result == 1) comment = "Ouch, bad luck." update_icon() @@ -130,16 +153,18 @@ if(special_faces.len == sides) result = special_faces[result] if(user != null) //Dice was rolled in someone's hand - user.visible_message("[user] has thrown [src]. It lands on [result]. [comment]", \ + user.visible_message("[user] has thrown [src]. It lands on [result]. [comment]", \ "You throw [src]. It lands on [result]. [comment]", \ "You hear [src] rolling, it sounds like a [fake_result].") - else if(!throwing) //Dice was thrown and is coming to rest + else if(!src.throwing) //Dice was thrown and is coming to rest visible_message("[src] rolls to a stop, landing on [result]. [comment]") /obj/item/dice/d20/e20/diceroll(mob/user as mob, thrown) if(triggered) return - ..() + + . = ..() + if(result == 1) to_chat(user, "Rocks fall, you die.") user.gib() @@ -166,7 +191,7 @@ /obj/item/dice/update_icon() overlays.Cut() - overlays += "[src.icon_state][src.result]" + overlays += "[icon_state][result]" /obj/item/storage/box/dice name = "Box of dice" diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index d17287b01a6..c35eed4fae5 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -48,9 +48,9 @@ /obj/item/grenade/plastic/receive_signal() prime() -/obj/item/grenade/plastic/Crossed(atom/movable/AM) +/obj/item/grenade/plastic/Crossed(atom/movable/AM, oldloc) if(nadeassembly) - nadeassembly.Crossed(AM) + nadeassembly.Crossed(AM, oldloc) /obj/item/grenade/plastic/on_found(mob/finder) if(nadeassembly) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 31bc6bcf556..3e313bcac33 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -239,9 +239,9 @@ if(nadeassembly) nadeassembly.process_movement() -/obj/item/grenade/chem_grenade/Crossed(atom/movable/AM) +/obj/item/grenade/chem_grenade/Crossed(atom/movable/AM, oldloc) if(nadeassembly) - nadeassembly.Crossed(AM) + nadeassembly.Crossed(AM, oldloc) /obj/item/grenade/chem_grenade/on_found(mob/finder) if(nadeassembly) @@ -289,7 +289,7 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)][ADMIN_QUE(M,"(?)")] ([admin_jump_link(M)]) and last touched by [key_name_admin(last)][ADMIN_QUE(last,"(?)")] ([admin_jump_link(last)]) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP). [contained]") + message_admins("grenade primed by an assembly, attached by [key_name_admin(M)] and last touched by [key_name_admin(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP). [contained]") log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z]) [contained]") update_mob() @@ -419,7 +419,7 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)][ADMIN_QUE(M,"(?)")] ([ADMIN_FLW(M,"FLW")]) and last touched by [key_name_admin(last)][ADMIN_QUE(last,"(?)")] ([ADMIN_FLW(last,"FLW")]) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") + message_admins("grenade primed by an assembly, attached by [key_name_admin(M)] and last touched by [key_name_admin(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])") else addtimer(CALLBACK(src, .proc/prime), det_time) diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index 66e0ba6b110..77ae8fc73bb 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -87,7 +87,7 @@ return ..() -/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj) +/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj, oldloc) if(armed && isturf(src.loc)) if( (iscarbon(AM) || isanimal(AM)) && !istype(AM, /mob/living/simple_animal/parrot) && !istype(AM, /mob/living/simple_animal/hostile/construct) && !istype(AM, /mob/living/simple_animal/shade) && !istype(AM, /mob/living/simple_animal/hostile/viscerator)) var/mob/living/L = AM @@ -193,6 +193,6 @@ /obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom) if(iscarbon(hit_atom)) var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom)) - B.Crossed(hit_atom) + B.Crossed(hit_atom, null) qdel(src) ..() diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 428bfcd8fab..4c8697da247 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -67,7 +67,7 @@ else return ..() -/obj/item/shard/Crossed(AM as mob|obj) +/obj/item/shard/Crossed(AM as mob|obj, oldloc) if(isliving(AM)) var/mob/living/M = AM if(M.incorporeal_move || M.flying || M.throwing)//you are incorporal or flying or being thrown ..no shard stepping! diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 713259e081c..3f638d44918 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -398,7 +398,7 @@ new /obj/item/gun/projectile/automatic/shotgun/bulldog(src) new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g(src) - new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/clothing/glasses/chameleon/thermal(src) /obj/item/storage/backpack/duffel/syndie/med/medicalbundle desc = "A large duffel bag containing a tactical medkit, a Donksoft machine gun and a big jumbo box of riot darts." diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index fab82df4b4e..8d8cb77e597 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -254,10 +254,21 @@ var/applying_meds = FALSE //To Prevent spam clicking and generating runtimes from apply a deleting pill multiple times. var/rapid_intake_message = "unscrews the cap on the pill bottle and begins dumping the entire contents down their throat!" var/rapid_post_instake_message = "downs the entire bottle of pills in one go!" + var/allow_wrap = TRUE + var/wrapper_color = null /obj/item/storage/pill_bottle/New() ..() base_name = name + if(allow_wrap) + apply_wrap() + +/obj/item/storage/pill_bottle/proc/apply_wrap() + if(wrapper_color) + overlays.Cut() + var/image/I = image(icon, "pillbottle_wrap") + I.color = wrapper_color + overlays += I /obj/item/storage/pill_bottle/attack(mob/M, mob/user) if(iscarbon(M) && contents.len) @@ -274,6 +285,9 @@ else return ..() +/obj/item/storage/pill_bottle/ert + wrapper_color = COLOR_MAROON + /obj/item/storage/pill_bottle/ert/New() ..() new /obj/item/reagent_containers/food/pill/salicylic(src) @@ -319,15 +333,18 @@ /obj/item/storage/pill_bottle/patch_pack name = "Patch Pack" + desc = "It's a container for storing medical patches." icon_state = "patch_pack" can_hold = list(/obj/item/reagent_containers/food/pill/patch) cant_hold = list() rapid_intake_message = "flips the lid of the Patch Pack open and begins rapidly stamping patches on themselves!" rapid_post_instake_message = "stamps the entire contents of the Patch Pack all over their entire body!" + allow_wrap = FALSE /obj/item/storage/pill_bottle/charcoal name = "Pill bottle (Charcoal)" desc = "Contains pills used to counter toxins." + wrapper_color = COLOR_GREEN New() ..() @@ -342,6 +359,7 @@ /obj/item/storage/pill_bottle/painkillers name = "Pill Bottle (Salicylic Acid)" desc = "Contains various pills for minor pain relief." + wrapper_color = COLOR_RED /obj/item/storage/pill_bottle/painkillers/New() ..() @@ -354,8 +372,11 @@ new /obj/item/reagent_containers/food/pill/salicylic(src) new /obj/item/reagent_containers/food/pill/salicylic(src) +/obj/item/storage/pill_bottle/fakedeath + allow_wrap = FALSE + /obj/item/storage/pill_bottle/fakedeath/New() ..() new /obj/item/reagent_containers/food/pill/fakedeath(src) new /obj/item/reagent_containers/food/pill/fakedeath(src) - new /obj/item/reagent_containers/food/pill/fakedeath(src) \ No newline at end of file + new /obj/item/reagent_containers/food/pill/fakedeath(src) diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 9cd4178aaf2..edccca3ff4a 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -116,15 +116,10 @@ /obj/item/storage/lockbox/medal/New() ..() - new /obj/item/clothing/accessory/medal/gold/heroism(src) - new /obj/item/clothing/accessory/medal/silver/security(src) - new /obj/item/clothing/accessory/medal/silver/valor(src) - new /obj/item/clothing/accessory/medal/nobel_science(src) - new /obj/item/clothing/accessory/medal/bronze_heart(src) - new /obj/item/clothing/accessory/medal/conduct(src) - new /obj/item/clothing/accessory/medal/conduct(src) - new /obj/item/clothing/accessory/medal/conduct(src) new /obj/item/clothing/accessory/medal/gold/captain(src) + new /obj/item/clothing/accessory/medal/silver/leadership(src) + new /obj/item/clothing/accessory/medal/silver/valor(src) + new /obj/item/clothing/accessory/medal/heart(src) /obj/item/storage/lockbox/t4 name = "lockbox (T4)" diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 5d31cc3f59b..3736d93f3f6 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -20,7 +20,7 @@ if("thief") // 40TC new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) // 12TC new /obj/item/chameleon(src) // 8TC - new /obj/item/clothing/glasses/thermal/syndi(src) // 6TC + new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC new /obj/item/clothing/gloves/color/black/thief(src) // 6TC new /obj/item/card/id/syndicate(src) // 2TC new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC @@ -108,7 +108,7 @@ new /obj/item/gun/projectile/automatic/sniper_rifle/syndicate/penetrator(src) // 16TC new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) // 5TC new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) // 3TC - new /obj/item/clothing/glasses/thermal/syndi/sunglasses(src) // 6TC + new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC new /obj/item/clothing/gloves/combat(src) // 0 TC new /obj/item/clothing/under/suit_jacket/really_black(src) // 0 TC new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index e7e91178890..15456386541 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -28,12 +28,15 @@ var/force_wielded = 0 var/wieldsound = null var/unwieldsound = null + var/sharp_when_wielded = FALSE /obj/item/twohanded/proc/unwield(mob/living/carbon/user) if(!wielded || !user) return wielded = FALSE force = force_unwielded + if(sharp_when_wielded) + sharp = FALSE var/sf = findtext(name," (Wielded)") if(sf) name = copytext(name, 1, sf) @@ -66,6 +69,8 @@ return wielded = TRUE force = force_wielded + if(sharp_when_wielded) + sharp = TRUE name = "[name] (Wielded)" update_icon() if(user) @@ -224,7 +229,7 @@ origin_tech = "magnets=4;syndicate=5" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 75 - sharp = TRUE + sharp_when_wielded = TRUE // only sharp when wielded light_power = 2 var/brightness_on = 2 var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index d23f4c9d606..bf13a05f691 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -235,14 +235,22 @@ var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive layer = MOB_LAYER +/obj/structure/alien/egg/grown + status = GROWN + icon_state = "egg" + +/obj/structure/alien/egg/burst + status = BURST + icon_state = "egg_hatched" /obj/structure/alien/egg/New() new /obj/item/clothing/mask/facehugger(src) ..() - spawn(rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) - Grow() if(status == BURST) obj_integrity = integrity_failure + else if(status != GROWN) + spawn(rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) + Grow() /obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user) return attack_hand(user) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 03b0172c959..2037293d734 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -452,7 +452,7 @@ icon_closed = transparent ? "bluespacetrans" : "bluespace" icon_state = opened ? icon_opened : icon_closed -/obj/structure/closet/bluespace/Crossed(atom/movable/AM) +/obj/structure/closet/bluespace/Crossed(atom/movable/AM, oldloc) if(AM.density) icon_state = opened ? "bluespaceopentrans" : "bluespacetrans" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index afb3ae15df4..0cd6e541398 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -38,6 +38,7 @@ new /obj/item/rpd(src) new /obj/item/reagent_containers/food/drinks/mug/ce(src) new /obj/item/organ/internal/cyberimp/eyes/meson(src) + new /obj/item/clothing/accessory/medal/engineering(src) /obj/structure/closet/secure_closet/engineering_electrical diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 5e300b0e7a0..189cbc5893d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -110,6 +110,7 @@ /obj/item/storage/pill_bottle/psychiatrist name = "psychiatrist's pill bottle" desc = "Contains various pills to calm or sedate patients." + wrapper_color = COLOR_PALE_BTL_GREEN /obj/item/storage/pill_bottle/psychiatrist/New() ..() @@ -193,6 +194,7 @@ new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src) new /obj/item/door_remote/chief_medical_officer(src) new /obj/item/reagent_containers/food/drinks/mug/cmo(src) + new /obj/item/clothing/accessory/medal/medical(src) /obj/structure/closet/secure_closet/animal diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 6be824a4246..4d688f65dac 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -77,7 +77,7 @@ new /obj/item/door_remote/research_director(src) new /obj/item/reagent_containers/food/drinks/mug/rd(src) new /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic(src) - + new /obj/item/clothing/accessory/medal/science(src) /obj/structure/closet/secure_closet/research_reagents name = "research chemical storage closet" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 746c9cb52ef..fe6b0082207 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -60,7 +60,7 @@ new /obj/item/clothing/accessory/petcollar(src) new /obj/item/door_remote/civillian(src) new /obj/item/reagent_containers/food/drinks/mug/hop(src) - + new /obj/item/clothing/accessory/medal/service(src) /obj/structure/closet/secure_closet/hop2 name = "head of personnel's attire" @@ -128,7 +128,7 @@ new /obj/item/door_remote/head_of_security(src) new /obj/item/reagent_containers/food/drinks/mug/hos(src) new /obj/item/organ/internal/cyberimp/eyes/hud/security(src) - + new /obj/item/clothing/accessory/medal/security(src) /obj/structure/closet/secure_closet/warden name = "warden's locker" @@ -464,4 +464,5 @@ new /obj/item/clothing/head/powdered_wig(src) new /obj/item/gavelblock(src) new /obj/item/gavelhammer(src) - new /obj/item/clothing/head/justice_wig(src) \ No newline at end of file + new /obj/item/clothing/head/justice_wig(src) + new /obj/item/clothing/accessory/medal/legal(src) \ No newline at end of file diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index eca9d524730..b21754cae96 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -226,6 +226,7 @@ door = new airlock_type(loc) door.setDir(dir) door.electronics = electronics + door.unres_sides = electronics.unres_sides door.heat_proof = heat_proof_finished if(electronics.one_access) door.req_access = null diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 9b777d45b58..4a70729d7e9 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -9,19 +9,26 @@ /obj/structure/falsewall name = "wall" desc = "A huge chunk of metal used to seperate rooms." - anchored = 1 + anchored = TRUE icon = 'icons/turf/walls/wall.dmi' icon_state = "wall" - var/mineral = "metal" - var/walltype = "metal" - var/opening = 0 - density = 1 - opacity = 1 + + var/mineral = /obj/item/stack/sheet/metal + var/mineral_amount = 2 + var/walltype = /turf/simulated/wall + var/girder_type = /obj/structure/girder/displaced + var/opening = FALSE + + density = TRUE + opacity = TRUE + + can_deconstruct = TRUE canSmoothWith = list( /turf/simulated/wall, /turf/simulated/wall/r_wall, /obj/structure/falsewall, + /obj/structure/falsewall/brass, /obj/structure/falsewall/reinforced, // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS. //because we do smooth with real r-walls now /turf/simulated/wall/rust, /turf/simulated/wall/r_wall/rust) @@ -31,6 +38,10 @@ ..() air_update_turf(1) +/obj/structure/falsewall/ratvar_act() + new /obj/structure/falsewall/brass(loc) + qdel(src) + /obj/structure/falsewall/Destroy() density = 0 air_update_turf(1) @@ -124,18 +135,11 @@ /obj/structure/falsewall/proc/dismantle(mob/user) user.visible_message("[user] dismantles the false wall.", "You dismantle the false wall.") - new /obj/structure/girder/displaced(loc) - if(mineral == "metal") - if(istype(src, /obj/structure/falsewall/reinforced)) - new /obj/item/stack/sheet/plasteel(loc, 2) - else - new /obj/item/stack/sheet/metal(loc, 2) - else if(mineral == "wood") - new/obj/item/stack/sheet/wood(loc, 2) - else - var/P = text2path("/obj/item/stack/sheet/mineral/[mineral]") - new P(loc) - new P(loc) + if(can_deconstruct) + new girder_type(loc) + if(mineral_amount) + for(var/i in 1 to mineral_amount) + new mineral(loc) playsound(src, 'sound/items/welder.ogg', 100, 1) qdel(src) @@ -148,7 +152,8 @@ desc = "A huge chunk of reinforced metal used to seperate rooms." icon = 'icons/turf/walls/reinforced_wall.dmi' icon_state = "r_wall" - walltype = "rwall" + walltype = /turf/simulated/wall/r_wall + mineral = /obj/item/stack/sheet/plasteel /obj/structure/falsewall/reinforced/ChangeToWall(delete = 1) var/turf/T = get_turf(src) @@ -166,8 +171,8 @@ desc = "A wall with uranium plating. This is probably a bad idea." icon = 'icons/turf/walls/uranium_wall.dmi' icon_state = "uranium" - mineral = "uranium" - walltype = "uranium" + mineral = /obj/item/stack/sheet/mineral/uranium + walltype = /turf/simulated/wall/mineral/uranium var/active = null var/last_event = 0 canSmoothWith = list(/obj/structure/falsewall/uranium, /turf/simulated/wall/mineral/uranium) @@ -201,8 +206,8 @@ desc = "A wall with gold plating. Swag!" icon = 'icons/turf/walls/gold_wall.dmi' icon_state = "gold" - mineral = "gold" - walltype = "gold" + mineral = /obj/item/stack/sheet/mineral/gold + walltype = /turf/simulated/wall/mineral/gold canSmoothWith = list(/obj/structure/falsewall/gold, /turf/simulated/wall/mineral/gold) /obj/structure/falsewall/silver @@ -210,8 +215,8 @@ desc = "A wall with silver plating. Shiny." icon = 'icons/turf/walls/silver_wall.dmi' icon_state = "silver" - mineral = "silver" - walltype = "silver" + mineral = /obj/item/stack/sheet/mineral/silver + walltype = /turf/simulated/wall/mineral/silver canSmoothWith = list(/obj/structure/falsewall/silver, /turf/simulated/wall/mineral/silver) /obj/structure/falsewall/diamond @@ -219,8 +224,8 @@ desc = "A wall with diamond plating. You monster." icon = 'icons/turf/walls/diamond_wall.dmi' icon_state = "diamond" - mineral = "diamond" - walltype = "diamond" + mineral = /obj/item/stack/sheet/mineral/diamond + walltype = /turf/simulated/wall/mineral/diamond canSmoothWith = list(/obj/structure/falsewall/diamond, /turf/simulated/wall/mineral/diamond) @@ -229,18 +234,18 @@ desc = "A wall with plasma plating. This is definately a bad idea." icon = 'icons/turf/walls/plasma_wall.dmi' icon_state = "plasma" - mineral = "plasma" - walltype = "plasma" + mineral = /obj/item/stack/sheet/mineral/plasma + walltype = /turf/simulated/wall/mineral/plasma canSmoothWith = list(/obj/structure/falsewall/plasma, /turf/simulated/wall/mineral/plasma, /turf/simulated/wall/mineral/alien) /obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params) if(is_hot(W) > 300) - message_admins("Plasma falsewall ignited by [key_name_admin(user)] in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma falsewall ignited by [key_name(user)] in ([x],[y],[z])") + message_admins("Plasma falsewall ignited by [key_name_admin(user)] in [ADMIN_VERBOSEJMP(T)]") + log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]") investigate_log("was ignited by [key_name(user)]","atmos") burnbabyburn() - return - ..() + else + return ..() /obj/structure/falsewall/plasma/proc/burnbabyburn(user) playsound(src, 'sound/items/welder.ogg', 100, 1) @@ -258,8 +263,8 @@ desc = "A strange-looking alien wall." icon = 'icons/turf/walls/plasma_wall.dmi' icon_state = "plasma" - mineral = "alien" - walltype = "alien" + mineral = /obj/item/stack/sheet/mineral/abductor + walltype = /turf/simulated/wall/mineral/abductor canSmoothWith = list(/obj/structure/falsewall/alien, /turf/simulated/wall/mineral/alien) @@ -268,16 +273,16 @@ desc = "A wall with bananium plating. Honk!" icon = 'icons/turf/walls/bananium_wall.dmi' icon_state = "bananium" - mineral = "clown" - walltype = "clown" + mineral = /obj/item/stack/sheet/mineral/bananium + walltype = /turf/simulated/wall/mineral/bananium canSmoothWith = list(/obj/structure/falsewall/bananium, /turf/simulated/wall/mineral/bananium) /obj/structure/falsewall/sandstone name = "sandstone wall" desc = "A wall with sandstone plating." icon_state = "sandstone" - mineral = "sandstone" - walltype = "sandstone" + mineral = /obj/item/stack/sheet/mineral/sandstone + walltype = /turf/simulated/wall/mineral/sandstone canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/simulated/wall/mineral/sandstone) /obj/structure/falsewall/wood @@ -285,8 +290,8 @@ desc = "A wall with wooden plating. Stiff." icon = 'icons/turf/walls/wood_wall.dmi' icon_state = "wood" - mineral = "wood" - walltype = "wood" + mineral = /obj/item/stack/sheet/wood + walltype = /turf/simulated/wall/mineral/wood canSmoothWith = list(/obj/structure/falsewall/wood, /turf/simulated/wall/mineral/wood) /obj/structure/falsewall/iron @@ -294,8 +299,9 @@ desc = "A wall with rough metal plating." icon = 'icons/turf/walls/iron_wall.dmi' icon_state = "iron" - mineral = "metal" - walltype = "iron" + mineral = /obj/item/stack/rods + mineral_amount = 5 + walltype = /turf/simulated/wall/mineral/iron canSmoothWith = list(/obj/structure/falsewall/iron, /turf/simulated/wall/mineral/iron) /obj/structure/falsewall/abductor @@ -303,8 +309,8 @@ desc = "A wall with alien alloy plating." icon = 'icons/turf/walls/abductor_wall.dmi' icon_state = "abductor" - mineral = "abductor" - walltype = "abductor" + mineral = /obj/item/stack/sheet/mineral/abductor + walltype = /turf/simulated/wall/mineral/abductor canSmoothWith = list(/obj/structure/falsewall/abductor, /turf/simulated/wall/mineral/abductor) /obj/structure/falsewall/titanium @@ -324,3 +330,23 @@ walltype = /turf/simulated/wall/mineral/plastitanium smooth = SMOOTH_MORE canSmoothWith = list(/turf/simulated/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater) + +/obj/structure/falsewall/brass + name = "clockwork wall" + desc = "A huge chunk of warm metal. The clanging of machinery emanates from within." + icon = 'icons/turf/walls/clockwork_wall.dmi' + icon_state = "clockwork_wall" + resistance_flags = FIRE_PROOF + unacidable = TRUE + mineral_amount = 1 + canSmoothWith = list(/obj/effect/clockwork/overlay/wall, /obj/structure/falsewall/brass) + girder_type = /obj/structure/clockwork/wall_gear/displaced + walltype = /turf/simulated/wall/clockwork + mineral = /obj/item/stack/tile/brass + +/obj/structure/falsewall/brass/New(loc) + ..() + var/turf/T = get_turf(src) + new /obj/effect/temp_visual/ratvar/wall/false(T) + new /obj/effect/temp_visual/ratvar/beam/falsewall(T) + diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 356d52e9d2a..a6a4f699314 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -63,3 +63,19 @@ /obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off." icon_state = "drake_statue_falling" + +/obj/structure/fluff/divine + name = "Miracle" + icon = 'icons/obj/hand_of_god_structures.dmi' + anchored = TRUE + density = TRUE + +/obj/structure/fluff/divine/nexus + name = "nexus" + desc = "It anchors a deity to this world. It radiates an unusual aura. It looks well protected from explosive shock." + icon_state = "nexus" + +/obj/structure/fluff/divine/conduit + name = "conduit" + desc = "It allows a deity to extend their reach. Their powers are just as potent near a conduit as a nexus." + icon_state = "conduit" \ No newline at end of file diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 134a0767024..c1233aaee0c 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -32,6 +32,8 @@ if(resistance_flags & INDESTRUCTIBLE) return if(istype(C, /obj/item/wirecutters)) + var/obj/item/wirecutters/W = C + playsound(loc, W.usesound, 50, 1) to_chat(user, "Slicing [name] joints...") deconstruct() else @@ -58,6 +60,26 @@ if(current_size >= STAGE_FOUR) qdel(src) +/obj/structure/lattice/clockwork + name = "cog lattice" + desc = "A lightweight support lattice. These hold the Justicar's station together." + icon = 'icons/obj/smooth_structures/lattice_clockwork.dmi' + +/obj/structure/lattice/clockwork/Initialize(mapload) + . = ..() + ratvar_act() + +/obj/structure/lattice/clockwork/ratvar_act() + if((x + y) % 2 != 0) + icon = 'icons/obj/smooth_structures/lattice_clockwork_large.dmi' + pixel_x = -9 + pixel_y = -9 + else + icon = 'icons/obj/smooth_structures/lattice_clockwork.dmi' + pixel_x = 0 + pixel_y = 0 + return TRUE + /obj/structure/lattice/catwalk name = "catwalk" desc = "A catwalk for easier EVA maneuvering and cable placement." @@ -81,3 +103,30 @@ for(var/obj/structure/cable/C in T) C.deconstruct() ..() + +/obj/structure/lattice/catwalk/clockwork + name = "clockwork catwalk" + icon = 'icons/obj/smooth_structures/catwalk_clockwork.dmi' + canSmoothWith = list(/obj/structure/lattice, + /turf/simulated/floor, + /turf/simulated/wall, + /obj/structure/falsewall) + smooth = SMOOTH_MORE + +/obj/structure/lattice/catwalk/clockwork/Initialize(mapload) + . = ..() + ratvar_act() + if(!mapload) + new /obj/effect/temp_visual/ratvar/floor/catwalk(loc) + new /obj/effect/temp_visual/ratvar/beam/catwalk(loc) + +/obj/structure/lattice/catwalk/clockwork/ratvar_act() + if((x + y) % 2 != 0) + icon = 'icons/obj/smooth_structures/catwalk_clockwork_large.dmi' + pixel_x = -9 + pixel_y = -9 + else + icon = 'icons/obj/smooth_structures/catwalk_clockwork.dmi' + pixel_x = 0 + pixel_y = 0 + return TRUE diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index d8898a7d671..923fab9e885 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -6,7 +6,6 @@ icon_state = "mirror" density = 0 anchored = 1 - var/shattered = 0 var/list/ui_users = list() /obj/structure/mirror/New(turf/T, newdir = SOUTH, building = FALSE) @@ -23,7 +22,7 @@ pixel_x = 32 /obj/structure/mirror/attack_hand(mob/user) - if(shattered) + if(broken) return if(ishuman(user)) @@ -36,9 +35,9 @@ AC.ui_interact(user) /obj/structure/mirror/proc/shatter() - if(shattered) + if(broken) return - shattered = 1 + broken = TRUE icon_state = "mirror_broke" playsound(src, "shatter", 70, 1) desc = "Oh no, seven years of bad luck!" @@ -46,7 +45,7 @@ /obj/structure/mirror/bullet_act(obj/item/projectile/Proj) if(prob(Proj.damage * 2)) - if(!shattered) + if(!broken) shatter() else playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) @@ -58,7 +57,7 @@ if(isscrewdriver(I)) user.visible_message("[user] begins to unfasten [src].", "You begin to unfasten [src].") if(do_after(user, 30 * I.toolspeed, target = src)) - if(shattered) + if(broken) user.visible_message("[user] drops the broken shards to the floor.", "You drop the broken shards on the floor.") new /obj/item/shard(get_turf(user)) else @@ -68,7 +67,7 @@ return user.do_attack_animation(src) - if(shattered) + if(broken) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return @@ -85,7 +84,7 @@ if(islarva(user)) return user.do_attack_animation(src) - if(shattered) + if(broken) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return user.visible_message("[user] smashes [src]!") @@ -100,7 +99,7 @@ if(M.melee_damage_upper <= 0) return M.do_attack_animation(src) - if(shattered) + if(broken) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return user.visible_message("[user] smashes [src]!") @@ -113,7 +112,7 @@ if(!S.is_adult) return user.do_attack_animation(src) - if(shattered) + if(broken) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return user.visible_message("[user] smashes [src]!") @@ -136,7 +135,7 @@ icon_state = "magic_mirror" /obj/structure/mirror/magic/attack_hand(mob/user) - if(!ishuman(user)) + if(!ishuman(user) || broken) return var/mob/living/carbon/human/H = user @@ -154,6 +153,9 @@ H.dna.real_name = newname if(H.mind) H.mind.name = newname + + if(newname) + curse(user) if("Body") var/list/race_list = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin") @@ -172,6 +174,7 @@ AC.whitelist = race_list ui_users[user] = AC AC.ui_interact(user) + if("Voice") var/voice_choice = input(user, "Perhaps...", "Voice effects") as null|anything in list("Comic Sans", "Wingdings", "Swedish", "Chav") var/voice_mutation @@ -192,8 +195,17 @@ H.dna.SetSEState(voice_mutation, TRUE) genemutcheck(H, voice_mutation, null, MUTCHK_FORCED) + if(voice_choice) + curse(user) + +/obj/structure/mirror/magic/on_ui_close(mob/user) + curse(user) + /obj/structure/mirror/magic/attackby(obj/item/I, mob/living/user, params) return /obj/structure/mirror/magic/shatter() - return //can't be broken. it's magic, i ain't gotta explain shit \ No newline at end of file + return //can't be broken. it's magic, i ain't gotta explain shit + +/obj/structure/mirror/magic/proc/curse(mob/living/user) + return \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 903ee22c683..15e578ed88f 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -28,6 +28,11 @@ W.setDir(dir) qdel(src) +/obj/structure/chair/ratvar_act() + var/obj/structure/chair/brass/B = new(get_turf(src)) + B.setDir(dir) + qdel(src) + /obj/structure/chair/Move(atom/newloc, direct) ..() handle_rotation() @@ -59,6 +64,12 @@ if(usr.incapacitated()) to_chat(usr, "You can't do that right now!") return + if(!usr.has_right_hand() && !usr.has_left_hand()) + to_chat(usr, "You try to grab the chair, but you are missing both of your hands!") + return + if(usr.get_active_hand() && usr.get_inactive_hand()) + to_chat(usr, "You try to grab the chair, but your hands are already full!") + return if(!ishuman(usr)) return usr.visible_message("[usr] grabs \the [src.name].", "You grab \the [src.name].") @@ -146,35 +157,38 @@ name = "comfy chair" desc = "It looks comfy." icon_state = "comfychair" - color = rgb(255,255,255) + color = rgb(255, 255, 255) burn_state = FLAMMABLE burntime = 30 buildstackamount = 2 item_chair = null var/image/armrest = null -/obj/structure/chair/comfy/New() - armrest = image("icons/obj/chairs.dmi", "comfychair_armrest") +/obj/structure/chair/comfy/Initialize(mapload) + armrest = GetArmrest() armrest.layer = ABOVE_MOB_LAYER return ..() +/obj/structure/chair/comfy/proc/GetArmrest() + return mutable_appearance('icons/obj/chairs.dmi', "comfychair_armrest") + /obj/structure/chair/comfy/Destroy() QDEL_NULL(armrest) return ..() /obj/structure/chair/comfy/post_buckle_mob(mob/living/M) - ..() - if(buckled_mob) - overlays += armrest - else - overlays -= armrest + . = ..() + update_armrest() /obj/structure/chair/comfy/post_unbuckle_mob(mob/living/M) - ..() - if(buckled_mob) - overlays -= armrest + . = ..() + update_armrest() + +/obj/structure/chair/comfy/proc/update_armrest() + if(has_buckled_mobs()) + add_overlay(armrest) else - overlays += armrest + cut_overlay(armrest) /obj/structure/chair/comfy/brown color = rgb(141,70,0) @@ -209,6 +223,14 @@ item_chair = null buildstackamount = 5 +/obj/structure/chair/comfy/shuttle + name = "shuttle seat" + desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." + icon_state = "shuttle_chair" + +/obj/structure/chair/comfy/shuttle/GetArmrest() + return mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest") + /obj/structure/chair/office/Bump(atom/A) ..() if(!buckled_mob) @@ -416,3 +438,41 @@ desc = "You sit in this. Either by will or force. Looks REALLY uncomfortable." icon_state = "chairold" item_chair = null + +// Brass chair +/obj/structure/chair/brass + name = "brass chair" + desc = "A spinny chair made of brass. It looks uncomfortable." + icon_state = "brass_chair" + max_integrity = 150 + buildstacktype = /obj/item/stack/tile/brass + buildstackamount = 1 + item_chair = null + var/turns = 0 + +/obj/structure/chair/brass/Destroy() + STOP_PROCESSING(SSfastprocess, src) + . = ..() + +/obj/structure/chair/brass/process() + setDir(turn(dir,-90)) + playsound(src, 'sound/effects/servostep.ogg', 50, FALSE) + turns++ + if(turns >= 8) + STOP_PROCESSING(SSfastprocess, src) + +/obj/structure/chair/brass/ratvar_act() + return + +/obj/structure/chair/brass/AltClick(mob/living/user) + turns = 0 + if(!istype(user) || user.incapacitated() || !in_range(src, user)) + return + if(!isprocessing) + user.visible_message("[user] spins [src] around, and Ratvarian technology keeps it spinning FOREVER.", \ + "Automated spinny chairs. The pinnacle of Ratvarian technology.") + START_PROCESSING(SSfastprocess, src) + else + user.visible_message("[user] stops [src]'s uncontrollable spinning.", \ + "You grab [src] and stop its wild spinning.") + STOP_PROCESSING(SSfastprocess, src) \ No newline at end of file diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 999e90cd89f..ac013ebcf93 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -377,7 +377,7 @@ qdel(i) . = ..() -/obj/structure/table/glass/Crossed(atom/movable/AM) +/obj/structure/table/glass/Crossed(atom/movable/AM, oldloc) . = ..() if(!can_deconstruct) return diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 726d9a88a7f..ada70921c99 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -363,7 +363,7 @@ qdel(mymist) ismist = 0 -/obj/machinery/shower/Crossed(atom/movable/O) +/obj/machinery/shower/Crossed(atom/movable/O, oldloc) ..() wash(O) if(ismob(O)) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index ddf71b96798..5c8f2022189 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -111,18 +111,35 @@ /turf/simulated/floor/clockwork name = "clockwork floor" desc = "Tightly-pressed brass tiles. They emit minute vibration." - icon_state = "clockwork_floor" + icon_state = "plating" + baseturf = /turf/simulated/floor/clockwork + var/dropped_brass + var/uses_overlay = TRUE + var/obj/effect/clockwork/overlay/floor/realappearence -/turf/simulated/floor/clockwork/New() - ..() - new /obj/effect/temp_visual/ratvar/floor(src) - new /obj/effect/temp_visual/ratvar/beam(src) +/turf/simulated/floor/clockwork/Initialize(mapload) + . = ..() + if(uses_overlay) + new /obj/effect/temp_visual/ratvar/floor(src) + new /obj/effect/temp_visual/ratvar/beam(src) + realappearence = new /obj/effect/clockwork/overlay/floor(src) + realappearence.linked = src + +/turf/simulated/floor/clockwork/Destroy() + if(uses_overlay && realappearence) + QDEL_NULL(realappearence) + return ..() + +/turf/simulated/floor/clockwork/ReplaceWithLattice() + . = ..() + for(var/obj/structure/lattice/L in src) + L.ratvar_act() /turf/simulated/floor/clockwork/attackby(obj/item/I, mob/living/user, params) if(iscrowbar(I)) user.visible_message("[user] begins slowly prying up [src]...", "You begin painstakingly prying up [src]...") playsound(src, I.usesound, 20, 1) - if(!do_after(user, 70*I.toolspeed, target = src)) + if(!do_after(user, 70 * I.toolspeed, target = src)) return 0 user.visible_message("[user] pries up [src]!", "You pry up [src]!") playsound(src, I.usesound, 80, 1) @@ -131,7 +148,11 @@ return ..() /turf/simulated/floor/clockwork/make_plating() - new /obj/item/stack/tile/brass(src) + if(!dropped_brass) + new /obj/item/stack/tile/brass(src) + dropped_brass = TRUE + if(baseturf == type) + return return ..() /turf/simulated/floor/clockwork/narsie_act() @@ -140,3 +161,12 @@ var/previouscolor = color color = "#960000" animate(src, color = previouscolor, time = 8) + addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8) + +/turf/simulated/floor/clockwork/reebe + name = "cogplate" + desc = "Warm brass plating. You can feel it gently vibrating, as if machinery is on the other side." + icon_state = "reebe" + baseturf = /turf/simulated/floor/clockwork/reebe + uses_overlay = FALSE + planetary_atmos = TRUE diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index cf514a43d96..2ef4602d268 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -17,6 +17,14 @@ icon_plating = icon_state update_icon() +/turf/simulated/floor/plating/damaged/New() + ..() + break_tile() + +/turf/simulated/floor/plating/burnt/New() + ..() + burn_tile() + /turf/simulated/floor/plating/update_icon() if(!..()) return diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 8163bc75acc..5a8f842307e 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -22,6 +22,7 @@ heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through. + var/slicing_duration = 100 var/engraving //engraving on the wall var/engraving_quality @@ -340,7 +341,7 @@ to_chat(user, "You begin slicing through the outer plating.") playsound(src, WT.usesound, 100, 1) - if(do_after(user, 100 * WT.toolspeed, target = src) && WT && WT.isOn()) + if(do_after(user, slicing_duration * WT.toolspeed, target = src) && WT && WT.isOn()) to_chat(user, "You remove the outer plating.") dismantle_wall() else diff --git a/code/game/turfs/simulated/walls_indestructible.dm b/code/game/turfs/simulated/walls_indestructible.dm index 0357578c762..e25992a2555 100644 --- a/code/game/turfs/simulated/walls_indestructible.dm +++ b/code/game/turfs/simulated/walls_indestructible.dm @@ -69,4 +69,8 @@ desc = "A wall made out of smooth, cold stone." icon = 'icons/turf/walls/hierophant_wall.dmi' icon_state = "hierophant" - smooth = SMOOTH_TRUE \ No newline at end of file + smooth = SMOOTH_TRUE + +/turf/simulated/wall/indestructible/uranium + icon = 'icons/turf/walls/uranium_wall.dmi' + icon_state = "uranium" \ No newline at end of file diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 9b4cba19f0a..b2d6b40c123 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -50,3 +50,100 @@ desc = "A huge chunk of reinforced metal used to seperate rooms. It seems to have additional plating to protect against heat." icon = 'icons/turf/walls/coated_reinforced_wall.dmi' max_temperature = INFINITY + +//Clockwork walls +/turf/simulated/wall/clockwork + name = "clockwork wall" + desc = "A huge chunk of warm metal. The clanging of machinery emanates from within." + explosion_block = 2 + hardness = 10 + slicing_duration = 80 + sheet_type = /obj/item/stack/tile/brass + sheet_amount = 1 + girder_type = /obj/structure/clockwork/wall_gear + baseturf = /turf/simulated/floor/clockwork/reebe + var/heated + var/obj/effect/clockwork/overlay/wall/realappearance + +/turf/simulated/wall/clockwork/Initialize() + . = ..() + new /obj/effect/temp_visual/ratvar/wall(src) + new /obj/effect/temp_visual/ratvar/beam(src) + realappearance = new /obj/effect/clockwork/overlay/wall(src) + realappearance.linked = src + +/turf/simulated/wall/clockwork/Destroy() + if(realappearance) + qdel(realappearance) + realappearance = null + + return ..() + +/turf/simulated/wall/clockwork/ReplaceWithLattice() + ..() + for(var/obj/structure/lattice/L in src) + L.ratvar_act() + +/turf/simulated/wall/clockwork/narsie_act() + ..() + if(istype(src, /turf/simulated/wall/clockwork)) //if we haven't changed type + var/previouscolor = color + color = "#960000" + animate(src, color = previouscolor, time = 8) + addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8) + +/turf/simulated/wall/clockwork/dismantle_wall(devastated=0, explode=0) + if(devastated) + devastate_wall() + ChangeTurf(baseturf) + else + playsound(src, 'sound/items/welder.ogg', 100, 1) + var/newgirder = break_wall() + if(newgirder) //maybe we want a gear! + transfer_fingerprints_to(newgirder) + ChangeTurf(baseturf) + + for(var/obj/O in src) //Eject contents! + if(istype(O, /obj/structure/sign/poster)) + var/obj/structure/sign/poster/P = O + P.roll_and_drop(src) + else + O.forceMove(src) + +/turf/simulated/wall/clockwork/devastate_wall() + for(var/i in 1 to 2) + new/obj/item/clockwork/alloy_shards/large(src) + for(var/i in 1 to 2) + new/obj/item/clockwork/alloy_shards/medium(src) + for(var/i in 1 to 3) + new/obj/item/clockwork/alloy_shards/small(src) + +/turf/simulated/wall/clockwork/attack_hulk(mob/living/user, does_attack_animation = 0) + ..() + if(heated) + to_chat(user, "The wall is searing hot to the touch!") + user.adjustFireLoss(5) + playsound(src, 'sound/machines/fryer/deep_fryer_emerge.ogg', 50, TRUE) + +/turf/simulated/wall/clockwork/mech_melee_attack(obj/mecha/M) + ..() + if(heated) + to_chat(M.occupant, "The wall's intense heat completely reflects your [M.name]'s attack!") + M.take_damage(20, BURN) + +/turf/simulated/wall/clockwork/proc/turn_up_the_heat() + if(!heated) + name = "superheated [name]" + visible_message("[src] sizzles with heat!") + playsound(src, 'sound/machines/fryer/deep_fryer_emerge.ogg', 50, TRUE) + heated = TRUE + hardness = -100 //Lower numbers are tougher, so this makes the wall essentially impervious to smashing + slicing_duration = 150 + animate(realappearance, color = "#FFC3C3", time = 5) + else + name = initial(name) + visible_message("[src] cools down.") + heated = FALSE + hardness = initial(hardness) + slicing_duration = initial(slicing_duration) + animate(realappearance, color = initial(realappearance.color), time = 25) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index 8febe20e840..0b171dac199 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -229,3 +229,19 @@ setCloneLoss(100, FALSE) updatehealth() + +/mob/living/simple_animal/mouse/verb/suicide() + set hidden = 1 + if(stat == DEAD) + to_chat(src, "You're already dead!") + return + if(suiciding) + to_chat(src, "You're already committing suicide! Be patient!") + return + + var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") + + if(confirm == "Yes") + suiciding = TRUE + visible_message("[src] is playing dead permanently! It looks like [p_theyre()] trying to commit suicide.") + adjustOxyLoss(max(100 - getBruteLoss(100), 0)) \ No newline at end of file diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 9245f5174ce..045819c365b 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -108,7 +108,7 @@ world/IsBanned(key, address, computer_id, check_ipintel = TRUE) var/appealmessage = "" if(config.banappeals) appealmessage = " You may appeal it at [config.banappeals]." - expires = " This is a permanent ban.[appealmessage]" + expires = " This ban does not expire automatically and must be appealed.[appealmessage]" var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime].[expires]" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 06c2361b90a..1176e733dde 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -77,9 +77,11 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_mentor_chat, /client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/ /client/proc/list_ssds, + /client/proc/list_afks, /client/proc/cmd_admin_headset_message, /client/proc/spawn_floor_cluwne, - /client/proc/show_discord_duplicates, + /client/proc/show_discord_duplicates, // This needs removing at some point, ingame discord linking got removed in #11359 + /client/proc/toggle_panic_bunker ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -475,7 +477,7 @@ var/list/admin_verbs_ticket = list( if(holder.fakekey) holder.fakekey = null else - var/new_key = ckeyEx(input("Enter your desired display name.", "Fake Key", key) as text|null) + var/new_key = ckeyEx(clean_input("Enter your desired display name.", "Fake Key", key)) if(!new_key) return if(length(new_key) >= 26) new_key = copytext(new_key, 1, 26) @@ -497,7 +499,7 @@ var/list/admin_verbs_ticket = list( holder.fakekey = null holder.big_brother = 0 else - var/new_key = ckeyEx(input("Enter your desired display name. Unlike normal stealth mode, this will not appear in Who at all, except for other heads.", "Fake Key", key) as text|null) + var/new_key = ckeyEx(clean_input("Enter your desired display name. Unlike normal stealth mode, this will not appear in Who at all, except for other heads.", "Fake Key", key)) if(!new_key) return if(length(new_key) >= 26) @@ -638,11 +640,11 @@ var/list/admin_verbs_ticket = list( return if(O) - var/message = input("What do you want the message to be?", "Make Sound") as text|null + var/message = clean_input("What do you want the message to be?", "Make Sound") if(!message) return for(var/mob/V in hearers(O)) - V.show_message(message, 2) + V.show_message(admin_pencode_to_html(message), 2) log_admin("[key_name(usr)] made [O] at [O.x], [O.y], [O.z] make a sound") message_admins("[key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z] make a sound") feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -889,7 +891,7 @@ var/list/admin_verbs_ticket = list( to_chat(usr, "Your attack logs preference is now: show ALMOST ALL attack logs (notable exceptions: NPCs attacking other NPCs, vampire bites, equipping/stripping, people pushing each other over)") else if(prefs.atklog == ATKLOG_ALMOSTALL) prefs.atklog = ATKLOG_MOST - to_chat(usr, "Your attack logs preference is now: show MOST attack logs (like ALMOST ALL, except that it also hides attacks by players on NPCs)") + to_chat(usr, "Your attack logs preference is now: show MOST attack logs (like ALMOST ALL, except that it also hides player v. NPC combat, and certain areas like lavaland syndie base and thunderdome)") else if(prefs.atklog == ATKLOG_MOST) prefs.atklog = ATKLOG_FEW to_chat(usr, "Your attack logs preference is now: show FEW attack logs (only the most important stuff: attacks on SSDs, use of explosives, messing with the engine, gibbing, AI wiping, forcefeeding, acid sprays, and organ extraction)") @@ -1026,4 +1028,17 @@ var/list/admin_verbs_ticket = list( if(!check_rights(R_ADMIN)) return - holder.discord_duplicates() \ No newline at end of file + holder.discord_duplicates() + +/client/proc/toggle_panic_bunker() + set name = "Toggle Panic Bunker" + set category = "Admin" + set desc = "Disables new players connecting." + + if(!check_rights(R_ADMIN)) + return + + GLOB.panic_bunker_enabled = !GLOB.panic_bunker_enabled + + log_admin("[key_name(usr)] has [GLOB.panic_bunker_enabled ? "activated" : "deactivated"] the panic bunker.") + message_admins("[key_name_admin(usr)] has [GLOB.panic_bunker_enabled ? "activated" : "deactivated"] the panic bunker.") diff --git a/code/modules/admin/sql_notes.dm b/code/modules/admin/sql_notes.dm index 9024959b943..18112f584c2 100644 --- a/code/modules/admin/sql_notes.dm +++ b/code/modules/admin/sql_notes.dm @@ -5,7 +5,7 @@ to_chat(usr, "Failed to establish database connection.") return if(!target_ckey) - var/new_ckey = ckey(input(usr,"Who would you like to add a note for?","Enter a ckey",null) as text|null) + var/new_ckey = ckey(clean_input("Who would you like to add a note for?","Enter a ckey",null)) if(!new_ckey) return new_ckey = ckey(new_ckey) diff --git a/code/modules/admin/stickyban.dm b/code/modules/admin/stickyban.dm index bddebcff602..61759f2e36d 100644 --- a/code/modules/admin/stickyban.dm +++ b/code/modules/admin/stickyban.dm @@ -16,7 +16,7 @@ if(data["ckey"]) ckey = ckey(data["ckey"]) else - ckey = input(usr,"Ckey","Ckey","") as text|null + ckey = clean_input("Ckey","Ckey","") if(!ckey) return ckey = ckey(ckey) @@ -26,7 +26,7 @@ if(data["reason"]) ban["message"] = data["reason"] else - var/reason = input(usr,"Reason","Reason","Ban Evasion") as text|null + var/reason = clean_input("Reason","Reason","Ban Evasion") if(!reason) return ban["message"] = "[reason]" @@ -112,7 +112,7 @@ to_chat(usr, "Error: No sticky ban for [ckey] found!") return var/oldreason = ban["message"] - var/reason = input(usr,"Reason","Reason","[ban["message"]]") as text|null + var/reason = clean_input("Reason","Reason","[ban["message"]]") if(!reason || reason == oldreason) return //we have to do this again incase something changed while we waited for input diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ffa33df033f..be136204739 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -189,7 +189,7 @@ var/task = href_list["editrights"] if(task == "add") - var/new_ckey = ckey(input(usr,"New admin's ckey","Admin ckey", null) as text|null) + var/new_ckey = ckey(clean_input("New admin's ckey","Admin ckey", null)) if(!new_ckey) return if(new_ckey in admin_datums) to_chat(usr, "Error: Topic 'editrights': [new_ckey] is already an admin") @@ -1015,14 +1015,14 @@ return AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP) to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason].") - to_chat(M, "This is a permanent ban.") + to_chat(M, "This ban does not expire automatically and must be appealed.") if(config.banappeals) to_chat(M, "To try to resolve this matter head to [config.banappeals]") else to_chat(M, "No ban appeals URL has been set.") - ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.") - log_admin("[key_name(usr)] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.") - message_admins("[key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.") + ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This ban does not expire automatically and must be appealed.") + log_admin("[key_name(usr)] has banned [M.ckey].\nReason: [reason]\nThis ban does not expire automatically and must be appealed.") + message_admins("[key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis ban does not expire automatically and must be appealed.") feedback_inc("ban_perma",1) DB_ban_record(BANTYPE_PERMA, M, -1, reason) @@ -1700,7 +1700,7 @@ var/eviltype = input(src.owner, "Which type of evil fax do you wish to send [H]?","Its good to be baaaad...", "") as null|anything in etypes if(!(eviltype in etypes)) return - var/customname = input(src.owner, "Pick a title for the evil fax.", "Fax Title") as text|null + var/customname = clean_input("Pick a title for the evil fax.", "Fax Title", , owner) if(!customname) customname = "paper" var/obj/item/paper/evilfax/P = new /obj/item/paper/evilfax(null) @@ -2001,7 +2001,7 @@ if(!istype(H)) to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return - if(!isLivingSSD(H)) + if(!href_list["cryoafk"] && !isLivingSSD(H)) to_chat(usr, "This can only be used on living, SSD players.") return if(istype(H.loc, /obj/machinery/cryopod)) @@ -2012,6 +2012,11 @@ else if(cryo_ssd(H)) log_admin("[key_name(usr)] sent [H.job] [H] to cryo.") message_admins("[key_name_admin(usr)] sent [H.job] [H] to cryo.") + if(href_list["cryoafk"]) // Warn them if they are send to storage and are AFK + to_chat(H, "The admins have moved you to cryo storage for being AFK. Please eject yourself (right click, eject) out of the cryostorage if you want to avoid being despawned.") + SEND_SOUND(H, 'sound/effects/adminhelp.ogg') + if(H.client) + window_flash(H.client) else if(href_list["FaxReplyTemplate"]) if(!check_rights(R_ADMIN)) return @@ -2181,9 +2186,9 @@ if(!input) qdel(P) return - input = P.parsepencode(input) // Encode everything from pencode to html + input = admin_pencode_to_html(html_encode(input)) // Encode everything from pencode to html - var/customname = input(src.owner, "Pick a title for the fax.", "Fax Title") as text|null + var/customname = clean_input("Pick a title for the fax.", "Fax Title", , owner) if(!customname) customname = "paper" @@ -2216,14 +2221,14 @@ if("clown") stampvalue = "clown" else if(stamptype == "text") - stampvalue = input(src.owner, "What should the stamp say?", "Stamp Text") as text|null + stampvalue = clean_input("What should the stamp say?", "Stamp Text", , owner) else if(stamptype == "none") stamptype = "" else qdel(P) return - sendername = input(src.owner, "What organization does the fax come from? This determines the prefix of the paper (i.e. Central Command- Title). This is optional.", "Organization") as text|null + sendername = clean_input("What organization does the fax come from? This determines the prefix of the paper (i.e. Central Command- Title). This is optional.", "Organization", , owner) if(sender) notify = alert(src.owner, "Would you like to inform the original sender that a fax has arrived?","Notify Sender","Yes","No") @@ -3283,7 +3288,7 @@ return var/datum/station_goal/G = new picked() if(picked == /datum/station_goal) - var/newname = input("Enter goal name:") as text|null + var/newname = clean_input("Enter goal name:") if(!newname) return G.name = newname diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 8c5d76e62e1..853b367e15b 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -18,7 +18,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," var/list/type = list("Mentorhelp","Adminhelp") var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type if(selected_type) - msg = input("Please enter your message.", "Admin Help", null, null) as text|null + msg = clean_input("Please enter your message.", "Admin Help", null) //clean the input msg if(!msg) @@ -27,7 +27,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN)) return - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) + msg = sanitize_simple(copytext(msg,1,MAX_MESSAGE_LEN)) if(!msg) return var/original_msg = msg diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 83531c9b0b9..e2482c54d7c 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -3,7 +3,7 @@ set category = null set name = "Admin PM Mob" if(!holder) - to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.") return if( !ismob(M) || !M.client ) return cmd_admin_pm(M.client,null) @@ -14,7 +14,7 @@ set category = "Admin" set name = "Admin PM Name" if(!holder) - to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") return var/list/client/targets[0] for(var/client/T) @@ -37,7 +37,7 @@ set category = "Admin" set name = "Admin PM Key" if(!holder) - to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") + to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.") return var/list/client/targets[0] for(var/client/T) @@ -60,7 +60,7 @@ //Fetching a message if needed. src is the sender and C is the target client /client/proc/cmd_admin_pm(whom, msg, type = "PM") if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") + to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") return var/client/C @@ -89,7 +89,7 @@ //get message text, limit it's length.and clean/escape html if(!msg) set_typing(C, TRUE) - msg = input(src,"Message:", "Private message to [holder ? key_name(C, FALSE) : key_name_hidden(C, FALSE)]") as text|null + msg = clean_input("Message:", "Private message to [holder ? key_name(C, FALSE) : key_name_hidden(C, FALSE)]", , src) set_typing(C, FALSE) if(!msg) @@ -106,9 +106,11 @@ //clean the message if it's not sent by a high-rank admin if(!check_rights(R_SERVER|R_DEBUG,0)) - msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) + msg = sanitize_simple(copytext(msg,1,MAX_MESSAGE_LEN)) if(!msg) return + else + msg = admin_pencode_to_html(msg) var/recieve_span = "playerreply" var/send_pm_type = " " @@ -127,7 +129,7 @@ recieve_pm_type = holder.rank else if(!C.holder) - to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") + to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") return var/recieve_message = "" @@ -147,7 +149,7 @@ spawn(0) //so we don't hold the caller proc up var/sender = src var/sendername = key - var/reply = input(C, msg,"[recieve_pm_type] [type] from-[sendername]", "") as text|null //show message and await a reply + var/reply = clean_input(msg,"[recieve_pm_type] [type] from-[sendername]", "", C) //show message and await a reply if(C && reply) if(sender) C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them @@ -159,7 +161,7 @@ var/emoji_msg = "[msg]" recieve_message = "[type] from-[recieve_pm_type][C.holder ? key_name(src, TRUE, type) : key_name_hidden(src, TRUE, type)]: [emoji_msg]" to_chat(C, recieve_message) - to_chat(src, "[send_pm_type][type] to-[holder ? key_name(C, TRUE, type) : key_name_hidden(C, TRUE, type)]: [emoji_msg]") + to_chat(src, "[send_pm_type][type] to-[holder ? key_name(C, TRUE, type) : key_name_hidden(C, TRUE, type)]: [emoji_msg]") /*if(holder && !C.holder) C.last_pm_recieved = world.time @@ -213,10 +215,10 @@ /client/proc/cmd_admin_irc_pm() if(prefs.muted & MUTE_ADMINHELP) - to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") + to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") return - var/msg = input(src,"Message:", "Private message to admins on IRC / 400 character limit") as text|null + var/msg = clean_input("Message:", "Private message to admins on IRC / 400 character limit", , src) as text|null if(!msg) return @@ -230,14 +232,14 @@ send2adminirc("PlayerPM from [key_name(src)]: [html_decode(msg)]") - to_chat(src, "IRC PM to-IRC-Admins: [msg]") + to_chat(src, "IRC PM to-IRC-Admins: [msg]") log_admin("PM: [key_name(src)]->IRC: [msg]") for(var/client/X in GLOB.admins) if(X == src) continue if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) - to_chat(X, "PM: [key_name(src, TRUE, 0)]->IRC-Admins: [msg]") + to_chat(X, "PM: [key_name(src, TRUE, 0)]->IRC-Admins: [msg]") /client/verb/open_pms_ui() set name = "My PMs" 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..2c7c6181b1d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -54,10 +54,13 @@ 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 + + msg = admin_pencode_to_html(msg) + if(usr) if(usr.client) if(usr.client.holder) @@ -109,10 +112,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 +135,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 = admin_pencode_to_html(msg) to_chat(M, msg) log_admin("DirectNarrate: [key_name(usr)] to ([key_name(M)]): [msg]") @@ -169,7 +174,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 +555,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,9 +608,9 @@ 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 @@ -1001,6 +1006,57 @@ Traitors and the like can also be revived with the previous role mostly intact. msg += "" src << browse(msg, "window=Player_ssd_check") +/client/proc/list_afks() + set category = "Admin" + set name = "List AFKs" + set desc = "Lists AFK players" + + if(!check_rights(R_ADMIN)) + return + + var/msg = "AFK Report" + msg += "AFK Players:
" + msg += "" + var/mins_afk + var/job_string + var/key_string + var/role_string + for(var/mob/living/carbon/human/H in GLOB.living_mob_list) + if(H.client == null || H.stat == DEAD) // No clientless or dead + continue + mins_afk = round(H.client.inactivity / 600) + if(mins_afk < config.list_afk_minimum) + continue + if(H.job) + job_string = H.job + else + job_string = "-" + key_string = H.key + if(job_string in command_positions) + job_string = "" + job_string + "" + role_string = "-" + var/obj_count = 0 + var/obj_string = "" + if(H.mind) + if(H.mind.special_role) + role_string = "[H.mind.special_role]" + if(!H.key && H.mind.key) + key_string = H.mind.key + for(var/datum/objective/O in all_objectives) + if(O.target == H.mind) + obj_count++ + if(obj_count > 0) + obj_string = "
Obj Target" + msg += "" + msg += "" + if(istype(H.loc, /obj/machinery/cryopod)) + msg += "" + else + msg += "" + msg += "" + msg += "
KeyReal NameJobMins AFKSpecial RoleAreaPPNCryo
[key_string][H.real_name][job_string][mins_afk][role_string][obj_string][get_area(H)][ADMIN_PP(H,"PP")]De-SpawnCryo
" + src << browse(msg, "window=Player_afk_check") + /client/proc/toggle_ert_calling() set category = "Event" set name = "Toggle ERT" diff --git a/code/modules/admin/watchlist.dm b/code/modules/admin/watchlist.dm index 1ac267f1037..040bc08112b 100644 --- a/code/modules/admin/watchlist.dm +++ b/code/modules/admin/watchlist.dm @@ -2,7 +2,7 @@ if(!check_rights(R_ADMIN)) return if(!target_ckey) - var/new_ckey = ckey(input(usr,"Who would you like to add to the watchlist?","Enter a ckey",null) as text) + var/new_ckey = ckey(clean_input("Who would you like to add to the watchlist?","Enter a ckey",null)) if(!new_ckey) return new_ckey = sanitizeSQL(new_ckey) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 2c5a2d28883..058dd4cd0f2 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -77,9 +77,9 @@ if(bombassembly) bombassembly.HasProximity(AM) -/obj/item/onetankbomb/Crossed(atom/movable/AM) //for mousetraps +/obj/item/onetankbomb/Crossed(atom/movable/AM, oldloc) //for mousetraps if(bombassembly) - bombassembly.Crossed(AM) + bombassembly.Crossed(AM, oldloc) /obj/item/onetankbomb/on_found(mob/finder) //for mousetraps if(bombassembly) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index f2fde8df758..d19682d1eb9 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -85,11 +85,11 @@ a_right.HasProximity(AM) -/obj/item/assembly_holder/Crossed(atom/movable/AM) +/obj/item/assembly_holder/Crossed(atom/movable/AM, oldloc) if(a_left) - a_left.Crossed(AM) + a_left.Crossed(AM, oldloc) if(a_right) - a_right.Crossed(AM) + a_right.Crossed(AM, oldloc) /obj/item/assembly_holder/on_found(mob/finder) if(a_left) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 98e59a7cbb5..37f5916d535 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -269,7 +269,7 @@ /obj/effect/beam/i_beam/Bumped() hit() -/obj/effect/beam/i_beam/Crossed(atom/movable/AM) +/obj/effect/beam/i_beam/Crossed(atom/movable/AM, oldloc) if(!isobj(AM) && !isliving(AM)) return if(istype(AM, /obj/effect)) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 09e049b3921..258212f0ab6 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -93,7 +93,7 @@ return ..() -/obj/item/assembly/mousetrap/Crossed(atom/movable/AM) +/obj/item/assembly/mousetrap/Crossed(atom/movable/AM, oldloc) if(armed) if(ishuman(AM)) var/mob/living/carbon/H = AM diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 9a74edfdc62..92a6a2b1d86 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -432,6 +432,8 @@ l_pocket = /obj/item/reagent_containers/food/pill/patch/styptic r_pocket = /obj/item/flashlight/seclite +/obj/effect/mob_spawn/human/miner/explorer + outfit = /datum/outfit/job/mining/equipped /obj/effect/mob_spawn/human/bartender name = "Space Bartender" diff --git a/code/modules/awaymissions/mission_code/academy.dm b/code/modules/awaymissions/mission_code/academy.dm index 2c764443e72..e41e29a747f 100644 --- a/code/modules/awaymissions/mission_code/academy.dm +++ b/code/modules/awaymissions/mission_code/academy.dm @@ -36,9 +36,226 @@ if(prob(1)) mezzer() - /obj/item/clothing/glasses/meson/truesight name = "The Lens of Truesight" desc = "I can see forever!" icon_state = "monocle" - item_state = "headset" \ No newline at end of file + item_state = "headset" + +// Die of Fate +/obj/item/dice/d20/fate + name = "\improper Die of Fate" + desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky." + icon_state = "d20" + var/reusable = TRUE + var/used = FALSE + +/obj/item/dice/d20/fate/stealth + name = "d20" + desc = "A die with twenty sides. The preferred die to throw at the GM." + +/obj/item/dice/d20/fate/one_use + reusable = FALSE + +/obj/item/dice/d20/fate/one_use/stealth + name = "d20" + desc = "A die with twenty sides. The preferred die to throw at the GM." + +/obj/item/dice/d20/fate/cursed + name = "cursed Die of Fate" + desc = "A die with twenty sides. You feel that rolling this is a REALLY bad idea." + color = "#00BB00" + + rigged = DICE_TOTALLY_RIGGED + rigged_value = 1 + +/obj/item/dice/d20/fate/diceroll(mob/user) + . = ..() + if(!used) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) + to_chat(user, "You feel the magic of the dice is restricted to ordinary humans!") + return + + if(!reusable) + used = TRUE + + var/turf/T = get_turf(src) + T.visible_message("[src] flares briefly.") + + addtimer(CALLBACK(src, .proc/effect, user, .), 1 SECONDS) + +/obj/item/dice/d20/fate/equipped(mob/user, slot) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) + to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") + user.unEquip(src) + +/obj/item/dice/d20/fate/proc/create_smoke(amount) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(amount, 0, drop_location()) + smoke.start() + +/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user, roll) + var/turf/T = get_turf(src) + switch(roll) + if(1) + //Dust + T.visible_message("[user] turns to dust!") + user.dust() + if(2) + //Death + T.visible_message("[user] suddenly dies!") + user.death() + if(3) + //Swarm of creatures + T.visible_message("A swarm of creatures surround [user]!") + for(var/direction in alldirs) + new /mob/living/simple_animal/hostile/netherworld(get_step(get_turf(user),direction)) + if(4) + //Destroy Equipment + T.visible_message("Everything [user] is holding and wearing disappears!") + for(var/obj/item/I in user) + if(istype(I, /obj/item/implant) || istype(I, /obj/item/organ)) + continue + qdel(I) + if(5) + //Monkeying + T.visible_message("[user] transforms into a monkey!") + user.monkeyize() + if(6) + //Cut speed + T.visible_message("[user] starts moving slower!") + var/datum/species/S = user.dna.species + S.slowdown += 1 + if(7) + //Throw + T.visible_message("Unseen forces throw [user]!") + user.Stun(6) + user.adjustBruteLoss(50) + var/throw_dir = cardinal + var/atom/throw_target = get_edge_target_turf(user, throw_dir) + user.throw_at(throw_target, 200, 4) + if(8) + //Fueltank Explosion + T.visible_message("An explosion bursts into existence around [user]!") + explosion(get_turf(user),-1,0,2, flame_range = 2) + if(9) + //Cold + var/datum/disease/D = new /datum/disease/cold() + T.visible_message("[user] looks a little under the weather!") + user.ForceContractDisease(D) + if(10) + //Nothing + T.visible_message("Nothing seems to happen.") + if(11) + //Cookie + T.visible_message("A cookie appears out of thin air!") + var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location()) + create_smoke(2) + C.name = "Cookie of Fate" + if(12) + //Healing + T.visible_message("[user] looks very healthy!") + user.revive() + if(13) + //Mad Dosh + T.visible_message("Mad dosh shoots out of [src]!") + var/turf/Start = get_turf(src) + for(var/direction in alldirs) + var/turf/dirturf = get_step(Start,direction) + if(rand(0,1)) + new /obj/item/stack/spacecash/c1000(dirturf) + else + var/obj/item/storage/bag/money/M = new(dirturf) + for(var/i in 1 to rand(5,50)) + new /obj/item/coin/gold(M) + if(14) + //Free Gun + T.visible_message("An impressive gun appears!") + create_smoke(2) + new /obj/item/gun/projectile/revolver/mateba(drop_location()) + if(15) + //Random One-use spellbook + T.visible_message("A magical looking book drops to the floor!") + create_smoke(2) + new /obj/item/spellbook/oneuse/random(drop_location()) + if(16) + //Servant & Servant Summon + T.visible_message("A Dice Servant appears in a cloud of smoke!") + var/mob/living/carbon/human/H = new(drop_location()) + create_smoke(2) + + H.equipOutfit(/datum/outfit/butler) + var/datum/mind/servant_mind = new /datum/mind() + var/datum/objective/O = new + O.owner = servant_mind + O.target = user.mind + O.explanation_text = "Serve [user.real_name]." + servant_mind.objectives += O + servant_mind.transfer_to(H) + + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the servant of [user.real_name]?", ROLE_WIZARD, poll_time = 300) + if(LAZYLEN(candidates)) + var/mob/dead/observer/C = pick(candidates) + message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant") + H.key = C.key + to_chat(H, "You are a servant of [user.real_name]. You must do everything in your power to follow their orders.") + + var/obj/effect/proc_holder/spell/targeted/summonmob/S = new + S.target_mob = H + user.mind.AddSpell(S) + + if(17) + //Tator Kit + T.visible_message("A suspicious box appears!") + new /obj/item/storage/box/syndicate(drop_location()) + create_smoke(2) + if(18) + //Captain ID + T.visible_message("A golden identification card appears!") + new /obj/item/card/id/captains_spare(drop_location()) + create_smoke(2) + if(19) + //Instrinct Resistance + T.visible_message("[user] looks very robust!") + var/datum/species/S = user.dna.species + S.brute_mod *= 0.5 + S.burn_mod *= 0.5 + + if(20) + //Free wizard! + T.visible_message("Magic flows out of [src] and into [user]!") + user.mind.make_Wizard() + +// Butler outfit +/datum/outfit/butler + name = "Butler" + uniform = /obj/item/clothing/under/suit_jacket/really_black + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/bowlerhat + glasses = /obj/item/clothing/glasses/monocle + gloves = /obj/item/clothing/gloves/color/white + +/obj/effect/proc_holder/spell/targeted/summonmob + name = "Summon Servant" + desc = "This spell can be used to call your servant, whenever you need it." + charge_max = 100 + clothes_req = 0 + invocation = "JE VES" + invocation_type = "whisper" + range = -1 + level_max = 0 //cannot be improved + cooldown_min = 100 + include_user = 1 + + var/mob/living/target_mob + + action_icon_state = "summons" + +/obj/effect/proc_holder/spell/targeted/summonmob/cast(list/targets, mob/user = usr) + if(!target_mob) + return + var/turf/Start = get_turf(user) + for(var/direction in alldirs) + var/turf/T = get_step(Start,direction) + if(!T.density) + target_mob.Move(T) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index ed888d65465..6d647c8ff1b 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -19,22 +19,22 @@ * Areas */ //Gateroom gets its own APC specifically for the gate - /area/awaymission/gateroom +/area/awaymission/gateroom //Library, medbay, storage room - /area/awaymission/southblock +/area/awaymission/southblock //Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas) - /area/awaymission/arrivalblock +/area/awaymission/arrivalblock //Crew quarters, cafeteria, chapel - /area/awaymission/midblock +/area/awaymission/midblock //engineering, bridge (not really north but it doesnt really need its own APC) - /area/awaymission/northblock +/area/awaymission/northblock //That massive research room - /area/awaymission/research +/area/awaymission/research //Syndicate shuttle /area/awaymission/syndishuttle diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index ef576760ada..ca79a1ea2a6 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -140,7 +140,7 @@ /obj/effect/meatgrinder/New() icon_state = "blobpod" -/obj/effect/meatgrinder/Crossed(AM as mob|obj) +/obj/effect/meatgrinder/Crossed(AM as mob|obj, oldloc) Bumped(AM) /obj/effect/meatgrinder/Bumped(mob/M as mob|obj) diff --git a/code/modules/awaymissions/trigger.dm b/code/modules/awaymissions/trigger.dm deleted file mode 100644 index 60a43702cb1..00000000000 --- a/code/modules/awaymissions/trigger.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/effect/step_trigger/message - var/message //the message to give to the mob - var/once = 1 - -/obj/effect/step_trigger/message/Trigger(mob/M as mob) - if(M.client) - to_chat(M, "[message]") - if(once) - qdel(src) - -/obj/effect/step_trigger/teleport_fancy - var/locationx - var/locationy - var/uses = 1 //0 for infinite uses - var/entersparks = 0 - var/exitsparks = 0 - var/entersmoke = 0 - var/exitsmoke = 0 - -/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob) - var/dest = locate(locationx, locationy, z) - M.Move(dest) - - if(entersparks) - do_sparks(4, 1, src) - if(exitsparks) - do_sparks(4, 1, dest) - - if(entersmoke) - var/datum/effect_system/smoke_spread/s = new - s.set_up(4, 1, src, 0) - s.start() - if(exitsmoke) - var/datum/effect_system/smoke_spread/s = new - s.set_up(4, 1, dest, 0) - s.start() - - uses-- - if(uses == 0) - qdel(src) \ No newline at end of file diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index de60531e590..102554f2e6e 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -65,7 +65,7 @@ STOP_PROCESSING(SSobj, src) return ..() -/obj/effect/portal_sensor/Crossed(A) +/obj/effect/portal_sensor/Crossed(A, oldloc) trigger() /obj/effect/portal_sensor/Uncrossed(A) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index fd89434331e..22325fed75f 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -60,7 +60,7 @@ var/list/related_accounts_ip = list() //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip var/list/related_accounts_cid = list() //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id - preload_rsc = 1 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. + preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. var/global/obj/screen/click_catcher/void diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 4e59dc2c1cf..95f6c16ba97 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -307,11 +307,6 @@ qdel(src) return - // Change the way they should download resources. - if(config.resource_urls) - preload_rsc = pick(config.resource_urls) - else preload_rsc = 1 // If config.resource_urls is not set, preload like normal. - to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.") @@ -413,6 +408,16 @@ Master.UpdateTickRate() + // Check total playercount + var/playercount = 0 + for(var/mob/M in GLOB.player_list) + if(M.client) + playercount += 1 + + if(playercount >= 150 && GLOB.panic_bunker_enabled == 0) + GLOB.panic_bunker_enabled = 1 + message_admins("Panic bunker has been automatically enabled due to playercount surpassing 150") + /client/proc/is_connecting_from_localhost() var/localhost_addresses = list("127.0.0.1", "::1") // Adresses if(!isnull(address) && address in localhost_addresses) @@ -538,6 +543,14 @@ message_admins("SQL ERROR during log_client_to_db (update). Error : \[[err]\]\n") else //New player!! Need to insert all the stuff + + // Check new peeps for panic bunker + if(GLOB.panic_bunker_enabled) + message_admins("Failed Login: [key] - New account attempting to connect during panic bunker") + src << "Sorry but the server is currently not accepting connections from never before seen players. Please try again later." + del(src) + return // Dont insert or they can just go in again + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO [format_table_name("player")] (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')") if(!query_insert.Execute()) var/err = query_insert.ErrorMsg() @@ -755,6 +768,11 @@ //Send resources to the client. /client/proc/send_resources() + // Change the way they should download resources. + if(config.resource_urls) + preload_rsc = pick(config.resource_urls) + else + preload_rsc = 1 // If config.resource_urls is not set, preload like normal. // Most assets are now handled through global_cache.dm getFiles( 'html/search.js', // Used in various non-NanoUI HTML windows for search functionality diff --git a/code/modules/client/preference/loadout/loadout_accessories.dm b/code/modules/client/preference/loadout/loadout_accessories.dm index c4a49ee5575..09cc082dc5d 100644 --- a/code/modules/client/preference/loadout/loadout_accessories.dm +++ b/code/modules/client/preference/loadout/loadout_accessories.dm @@ -166,7 +166,7 @@ /datum/gear/accessory/armband_sec display_name = " armband, security" path = /obj/item/clothing/accessory/armband/sec - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "Security Pod Pilot") /datum/gear/accessory/armband_cargo display_name = "cargo armband" diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index e09fc89736a..97f9ddc6169 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -93,6 +93,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/clientfps = 0 var/atklog = ATKLOG_ALL var/fuid // forum userid + var/afk_watch = FALSE // If the player wants to be kept track of by the AFK system //ghostly preferences var/ghost_anonsay = 0 @@ -439,6 +440,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += "

General Settings

" if(user.client.holder) dat += "Adminhelp sound: [(sound & SOUND_ADMINHELP)?"On":"Off"]
" + dat += "AFK Cryoing: [(afk_watch) ? "Yes" : "No"]
" dat += "Ambient Occlusion: [toggles & AMBIENT_OCCLUSION ? "Enabled" : "Disabled"]
" dat += "Attack Animations: [(show_ghostitem_attack) ? "Yes" : "No"]
" if(unlock_content) @@ -1261,7 +1263,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if("input") switch(href_list["preference"]) if("name") - var/raw_name = input(user, "Choose your character's name:", "Character Preference") as text|null + var/raw_name = clean_input("Choose your character's name:", "Character Preference", , user) if(!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) var/new_name = reject_bad_name(raw_name, 1) if(new_name) @@ -1977,6 +1979,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if("winflash") windowflashing = !windowflashing + if("afk_watch") + afk_watch = !afk_watch + if("UIcolor") var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null if(!UI_style_color_new) return diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 90a4bed6f14..cdbfe2afb2f 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -19,7 +19,8 @@ exp, clientfps, atklog, - fuid + fuid, + afk_watch FROM [format_table_name("player")] WHERE ckey='[C.ckey]'"} ) @@ -52,6 +53,7 @@ clientfps = text2num(query.item[17]) atklog = text2num(query.item[18]) fuid = text2num(query.item[19]) + afk_watch = text2num(query.item[20]) //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) @@ -72,6 +74,7 @@ clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps)) atklog = sanitize_integer(atklog, 0, 100, initial(atklog)) fuid = sanitize_integer(fuid, 0, 10000000, initial(fuid)) + afk_watch = sanitize_integer(afk_watch, 0, 1, initial(afk_watch)) return 1 /datum/preferences/proc/save_preferences(client/C) @@ -90,7 +93,7 @@ UI_style_alpha='[UI_style_alpha]', be_role='[sanitizeSQL(list2params(be_special))]', default_slot='[default_slot]', - toggles='[num2text(toggles, 7)]', + toggles='[num2text(toggles, Ceiling(log(10, (TOGGLES_TOTAL))))]', atklog='[atklog]', sound='[sound]', randomslot='[randomslot]', @@ -101,7 +104,8 @@ windowflashing='[windowflashing]', ghost_anonsay='[ghost_anonsay]', clientfps='[clientfps]', - atklog='[atklog]' + atklog='[atklog]', + afk_watch='[afk_watch]' WHERE ckey='[C.ckey]'"} ) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 0a0a2e45abd..e62fc3c2814 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -276,6 +276,34 @@ . = ..() chameleon_action.emp_randomise(INFINITY) +/obj/item/clothing/glasses/chameleon/thermal + origin_tech = "magnets=3;syndicate=4" + vision_flags = SEE_MOBS + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + flash_protect = -1 + prescription_upgradable = TRUE + +/obj/item/clothing/glasses/hud/security/chameleon + flash_protect = 1 + + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/clothing/glasses/hud/security/chameleon/Initialize() + . = ..() + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/glasses + chameleon_action.chameleon_name = "HUD" + chameleon_action.chameleon_blacklist = list() + chameleon_action.initialize_disguises() + +/obj/item/clothing/glasses/hud/security/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/clothing/glasses/hud/security/chameleon/broken/Initialize() + . = ..() + chameleon_action.emp_randomise(INFINITY) + /obj/item/clothing/gloves/chameleon desc = "These gloves will protect the wearer from electric shock." name = "insulated gloves" diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index d965166fdb2..0f1aad16814 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -413,25 +413,6 @@ M.CureNearsighted() ..() -/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete - name = "Optical Meson Scanner" - desc = "Used for seeing walls, floors, and stuff through anything." - icon_state = "meson" - origin_tech = "magnets=3;syndicate=4" - prescription_upgradable = 1 - -/obj/item/clothing/glasses/thermal/syndi/sunglasses - name = "sunglasses" - desc = "Strangely ancient technology used to help provide rudimentary eye cover." - icon_state = "sun" - item_state = "sunglasses" - - sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/eyes.dmi', - "Drask" = 'icons/mob/species/drask/eyes.dmi', - "Grey" = 'icons/mob/species/grey/eyes.dmi' - ) - /obj/item/clothing/glasses/thermal/monocle name = "Thermoncle" desc = "A monocle thermal." @@ -457,57 +438,6 @@ item_state = "eyepatch" flags = NODROP -/obj/item/clothing/glasses/proc/chameleon(var/mob/user) - var/input_glasses = input(user, "Choose a piece of eyewear to disguise as.", "Choose glasses style.") as null|anything in list("Sunglasses", "Medical HUD", "Mesons", "Science Goggles", "Glasses", "Security Sunglasses","Eyepatch","Welding","Gar") - - if(user && src in user.contents) - switch(input_glasses) - if("Sunglasses") - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." - name = "sunglasses" - icon_state = "sun" - item_state = "sunglasses" - if("Medical HUD") - name = "Health Scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." - icon_state = "healthhud" - item_state = "healthhud" - if("Mesons") - name = "Optical Meson Scanner" - desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." - icon_state = "meson" - item_state = "meson" - if("Science Goggles") - name = "Science Goggles" - desc = "A pair of snazzy goggles used to protect against chemical spills." - icon_state = "purple" - item_state = "glasses" - if("Glasses") - name = "Prescription Glasses" - desc = "Made by Nerd. Co." - icon_state = "glasses" - item_state = "glasses" - if("Security Sunglasses") - name = "HUDSunglasses" - desc = "Sunglasses with a HUD." - icon_state = "sunhud" - item_state = "sunglasses" - if("Eyepatch") - name = "eyepatch" - desc = "Yarr." - icon_state = "eyepatch" - item_state = "eyepatch" - if("Welding") - name = "welding goggles" - desc = "Protects the eyes from welders; approved by the mad scientist association." - icon_state = "welding-g" - item_state = "welding-g" - if("Gar") - desc = "Just who the hell do you think I am?!" - name = "gar glasses" - icon_state = "gar" - item_state = "gar" - /obj/item/clothing/glasses/godeye name = "eye of god" desc = "A strange eye, said to have been torn from an omniscient creature that used to roam the wastes." diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 59ebb6c9446..049710bbe3e 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -91,14 +91,6 @@ "Grey" = 'icons/mob/species/grey/eyes.dmi' ) -/obj/item/clothing/glasses/hud/security/chameleon - name = "Chameleon Security HUD" - desc = "A stolen security HUD integrated with Syndicate chameleon technology. Toggle to disguise the HUD. Provides flash protection." - flash_protect = 1 - -/obj/item/clothing/glasses/hud/security/chameleon/attack_self(mob/user) - chameleon(user) - /obj/item/clothing/glasses/hud/security/sunglasses/jensenshades name = "augmented shades" desc = "Polarized bioneural eyewear, designed to augment your vision." diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 1805d911caa..7a5bd2255da 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -71,6 +71,30 @@ obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team silence_steps = 1 shoe_sound = "clownstep" origin_tech = "magnets=4;syndicate=2" + var/enabled_waddle = TRUE + var/datum/component/waddle + +/obj/item/clothing/shoes/magboots/clown/equipped(mob/user, slot) + . = ..() + if(slot == slot_shoes && enabled_waddle) + waddle = user.AddComponent(/datum/component/waddling) + +/obj/item/clothing/shoes/magboots/clown/dropped(mob/user) + . = ..() + QDEL_NULL(waddle) + +/obj/item/clothing/shoes/magboots/clown/CtrlClick(mob/living/user) + if(!isliving(user)) + return + if(user.get_active_hand() != src) + to_chat(user, "You must hold [src] in your hand to do this.") + return + if(!enabled_waddle) + to_chat(user, "You switch off the waddle dampeners!") + enabled_waddle = TRUE + else + to_chat(user, "You switch on the waddle dampeners!") + enabled_waddle = FALSE /obj/item/clothing/shoes/magboots/wizard //bundled with the wiz hardsuit name = "boots of gripping" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index f878ec0d65e..bca650a30b1 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -55,7 +55,7 @@ t_loc.MakeDry(TURF_WET_WATER) /obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn they're huge!" + desc = "The prankster's standard-issue clowning shoes. Damn they're huge! Ctrl-click to toggle the waddle dampeners!" name = "clown shoes" icon_state = "clown" item_state = "clown_shoes" @@ -63,6 +63,30 @@ item_color = "clown" var/footstep = 1 //used for squeeks whilst walking shoe_sound = "clownstep" + var/enabled_waddle = TRUE + var/datum/component/waddle + +/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) + . = ..() + if(slot == slot_shoes && enabled_waddle) + waddle = user.AddComponent(/datum/component/waddling) + +/obj/item/clothing/shoes/clown_shoes/dropped(mob/user) + . = ..() + QDEL_NULL(waddle) + +/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user) + if(!isliving(user)) + return + if(user.get_active_hand() != src) + to_chat(user, "You must hold [src] in your hand to do this.") + return + if(!enabled_waddle) + to_chat(user, "You switch off the waddle dampeners!") + enabled_waddle = TRUE + else + to_chat(user, "You switch on the waddle dampeners!") + enabled_waddle = FALSE /obj/item/clothing/shoes/clown_shoes/magical name = "magical clown shoes" diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 9f225e48884..96e174ed2dd 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -182,34 +182,7 @@ materials = list(MAT_METAL=1000) burn_state = FIRE_PROOF -/obj/item/clothing/accessory/medal/conduct - name = "distinguished conduct medal" - desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." - -/obj/item/clothing/accessory/medal/bronze_heart - name = "bronze heart medal" - desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty." - icon_state = "bronze_heart" - -/obj/item/clothing/accessory/medal/nobel_science - name = "nobel sciences award" - desc = "A bronze medal which represents significant contributions to the field of science or engineering." - -/obj/item/clothing/accessory/medal/silver - name = "silver medal" - desc = "A silver medal." - icon_state = "silver" - item_color = "silver" - materials = list(MAT_SILVER=1000) - -/obj/item/clothing/accessory/medal/silver/valor - name = "medal of valor" - desc = "A silver medal awarded for acts of exceptional valor." - -/obj/item/clothing/accessory/medal/silver/security - name = "robust security award" - desc = "An award for distinguished combat and sacrifice in defence of Nanotrasen's commercial interests. Often awarded to security staff." - +// GOLD (awarded by centcom) /obj/item/clothing/accessory/medal/gold name = "gold medal" desc = "A prestigious golden medal." @@ -223,7 +196,61 @@ /obj/item/clothing/accessory/medal/gold/heroism name = "medal of exceptional heroism" - desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders." + desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist." + +// SILVER (awarded by Captain) + +/obj/item/clothing/accessory/medal/silver + name = "silver medal" + desc = "A silver medal." + icon_state = "silver" + item_color = "silver" + materials = list(MAT_SILVER=1000) + +/obj/item/clothing/accessory/medal/silver/valor + name = "medal of valor" + desc = "An award issued by Captains to crew members whose exceptional performance and service to the station has been commended by the station's top leadership." + +/obj/item/clothing/accessory/medal/silver/leadership + name = "medal of command" + desc = "An award issued by Captains to heads of department who do an excellent job managing their department. Made of pure silver." + + +// BRONZE (awarded by heads of department, except for the bronze heart) + + + +/obj/item/clothing/accessory/medal/security + name = "robust security medal" + desc = "An award issued by the HoS to security staff who excel at upholding the law." + +/obj/item/clothing/accessory/medal/science + name = "smart science medal" + desc = "An award issued by the RD to science staff who advance the frontiers of knowledge." + +/obj/item/clothing/accessory/medal/engineering + name = "excellent engineering medal" + desc = "An award issued by the CE to engineering staff whose dedication keep the station running at its best." + +/obj/item/clothing/accessory/medal/service + name = "superior service medal" + desc = "An award issued by the HoP to service staff who go above and beyond." + +/obj/item/clothing/accessory/medal/medical + name = "magnificient medical medal" + desc = "An award issued by the CMO to medical staff who excel at saving lives." + +/obj/item/clothing/accessory/medal/legal + name = "meritous legal medal" + desc = "An award issued by the Magistrate to legal staff who uphold the rule of law." + +/obj/item/clothing/accessory/medal/heart + name = "bronze heart medal" + desc = "A rarely-awarded medal for those who sacrifice themselves in the line of duty to save their fellow crew." + icon_state = "bronze_heart" + + + /* Holobadges are worn on the belt or neck, and can be used to show that the holder is an authorized diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index f4f952d4db5..1520e19dcfc 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -463,6 +463,14 @@ /obj/item/stack/sheet/animalhide/ashdrake = 5) category = CAT_PRIMAL +/datum/crafting_recipe/tribal_splint + name = "Tribal Splint" + time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1) + result = /obj/item/stack/medical/splint/tribal + category = CAT_PRIMAL + /datum/crafting_recipe/guillotine name = "Guillotine" result = /obj/structure/guillotine diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index f9bb22fcda4..f3df3027780 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -116,7 +116,7 @@ else to_chat(usr, "[bicon(src)]Unable to connect to accounts database.") if("trans_purpose") - var/purpose = input("Enter reason for EFTPOS transaction", "Transaction purpose", transaction_purpose) as text|null + var/purpose = clean_input("Enter reason for EFTPOS transaction", "Transaction purpose", transaction_purpose) if(purpose) transaction_purpose = purpose if("trans_value") diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 28ca16b9a79..54394411e73 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -7,21 +7,27 @@ /datum/event/blob/start() processing = FALSE //so it won't fire again in next tick + var/turf/T = pick(blobstart) if(!T) return kill() + var/list/candidates = pollCandidates("Do you want to play as a blob infested mouse?", ROLE_BLOB, 1) if(!candidates.len) return kill() + var/list/vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in GLOB.all_vent_pumps) if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) if(temp_vent.parent.other_atmosmch.len > 50) vents += temp_vent + var/obj/vent = pick(vents) var/mob/living/simple_animal/mouse/blobinfected/B = new(vent.loc) var/mob/M = pick(candidates) B.key = M.key + SSticker.mode.update_blob_icons_added(B.mind) + to_chat(B, "You are now a mouse, infected with blob spores. Find somewhere isolated... before you burst and become the blob! Use ventcrawl (alt-click on vents) to move around.") notify_ghosts("Infected Mouse has appeared in [get_area(B)].", source = B) processing = TRUE // Let it naturally end, if it runs successfully \ No newline at end of file diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index 419bebfe2c1..52e8918a16c 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -1,6 +1,8 @@ /datum/event/sentience /datum/event/sentience/start() + processing = FALSE //so it won't fire again in next tick + var/ghostmsg = "Do you want to awaken as a sentient being?" var/list/candidates = pollCandidates(ghostmsg, ROLE_SENTIENT, 1) var/list/potential = list() @@ -41,6 +43,7 @@ SA.del_on_death = FALSE greet_sentient(SA) print_command_report(sentience_report, "[command_name()] Update") + processing = TRUE // Let it naturally end, if it runs successfully /datum/event/sentience/proc/greet_sentient(var/mob/living/carbon/human/M) to_chat(M, "Hello world!") diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index ced084f05a3..9199d8ca3bd 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -514,7 +514,7 @@ /obj/structure/spacevine/obj_destruction() wither() -/obj/structure/spacevine/Crossed(mob/crosser) +/obj/structure/spacevine/Crossed(mob/crosser, oldloc) if(isliving(crosser)) for(var/datum/spacevine_mutation/SM in mutations) SM.on_cross(src, crosser) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 6be1d3bcf70..af366683570 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -589,7 +589,7 @@ Gunshots/explosions/opening doors/less rare audio (done) health -= P.force return -/obj/effect/fake_attacker/Crossed(mob/M, somenumber) +/obj/effect/fake_attacker/Crossed(mob/M, oldloc) if(M == my_target) step_away(src,my_target,2) if(prob(30)) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 8a88cac3461..cd50dcedb71 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -256,6 +256,7 @@ desc = "Full of vitamins and deliciousness!" icon_state = "orangejuice" item_state = "carton" + throwforce = 0 isGlass = 0 list_reagents = list("orangejuice" = 100) @@ -264,6 +265,7 @@ desc = "It's cream. Made from milk. What else did you think you'd find in there?" icon_state = "cream" item_state = "carton" + throwforce = 0 isGlass = 0 list_reagents = list("cream" = 100) @@ -272,6 +274,7 @@ desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." icon_state = "tomatojuice" item_state = "carton" + throwforce = 0 isGlass = 0 list_reagents = list("tomatojuice" = 100) @@ -280,6 +283,7 @@ desc = "Sweet-sour goodness." icon_state = "limejuice" item_state = "carton" + throwforce = 0 isGlass = 0 list_reagents = list("limejuice" = 100) @@ -288,6 +292,7 @@ desc = "Soothing milk." icon_state = "milk" item_state = "carton" + throwforce = 0 isGlass = 0 list_reagents = list("milk" = 100) diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index 36c340656e3..77bfb0728ca 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -68,3 +68,10 @@ icon_state = "macncheese" filling_color = "#ffe45d" list_reagents = list("nutriment" = 5, "vitamin" = 2, "cheese" = 4) + +/obj/item/reagent_containers/food/snacks/lasagna + name = "Lasagna" + icon_state = "lasagna" + desc = "Tajarans loves to eat this, for some reason." + filling_color = "#E18712" + list_reagents = list("nutriment" = 10, "msg" = 3, "vitamin" = 4, "tomatojuice" = 10) diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index aabd47194ce..cbe7342b74b 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -224,7 +224,7 @@ if(istype(I, /obj/item/pen/)) if(open) return - var/t = input("Enter what you want to add to the tag:", "Write", null, null) as text + var/t = clean_input("Enter what you want to add to the tag:", "Write", null) var/obj/item/pizzabox/boxtotagto = src if(boxes.len > 0) boxtotagto = boxes[boxes.len] diff --git a/code/modules/food_and_drinks/recipes/recipes_oven.dm b/code/modules/food_and_drinks/recipes/recipes_oven.dm index 0a6072e51a9..a53ee6e75d9 100644 --- a/code/modules/food_and_drinks/recipes/recipes_oven.dm +++ b/code/modules/food_and_drinks/recipes/recipes_oven.dm @@ -467,3 +467,16 @@ /obj/item/reagent_containers/food/snacks/stuffing ) result = /obj/item/reagent_containers/food/snacks/sliceable/turkey + +/datum/recipe/oven/lasagna + items = list( + /obj/item/reagent_containers/food/snacks/meat, + /obj/item/reagent_containers/food/snacks/meat, + /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/reagent_containers/food/snacks/grown/tomato, + /obj/item/reagent_containers/food/snacks/grown/tomato, + /obj/item/reagent_containers/food/snacks/dough + ) + result = /obj/item/reagent_containers/food/snacks/lasagna diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 7b84956a804..361c305bb8d 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -151,7 +151,7 @@ T.on_consume(src, usr) ..() -/obj/item/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM) +/obj/item/reagent_containers/food/snacks/grown/Crossed(atom/movable/AM, oldloc) if(seed) for(var/datum/plant_gene/trait/T in seed.genes) T.on_cross(src, AM) diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 461781503e2..33ef72db471 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -160,7 +160,7 @@ ..() StartBurning() -/obj/structure/bonfire/Crossed(atom/movable/AM) +/obj/structure/bonfire/Crossed(atom/movable/AM, oldloc) if(burning) Burn() diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index d8938683d75..b665f171285 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -51,7 +51,7 @@ return 0 -/obj/item/grown/Crossed(atom/movable/AM) +/obj/item/grown/Crossed(atom/movable/AM, oldloc) if(seed) for(var/datum/plant_gene/trait/T in seed.genes) T.on_cross(src, AM) diff --git a/code/modules/keybindings/bindings_admin.dm b/code/modules/keybindings/bindings_admin.dm index 1413d9b0f8d..695a5c6baef 100644 --- a/code/modules/keybindings/bindings_admin.dm +++ b/code/modules/keybindings/bindings_admin.dm @@ -13,7 +13,7 @@ user.cmd_admin_pm_panel() return if("F9") - user.stealth() + user.invisimin() return if("F10") user.get_dead_say() diff --git a/code/modules/keybindings/bindings_ai.dm b/code/modules/keybindings/bindings_ai.dm new file mode 100644 index 00000000000..b496f3521f9 --- /dev/null +++ b/code/modules/keybindings/bindings_ai.dm @@ -0,0 +1,6 @@ +/mob/living/silicon/ai/key_down(_key, client/user) + switch(_key) + if("4") + a_intent_change(INTENT_HOTKEY_LEFT) + return + return ..() \ No newline at end of file diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index 75c30f232b5..e3925aa5283 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -22,8 +22,11 @@ if("F2") // Screenshot. Hold shift to choose a name and location to save in ooc() return + if("F3") + mob.say_wrapper() + return if("F4") - mob.me_verb() + mob.me_wrapper() return if("F12") // Toggles minimal HUD mob.button_pressed_F12() diff --git a/code/modules/keybindings/bindings_robot.dm b/code/modules/keybindings/bindings_robot.dm index a6b3cd3f21e..f9b39dc7351 100644 --- a/code/modules/keybindings/bindings_robot.dm +++ b/code/modules/keybindings/bindings_robot.dm @@ -10,6 +10,11 @@ cycle_modules() return if("Q") - uneq_active() - return + if(!(client.prefs.toggles & AZERTY)) + uneq_active() + return + if("A") + if(client.prefs.toggles & AZERTY) + uneq_active() + return return ..() \ No newline at end of file diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index ad87622b709..cc76256386e 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -43,4 +43,4 @@ var/key = macro_set[k] var/command = macro_set[key] winset(src, "[setname]-\ref[key]", "parent=[setname];name=[key];command=[command]") - winset(src, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=default") + winset(src, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=old_default") diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index a413c328870..e96fd0e867b 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -151,7 +151,7 @@ /obj/structure/closet/crate/secure/loot/attack_hand(mob/user) if(locked) to_chat(user, "The crate is locked with a Deca-code lock.") - var/input = input(usr, "Enter [codelen] digits.", "Deca-Code Lock", "") as text + var/input = clean_input("Enter [codelen] digits.", "Deca-Code Lock", "") if(in_range(src, user)) if(input == code) to_chat(user, "The crate unlocks!") diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 9d6ca608759..1001a2aa514 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -474,7 +474,9 @@ new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000), + new /datum/data/mining_equipment("Shuttle Console Board", /obj/item/circuitboard/shuttle/golem_ship, 2000), new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 2000) + ) /datum/data/mining_equipment diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index ab714c6f1a6..d9747a3a1f4 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -27,6 +27,17 @@ if(prob(15)) harvest(null, TRUE) +/obj/structure/flora/ash/ex_act(severity, target) + switch(severity) + if(1) + qdel(src) + if(2) + if(prob(80)) + qdel(src) + if(3) + if(prob(50)) + qdel(src) + /obj/structure/flora/ash/proc/harvest(user, no_drop) if(harvested) return 0 @@ -137,7 +148,7 @@ regrowth_time_low = 4800 regrowth_time_high = 7200 -/obj/structure/flora/ash/cacti/Crossed(mob/AM) +/obj/structure/flora/ash/cacti/Crossed(mob/AM, oldloc) if(ishuman(AM) && has_gravity(loc) && prob(70)) var/mob/living/carbon/human/H = AM if(!H.shoes && !H.lying) //ouch, my feet. diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index d8286bc8698..7eed5577aeb 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -12,8 +12,12 @@ /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously." -/obj/structure/closet/crate/necropolis/tendril/New() +/obj/structure/closet/crate/necropolis/tendril/New(add_loot = TRUE) ..() + + if(!add_loot) + return + var/loot = rand(1,24) switch(loot) if(1) @@ -35,7 +39,7 @@ if(8) new /obj/item/organ/internal/brain/xeno(src) if(9) - new /obj/item/organ/internal/heart/cursed(src) + new /obj/item/organ/internal/heart/cursed/wizard(src) if(10) new /obj/item/ship_in_a_bottle(src) if(11) @@ -68,4 +72,19 @@ new /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor(src) new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src) if(24) - new /obj/item/spellbook/oneuse/summonitem(src) \ No newline at end of file + new /obj/item/spellbook/oneuse/summonitem(src) + +/obj/structure/closet/crate/necropolis/puzzle + name = "puzzling chest" + +/obj/structure/closet/crate/necropolis/puzzle/New() + ..(FALSE) + + var/loot = rand(1,3) + switch(loot) + if(1) + new /obj/item/soulstone/anybody(src) + if(2) + new /obj/item/wisp_lantern(src) + if(3) + new /obj/item/prisoncube(src) diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index c1f474ccd64..236bcec1231 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -31,7 +31,7 @@ else if(W.isOn()) to_chat(user, "Not enough fuel to smelt [src].") -/obj/item/stack/ore/Crossed(atom/movable/AM) +/obj/item/stack/ore/Crossed(atom/movable/AM, oldloc) var/obj/item/storage/bag/ore/OB var/turf/simulated/floor/F = get_turf(src) if(loc != F) @@ -50,6 +50,12 @@ break if(OB && istype(F, /turf/simulated/floor/plating/asteroid)) F.attackby(OB, AM) + // Then, if the user is dragging an ore box, empty the satchel + // into the box. + var/mob/living/L = AM + if(istype(L.pulling, /obj/structure/ore_box)) + var/obj/structure/ore_box/box = L.pulling + box.attackby(OB, AM) return ..() /obj/item/stack/ore/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2d1ff8d82da..731f53c7838 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -405,7 +405,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp A.on_close(CALLBACK(src, .proc/teleport)) /mob/dead/observer/proc/teleport(area/thearea) - if(!thearea) + if(!thearea || !isobserver(usr)) return var/list/L = list() @@ -416,7 +416,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, "No area available.") return - usr.forceMove(pick(L)) + forceMove(pick(L)) following = null /mob/dead/observer/verb/follow() @@ -430,7 +430,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp // This is the ghost's follow verb with an argument /mob/dead/observer/proc/ManualFollow(var/atom/movable/target) - if(!target) + if(!target || !isobserver(usr)) return if(!get_turf(target)) @@ -504,7 +504,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp A.on_close(CALLBACK(src, .proc/jump_to_mob)) /mob/dead/observer/proc/jump_to_mob(mob/M) - if(!M) + if(!M || !isobserver(usr)) return var/mob/A = src //Source mob var/turf/T = get_turf(M) //Turf of the destination mob diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 989decdb395..304bdc419a2 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -58,19 +58,20 @@ if(message) log_emote(message, src) - //Hearing gasp and such every five seconds is not good emotes were not global for a reason. - // Maybe some people are okay with that. - + // Hearing gasp and such every five seconds is not good emotes were not global for a reason. + // Maybe some people are okay with that. for(var/mob/M in GLOB.player_list) if(!M.client) continue //skip monkeys and leavers - if(istype(M, /mob/new_player)) - continue - if(findtext(message," snores.")) //Because we have so many sleeping people. - break - if(M.stat == DEAD && M.get_preference(CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) - M.show_message(message) + if(isnewplayer(M)) + continue + + if(findtext(message, " snores.")) //Because we have so many sleeping people. + break + + if(isobserver(M) && M.get_preference(CHAT_GHOSTSIGHT) && !(M in viewers(src, null)) && client) // The client check makes sure people with ghost sight don't get spammed by simple mobs emoting. + M.show_message(message) // Type 1 (Visual) emotes are sent to anyone in view of the item if(m_type & EMOTE_VISUAL) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 641450026ba..45d4cda2202 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -63,10 +63,10 @@ var/datum/gas_mixture/environment = T.return_air() var/pressure = environment ? environment.return_pressure() : 0 if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1) - return 0 + return FALSE if(pressure < ONE_ATMOSPHERE * 0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet - italics = 1 + italics = TRUE sound_vol *= 0.5 if(sleeping || stat == UNCONSCIOUS) @@ -87,8 +87,6 @@ var/track = null if(isobserver(src)) - if(italics && client.prefs.toggles & CHAT_GHOSTRADIO) - return if(speaker_name != speaker.real_name && speaker.real_name) speaker_name = "[speaker.real_name] ([speaker_name])" track = "([ghost_follow_link(speaker, ghost=src)]) " diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 25b188911ad..57725da8eb2 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -455,6 +455,7 @@ colour = "alien" key = "y" flags = RESTRICTED | HIVEMIND + follow = TRUE /datum/language/wryn/check_special_condition(mob/other) var/mob/living/carbon/M = other @@ -485,7 +486,7 @@ colour = "alien" key = "a" flags = RESTRICTED | HIVEMIND - follow = 1 + follow = TRUE /datum/language/terrorspider name = "Spider Hivemind" @@ -496,7 +497,7 @@ colour = "terrorspider" key = "ts" flags = RESTRICTED | HIVEMIND - follow = 1 + follow = TRUE /datum/language/ling name = "Changeling" @@ -505,10 +506,11 @@ colour = "changeling" key = "g" flags = RESTRICTED | HIVEMIND + follow = TRUE /datum/language/ling/broadcast(mob/living/speaker, message, speaker_mask) if(speaker.mind && speaker.mind.changeling) - ..(speaker,message,speaker.mind.changeling.changelingID) + ..(speaker, message, speaker.mind.changeling.changelingID) else if(speaker.mind && speaker.mind.linglink) ..() else @@ -521,6 +523,7 @@ colour = "shadowling" key = "8" flags = RESTRICTED | HIVEMIND + follow = TRUE /datum/language/shadowling/broadcast(mob/living/speaker, message, speaker_mask) if(speaker.mind && speaker.mind.special_role == SPECIAL_ROLE_SHADOWLING) @@ -539,6 +542,7 @@ colour = "abductor" key = "zw" //doesn't matter, this is their default and only language flags = RESTRICTED | HIVEMIND + follow = TRUE /datum/language/abductor/broadcast(mob/living/speaker, message, speaker_mask) ..(speaker,message,speaker.real_name) @@ -567,6 +571,7 @@ colour = "alien" key = "bo" flags = RESTRICTED | HIVEMIND + follow = TRUE /datum/language/corticalborer/broadcast(mob/living/speaker, message, speaker_mask) var/mob/living/simple_animal/borer/B @@ -590,7 +595,7 @@ exclaim_verb = "declares" key = "b" flags = RESTRICTED | HIVEMIND - follow = 1 + follow = TRUE var/drone_only /datum/language/binary/broadcast(mob/living/speaker, message, speaker_mask) @@ -636,8 +641,8 @@ colour = "say_quote" key = "d" flags = RESTRICTED | HIVEMIND - drone_only = 1 - follow = 1 + drone_only = TRUE + follow = TRUE /datum/language/drone name = "Drone" @@ -647,7 +652,7 @@ exclaim_verb = "declares" key = "]" flags = RESTRICTED - follow = 1 + follow = TRUE syllables = list ("beep", "boop") /datum/language/swarmer @@ -659,7 +664,7 @@ colour = "say_quote" key = "z"//Zwarmer...Or Zerg! flags = RESTRICTED | HIVEMIND - follow = 1 + follow = TRUE // Language handling. /mob/proc/add_language(language) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index ee858138f70..69a2e1160b0 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -73,7 +73,11 @@ stat = CONSCIOUS return health = maxHealth - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() + update_stat("updatehealth([reason])") + med_hud_set_health() + med_hud_set_status() + handle_hud_icons_health() /mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index adf81753827..bf2158ae58e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -17,7 +17,7 @@ . = -1 //hunters are sanic . += ..() //but they still need to slow down on stun -/mob/living/carbon/alien/humanoid/hunter/handle_regular_hud_updates() +/mob/living/carbon/alien/humanoid/hunter/handle_hud_icons_health() ..() //-Yvarov if(healths) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 6a9565fc449..3acb1fe8713 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -42,7 +42,7 @@ alien_organs += new /obj/item/organ/internal/xenos/neurotoxin ..() -/mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates() +/mob/living/carbon/alien/humanoid/sentinel/handle_hud_icons_health() ..() //-Yvarov if(healths) diff --git a/code/modules/mob/living/carbon/alien/humanoid/empress.dm b/code/modules/mob/living/carbon/alien/humanoid/empress.dm index f5355a38d67..a64602d030c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/empress.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/empress.dm @@ -48,29 +48,26 @@ alien_organs += new /obj/item/organ/internal/xenos/neurotoxin ..() -/mob/living/carbon/alien/humanoid/empress +/mob/living/carbon/alien/humanoid/empress/handle_hud_icons_health() + ..() //-Yvarov - handle_regular_hud_updates() - - ..() //-Yvarov - - if(src.healths) - if(src.stat != 2) - switch(health) - if(250 to INFINITY) - src.healths.icon_state = "health0" - if(175 to 250) - src.healths.icon_state = "health1" - if(100 to 175) - src.healths.icon_state = "health2" - if(50 to 100) - src.healths.icon_state = "health3" - if(0 to 50) - src.healths.icon_state = "health4" - else - src.healths.icon_state = "health5" - else - src.healths.icon_state = "health6" + if(healths) + if(stat != 2) + switch(health) + if(250 to INFINITY) + healths.icon_state = "health0" + if(175 to 250) + healths.icon_state = "health1" + if(100 to 175) + healths.icon_state = "health2" + if(50 to 100) + healths.icon_state = "health3" + if(0 to 50) + healths.icon_state = "health4" + else + healths.icon_state = "health5" + else + healths.icon_state = "health6" /mob/living/carbon/alien/humanoid/empress/verb/lay_egg() set name = "Lay Egg (250)" diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index d80d773325e..14124afef3e 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -32,7 +32,7 @@ . = ..() . += 3 -/mob/living/carbon/alien/humanoid/queen/handle_regular_hud_updates() +/mob/living/carbon/alien/humanoid/queen/handle_hud_icons_health() ..() //-Yvarov if(healths) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 04dcb0c60ef..78bc0004b15 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -72,7 +72,7 @@ var/const/MAX_ACTIVE_TIME = 400 /obj/item/clothing/mask/facehugger/equipped(mob/M) Attach(M) -/obj/item/clothing/mask/facehugger/Crossed(atom/target) +/obj/item/clothing/mask/facehugger/Crossed(atom/target, oldloc) HasProximity(target) return diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index c0e8badf35d..219ba9ca9eb 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -671,9 +671,9 @@ if(!restrained()) var/t1 = round(text2num(param)) if(isnum(t1)) - if(t1 <= 5 && (!r_hand || !l_hand)) + if(t1 <= 5 && t1 >= 1 && (!r_hand || !l_hand)) message = "[src] raises [t1] finger\s." - else if(t1 <= 10 && (!r_hand && !l_hand)) + else if(t1 <= 10 && t1 >= 1 && (!r_hand && !l_hand)) message = "[src] raises [t1] finger\s." m_type = 1 @@ -946,9 +946,13 @@ // Maybe some people are okay with that. for(var/mob/M in GLOB.dead_mob_list) - if(!M.client || istype(M, /mob/new_player)) - continue //skip monkeys, leavers and new players - if(M.stat == DEAD && M.get_preference(CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(!M.client) + continue + + if(isnewplayer(M)) + continue + + if(isobserver(M) && M.get_preference(CHAT_GHOSTSIGHT) && !(M in viewers(src, null)) && client) // The client check makes sure people with ghost sight don't get spammed by simple mobs emoting. M.show_message(message) switch(m_type) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 475b7079444..4aef44444e9 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -338,18 +338,9 @@ msg += "[p_they(TRUE)] [p_are()] mostly dessicated now, with only bones remaining of what used to be a person.\n" if(hasHUD(user,"security")) - var/perpname = "wot" + var/perpname = get_visible_name(TRUE) var/criminal = "None" - if(wear_id) - var/obj/item/card/id/I = wear_id.GetID() - if(I) - perpname = I.registered_name - else - perpname = name - else - perpname = name - if(perpname) for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) @@ -361,18 +352,9 @@ msg += "Security records: \[View\] \[Add comment\]\n" if(hasHUD(user,"medical")) - var/perpname = "wot" + var/perpname = get_visible_name(TRUE) var/medical = "None" - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name - for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.general) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 6481f6bc04a..c0e4d8570a1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -453,7 +453,7 @@ popup.open() -/mob/living/carbon/human/Crossed(atom/movable/AM) +/mob/living/carbon/human/Crossed(atom/movable/AM, oldloc) var/mob/living/simple_animal/bot/mulebot/MB = AM if(istype(MB)) MB.RunOver(src) @@ -711,17 +711,9 @@ if(usr.incapacitated()) return var/found_record = 0 - var/perpname = "wot" - if(wear_id) - var/obj/item/card/id/I = wear_id.GetID() - if(I) - perpname = I.registered_name - else - perpname = name - else - perpname = name + var/perpname = get_visible_name(TRUE) - if(perpname) + if(perpname != "Unknown") for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.security) @@ -758,17 +750,9 @@ if(hasHUD(usr,"security")) if(usr.incapacitated()) return - var/perpname = "wot" + var/perpname = get_visible_name(TRUE) var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.security) @@ -790,24 +774,16 @@ if(hasHUD(usr,"security")) if(usr.incapacitated()) return - var/perpname = "wot" + var/perpname = get_visible_name(TRUE) var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.security) if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"security")) read = 1 - if(length(R.fields["comments"])) + if(LAZYLEN(R.fields["comments"])) for(var/c in R.fields["comments"]) to_chat(usr, c) else @@ -821,15 +797,8 @@ if(hasHUD(usr,"security")) if(usr.incapacitated()) return - var/perpname = "wot" - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name + var/perpname = get_visible_name(TRUE) + for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.security) @@ -852,17 +821,8 @@ if(hasHUD(usr,"medical")) if(usr.incapacitated()) return - var/perpname = "wot" var/modified = 0 - - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name + var/perpname = get_visible_name(TRUE) for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) @@ -887,17 +847,9 @@ if(hasHUD(usr,"medical")) if(usr.incapacitated()) return - var/perpname = "wot" var/read = 0 - - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name + var/perpname = get_visible_name(TRUE) + for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.medical) @@ -920,24 +872,16 @@ if(hasHUD(usr,"medical")) if(usr.incapacitated()) return - var/perpname = "wot" + var/perpname = get_visible_name(TRUE) var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.medical) if(R.fields["id"] == E.fields["id"]) if(hasHUD(usr,"medical")) read = 1 - if(length(R.fields["comments"])) + if(LAZYLEN(R.fields["comments"])) for(var/c in R.fields["comments"]) to_chat(usr, c) else @@ -951,15 +895,7 @@ if(hasHUD(usr,"medical")) if(usr.incapacitated()) return - var/perpname = "wot" - if(wear_id) - if(istype(wear_id,/obj/item/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/pda)) - var/obj/item/pda/tempPda = wear_id - perpname = tempPda.owner - else - perpname = src.name + var/perpname = get_visible_name(TRUE) for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) for(var/datum/data/record/R in data_core.medical) @@ -974,6 +910,9 @@ if(isrobot(usr)) var/mob/living/silicon/robot/U = usr R.fields["comments"] += "Made by [U.name] ([U.modtype] [U.braintype]) on [current_date_string] [station_time_timestamp()]
[t1]" + if(isAI(usr)) + var/mob/living/silicon/ai/U = usr + R.fields["comments"] += "Made by [U.name] (artificial intelligence) on [current_date_string] [station_time_timestamp()]
[t1]" if(href_list["lookitem"]) var/obj/item/I = locate(href_list["lookitem"]) @@ -1606,7 +1545,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X //Check for arrest warrant if(judgebot.check_records) - var/perpname = get_face_name(get_id_name()) + var/perpname = get_visible_name(TRUE) var/datum/data/record/R = find_record("name", perpname, data_core.security) if(R && R.fields["criminal"]) switch(R.fields["criminal"]) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 63f9f10dc71..c5cbbc0b1d3 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -332,7 +332,7 @@ break //Only count the first bedsheet if(drunk) comfort += 1 //Aren't naps SO much better when drunk? - AdjustDrunk(1-0.0015*comfort) //reduce drunkenness ~6% per two seconds, when on floor. + AdjustDrunk(-0.2*comfort) //reduce drunkenness while sleeping. if(comfort > 1 && prob(3))//You don't heal if you're just sleeping on the floor without a blanket. adjustBruteLoss(-1*comfort) adjustFireLoss(-1*comfort) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index 914c810da27..38dadbbbfa7 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -146,6 +146,44 @@ stat(null,"Power Level: [powerlevel]") +/mob/living/carbon/slime/updatehealth(reason) + . = ..() + update_health_hud() + +/mob/living/carbon/slime/proc/update_health_hud() + if(hud_used) + var/severity = 0 + var/healthpercent = (health/maxHealth) * 100 + if(stat != DEAD) + switch(healthpercent) + if(100 to INFINITY) + healths.icon_state = "slime_health0" + if(80 to 100) + healths.icon_state = "slime_health1" + severity = 1 + if(60 to 80) + healths.icon_state = "slime_health2" + severity = 2 + if(40 to 60) + healths.icon_state = "slime_health3" + severity = 3 + if(20 to 40) + healths.icon_state = "slime_health4" + severity = 4 + if(0 to 20) + healths.icon_state = "slime_health5" + severity = 5 + if(-199 to 0) + healths.icon_state = "slime_health6" + severity = 6 + else + healths.icon_state = "slime_health7" + severity = 6 + if(severity > 0) + overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + else + clear_fullscreen("brute") + /mob/living/carbon/slime/adjustFireLoss(amount) ..(-abs(amount)) // Heals them return diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 276ee7b246e..4909148b492 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -59,8 +59,7 @@ handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc if(client) - //regular_hud_updates() //THIS DOESN'T FUCKING UPDATE SHIT - handle_regular_hud_updates() //IT JUST REMOVES FUCKING HUD IMAGES + handle_regular_hud_updates() ..() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index f9dba949b4b..57c67f5fd61 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -256,8 +256,10 @@ death() to_chat(src, "You have given up life and succumbed to death.") + /mob/living/proc/InCritical() return (health < HEALTH_THRESHOLD_CRIT && health > HEALTH_THRESHOLD_DEAD && stat == UNCONSCIOUS) + /mob/living/ex_act(severity) ..() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 95b44b15862..be5187fac5b 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -216,7 +216,7 @@ proc/get_radio_key_from_channel(var/channel) message_range = 1 if(pressure < ONE_ATMOSPHERE * 0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet - italics = 1 + italics = TRUE sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact var/list/hear = hear(message_range, T) @@ -236,12 +236,20 @@ proc/get_radio_key_from_channel(var/channel) for(var/mob/M in GLOB.player_list) if(!M.client) - continue //skip monkeys and leavers + continue + if(isnewplayer(M)) continue - if(M.stat == DEAD && M.client && M.get_preference(CHAT_GHOSTEARS) && client) // client is so that ghosts don't have to listen to mice - listening |= M - continue + + if(isobserver(M)) + if(M.get_preference(CHAT_GHOSTEARS) && client) // The client check is so that ghosts don't have to listen to mice. + listening |= M + continue + + if(message_range < world.view && (get_dist(T, M) <= world.view)) + listening |= M + continue + if(get_turf(M) in hearturfs) listening |= M @@ -291,10 +299,13 @@ proc/get_radio_key_from_channel(var/channel) log_emote(message, src) for(var/mob/M in GLOB.dead_mob_list) - if(!M.client || istype(M, /mob/new_player)) - continue //skip monkeys, leavers and new players //who the hell knows why new players are in the dead mob list + if(!M.client) + continue //skip monkeys and leavers - if(M.stat == DEAD && M.get_preference(CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(isnewplayer(M)) + continue + + if(isobserver(M) && M.get_preference(CHAT_GHOSTSIGHT) && !(M in viewers(src, null)) && client) // The client check makes sure people with ghost sight don't get spammed by simple mobs emoting. M.show_message(message) switch(type) @@ -380,7 +391,7 @@ proc/get_radio_key_from_channel(var/channel) var/list/hearturfs = list() - //Pass whispers on to anything inside the immediate listeners. + // Pass whispers on to anything inside the immediate listeners. // This comes before the ghosts do so that ghosts don't act as whisper relays for(var/atom/L in listening) if(ismob(L)) @@ -391,22 +402,26 @@ proc/get_radio_key_from_channel(var/channel) if(isobj(L)) hearturfs += get_turf(L) - //ghosts - for(var/mob/M in GLOB.dead_mob_list) //does this include players who joined as observers as well? + // Loop through all players to see if they need to hear it. + for(var/mob/M in GLOB.player_list) if(!M.client) continue - if(M.stat == DEAD && M.client && M.get_preference(CHAT_GHOSTEARS)) - listening |= M - // This, in tandem with "hearturfs", lets nested mobs hear whispers that are in range - // Grifted from saycode above. - for(var/mob/M in GLOB.player_list) - if(!M.client || isnewplayer(M)) - continue //skip monkeys and leavers + if(isnewplayer(M)) + continue + + if(isobserver(M)) + if(M.get_preference(CHAT_GHOSTEARS)) // The client check is so that ghosts don't have to listen to mice. + listening |= M + continue + + if(message_range < world.view && (get_dist(whisper_loc, M) <= world.view)) + listening |= M + continue + if(get_turf(M) in hearturfs) listening |= M - //pass on the message to objects that can hear us. for(var/obj/O in view(message_range, whisper_loc)) spawn(0) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 80d644152f4..023c03cd00a 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -498,7 +498,7 @@ var/list/ai_verbs_default = list( if(check_unable(AI_CHECK_WIRELESS)) return - var/input = input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + var/input = clean_input("Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") if(!input || stat) return @@ -634,7 +634,7 @@ var/list/ai_verbs_default = list( return if(href_list["trackbot"]) - var/mob/living/simple_animal/bot/target = locate(href_list["trackbot"]) in GLOB.simple_animals + var/mob/living/simple_animal/bot/target = locate(href_list["trackbot"]) in GLOB.bots_list if(target) ai_actual_track(target) else @@ -642,7 +642,7 @@ var/list/ai_verbs_default = list( return if(href_list["callbot"]) //Command a bot to move to a selected location. - Bot = locate(href_list["callbot"]) in GLOB.simple_animals + Bot = locate(href_list["callbot"]) in GLOB.bots_list if(!Bot || Bot.remote_disabled || control_disabled) return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off. waypoint_mode = 1 @@ -650,7 +650,7 @@ var/list/ai_verbs_default = list( return if(href_list["interface"]) //Remotely connect to a bot! - Bot = locate(href_list["interface"]) in GLOB.simple_animals + Bot = locate(href_list["interface"]) in GLOB.bots_list if(!Bot || Bot.remote_disabled || control_disabled) return Bot.attack_ai(src) @@ -746,7 +746,7 @@ var/list/ai_verbs_default = list( d += "Query network status
" d += "" - for(var/mob/living/simple_animal/bot/Bot in GLOB.simple_animals) + for(var/mob/living/simple_animal/bot/Bot in GLOB.bots_list) if(is_ai_allowed(Bot.z) && !Bot.remote_disabled) //Only non-emagged bots on the allowed Z-level are detected! bot_area = get_area(Bot) d += "" @@ -1074,7 +1074,7 @@ var/list/ai_verbs_default = list( set desc = "Change the message that's transmitted when a new crew member arrives on station." set category = "AI Commands" - var/newmsg = input("What would you like the arrival message to be? List of options: $name, $rank, $species, $gender, $age", "Change Arrival Message", arrivalmsg) as text + var/newmsg = clean_input("What would you like the arrival message to be? List of options: $name, $rank, $species, $gender, $age", "Change Arrival Message", arrivalmsg) if(newmsg != arrivalmsg) arrivalmsg = newmsg to_chat(usr, "The arrival message has been successfully changed.") diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index e44ba0741be..36f248cd2c2 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -99,7 +99,7 @@ var/const/VOX_PATH = "sound/vox_fem/" to_chat(src, "Please wait [round((announcing_vox - world.time) / 10)] seconds.") return - var/message = input(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement) as text|null + var/message = clean_input("WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", last_announcement, src) last_announcement = message diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0c6ddf80fc6..b9ed81f7180 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -576,6 +576,8 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/restrained() return 0 +/mob/living/silicon/robot/InCritical() + return low_power_mode /mob/living/silicon/robot/ex_act(severity) switch(severity) @@ -1456,4 +1458,4 @@ var/list/robot_verbs_default = list( SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) sync_lighting_plane_alpha() - \ No newline at end of file + diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 2cb9ddf6252..bac58d8f124 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -337,4 +337,5 @@ /////////////////////////////////// EAR DAMAGE //////////////////////////////////// /mob/living/silicon/can_hear() - . = TRUE \ No newline at end of file + . = TRUE + diff --git a/code/modules/mob/living/simple_animal/bot/griefsky.dm b/code/modules/mob/living/simple_animal/bot/griefsky.dm index 67c3780fac0..4dc50fca8f8 100644 --- a/code/modules/mob/living/simple_animal/bot/griefsky.dm +++ b/code/modules/mob/living/simple_animal/bot/griefsky.dm @@ -48,7 +48,7 @@ ..() light_color = LIGHT_COLOR_PURE_RED //if you see a red one. RUN!! -/mob/living/simple_animal/bot/secbot/griefsky/Crossed(atom/movable/AM) +/mob/living/simple_animal/bot/secbot/griefsky/Crossed(atom/movable/AM, oldloc) ..() if(ismob(AM) && AM == target) var/mob/living/carbon/C = AM diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 45b10950669..3499ae06649 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -298,7 +298,7 @@ target = user mode = BOT_HUNT -/mob/living/simple_animal/bot/honkbot/Crossed(atom/movable/AM) +/mob/living/simple_animal/bot/honkbot/Crossed(atom/movable/AM, oldloc) if(ismob(AM) && on) //only if its online if(prob(30)) //you're far more likely to trip on a honkbot var/mob/living/carbon/C = AM diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 14a72c43fac..ea559fdc597 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -439,7 +439,7 @@ Auto Patrol: []"}, target = user mode = BOT_HUNT -/mob/living/simple_animal/bot/secbot/Crossed(atom/movable/AM) +/mob/living/simple_animal/bot/secbot/Crossed(atom/movable/AM, oldloc) if(ismob(AM) && target) var/mob/living/carbon/C = AM if(!istype(C) || !C || in_range(src, target)) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 5be21c8646e..b52140922f1 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -24,7 +24,7 @@ /mob/living/simple_animal/cockroach/can_die() return ..() && !SSticker.cinematic //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes. -/mob/living/simple_animal/cockroach/Crossed(var/atom/movable/AM) +/mob/living/simple_animal/cockroach/Crossed(var/atom/movable/AM, oldloc) if(isliving(AM)) var/mob/living/A = AM if(A.mob_size > MOB_SIZE_SMALL) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 4faa821701c..cbc125beeab 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -91,7 +91,7 @@ to_chat(src, "You are too small to pull anything.") return -/mob/living/simple_animal/mouse/Crossed(AM as mob|obj) +/mob/living/simple_animal/mouse/Crossed(AM as mob|obj, oldloc) if(ishuman(AM)) if(!stat) var/mob/M = AM diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index 545866858ca..d408045a923 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -16,6 +16,10 @@ turns_per_move = 10 icon = 'icons/mob/penguins.dmi' +/mob/living/simple_animal/pet/penguin/Initialize(mapload) + . = ..() + AddComponent(/datum/component/waddling) + /mob/living/simple_animal/pet/penguin/emperor name = "Emperor penguin" real_name = "penguin" diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 13e7c893d86..ac913170c86 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -12,8 +12,8 @@ response_disarm = "shoos" response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") - var/colour = "grey" pass_flags = PASSTABLE + var/colour = "grey" /mob/living/simple_animal/slime/adult health = 200 @@ -24,3 +24,37 @@ /mob/living/simple_animal/slime/New() ..() overlays += "aslime-:33" + +/mob/living/simple_animal/slime/updatehealth(reason) + . = ..() + update_health_hud() + +/mob/living/simple_animal/slime/proc/update_health_hud() + if(hud_used) + var/severity = 0 + var/healthpercent = (health/maxHealth) * 100 + switch(healthpercent) + if(100 to INFINITY) + healths.icon_state = "slime_health0" + if(80 to 100) + healths.icon_state = "slime_health1" + severity = 1 + if(60 to 80) + healths.icon_state = "slime_health2" + severity = 2 + if(40 to 60) + healths.icon_state = "slime_health3" + severity = 3 + if(20 to 40) + healths.icon_state = "slime_health4" + severity = 4 + if(1 to 20) + healths.icon_state = "slime_health5" + severity = 5 + else + healths.icon_state = "slime_health7" + severity = 6 + if(severity > 0) + overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity) + else + clear_fullscreen("brute") diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index d1982ac359d..0aa148eb031 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -4,7 +4,7 @@ icon = 'icons/mob/alien.dmi' icon_state = "alienh_running" icon_living = "alienh_running" - icon_dead = "alien_l" + icon_dead = "alienh_dead" icon_gib = "syndicate_gib" response_help = "pokes the" response_disarm = "shoves the" @@ -40,7 +40,7 @@ name = "alien drone" icon_state = "aliend_running" icon_living = "aliend_running" - icon_dead = "aliend_l" + icon_dead = "aliend_dead" health = 60 maxHealth = 60 melee_damage_lower = 15 @@ -61,7 +61,7 @@ name = "alien sentinel" icon_state = "aliens_running" icon_living = "aliens_running" - icon_dead = "aliens_l" + icon_dead = "aliens_dead" health = 120 maxHealth = 120 melee_damage_lower = 15 @@ -77,7 +77,7 @@ name = "alien queen" icon_state = "alienq_running" icon_living = "alienq_running" - icon_dead = "alienq_l" + icon_dead = "alienq_d" health = 250 maxHealth = 250 melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 5ebefeba405..8b814076720 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -142,7 +142,7 @@ return //no don't attack the goddamm box else ..() - if(isliving(target)) + if(isliving(target) && (!client || a_intent == INTENT_HARM)) var/mob/living/L = target if(L.reagents) if(beegent) diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 13c695387bd..5b97579b146 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -1,7 +1,6 @@ /mob/living/simple_animal/hostile/creature name = "creature" desc = "A sanity-destroying otherthing." - icon = 'icons/mob/critter.dmi' speak_emote = list("gibbers") icon_state = "otherthing" icon_living = "otherthing" diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm index 100225e0760..e34a5e0cb08 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm @@ -21,6 +21,7 @@ maxHealth = 50 health = 50 pixel_x = -16 + see_in_dark = 8 harm_intent_damage = 8 melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 6af11b10b14..7f974149556 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -496,6 +496,7 @@ Difficulty: Hard icon = 'icons/effects/effects.dmi' icon_state = "hierophant_blast" name = "vortex blast" + layer = 3.9 // between LYING_MOB_LAYER and ABOVE_MOB_LAYER luminosity = 1 desc = "Get out of the way!" duration = 9 @@ -526,7 +527,7 @@ Difficulty: Hard sleep(1.3) //slightly forgiving; the burst animation is 1.5 deciseconds bursting = FALSE //we no longer damage crossers -/obj/effect/temp_visual/hierophant/blast/Crossed(atom/movable/AM) +/obj/effect/temp_visual/hierophant/blast/Crossed(atom/movable/AM, oldloc) ..() if(bursting) do_damage(get_turf(src)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm index 2ee9c387140..c6bc205627e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm @@ -12,7 +12,7 @@ maxHealth = 250 max_mobs = 3 spawn_time = 300 //30 seconds default - mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril + mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril) spawn_text = "emerges from" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 @@ -73,7 +73,7 @@ qdel(src) /mob/living/simple_animal/hostile/spawner/lavaland/goliath - mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril + mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril) /mob/living/simple_animal/hostile/spawner/lavaland/legion - mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril \ No newline at end of file + mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm new file mode 100644 index 00000000000..70d279fd400 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -0,0 +1,113 @@ +/mob/living/simple_animal/hostile/netherworld + name = "creature" + desc = "A sanity-destroying otherthing from the netherworld." + icon_state = "otherthing" + icon_living = "otherthing" + icon_dead = "otherthing-dead" + health = 80 + maxHealth = 80 + obj_damage = 100 + melee_damage_lower = 25 + melee_damage_upper = 50 + attacktext = "slashes" + attack_sound = 'sound/weapons/bladeslice.ogg' + faction = list("creature") + speak_emote = list("screams") + gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + faction = list("nether") + +/mob/living/simple_animal/hostile/netherworld/migo + name = "mi-go" + desc = "A pinkish, fungoid crustacean-like creature with numerous pairs of clawed appendages and a head covered with waving antennae." + speak_emote = list("screams", "clicks", "chitters", "barks", "moans", "growls", "meows", "reverberates", "roars", "squeaks", "rattles", "exclaims", "yells", "remarks", "mumbles", "jabbers", "stutters", "seethes") + icon_state = "mi-go" + icon_living = "mi-go" + icon_dead = "mi-go-dead" + attacktext = "lacerates" + speed = -0.5 + var/static/list/migo_sounds + deathmessage = "wails as its form turns into a pulpy mush." + death_sound = 'sound/voice/hiss6.ogg' + +/mob/living/simple_animal/hostile/netherworld/migo/Initialize() + . = ..() + migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heartbeat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/goonstation/effects/screech.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/goonstation/misc/airraid_loop.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/chainsaw.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshots/gunshot_silenced.ogg', 'sound/weapons/gunshots/gunshot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers + +/mob/living/simple_animal/hostile/netherworld/migo/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) + ..() + if(stat) + return + var/chosen_sound = pick(migo_sounds) + playsound(src, chosen_sound, 50, TRUE) + +/mob/living/simple_animal/hostile/netherworld/migo/Life() + ..() + if(stat) + return + if(prob(10)) + var/chosen_sound = pick(migo_sounds) + playsound(src, chosen_sound, 50, TRUE) + +/mob/living/simple_animal/hostile/netherworld/blankbody + name = "blank body" + desc = "This looks human enough, but its flesh has an ashy texture, and it's face is featureless save an eerie smile." + icon_state = "blank-body" + icon_living = "blank-body" + icon_dead = "blank-dead" + gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + health = 100 + maxHealth = 100 + melee_damage_lower = 5 + melee_damage_upper = 10 + attacktext = "punches" + deathmessage = "falls apart into a fine dust." + +/mob/living/simple_animal/hostile/spawner/nether + name = "netherworld link" + desc = null //see examine() + icon_state = "nether" + health = 50 + maxHealth = 50 + spawn_time = 600 //1 minute + max_mobs = 15 + icon = 'icons/mob/nest.dmi' + spawn_text = "crawls through" + mob_types = list(/mob/living/simple_animal/hostile/netherworld/migo, /mob/living/simple_animal/hostile/netherworld, /mob/living/simple_animal/hostile/netherworld/blankbody) + faction = list("nether") + +/mob/living/simple_animal/hostile/spawner/nether/death() + . = ..() + qdel(src) + +/mob/living/simple_animal/hostile/spawner/nether/examine(mob/user) + ..() + if(isskeleton(user)) + to_chat(user, "A direct link to another dimension full of creatures very happy to see you. You can see your house from here!") + else + to_chat(user, "A direct link to another dimension full of creatures not very happy to see you. Entering the link would be a very bad idea.") + +/mob/living/simple_animal/hostile/spawner/nether/attack_hand(mob/user) + . = ..() + if(isskeleton(user)) + to_chat(user, "You don't feel like going home yet...") + else + user.visible_message("[user] is violently pulled into the link!", \ + "Touching the portal, you are quickly pulled through into a world of unimaginable horror!") + contents.Add(user) + +/mob/living/simple_animal/hostile/spawner/nether/Life() + . = ..() + for(var/mob/living/M in contents) + if(M) + playsound(src, 'sound/magic/demon_consume.ogg', 50, 1) + M.adjustBruteLoss(60) + new /obj/effect/gibspawner/generic(get_turf(M), M) + if(M.stat == DEAD) + var/mob/living/simple_animal/hostile/netherworld/blankbody/blank + blank = new(loc) + blank.name = "[M]" + blank.desc = "It's [M], but [M.p_their()] flesh has an ashy texture, and [M.p_their()] face is featureless save an eerie smile." + visible_message("[M] reemerges from the link!") + qdel(M) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm index 184cb9eacb1..555530ee71d 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm @@ -54,7 +54,7 @@ melee_damage_lower = 2 melee_damage_upper = 2 speak_emote = list("blurps") - butcher_results = null + butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat = 1) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index e2c9194abc5..52ec406fcbd 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -36,7 +36,7 @@ desc = "A thick vine, painful to the touch." -/obj/effect/ebeam/vine/Crossed(atom/movable/AM) +/obj/effect/ebeam/vine/Crossed(atom/movable/AM, oldloc) if(isliving(AM)) var/mob/living/L = AM if(!("vines" in L.faction)) diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm index 38a9c176be7..747c7690150 100644 --- a/code/modules/mob/living/simple_animal/spawner.dm +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -7,7 +7,7 @@ var/max_mobs = 5 var/spawn_delay = 0 var/spawn_time = 300 //30 seconds default - var/mob_type = /mob/living/simple_animal/hostile/carp + var/mob_types = list(/mob/living/simple_animal/hostile/carp) var/spawn_text = "emerges from" status_flags = 0 move_resist = MOVE_FORCE_VERY_STRONG @@ -39,7 +39,8 @@ if(spawn_delay > world.time) return 0 spawn_delay = world.time + spawn_time - var/mob/living/simple_animal/L = new mob_type(src.loc) + var/chosen_type = pick(mob_types) + var/mob/living/simple_animal/L = new chosen_type(loc) L.admin_spawned = admin_spawned //If we were admin spawned, lets have our children count as that as well. spawned_mobs += L L.nest = src @@ -51,7 +52,7 @@ icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" spawn_text = "warps in from" - mob_type = /mob/living/simple_animal/hostile/syndicate/ranged + mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged) faction = list("syndicate") /mob/living/simple_animal/hostile/spawner/mining @@ -64,21 +65,21 @@ max_mobs = 3 icon = 'icons/mob/nest.dmi' spawn_text = "crawls out of" - mob_type = /mob/living/simple_animal/hostile/asteroid/goldgrub + mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("mining") /mob/living/simple_animal/hostile/spawner/mining/goliath name = "goliath den" desc = "A den housing a nest of goliaths, oh god why?" - mob_type = /mob/living/simple_animal/hostile/asteroid/goliath + mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath) /mob/living/simple_animal/hostile/spawner/mining/hivelord name = "hivelord den" desc = "A den housing a nest of hivelords." - mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord + mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord) /mob/living/simple_animal/hostile/spawner/mining/basilisk name = "basilisk den" desc = "A den housing a nest of basilisks, bring a coat." - mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk + mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4e486baba20..02cb948c5c9 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -693,9 +693,13 @@ var/list/slot_equipment_priority = list( \ msg = copytext(msg, 1, MAX_MESSAGE_LEN) msg = sanitize_simple(html_encode(msg), list("\n" = "
")) - - if(mind) + + var/combined = length(memory + msg) + if(mind && (combined < MAX_PAPER_MESSAGE_LEN)) mind.store_memory(msg) + else if(combined >= MAX_PAPER_MESSAGE_LEN) + to_chat(src, "Your brain can't hold that much information!") + return else to_chat(src, "The game appears to have misplaced your mind datum, so we can't show you your notes.") @@ -1366,5 +1370,19 @@ var/list/slot_equipment_priority = list( \ /mob/proc/sync_lighting_plane_alpha() if(hud_used) var/obj/screen/plane_master/lighting/L = hud_used.plane_masters["[LIGHTING_PLANE]"] - if (L) + if(L) L.alpha = lighting_alpha + + sync_nightvision_screen() //Sync up the overlay used for nightvision to the amount of see_in_dark a mob has. This needs to be called everywhere sync_lighting_plane_alpha() is. + +/mob/proc/sync_nightvision_screen() + var/obj/screen/fullscreen/see_through_darkness/S = screens["see_through_darkness"] + if(S) + var/suffix = "" + switch(see_in_dark) + if(3 to 8) + suffix = "_[see_in_dark]" + if(8 to INFINITY) + suffix = "_8" + + S.icon_state = "[initial(S.icon_state)][suffix]" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a26131b9504..0a0e8422dbf 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -369,7 +369,7 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) if(hud_used && hud_used.action_intent) hud_used.action_intent.icon_state = "[a_intent]" - else if(isrobot(src) || islarva(src) || isanimal(src)) + else if(isrobot(src) || islarva(src) || isanimal(src) || isAI(src)) switch(input) if(INTENT_HELP) a_intent = INTENT_HELP @@ -482,6 +482,8 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) if(A) if(O.client.prefs && O.client.prefs.UI_style) A.icon = ui_style2icon(O.client.prefs.UI_style) + if(title) + A.name = title A.desc = message A.action = action A.target = source @@ -565,9 +567,9 @@ var/list/intents = list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM) for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name. if(force) - newname = input(src, "Pick a new name.", "Name Change", oldname) as text + newname = clean_input("Pick a new name.", "Name Change", oldname, src) else - newname = input(src, "You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname) as text + newname = clean_input("You are a [role]. Would you like to change your name to something else? (You have 3 minutes to select a new name.)", "Name Change", oldname, src) if(((world.time - time_passed) > 1800) && !force) alert(src, "Unfortunately, more than 3 minutes have passed for selecting your name. If you are a robot, use the Namepick verb; otherwise, adminhelp.", "Name Change") return //took too long diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index a94be6a54c1..c3ec68c9793 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -9,7 +9,7 @@ return if(!new_type) - new_type = input("Mob type path:", "Mob type") as text|null + new_type = clean_input("Mob type path:", "Mob type") if(istext(new_type)) new_type = text2path(new_type) diff --git a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm index 10f7b1acd46..d4834eccc80 100644 --- a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm @@ -169,7 +169,10 @@ /datum/sprite_accessory/underwear icon = 'icons/mob/underwear.dmi' species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox") - sprite_sheets = list("Vox" = 'icons/mob/species/vox/underwear.dmi') + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/underwear.dmi', + "Grey" = 'icons/mob/species/grey/underwear.dmi' + ) gender = NEUTER /datum/sprite_accessory/underwear/nude @@ -296,7 +299,9 @@ /datum/sprite_accessory/undershirt icon = 'icons/mob/underwear.dmi' species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox") - sprite_sheets = list("Vox" = 'icons/mob/species/vox/underwear.dmi') + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/underwear.dmi', + "Grey" = 'icons/mob/species/grey/underwear.dmi') gender = NEUTER /datum/sprite_accessory/undershirt/nude diff --git a/code/modules/modular_computers/file_system/programs/command/comms.dm b/code/modules/modular_computers/file_system/programs/command/comms.dm index 637e4379e0a..dfce733cc7a 100644 --- a/code/modules/modular_computers/file_system/programs/command/comms.dm +++ b/code/modules/modular_computers/file_system/programs/command/comms.dm @@ -245,7 +245,7 @@ message_cooldown = 0 if("callshuttle") - var/input = input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null + var/input = clean_input("Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") if(!input || ..() || !is_authenticated(usr)) SSnanoui.update_uis(src) return 1 @@ -306,11 +306,11 @@ setMenuState(usr, COMM_SCREEN_STAT) if("setmsg1") - stat_msg1 = input("Line 1", "Enter Message Text", stat_msg1) as text|null + stat_msg1 = clean_input("Line 1", "Enter Message Text", stat_msg1) setMenuState(usr, COMM_SCREEN_STAT) if("setmsg2") - stat_msg2 = input("Line 2", "Enter Message Text", stat_msg2) as text|null + stat_msg2 = clean_input("Line 2", "Enter Message Text", stat_msg2) setMenuState(usr, COMM_SCREEN_STAT) if("nukerequest") diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm index d33b59528f9..c62067bfaf8 100644 --- a/code/modules/nano/modules/nano_module.dm +++ b/code/modules/nano/modules/nano_module.dm @@ -1,6 +1,6 @@ /datum/nano_module var/name - var/host + var/datum/host /datum/nano_module/New(var/host) src.host = host @@ -8,5 +8,9 @@ /datum/nano_module/nano_host() return host ? host : src +/datum/nano_module/on_ui_close(mob/user) + if(host) + host.on_ui_close(user) + /datum/nano_module/proc/can_still_topic(var/datum/topic_state/state = default_state) return CanUseTopic(usr, state) == STATUS_INTERACTIVE diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index 6864c834f3a..8e7269972fd 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -40,6 +40,14 @@ /datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state) return +/** + * The UI-close proc is called when the UI is closed. + * + * @param user /mob The mob who was interacting with this UI. + */ +/datum/proc/on_ui_close(mob/user) + return + /** * The ui_data proc is used to get data for the interface * diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 1dbdcc05b92..5bd0f3827ac 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -444,6 +444,8 @@ nanoui is used to open and update nano browser uis for(var/datum/nanoui/child in children) child.close() + src_object.on_ui_close(user) + /** * Set the UI window to call the nanoclose verb when the window is closed * This allows Nano to handle closed windows diff --git a/code/modules/ninja/suit/SpiderOS.dm b/code/modules/ninja/suit/SpiderOS.dm index cb91167e202..d9827c5cf32 100644 --- a/code/modules/ninja/suit/SpiderOS.dm +++ b/code/modules/ninja/suit/SpiderOS.dm @@ -211,7 +211,7 @@ if("Message") var/obj/item/pda/P = locate(href_list["target"]) - var/t = input(U, "Please enter untraceable message.") as text + var/t = clean_input("Please enter untraceable message.", user=U) t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN) if(!t||U.stat||U.wear_suit!=src||!s_initialized)//Wow, another one of these. Man... display_to << browse(null, "window=spideros") diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index b161391f6e3..7c7fe156ca0 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -36,7 +36,7 @@ to_chat(user, "You put the [W] into \the [src].") update_icon() else if(istype(W, /obj/item/pen)) - var/n_name = input(usr, "What would you like to label the folder?", "Folder Labelling", null) as text|null + var/n_name = clean_input("What would you like to label the folder?", "Folder Labelling", null) if(!n_name) return n_name = sanitize(copytext(n_name, 1, MAX_NAME_LEN)) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 23a37e06409..9e844d6cf21 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -54,8 +54,6 @@ /obj/item/paper/update_icon() ..() - if(icon_state == "paper_talisman") - return if(info) icon_state = "paper_words" return @@ -215,7 +213,7 @@ /obj/item/paper/proc/parsepencode(var/t, var/obj/item/pen/P, mob/user as mob) - t = pencode_to_html(t, usr, P, TRUE, TRUE, TRUE, deffont, signfont, crayonfont) + t = pencode_to_html(html_encode(t), usr, P, TRUE, TRUE, TRUE, deffont, signfont, crayonfont) return t /obj/item/paper/proc/populatefields() @@ -285,7 +283,6 @@ message_admins("PAPER: [key_name_admin(usr)] tried to use forbidden word in [src]: [bad].") return */ - t = html_encode(t) t = parsepencode(t, i, usr) // Encode everything from pencode to html if(id!="end") diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index a66e72d17a3..4ca5b4af427 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -21,9 +21,9 @@ if("alert") post_status("alert", href_list["alert"]) if("setmsg1") - message1 = input("Line 1", "Enter Message Text", message1) as text|null + message1 = clean_input("Line 1", "Enter Message Text", message1) if("setmsg2") - message2 = input("Line 2", "Enter Message Text", message2) as text|null + message2 = clean_input("Line 2", "Enter Message Text", message2) else post_status(href_list["statdisp"]) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 6c8eba8fb62..89e37b88c5c 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -33,11 +33,10 @@ return 0 -/obj/machinery/field/containment/Crossed(mob/mover) +/obj/machinery/field/containment/Crossed(mob/mover, oldloc) if(isliving(mover)) shock_field(mover) -/obj/machinery/field/containment/Crossed(obj/mover) if(istype(mover, /obj/machinery) || istype(mover, /obj/structure) || istype(mover, /obj/mecha)) bump_field(mover) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 420a112c352..b2f172deb72 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -287,7 +287,7 @@ field_generator power level display fields += CF G.fields += CF for(var/mob/living/L in T) - CF.Crossed(L) + CF.Crossed(L, null) connected_gens |= G G.connected_gens |= src diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index 2b6695b9e85..befb2a4931a 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -39,7 +39,7 @@ var/obj/singularity/S = A S.energy += energy -/obj/effect/accelerated_particle/Crossed(atom/A) +/obj/effect/accelerated_particle/Crossed(atom/A, oldloc) if(isliving(A)) toxmob(A) diff --git a/code/modules/power/supermatter/sm_shard.dm b/code/modules/power/supermatter/sm_shard.dm index 1d946fee0c8..c5d7549e0a7 100644 --- a/code/modules/power/supermatter/sm_shard.dm +++ b/code/modules/power/supermatter/sm_shard.dm @@ -41,7 +41,7 @@ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return ..() -/obj/item/shard/supermatter/Crossed(AM as mob|obj) +/obj/item/shard/supermatter/Crossed(AM as mob|obj, oldloc) if(ismob(AM)) var/mob/M = AM to_chat(M, "You step on \the [src]!") diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 1548738f3f5..36f3ac15df4 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -25,7 +25,7 @@ /obj/machinery/power/treadmill/update_icon() icon_state = speed ? "conveyor-1" : "conveyor0" -/obj/machinery/power/treadmill/Crossed(mob/living/M) +/obj/machinery/power/treadmill/Crossed(mob/living/M, oldloc) if(anchored && !M.anchored) if(!istype(M) || M.dir != dir) throw_off(M) diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index 645c6e786de..5c46ac20058 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -149,8 +149,8 @@ set category = "Debug" var/datum/mapGenerator/nature/N = new() - var/startInput = input(usr,"Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text - var/endInput = input(usr,"End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text + var/startInput = clean_input("Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") + var/endInput = clean_input("End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") //maxx maxy and current z so that if you fuck up, you only fuck up one entire z level instead of the entire universe if(!startInput || !endInput) to_chat(src, "Missing Input") diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 647c690a40d..3cba868a379 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -299,6 +299,18 @@ user.apply_damage(300, BRUTE, affecting) user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!") +/obj/item/gun/projectile/revolver/russian/soul + name = "cursed Russian revolver" + desc = "To play with this revolver requires wagering your very soul." + +/obj/item/gun/projectile/revolver/russian/soul/shoot_self(mob/living/user) + ..() + var/obj/item/soulstone/anybody/SS = new /obj/item/soulstone/anybody(get_turf(src)) + if(!SS.transfer_soul("FORCE", user)) //Something went wrong + qdel(SS) + return + user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!") + /obj/item/gun/projectile/revolver/capgun name = "cap gun" desc = "Looks almost like the real thing! Ages 8 and up." diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 949983d45ba..a8d368d6aef 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -281,7 +281,7 @@ Range() sleep(1) -obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. +obj/item/projectile/Crossed(atom/movable/AM, oldloc) //A mob moving on a tile with a projectile is hit by it. ..() if(isliving(AM) && AM.density && !checkpass(PASSMOB)) Bump(AM, 1) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index e10cd5c9203..48b76b0de98 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -133,6 +133,39 @@ if(loaded_pill_bottle) loaded_pill_bottle.forceMove(loc) loaded_pill_bottle = null + else if(href_list["change_pillbottle"]) + if(loaded_pill_bottle) + var/list/wrappers = list("Default wrapper", "Red wrapper", "Green wrapper", "Pale green wrapper", "Blue wrapper", "Light blue wrapper", "Teal wrapper", "Yellow wrapper", "Orange wrapper", "Pink wrapper", "Brown wrapper") + var/chosen = input(usr, "Select a pillbottle wrapper", "Pillbottle wrapper", wrappers[1]) as null|anything in wrappers + if(!chosen) + return + var/color + switch(chosen) + if("Default wrapper") + loaded_pill_bottle.cut_overlays() + return + if("Red wrapper") + color = COLOR_RED + if("Green wrapper") + color = COLOR_GREEN + if("Pink wrapper") + color = COLOR_PINK + if("Teal wrapper") + color = COLOR_TEAL + if("Blue wrapper") + color = COLOR_BLUE + if("Brown wrapper") + color = COLOR_MAROON + if("Light blue wrapper") + color = COLOR_CYAN_BLUE + if("Yellow wrapper") + color = COLOR_YELLOW + if("Pale green wrapper") + color = COLOR_PALE_BTL_GREEN + if("Orange wrapper") + color = COLOR_ORANGE + loaded_pill_bottle.wrapper_color = color; + loaded_pill_bottle.apply_wrap(); else if(href_list["close"]) usr << browse(null, "window=chem_master") onclose(usr, "chem_master") @@ -185,7 +218,7 @@ dat += "(Back)" else dat += "Condimaster 3000Condiment infos:

Name:
[href_list["name"]]

Description:
[href_list["desc"]]


(Back)" - usr << browse(dat, "window=chem_master;size=575x400") + usr << browse(dat, "window=chem_master;size=575x500") return else if(href_list["add"]) @@ -249,7 +282,7 @@ var/amount_per_pill = reagents.total_volume / count if(amount_per_pill > 100) amount_per_pill = 100 - var/name = input(usr,"Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as text|null + var/name = clean_input("Name:","Name your pill!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") if(!name) return name = reject_bad_text(name) @@ -270,7 +303,7 @@ P.forceMove(loaded_pill_bottle) updateUsrDialog() else - var/name = input(usr, "Name:", "Name your bag!", reagents.get_master_reagent_name()) as text|null + var/name = clean_input("Name:", "Name your bag!", reagents.get_master_reagent_name()) if(!name) return name = reject_bad_text(name) @@ -295,7 +328,7 @@ var/amount_per_patch = reagents.total_volume/count if(amount_per_patch > 40) amount_per_patch = 40 - var/name = input(usr, "Name:", "Name your patch!", "[reagents.get_master_reagent_name()] ([amount_per_patch]u)") as text|null + var/name = clean_input("Name:", "Name your patch!", "[reagents.get_master_reagent_name()] ([amount_per_patch]u)") if(!name) return name = reject_bad_text(name) @@ -317,7 +350,7 @@ else if(href_list["createbottle"]) if(!condi) - var/name = input(usr, "Name:", "Name your bottle!", reagents.get_master_reagent_name()) as text|null + var/name = clean_input("Name:", "Name your bottle!", reagents.get_master_reagent_name()) if(!name) return name = reject_bad_text(name) @@ -388,7 +421,7 @@ ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 400) + ui = new(user, src, ui_key, "chem_master.tmpl", name, 575, 500) ui.open() /obj/machinery/chem_master/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 7c36334f78d..870ef8cf76a 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -135,12 +135,11 @@ return else if(href_list["empty_beaker"]) beaker.reagents.clear_reagents() + eject_beaker() updateUsrDialog() return else if(href_list["eject"]) - beaker:loc = loc - beaker = null - icon_state = "mixer0" + eject_beaker() updateUsrDialog() return else if(href_list["clear"]) @@ -173,6 +172,11 @@ add_fingerprint(usr) +/obj/machinery/computer/pandemic/proc/eject_beaker() + beaker.forceMove(loc) + beaker = null + icon_state = "mixer0" + //Prints a nice virus release form. Props to Urbanliner for the layout /obj/machinery/computer/pandemic/proc/print_form(var/datum/disease/advance/D, mob/living/user) D = archive_diseases[D.GetDiseaseID()] @@ -308,7 +312,7 @@ dat += "nothing
" else dat += "nothing
" - dat += "
Eject beaker[((R.total_volume&&R.reagent_list.len) ? "-- Empty beaker":"")]
" + dat += "
Eject beaker[((R.total_volume&&R.reagent_list.len) ? "-- Empty and eject beaker":"")]
" dat += "Close" var/datum/browser/popup = new(user, "pandemic", name, 575, 400) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 6c22360face..6dde9d2a4ec 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -115,6 +115,24 @@ update_flags |= M.adjustToxLoss(1, FALSE) return list(0, update_flags) +/datum/reagent/consumable/ethanol/hooch + name = "Hooch" + id = "hooch" + description = "Either someone's failure at cocktail making or attempt in alcohol production. In any case, do you really want to drink that?" + color = "#664300" // rgb: 102, 67, 0 + dizzy_adj = 7 + alcohol_perc = 1 + drink_icon = "glass_brown2" + drink_name = "Hooch" + drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + taste_message = "pure resignation" + +/datum/reagent/consumable/ethanol/hooch/on_mob_life(mob/living/carbon/M) + if(M.mind && M.mind.assigned_role == "Assistant") + M.heal_organ_damage(1, 1) + . = 1 + return ..() || . + /datum/reagent/consumable/ethanol/rum name = "Rum" id = "rum" @@ -1361,3 +1379,15 @@ taste_message = flavor if(holder.my_atom) holder.my_atom.on_reagent_change() + +/datum/reagent/consumable/ethanol/bacchus_blessing //An EXTREMELY powerful drink. Smashed in seconds, dead in minutes. + name = "Bacchus' Blessing" + id = "bacchus_blessing" + description = "Unidentifiable mixture. Unmeasurably high alcohol content." + color = rgb(51, 19, 3) //Sickly brown + dizzy_adj = 21 + alcohol_perc = 3 //I warned you + drink_icon = "glass_brown2" + drink_name = "Bacchus' Blessing" + drink_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?" + taste_message = "a wall of bricks" diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 345ac4a9c6f..77118450aaa 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -290,6 +290,11 @@ addiction_chance = 5 taste_message = "health" +/datum/reagent/medicine/omnizine/godblood + name = "Godblood" + description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power." + overdose_threshold = 150 + /datum/reagent/medicine/omnizine/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE) diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 4d42e9060ae..886105e6465 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -457,6 +457,7 @@ C.AdjustDizzy(volume) C.AddComponent(/datum/component/jestosterone, mind_type) C.AddComponent(/datum/component/squeak, null, null, null, null, null, TRUE) + C.AddComponent(/datum/component/waddling) /datum/reagent/jestosterone/on_mob_life(mob/living/carbon/M) if(!istype(M)) @@ -493,8 +494,10 @@ ..() GET_COMPONENT_FROM(remove_fun, /datum/component/jestosterone, M) GET_COMPONENT_FROM(squeaking, /datum/component/squeak, M) + GET_COMPONENT_FROM(waddling, /datum/component/waddling, M) remove_fun.Destroy() squeaking.Destroy() + waddling.Destroy() /datum/reagent/royal_bee_jelly name = "royal bee jelly" diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 4cf50c9f661..8048c21a283 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -1174,3 +1174,14 @@ M.electrocute_act(rand(5, 20), "Teslium in their body", 1, TRUE) //Override because it's caused from INSIDE of you playsound(M, "sparks", 50, 1) return ..() + +/datum/reagent/gluttonytoxin + name = "Gluttony's Blessing" + id = "gluttonytoxin" + description = "An advanced corruptive toxin produced by something terrible." + reagent_state = LIQUID + color = "#5EFF3B" //RGB: 94, 255, 59 + taste_message = "decay" + +/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume) + L.ForceContractDisease(new /datum/disease/transformation/morph()) diff --git a/code/modules/reagents/chemistry/recipes/drinks.dm b/code/modules/reagents/chemistry/recipes/drinks.dm index 2f3eda996b0..5d088bd9ccb 100644 --- a/code/modules/reagents/chemistry/recipes/drinks.dm +++ b/code/modules/reagents/chemistry/recipes/drinks.dm @@ -851,4 +851,20 @@ required_reagents = list("rum" = 5, "cream" = 5, "egg" = 5) result_amount = 15 mix_message = "The eggs nog together. Pretend that \"nog\" is a verb." - mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' \ No newline at end of file + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + +/datum/chemical_reaction/hooch + name = "Hooch" + id = "hooch" + result = "hooch" + required_reagents = list("ethanol" = 2, "fuel" = 1) + result_amount = 3 + required_catalysts = list("enzyme" = 1) + +/datum/chemical_reaction/bacchus_blessing + name = "Bacchus' Blessing" + id = "bacchus_blessing" + result = "bacchus_blessing" + required_reagents = list("hooch" = 1, "absinthe" = 1, "manlydorf" = 1, "syndicatebomb" = 1) + result_amount = 4 + mix_message = "The mixture turns to a sickening froth." \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 17d68f7e607..d408db7f2f0 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -73,7 +73,7 @@ if(user.a_intent == INTENT_HARM) M.visible_message("[user] splashes the contents of [src] onto [M]!", \ "[user] splashes the contents of [src] onto [M]!") - add_attack_logs(M, user, "Splashed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) + add_attack_logs(user, M, "Splashed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) if(!iscarbon(user)) M.LAssailant = null else @@ -90,11 +90,12 @@ if(!reagents || !reagents.total_volume) return // The drink might be empty after the delay, such as by spam-feeding M.visible_message("[user] feeds something to [M].", "[user] feeds something to you.") - add_attack_logs(M, user, "Fed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) + add_attack_logs(user, M, "Fed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) else to_chat(user, "You swallow a gulp of [src].") - reagents.reaction(M, INGEST) + var/fraction = min(5 / reagents.total_volume, 1) + reagents.reaction(M, INGEST, fraction) addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5), 5) playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) else @@ -246,9 +247,9 @@ if(assembly) assembly.HasProximity(AM) -/obj/item/reagent_containers/glass/beaker/Crossed(atom/movable/AM) +/obj/item/reagent_containers/glass/beaker/Crossed(atom/movable/AM, oldloc) if(assembly) - assembly.Crossed(AM) + assembly.Crossed(AM, oldloc) /obj/item/reagent_containers/glass/beaker/on_found(mob/finder) //for mousetraps if(assembly) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index e28ec4c0cff..0d3d4f17252 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -289,12 +289,6 @@ icon_state = "[rounded_vol]" item_state = "syringe_[rounded_vol]" - -//////////////////////////////////////////////////////////////////////////////// -/// Syringes. END -//////////////////////////////////////////////////////////////////////////////// - - /obj/item/reagent_containers/syringe/antiviral name = "Syringe (spaceacillin)" desc = "Contains antiviral agents." @@ -327,3 +321,10 @@ name = "bioterror syringe" desc = "Contains several paralyzing reagents." list_reagents = list("neurotoxin" = 5, "capulettium_plus" = 5, "sodium_thiopental" = 5) + +/obj/item/reagent_containers/syringe/gluttony + name = "Gluttony's Blessing" + desc = "A syringe recovered from a dread place. It probably isn't wise to use." + amount_per_transfer_from_this = 1 + volume = 1 + list_reagents = list("gluttonytoxin" = 1) \ No newline at end of file diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index b3c98f82b54..fc9d5d56134 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -187,9 +187,9 @@ if(rig) rig.HasProximity(AM) -/obj/structure/reagent_dispensers/fueltank/Crossed(atom/movable/AM) +/obj/structure/reagent_dispensers/fueltank/Crossed(atom/movable/AM, oldloc) if(rig) - rig.Crossed(AM) + rig.Crossed(AM, oldloc) /obj/structure/reagent_dispensers/fueltank/hear_talk(mob/living/M, list/message_pieces) if(rig) @@ -220,6 +220,7 @@ icon_state = "water_cooler" anchored = 1 tank_volume = 500 + reagent_id = "water" var/paper_cups = 25 //Paper cups left from the cooler /obj/structure/reagent_dispensers/water_cooler/examine(mob/user) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 5d3a3536d62..933f223d120 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) else if(still_stuff_to_move && !speed_process) makeSpeedProcess() -/obj/machinery/conveyor/Crossed(atom/movable/AM) +/obj/machinery/conveyor/Crossed(atom/movable/AM, oldloc) if(!speed_process && !AM.anchored) makeSpeedProcess() ..() diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 9d555d8cf32..821ef606518 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -332,16 +332,6 @@ build_path = /obj/item/circuitboard/comm_traffic category = list("Computer Boards") -/datum/design/telesci_console - name = "Console Board (Telepad Control Console)" - desc = "Allows for the construction of circuit boards used to build a telescience console." - id = "telesci_console" - req_tech = list("programming" = 3, "bluespace" = 3, "plasmatech" = 4) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000) - build_path = /obj/item/circuitboard/telesci_console - category = list("Computer Boards") - /datum/design/teleconsole name = "Console Board (Teleporter Console)" desc = "Allows for the construction of circuit boards used to build a teleporter control console." diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index a23378f5513..c604105dc04 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -72,16 +72,6 @@ build_path = /obj/item/circuitboard/quantumpad category = list ("Teleportation Machinery") -/datum/design/telepad - name = "Machine Board (Telepad Board)" - desc = "Allows for the construction of circuit boards used to build a Telepad." - id = "telepad" - req_tech = list("programming" = 4, "bluespace" = 5, "plasmatech" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000) - build_path = /obj/item/circuitboard/telesci_pad - category = list ("Teleportation Machinery") - /datum/design/teleport_hub name = "Machine Board (Teleportation Hub)" desc = "Allows for the construction of circuit boards used to build a Teleportation Hub." diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index cdc81a9e759..5570053d946 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -63,7 +63,7 @@ var/ert_request_answered = FALSE active_team.setSlots(commander_slots, security_slots, medical_slots, engineering_slots, janitor_slots, paranormal_slots, cyborg_slots) send_emergency_team = TRUE - var/list/ert_candidates = pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600, 1, role_playtime_requirements[ROLE_ERT]) + var/list/ert_candidates = shuffle(pollCandidates("Join the Emergency Response Team?",, responseteam_age, 600, 1, role_playtime_requirements[ROLE_ERT])) if(!ert_candidates.len) active_team.cannot_send_team() send_emergency_team = FALSE @@ -95,8 +95,8 @@ var/ert_request_answered = FALSE for(var/datum/async_input/A in ert_gender_prefs) A.close() for(var/mob/M in response_team_members) - ert_role_prefs.Add(input_ranked_async(M, "Please order ERT roles from most to least preferred (15 seconds):", active_team.get_slot_list())) - addtimer(CALLBACK(GLOBAL_PROC, .proc/dispatch_response_team, response_team_members, ert_gender_prefs, ert_role_prefs), 150) + ert_role_prefs.Add(input_ranked_async(M, "Please order ERT roles from most to least preferred (20 seconds):", active_team.get_slot_list())) + addtimer(CALLBACK(GLOBAL_PROC, .proc/dispatch_response_team, response_team_members, ert_gender_prefs, ert_role_prefs), 200) /proc/dispatch_response_team(list/response_team_members, list/ert_gender_prefs, list/ert_role_prefs) var/spawn_index = 1 diff --git a/code/modules/ruins/lavalandruin_code/dead_ratvar.dm b/code/modules/ruins/lavalandruin_code/dead_ratvar.dm new file mode 100644 index 00000000000..b634aba5c4c --- /dev/null +++ b/code/modules/ruins/lavalandruin_code/dead_ratvar.dm @@ -0,0 +1,248 @@ +// Dead Ratvar +/obj/structure/dead_ratvar + name = "hulking wreck" + desc = "The remains of a monstrous war machine." + icon = 'icons/obj/lavaland/dead_ratvar.dmi' + icon_state = "dead_ratvar" + flags = ON_BORDER + appearance_flags = 0 + layer = FLY_LAYER + anchored = TRUE + density = TRUE + bound_width = 416 + bound_height = 64 + pixel_y = -10 + unacidable = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF + +// An "overlay" used by clockwork walls and floors to appear normal to mesons. +/obj/effect/clockwork/overlay + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + var/atom/linked + +/obj/effect/clockwork/overlay/examine(mob/user) + if(linked) + linked.examine(user) + +/obj/effect/clockwork/overlay/ex_act() + return FALSE + +/obj/effect/clockwork/overlay/singularity_act() + return +/obj/effect/clockwork/overlay/singularity_pull() + return + +/obj/effect/clockwork/overlay/singularity_pull(S, current_size) + return + +/obj/effect/clockwork/overlay/Destroy() + if(linked) + linked = null + . = ..() + +/obj/effect/clockwork/overlay/wall + name = "clockwork wall" + icon = 'icons/turf/walls/clockwork_wall.dmi' + icon_state = "clockwork_wall" + canSmoothWith = list(/obj/effect/clockwork/overlay/wall, /obj/structure/falsewall/brass) + smooth = SMOOTH_TRUE + layer = CLOSED_TURF_LAYER + +/obj/effect/clockwork/overlay/wall/Initialize(mapload) + . = ..() + queue_smooth_neighbors(src) + addtimer(CALLBACK(GLOBAL_PROC, .proc/queue_smooth, src), 1) + +/obj/effect/clockwork/overlay/wall/Destroy() + queue_smooth_neighbors(src) + return ..() + +/obj/effect/clockwork/overlay/floor + icon = 'icons/turf/floors.dmi' + icon_state = "clockwork_floor" + layer = TURF_LAYER + plane = FLOOR_PLANE + +/obj/effect/clockwork/overlay/floor/bloodcult //this is used by BLOOD CULT, it shouldn't use such a path... + icon_state = "cult" + +// Wall gears +//A massive gear, effectively a girder for clocks. +/obj/structure/clockwork/wall_gear + name = "massive gear" + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "wall_gear" + climbable = TRUE + max_integrity = 100 + can_deconstruct = TRUE + anchored = TRUE + density = TRUE + unacidable = TRUE + resistance_flags = FIRE_PROOF + desc = "A massive brass gear. You could probably secure or unsecure it with a wrench, or just climb over it." + +/obj/structure/clockwork/wall_gear/displaced + anchored = FALSE + +/obj/structure/clockwork/wall_gear/Initialize() + . = ..() + new /obj/effect/temp_visual/ratvar/gear(get_turf(src)) + +/obj/structure/clockwork/wall_gear/emp_act(severity) + return + +/obj/structure/clockwork/wall_gear/attackby(obj/item/I, mob/user, params) + if(iswrench(I)) + default_unfasten_wrench(user, I, 10) + return 1 + else if(isscrewdriver(I)) + if(anchored) + to_chat(user, "[src] needs to be unsecured to disassemble it!") + else + var/obj/item/screwdriver/S = I + user.visible_message("[user] starts to disassemble [src].", "You start to disassemble [src]...") + if(do_after(user, 30 * S.toolspeed, target = src) && !anchored) + playsound(loc, S.usesound, 50, 1) + to_chat(user, "You disassemble [src].") + deconstruct(TRUE) + return 1 + else if(istype(I, /obj/item/stack/tile/brass)) + var/obj/item/stack/tile/brass/W = I + if(W.get_amount() < 1) + to_chat(user, "You need one brass sheet to do this!") + return + var/turf/T = get_turf(src) + if(iswallturf(T)) + to_chat(user, "There is already a wall present!") + return + if(!isfloorturf(T)) + to_chat(user, "A floor must be present to build a [anchored ? "false ":""]wall!") + return + if(locate(/obj/structure/falsewall) in T.contents) + to_chat(user, "There is already a false wall present!") + return + to_chat(user, "You start adding [W] to [src]...") + if(do_after(user, 20, target = src)) + var/brass_floor = FALSE + if(istype(T, /turf/simulated/floor/clockwork)) //if the floor is already brass, costs less to make(conservation of masssssss) + brass_floor = TRUE + if(W.use(2 - brass_floor)) + if(anchored) + T.ChangeTurf(/turf/simulated/wall/clockwork) + else + T.ChangeTurf(/turf/simulated/floor/clockwork) + new /obj/structure/falsewall/brass(T) + qdel(src) + else + to_chat(user, "You need more brass to make a [anchored ? "false ":""]wall!") + return 1 + return ..() + +/obj/structure/clockwork/wall_gear/deconstruct(disassembled = TRUE) + if(can_deconstruct && disassembled) + new /obj/item/stack/tile/brass(loc, 3) + return ..() + +//Shards of Alloy, suitable only as a source of power for a replica fabricator. +/obj/item/clockwork/alloy_shards + name = "replicant alloy shards" + desc = "Broken shards of some oddly malleable metal. They occasionally move and seem to glow." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "alloy_shards" + resistance_flags = LAVA_PROOF | FIRE_PROOF + unacidable = TRUE + var/randomsinglesprite = FALSE + var/randomspritemax = 2 + var/sprite_shift = 9 + +/obj/item/clockwork/alloy_shards/Initialize() + . = ..() + if(randomsinglesprite) + replace_name_desc() + icon_state = "[icon_state][rand(1, randomspritemax)]" + pixel_x = rand(-sprite_shift, sprite_shift) + pixel_y = rand(-sprite_shift, sprite_shift) + +/obj/item/clockwork/alloy_shards/proc/replace_name_desc() + name = "replicant alloy shard" + desc = "A broken shard of some oddly malleable metal. It occasionally moves and seems to glow." + +/obj/item/clockwork/alloy_shards/clockgolem_remains + name = "clockwork golem scrap" + desc = "A pile of scrap metal. It seems damaged beyond repair." + icon_state = "clockgolem_dead" + sprite_shift = 0 + +/obj/item/clockwork/alloy_shards/large + w_class = WEIGHT_CLASS_TINY + randomsinglesprite = TRUE + icon_state = "shard_large" + sprite_shift = 9 + +/obj/item/clockwork/alloy_shards/medium + w_class = WEIGHT_CLASS_TINY + randomsinglesprite = TRUE + icon_state = "shard_medium" + sprite_shift = 10 + +/obj/item/clockwork/alloy_shards/medium/gear_bit + randomspritemax = 4 + icon_state = "gear_bit" + sprite_shift = 12 + +/obj/item/clockwork/alloy_shards/medium/gear_bit/replace_name_desc() + name = "gear bit" + desc = "A broken chunk of a gear. You want it." + +/obj/item/clockwork/alloy_shards/medium/gear_bit/large //gives more power + +/obj/item/clockwork/alloy_shards/medium/gear_bit/large/replace_name_desc() + ..() + name = "complex gear bit" + +/obj/item/clockwork/alloy_shards/small + w_class = WEIGHT_CLASS_TINY + randomsinglesprite = TRUE + randomspritemax = 3 + icon_state = "shard_small" + sprite_shift = 12 + +/obj/item/clockwork/alloy_shards/pinion_lock + name = "pinion lock" + desc = "A dented and scratched gear. It's very heavy." + icon_state = "pinion_lock" + +/obj/item/clockwork/component/belligerent_eye + name = "belligerent eye" + desc = "A brass construct with a rotating red center. It's as though it's looking for something to hurt." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "belligerent_eye" + +/obj/item/clockwork/component/belligerent_eye/blind_eye + name = "blind eye" + desc = "A heavy brass eye, its red iris fallen dark." + icon_state = "blind_eye" + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/clockwork/component/geis_capacitor/fallen_armor + name = "fallen armor" + desc = "Lifeless chunks of armor. They're designed in a strange way and won't fit on you." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "fallen_armor" + w_class = WEIGHT_CLASS_NORMAL + +//Ratvarian spear +/obj/item/clockwork/weapon/ratvarian_spear + name = "ratvarian spear" + desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "ratvarian_spear" + item_state = "ratvarian_spear" + force = 15 //Extra damage is dealt to targets in attack() + throwforce = 25 + armour_penetration = 10 + sharp = TRUE + attack_verb = list("stabbed", "poked", "slashed") + hitsound = 'sound/weapons/bladeslice.ogg' + w_class = WEIGHT_CLASS_BULKY + var/bonus_burn = 5 diff --git a/code/modules/ruins/lavalandruin_code/fountain_hall.dm b/code/modules/ruins/lavalandruin_code/fountain_hall.dm new file mode 100644 index 00000000000..917ea4e4bd0 --- /dev/null +++ b/code/modules/ruins/lavalandruin_code/fountain_hall.dm @@ -0,0 +1,49 @@ +/obj/structure/sacrificealtar + name = "sacrificial altar" + desc = "An altar designed to perform blood sacrifice for a deity." + icon = 'icons/obj/hand_of_god_structures.dmi' + icon_state = "sacrificealtar" + anchored = TRUE + density = FALSE + can_buckle = TRUE + +/obj/structure/sacrificealtar/attack_hand(mob/living/user) + if(user.incapacitated()) + return + if(!has_buckled_mobs()) + return + var/mob/living/L = buckled_mob + if(!L) + return + to_chat(user, "You attempt to sacrifice [L] by invoking the sacrificial ritual.") + L.gib() + message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].") + +/obj/structure/healingfountain + name = "healing fountain" + desc = "A fountain containing the waters of life." + icon = 'icons/obj/hand_of_god_structures.dmi' + icon_state = "fountain" + anchored = TRUE + density = TRUE + var/time_between_uses = 1800 + var/last_process = 0 + +/obj/structure/healingfountain/attack_hand(mob/living/user) + . = ..() + if(.) + return + if(last_process + time_between_uses > world.time) + to_chat(user, "The fountain appears to be empty.") + return + last_process = world.time + to_chat(user, "The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.") + user.reagents.add_reagent(/datum/reagent/medicine/omnizine/godblood, 20) + update_icon() + addtimer(CALLBACK(src, .proc/update_icon), time_between_uses) + +/obj/structure/healingfountain/update_icon() + if(last_process + time_between_uses > world.time) + icon_state = "fountain" + else + icon_state = "fountain-red" \ No newline at end of file diff --git a/code/modules/ruins/lavalandruin_code/pizzaparty.dm b/code/modules/ruins/lavalandruin_code/pizzaparty.dm new file mode 100644 index 00000000000..3201652c371 --- /dev/null +++ b/code/modules/ruins/lavalandruin_code/pizzaparty.dm @@ -0,0 +1,11 @@ +/obj/effect/spawner/lootdrop/pizzaparty + name = "pizza bomb spawner" + loot = list(/obj/item/pizzabox/margherita = 3, + /obj/item/pizzabox/meat = 3, + /obj/item/pizzabox/mushroom = 3, + /obj/item/pizza_bomb = 1) + lootdoubles = FALSE + +/obj/structure/reagent_dispensers/water_cooler/pizzaparty + name = "punch cooler" + reagent_id = "bacchus_blessing" \ No newline at end of file diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm new file mode 100644 index 00000000000..44383f11a0a --- /dev/null +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -0,0 +1,351 @@ +/obj/effect/sliding_puzzle + name = "Sliding puzzle generator" + icon = 'icons/obj/items.dmi' //mapping + icon_state = "syndballoon" + invisibility = INVISIBILITY_ABSTRACT + anchored = TRUE + var/list/elements + var/floor_type = /turf/simulated/floor/vault + var/finished = FALSE + var/reward_type = /obj/item/reagent_containers/food/snacks/cookie + var/element_type = /obj/structure/puzzle_element + var/auto_setup = TRUE + var/empty_tile_id + +//Gets the turf where the tile with given id should be +/obj/effect/sliding_puzzle/proc/get_turf_for_id(id) + var/turf/center = get_turf(src) + switch(id) + if(1) + return get_step(center,NORTHWEST) + if(2) + return get_step(center,NORTH) + if(3) + return get_step(center,NORTHEAST) + if(4) + return get_step(center,WEST) + if(5) + return center + if(6) + return get_step(center,EAST) + if(7) + return get_step(center,SOUTHWEST) + if(8) + return get_step(center,SOUTH) + if(9) + return get_step(center,SOUTHEAST) + +/obj/effect/sliding_puzzle/Initialize(mapload) + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/effect/sliding_puzzle/LateInitialize() + if(auto_setup) + setup() + +/obj/effect/sliding_puzzle/proc/check_setup_location() + for(var/id in 1 to 9) + var/turf/T = get_turf_for_id(id) + if(!T) + return FALSE + if(istype(T, /turf/simulated/wall/indestructible) || istype(T, /turf/simulated/floor/indestructible)) + return FALSE + return TRUE + + +/obj/effect/sliding_puzzle/proc/validate() + if(finished) + return + + if(elements.len < 8) //Someone broke it + qdel(src) + + //Check if everything is in place + for(var/id in 1 to 9) + var/target_turf = get_turf_for_id(id) + var/obj/structure/puzzle_element/E = locate() in target_turf + if(id == empty_tile_id && !E) // This location should be empty. + continue + if(!E || E.id != id) //wrong tile or no tile at all + return + //Ding ding + finish() + +/obj/effect/sliding_puzzle/Destroy() + if(LAZYLEN(elements)) + for(var/obj/structure/puzzle_element/E in elements) + E.source = null + elements.Cut() + return ..() + +#define COLLAPSE_DURATION 7 + +/obj/effect/sliding_puzzle/proc/finish() + finished = TRUE + for(var/mob/M in range(7,src)) + shake_camera(M, COLLAPSE_DURATION , 1) + for(var/obj/structure/puzzle_element/E in elements) + E.collapse() + + dispense_reward() + +/obj/effect/sliding_puzzle/proc/dispense_reward() + new reward_type(get_turf(src)) + +/obj/effect/sliding_puzzle/proc/is_solvable() + var/list/current_ordering = list() + for(var/obj/structure/puzzle_element/E in elements_in_order()) + current_ordering += E.id + + var/swap_tally = 0 + for(var/i in 1 to current_ordering.len) + var/checked_value = current_ordering[i] + for(var/j in i to current_ordering.len) + if(current_ordering[j] < checked_value) + swap_tally++ + + return swap_tally % 2 == 0 + +//swap two tiles in same row +/obj/effect/sliding_puzzle/proc/make_solvable() + var/first_tile_id = 1 + var/other_tile_id = 2 + if(empty_tile_id == 1 || empty_tile_id == 2) //Can't swap with empty one so just grab some in second row + first_tile_id = 4 + other_tile_id = 5 + + var/turf/T1 = get_turf_for_id(first_tile_id) + var/turf/T2 = get_turf_for_id(other_tile_id) + + var/obj/structure/puzzle_element/E1 = locate() in T1 + var/obj/structure/puzzle_element/E2 = locate() in T2 + + E1.forceMove(T2) + E2.forceMove(T1) + +/proc/cmp_xy_desc(atom/movable/A, atom/movable/B) + if(A.y > B.y) + return -1 + if(A.y < B.y) + return 1 + if(A.x > B.x) + return 1 + if(A.x < B.x) + return -1 + return 0 + +/obj/effect/sliding_puzzle/proc/elements_in_order() + return sortTim(elements,cmp=/proc/cmp_xy_desc) + +/obj/effect/sliding_puzzle/proc/get_base_icon() + var/icon/I = new('icons/obj/puzzle.dmi') + var/list/puzzles = icon_states(I) + var/puzzle_state = pick(puzzles) + var/icon/P = new('icons/obj/puzzle.dmi',puzzle_state) + return P + +/obj/effect/sliding_puzzle/proc/setup() + //First we slice the 96x96 icon into 32x32 pieces + var/list/puzzle_pieces = list() //id -> icon list + + var/width = 3 + var/height = 3 + var/list/left_ids = list() + var/tile_count = width * height + + //Generate per tile icons + for(var/id in 1 to tile_count) + var/y = width - round((id - 1) / width) + var/x = ((id - 1) % width) + 1 + + var/x_start = 1 + (x - 1) * world.icon_size + var/x_end = x_start + world.icon_size - 1 + var/y_start = 1 + ((y - 1) * world.icon_size) + var/y_end = y_start + world.icon_size - 1 + + var/icon/T = get_base_icon() + T.Crop(x_start,y_start,x_end,y_end) + puzzle_pieces["[id]"] = T + left_ids += id + + //Setup random empty tile + empty_tile_id = pick_n_take(left_ids) + var/turf/empty_tile_turf = get_turf_for_id(empty_tile_id) + empty_tile_turf.ChangeTurf(floor_type, keep_icon = FALSE, ignore_air = FALSE) + var/mutable_appearance/MA = new(puzzle_pieces["[empty_tile_id]"]) + MA.layer = empty_tile_turf.layer + 0.1 + empty_tile_turf.add_overlay(MA) + + elements = list() + var/list/empty_spots = left_ids.Copy() + for(var/spot_id in empty_spots) + var/turf/T = get_turf_for_id(spot_id) + T = T.ChangeTurf(floor_type, keep_icon = FALSE, ignore_air = FALSE) + var/obj/structure/puzzle_element/E = new element_type(T) + elements += E + var/chosen_id = pick_n_take(left_ids) + E.puzzle_icon = puzzle_pieces["[chosen_id]"] + E.source = src + E.id = chosen_id + E.set_puzzle_icon() + + if(!is_solvable()) + make_solvable() + +/obj/structure/puzzle_element + name = "mysterious pillar" + desc = "puzzling..." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "puzzle_pillar" + anchored = FALSE + density = TRUE + var/id = 0 + var/obj/effect/sliding_puzzle/source + var/icon/puzzle_icon + +/obj/structure/puzzle_element/Move(nloc, dir) + if(!isturf(nloc) || moving_diagonally || get_dist(get_step(src,dir),get_turf(source)) > 1) + return 0 + else + return ..() + +/obj/structure/puzzle_element/proc/set_puzzle_icon() + cut_overlays() + if(puzzle_icon) + //Need to scale it down a bit to fit the static border + var/icon/C = new(puzzle_icon) + C.Scale(19,19) + var/mutable_appearance/puzzle_small = new(C) + puzzle_small.layer = layer + 0.1 + puzzle_small.pixel_x = 7 + puzzle_small.pixel_y = 7 + add_overlay(puzzle_small) + +/obj/structure/puzzle_element/Destroy() + if(source) + source.elements -= src + source.validate() + return ..() + +//Set the full image on the turf and delete yourself +/obj/structure/puzzle_element/proc/collapse() + var/turf/T = get_turf(src) + var/mutable_appearance/MA = new(puzzle_icon) + MA.layer = T.layer + 0.1 + T.add_overlay(MA) + //Some basic shaking animation + for(var/i in 1 to COLLAPSE_DURATION) + animate(src, pixel_x=rand(-5,5), pixel_y=rand(-2,2), time=1) + QDEL_IN(src,COLLAPSE_DURATION) + +/obj/structure/puzzle_element/Moved() + . = ..() + source.validate() + +//Admin abuse version so you can pick the icon before it sets up +/obj/effect/sliding_puzzle/admin + auto_setup = FALSE + var/icon/puzzle_icon + var/puzzle_state + +/obj/effect/sliding_puzzle/admin/get_base_icon() + var/icon/I = new(puzzle_icon,puzzle_state) + return I + +//Ruin version +/obj/effect/sliding_puzzle/lavaland + reward_type = /obj/structure/closet/crate/necropolis/puzzle + +/obj/effect/sliding_puzzle/lavaland/dispense_reward() + if(prob(25)) + //If it's not roaming somewhere else already. + var/mob/living/simple_animal/hostile/megafauna/bubblegum/B = locate() in GLOB.mob_list + if(!B) + reward_type = /mob/living/simple_animal/hostile/megafauna/bubblegum + return ..() + +//Prison cube version +/obj/effect/sliding_puzzle/prison + auto_setup = FALSE //This will be done by cube proc + var/mob/living/prisoner + element_type = /obj/structure/puzzle_element/prison + +/obj/effect/sliding_puzzle/prison/get_base_icon() + if(!prisoner) + CRASH("Prison cube without prisoner") + prisoner.setDir(SOUTH) + var/icon/I = getFlatIcon(prisoner) + I.Scale(96,96) + return I + +/obj/effect/sliding_puzzle/prison/Destroy() + if(prisoner) + to_chat(prisoner,"With the cube broken by force, you can feel your body falling apart.") + prisoner.death() + qdel(prisoner) + . = ..() + +/obj/effect/sliding_puzzle/prison/dispense_reward() + prisoner.forceMove(get_turf(src)) + prisoner.notransform = FALSE + prisoner = null + +//Some armor so it's harder to kill someone by mistake. +/obj/structure/puzzle_element/prison + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50) + +/obj/structure/puzzle_element/prison/relaymove(mob/user) + return + +/obj/item/prisoncube + name = "Prison Cube" + desc = "Dusty cube with humanoid imprint on it." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "prison_cube" + +/obj/item/prisoncube/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(!proximity_flag || !isliving(target)) + return + var/mob/living/victim = target + var/mob/living/carbon/carbon_victim = victim + //Handcuffed or unconcious + if(istype(carbon_victim) && carbon_victim.handcuffed || victim.stat != CONSCIOUS) + if(!puzzle_imprison(target)) + to_chat(user,"[src] does nothing.") + return + to_chat(user,"You trap [victim] in the prison cube!") + qdel(src) + else + to_chat(user,"[src] only accepts restrained or unconcious prisoners.") + +/proc/puzzle_imprison(mob/living/prisoner) + var/turf/T = get_turf(prisoner) + var/obj/effect/sliding_puzzle/prison/cube = new(T) + if(!cube.check_setup_location()) + qdel(cube) + return FALSE + + //First grab the prisoner and move them temporarily into the generator so they won't get thrown around. + prisoner.notransform = TRUE + prisoner.forceMove(cube) + to_chat(prisoner,"You're trapped by the prison cube! You will remain trapped until someone solves it.") + + //Clear the area from objects (and cube user) + var/list/things_to_throw = list() + for(var/atom/movable/AM in range(1,T)) + if(!AM.anchored) + things_to_throw += AM + + for(var/atom/movable/AM in things_to_throw) + var/throwtarget = get_edge_target_turf(T, get_dir(T, get_step_away(AM, T))) + AM.throw_at(throwtarget, 2, 3) + + //Create puzzle itself + cube.prisoner = prisoner + cube.setup() + + //Move them into random block + var/obj/structure/puzzle_element/E = pick(cube.elements) + prisoner.forceMove(E) + return TRUE \ No newline at end of file diff --git a/code/modules/ruins/lavalandruin_code/sin_ruins.dm b/code/modules/ruins/lavalandruin_code/sin_ruins.dm new file mode 100644 index 00000000000..82fbd410ea1 --- /dev/null +++ b/code/modules/ruins/lavalandruin_code/sin_ruins.dm @@ -0,0 +1,156 @@ +//These objects are used in the cardinal sin-themed ruins (i.e. Gluttony, Pride...) + +// Greed +/obj/structure/cursed_slot_machine //Greed's slot machine: Used in the Greed ruin. Deals clone damage on each use, with a successful use giving a d20 of fate. + name = "greed's slot machine" + desc = "High stakes, high rewards." + icon = 'icons/obj/economy.dmi' + icon_state = "slots-off" + anchored = TRUE + density = TRUE + var/win_prob = 5 + +/obj/structure/cursed_slot_machine/attack_hand(mob/user) + interact(user) + +/obj/structure/cursed_slot_machine/interact(mob/living/carbon/human/user) + if(!istype(user)) + return + + if(in_use) + return + + in_use = TRUE + user.adjustCloneLoss(20) + if(user.stat) + to_chat(user, "No... just one more try...") + user.gib() + else + user.visible_message("[user] pulls [src]'s lever with a glint in [user.p_their()] eyes!", "You feel a draining as you pull the lever, but you \ + know it'll be worth it.") + icon_state = "slots-on" + playsound(src, 'sound/lavaland/cursed_slot_machine.ogg', 50, 0) + addtimer(CALLBACK(src, .proc/determine_victor, user), 50) + +/obj/structure/cursed_slot_machine/proc/determine_victor(mob/living/user) + icon_state = "slots-off" + in_use = FALSE + if(prob(win_prob)) + playsound(src, 'sound/lavaland/cursed_slot_machine_jackpot.ogg', 50, 0) + new/obj/structure/cursed_money(get_turf(src)) + if(user) + to_chat(user, "You've hit jackpot. Laughter echoes around you as your reward appears in the machine's place.") + qdel(src) + else + if(user) + to_chat(user, "Fucking machine! Must be rigged. Still... one more try couldn't hurt, right?") + +/obj/structure/cursed_money + name = "bag of money" + desc = "RICH! YES! YOU KNEW IT WAS WORTH IT! YOU'RE RICH! RICH! RICH!" + icon = 'icons/obj/storage.dmi' + icon_state = "moneybag" + anchored = FALSE + density = TRUE + +/obj/structure/cursed_money/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/collapse), 600) + +/obj/structure/cursed_money/proc/collapse() + visible_message("[src] falls in on itself, \ + canvas rotting away and contents vanishing.") + qdel(src) + +/obj/structure/cursed_money/attack_hand(mob/living/user) + . = ..() + if(.) + return . + + user.visible_message("[user] opens the bag and \ + and removes a die. The bag then vanishes.", + "You open the bag...!\n\ + And see a bag full of dice. Confused, \ + you take one... and the bag vanishes.") + var/turf/T = get_turf(user) + var/obj/item/dice/d20/fate/one_use/critical_fail = new(T) + user.put_in_hands(critical_fail) + qdel(src) + +// Gluttony +/obj/effect/gluttony //Gluttony's wall: Used in the Gluttony ruin. Only lets the overweight through. + name = "gluttony's wall" + desc = "Only those who truly indulge may pass." + anchored = TRUE + density = TRUE + icon_state = "blob" + icon = 'icons/mob/blob.dmi' + color = rgb(145, 150, 0) + +/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff. + if(ishuman(mover)) + var/mob/living/carbon/human/H = mover + if(H.nutrition >= NUTRITION_LEVEL_FAT || (FAT in H.mutations)) + H.visible_message("[H] pushes through [src]!", "You've seen and eaten worse than this.") + return TRUE + else + to_chat(H, "You're repulsed by even looking at [src]. Only a pig could force themselves to go through it.") + if(istype(mover, /mob/living/simple_animal/hostile/morph)) + return TRUE + else + return FALSE + +// Pride +/obj/structure/mirror/magic/pride //Pride's mirror: Used in the Pride ruin. + name = "pride's mirror" + desc = "Pride cometh before the..." + icon_state = "magic_mirror" + +/obj/structure/mirror/magic/pride/curse(mob/user) + user.visible_message("The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!", \ + "Perfect. Much better! Now nobody will be able to resist yo-") + + var/turf/T = get_turf(user) + var/list/levels = space_manager.z_list.Copy() + for(var/level in levels) + if(!is_teleport_allowed(level)) + levels -= level + + T.ChangeTurf(/turf/simulated/floor/chasm) + var/turf/simulated/floor/chasm/C = T + C.drop_x = T.x + C.drop_y = T.y + C.drop_z = pick(levels) + C.drop(user) + +// Envy +/obj/item/kitchen/knife/envy //Envy's knife: Found in the Envy ruin. Attackers take on the appearance of whoever they strike. + name = "envy's knife" + desc = "Their success will be yours." + icon = 'icons/obj/wizard.dmi' + icon_state = "render" + item_state = "knife" + force = 18 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + hitsound = 'sound/weapons/bladeslice.ogg' + +/obj/item/kitchen/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity) + . = ..() + if(!proximity) + return + if(!istype(user)) + return + if(ishuman(AM)) + var/mob/living/carbon/human/H = AM + if(user.real_name != H.dna.real_name) + user.real_name = H.dna.real_name + H.dna.transfer_identity(user) + user.visible_message("[user]'s appearance shifts into [H]'s!", \ + "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.") + +// Sloth +/obj/item/paper/fluff/stations/lavaland/sloth/note + name = "note from sloth" + icon_state = "paper_words" + info = "have not gotten around to finishing my cursed item yet sorry - sloth" diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index a725d3d5d5f..3c9f093921e 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -266,7 +266,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) /obj/structure/stone_tile/singularity_pull() return -/obj/structure/stone_tile/Crossed(atom/movable/AM) +/obj/structure/stone_tile/Crossed(atom/movable/AM, oldloc) if(falling || fallen) return var/turf/T = get_turf(src) @@ -310,7 +310,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) falling = FALSE fallen = FALSE -/obj/structure/stone_tile/proc/crossed_effect(atom/movable/AM) +/obj/structure/stone_tile/proc/crossed_effect(atom/movable/AM, oldloc) return /obj/structure/stone_tile/block diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 5481d7856d3..0efd49b0e54 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -182,6 +182,8 @@ continue if(ishuman(player)) //hostages allowed on the shuttle, check for restraints var/mob/living/carbon/human/H = player + if(!H.check_death_method() && H.health <= HEALTH_THRESHOLD_DEAD) //new crit users who are in hard crit are considered dead + continue if(H.handcuffed) //cuffs continue if(H.wear_suit && H.wear_suit.breakouttime) //straight jacket diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 5fad9348769..51ba6c6bad1 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -503,7 +503,7 @@ SSair.remove_from_active(T1) T1.CalculateAdjacentTurfs() SSair.add_to_active(T1,1) - + T1.lighting_build_overlay() T0.ChangeTurf(turf_type) @@ -836,20 +836,6 @@ shuttleId = "whiteship" possible_destinations = "whiteship_away;whiteship_home;whiteship_z4" -/obj/machinery/computer/shuttle/golem_ship - name = "Golem Ship Console" - desc = "Used to control the Golem Ship." - circuit = /obj/item/circuitboard/golem_ship - shuttleId = "freegolem" - possible_destinations = "freegolem_z3;freegolem_z5;freegolem_z1;freegolem_z6" - resistance_flags = INDESTRUCTIBLE - -/obj/machinery/computer/shuttle/golem_ship/attack_hand(mob/user) - if(!isgolem(user)) - to_chat(user, "The console is unresponsive. Seems only golems can use it.") - return - ..() - /obj/machinery/computer/shuttle/engineering name = "Engineering Shuttle Console" desc = "Used to call and send the engineering shuttle." @@ -893,6 +879,25 @@ possible_destinations = "trade_sol_base;trade_dock" shuttleId = "trade_sol" +/obj/machinery/computer/shuttle/golem_ship + name = "Golem Ship Console" + desc = "Used to control the Golem Ship." + circuit = /obj/item/circuitboard/shuttle/golem_ship + shuttleId = "freegolem" + possible_destinations = "freegolem_lavaland;freegolem_z5;freegolem_z4;freegolem_z6" + +/obj/machinery/computer/shuttle/golem_ship/attack_hand(mob/user) + if(!isgolem(user) && !isobserver(user)) + to_chat(user, "The console is unresponsive. Seems only golems can use it.") + return + ..() + +/obj/machinery/computer/shuttle/golem_ship/recall + name = "golem ship recall terminal" + desc = "Used to recall the Golem Ship." + possible_destinations = "freegolem_lavaland" + resistance_flags = INDESTRUCTIBLE + //#undef DOCKING_PORT_HIGHLIGHT /turf/proc/copyTurf(turf/T) diff --git a/config/example/config.txt b/config/example/config.txt index 87ed0ce5cf1..183f85437f0 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -85,6 +85,18 @@ LOG_WORLD_OUTPUT ## log admin warning messages LOG_ADMINWARN +## Amount of minutes that a person has to be AFK before he'll be listed on the "List AFK players" verb +#LIST_AFK_MINIMUM 5 + +## Amount of minutes that a person has to be AFK before he will be warned by the AFK subsystem. Leave this 0 to prevent the subsystem from activating +WARN_AFK_MINIMUM 0 + +## Amount of minutes that a person has to be AFK before he will be cryod by the AFK subsystem. Leave this 0 to prevent the subsystem from activating +AUTO_CRYO_AFK 0 + +## Amount of minutes that a person has to be AFK before he will be despawned by the AFK subsystem. Leave this 0 to prevent the subsystem from activating +AUTO_DESPAWN_AFK 0 + ## probablities for game modes chosen in "secret" and "random" modes ## ## default probablity is 1, increase to make that mode more likely to be picked @@ -109,12 +121,6 @@ PROBABILITY ABDUCTION 0 PROBABILITY DEVIL 0 PROBABILITY DEVILAGENTS 0 -## Probability in % for Free Golems to spawn at roundstart, set to 0 for no golems -PROB_FREE_GOLEMS 75 - -## Uncomment to allow free golems on all roundtypes. Otherwise, disabled on cult, wiz, raging mages, blob, and nuclear. -#UNRESTRICTED_FREE_GOLEMS - ## Maximum cycles shadowlings can remain unhatched before they take damage. 1800 = 60 minutes, 900 = 30 minutes, 0 = feature disabled. SHADOWLING_MAX_AGE 0 diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index fc1bced9d6a..2404119d52f 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 7 +DB_VERSION 8 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. diff --git a/config/example/lavaRuinBlacklist.txt b/config/example/lavaRuinBlacklist.txt index ee3f0245a07..934d86514b0 100644 --- a/config/example/lavaRuinBlacklist.txt +++ b/config/example/lavaRuinBlacklist.txt @@ -8,17 +8,33 @@ ##RESPAWN #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm ##SIN +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pride.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm - -##MISC -#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +##MEGAFAUNA #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm -#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm #_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm + +##MISC +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cube.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_dead_ratvar.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hell.dmm" +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizza_party.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_puzzle.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm" +#_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm" \ No newline at end of file diff --git a/goon/browserassets/css/browserOutput-dark.css b/goon/browserassets/css/browserOutput-dark.css index fed5a252ba3..b19cc07275f 100644 --- a/goon/browserassets/css/browserOutput-dark.css +++ b/goon/browserassets/css/browserOutput-dark.css @@ -261,6 +261,7 @@ em {font-style: normal; font-weight: bold;} .mentorhelp {color: #0077bb; font-weight: bold;} .adminhelp {color: #aa0000; font-weight: bold;} .playerreply {color: #8800bb; font-weight: bold;} +.pmsend {color: #0000ff;} .name { font-weight: bold;} .say {} .yell { font-weight: bold;} diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index 1af8b03bd58..3b77bb1f97e 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -258,6 +258,7 @@ em {font-style: normal; font-weight: bold;} .mentorhelp {color: #0077bb; font-weight: bold;} .adminhelp {color: #aa0000; font-weight: bold;} .playerreply {color: #8800bb; font-weight: bold;} +.pmsend {color: #0000ff;} .name { font-weight: bold;} .say {} .yell { font-weight: bold;} diff --git a/html/browser/marked.js b/html/browser/marked.js index 6fe0e1e4e41..fa151b6befd 100644 --- a/html/browser/marked.js +++ b/html/browser/marked.js @@ -11,16 +11,26 @@ function parse(node) { parse(node.childNodes[i]); } - if(!node.innerHTML) { + if (!node.innerHTML || node.tagName === 'A') { return; } - node.innerHTML = marked(node.innerHTML.replace(/
/gi, '\n'), { breaks: true }); + + node.innerHTML = marked(node.innerHTML.replace(/
/gi, '\n').replace(/\t/gi, ''), { breaks: true, gfm: false }); } -function main() { +window.onload = function() { + var para = marked.Renderer.prototype.paragraph; + var field = ''; + marked.Renderer.prototype.paragraph = function(text) { + if (text.slice(0, field.length) === field || + text.slice(0, 2) === '= 0) { + return text; + } + return para(text); + }; + if ($('#markdown')) { parse($('#markdown')); } } - -window.onload = main; diff --git a/html/browser/rankedInput.js b/html/browser/rankedInput.js new file mode 100644 index 00000000000..fb5af2aeb69 --- /dev/null +++ b/html/browser/rankedInput.js @@ -0,0 +1,26 @@ +var uid; + +function allowDrop(ev) { + ev.preventDefault(); +} + +function drag(ev) { + var index = ev.target.getAttribute('index'); + if (index) { + ev.dataTransfer.setData('text', index); + } +} + +function drop(ev) { + ev.preventDefault(); + var data = ev.dataTransfer.getData('text'); + if (data && ev.target.getAttribute('index')) { + window.location = '?src=' + uid + ';' + 'cut=' + data + ';' + 'insert=' + ev.target.getAttribute('index'); + } +} + +function setUid() { + uid = document.getElementById('choices').getAttribute('uid'); +} + +window.onload = setUid; diff --git a/html/changelog.html b/html/changelog.html index b639984a5a6..2aef4e33f8f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,199 @@ -->
+

12 August 2019

+

AffectedArc07 updated:

+
    +
  • Panic Bunker
  • +
+

Allfd updated:

+
    +
  • Panthers can now see in the dark.
  • +
+

Arkatos updated:

+
    +
  • You can ctrl-click any action button to lock/unlock its position
  • +
  • All actions buttons now start with their position locked
  • +
+

Citinited updated:

+
    +
  • Mappers have a new tool that creates a fully functional cycling airlock.
  • +
+

CornMyCob updated:

+
    +
  • The cursed heart you get from necropolis chests is now the one that heals you.
  • +
+

Couls updated:

+
    +
  • Diagonal movement
  • +
  • Input subsystem(numpad targetting, press numpad 8 multiple times to target eyes and mouth, numpad 6 or 4 to target arms and press them again to target hands and numpad 1 or 3 to target legs and press them again to target feet) taken from https://github.com/tgstation/tgstation/pull/32751
  • +
  • change confused status to have you move diagonally randomly in the direction you're headed if not too confused(now you can drunkenly walk down the hall)
  • +
  • clients are now children of datums like everything else in BYOND taken from https://github.com/tgstation/tgstation/pull/20394
  • +
  • AZERTY and numpad targetting preferences
  • +
  • Reworks the biohazard event to have a chance of giving a randomized advanced disease with 6 varying symptoms instead of a preset disease.
  • +
  • change how bone breakage is calculated
  • +
  • can now butcher koi for salmon meat
  • +
  • adds a line to alert people as to why they're not getting blood from the monkeys
  • +
  • The vampires are finally off their monkey diet, theycan now suck blood from players and humanized monkeys
  • +
  • Symptoms are now correctly generated for level 7 biohazards
  • +
  • Borgs can now cycle modules with X again
  • +
  • Ahelp message is less confusing
  • +
  • F2 (say) F3(ooc) F4(me) buttons have been restored tweak:when numpad targetting is off you can use numpad 1-4 to change intents tweak:pressing shift before any of the intent buttons doesn't change intents(for people with shift+1-4 macros) tweak:backspace now sets the focus to the chat bar
  • +
  • fixes the runtime caused by running keyloop for clients
  • +
  • Preferences not saving properly
  • +
  • issue with preload_rsc
  • +
  • Restore hotkey mode
  • +
  • Q no longer drops items as a cyborg on AZERTY mode
  • +
  • Automatically offload ore you're carrying to an orebox you're dragging
  • +
  • typing indicators show up again
  • +
  • TG waddle component, clowns can now optionally waddle, penguins always waddle. Ctrl Click clown shoes in hand to toggle waddling
  • +
  • Added invismin macro back to F9
  • +
  • stealthmin macro removed from F9
  • +
+

Crazylemon64 updated:

+
    +
  • Fixes a bug that would cause ghosts to teleport their bodies sometimes
  • +
+

Dave-TH updated:

+
    +
  • The syndicate uplink is now complete with a new spooky background. Very neat!
  • +
+

DoctorDrugs updated:

+
    +
  • Adds additional roundstart miner slots and the additional gear required for them to do their jobs
  • +
+

Fox McCloud updated:

+
    +
  • Fixes being able to sharpen toy double-bladed energy swords
  • +
+

IAmBigCoat updated:

+
    +
  • Added explosion warnings to medbeams, because medbeams can cause explosions. DON'T CROSS THE BEAMS!
  • +
+

Ionward updated:

+
    +
  • Fixed vox jester uniform not appearing correctly.
  • +
  • species specific fit underwear for greys
  • +
+

KasparoVy updated:

+
    +
  • Re-adds the ability to see in the dark. Adds overlays for each level of darksight (>=8,7,6,5,4,3,<=2).
  • +
+

Kyep updated:

+
    +
  • Round time (h:mm) and station security level (green/red/blue/etc) are now visible on our server hub entry.
  • +
  • Round time is now visible to all player-controlled mobs in their status panel (including simple animals).
  • +
  • Admins using the 'MOST' attack log setting no longer see player-v-NPC combat, or any attack logs generated in the admin room, admin testing area, thunderdome arena, or lavaland syndicate base. Prevents admins being spammed with attack logs.
  • +
  • Heads of department may now issue department-specific medals to members of their department.
  • +
+

Markolie updated:

+
    +
  • Humans and mice that are secretly blobs now have an antagHUD icon.
  • +
  • All hivemind languages now display follow links to ghosts.
  • +
  • Announcements, whispers (with ghost ears) and cultist messages are no longer displayed in the lobby.
  • +
  • The sentience event no longer triggers a huge number of ghost polling messages.
  • +
  • When xenomorphs are damaged, their health HUD now updates properly.
  • +
  • Custom title for ghost notifications now work properly.
  • +
  • Fixed double admin commands in the grenade priming message.
  • +
  • Ghosts will now always see whispers/zero pressure speaking if they're on the screen with the mob speaking.
  • +
  • Ghosts with ghost sight enabled will no longer see emotes from clientless mobs.
  • +
  • The prison labor point system has been refactored so it works properly.
  • +
  • Plating can now be removed (exposing the baseturf) using a welder.
  • +
  • All remaining Lavaland ruins have been ported over from /tg/.
  • +
  • All chairs on shuttles have been replaced with brand new shuttle chairs.
  • +
  • Tribal splints have been added to the game, which can be crafted with two bones and one piece of sinew.
  • +
  • The Lavaland Syndicate base now has a defibrillator and mounted defibrillator. The animal hospital now has a mounted defibrillator.
  • +
  • The Ash Walker storage area now comes with an advanced medkit instead of a regular one and one set of medical splints. It also comes with aloe vera, comfrey and wheat seeds.
  • +
  • The water tank in the Ash Walker nest has been replaced with a puddle.
  • +
  • The items in vending machines on the beach ruin and animal hospital are now free.
  • +
  • Fixed an issue where slimes wouldn't take damage from water in space.
  • +
  • It is no longer possible to unanchor the surivval pod storage units.
  • +
  • Drinking from a beaker now only applies the effect of five units of the ingested chemical, instead of the entire volume of the beaker.
  • +
  • Resolved an issue where beaker attack logs were reversed.
  • +
  • Moving through portals very quickly no longer breaks movement.
  • +
+

Quantum-M updated:

+
    +
  • New sprites for vampires being "hungry".
  • +
  • New sprite for vampire usable blood count.
  • +
  • New sprites for the safety muzzle.
  • +
  • Safety muzzle (aka the anti-bitting one) can no longer be resisted out of.
  • +
  • Vampires can now suck blood from monkey mobs (e.g. monkeys, stoks, etc.) for sustenance but do not get blood power points.
  • +
  • RnD is no longer able to print out any telescience boards.
  • +
+

SteelSlayer updated:

+
    +
  • Gives vampire thralls an objective, which can be viewed in their notes
  • +
  • Increases the size of the enthralling message seen by newly created vampire thralls
  • +
  • Vampire thralls are now stunned briefly (about 3 seconds) upon being enthralled
  • +
  • The AI's robot control window now allows you to see and interact with available bots again
  • +
+

TDSSS updated:

+
    +
  • cult teleport runes and similar powers now work on z levels 9-12
  • +
+

Tayyyyyyy updated:

+
    +
  • Inputs sanitized
  • +
  • autocomplete input mishandling single quotes (you can teleport to Wizard's den now)
  • +
  • newlines not working in CC announcements
  • +
  • players not being able to send single quotes in ahelps or PMs
  • +
  • robots not being able to pick their name
  • +
+

TheSardele updated:

+
    +
  • Lowers throwforce of drinking cartons from 15 to 0
  • +
  • Bees no longer inject venom when nuzzling
  • +
  • Sec pod pilots can now spawn with the loadout security armbands
  • +
  • It is no longer possible to raise zero to -infinity fingers using the *signal emote
  • +
  • Earmuffs now properly protect you from vampire screeches no matter what you are wearing on your other ear
  • +
+

Ty-Omaha updated:

+
    +
  • Reworded permanent bans to non-expiring bans.
  • +
  • Door remotes now add to admin-only hidden fingerprint list
  • +
  • Gave plastic surgery to line 364 of atoms.dm
  • +
+

and DominikPanic updated:

+
    +
  • Limits IC notes
  • +
+

datlo updated:

+
    +
  • Free Golems are now a lavaland ruin spawn instead of a space ruin spawn.
  • +
  • Free Golems must now purchase their shuttle board for 2000 mining points before being able to fly their shuttle.
  • +
  • Added a shuttle recall console at the golem lavaland spawn point so that golems can always recall the shuttle back to lavaland
  • +
  • The Free Golem Ship can now move to the Construction Site, the Derelict, or back to their Lavaland spawn.
  • +
  • The Free Golem Ship has been redesigned with an open floor plan, removing most of its interior walls for extra space.
  • +
  • Free Golems no longer get a free kinetic accelerator on their ship.
  • +
  • New crit species with below -100 health will be considered dead for hijack purposes, and will not interrupt a shuttle hijack attempt.
  • +
  • Fix some cases of traitors getting conflicting objectives, such as assassinating and protecting the same target.
  • +
+

farie82 updated:

+
    +
  • Beepsky will now respect your disguise again. No more looking right through that gasmask
  • +
  • Medical and security HUDs now use the correct way to identify somebody. They will see the same as you do on your screen.
  • +
  • You will now get a job icon in the sec HUD when you use your PDA as ID. It'll use the PDA's assigned job.
  • +
  • Ticket takes now ask for confirmation if you want to take an already assigned ticket.
  • +
  • Blindfolds are now craftable from 3 cloth. For those vampire prisoners you want to keep in check
  • +
  • Empty beaker button from the PANDEMIC is now replaced with Empty and eject beaker
  • +
  • List AFK players is now a verb for admins to use
  • +
  • Adds the AFK auto cryo system. By default it won't affect players unless they activate it themselves by setting the preference in their game preferences tab.
  • +
  • The syndicate can't use meta warfare no more. Advanced pinpointers no longer crash the server
  • +
+

iantine updated:

+
    +
  • Mouse suicide
  • +
+

improvedname updated:

+
    +
  • adds lasagna
  • +
+

kazboo updated:

+
    +
  • changed the display name shown to a player upon being frozen in a manner that only the admins ckey is displayed, not the character name along with it
  • +
+

08 July 2019

Arkatos updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 49e86db023d..ef20fb58092 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -10454,3 +10454,197 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fix a bug where a player who reconnects is still shown as disconnected datlo: - bugfix: Fix an antag rolling exploit. +2019-08-12: + AffectedArc07: + - rscadd: Panic Bunker + Allfd: + - tweak: Panthers can now see in the dark. + Arkatos: + - rscadd: You can ctrl-click any action button to lock/unlock its position + - tweak: All actions buttons now start with their position locked + Citinited: + - rscadd: Mappers have a new tool that creates a fully functional cycling airlock. + CornMyCob: + - bugfix: The cursed heart you get from necropolis chests is now the one that heals + you. + Couls: + - rscadd: Diagonal movement + - rscadd: Input subsystem(numpad targetting, press numpad 8 multiple times to target + eyes and mouth, numpad 6 or 4 to target arms and press them again to target + hands and numpad 1 or 3 to target legs and press them again to target feet) + taken from https://github.com/tgstation/tgstation/pull/32751 + - rscadd: change confused status to have you move diagonally randomly in the direction + you're headed if not too confused(now you can drunkenly walk down the hall) + - rscadd: clients are now children of datums like everything else in BYOND taken + from https://github.com/tgstation/tgstation/pull/20394 + - rscadd: AZERTY and numpad targetting preferences + - tweak: Reworks the biohazard event to have a chance of giving a randomized advanced + disease with 6 varying symptoms instead of a preset disease. + - tweak: change how bone breakage is calculated + - rscadd: can now butcher koi for salmon meat + - rscadd: adds a line to alert people as to why they're not getting blood from the + monkeys + - bugfix: The vampires are finally off their monkey diet, theycan now suck blood + from players and humanized monkeys + - bugfix: Symptoms are now correctly generated for level 7 biohazards + - tweak: Borgs can now cycle modules with X again + - tweak: Ahelp message is less confusing + - tweak: F2 (say) F3(ooc) F4(me) buttons have been restored tweak:when numpad targetting + is off you can use numpad 1-4 to change intents tweak:pressing shift before + any of the intent buttons doesn't change intents(for people with shift+1-4 macros) + tweak:backspace now sets the focus to the chat bar + - bugfix: fixes the runtime caused by running keyloop for clients + - bugfix: Preferences not saving properly + - bugfix: issue with preload_rsc + - rscadd: Restore hotkey mode + - bugfix: Q no longer drops items as a cyborg on AZERTY mode + - rscadd: Automatically offload ore you're carrying to an orebox you're dragging + - bugfix: typing indicators show up again + - rscadd: TG waddle component, clowns can now optionally waddle, penguins always + waddle. Ctrl Click clown shoes in hand to toggle waddling + - rscadd: Added invismin macro back to F9 + - rscdel: stealthmin macro removed from F9 + Crazylemon64: + - bugfix: Fixes a bug that would cause ghosts to teleport their bodies sometimes + Dave-TH: + - imageadd: The syndicate uplink is now complete with a new spooky background. Very + neat! + DoctorDrugs: + - rscadd: Adds additional roundstart miner slots and the additional gear required + for them to do their jobs + Fox McCloud: + - bugfix: Fixes being able to sharpen toy double-bladed energy swords + IAmBigCoat: + - tweak: Added explosion warnings to medbeams, because medbeams can cause explosions. + DON'T CROSS THE BEAMS! + Ionward: + - bugfix: Fixed vox jester uniform not appearing correctly. + - imageadd: species specific fit underwear for greys + KasparoVy: + - rscadd: Re-adds the ability to see in the dark. Adds overlays for each level of + darksight (>=8,7,6,5,4,3,<=2). + Kyep: + - rscadd: Round time (h:mm) and station security level (green/red/blue/etc) are + now visible on our server hub entry. + - tweak: Round time is now visible to all player-controlled mobs in their status + panel (including simple animals). + - tweak: Admins using the 'MOST' attack log setting no longer see player-v-NPC combat, + or any attack logs generated in the admin room, admin testing area, thunderdome + arena, or lavaland syndicate base. Prevents admins being spammed with attack + logs. + - tweak: Heads of department may now issue department-specific medals to members + of their department. + Markolie: + - rscadd: Humans and mice that are secretly blobs now have an antagHUD icon. + - tweak: All hivemind languages now display follow links to ghosts. + - bugfix: Announcements, whispers (with ghost ears) and cultist messages are no + longer displayed in the lobby. + - bugfix: The sentience event no longer triggers a huge number of ghost polling + messages. + - bugfix: When xenomorphs are damaged, their health HUD now updates properly. + - bugfix: Custom title for ghost notifications now work properly. + - bugfix: Fixed double admin commands in the grenade priming message. + - tweak: Ghosts will now always see whispers/zero pressure speaking if they're on + the screen with the mob speaking. + - tweak: Ghosts with ghost sight enabled will no longer see emotes from clientless + mobs. + - rscadd: The prison labor point system has been refactored so it works properly. + - rscadd: Plating can now be removed (exposing the baseturf) using a welder. + - rscadd: All remaining Lavaland ruins have been ported over from /tg/. + - rscadd: All chairs on shuttles have been replaced with brand new shuttle chairs. + - rscadd: Tribal splints have been added to the game, which can be crafted with + two bones and one piece of sinew. + - rscadd: The Lavaland Syndicate base now has a defibrillator and mounted defibrillator. + The animal hospital now has a mounted defibrillator. + - tweak: The Ash Walker storage area now comes with an advanced medkit instead of + a regular one and one set of medical splints. It also comes with aloe vera, + comfrey and wheat seeds. + - tweak: The water tank in the Ash Walker nest has been replaced with a puddle. + - tweak: The items in vending machines on the beach ruin and animal hospital are + now free. + - bugfix: Fixed an issue where slimes wouldn't take damage from water in space. + - bugfix: It is no longer possible to unanchor the surivval pod storage units. + - bugfix: Drinking from a beaker now only applies the effect of five units of the + ingested chemical, instead of the entire volume of the beaker. + - bugfix: Resolved an issue where beaker attack logs were reversed. + - bugfix: Moving through portals very quickly no longer breaks movement. + Quantum-M: + - rscadd: New sprites for vampires being "hungry". + - rscadd: New sprite for vampire usable blood count. + - rscadd: New sprites for the safety muzzle. + - tweak: Safety muzzle (aka the anti-bitting one) can no longer be resisted out + of. + - tweak: Vampires can now suck blood from monkey mobs (e.g. monkeys, stoks, etc.) + for sustenance but do not get blood power points. + - rscdel: RnD is no longer able to print out any telescience boards. + SteelSlayer: + - rscadd: Gives vampire thralls an objective, which can be viewed in their notes + - tweak: Increases the size of the enthralling message seen by newly created vampire + thralls + - tweak: Vampire thralls are now stunned briefly (about 3 seconds) upon being enthralled + - bugfix: The AI's robot control window now allows you to see and interact with + available bots again + TDSSS: + - tweak: cult teleport runes and similar powers now work on z levels 9-12 + Tayyyyyyy: + - tweak: Inputs sanitized + - bugfix: autocomplete input mishandling single quotes (you can teleport to Wizard's + den now) + - bugfix: newlines not working in CC announcements + - bugfix: players not being able to send single quotes in ahelps or PMs + - bugfix: robots not being able to pick their name + TheSardele: + - tweak: Lowers throwforce of drinking cartons from 15 to 0 + - bugfix: Bees no longer inject venom when nuzzling + - bugfix: Sec pod pilots can now spawn with the loadout security armbands + - bugfix: It is no longer possible to raise zero to -infinity fingers using the + *signal emote + - bugfix: Earmuffs now properly protect you from vampire screeches no matter what + you are wearing on your other ear + Ty-Omaha: + - tweak: Reworded permanent bans to non-expiring bans. + - bugfix: Door remotes now add to admin-only hidden fingerprint list + - tweak: Gave plastic surgery to line 364 of atoms.dm + and DominikPanic: + - bugfix: Limits IC notes + datlo: + - tweak: Free Golems are now a lavaland ruin spawn instead of a space ruin spawn. + - tweak: Free Golems must now purchase their shuttle board for 2000 mining points + before being able to fly their shuttle. + - rscadd: Added a shuttle recall console at the golem lavaland spawn point so that + golems can always recall the shuttle back to lavaland + - tweak: The Free Golem Ship can now move to the Construction Site, the Derelict, + or back to their Lavaland spawn. + - tweak: The Free Golem Ship has been redesigned with an open floor plan, removing + most of its interior walls for extra space. + - tweak: Free Golems no longer get a free kinetic accelerator on their ship. + - tweak: New crit species with below -100 health will be considered dead for hijack + purposes, and will not interrupt a shuttle hijack attempt. + - bugfix: Fix some cases of traitors getting conflicting objectives, such as assassinating + and protecting the same target. + farie82: + - bugfix: Beepsky will now respect your disguise again. No more looking right through + that gasmask + - bugfix: Medical and security HUDs now use the correct way to identify somebody. + They will see the same as you do on your screen. + - bugfix: You will now get a job icon in the sec HUD when you use your PDA as ID. + It'll use the PDA's assigned job. + - tweak: Ticket takes now ask for confirmation if you want to take an already assigned + ticket. + - rscadd: Blindfolds are now craftable from 3 cloth. For those vampire prisoners + you want to keep in check + - tweak: Empty beaker button from the PANDEMIC is now replaced with Empty and eject + beaker + - rscadd: List AFK players is now a verb for admins to use + - rscadd: Adds the AFK auto cryo system. By default it won't affect players unless + they activate it themselves by setting the preference in their game preferences + tab. + - bugfix: The syndicate can't use meta warfare no more. Advanced pinpointers no + longer crash the server + iantine: + - rscadd: Mouse suicide + improvedname: + - rscadd: adds lasagna + kazboo: + - tweak: changed the display name shown to a player upon being frozen in a manner + that only the admins ckey is displayed, not the character name along with it diff --git a/html/changelogs/AutoChangeLog-pr-11125.yml b/html/changelogs/AutoChangeLog-pr-11125.yml deleted file mode 100644 index 2208cf5854c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11125.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Quantum-M" -delete-after: True -changes: - - rscadd: "New sprites for vampires being \"hungry\"." - - rscadd: "New sprite for vampire usable blood count." - - rscadd: "New sprites for the safety muzzle." - - tweak: "Safety muzzle (aka the anti-bitting one) can no longer be resisted out of." - - tweak: "Vampires can now suck blood from monkey mobs (e.g. monkeys, stoks, etc.) for sustenance but do not get blood power points." diff --git a/html/changelogs/AutoChangeLog-pr-11358.yml b/html/changelogs/AutoChangeLog-pr-11358.yml deleted file mode 100644 index ed5662b1047..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11358.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Couls" -delete-after: True -changes: - - rscadd: "Diagonal movement" - - rscadd: "Input subsystem(numpad targetting, press numpad 8 multiple times to target eyes and mouth, numpad 6 or 4 to target arms and press them again to target hands and numpad 1 or 3 to target legs and press them again to target feet) taken from https://github.com/tgstation/tgstation/pull/32751" - - rscadd: "change confused status to have you move diagonally randomly in the direction you're headed if not too confused(now you can drunkenly walk down the hall)" - - rscadd: "clients are now children of datums like everything else in BYOND taken from https://github.com/tgstation/tgstation/pull/20394" - - rscadd: "AZERTY and numpad targetting preferences" diff --git a/html/changelogs/AutoChangeLog-pr-11566.yml b/html/changelogs/AutoChangeLog-pr-11566.yml deleted file mode 100644 index 09138dc9324..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11566.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Arkatos" -delete-after: True -changes: - - rscadd: "You can ctrl-click any action button to lock/unlock its position" - - tweak: "All actions buttons now start with their position locked" diff --git a/html/changelogs/AutoChangeLog-pr-11605.yml b/html/changelogs/AutoChangeLog-pr-11605.yml deleted file mode 100644 index 46c791aaa32..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11605.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Couls" -delete-after: True -changes: - - tweak: "Reworks the biohazard event to have a chance of giving a randomized advanced disease with 6 varying symptoms instead of a preset disease." diff --git a/html/changelogs/AutoChangeLog-pr-11634.yml b/html/changelogs/AutoChangeLog-pr-11634.yml deleted file mode 100644 index c51b73a64ae..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11634.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - rscadd: "The prison labor point system has been refactored so it works properly." diff --git a/html/changelogs/AutoChangeLog-pr-11653.yml b/html/changelogs/AutoChangeLog-pr-11653.yml deleted file mode 100644 index 141c0adf1be..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11653.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Couls" -delete-after: True -changes: - - tweak: "change how bone breakage is calculated" diff --git a/html/changelogs/AutoChangeLog-pr-11658.yml b/html/changelogs/AutoChangeLog-pr-11658.yml deleted file mode 100644 index a7deadb4af8..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11658.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - rscadd: "Plating can now be removed (exposing the baseturf) using a welder." diff --git a/html/changelogs/AutoChangeLog-pr-11674.yml b/html/changelogs/AutoChangeLog-pr-11674.yml deleted file mode 100644 index 5c9edc40e27..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11674.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DoctorDrugs" -delete-after: True -changes: - - rscadd: "Adds additional roundstart miner slots and the additional gear required for them to do their jobs" diff --git a/html/changelogs/AutoChangeLog-pr-11684.yml b/html/changelogs/AutoChangeLog-pr-11684.yml deleted file mode 100644 index 0f1250497f2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11684.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "IAmBigCoat" -delete-after: True -changes: - - tweak: "Added explosion warnings to medbeams, because medbeams can cause explosions. DON'T CROSS THE BEAMS!" diff --git a/html/changelogs/AutoChangeLog-pr-11687.yml b/html/changelogs/AutoChangeLog-pr-11687.yml deleted file mode 100644 index b6ceea4d139..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11687.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - rscadd: "Round time (h:mm) and station security level (green/red/blue/etc) are now visible on our server hub entry." - - tweak: "Round time is now visible to all player-controlled mobs in their status panel (including simple animals)." diff --git a/html/changelogs/AutoChangeLog-pr-11741.yml b/html/changelogs/AutoChangeLog-pr-11741.yml new file mode 100644 index 00000000000..f169e75b08a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11741.yml @@ -0,0 +1,5 @@ +author: "AzuleUtama" +delete-after: True +changes: + - tweak: "The Traitor thermal glasses and chameleon security HUD now use the updated chameleon code. +balance: Traitor thermal glasses will no longer cause eye damage when hit with EMP." diff --git a/html/changelogs/AutoChangeLog-pr-11767.yml b/html/changelogs/AutoChangeLog-pr-11767.yml new file mode 100644 index 00000000000..a1ab9b83753 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11767.yml @@ -0,0 +1,6 @@ +author: "Arkatos" +delete-after: True +changes: + - imageadd: "Added colored pillbottles" + - rscadd: "Added an option to change color of the pillbottles to ChemMaster3000" + - rscadd: "Added new description to patch packs" diff --git a/html/changelogs/AutoChangeLog-pr-11769.yml b/html/changelogs/AutoChangeLog-pr-11769.yml new file mode 100644 index 00000000000..610e9401fb5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11769.yml @@ -0,0 +1,5 @@ +author: "Couls" +delete-after: True +changes: + - rscadd: "After many complaints about being stuck in medbay. NT has modified all the airlocks on the station to allow leaving certain departments without requiring an respective ID. This new modification is indicated by a white light near the airlocks in the direction of unrestricted access." + - rscadd: "New unrestricted access can be built by NT engineers through modification of the airlock electronics." diff --git a/html/changelogs/AutoChangeLog-pr-11774.yml b/html/changelogs/AutoChangeLog-pr-11774.yml new file mode 100644 index 00000000000..2671e0bd231 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11774.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - tweak: "Jump to Node ability now shows a location of each Blob node" diff --git a/html/changelogs/AutoChangeLog-pr-11776.yml b/html/changelogs/AutoChangeLog-pr-11776.yml new file mode 100644 index 00000000000..6040b3f474a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11776.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Added SlimeHUD when playing as a slime. This means slimes will have their own unique health doll and pull icon." diff --git a/html/changelogs/AutoChangeLog-pr-11804.yml b/html/changelogs/AutoChangeLog-pr-11804.yml deleted file mode 100644 index 355e6f0a32e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11804.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - bugfix: "Fixed an issue where slimes wouldn't take damage from water in space." diff --git a/html/changelogs/AutoChangeLog-pr-11805.yml b/html/changelogs/AutoChangeLog-pr-11805.yml deleted file mode 100644 index 32aeba3f9eb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11805.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - bugfix: "It is no longer possible to unanchor the surivval pod storage units." diff --git a/html/changelogs/AutoChangeLog-pr-11806.yml b/html/changelogs/AutoChangeLog-pr-11806.yml deleted file mode 100644 index f70b8e32b82..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11806.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Tayyyyyyy" -delete-after: True -changes: - - bugfix: "autocomplete input mishandling single quotes (you can teleport to Wizard's den now)" diff --git a/html/changelogs/AutoChangeLog-pr-11807.yml b/html/changelogs/AutoChangeLog-pr-11807.yml new file mode 100644 index 00000000000..1dac37526db --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11807.yml @@ -0,0 +1,5 @@ +author: "Tayyyyyyy" +delete-after: True +changes: + - tweak: "Whether you join the ERT is no longer determined by how fast you click \"yes\" on the prompt." + - tweak: "Drag and drop support and 20 seconds to pick ERT role instead of 15" diff --git a/html/changelogs/AutoChangeLog-pr-11810.yml b/html/changelogs/AutoChangeLog-pr-11810.yml new file mode 100644 index 00000000000..b87ad624c90 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11810.yml @@ -0,0 +1,5 @@ +author: "Arkatos" +delete-after: True +changes: + - rscadd: "Action buttons can now be dragged onto each other to swap places" + - bugfix: "Fixed a case where dragging locked action buttons could result in white tooltip over the screen" diff --git a/html/changelogs/AutoChangeLog-pr-11812.yml b/html/changelogs/AutoChangeLog-pr-11812.yml deleted file mode 100644 index e5bad933f7e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11812.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Couls" -delete-after: True -changes: - - rscadd: "adds a line to alert people as to why they're not getting blood from the monkeys" - - bugfix: "The vampires are finally off their monkey diet, theycan now suck blood from players and humanized monkeys" diff --git a/html/changelogs/AutoChangeLog-pr-11821.yml b/html/changelogs/AutoChangeLog-pr-11821.yml deleted file mode 100644 index 2a98f4dbae6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11821.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Couls" -delete-after: True -changes: - - bugfix: "Symptoms are now correctly generated for level 7 biohazards" diff --git a/html/changelogs/AutoChangeLog-pr-11829.yml b/html/changelogs/AutoChangeLog-pr-11829.yml deleted file mode 100644 index 7af1b527603..00000000000 --- a/html/changelogs/AutoChangeLog-pr-11829.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "Couls" -delete-after: True -changes: - - tweak: "Borgs can now cycle modules with X again" - - tweak: "Ahelp message is less confusing" - - tweak: "F2 (say) F3(ooc) F4(me) buttons have been restored -tweak:when numpad targetting is off you can use numpad 1-4 to change intents -tweak:pressing shift before any of the intent buttons doesn't change intents(for people with shift+1-4 macros) -tweak:backspace now sets the focus to the chat bar" diff --git a/html/changelogs/AutoChangeLog-pr-11830.yml b/html/changelogs/AutoChangeLog-pr-11830.yml new file mode 100644 index 00000000000..f64dd5490f1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11830.yml @@ -0,0 +1,4 @@ +author: "EmanTheAlmighty" +delete-after: True +changes: + - rscadd: "The AI can now change its intent by clicking on the new on-screen button or pressing 4 to switch to help or harm." diff --git a/html/changelogs/AutoChangeLog-pr-11833.yml b/html/changelogs/AutoChangeLog-pr-11833.yml new file mode 100644 index 00000000000..2e7470e33cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11833.yml @@ -0,0 +1,4 @@ +author: "dovydas12345" +delete-after: True +changes: + - bugfix: "Fixes being able to pick up chairs and stools when you have items in both hand or when you don't have hands." diff --git a/html/changelogs/AutoChangeLog-pr-11834.yml b/html/changelogs/AutoChangeLog-pr-11834.yml new file mode 100644 index 00000000000..99a23206448 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11834.yml @@ -0,0 +1,4 @@ +author: "dovydas12345" +delete-after: True +changes: + - rscadd: "Adds a ERT shuttle console which is accessible to ERT members" diff --git a/html/changelogs/AutoChangeLog-pr-11843.yml b/html/changelogs/AutoChangeLog-pr-11843.yml new file mode 100644 index 00000000000..ace0ff2485b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11843.yml @@ -0,0 +1,4 @@ +author: "JKnutson101" +delete-after: True +changes: + - bugfix: "Issue where Emergency NanoMed Vendors required Medical ID to Access." diff --git a/html/changelogs/AutoChangeLog-pr-11844.yml b/html/changelogs/AutoChangeLog-pr-11844.yml new file mode 100644 index 00000000000..448d227c770 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11844.yml @@ -0,0 +1,4 @@ +author: "JKnutson101" +delete-after: True +changes: + - rscadd: "Added the ability for cyborgs with zero battery to use the 'succumb' verb." diff --git a/html/changelogs/AutoChangeLog-pr-11845.yml b/html/changelogs/AutoChangeLog-pr-11845.yml new file mode 100644 index 00000000000..2582e3c3752 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11845.yml @@ -0,0 +1,5 @@ +author: "Tayyyyyyy" +delete-after: True +changes: + - bugfix: "Fix extra newline after field and disable Github Flavored Markdown in papers (normal markdown still works)" + - bugfix: "autogenerated papers no longer appear as HTML code" diff --git a/html/changelogs/AutoChangeLog-pr-11932.yml b/html/changelogs/AutoChangeLog-pr-11932.yml new file mode 100644 index 00000000000..787271cc390 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11932.yml @@ -0,0 +1,4 @@ +author: "TheSardele" +delete-after: True +changes: + - rscadd: "Icon for cybernetic eyes" diff --git a/html/changelogs/AutoChangeLog-pr-11949.yml b/html/changelogs/AutoChangeLog-pr-11949.yml new file mode 100644 index 00000000000..12b6be236a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11949.yml @@ -0,0 +1,4 @@ +author: "kazboo" +delete-after: True +changes: + - bugfix: "adjusts the hierophant blast layer to make for it to always be below the effect. this should be the case already due to mouse_opacity, though for some unknown reason, it just doesn't work sometimes, so this should fix it." diff --git a/html/changelogs/AutoChangeLog-pr-11965.yml b/html/changelogs/AutoChangeLog-pr-11965.yml new file mode 100644 index 00000000000..f70891de781 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11965.yml @@ -0,0 +1,4 @@ +author: "TDSSS" +delete-after: True +changes: + - tweak: "cult talisman got unique icons to tell them apart" diff --git a/html/changelogs/AutoChangeLog-pr-11980.yml b/html/changelogs/AutoChangeLog-pr-11980.yml new file mode 100644 index 00000000000..55028f62e4d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11980.yml @@ -0,0 +1,4 @@ +author: "TheSardele" +delete-after: True +changes: + - bugfix: "Sleeping while drunk no longer makes you more drunk." diff --git a/html/changelogs/AutoChangeLog-pr-11984.yml b/html/changelogs/AutoChangeLog-pr-11984.yml new file mode 100644 index 00000000000..49600d2025b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11984.yml @@ -0,0 +1,5 @@ +author: "Markolie" +delete-after: True +changes: + - tweak: "Players now have thirty seconds instead of just five seconds to select if they want to be somebody's butler through a die of fate roll." + - bugfix: "The Netherworld portal is now properly destroyed upon being killed. In addition, its max health is now equal to its starting health." diff --git a/html/changelogs/AutoChangeLog-pr-11995.yml b/html/changelogs/AutoChangeLog-pr-11995.yml new file mode 100644 index 00000000000..63e511de1e9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11995.yml @@ -0,0 +1,4 @@ +author: "Markolie" +delete-after: True +changes: + - tweak: "The iron ore sprite that shows up when using the miner scanner no longer has a background, making it blend in better with the actual rock." diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 26cc4faf2ee..0167380d885 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/critter.dmi b/icons/mob/critter.dmi index 7bf89c1aab1..ddb2ebe5822 100644 Binary files a/icons/mob/critter.dmi and b/icons/mob/critter.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 409cf04e862..7f84b29d04e 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index b7f6b5c8f6a..849db6579a5 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/nest.dmi b/icons/mob/nest.dmi index 7dab335929e..d838ef6c5da 100644 Binary files a/icons/mob/nest.dmi and b/icons/mob/nest.dmi differ diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi index 595b870a172..d1aa736b352 100644 Binary files a/icons/mob/screen_full.dmi and b/icons/mob/screen_full.dmi differ diff --git a/icons/mob/screen_slime.dmi b/icons/mob/screen_slime.dmi new file mode 100644 index 00000000000..d5786f3ca69 Binary files /dev/null and b/icons/mob/screen_slime.dmi differ diff --git a/icons/mob/species/grey/underwear.dmi b/icons/mob/species/grey/underwear.dmi new file mode 100644 index 00000000000..c3c1b581651 Binary files /dev/null and b/icons/mob/species/grey/underwear.dmi differ diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi index 18a3e07ce76..f4d3eda8896 100644 Binary files a/icons/mob/species/vox/uniform.dmi and b/icons/mob/species/vox/uniform.dmi differ diff --git a/icons/obj/airlock_spawner.dmi b/icons/obj/airlock_spawner.dmi new file mode 100644 index 00000000000..9815b3f42b1 Binary files /dev/null and b/icons/obj/airlock_spawner.dmi differ diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 1bfe6c2a25e..dba239a064f 100644 Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 9c9f6d38e94..f007687d568 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clockwork_objects.dmi b/icons/obj/clockwork_objects.dmi new file mode 100644 index 00000000000..c147f01fdff Binary files /dev/null and b/icons/obj/clockwork_objects.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 1bfe41618c4..a20cf61eb33 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/doors/airlocks/station/overlays.dmi b/icons/obj/doors/airlocks/station/overlays.dmi index b1e4f9aeab5..ec1a418dab1 100644 Binary files a/icons/obj/doors/airlocks/station/overlays.dmi and b/icons/obj/doors/airlocks/station/overlays.dmi differ diff --git a/icons/obj/food/pasta.dmi b/icons/obj/food/pasta.dmi index 0179c3f5cc7..c9c05372622 100644 Binary files a/icons/obj/food/pasta.dmi and b/icons/obj/food/pasta.dmi differ diff --git a/icons/obj/hand_of_god_structures.dmi b/icons/obj/hand_of_god_structures.dmi new file mode 100644 index 00000000000..4f18b2e68d4 Binary files /dev/null and b/icons/obj/hand_of_god_structures.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 0cfe6dc554c..05a5768ce89 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index a0486389b74..cd2c6da08ee 100644 Binary files a/icons/obj/lavaland/artefacts.dmi and b/icons/obj/lavaland/artefacts.dmi differ diff --git a/icons/obj/lavaland/dead_ratvar.dmi b/icons/obj/lavaland/dead_ratvar.dmi new file mode 100644 index 00000000000..5e6e9087bd0 Binary files /dev/null and b/icons/obj/lavaland/dead_ratvar.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index f57c6ded447..f28e5f83a33 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/paper.dmi b/icons/obj/paper.dmi index ce3c79adc73..55781076833 100644 Binary files a/icons/obj/paper.dmi and b/icons/obj/paper.dmi differ diff --git a/icons/obj/puzzle.dmi b/icons/obj/puzzle.dmi new file mode 100644 index 00000000000..f623142beb4 Binary files /dev/null and b/icons/obj/puzzle.dmi differ diff --git a/icons/obj/smooth_structures/catwalk_clockwork.dmi b/icons/obj/smooth_structures/catwalk_clockwork.dmi new file mode 100644 index 00000000000..ecef1df3897 Binary files /dev/null and b/icons/obj/smooth_structures/catwalk_clockwork.dmi differ diff --git a/icons/obj/smooth_structures/catwalk_clockwork_large.dmi b/icons/obj/smooth_structures/catwalk_clockwork_large.dmi new file mode 100644 index 00000000000..675ebd91f6d Binary files /dev/null and b/icons/obj/smooth_structures/catwalk_clockwork_large.dmi differ diff --git a/icons/obj/smooth_structures/lattice_clockwork.dmi b/icons/obj/smooth_structures/lattice_clockwork.dmi new file mode 100644 index 00000000000..23beeecb276 Binary files /dev/null and b/icons/obj/smooth_structures/lattice_clockwork.dmi differ diff --git a/icons/obj/smooth_structures/lattice_clockwork_large.dmi b/icons/obj/smooth_structures/lattice_clockwork_large.dmi new file mode 100644 index 00000000000..3b035d8736b Binary files /dev/null and b/icons/obj/smooth_structures/lattice_clockwork_large.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 5a976767f11..20a27b2781c 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 411f371af9b..400b42105f4 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/mining.dmi b/icons/turf/mining.dmi index 9621ef05d5c..f648883072a 100644 Binary files a/icons/turf/mining.dmi and b/icons/turf/mining.dmi differ diff --git a/icons/turf/walls/clockwork_wall.dmi b/icons/turf/walls/clockwork_wall.dmi new file mode 100644 index 00000000000..8263e901d00 Binary files /dev/null and b/icons/turf/walls/clockwork_wall.dmi differ diff --git a/nano/assets/libraries.min.js b/nano/assets/libraries.min.js index 2df7792ed28..d0c1ef9a46f 100644 --- a/nano/assets/libraries.min.js +++ b/nano/assets/libraries.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(d,e){var f=[],c=f.slice,g=f.concat,a=f.push,r=f.indexOf,n={},t=n.toString,m=n.hasOwnProperty,v={},i="1.11.3",C=function(e,t){return new C.fn.init(e,t)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,s=/^-ms-/,l=/-([\da-z])/gi,u=function(e,t){return t.toUpperCase()};function p(e){var t="length"in e&&e.length,n=C.type(e);return"function"!==n&&!C.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&0+~]|"+O+")"+O+"*"),U=new RegExp("="+O+"*([^\\]'\"]*?)"+O+"*\\]","g"),X=new RegExp(q),Y=new RegExp("^"+F+"$"),Q={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I.replace("w","w*")+")"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+O+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)","i")},J=/^(?:input|select|textarea|button)$/i,V=/^h\d$/i,G=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/[+~]/,ee=/'|\\/g,te=new RegExp("\\\\([\\da-f]{1,6}"+O+"?|("+O+")|.)","ig"),ne=function(e,t,n){var i="0x"+t-65536;return i!=i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},ie=function(){v()};try{P.apply(t=H.call(E.childNodes),E.childNodes),t[E.childNodes.length].nodeType}catch(e){P={apply:t.length?function(e,t){A.apply(e,H.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function re(e,t,n,i){var r,o,s,a,l,u,c,f,p,h;if((t?t.ownerDocument||t:E)!==T&&v(t),n=n||[],a=(t=t||T).nodeType,"string"!=typeof e||!e||1!==a&&9!==a&&11!==a)return n;if(!i&&y){if(11!==a&&(r=K.exec(e)))if(s=r[1]){if(9===a){if(!(o=t.getElementById(s))||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(s))&&C(t,o)&&o.id===s)return n.push(o),n}else{if(r[2])return P.apply(n,t.getElementsByTagName(e)),n;if((s=r[3])&&d.getElementsByClassName)return P.apply(n,t.getElementsByClassName(s)),n}if(d.qsa&&(!b||!b.test(e))){if(f=c=_,p=t,h=1!==a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){for(u=g(e),(c=t.getAttribute("id"))?f=c.replace(ee,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",l=u.length;l--;)u[l]=f+ge(u[l]);p=Z.test(e)&&he(t.parentNode)||t,h=u.join(",")}if(h)try{return P.apply(n,p.querySelectorAll(h)),n}catch(e){}finally{c||t.removeAttribute("id")}}}return m(e.replace($,"$1"),t,n,i)}function oe(){var i=[];return function e(t,n){return i.push(t+" ")>x.cacheLength&&delete e[i.shift()],e[t+" "]=n}}function se(e){return e[_]=!0,e}function ae(e){var t=T.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){for(var n=e.split("|"),i=e.length;i--;)x.attrHandle[n[i]]=t}function ue(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function ce(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function fe(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function pe(s){return se(function(o){return o=+o,se(function(e,t){for(var n,i=s([],e.length,o),r=i.length;r--;)e[n=i[r]]&&(e[n]=!(t[n]=e[n]))})})}function he(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=re.support={},i=re.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},v=re.setDocument=function(e){var t,n,l=e?e.ownerDocument||e:E;return l!==T&&9===l.nodeType&&l.documentElement?(r=(T=l).documentElement,(n=l.defaultView)&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",ie,!1):n.attachEvent&&n.attachEvent("onunload",ie)),y=!i(l),d.attributes=ae(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ae(function(e){return e.appendChild(l.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=G.test(l.getElementsByClassName),d.getById=ae(function(e){return r.appendChild(e).id=_,!l.getElementsByName||!l.getElementsByName(_).length}),d.getById?(x.find.ID=function(e,t){if(void 0!==t.getElementById&&y){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}}):(delete x.find.ID,x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}}),x.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[r++];)1===n.nodeType&&i.push(n);return i},x.find.CLASS=d.getElementsByClassName&&function(e,t){if(y)return t.getElementsByClassName(e)},s=[],b=[],(d.qsa=G.test(l.querySelectorAll))&&(ae(function(e){r.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&b.push("[*^$]="+O+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||b.push("\\["+O+"*(?:value|"+L+")"),e.querySelectorAll("[id~="+_+"-]").length||b.push("~="),e.querySelectorAll(":checked").length||b.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||b.push(".#.+[+~]")}),ae(function(e){var t=l.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&b.push("name"+O+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||b.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),b.push(",.*:")})),(d.matchesSelector=G.test(a=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.oMatchesSelector||r.msMatchesSelector))&&ae(function(e){d.disconnectedMatch=a.call(e,"div"),a.call(e,"[s!='']:x"),s.push("!=",q)}),b=b.length&&new RegExp(b.join("|")),s=s.length&&new RegExp(s.join("|")),t=G.test(r.compareDocumentPosition),C=t||G.test(r.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return c=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===l||e.ownerDocument===E&&C(E,e)?-1:t===l||t.ownerDocument===E&&C(E,t)?1:u?M(u,e)-M(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return c=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===l?-1:t===l?1:r?-1:o?1:u?M(u,e)-M(u,t):0;if(r===o)return ue(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ue(s[i],a[i]):s[i]===E?-1:a[i]===E?1:0},l):T},re.matches=function(e,t){return re(e,null,null,t)},re.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&v(e),t=t.replace(U,"='$1']"),d.matchesSelector&&y&&(!s||!s.test(t))&&(!b||!b.test(t)))try{var n=a.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||re.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&re.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=g(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=l[e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&l(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,i,r){return function(e){var t=re.attr(e,n);return null==t?"!="===i:!i||(t+="","="===i?t===r:"!="===i?t!==r:"^="===i?r&&0===t.indexOf(r):"*="===i?r&&-1(?:<\/\1>|)$/,x=/^.[^:#\[\.,]*$/;function w(e,n,i){if(C.isFunction(n))return C.grep(e,function(e,t){return!!n.call(e,t,e)!==i});if(n.nodeType)return C.grep(e,function(e){return e===n!==i});if("string"==typeof n){if(x.test(n))return C.filter(n,e,i);n=C.filter(n,e)}return C.grep(e,function(e){return 0<=C.inArray(e,n)!==i})}C.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?C.find.matchesSelector(i,e)?[i]:[]:C.find.matches(e,C.grep(t,function(e){return 1===e.nodeType}))},C.fn.extend({find:function(e){var t,n=[],i=this,r=i.length;if("string"!=typeof e)return this.pushStack(C(e).filter(function(){for(t=0;t)[^>]*|#([\w-]*))$/;(C.fn.init=function(e,t){var n,i;if(!e)return this;if("string"!=typeof e)return e.nodeType?(this.context=this[0]=e,this.length=1,this):C.isFunction(e)?void 0!==T.ready?T.ready(e):e(C):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),C.makeArray(e,this));if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:E.exec(e))||!n[1]&&t)return!t||t.jquery?(t||T).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:_,!0)),b.test(n[1])&&C.isPlainObject(t))for(n in t)C.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if((i=_.getElementById(n[2]))&&i.parentNode){if(i.id!==n[2])return T.find(e);this.length=1,this[0]=i}return this.context=_,this.selector=e,this}).prototype=C.fn,T=C(_);var S=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function D(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.extend({dir:function(e,t,n){for(var i=[],r=e[t];r&&9!==r.nodeType&&(void 0===n||1!==r.nodeType||!C(r).is(n));)1===r.nodeType&&i.push(r),r=r[t];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),C.fn.extend({has:function(e){var t,n=C(e,this),i=n.length;return this.filter(function(){for(t=0;t

Name

Status

Location

Control

[Bot.hacked ? "(!) [Bot.name]" : Bot.name] ([Bot.model])
a",v.leadingWhitespace=3===t.firstChild.nodeType,v.tbody=!t.getElementsByTagName("tbody").length,v.htmlSerialize=!!t.getElementsByTagName("link").length,v.html5Clone="<:nav>"!==_.createElement("nav").cloneNode(!0).outerHTML,e.type="checkbox",e.checked=!0,n.appendChild(e),v.appendChecked=e.checked,t.innerHTML="",v.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,n.appendChild(t),t.innerHTML="",v.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,v.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){v.noCloneEvent=!1}),t.cloneNode(!0).click()),null==v.deleteExpando){v.deleteExpando=!0;try{delete t.test}catch(e){v.deleteExpando=!1}}}(),function(){var e,t,n=_.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})t="on"+e,(v[e+"Bubbles"]=t in d)||(n.setAttribute(t,"t"),v[e+"Bubbles"]=!1===n.attributes[t].expando);n=null}();var Y=/^(?:input|select|textarea)$/i,Q=/^key/,J=/^(?:mouse|pointer|contextmenu)|click/,V=/^(?:focusinfocus|focusoutblur)$/,G=/^([^.]*)(?:\.(.+)|)$/;function K(){return!0}function Z(){return!1}function ee(){try{return _.activeElement}catch(e){}}function te(e){var t=ne.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}C.event={global:{},add:function(e,t,n,i,r){var o,s,a,l,u,c,f,p,h,d,g,m=C._data(e);if(m){for(n.handler&&(n=(l=n).handler,r=l.selector),n.guid||(n.guid=C.guid++),(s=m.events)||(s=m.events={}),(c=m.handle)||((c=m.handle=function(e){return typeof C===L||e&&C.event.triggered===e.type?void 0:C.event.dispatch.apply(c.elem,arguments)}).elem=e),a=(t=(t||"").match(j)||[""]).length;a--;)h=g=(o=G.exec(t[a])||[])[1],d=(o[2]||"").split(".").sort(),h&&(u=C.event.special[h]||{},h=(r?u.delegateType:u.bindType)||h,u=C.event.special[h]||{},f=C.extend({type:h,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&C.expr.match.needsContext.test(r),namespace:d.join(".")},l),(p=s[h])||((p=s[h]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(e,i,d,c)||(e.addEventListener?e.addEventListener(h,c,!1):e.attachEvent&&e.attachEvent("on"+h,c))),u.add&&(u.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),r?p.splice(p.delegateCount++,0,f):p.push(f),C.event.global[h]=!0);e=null}},remove:function(e,t,n,i,r){var o,s,a,l,u,c,f,p,h,d,g,m=C.hasData(e)&&C._data(e);if(m&&(c=m.events)){for(u=(t=(t||"").match(j)||[""]).length;u--;)if(h=g=(a=G.exec(t[u])||[])[1],d=(a[2]||"").split(".").sort(),h){for(f=C.event.special[h]||{},p=c[h=(i?f.delegateType:f.bindType)||h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=p.length;o--;)s=p[o],!r&&g!==s.origType||n&&n.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(p.splice(o,1),s.selector&&p.delegateCount--,f.remove&&f.remove.call(e,s));l&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,d,m.handle)||C.removeEvent(e,h,m.handle),delete c[h])}else for(h in c)C.event.remove(e,h+t[u],n,i,!0);C.isEmptyObject(c)&&(delete m.handle,C._removeData(e,"events"))}},trigger:function(e,t,n,i){var r,o,s,a,l,u,c,f=[n||_],p=m.call(e,"type")?e.type:e,h=m.call(e,"namespace")?e.namespace.split("."):[];if(s=u=n=n||_,3!==n.nodeType&&8!==n.nodeType&&!V.test(p+C.event.triggered)&&(0<=p.indexOf(".")&&(p=(h=p.split(".")).shift(),h.sort()),o=p.indexOf(":")<0&&"on"+p,(e=e[C.expando]?e:new C.Event(p,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=h.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:C.makeArray(t,[e]),l=C.event.special[p]||{},i||!l.trigger||!1!==l.trigger.apply(n,t))){if(!i&&!l.noBubble&&!C.isWindow(n)){for(a=l.delegateType||p,V.test(a+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),u=s;u===(n.ownerDocument||_)&&f.push(u.defaultView||u.parentWindow||d)}for(c=0;(s=f[c++])&&!e.isPropagationStopped();)e.type=1]","i"),oe=/^\s+/,se=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ae=/<([\w:]+)/,le=/\s*$/g,ge={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:v.htmlSerialize?[0,"",""]:[1,"X
","
"]},me=te(_).appendChild(_.createElement("div"));function ve(e,t){var n,i,r=0,o=typeof e.getElementsByTagName!==L?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==L?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(i=n[r]);r++)!t||C.nodeName(i,t)?o.push(i):C.merge(o,ve(i,t));return void 0===t||t&&C.nodeName(e,t)?C.merge([e],o):o}function ye(e){X.test(e.type)&&(e.defaultChecked=e.checked)}function be(e,t){return C.nodeName(e,"table")&&C.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function xe(e){return e.type=(null!==C.find.attr(e,"type"))+"/"+e.type,e}function we(e){var t=he.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Te(e,t){for(var n,i=0;null!=(n=e[i]);i++)C._data(n,"globalEval",!t||C._data(t[i],"globalEval"))}function Ce(e,t){if(1===t.nodeType&&C.hasData(e)){var n,i,r,o=C._data(e),s=C._data(t,o),a=o.events;if(a)for(n in delete s.handle,s.events={},a)for(i=0,r=a[n].length;i")?o=e.cloneNode(!0):(me.innerHTML=e.outerHTML,me.removeChild(o=me.firstChild)),!(v.noCloneEvent&&v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(i=ve(o),a=ve(e),s=0;null!=(r=a[s]);++s)i[s]&&_e(r,i[s]);if(t)if(n)for(a=a||ve(e),i=i||ve(o),s=0;null!=(r=a[s]);s++)Ce(r,i[s]);else Ce(e,o);return 0<(i=ve(o,"script")).length&&Te(i,!l&&ve(e,"script")),i=a=r=null,o},buildFragment:function(e,t,n,i){for(var r,o,s,a,l,u,c,f=e.length,p=te(t),h=[],d=0;d")+c[2],r=c[0];r--;)a=a.lastChild;if(!v.leadingWhitespace&&oe.test(o)&&h.push(t.createTextNode(oe.exec(o)[0])),!v.tbody)for(r=(o="table"!==l||le.test(o)?""!==c[1]||le.test(o)?0:a:a.firstChild)&&o.childNodes.length;r--;)C.nodeName(u=o.childNodes[r],"tbody")&&!u.childNodes.length&&o.removeChild(u);for(C.merge(h,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=p.lastChild}else h.push(t.createTextNode(o));for(a&&p.removeChild(a),v.appendChecked||C.grep(ve(h,"input"),ye),d=0;o=h[d++];)if((!i||-1===C.inArray(o,i))&&(s=C.contains(o.ownerDocument,o),a=ve(p.appendChild(o),"script"),s&&Te(a),n))for(r=0;o=a[r++];)pe.test(o.type||"")&&n.push(o);return a=null,p},cleanData:function(e,t){for(var n,i,r,o,s=0,a=C.expando,l=C.cache,u=v.deleteExpando,c=C.event.special;null!=(n=e[s]);s++)if((t||C.acceptData(n))&&(o=(r=n[a])&&l[r])){if(o.events)for(i in o.events)c[i]?C.event.remove(n,i):C.removeEvent(n,i,o.handle);l[r]&&(delete l[r],u?delete n[a]:typeof n.removeAttribute!==L?n.removeAttribute(a):n[a]=null,f.push(r))}}}),C.fn.extend({text:function(e){return U(this,function(e){return void 0===e?C.text(this):this.empty().append((this[0]&&this[0].ownerDocument||_).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||be(this,e).appendChild(e)})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=be(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,i=e?C.filter(e,this):this,r=0;null!=(n=i[r]);r++)t||1!==n.nodeType||C.cleanData(ve(n)),n.parentNode&&(t&&C.contains(n.ownerDocument,n)&&Te(ve(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&C.cleanData(ve(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&C.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return U(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(ie,""):void 0;if("string"==typeof e&&!ce.test(e)&&(v.htmlSerialize||!re.test(e))&&(v.leadingWhitespace||!oe.test(e))&&!ge[(ae.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(se,"<$1>");try{for(;n")).appendTo(t.documentElement))[0].contentWindow||Ee[0].contentDocument).document).write(),t.close(),n=De(e,t),Ee.detach()),Ne[e]=n),n}v.shrinkWrapBlocks=function(){return null!=Se?Se:(Se=!1,(t=_.getElementsByTagName("body")[0])&&t.style?(e=_.createElement("div"),(n=_.createElement("div")).style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",t.appendChild(n).appendChild(e),typeof e.style.zoom!==L&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(_.createElement("div")).style.width="5px",Se=3!==e.offsetWidth),t.removeChild(n),Se):void 0);var e,t,n};var je,Ae,Pe=/^margin/,He=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),Me=/^(top|right|bottom|left)$/;function Le(t,n){return{get:function(){var e=t();if(null!=e){if(!e)return(this.get=n).apply(this,arguments);delete this.get}}}}d.getComputedStyle?(je=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):d.getComputedStyle(e,null)},Ae=function(e,t,n){var i,r,o,s,a=e.style;return s=(n=n||je(e))?n.getPropertyValue(t)||n[t]:void 0,n&&(""!==s||C.contains(e.ownerDocument,e)||(s=C.style(e,t)),He.test(s)&&Pe.test(t)&&(i=a.width,r=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=r,a.maxWidth=o)),void 0===s?s:s+""}):_.documentElement.currentStyle&&(je=function(e){return e.currentStyle},Ae=function(e,t,n){var i,r,o,s,a=e.style;return null==(s=(n=n||je(e))?n[t]:void 0)&&a&&a[t]&&(s=a[t]),He.test(s)&&!Me.test(t)&&(i=a.left,(o=(r=e.runtimeStyle)&&r.left)&&(r.left=e.currentStyle.left),a.left="fontSize"===t?"1em":s,s=a.pixelLeft+"px",a.left=i,o&&(r.left=o)),void 0===s?s:s+""||"auto"}),function(){var e,t,n,r,o,s,a;function i(){var e,t,n,i;(t=_.getElementsByTagName("body")[0])&&t.style&&(e=_.createElement("div"),(n=_.createElement("div")).style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",t.appendChild(n).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=o=!1,a=!0,d.getComputedStyle&&(r="1%"!==(d.getComputedStyle(e,null)||{}).top,o="4px"===(d.getComputedStyle(e,null)||{width:"4px"}).width,(i=e.appendChild(_.createElement("div"))).style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",e.style.width="1px",a=!parseFloat((d.getComputedStyle(i,null)||{}).marginRight),e.removeChild(i)),e.innerHTML="
t
",(i=e.getElementsByTagName("td"))[0].style.cssText="margin:0;border:0;padding:0;display:none",(s=0===i[0].offsetHeight)&&(i[0].style.display="",i[1].style.display="none",s=0===i[0].offsetHeight),t.removeChild(n))}(e=_.createElement("div")).innerHTML="
a",(t=(n=e.getElementsByTagName("a")[0])&&n.style)&&(t.cssText="float:left;opacity:.5",v.opacity="0.5"===t.opacity,v.cssFloat=!!t.cssFloat,e.style.backgroundClip="content-box",e.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===e.style.backgroundClip,v.boxSizing=""===t.boxSizing||""===t.MozBoxSizing||""===t.WebkitBoxSizing,C.extend(v,{reliableHiddenOffsets:function(){return null==s&&i(),s},boxSizingReliable:function(){return null==o&&i(),o},pixelPosition:function(){return null==r&&i(),r},reliableMarginRight:function(){return null==a&&i(),a}}))}(),C.swap=function(e,t,n,i){var r,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];for(o in r=n.apply(e,i||[]),t)e.style[o]=s[o];return r};var Oe=/alpha\([^)]*\)/i,Ie=/opacity\s*=\s*([^)]*)/,Fe=/^(none|table(?!-c[ea]).+)/,We=new RegExp("^("+$+")(.*)$","i"),qe=new RegExp("^([+-])=("+$+")","i"),Re={position:"absolute",visibility:"hidden",display:"block"},$e={letterSpacing:"0",fontWeight:"400"},Be=["Webkit","O","Moz","ms"];function ze(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=t,r=Be.length;r--;)if((t=Be[r]+n)in e)return t;return i}function Ue(e,t){for(var n,i,r,o=[],s=0,a=e.length;s
a",tt=Ze.getElementsByTagName("a")[0],nt=(et=_.createElement("select")).appendChild(_.createElement("option")),Ke=Ze.getElementsByTagName("input")[0],tt.style.cssText="top:1px",v.getSetAttribute="t"!==Ze.className,v.style=/top/.test(tt.getAttribute("style")),v.hrefNormalized="/a"===tt.getAttribute("href"),v.checkOn=!!Ke.value,v.optSelected=nt.selected,v.enctype=!!_.createElement("form").enctype,et.disabled=!0,v.optDisabled=!nt.disabled,(Ke=_.createElement("input")).setAttribute("value",""),v.input=""===Ke.getAttribute("value"),Ke.value="t",Ke.setAttribute("type","radio"),v.radioValue="t"===Ke.value;var pt=/\r/g;C.fn.extend({val:function(n){var i,e,r,t=this[0];return arguments.length?(r=C.isFunction(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=r?n.call(this,e,C(this).val()):n)?t="":"number"==typeof t?t+="":C.isArray(t)&&(t=C.map(t,function(e){return null==e?"":e+""})),(i=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in i&&void 0!==i.set(this,t,"value")||(this.value=t))})):t?(i=C.valHooks[t.type]||C.valHooks[t.nodeName.toLowerCase()])&&"get"in i&&void 0!==(e=i.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(pt,""):null==e?"":e:void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:C.trim(C.text(e))}},select:{get:function(e){for(var t,n,i=e.options,r=e.selectedIndex,o="select-one"===e.type||r<0,s=o?null:[],a=o?r+1:i.length,l=r<0?a:o?r:0;l").append(C.parseHTML(e)).find(i):e)}).complete(n&&function(e,t){s.each(n,r||[e.responseText,t,e])}),this},C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){C.fn[t]=function(e){return this.on(t,e)}}),C.expr.filters.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length};var tn=d.document.documentElement;function nn(e){return C.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}C.offset={setOffset:function(e,t,n){var i,r,o,s,a,l,u=C.css(e,"position"),c=C(e),f={};"static"===u&&(e.style.position="relative"),a=c.offset(),o=C.css(e,"top"),l=C.css(e,"left"),r=("absolute"===u||"fixed"===u)&&-1").outerWidth(1).jquery||D.each(["Width","Height"],function(e,n){var r="Width"===n?["Left","Right"]:["Top","Bottom"],i=n.toLowerCase(),o={innerWidth:D.fn.innerWidth,innerHeight:D.fn.innerHeight,outerWidth:D.fn.outerWidth,outerHeight:D.fn.outerHeight};function s(e,t,n,i){return D.each(r,function(){t-=parseFloat(D.css(e,"padding"+this))||0,n&&(t-=parseFloat(D.css(e,"border"+this+"Width"))||0),i&&(t-=parseFloat(D.css(e,"margin"+this))||0)}),t}D.fn["inner"+n]=function(e){return void 0===e?o["inner"+n].call(this):this.each(function(){D(this).css(i,s(this,e)+"px")})},D.fn["outer"+n]=function(e,t){return"number"!=typeof e?o["outer"+n].call(this,e):this.each(function(){D(this).css(i,s(this,e,!0,t)+"px")})}}),D.fn.addBack||(D.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),D("").data("a-b","a").removeData("a-b").data("a-b")&&(D.fn.removeData=(t=D.fn.removeData,function(e){return arguments.length?t.call(this,D.camelCase(e)):t.call(this)})),D.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),D.fn.extend({focus:(i=D.fn.focus,function(t,n){return"number"==typeof t?this.each(function(){var e=this;setTimeout(function(){D(e).focus(),n&&n.call(e)},t)}):i.apply(this,arguments)}),disableSelection:(n="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.bind(n+".ui-disableSelection",function(e){e.preventDefault()})}),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(e){if(void 0!==e)return this.css("zIndex",e);if(this.length)for(var t,n,i=D(this[0]);i.length&&i[0]!==document;){if(("absolute"===(t=i.css("position"))||"relative"===t||"fixed"===t)&&(n=parseInt(i.css("zIndex"),10),!isNaN(n)&&0!==n))return n;i=i.parent()}return 0}}),D.ui.plugin={add:function(e,t,n){var i,r=D.ui[e].prototype;for(i in n)r.plugins[i]=r.plugins[i]||[],r.plugins[i].push([t,n[i]])},call:function(e,t,n,i){var r,o=e.plugins[t];if(o&&(i||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(r=0;r",options:{disabled:!1,create:null},_createWidget:function(e,t){t=D(t||this.defaultElement||this)[0],this.element=D(t),this.uuid=a++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=D(),this.hoverable=D(),this.focusable=D(),t!==this&&(D.data(t,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===t&&this.destroy()}}),this.document=D(t.style?t.ownerDocument:t.document||t),this.window=D(this.document[0].defaultView||this.document[0].parentWindow)),this.options=D.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:D.noop,_getCreateEventData:D.noop,_create:D.noop,_init:D.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(D.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:D.noop,widget:function(){return this.element},option:function(e,t){var n,i,r,o=e;if(0===arguments.length)return D.widget.extend({},this.options);if("string"==typeof e)if(o={},e=(n=e.split(".")).shift(),n.length){for(i=o[e]=D.widget.extend({},this.options[e]),r=0;r=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}});!function(){D.ui=D.ui||{};var r,T,C=Math.max,_=Math.abs,E=Math.round,i=/left|center|right/,o=/top|center|bottom/,s=/[\+\-]\d+(\.[\d]+)?%?/,a=/^\w+/,l=/%$/,u=D.fn.position;function S(e,t,n){return[parseFloat(e[0])*(l.test(e[0])?t/100:1),parseFloat(e[1])*(l.test(e[1])?n/100:1)]}function N(e,t){return parseInt(D.css(e,t),10)||0}D.position={scrollbarWidth:function(){if(void 0!==r)return r;var e,t,n=D("
"),i=n.children()[0];return D("body").append(n),e=i.offsetWidth,n.css("overflow","scroll"),e===(t=i.offsetWidth)&&(t=n[0].clientWidth),n.remove(),r=e-t},getScrollInfo:function(e){var t=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),n=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),i="scroll"===t||"auto"===t&&e.widthC(_(i),_(r))?o.important="horizontal":o.important="vertical",f.using.call(this,e,o)}),s.offset(D.extend(u,{using:e}))})},D.ui.position={fit:{left:function(e,t){var n,i=t.within,r=i.isWindow?i.scrollLeft:i.offset.left,o=i.width,s=e.left-t.collisionPosition.marginLeft,a=r-s,l=s+t.collisionWidth-o-r;t.collisionWidth>o?0o?0").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var t=this.document[0];if(this.handleElement.is(e.target))try{t.activeElement&&"body"!==t.activeElement.nodeName.toLowerCase()&&D(t.activeElement).blur()}catch(e){}},_mouseStart:function(e){var t=this.options;return this.helper=this._createHelper(e),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),D.ui.ddmanager&&(D.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0n[2]&&(l=n[2]+this.offset.click.left),e.pageY-this.offset.click.top>n[3]&&(u=n[3]+this.offset.click.top)),s.grid&&(r=s.grid[1]?this.originalPageY+Math.round((u-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,u=n?r-this.offset.click.top>=n[1]||r-this.offset.click.top>n[3]?r:r-this.offset.click.top>=n[1]?r-s.grid[1]:r+s.grid[1]:r,o=s.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,l=n?o-this.offset.click.left>=n[0]||o-this.offset.click.left>n[2]?o:o-this.offset.click.left>=n[0]?o-s.grid[0]:o+s.grid[0]:o),"y"===s.axis&&(l=this.originalPageX),"x"===s.axis&&(u=this.originalPageY)),{top:u-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:a?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:a?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(e,t,n){return n=n||this._uiHash(),D.ui.plugin.call(this,e,[t,n,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),n.offset=this.positionAbs),D.Widget.prototype._trigger.call(this,e,t,n)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),D.ui.plugin.add("draggable","connectToSortable",{start:function(t,e,n){var i=D.extend({},e,{item:n.element});n.sortables=[],D(n.options.connectToSortable).each(function(){var e=D(this).sortable("instance");e&&!e.options.disabled&&(n.sortables.push(e),e.refreshPositions(),e._trigger("activate",t,i))})},stop:function(t,e,n){var i=D.extend({},e,{item:n.element});n.cancelHelperRemoval=!1,D.each(n.sortables,function(){var e=this;e.isOver?(e.isOver=0,n.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,i))})},drag:function(n,i,r){D.each(r.sortables,function(){var e=!1,t=this;t.positionAbs=r.positionAbs,t.helperProportions=r.helperProportions,t.offset.click=r.offset.click,t._intersectsWith(t.containerCache)&&(e=!0,D.each(r.sortables,function(){return this.positionAbs=r.positionAbs,this.helperProportions=r.helperProportions,this.offset.click=r.offset.click,this!==t&&this._intersectsWith(this.containerCache)&&D.contains(t.element[0],this.element[0])&&(e=!1),e})),e?(t.isOver||(t.isOver=1,r._parent=i.helper.parent(),t.currentItem=i.helper.appendTo(t.element).data("ui-sortable-item",!0),t.options._helper=t.options.helper,t.options.helper=function(){return i.helper[0]},n.target=t.currentItem[0],t._mouseCapture(n,!0),t._mouseStart(n,!0,!0),t.offset.click.top=r.offset.click.top,t.offset.click.left=r.offset.click.left,t.offset.parent.left-=r.offset.parent.left-t.offset.parent.left,t.offset.parent.top-=r.offset.parent.top-t.offset.parent.top,r._trigger("toSortable",n),r.dropped=t.element,D.each(r.sortables,function(){this.refreshPositions()}),r.currentItem=r.element,t.fromOutside=r),t.currentItem&&(t._mouseDrag(n),i.position=t.position)):t.isOver&&(t.isOver=0,t.cancelHelperRemoval=!0,t.options._revert=t.options.revert,t.options.revert=!1,t._trigger("out",n,t._uiHash(t)),t._mouseStop(n,!0),t.options.revert=t.options._revert,t.options.helper=t.options._helper,t.placeholder&&t.placeholder.remove(),i.helper.appendTo(r._parent),r._refreshOffsets(n),i.position=r._generatePosition(n,!0),r._trigger("fromSortable",n),r.dropped=!1,D.each(r.sortables,function(){this.refreshPositions()}))})}}),D.ui.plugin.add("draggable","cursor",{start:function(e,t,n){var i=D("body"),r=n.options;i.css("cursor")&&(r._cursor=i.css("cursor")),i.css("cursor",r.cursor)},stop:function(e,t,n){var i=n.options;i._cursor&&D("body").css("cursor",i._cursor)}}),D.ui.plugin.add("draggable","opacity",{start:function(e,t,n){var i=D(t.helper),r=n.options;i.css("opacity")&&(r._opacity=i.css("opacity")),i.css("opacity",r.opacity)},stop:function(e,t,n){var i=n.options;i._opacity&&D(t.helper).css("opacity",i._opacity)}}),D.ui.plugin.add("draggable","scroll",{start:function(e,t,n){n.scrollParentNotHidden||(n.scrollParentNotHidden=n.helper.scrollParent(!1)),n.scrollParentNotHidden[0]!==n.document[0]&&"HTML"!==n.scrollParentNotHidden[0].tagName&&(n.overflowOffset=n.scrollParentNotHidden.offset())},drag:function(e,t,n){var i=n.options,r=!1,o=n.scrollParentNotHidden[0],s=n.document[0];o!==s&&"HTML"!==o.tagName?(i.axis&&"x"===i.axis||(n.overflowOffset.top+o.offsetHeight-e.pageY")[0],m=c.each;function v(e,t,n){var i=g[t.type]||{};return null==e?n||!t.def?null:t.def:(e=i.floor?~~e:parseFloat(e),isNaN(e)?t.def:i.mod?(e+i.mod)%i.mod:e<0?0:i.maxo.mod/2?i+=o.mod:i-r>o.mod/2&&(i-=o.mod)),v((r-i)*s+i,t)))}),this[t](u)},blend:function(e){if(1===this._rgba[3])return this;var t=this._rgba.slice(),n=t.pop(),i=h(e)._rgba;return h(c.map(t,function(e,t){return(1-n)*i[t]+n*e}))},toRgbaString:function(){var e="rgba(",t=c.map(this._rgba,function(e,t){return null==e?2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),t={width:n.width(),height:n.height()},r=document.activeElement;try{r.id}catch(e){r=document.body}return n.wrap(e),(n[0]===r||D.contains(n[0],r))&&D(r).focus(),e=n.parent(),"static"===n.css("position")?(e.css({position:"relative"}),n.css({position:"relative"})):(D.extend(i,{position:n.css("position"),zIndex:n.css("z-index")}),D.each(["top","left","bottom","right"],function(e,t){i[t]=n.css(t),isNaN(parseInt(i[t],10))&&(i[t]="auto")}),n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),n.css(t),e.css(i).show()},removeWrapper:function(e){var t=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===t||D.contains(e[0],t))&&D(t).focus()),e},setTransition:function(i,e,r,o){return o=o||{},D.each(e,function(e,t){var n=i.cssUnit(t);0r&&0!==r||!1===i.call(e,o))&&jQuery.timer.remove(e,n,i)};a.timerID=i.timerID,s[n][i.timerID]||(s[n][i.timerID]=window.setInterval(a,t)),this.global.push(e)}},remove:function(e,t,n){var i,r=jQuery.data(e,this.dataKey);if(r){if(t){if(r[t]){if(n)n.timerID&&(window.clearInterval(r[t][n.timerID]),delete r[t][n.timerID]);else for(var n in r[t])window.clearInterval(r[t][n]),delete r[t][n];for(i in r[t])break;i||(i=null,delete r[t])}}else for(t in r)this.remove(e,t,n);for(i in r)break;i||jQuery.removeData(e,this.dataKey)}}}}),jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(e,t){jQuery.timer.remove(t)})}),function(){"use strict";var a={version:"1.0.1-nanoui",templateSettings:{evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{:([\s\S]+?)\}\}/g,encode:/\{\{>([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,conditional:/\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,conditionalElse:/\{\{else\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,props:/\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,empty:/\{\{empty\}\}/g,varname:"data, config, helper",strip:!0,append:!0,selfcontained:!1},template:void 0,compile:void 0};function l(){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},e=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(e,function(e){return t[e]||e}):this}}"undefined"!=typeof module&&module.exports?module.exports=a:"function"==typeof define&&define.amd?define(function(){return a}):function(){return this||(0,eval)("this")}().doT=a,String.prototype.encodeHTML=l();var u={append:{start:"'+(",end:")+'",endencode:"||'').toString().encodeHTML()+'"},split:{start:"';out+=(",end:");out+='",endencode:"||'').toString().encodeHTML();out+='"}},c=/$^/;function f(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}a.template=function(e,t,n){var i,r=(t=t||a.templateSettings).append?u.append:u.split,o=0,s=t.use||t.define?function i(r,e,o){return("string"==typeof e?e:e.toString()).replace(r.define||c,function(e,i,t,n){return 0===i.indexOf("def.")&&(i=i.substring(4)),i in o||(":"===t?(r.defineParams&&n.replace(r.defineParams,function(e,t,n){o[i]={arg:t,text:n}}),i in o||(o[i]=n)):new Function("def","def['"+i+"']="+n)(o)),""}).replace(r.use||c,function(e,t){r.useParams&&(t=t.replace(r.useParams,function(e,t,n,i){if(o[n]&&o[n].arg&&i){var r=(n+":"+i).replace(/'|\\/g,"_");return o.__exp=o.__exp||{},o.__exp[r]=o[n].text.replace(new RegExp("(^|[^\\w$])"+o[n].arg+"([^\\w$])","g"),"$1"+i+"$2"),t+"def.__exp['"+r+"']"}}));var n=new Function("def","return "+t)(o);return n?i(r,n,o):n})}(t,e,n||{}):e;s=("var out='"+(t.strip?s.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):s).replace(/'|\\/g,"\\$&").replace(t.interpolate||c,function(e,t){return r.start+f(t)+r.end}).replace(t.encode||c,function(e,t){return i=!0,r.start+f(t)+r.endencode}).replace(t.conditional||c,function(e,t){return t?"';if("+f(t)+"){out+='":"';}out+='"}).replace(t.conditionalElse||c,function(e,t){return t?"';}else if("+f(t)+"){out+='":"';}else{out+='"}).replace(t.iterate||c,function(e,t,n,i){if(!t)return"';} } out+='";o+=1,n=n||"value",i=i||"index",t=f(t);var r="arr"+o;return"';var "+r+"="+t+";if("+r+" && "+r+".length > 0){var "+n+","+i+"=-1,l"+o+"="+r+".length-1;while("+i+" 0){var "+n+";for( var "+i+" in "+r+"){ if (!"+r+".hasOwnProperty("+i+")) continue; "+n+"="+r+"["+i+"];out+='"}).replace(t.empty||c,function(e){return"';}}else{if(true){out+='"}).replace(t.evaluate||c,function(e,t){return"';"+f(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,"").replace(/(\s|;|\}|^|\{)out\+=''\+/g,"$1out+="),i&&t.selfcontained&&(s="String.prototype.encodeHTML=("+l.toString()+"());"+s);try{return new Function(t.varname,s)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+s),e}},a.compile=function(e,t){return a.template(e,null,t)}}(),function(e,t){"use strict";"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.returnExports=t()}(this,function(){var p,h,a=Array,e=a.prototype,l=Object,t=l.prototype,u=Function,n=u.prototype,v=String,i=v.prototype,y=Number,r=y.prototype,c=e.slice,o=e.splice,d=e.push,s=e.unshift,f=e.concat,g=e.join,m=n.call,b=n.apply,x=Math.max,w=Math.min,T=t.toString,C="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,_=Function.prototype.toString,E=/^\s*class /,S=function(e){try{var t=_.call(e).replace(/\/\/.*\n/g,"").replace(/\/\*[.\s\S]*\*\//g,"").replace(/\n/gm," ").replace(/ {2}/g," ");return E.test(t)}catch(e){return!1}},N=function(e){if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if(C)return function(e){try{return!S(e)&&(_.call(e),!0)}catch(e){return!1}}(e);if(S(e))return!1;var t=T.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t},D=RegExp.prototype.exec;p=function(e){return"object"==typeof e&&(C?function(e){try{return D.call(e),!0}catch(e){return!1}}(e):"[object RegExp]"===T.call(e))};var k=String.prototype.valueOf;h=function(e){return"string"==typeof e||"object"==typeof e&&(C?function(e){try{return k.call(e),!0}catch(e){return!1}}(e):"[object String]"===T.call(e))};var j,A,P=l.defineProperty&&function(){try{var e={};for(var t in l.defineProperty(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(e){return!1}}(),H=(j=t.hasOwnProperty,A=P?function(e,t,n,i){!i&&t in e||l.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:n})}:function(e,t,n,i){!i&&t in e||(e[t]=n)},function(e,t,n){for(var i in t)j.call(t,i)&&A(e,i,t[i],n)}),M=function(e){var t=typeof e;return null===e||"object"!==t&&"function"!==t},L=y.isNaN||function(e){return e!=e},O=function(e){var t=+e;return L(t)?t=0:0!==t&&t!==1/0&&t!==-1/0&&(t=(0>>0},q=function(){};H(n,{bind:function(t){var n=this;if(!N(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var i,r=c.call(arguments,1),e=x(0,n.length-r.length),o=[],s=0;s=i)throw new TypeError("reduce of empty array with no initial value")}for(;o>10|55296,1023&i|56320)}function i(){v()}var e,d,x,o,r,g,p,m,w,u,c,v,T,s,y,b,a,h,C,_="sizzle"+1*new Date,E=n.document,S=0,N=0,l=oe(),D=oe(),k=oe(),j=function(e,t){return e===t&&(c=!0),0},A={}.hasOwnProperty,t=[],P=t.pop,H=t.push,M=t.push,L=t.slice,O=function(e,t){for(var n=0,i=e.length;n+~]|"+F+")"+F+"*"),Y=new RegExp("="+F+"*([^\\]'\"]*?)"+F+"*\\]","g"),Q=new RegExp($),J=new RegExp("^"+q+"$"),V={ID:new RegExp("^#("+W+")"),CLASS:new RegExp("^\\.("+W+")"),TAG:new RegExp("^("+W.replace("w","w*")+")"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+F+"*(even|odd|(([+-]|)(\\d*)n|)"+F+"*(?:([+-]|)"+F+"*(\\d+)|))"+F+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+F+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+F+"*((?:-\\d)?\\d*)"+F+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,ee=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,te=/[+~]/,ne=/'|\\/g,ie=new RegExp("\\\\([\\da-f]{1,6}"+F+"?|("+F+")|.)","ig");try{M.apply(t=L.call(E.childNodes),E.childNodes),t[E.childNodes.length].nodeType}catch(e){M={apply:t.length?function(e,t){H.apply(e,L.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function re(e,t,n,i){var r,o,s,a,l,u,c,f,p,h;if((t?t.ownerDocument||t:E)!==T&&v(t),n=n||[],a=(t=t||T).nodeType,"string"!=typeof e||!e||1!==a&&9!==a&&11!==a)return n;if(!i&&y){if(11!==a&&(r=ee.exec(e)))if(s=r[1]){if(9===a){if(!(o=t.getElementById(s))||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(s))&&C(t,o)&&o.id===s)return n.push(o),n}else{if(r[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=r[3])&&d.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(d.qsa&&(!b||!b.test(e))){if(f=c=_,p=t,h=1!==a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){for(u=g(e),(c=t.getAttribute("id"))?f=c.replace(ne,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",l=u.length;l--;)u[l]=f+ge(u[l]);p=te.test(e)&&he(t.parentNode)||t,h=u.join(",")}if(h)try{return M.apply(n,p.querySelectorAll(h)),n}catch(e){}finally{c||t.removeAttribute("id")}}}return m(e.replace(z,"$1"),t,n,i)}function oe(){var i=[];return function e(t,n){return i.push(t+" ")>x.cacheLength&&delete e[i.shift()],e[t+" "]=n}}function se(e){return e[_]=!0,e}function ae(e){var t=T.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){for(var n=e.split("|"),i=e.length;i--;)x.attrHandle[n[i]]=t}function ue(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function ce(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function fe(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function pe(s){return se(function(o){return o=+o,se(function(e,t){for(var n,i=s([],e.length,o),r=i.length;r--;)e[n=i[r]]&&(e[n]=!(t[n]=e[n]))})})}function he(e){return e&&void 0!==e.getElementsByTagName&&e}for(e in d=re.support={},r=re.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},v=re.setDocument=function(e){var t,n,l=e?e.ownerDocument||e:E;return l!==T&&9===l.nodeType&&l.documentElement?(s=(T=l).documentElement,(n=l.defaultView)&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",i,!1):n.attachEvent&&n.attachEvent("onunload",i)),y=!r(l),d.attributes=ae(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ae(function(e){return e.appendChild(l.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=Z.test(l.getElementsByClassName),d.getById=ae(function(e){return s.appendChild(e).id=_,!l.getElementsByName||!l.getElementsByName(_).length}),d.getById?(x.find.ID=function(e,t){if(void 0!==t.getElementById&&y){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},x.filter.ID=function(e){var t=e.replace(ie,f);return function(e){return e.getAttribute("id")===t}}):(delete x.find.ID,x.filter.ID=function(e){var n=e.replace(ie,f);return function(e){var t=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}}),x.find.TAG=d.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[r++];)1===n.nodeType&&i.push(n);return i},x.find.CLASS=d.getElementsByClassName&&function(e,t){if(y)return t.getElementsByClassName(e)},a=[],b=[],(d.qsa=Z.test(l.querySelectorAll))&&(ae(function(e){s.appendChild(e).innerHTML="
",e.querySelectorAll("[msallowcapture^='']").length&&b.push("[*^$]="+F+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||b.push("\\["+F+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+_+"-]").length||b.push("~="),e.querySelectorAll(":checked").length||b.push(":checked"),e.querySelectorAll("a#"+_+"+*").length||b.push(".#.+[+~]")}),ae(function(e){var t=l.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&b.push("name"+F+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||b.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),b.push(",.*:")})),(d.matchesSelector=Z.test(h=s.matches||s.webkitMatchesSelector||s.mozMatchesSelector||s.oMatchesSelector||s.msMatchesSelector))&&ae(function(e){d.disconnectedMatch=h.call(e,"div"),h.call(e,"[s!='']:x"),a.push("!=",$)}),b=b.length&&new RegExp(b.join("|")),a=a.length&&new RegExp(a.join("|")),t=Z.test(s.compareDocumentPosition),C=t||Z.test(s.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return c=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===l||e.ownerDocument===E&&C(E,e)?-1:t===l||t.ownerDocument===E&&C(E,t)?1:u?O(u,e)-O(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return c=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o)return e===l?-1:t===l?1:r?-1:o?1:u?O(u,e)-O(u,t):0;if(r===o)return ue(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[i]===a[i];)i++;return i?ue(s[i],a[i]):s[i]===E?-1:a[i]===E?1:0},l):T},re.matches=function(e,t){return re(e,null,null,t)},re.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&v(e),t=t.replace(Y,"='$1']"),d.matchesSelector&&y&&(!a||!a.test(t))&&(!b||!b.test(t)))try{var n=h.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ie,f),e[3]=(e[3]||e[4]||e[5]||"").replace(ie,f),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||re.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&re.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Q.test(n)&&(t=g(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ie,f).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=l[e+" "];return t||(t=new RegExp("(^|"+F+")"+e+"("+F+"|$)"))&&l(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,i,r){return function(e){var t=re.attr(e,n);return null==t?"!="===i:!i||(t+="","="===i?t===r:"!="===i?t!==r:"^="===i?r&&0===t.indexOf(r):"*="===i?r&&-1(?:<\/\1>|)$/,x=/^.[^:#\[\.,]*$/;function w(e,n,i){if(C.isFunction(n))return C.grep(e,function(e,t){return!!n.call(e,t,e)!==i});if(n.nodeType)return C.grep(e,function(e){return e===n!==i});if("string"==typeof n){if(x.test(n))return C.filter(n,e,i);n=C.filter(n,e)}return C.grep(e,function(e){return 0<=C.inArray(e,n)!==i})}C.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?C.find.matchesSelector(i,e)?[i]:[]:C.find.matches(e,C.grep(t,function(e){return 1===e.nodeType}))},C.fn.extend({find:function(e){var t,n=[],i=this,r=i.length;if("string"!=typeof e)return this.pushStack(C(e).filter(function(){for(t=0;t)[^>]*|#([\w-]*))$/;(C.fn.init=function(e,t){var n,i;if(!e)return this;if("string"!=typeof e)return e.nodeType?(this.context=this[0]=e,this.length=1,this):C.isFunction(e)?void 0!==T.ready?T.ready(e):e(C):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),C.makeArray(e,this));if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:E.exec(e))||!n[1]&&t)return!t||t.jquery?(t||T).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:_,!0)),b.test(n[1])&&C.isPlainObject(t))for(n in t)C.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if((i=_.getElementById(n[2]))&&i.parentNode){if(i.id!==n[2])return T.find(e);this.length=1,this[0]=i}return this.context=_,this.selector=e,this}).prototype=C.fn,T=C(_);var S=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function D(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.extend({dir:function(e,t,n){for(var i=[],r=e[t];r&&9!==r.nodeType&&(void 0===n||1!==r.nodeType||!C(r).is(n));)1===r.nodeType&&i.push(r),r=r[t];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),C.fn.extend({has:function(e){var t,n=C(e,this),i=n.length;return this.filter(function(){for(t=0;t
a",v.leadingWhitespace=3===t.firstChild.nodeType,v.tbody=!t.getElementsByTagName("tbody").length,v.htmlSerialize=!!t.getElementsByTagName("link").length,v.html5Clone="<:nav>"!==_.createElement("nav").cloneNode(!0).outerHTML,e.type="checkbox",e.checked=!0,n.appendChild(e),v.appendChecked=e.checked,t.innerHTML="",v.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,n.appendChild(t),t.innerHTML="",v.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,v.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){v.noCloneEvent=!1}),t.cloneNode(!0).click()),null==v.deleteExpando){v.deleteExpando=!0;try{delete t.test}catch(e){v.deleteExpando=!1}}}(),function(){var e,t,n=_.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})t="on"+e,(v[e+"Bubbles"]=t in d)||(n.setAttribute(t,"t"),v[e+"Bubbles"]=!1===n.attributes[t].expando);n=null}();var Y=/^(?:input|select|textarea)$/i,Q=/^key/,J=/^(?:mouse|pointer|contextmenu)|click/,V=/^(?:focusinfocus|focusoutblur)$/,G=/^([^.]*)(?:\.(.+)|)$/;function K(){return!0}function Z(){return!1}function ee(){try{return _.activeElement}catch(e){}}function te(e){var t=ne.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}C.event={global:{},add:function(e,t,n,i,r){var o,s,a,l,u,c,f,p,h,d,g,m=C._data(e);if(m){for(n.handler&&(n=(l=n).handler,r=l.selector),n.guid||(n.guid=C.guid++),(s=m.events)||(s=m.events={}),(c=m.handle)||((c=m.handle=function(e){return typeof C===L||e&&C.event.triggered===e.type?void 0:C.event.dispatch.apply(c.elem,arguments)}).elem=e),a=(t=(t||"").match(j)||[""]).length;a--;)h=g=(o=G.exec(t[a])||[])[1],d=(o[2]||"").split(".").sort(),h&&(u=C.event.special[h]||{},h=(r?u.delegateType:u.bindType)||h,u=C.event.special[h]||{},f=C.extend({type:h,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&C.expr.match.needsContext.test(r),namespace:d.join(".")},l),(p=s[h])||((p=s[h]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(e,i,d,c)||(e.addEventListener?e.addEventListener(h,c,!1):e.attachEvent&&e.attachEvent("on"+h,c))),u.add&&(u.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),r?p.splice(p.delegateCount++,0,f):p.push(f),C.event.global[h]=!0);e=null}},remove:function(e,t,n,i,r){var o,s,a,l,u,c,f,p,h,d,g,m=C.hasData(e)&&C._data(e);if(m&&(c=m.events)){for(u=(t=(t||"").match(j)||[""]).length;u--;)if(h=g=(a=G.exec(t[u])||[])[1],d=(a[2]||"").split(".").sort(),h){for(f=C.event.special[h]||{},p=c[h=(i?f.delegateType:f.bindType)||h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=p.length;o--;)s=p[o],!r&&g!==s.origType||n&&n.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(p.splice(o,1),s.selector&&p.delegateCount--,f.remove&&f.remove.call(e,s));l&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,d,m.handle)||C.removeEvent(e,h,m.handle),delete c[h])}else for(h in c)C.event.remove(e,h+t[u],n,i,!0);C.isEmptyObject(c)&&(delete m.handle,C._removeData(e,"events"))}},trigger:function(e,t,n,i){var r,o,s,a,l,u,c,f=[n||_],p=m.call(e,"type")?e.type:e,h=m.call(e,"namespace")?e.namespace.split("."):[];if(s=u=n=n||_,3!==n.nodeType&&8!==n.nodeType&&!V.test(p+C.event.triggered)&&(0<=p.indexOf(".")&&(p=(h=p.split(".")).shift(),h.sort()),o=p.indexOf(":")<0&&"on"+p,(e=e[C.expando]?e:new C.Event(p,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=h.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:C.makeArray(t,[e]),l=C.event.special[p]||{},i||!l.trigger||!1!==l.trigger.apply(n,t))){if(!i&&!l.noBubble&&!C.isWindow(n)){for(a=l.delegateType||p,V.test(a+p)||(s=s.parentNode);s;s=s.parentNode)f.push(s),u=s;u===(n.ownerDocument||_)&&f.push(u.defaultView||u.parentWindow||d)}for(c=0;(s=f[c++])&&!e.isPropagationStopped();)e.type=1]","i"),oe=/^\s+/,se=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ae=/<([\w:]+)/,le=/\s*$/g,ge={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:v.htmlSerialize?[0,"",""]:[1,"X
","
"]},me=te(_).appendChild(_.createElement("div"));function ve(e,t){var n,i,r=0,o=typeof e.getElementsByTagName!==L?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==L?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(i=n[r]);r++)!t||C.nodeName(i,t)?o.push(i):C.merge(o,ve(i,t));return void 0===t||t&&C.nodeName(e,t)?C.merge([e],o):o}function ye(e){X.test(e.type)&&(e.defaultChecked=e.checked)}function be(e,t){return C.nodeName(e,"table")&&C.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function xe(e){return e.type=(null!==C.find.attr(e,"type"))+"/"+e.type,e}function we(e){var t=he.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Te(e,t){for(var n,i=0;null!=(n=e[i]);i++)C._data(n,"globalEval",!t||C._data(t[i],"globalEval"))}function Ce(e,t){if(1===t.nodeType&&C.hasData(e)){var n,i,r,o=C._data(e),s=C._data(t,o),a=o.events;if(a)for(n in delete s.handle,s.events={},a)for(i=0,r=a[n].length;i")?o=e.cloneNode(!0):(me.innerHTML=e.outerHTML,me.removeChild(o=me.firstChild)),!(v.noCloneEvent&&v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(i=ve(o),a=ve(e),s=0;null!=(r=a[s]);++s)i[s]&&_e(r,i[s]);if(t)if(n)for(a=a||ve(e),i=i||ve(o),s=0;null!=(r=a[s]);s++)Ce(r,i[s]);else Ce(e,o);return 0<(i=ve(o,"script")).length&&Te(i,!l&&ve(e,"script")),i=a=r=null,o},buildFragment:function(e,t,n,i){for(var r,o,s,a,l,u,c,f=e.length,p=te(t),h=[],d=0;d")+c[2],r=c[0];r--;)a=a.lastChild;if(!v.leadingWhitespace&&oe.test(o)&&h.push(t.createTextNode(oe.exec(o)[0])),!v.tbody)for(r=(o="table"!==l||le.test(o)?""!==c[1]||le.test(o)?0:a:a.firstChild)&&o.childNodes.length;r--;)C.nodeName(u=o.childNodes[r],"tbody")&&!u.childNodes.length&&o.removeChild(u);for(C.merge(h,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=p.lastChild}else h.push(t.createTextNode(o));for(a&&p.removeChild(a),v.appendChecked||C.grep(ve(h,"input"),ye),d=0;o=h[d++];)if((!i||-1===C.inArray(o,i))&&(s=C.contains(o.ownerDocument,o),a=ve(p.appendChild(o),"script"),s&&Te(a),n))for(r=0;o=a[r++];)pe.test(o.type||"")&&n.push(o);return a=null,p},cleanData:function(e,t){for(var n,i,r,o,s=0,a=C.expando,l=C.cache,u=v.deleteExpando,c=C.event.special;null!=(n=e[s]);s++)if((t||C.acceptData(n))&&(o=(r=n[a])&&l[r])){if(o.events)for(i in o.events)c[i]?C.event.remove(n,i):C.removeEvent(n,i,o.handle);l[r]&&(delete l[r],u?delete n[a]:typeof n.removeAttribute!==L?n.removeAttribute(a):n[a]=null,f.push(r))}}}),C.fn.extend({text:function(e){return U(this,function(e){return void 0===e?C.text(this):this.empty().append((this[0]&&this[0].ownerDocument||_).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||be(this,e).appendChild(e)})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=be(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,i=e?C.filter(e,this):this,r=0;null!=(n=i[r]);r++)t||1!==n.nodeType||C.cleanData(ve(n)),n.parentNode&&(t&&C.contains(n.ownerDocument,n)&&Te(ve(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&C.cleanData(ve(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&C.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return U(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(ie,""):void 0;if("string"==typeof e&&!ce.test(e)&&(v.htmlSerialize||!re.test(e))&&(v.leadingWhitespace||!oe.test(e))&&!ge[(ae.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(se,"<$1>");try{for(;n")).appendTo(t.documentElement))[0].contentWindow||Ee[0].contentDocument).document).write(),t.close(),n=De(e,t),Ee.detach()),Ne[e]=n),n}v.shrinkWrapBlocks=function(){return null!=Se?Se:(Se=!1,(t=_.getElementsByTagName("body")[0])&&t.style?(e=_.createElement("div"),(n=_.createElement("div")).style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",t.appendChild(n).appendChild(e),typeof e.style.zoom!==L&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(_.createElement("div")).style.width="5px",Se=3!==e.offsetWidth),t.removeChild(n),Se):void 0);var e,t,n};var je,Ae,Pe,He,Me,Le,Oe,Ie,Fe,We=/^margin/,qe=new RegExp("^("+B+")(?!px)[a-z%]+$","i"),Re=/^(top|right|bottom|left)$/;function $e(t,n){return{get:function(){var e=t();if(null!=e){if(!e)return(this.get=n).apply(this,arguments);delete this.get}}}}function Be(){var e,t,n,i;(t=_.getElementsByTagName("body")[0])&&t.style&&(e=_.createElement("div"),(n=_.createElement("div")).style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",t.appendChild(n).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",Le=Oe=!1,Fe=!0,d.getComputedStyle&&(Le="1%"!==(d.getComputedStyle(e,null)||{}).top,Oe="4px"===(d.getComputedStyle(e,null)||{width:"4px"}).width,(i=e.appendChild(_.createElement("div"))).style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",e.style.width="1px",Fe=!parseFloat((d.getComputedStyle(i,null)||{}).marginRight),e.removeChild(i)),e.innerHTML="
t
",(i=e.getElementsByTagName("td"))[0].style.cssText="margin:0;border:0;padding:0;display:none",(Ie=0===i[0].offsetHeight)&&(i[0].style.display="",i[1].style.display="none",Ie=0===i[0].offsetHeight),t.removeChild(n))}d.getComputedStyle?(je=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):d.getComputedStyle(e,null)},Ae=function(e,t,n){var i,r,o,s,a=e.style;return s=(n=n||je(e))?n.getPropertyValue(t)||n[t]:void 0,n&&(""!==s||C.contains(e.ownerDocument,e)||(s=C.style(e,t)),qe.test(s)&&We.test(t)&&(i=a.width,r=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=r,a.maxWidth=o)),void 0===s?s:s+""}):_.documentElement.currentStyle&&(je=function(e){return e.currentStyle},Ae=function(e,t,n){var i,r,o,s,a=e.style;return null==(s=(n=n||je(e))?n[t]:void 0)&&a&&a[t]&&(s=a[t]),qe.test(s)&&!Re.test(t)&&(i=a.left,(o=(r=e.runtimeStyle)&&r.left)&&(r.left=e.currentStyle.left),a.left="fontSize"===t?"1em":s,s=a.pixelLeft+"px",a.left=i,o&&(r.left=o)),void 0===s?s:s+""||"auto"}),(Pe=_.createElement("div")).innerHTML="
a",(He=(Me=Pe.getElementsByTagName("a")[0])&&Me.style)&&(He.cssText="float:left;opacity:.5",v.opacity="0.5"===He.opacity,v.cssFloat=!!He.cssFloat,Pe.style.backgroundClip="content-box",Pe.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===Pe.style.backgroundClip,v.boxSizing=""===He.boxSizing||""===He.MozBoxSizing||""===He.WebkitBoxSizing,C.extend(v,{reliableHiddenOffsets:function(){return null==Ie&&Be(),Ie},boxSizingReliable:function(){return null==Oe&&Be(),Oe},pixelPosition:function(){return null==Le&&Be(),Le},reliableMarginRight:function(){return null==Fe&&Be(),Fe}})),C.swap=function(e,t,n,i){var r,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];for(o in r=n.apply(e,i||[]),t)e.style[o]=s[o];return r};var ze=/alpha\([^)]*\)/i,Ue=/opacity\s*=\s*([^)]*)/,Xe=/^(none|table(?!-c[ea]).+)/,Ye=new RegExp("^("+B+")(.*)$","i"),Qe=new RegExp("^([+-])=("+B+")","i"),Je={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","O","Moz","ms"];function Ke(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=t,r=Ge.length;r--;)if((t=Ge[r]+n)in e)return t;return i}function Ze(e,t){for(var n,i,r,o=[],s=0,a=e.length;s
a",ut=at.getElementsByTagName("a")[0],ct=(lt=_.createElement("select")).appendChild(_.createElement("option")),st=at.getElementsByTagName("input")[0],ut.style.cssText="top:1px",v.getSetAttribute="t"!==at.className,v.style=/top/.test(ut.getAttribute("style")),v.hrefNormalized="/a"===ut.getAttribute("href"),v.checkOn=!!st.value,v.optSelected=ct.selected,v.enctype=!!_.createElement("form").enctype,lt.disabled=!0,v.optDisabled=!ct.disabled,(st=_.createElement("input")).setAttribute("value",""),v.input=""===st.getAttribute("value"),st.value="t",st.setAttribute("type","radio"),v.radioValue="t"===st.value;var xt=/\r/g;C.fn.extend({val:function(n){var i,e,r,t=this[0];return arguments.length?(r=C.isFunction(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=r?n.call(this,e,C(this).val()):n)?t="":"number"==typeof t?t+="":C.isArray(t)&&(t=C.map(t,function(e){return null==e?"":e+""})),(i=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in i&&void 0!==i.set(this,t,"value")||(this.value=t))})):t?(i=C.valHooks[t.type]||C.valHooks[t.nodeName.toLowerCase()])&&"get"in i&&void 0!==(e=i.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:C.trim(C.text(e))}},select:{get:function(e){for(var t,n,i=e.options,r=e.selectedIndex,o="select-one"===e.type||r<0,s=o?null:[],a=o?r+1:i.length,l=r<0?a:o?r:0;l").append(C.parseHTML(e)).find(i):e)}).complete(n&&function(e,t){s.each(n,r||[e.responseText,t,e])}),this},C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){C.fn[t]=function(e){return this.on(t,e)}}),C.expr.filters.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length};var cn=d.document.documentElement;function fn(e){return C.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}C.offset={setOffset:function(e,t,n){var i,r,o,s,a,l,u=C.css(e,"position"),c=C(e),f={};"static"===u&&(e.style.position="relative"),a=c.offset(),o=C.css(e,"top"),l=C.css(e,"left"),r=("absolute"===u||"fixed"===u)&&-1").outerWidth(1).jquery||D.each(["Width","Height"],function(e,n){var r="Width"===n?["Left","Right"]:["Top","Bottom"],i=n.toLowerCase(),o={innerWidth:D.fn.innerWidth,innerHeight:D.fn.innerHeight,outerWidth:D.fn.outerWidth,outerHeight:D.fn.outerHeight};function s(e,t,n,i){return D.each(r,function(){t-=parseFloat(D.css(e,"padding"+this))||0,n&&(t-=parseFloat(D.css(e,"border"+this+"Width"))||0),i&&(t-=parseFloat(D.css(e,"margin"+this))||0)}),t}D.fn["inner"+n]=function(e){return void 0===e?o["inner"+n].call(this):this.each(function(){D(this).css(i,s(this,e)+"px")})},D.fn["outer"+n]=function(e,t){return"number"!=typeof e?o["outer"+n].call(this,e):this.each(function(){D(this).css(i,s(this,e,!0,t)+"px")})}}),D.fn.addBack||(D.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),D("").data("a-b","a").removeData("a-b").data("a-b")&&(D.fn.removeData=(t=D.fn.removeData,function(e){return arguments.length?t.call(this,D.camelCase(e)):t.call(this)})),D.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),D.fn.extend({focus:(i=D.fn.focus,function(t,n){return"number"==typeof t?this.each(function(){var e=this;setTimeout(function(){D(e).focus(),n&&n.call(e)},t)}):i.apply(this,arguments)}),disableSelection:(n="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.bind(n+".ui-disableSelection",function(e){e.preventDefault()})}),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(e){if(void 0!==e)return this.css("zIndex",e);if(this.length)for(var t,n,i=D(this[0]);i.length&&i[0]!==document;){if(("absolute"===(t=i.css("position"))||"relative"===t||"fixed"===t)&&(n=parseInt(i.css("zIndex"),10),!isNaN(n)&&0!==n))return n;i=i.parent()}return 0}}),D.ui.plugin={add:function(e,t,n){var i,r=D.ui[e].prototype;for(i in n)r.plugins[i]=r.plugins[i]||[],r.plugins[i].push([t,n[i]])},call:function(e,t,n,i){var r,o=e.plugins[t];if(o&&(i||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(r=0;r",options:{disabled:!1,create:null},_createWidget:function(e,t){t=D(t||this.defaultElement||this)[0],this.element=D(t),this.uuid=a++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=D(),this.hoverable=D(),this.focusable=D(),t!==this&&(D.data(t,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===t&&this.destroy()}}),this.document=D(t.style?t.ownerDocument:t.document||t),this.window=D(this.document[0].defaultView||this.document[0].parentWindow)),this.options=D.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:D.noop,_getCreateEventData:D.noop,_create:D.noop,_init:D.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(D.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:D.noop,widget:function(){return this.element},option:function(e,t){var n,i,r,o=e;if(0===arguments.length)return D.widget.extend({},this.options);if("string"==typeof e)if(o={},e=(n=e.split(".")).shift(),n.length){for(i=o[e]=D.widget.extend({},this.options[e]),r=0;r=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}});!function(){D.ui=D.ui||{};var r,T,C=Math.max,_=Math.abs,E=Math.round,i=/left|center|right/,o=/top|center|bottom/,s=/[\+\-]\d+(\.[\d]+)?%?/,a=/^\w+/,l=/%$/,t=D.fn.position;function S(e,t,n){return[parseFloat(e[0])*(l.test(e[0])?t/100:1),parseFloat(e[1])*(l.test(e[1])?n/100:1)]}function N(e,t){return parseInt(D.css(e,t),10)||0}D.position={scrollbarWidth:function(){if(void 0!==r)return r;var e,t,n=D("
"),i=n.children()[0];return D("body").append(n),e=i.offsetWidth,n.css("overflow","scroll"),e===(t=i.offsetWidth)&&(t=n[0].clientWidth),n.remove(),r=e-t},getScrollInfo:function(e){var t=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),n=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),i="scroll"===t||"auto"===t&&e.widthC(_(i),_(r))?o.important="horizontal":o.important="vertical",f.using.call(this,e,o)}),s.offset(D.extend(u,{using:e}))})},D.ui.position={fit:{left:function(e,t){var n,i=t.within,r=i.isWindow?i.scrollLeft:i.offset.left,o=i.width,s=e.left-t.collisionPosition.marginLeft,a=r-s,l=s+t.collisionWidth-o-r;t.collisionWidth>o?0o?0").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var t=this.document[0];if(this.handleElement.is(e.target))try{t.activeElement&&"body"!==t.activeElement.nodeName.toLowerCase()&&D(t.activeElement).blur()}catch(e){}},_mouseStart:function(e){var t=this.options;return this.helper=this._createHelper(e),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),D.ui.ddmanager&&(D.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0n[2]&&(l=n[2]+this.offset.click.left),e.pageY-this.offset.click.top>n[3]&&(u=n[3]+this.offset.click.top)),s.grid&&(r=s.grid[1]?this.originalPageY+Math.round((u-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,u=n?r-this.offset.click.top>=n[1]||r-this.offset.click.top>n[3]?r:r-this.offset.click.top>=n[1]?r-s.grid[1]:r+s.grid[1]:r,o=s.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,l=n?o-this.offset.click.left>=n[0]||o-this.offset.click.left>n[2]?o:o-this.offset.click.left>=n[0]?o-s.grid[0]:o+s.grid[0]:o),"y"===s.axis&&(l=this.originalPageX),"x"===s.axis&&(u=this.originalPageY)),{top:u-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:a?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:a?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(e,t,n){return n=n||this._uiHash(),D.ui.plugin.call(this,e,[t,n,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),n.offset=this.positionAbs),D.Widget.prototype._trigger.call(this,e,t,n)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),D.ui.plugin.add("draggable","connectToSortable",{start:function(t,e,n){var i=D.extend({},e,{item:n.element});n.sortables=[],D(n.options.connectToSortable).each(function(){var e=D(this).sortable("instance");e&&!e.options.disabled&&(n.sortables.push(e),e.refreshPositions(),e._trigger("activate",t,i))})},stop:function(t,e,n){var i=D.extend({},e,{item:n.element});n.cancelHelperRemoval=!1,D.each(n.sortables,function(){var e=this;e.isOver?(e.isOver=0,n.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,i))})},drag:function(n,i,r){D.each(r.sortables,function(){var e=!1,t=this;t.positionAbs=r.positionAbs,t.helperProportions=r.helperProportions,t.offset.click=r.offset.click,t._intersectsWith(t.containerCache)&&(e=!0,D.each(r.sortables,function(){return this.positionAbs=r.positionAbs,this.helperProportions=r.helperProportions,this.offset.click=r.offset.click,this!==t&&this._intersectsWith(this.containerCache)&&D.contains(t.element[0],this.element[0])&&(e=!1),e})),e?(t.isOver||(t.isOver=1,r._parent=i.helper.parent(),t.currentItem=i.helper.appendTo(t.element).data("ui-sortable-item",!0),t.options._helper=t.options.helper,t.options.helper=function(){return i.helper[0]},n.target=t.currentItem[0],t._mouseCapture(n,!0),t._mouseStart(n,!0,!0),t.offset.click.top=r.offset.click.top,t.offset.click.left=r.offset.click.left,t.offset.parent.left-=r.offset.parent.left-t.offset.parent.left,t.offset.parent.top-=r.offset.parent.top-t.offset.parent.top,r._trigger("toSortable",n),r.dropped=t.element,D.each(r.sortables,function(){this.refreshPositions()}),r.currentItem=r.element,t.fromOutside=r),t.currentItem&&(t._mouseDrag(n),i.position=t.position)):t.isOver&&(t.isOver=0,t.cancelHelperRemoval=!0,t.options._revert=t.options.revert,t.options.revert=!1,t._trigger("out",n,t._uiHash(t)),t._mouseStop(n,!0),t.options.revert=t.options._revert,t.options.helper=t.options._helper,t.placeholder&&t.placeholder.remove(),i.helper.appendTo(r._parent),r._refreshOffsets(n),i.position=r._generatePosition(n,!0),r._trigger("fromSortable",n),r.dropped=!1,D.each(r.sortables,function(){this.refreshPositions()}))})}}),D.ui.plugin.add("draggable","cursor",{start:function(e,t,n){var i=D("body"),r=n.options;i.css("cursor")&&(r._cursor=i.css("cursor")),i.css("cursor",r.cursor)},stop:function(e,t,n){var i=n.options;i._cursor&&D("body").css("cursor",i._cursor)}}),D.ui.plugin.add("draggable","opacity",{start:function(e,t,n){var i=D(t.helper),r=n.options;i.css("opacity")&&(r._opacity=i.css("opacity")),i.css("opacity",r.opacity)},stop:function(e,t,n){var i=n.options;i._opacity&&D(t.helper).css("opacity",i._opacity)}}),D.ui.plugin.add("draggable","scroll",{start:function(e,t,n){n.scrollParentNotHidden||(n.scrollParentNotHidden=n.helper.scrollParent(!1)),n.scrollParentNotHidden[0]!==n.document[0]&&"HTML"!==n.scrollParentNotHidden[0].tagName&&(n.overflowOffset=n.scrollParentNotHidden.offset())},drag:function(e,t,n){var i=n.options,r=!1,o=n.scrollParentNotHidden[0],s=n.document[0];o!==s&&"HTML"!==o.tagName?(i.axis&&"x"===i.axis||(n.overflowOffset.top+o.offsetHeight-e.pageY")[0],x=c.each,b.style.cssText="background-color:rgba(1,1,1,.5)",y.rgba=-1o.mod/2?i+=o.mod:i-r>o.mod/2&&(i-=o.mod)),u[n]=H((r-i)*s+i,t)))}),this[t](u)},blend:function(e){if(1===this._rgba[3])return this;var t=this._rgba.slice(),n=t.pop(),i=g(e)._rgba;return g(c.map(t,function(e,t){return(1-n)*i[t]+n*e}))},toRgbaString:function(){var e="rgba(",t=c.map(this._rgba,function(e,t){return null==e?2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),t={width:n.width(),height:n.height()},r=document.activeElement;try{r.id}catch(e){r=document.body}return n.wrap(e),n[0]!==r&&!D.contains(n[0],r)||D(r).focus(),e=n.parent(),"static"===n.css("position")?(e.css({position:"relative"}),n.css({position:"relative"})):(D.extend(i,{position:n.css("position"),zIndex:n.css("z-index")}),D.each(["top","left","bottom","right"],function(e,t){i[t]=n.css(t),isNaN(parseInt(i[t],10))&&(i[t]="auto")}),n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),n.css(t),e.css(i).show()},removeWrapper:function(e){var t=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),e[0]!==t&&!D.contains(e[0],t)||D(t).focus()),e},setTransition:function(i,e,r,o){return o=o||{},D.each(e,function(e,t){var n=i.cssUnit(t);0r&&0!==r||!1===i.call(e,o))&&jQuery.timer.remove(e,n,i)}a.timerID=i.timerID,s[n][i.timerID]||(s[n][i.timerID]=window.setInterval(a,t)),this.global.push(e)}},remove:function(e,t,n){var i,r=jQuery.data(e,this.dataKey);if(r){if(t){if(r[t]){if(n)n.timerID&&(window.clearInterval(r[t][n.timerID]),delete r[t][n.timerID]);else for(var n in r[t])window.clearInterval(r[t][n]),delete r[t][n];for(i in r[t])break;i||(i=null,delete r[t])}}else for(t in r)this.remove(e,t,n);for(i in r)break;i||jQuery.removeData(e,this.dataKey)}}}}),jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(e,t){jQuery.timer.remove(t)})}),function(){"use strict";var a={version:"1.0.1-nanoui",templateSettings:{evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{:([\s\S]+?)\}\}/g,encode:/\{\{>([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,conditional:/\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,conditionalElse:/\{\{else\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,props:/\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,empty:/\{\{empty\}\}/g,varname:"data, config, helper",strip:!0,append:!0,selfcontained:!1},template:void 0,compile:void 0};function l(){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},e=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(e,function(e){return t[e]||e}):this}}"undefined"!=typeof module&&module.exports?module.exports=a:"function"==typeof define&&define.amd?define(function(){return a}):function(){return this||(0,eval)("this")}().doT=a,String.prototype.encodeHTML=l();var u={append:{start:"'+(",end:")+'",endencode:"||'').toString().encodeHTML()+'"},split:{start:"';out+=(",end:");out+='",endencode:"||'').toString().encodeHTML();out+='"}},c=/$^/;function f(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}a.template=function(e,t,n){var i,r=(t=t||a.templateSettings).append?u.append:u.split,o=0,s=t.use||t.define?function i(r,e,o){return("string"==typeof e?e:e.toString()).replace(r.define||c,function(e,i,t,n){return 0===i.indexOf("def.")&&(i=i.substring(4)),i in o||(":"===t?(r.defineParams&&n.replace(r.defineParams,function(e,t,n){o[i]={arg:t,text:n}}),i in o||(o[i]=n)):new Function("def","def['"+i+"']="+n)(o)),""}).replace(r.use||c,function(e,t){r.useParams&&(t=t.replace(r.useParams,function(e,t,n,i){if(o[n]&&o[n].arg&&i){var r=(n+":"+i).replace(/'|\\/g,"_");return o.__exp=o.__exp||{},o.__exp[r]=o[n].text.replace(new RegExp("(^|[^\\w$])"+o[n].arg+"([^\\w$])","g"),"$1"+i+"$2"),t+"def.__exp['"+r+"']"}}));var n=new Function("def","return "+t)(o);return n?i(r,n,o):n})}(t,e,n||{}):e;s=("var out='"+(t.strip?s.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):s).replace(/'|\\/g,"\\$&").replace(t.interpolate||c,function(e,t){return r.start+f(t)+r.end}).replace(t.encode||c,function(e,t){return i=!0,r.start+f(t)+r.endencode}).replace(t.conditional||c,function(e,t){return t?"';if("+f(t)+"){out+='":"';}out+='"}).replace(t.conditionalElse||c,function(e,t){return t?"';}else if("+f(t)+"){out+='":"';}else{out+='"}).replace(t.iterate||c,function(e,t,n,i){if(!t)return"';} } out+='";o+=1,n=n||"value",i=i||"index",t=f(t);var r="arr"+o;return"';var "+r+"="+t+";if("+r+" && "+r+".length > 0){var "+n+","+i+"=-1,l"+o+"="+r+".length-1;while("+i+" 0){var "+n+";for( var "+i+" in "+r+"){ if (!"+r+".hasOwnProperty("+i+")) continue; "+n+"="+r+"["+i+"];out+='"}).replace(t.empty||c,function(e){return"';}}else{if(true){out+='"}).replace(t.evaluate||c,function(e,t){return"';"+f(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,"").replace(/(\s|;|\}|^|\{)out\+=''\+/g,"$1out+="),i&&t.selfcontained&&(s="String.prototype.encodeHTML=("+l.toString()+"());"+s);try{return new Function(t.varname,s)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+s),e}},a.compile=function(e,t){return a.template(e,null,t)}}(),function(e,t){"use strict";"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.returnExports=t()}(this,function(){function n(e){try{var t=S.call(e).replace(/\/\/.*\n/g,"").replace(/\/\*[.\s\S]*\*\//g,"").replace(/\n/gm," ").replace(/ {2}/g," ");return N.test(t)}catch(e){return!1}}function p(e){if(!e)return!1;if("function"!=typeof e&&"object"!=typeof e)return!1;if(E)return function(e){try{return!n(e)&&(S.call(e),!0)}catch(e){return!1}}(e);if(n(e))return!1;var t=_.call(e);return"[object Function]"===t||"[object GeneratorFunction]"===t}var h,d,l=Array,e=l.prototype,a=Object,t=a.prototype,u=Function,i=u.prototype,v=String,r=v.prototype,y=Number,o=y.prototype,c=e.slice,s=e.splice,g=e.push,f=e.unshift,m=e.concat,b=e.join,x=i.call,w=i.apply,T=Math.max,C=Math.min,_=t.toString,E="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,S=Function.prototype.toString,N=/^\s*class /,D=RegExp.prototype.exec;h=function(e){return"object"==typeof e&&(E?function(e){try{return D.call(e),!0}catch(e){return!1}}(e):"[object RegExp]"===_.call(e))};var k=String.prototype.valueOf;d=function(e){return"string"==typeof e||"object"==typeof e&&(E?function(e){try{return k.call(e),!0}catch(e){return!1}}(e):"[object String]"===_.call(e))};function j(e){var t=typeof e;return null===e||"object"!=t&&"function"!=t}function A(){}var P,H,M=a.defineProperty&&function(){try{var e={};for(var t in a.defineProperty(e,"x",{enumerable:!1,value:e}),e)return!1;return e.x===e}catch(e){return!1}}(),L=(P=t.hasOwnProperty,H=M?function(e,t,n,i){!i&&t in e||a.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:n})}:function(e,t,n,i){!i&&t in e||(e[t]=n)},function(e,t,n){for(var i in t)P.call(t,i)&&H(e,i,t[i],n)}),O=y.isNaN||function(e){return e!=e},I=function(e){var t=+e;return O(t)?t=0:0!==t&&t!==1/0&&t!==-1/0&&(t=(0>>0};L(i,{bind:function(t){var n=this;if(!p(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var i,r=c.call(arguments,1),e=T(0,n.length-r.length),o=[],s=0;s=r)throw new TypeError("reduce of empty array with no initial value")}for(;sError name: "+e.name+"
Error Message: "+e.message)}t.hasOwnProperty("data")||(a&&a.hasOwnProperty("data")?t.data=a.data:t.data={}),n?l(t):a=t}(e)},addBeforeUpdateCallback:function(e,t){r[e]=t},addBeforeUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addBeforeUpdateCallback(t,e[t])},removeBeforeUpdateCallback:function(e){r.hasOwnProperty(e)&&delete r[e]},executeBeforeUpdateCallbacks:function(e){return t(r,e)},addAfterUpdateCallback:function(e,t){o[e]=t},addAfterUpdateCallbacks:function(e){for(var t in e)e.hasOwnProperty(t)&&NanoStateManager.addAfterUpdateCallback(t,e[t])},removeAfterUpdateCallback:function(e){o.hasOwnProperty(e)&&delete o[e]},executeAfterUpdateCallbacks:function(e){return t(o,e)},addState:function(e){e instanceof NanoStateClass?e.key?i[e.key]=e:reportError("ERROR: Attempted to add a state with an invalid stateKey"):reportError("ERROR: Attempted to add a state which is not instanceof NanoStateClass")},setCurrentState:function(e){if(void 0===e||!e)return reportError("ERROR: No state key was passed!"),!1;if(!i.hasOwnProperty(e))return reportError("ERROR: Attempted to set a current state which does not exist: "+e),!1;var t=s;return s=i[e],null!=t&&t.onRemove(s),s.onAdd(t),!0},getCurrentState:function(){return s},getData:function(){return a}}}(),NanoBaseCallbacks=function(){var a=!0,t={},n={status:function(n){var e;return 2==n.config.status?(e="good",$(".linkActive").removeClass("inactive")):(e=1==n.config.status?"average":"bad",$(".linkActive").addClass("inactive")),$(".statusicon").removeClass("good bad average").addClass(e),$(".linkActive").stopTime("linkPending"),$(".linkActive").removeClass("linkPending"),$(".linkActive").off("click").on("click",function(e){e.preventDefault();var t=$(this).data("href");null!=t&&a&&(a=!1,$("body").oneTime(300,"enableClick",function(){a=!0}),2==n.config.status&&$(this).oneTime(300,"linkPending",function(){$(this).addClass("linkPending")}),window.location.href=t)}),n},nanomap:function(e){return $(".mapIcon").off("mouseenter mouseleave").on("mouseenter",function(e){$("#uiMapTooltip").html($(this).children(".tooltip").html()).show().stopTime().oneTime(5e3,"hideTooltip",function(){$(this).fadeOut(500)})}),$(".zoomLink").off("click").on("click",function(e){e.preventDefault();var t=$(this).data("zoomLevel"),n=$("#uiMap"),a=n.width()*t,r=n.height()*t;n.css({zoom:t,left:"50%",top:"50%",marginLeft:"-"+Math.floor(a/2)+"px",marginTop:"-"+Math.floor(r/2)+"px"})}),$("#uiMapImage").attr("src",e.config.map+"_nanomap_z"+e.config.mapZLevel+".png"),e}};return{addCallbacks:function(){NanoStateManager.addBeforeUpdateCallbacks(t),NanoStateManager.addAfterUpdateCallbacks(n)},removeCallbacks:function(){for(var e in t)t.hasOwnProperty(e)&&NanoStateManager.removeBeforeUpdateCallback(e);for(var e in n)n.hasOwnProperty(e)&&NanoStateManager.removeAfterUpdateCallback(e)}}}(),NanoBaseHelpers=function(){var t={syndicateMode:function(){return $(".mainBG").css("background","url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDAwIDIwMCIgb3BhY2l0eT0iLjI1Ij4NCgk8cG9seWdvbiBwb2ludHM9IjI1MCwwIDE1MCwwIDEwMCw1MCI+PC9wb2x5Z29uPg0KCTxwb2x5Z29uIHBvaW50cz0iMTAwLDUwIDE1MCwyNSAyMDAsNjUgMjUwLDE1MCI+PC9wb2x5Z29uPg0KCTxwb2x5Z29uIHBvaW50cz0iMjUwLDE1MCAyMDAsOTAgMTAwLDIwMCI+PC9wb2x5Z29uPg0KPC9zdmc+') no-repeat fixed center/70% 70%, linear-gradient(to bottom, #8f1414 0%, #4B0A0A 100%) no-repeat fixed center/100% 100%;"),$("#uiTitleFluff").css("background-image","url('uiTitleFluff-Syndicate.png')"),$("#uiTitleFluff").css("background-position","50% 50%"),$("#uiTitleFluff").css("background-repeat","no-repeat"),""},combine:function(e,t){return e&&t?e.concat(t):e||t},dump:function(e){return JSON.stringify(e)},link:function(e,t,n,a,r,o){var i="",s="noIcon";void 0!==t&&t&&(i='
',s="hasIcon"),void 0!==r&&r||(r="link");var l="";void 0!==o&&o&&(l='id="'+o+'"');var c=NanoTransition.allocID(l+"_"+e.toString().replace(/[^a-z0-9_]/gi,"_")+"_"+t);return void 0!==a&&a?'