diff --git a/.gitignore b/.gitignore
index 626ef179a5..b1cb02811c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -198,4 +198,3 @@ tools/MapAtmosFixer/MapAtmosFixer/obj/x86/Debug/MapAtmosFixer.csproj.CoreCompile
#GitHub Atom
.atom-build.json
-cfg/admin.txt
diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt
index 9f0f2c50c0..6e6bd7f7ca 100644
--- a/SQL/database_changelog.txt
+++ b/SQL/database_changelog.txt
@@ -1,16 +1,50 @@
Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255.
-The latest database version is 4.0; The query to update the schema revision table is:
+The latest database version is 4.1; The query to update the schema revision table is:
-INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 0);
+INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 1);
or
-INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 0);
+INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 1);
In any query remember to add a prefix to the table names if you use one.
----------------------------------------------------
-12 November 2017, by Jordie0608
+Version 4.1, 3 February 2018, by Jordie0608
+Modified tables 'admin', 'admin_log' and 'admin_rank', removing unnecessary columns and adding support for excluding rights flags from admin ranks.
+This change was made to enable use of sql-based admin loading.
+To import your existing admins and ranks run the included script 'admin_import_2018-02-03.py', see the file for use instructions.
+Legacy file-based admin loading is still supported, if you want to continue using it the script doesn't need to be run.
+
+ALTER TABLE `admin`
+ CHANGE COLUMN `rank` `rank` VARCHAR(32) NOT NULL AFTER `ckey`,
+ DROP COLUMN `id`,
+ DROP COLUMN `level`,
+ DROP COLUMN `flags`,
+ DROP COLUMN `email`,
+ DROP PRIMARY KEY,
+ ADD PRIMARY KEY (`ckey`);
+
+ALTER TABLE `admin_log`
+ CHANGE COLUMN `datetime` `datetime` DATETIME NOT NULL AFTER `id`,
+ CHANGE COLUMN `adminckey` `adminckey` VARCHAR(32) NOT NULL AFTER `datetime`,
+ CHANGE COLUMN `adminip` `adminip` INT(10) UNSIGNED NOT NULL AFTER `adminckey`,
+ ADD COLUMN `operation` ENUM('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL AFTER `adminip`,
+ CHANGE COLUMN `log` `log` VARCHAR(1000) NOT NULL AFTER `operation`;
+
+ALTER TABLE `admin_ranks`
+ CHANGE COLUMN `rank` `rank` VARCHAR(32) NOT NULL FIRST,
+ CHANGE COLUMN `flags` `flags` SMALLINT UNSIGNED NOT NULL AFTER `rank`,
+ ADD COLUMN `exclude_flags` SMALLINT UNSIGNED NOT NULL AFTER `flags`,
+ ADD COLUMN `can_edit_flags` SMALLINT(5) UNSIGNED NOT NULL AFTER `exclude_flags`,
+ DROP COLUMN `id`,
+ DROP PRIMARY KEY,
+ ADD PRIMARY KEY (`rank`);
+
+
+----------------------------------------------------
+
+Version 4.0, 12 November 2017, by Jordie0608
Modified feedback table to use json, a python script is used to migrate data to this new format.
See the file 'feedback_conversion_2017-11-12.py' for instructions on how to use the script.
@@ -29,7 +63,7 @@ CREATE TABLE `feedback` (
----------------------------------------------------
-28 August 2017, by MrStonedOne
+Version 3.4, 28 August 2017, by MrStonedOne
Modified table 'messages', adding a deleted column and editing all indexes to include it
ALTER TABLE `messages`
@@ -43,7 +77,7 @@ ADD INDEX `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`, `delete
----------------------------------------------------
-25 August 2017, by Jordie0608
+Version 3.3, 25 August 2017, by Jordie0608
Modified tables 'connection_log', 'legacy_population', 'library', 'messages' and 'player' to add additional 'round_id' tracking in various forms and 'server_ip' and 'server_port' to the table 'messages'.
@@ -55,7 +89,7 @@ ALTER TABLE `player` ADD COLUMN `firstseen_round_id` INT(11) UNSIGNED NOT NULL A
----------------------------------------------------
-18 August 2017, by Cyberboss and nfreader
+Version 3.2, 18 August 2017, by Cyberboss and nfreader
Modified table 'death', adding the columns `last_words` and 'suicide'.
@@ -67,7 +101,7 @@ Remember to add a prefix to the table name if you use them.
----------------------------------------------------
-20th July 2017, by Shadowlight213
+Version 3.1, 20th July 2017, by Shadowlight213
Added role_time table to track time spent playing departments.
Also, added flags column to the player table.
@@ -79,7 +113,7 @@ Remember to add a prefix to the table name if you use them.
----------------------------------------------------
-28 June 2017, by oranges
+Version 3.0, 28 June 2017, by oranges
Added schema_revision to store the current db revision, why start at 3.0?
because:
@@ -319,7 +353,7 @@ Remember to add prefix to the table name if you use them.
Modified table 'memo', removing 'id' column and making 'ckey' primary.
-ALTER TABLE `memo` DROP COLUMN `id`, DROP PRIMARY KEY, ADD PRIMARY KEY (`ckey`)
+ALTER TABLE `memo` DROP COLUMN `id`, DROP PRIMARY KEY, ADD PRIMARY KEY (`ckey`)
Remember to add prefix to the table name if you use them.
diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql
index 8ec2fcfc41..ddd31a7e80 100644
--- a/SQL/tgstation_schema.sql
+++ b/SQL/tgstation_schema.sql
@@ -17,13 +17,9 @@ DROP TABLE IF EXISTS `admin`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
- `rank` varchar(32) NOT NULL DEFAULT 'Administrator',
- `level` int(2) NOT NULL DEFAULT '0',
- `flags` int(16) NOT NULL DEFAULT '0',
- `email` varchar(45) DEFAULT NULL,
- PRIMARY KEY (`id`)
+ `rank` varchar(32) NOT NULL,
+ PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -38,8 +34,9 @@ CREATE TABLE `admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`adminckey` varchar(32) NOT NULL,
- `adminip` varchar(18) NOT NULL,
- `log` text NOT NULL,
+ `adminip` int(10) unsigned NOT NULL,
+ `operation` enum('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL,
+ `log` varchar(1000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -52,11 +49,12 @@ DROP TABLE IF EXISTS `admin_ranks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `admin_ranks` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `rank` varchar(40) NOT NULL,
- `flags` int(16) NOT NULL DEFAULT '0',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+ `rank` varchar(32) NOT NULL,
+ `flags` smallint(5) unsigned NOT NULL,
+ `exclude_flags` smallint(5) unsigned NOT NULL,
+ `can_edit_flags` smallint(5) unsigned NOT NULL,
+ PRIMARY KEY (`rank`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -271,11 +269,11 @@ DROP TABLE IF EXISTS `role_time`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `role_time`
+CREATE TABLE `role_time`
( `ckey` VARCHAR(32) NOT NULL ,
`job` VARCHAR(32) NOT NULL ,
`minutes` INT UNSIGNED NOT NULL,
- PRIMARY KEY (`ckey`, `job`)
+ PRIMARY KEY (`ckey`, `job`)
) ENGINE = InnoDB;
--
diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql
index 8bc768967d..01e0ed150b 100644
--- a/SQL/tgstation_schema_prefixed.sql
+++ b/SQL/tgstation_schema_prefixed.sql
@@ -17,13 +17,9 @@ DROP TABLE IF EXISTS `SS13_admin`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_admin` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
- `rank` varchar(32) NOT NULL DEFAULT 'Administrator',
- `level` int(2) NOT NULL DEFAULT '0',
- `flags` int(16) NOT NULL DEFAULT '0',
- `email` varchar(45) DEFAULT NULL,
- PRIMARY KEY (`id`)
+ `rank` varchar(32) NOT NULL,
+ PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -38,8 +34,9 @@ CREATE TABLE `SS13_admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
`adminckey` varchar(32) NOT NULL,
- `adminip` varchar(18) NOT NULL,
- `log` text NOT NULL,
+ `adminip` int(10) unsigned NOT NULL,
+ `operation` enum('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL,
+ `log` varchar(1000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -52,11 +49,12 @@ DROP TABLE IF EXISTS `SS13_admin_ranks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `SS13_admin_ranks` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `rank` varchar(40) NOT NULL,
- `flags` int(16) NOT NULL DEFAULT '0',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+ `rank` varchar(32) NOT NULL,
+ `flags` smallint(5) unsigned NOT NULL,
+ `exclude_flags` smallint(5) unsigned NOT NULL,
+ `can_edit_flags` smallint(5) unsigned NOT NULL,
+ PRIMARY KEY (`rank`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -271,11 +269,11 @@ DROP TABLE IF EXISTS `SS13_role_time`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
-CREATE TABLE `SS13_role_time`
+CREATE TABLE `SS13_role_time`
( `ckey` VARCHAR(32) NOT NULL ,
`job` VARCHAR(32) NOT NULL ,
`minutes` INT UNSIGNED NOT NULL,
- PRIMARY KEY (`ckey`, `job`)
+ PRIMARY KEY (`ckey`, `job`)
) ENGINE = InnoDB;
--
diff --git a/_maps/cit_map_files/BoxStation/BoxStation.dmm b/_maps/cit_map_files/BoxStation/BoxStation.dmm
index 279f479f10..92f72fd46a 100644
--- a/_maps/cit_map_files/BoxStation/BoxStation.dmm
+++ b/_maps/cit_map_files/BoxStation/BoxStation.dmm
@@ -37291,6 +37291,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/structure/chair/comfy/black,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"bPz" = (
@@ -37317,13 +37318,15 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPA" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 1
+ },
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/structure/table/glass,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPB" = (
@@ -37413,10 +37416,10 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPI" = (
+/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPJ" = (
@@ -38354,9 +38357,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/obj/machinery/light{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bRZ" = (
@@ -40062,9 +40062,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/obj/machinery/light{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bWn" = (
@@ -41536,9 +41533,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/obj/machinery/light{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bZX" = (
@@ -43967,18 +43961,12 @@
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"cgl" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 2;
+ external_pressure_bound = 120;
+ name = "killroom vent"
},
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio0";
- name = "containment blast door"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/engine,
+/turf/open/floor/circuit/killroom,
/area/science/xenobiology)
"cgm" = (
/obj/structure/cable{
@@ -44376,21 +44364,9 @@
/turf/closed/wall,
/area/maintenance/starboard/aft)
"chs" = (
-/obj/machinery/door/window/northleft{
- base_state = "right";
- dir = 8;
- icon_state = "right";
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio0";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/turf/open/floor/circuit/killroom,
/area/science/xenobiology)
"chv" = (
/obj/structure/cable{
@@ -47996,8 +47972,8 @@
/area/space/nearstation)
"csk" = (
/obj/structure/disposalpipe/segment,
-/turf/closed/wall/r_wall,
-/area/science/xenobiology)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"csl" = (
/obj/structure/transit_tube/curved{
dir = 4
@@ -50012,6 +49988,15 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"cyA" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"cyC" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -52386,6 +52371,13 @@
dir = 6
},
/area/security/brig)
+"dkZ" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"dAS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -52425,6 +52417,24 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"eeP" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
+"eiu" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ target_temperature = 80;
+ dir = 2;
+ on = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"eiQ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
@@ -52539,26 +52549,6 @@
/obj/machinery/bookbinder,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"fmO" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/reinforced,
-/obj/machinery/button/door{
- id = "xenobio7";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"fmW" = (
/obj/effect/turf_decal/loading_area/white,
/obj/effect/turf_decal/stripes/white/corner{
@@ -52580,6 +52570,13 @@
},
/turf/open/floor/plasteel/hydrofloor,
/area/hallway/secondary/service)
+"foQ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"fsC" = (
/obj/effect/turf_decal/stripes/line,
/obj/structure/cable{
@@ -52763,6 +52760,11 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
+"hfn" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/sign/warning/biohazard,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"hgP" = (
/obj/structure/closet/bombcloset/security,
/turf/open/floor/plasteel/showroomfloor,
@@ -52886,6 +52888,20 @@
dir = 4
},
/area/security/brig)
+"iRn" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 2;
+ external_pressure_bound = 140;
+ pressure_checks = 0;
+ name = "killroom vent"
+ },
+/obj/machinery/camera{
+ c_tag = "Xenobiology Kill Room";
+ dir = 4;
+ network = list("ss13","rd")
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"iZz" = (
/obj/structure/table/wood/poker,
/turf/open/floor/wood,
@@ -52959,6 +52975,9 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
+"jxR" = (
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"jyX" = (
/obj/structure/sign/warning/securearea,
/turf/closed/wall/r_wall,
@@ -53112,6 +53131,20 @@
icon_state = "wood-broken7"
},
/area/maintenance/bar)
+"kGu" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"kHd" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/science/xenobiology)
+"kHN" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"kNw" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -53158,6 +53191,11 @@
dir = 10
},
/area/security/brig)
+"lqu" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"lxM" = (
/obj/structure/sign/poster/random{
pixel_y = -32
@@ -53234,6 +53272,12 @@
},
/turf/open/floor/noslip,
/area/crew_quarters/cryopod)
+"mmW" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"mnl" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -53307,18 +53351,6 @@
/obj/structure/falsewall,
/turf/open/floor/plating,
/area/maintenance/bar)
-"mHe" = (
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio0";
- name = "containment blast door"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/engine,
-/area/science/xenobiology)
"mLm" = (
/obj/structure/cable{
icon_state = "1-8"
@@ -53382,26 +53414,11 @@
dir = 8
},
/area/security/brig)
-"nvr" = (
-/obj/structure/table/reinforced,
-/obj/machinery/button/door{
- id = "xenobio0";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light,
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
+"nuC" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"nwx" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -53511,6 +53528,15 @@
},
/turf/closed/wall,
/area/maintenance/bar)
+"ock" = (
+/obj/structure/rack,
+/obj/item/clothing/shoes/winterboots,
+/obj/item/clothing/suit/hooded/wintercoat,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"ody" = (
/obj/effect/spawner/lootdrop/keg,
/turf/open/floor/wood{
@@ -53642,6 +53668,12 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
+"plc" = (
+/obj/structure/sign/poster/official/safety_internals{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"plH" = (
/obj/machinery/door/window/brigdoor/security/cell{
dir = 4;
@@ -53832,6 +53864,18 @@
"qWq" = (
/turf/closed/wall,
/area/space)
+"rgF" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/item/folder/white,
+/obj/item/pen,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"rhJ" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/effect/decal/cleanable/blood/old,
@@ -53892,6 +53936,17 @@
/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/engine/engineering)
+"rPW" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research{
+ name = "Kill Chamber";
+ req_access_txt = "55"
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/science/xenobiology)
"rWu" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
@@ -53952,25 +54007,6 @@
/obj/item/shovel/spade,
/turf/open/floor/plasteel/hydrofloor,
/area/hallway/secondary/service)
-"syV" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"sAz" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -96729,7 +96765,7 @@ bDb
bDb
bDb
bDb
-bDb
+cNW
cNW
cQB
czY
@@ -96982,11 +97018,11 @@ bJN
bRT
bEm
bEm
-bJN
-bRT
-bEm
-bEm
bDb
+iRn
+eeP
+bDb
+aaa
cNW
cQB
czY
@@ -97225,7 +97261,7 @@ bJJ
bKY
bMi
bNo
-bOx
+foQ
bPA
bJN
bRU
@@ -97239,12 +97275,12 @@ bJN
bRU
bEm
bEm
-bJN
-bRU
-bEm
-bEm
bDb
-cNW
+jxR
+mmW
+kHd
+aaa
+cOT
cQB
czY
cOT
@@ -97496,12 +97532,12 @@ bJN
bRU
bEm
cBz
-bJN
-bRU
-bEm
-cBz
bDb
-cNW
+jxR
+mmW
+kHd
+aaa
+cOT
cQB
czY
cOT
@@ -97740,7 +97776,7 @@ bLa
bMi
bNo
bPy
-syV
+bPA
bJN
bRW
bTb
@@ -97753,11 +97789,11 @@ bJN
bZV
caV
cbS
-bJN
+bDb
cgl
chs
-mHe
bDb
+aaa
cNW
cQB
czY
@@ -98010,11 +98046,11 @@ bVi
bRV
bTa
cbR
-bVi
-bRV
-bTa
-nvr
bDb
+hfn
+rPW
+bDb
+aaa
cNW
cBN
czY
@@ -98267,12 +98303,12 @@ bZa
bMi
bMi
bRZ
-bZa
-bMi
-bMi
-bRZ
-bDb
-cNW
+plc
+kGu
+cyA
+kHd
+aaf
+cOT
cQB
cAa
cOT
@@ -98523,13 +98559,13 @@ bUf
bTc
bRX
bTc
-bUf
-bTc
-bRX
-bTc
cbT
+kHN
+kHN
+dkZ
+lqu
csk
-cko
+nuC
czU
czZ
cOT
@@ -98781,12 +98817,12 @@ bZb
bRZ
bMi
bMi
-bZb
-bRZ
-bMi
-bMi
-bDb
-cNW
+ock
+eiu
+rgF
+kHd
+aaf
+cOT
cgm
czY
cOT
@@ -99038,11 +99074,11 @@ bVi
bZW
bTd
bUg
-bVi
-fmO
-bTd
-bUg
bDb
+bDb
+bDb
+bDb
+aaa
cNW
cgm
czY
@@ -99295,11 +99331,11 @@ bJN
bZX
caW
cbU
-bJN
-bWn
-bXg
-bYh
bDb
+aaf
+aaf
+aaa
+aaa
cNW
cgm
czY
@@ -99552,12 +99588,12 @@ bJN
bEm
bEm
bRU
-bJN
-bEm
-bEm
-bRU
bDb
-cNW
+aaf
+aaa
+aaa
+aaa
+cOT
cgm
czY
cOT
@@ -99809,12 +99845,12 @@ bJN
bEm
bEm
bRU
-bJN
-bEm
-bEm
-bRU
bDb
-cNW
+aaf
+aaa
+aaa
+aaa
+cOT
cgm
czY
cOT
@@ -100066,12 +100102,12 @@ bJN
bEm
bEm
bUi
-bJN
-bEm
-bEm
-bUi
bDb
-cNW
+aaf
+aaf
+aaa
+aaa
+cOT
cgm
czY
cOT
@@ -100324,10 +100360,10 @@ bDb
bDb
bDb
bDb
-bDb
-bDb
-bDb
-bDb
+cNW
+cNW
+cNW
+cNW
cNW
czX
cAc
diff --git a/_maps/cit_map_files/Deltastation/DeltaStation2.dmm b/_maps/cit_map_files/Deltastation/DeltaStation2.dmm
index 70f7862e09..a95d74ee74 100644
--- a/_maps/cit_map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/cit_map_files/Deltastation/DeltaStation2.dmm
@@ -67542,9 +67542,7 @@
name = "xenobiology camera";
network = list("ss13","xeno","rd")
},
-/turf/open/floor/plasteel/vault{
- dir = 5
- },
+/turf/open/floor/plasteel/vault/killroom,
/area/science/xenobiology)
"cNj" = (
/obj/structure/closet/crate{
@@ -69718,6 +69716,7 @@
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSg" = (
@@ -69728,7 +69727,7 @@
icon_state = "2-8"
},
/obj/machinery/door/airlock/research/glass{
- name = "Xenobiology Isolation Pin";
+ name = "Xenobiology Kill Room";
req_access_txt = "47"
},
/obj/effect/turf_decal/stripes/line{
@@ -70518,19 +70517,13 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 1;
+ min_temperature = 80;
+ on = 1;
+ target_temperature = 80
},
+/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTS" = (
@@ -72226,6 +72219,9 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cXm" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 8
+ },
/obj/machinery/status_display{
pixel_x = 32
},
@@ -100786,6 +100782,12 @@
dir = 8
},
/area/science/misc_lab)
+"gPz" = (
+/obj/machinery/atmospherics/pipe/simple/general/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
"gQS" = (
/turf/open/floor/plasteel/white/side{
dir = 9
@@ -100927,10 +100929,21 @@
"jKb" = (
/turf/open/space,
/area/space/nearstation)
+"jRX" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 2;
+ external_pressure_bound = 120;
+ name = "server vent"
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"kwx" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/whitepurple/corner,
/area/science/research)
+"kwP" = (
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
"kyo" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -101036,6 +101049,21 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
/area/science/research/abandoned)
+"npb" = (
+/obj/machinery/atmospherics/pipe/simple/general/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
+"nGW" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 2;
+ external_pressure_bound = 140;
+ name = "killroom vent";
+ pressure_checks = 0
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"nJG" = (
/obj/structure/lattice,
/turf/open/space/basic,
@@ -101070,6 +101098,9 @@
dir = 1
},
/area/science/circuit)
+"pqQ" = (
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"psi" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/bodycontainer/morgue{
@@ -101191,12 +101222,11 @@
dir = 5
},
/area/medical/morgue)
-"vyI" = (
-/obj/machinery/status_display{
- pixel_x = 32
+"vOd" = (
+/obj/machinery/atmospherics/pipe/manifold/general/hidden{
+ dir = 8
},
-/obj/structure/reagent_dispensers/watertank/high,
-/turf/open/floor/circuit/green,
+/turf/open/floor/plasteel/vault/killroom,
/area/science/xenobiology)
"wei" = (
/obj/effect/turf_decal/stripes/line,
@@ -132544,9 +132574,9 @@ cHA
cjp
cKl
cLI
-cNd
-cNd
-cNd
+kwP
+kwP
+kwP
cNc
cTQ
cVI
@@ -132801,9 +132831,9 @@ cHB
cjp
cKj
cLI
-cNd
-cNd
-cNd
+kwP
+nGW
+vOd
cSf
cTR
cVP
@@ -133059,8 +133089,8 @@ caE
cKm
cLI
cNi
-cNd
-cNd
+pqQ
+gPz
cSg
cTS
cVQ
@@ -133315,9 +133345,9 @@ cHB
cjp
cKk
cLI
-cNd
-cNd
-cNd
+kwP
+jRX
+npb
cSh
cTT
cVR
@@ -133572,9 +133602,9 @@ cHA
ceb
cKk
cLI
-cNd
-cNd
-cNd
+kwP
+kwP
+kwP
cNc
cTU
cVS
@@ -133837,7 +133867,7 @@ cTV
cVT
cXm
cZb
-vyI
+cXm
dcu
ddV
cMY
diff --git a/_maps/cit_map_files/MetaStation/MetaStation.dmm b/_maps/cit_map_files/MetaStation/MetaStation.dmm
index b158c0e3b4..74cdbe936c 100644
--- a/_maps/cit_map_files/MetaStation/MetaStation.dmm
+++ b/_maps/cit_map_files/MetaStation/MetaStation.dmm
@@ -35104,6 +35104,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
"bvU" = (
@@ -40974,8 +40977,11 @@
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
"bIv" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
+ },
/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"bIw" = (
/obj/machinery/light,
/obj/machinery/camera{
@@ -71575,7 +71581,7 @@
"cTT" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"cUH" = (
/obj/structure/table/optable,
/turf/open/floor/plasteel/white,
@@ -72192,6 +72198,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
/obj/machinery/light/small{
dir = 1
},
@@ -72201,14 +72210,15 @@
/obj/structure/disposalpipe/segment{
dir = 10
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"daS" = (
/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/maintenance/department/science/xenobiology)
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"daW" = (
/obj/machinery/button/door{
id = "engpa";
@@ -72343,10 +72353,8 @@
"dbv" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light/small,
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/maintenance/department/science/xenobiology)
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"dbE" = (
/obj/machinery/plantgenes,
/obj/effect/turf_decal/stripes/line{
@@ -72753,18 +72761,15 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcm" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/computer/camera_advanced/xenobio,
/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
+ dir = 9
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
@@ -72788,6 +72793,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
+/obj/machinery/computer/camera_advanced/xenobio,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
@@ -72857,6 +72863,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -72871,6 +72880,9 @@
/area/science/xenobiology)
"dcx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -72948,13 +72960,18 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcJ" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/item/extinguisher{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/obj/item/extinguisher,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
-/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcK" = (
@@ -73380,8 +73397,11 @@
},
/obj/structure/chair,
/obj/item/cigbutt,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"ddy" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -73389,8 +73409,9 @@
/area/maintenance/department/science/xenobiology)
"ddz" = (
/obj/effect/spawner/structure/window/reinforced,
-/turf/closed/wall/r_wall,
-/area/maintenance/department/science/xenobiology)
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"ddA" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor,
@@ -73400,15 +73421,15 @@
opacity = 0;
req_access_txt = "55"
},
-/turf/closed/wall/r_wall,
-/area/maintenance/department/science/xenobiology)
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"ddC" = (
/obj/structure/disposalpipe/trunk{
dir = 1
},
/obj/structure/disposaloutlet,
/turf/open/floor/plating/airless,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"ddE" = (
/obj/effect/landmark/start/cook,
/obj/machinery/holopad,
@@ -74831,6 +74852,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
/obj/machinery/door/airlock/research{
glass = 1;
name = "Slime Euthanization Chamber";
@@ -74841,7 +74865,7 @@
dir = 4
},
/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"dmr" = (
/obj/machinery/door/airlock/research{
glass = 1;
@@ -74853,7 +74877,7 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
+/area/science/xenobiology)
"dmD" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
@@ -76142,6 +76166,15 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"dYv" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1;
+ external_pressure_bound = 140;
+ name = "server vent";
+ pressure_checks = 0
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"dZD" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -76257,6 +76290,9 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
/area/engine/engineering)
+"ffK" = (
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"fjy" = (
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -76303,6 +76339,14 @@
/obj/machinery/libraryscanner,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"gha" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 1;
+ external_pressure_bound = 120;
+ name = "server vent"
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"gix" = (
/obj/structure/disposalpipe/segment,
/obj/structure/cable/yellow{
@@ -76455,6 +76499,15 @@
},
/turf/open/floor/plating/airless,
/area/engine/engineering)
+"jwP" = (
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Kill Chamber";
+ dir = 1;
+ network = list("ss13","rd","xeno");
+ start_active = 1
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"jwW" = (
/turf/closed/wall/mineral/plastitanium,
/area/crew_quarters/fitness/recreation)
@@ -76485,10 +76538,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
-"jzw" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/maintenance/department/science/xenobiology)
"jFx" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -76905,6 +76954,15 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"pPA" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 1;
+ name = "euthanization chamber freezer";
+ on = 1;
+ target_temperature = 80
+ },
+/turf/open/floor/plating,
+/area/science/xenobiology)
"pSX" = (
/obj/machinery/door/airlock/external{
name = "Auxiliary Escape Airlock"
@@ -110259,7 +110317,7 @@ cRi
cRi
cRi
daP
-cTA
+pPA
dlV
aaa
aaa
@@ -110516,10 +110574,10 @@ daF
daJ
cRi
bvT
-dlV
-dlV
-dlV
-dlV
+cRi
+cRi
+cRi
+cRi
aaa
aai
aaa
@@ -110773,10 +110831,10 @@ cSn
cSn
cRi
dmq
-dlV
-ddj
-ddj
-dlV
+cRi
+ffK
+ffK
+cRi
aaf
aag
aaa
@@ -111031,9 +111089,9 @@ cSn
cRi
ddx
ddz
-ddj
-ddj
-jzw
+dYv
+ffK
+cRe
aaa
aaa
aaa
@@ -111545,9 +111603,9 @@ daK
cRi
bIv
ddz
-ddj
-ddj
-jzw
+gha
+ffK
+cRe
aaa
aaf
aaa
@@ -111801,10 +111859,10 @@ cSn
daN
cRi
dmr
-dlV
-ddj
-ddj
-dlV
+cRi
+ffK
+jwP
+cRi
aaa
aag
aaa
@@ -112058,10 +112116,10 @@ daI
daM
cRi
cTA
-dlV
-dlV
-dlV
-dlV
+cRi
+cRi
+cRi
+cRi
aaf
aag
aaa
diff --git a/_maps/cit_map_files/PubbyStation/PubbyStation.dmm b/_maps/cit_map_files/PubbyStation/PubbyStation.dmm
index 6bf52ab60a..b21ac7ff8c 100644
--- a/_maps/cit_map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/cit_map_files/PubbyStation/PubbyStation.dmm
@@ -12686,7 +12686,6 @@
/area/storage/primary)
"aGk" = (
/obj/machinery/vending/boozeomat{
- products = list(/obj/item/reagent_containers/food/drinks/bottle/rum = 1, /obj/item/reagent_containers/food/drinks/bottle/wine = 1, /obj/item/reagent_containers/food/drinks/ale = 1, /obj/item/reagent_containers/food/drinks/drinkingglass = 6, /obj/item/reagent_containers/food/drinks/ice = 1, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4);
req_access_txt = "20"
},
/turf/open/floor/plasteel/vault{
@@ -27811,6 +27810,9 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"brQ" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 8
+ },
/obj/machinery/camera{
c_tag = "Xenobiology Port";
dir = 8;
@@ -28602,11 +28604,11 @@
/turf/open/floor/plating,
/area/science/xenobiology)
"btD" = (
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/science/xenobiology)
"btE" = (
/obj/effect/decal/remains/xeno,
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/science/xenobiology)
"btF" = (
/obj/structure/chair{
@@ -29227,7 +29229,12 @@
/obj/machinery/light/small{
dir = 4
},
-/turf/open/floor/plating,
+/obj/machinery/camera{
+ c_tag = "Xenobiology Kill Room";
+ dir = 8;
+ network = list("ss13","rd")
+ },
+/turf/open/floor/plating/airless,
/area/science/xenobiology)
"bva" = (
/turf/closed/wall,
@@ -31294,22 +31301,16 @@
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzi" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/item/extinguisher{
+ pixel_x = 4;
+ pixel_y = 3
},
-/obj/structure/table/glass,
/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
+/obj/structure/table/glass,
+/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzj" = (
+/obj/structure/reagent_dispensers/watertank,
/obj/machinery/requests_console{
department = "Science";
departmentType = 2;
@@ -31317,7 +31318,6 @@
pixel_x = 32;
receive_ore_updates = 1
},
-/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzk" = (
@@ -33793,8 +33793,7 @@
dir = 1
},
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ pixel_y = 28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/landmark/blobstart,
@@ -35454,8 +35453,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ pixel_y = 28
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 1
@@ -36332,8 +36330,7 @@
/area/medical/medbay/central)
"bKw" = (
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ pixel_y = 28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -49831,7 +49828,6 @@
/area/maintenance/department/engine)
"cBk" = (
/obj/machinery/vending/boozeomat{
- products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, /obj/item/reagent_containers/food/drinks/bottle/absinthe = 1, /obj/item/reagent_containers/food/drinks/bottle/limejuice = 1, /obj/item/reagent_containers/food/drinks/bottle/cream = 1, /obj/item/reagent_containers/food/drinks/soda_cans/tonic = 1, /obj/item/reagent_containers/food/drinks/drinkingglass = 10, /obj/item/reagent_containers/food/drinks/ice = 3, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6, /obj/item/reagent_containers/food/drinks/flask = 1);
req_access_txt = "0"
},
/turf/closed/wall,
@@ -50435,6 +50431,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"uPm" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"vpU" = (
/turf/open/floor/plasteel/darkpurple,
/area/crew_quarters/cryopod)
@@ -93281,7 +93283,7 @@ bkE
aht
bnd
boh
-bpn
+uPm
bqx
brQ
btr
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index fd936f5205..a6cf3c8240 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -2,6 +2,33 @@
"aaa" = (
/turf/open/space/basic,
/area/space)
+"aab" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"aac" = (
+/obj/effect/landmark/start/scientist,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"aad" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aae" = (
/obj/effect/landmark/carpspawn,
/turf/open/space,
@@ -234,6 +261,13 @@
},
/turf/open/floor/plasteel/barber,
/area/security/prison)
+"aaR" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aaS" = (
/obj/structure/grille,
/obj/structure/lattice,
@@ -347,6 +381,40 @@
/obj/machinery/vending/security,
/turf/open/floor/plasteel/showroomfloor,
/area/security/main)
+"abm" = (
+/obj/structure/window/reinforced,
+/obj/structure/table/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ id = "xenobio8";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"abn" = (
+/obj/structure/window/reinforced,
+/obj/structure/table/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/button/door{
+ id = "xenobio7";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"abo" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -468,6 +536,33 @@
},
/turf/open/floor/plasteel/freezer,
/area/security/prison)
+"abH" = (
+/obj/structure/window/reinforced,
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "xenobio6";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"abI" = (
+/obj/structure/sign/poster/official/safety_internals{
+ pixel_x = -32
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"abJ" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"abK" = (
/obj/structure/chair/stool,
/obj/machinery/light/small{
@@ -519,6 +614,15 @@
"abO" = (
/turf/open/floor/plasteel/showroomfloor,
/area/security/main)
+"abP" = (
+/obj/structure/rack,
+/obj/item/clothing/shoes/winterboots,
+/obj/item/clothing/suit/hooded/wintercoat,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"abQ" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/window/southleft{
@@ -743,10 +847,27 @@
/obj/structure/closet/secure_closet/hos,
/turf/open/floor/carpet,
/area/crew_quarters/heads/hos)
+"aco" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 2;
+ external_pressure_bound = 140;
+ pressure_checks = 0;
+ name = "killroom vent"
+ },
+/obj/machinery/camera{
+ c_tag = "Xenobiology Kill Room";
+ dir = 4;
+ network = list("ss13","rd")
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"acp" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/showroomfloor,
/area/security/main)
+"acq" = (
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"acr" = (
/obj/structure/chair/comfy/black,
/obj/effect/landmark/start/head_of_security,
@@ -778,6 +899,14 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
+"acw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 2;
+ external_pressure_bound = 120;
+ name = "killroom vent"
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"acx" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -1203,6 +1332,11 @@
},
/turf/open/floor/wood,
/area/crew_quarters/theatre)
+"adr" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/sign/warning/biohazard,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"ads" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -1812,6 +1946,12 @@
"aeE" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/pod_3)
+"aeF" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"aeG" = (
/obj/structure/cable,
/obj/machinery/power/solar{
@@ -2364,6 +2504,17 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/storage/eva)
+"afQ" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ target_temperature = 80;
+ dir = 2;
+ on = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"afR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/spawner/structure/window/reinforced,
@@ -2438,6 +2589,19 @@
},
/turf/open/floor/plating,
/area/security/main)
+"agd" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 5
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
+"age" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"agf" = (
/obj/structure/table,
/obj/item/stack/sheet/metal,
@@ -2523,6 +2687,11 @@
"agn" = (
/turf/closed/wall/r_wall,
/area/security/warden)
+"ago" = (
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"agp" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -2583,6 +2752,17 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"agv" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research{
+ name = "Kill Chamber";
+ req_access_txt = "55"
+ },
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/science/xenobiology)
"agw" = (
/obj/structure/table,
/obj/machinery/syndicatebomb/training,
@@ -3008,6 +3188,15 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"ahw" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"ahx" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -3233,6 +3422,13 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"ahR" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"ahS" = (
/obj/structure/cable{
icon_state = "1-8"
@@ -3638,6 +3834,18 @@
/obj/machinery/light,
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"aiN" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ dir = 9
+ },
+/obj/structure/table,
+/obj/item/folder/white,
+/obj/item/pen,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aiO" = (
/obj/structure/window/reinforced{
dir = 4
@@ -3929,6 +4137,10 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/brig)
+"ajC" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"ajD" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -3950,6 +4162,11 @@
dir = 8
},
/area/security/brig)
+"ajG" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"ajH" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
@@ -4086,6 +4303,15 @@
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
+"ajX" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"ajY" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/plating,
+/area/maintenance/starboard/aft)
"ajZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external{
@@ -37286,13 +37512,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"bPy" = (
-/obj/effect/landmark/start/scientist,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bPz" = (
/obj/structure/table/glass,
/obj/item/storage/box/beakers{
@@ -37316,16 +37535,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"bPA" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"bPB" = (
/obj/structure/table/glass,
/obj/item/paper_bin{
@@ -37412,13 +37621,6 @@
/obj/item/clothing/glasses/science,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"bPI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/reagent_dispensers/watertank/high,
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"bPJ" = (
/obj/structure/table/glass,
/obj/item/stack/sheet/mineral/plasma{
@@ -38339,26 +38541,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"bRY" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/button/door{
- id = "xenobio8";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"bRZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -40047,26 +40229,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/engine,
/area/science/xenobiology)
-"bWm" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/reinforced,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/button/door{
- id = "xenobio7";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"bWn" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -41521,26 +41683,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/engine,
/area/science/xenobiology)
-"bZW" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/reinforced,
-/obj/machinery/button/door{
- id = "xenobio6";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"bZX" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -43966,20 +44108,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cgl" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio0";
- name = "containment blast door"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/engine,
-/area/science/xenobiology)
"cgm" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -44375,23 +44503,6 @@
},
/turf/closed/wall,
/area/maintenance/starboard/aft)
-"chs" = (
-/obj/machinery/door/window/northleft{
- base_state = "right";
- dir = 8;
- icon_state = "right";
- name = "Containment Pen";
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio0";
- name = "containment blast door"
- },
-/turf/open/floor/engine,
-/area/science/xenobiology)
"chv" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -47994,10 +48105,6 @@
},
/turf/open/space,
/area/space/nearstation)
-"csk" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall/r_wall,
-/area/science/xenobiology)
"csl" = (
/obj/structure/transit_tube/curved{
dir = 4
@@ -52386,37 +52493,6 @@
dir = 6
},
/area/security/brig)
-"dnf" = (
-/obj/structure/cable,
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/machinery/door/poddoor/preopen{
- id = "xenobio0";
- name = "containment blast door"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/engine,
-/area/science/xenobiology)
-"dos" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"dAS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -52519,26 +52595,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
-"ezw" = (
-/obj/structure/window/reinforced,
-/obj/structure/table/reinforced,
-/obj/machinery/button/door{
- id = "xenobio7";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"eBn" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
@@ -54338,26 +54394,6 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/science/circuit)
-"vDd" = (
-/obj/structure/table/reinforced,
-/obj/machinery/button/door{
- id = "xenobio0";
- name = "Containment Blast Doors";
- pixel_y = 4;
- req_access_txt = "55"
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/light,
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"vHQ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -96729,7 +96765,7 @@ bDb
bDb
bDb
bDb
-bDb
+cNW
cNW
cQB
czY
@@ -96982,11 +97018,11 @@ bJN
bRT
bEm
bEm
-bJN
-bRT
-bEm
-bEm
bDb
+aco
+agd
+bDb
+aaa
cNW
cQB
czY
@@ -97225,8 +97261,8 @@ bJJ
bKY
bMi
bNo
-bOx
-bPA
+aab
+aad
bJN
bRU
bEm
@@ -97239,12 +97275,12 @@ bJN
bRU
bEm
bEm
-bJN
-bRU
-bEm
-bEm
bDb
-cNW
+acq
+age
+ajC
+aaa
+cOT
cQB
czY
cOT
@@ -97496,12 +97532,12 @@ bJN
bRU
bEm
cBz
-bJN
-bRU
-bEm
-cBz
bDb
-cNW
+acq
+age
+ajC
+aaa
+cOT
cQB
czY
cOT
@@ -97739,8 +97775,8 @@ bJL
bLa
bMi
bNo
-bPy
-dos
+aac
+aad
bJN
bRW
bTb
@@ -97753,11 +97789,11 @@ bJN
bZV
caV
cbS
-bJN
-cgl
-chs
-dnf
bDb
+acw
+ago
+bDb
+aaa
cNW
cQB
czY
@@ -98010,11 +98046,11 @@ bVi
bRV
bTa
cbR
-bVi
-bRV
-bTa
-vDd
bDb
+adr
+agv
+bDb
+aaa
cNW
cBN
czY
@@ -98267,12 +98303,12 @@ bZa
bMi
bMi
bRZ
-bZa
-bMi
-bMi
-bRZ
-bDb
-cNW
+abI
+aeF
+ahw
+ajC
+aaf
+cOT
cQB
cAa
cOT
@@ -98523,13 +98559,13 @@ bUf
bTc
bRX
bTc
-bUf
-bTc
-bRX
-bTc
cbT
-csk
-cko
+abJ
+abJ
+ahR
+ajG
+ajX
+ajY
czU
czZ
cOT
@@ -98781,12 +98817,12 @@ bZb
bRZ
bMi
bMi
-bZb
-bRZ
-bMi
-bMi
-bDb
-cNW
+abP
+afQ
+aiN
+ajC
+aaf
+cOT
cgm
czY
cOT
@@ -99027,22 +99063,22 @@ bIv
bIR
bPE
bLe
-bRY
+abm
bTd
bUg
bVi
-bWm
+abn
bTd
bUg
bVi
-bZW
-bTd
-bUg
-bVi
-ezw
+abH
bTd
bUg
bDb
+bDb
+bDb
+bDb
+aaa
cNW
cgm
czY
@@ -99295,11 +99331,11 @@ bJN
bZX
caW
cbU
-bJN
-bWn
-bXg
-bYh
bDb
+aaf
+aaf
+aaa
+aaa
cNW
cgm
czY
@@ -99552,12 +99588,12 @@ bJN
bEm
bEm
bRU
-bJN
-bEm
-bEm
-bRU
bDb
-cNW
+aaf
+aaa
+aaa
+aaa
+cOT
cgm
czY
cOT
@@ -99809,12 +99845,12 @@ bJN
bEm
bEm
bRU
-bJN
-bEm
-bEm
-bRU
bDb
-cNW
+aaf
+aaa
+aaa
+aaa
+cOT
cgm
czY
cOT
@@ -100053,11 +100089,7 @@ bJN
bMp
bNp
bOx
-bPI
-bJN
-bEm
-bEm
-bUi
+aaR
bJN
bEm
bEm
@@ -100071,7 +100103,11 @@ bEm
bEm
bUi
bDb
-cNW
+aaf
+aaf
+aaa
+aaa
+cOT
cgm
czY
cOT
@@ -100324,10 +100360,10 @@ bDb
bDb
bDb
bDb
-bDb
-bDb
-bDb
-bDb
+cNW
+cNW
+cNW
+cNW
cNW
czX
cAc
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index b1b3f234f9..f1588c04e4 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -112,6 +112,30 @@
/obj/structure/cable,
/turf/open/space,
/area/solar/starboard/fore)
+"aap" = (
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
+"aaq" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/camera{
+ c_tag = "Xenobiology - Killroom Chamber";
+ dir = 2;
+ name = "xenobiology camera";
+ network = list("ss13","xeno","rd")
+ },
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
+"aar" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 2;
+ external_pressure_bound = 140;
+ name = "killroom vent";
+ pressure_checks = 0
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"aas" = (
/obj/docking_port/stationary/random{
id = "pod_lavaland1";
@@ -131,6 +155,35 @@
/obj/effect/landmark/xeno_spawn,
/turf/open/space,
/area/solar/starboard/fore)
+"aav" = (
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
+"aaw" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 2;
+ external_pressure_bound = 120;
+ name = "server vent"
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
+"aax" = (
+/obj/machinery/atmospherics/pipe/manifold/general/hidden{
+ dir = 8
+ },
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
+"aay" = (
+/obj/machinery/atmospherics/pipe/simple/general/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
+"aaz" = (
+/obj/machinery/atmospherics/pipe/simple/general/hidden{
+ dir = 9
+ },
+/turf/open/floor/plasteel/vault/killroom,
+/area/science/xenobiology)
"aaA" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/pod_1)
@@ -149,6 +202,52 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/fore)
+"aaF" = (
+/obj/structure/cable/white{
+ icon_state = "0-4"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/general/hidden,
+/turf/open/floor/plating,
+/area/science/xenobiology)
+"aaG" = (
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/machinery/door/airlock/research/glass{
+ name = "Xenobiology Kill Room";
+ req_access_txt = "47"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"aaH" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 1;
+ min_temperature = 80;
+ on = 1;
+ target_temperature = 80
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"aaI" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 8
+ },
+/obj/machinery/status_display{
+ pixel_x = 32
+ },
+/turf/open/floor/circuit/green,
+/area/science/xenobiology)
"aaO" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -67532,20 +67631,6 @@
dir = 5
},
/area/science/xenobiology)
-"cNi" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Xenobiology - Killroom Chamber";
- dir = 2;
- name = "xenobiology camera";
- network = list("ss13","xeno","rd")
- },
-/turf/open/floor/plasteel/vault{
- dir = 5
- },
-/area/science/xenobiology)
"cNj" = (
/obj/structure/closet/crate{
icon_state = "crateopen"
@@ -69713,32 +69798,6 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
-"cSf" = (
-/obj/structure/cable/white{
- icon_state = "0-4"
- },
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/science/xenobiology)
-"cSg" = (
-/obj/structure/cable/white{
- icon_state = "2-4"
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/obj/machinery/door/airlock/research/glass{
- name = "Xenobiology Isolation Pin";
- req_access_txt = "47"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cSh" = (
/obj/structure/cable/white{
icon_state = "0-8"
@@ -70517,22 +70576,6 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"cTR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cTS" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -72225,12 +72268,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"cXm" = (
-/obj/machinery/status_display{
- pixel_x = 32
- },
-/turf/open/floor/circuit/green,
-/area/science/xenobiology)
"cXn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
@@ -101123,13 +101160,6 @@
"saw" = (
/turf/closed/wall,
/area/science/circuit)
-"shc" = (
-/obj/machinery/status_display{
- pixel_x = 32
- },
-/obj/structure/reagent_dispensers/watertank/high,
-/turf/open/floor/circuit/green,
-/area/science/xenobiology)
"tdp" = (
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -132544,9 +132574,9 @@ cHA
cjp
cKl
cLI
-cNd
-cNd
-cNd
+aap
+aap
+aap
cNc
cTQ
cVI
@@ -132801,11 +132831,11 @@ cHB
cjp
cKj
cLI
-cNd
-cNd
-cNd
-cSf
-cTR
+aap
+aar
+aax
+aaF
+aaH
cVP
cXi
cYX
@@ -133058,10 +133088,10 @@ cHD
caE
cKm
cLI
-cNi
-cNd
-cNd
-cSg
+aaq
+aav
+aay
+aaG
cTS
cVQ
cXj
@@ -133315,9 +133345,9 @@ cHB
cjp
cKk
cLI
-cNd
-cNd
-cNd
+aap
+aaw
+aaz
cSh
cTT
cVR
@@ -133572,9 +133602,9 @@ cHA
ceb
cKk
cLI
-cNd
-cNd
-cNd
+aap
+aap
+aap
cNc
cTU
cVS
@@ -133835,9 +133865,9 @@ cMY
cMY
cTV
cVT
-cXm
+aaI
cZb
-shc
+aaI
dcu
ddV
cMY
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index e32792718e..b338e83fb7 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -2,10 +2,48 @@
"aaa" = (
/turf/open/space/basic,
/area/space)
+"aab" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/machinery/computer/camera_advanced/xenobio,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aac" = (
/obj/effect/landmark/carpspawn,
/turf/open/space,
/area/space)
+"aad" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
+ },
+/obj/machinery/computer/camera_advanced/xenobio,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"aae" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
+ },
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aaf" = (
/obj/structure/lattice,
/turf/open/space,
@@ -298,9 +336,46 @@
},
/turf/open/floor/plasteel/floorgrime,
/area/security/prison)
+"aaU" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"aaV" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/pod_2)
+"aaW" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/item/extinguisher{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/obj/item/extinguisher,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
+"aaX" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 6
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/science/xenobiology)
"aaY" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -335,6 +410,15 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/security/prison)
+"abd" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/maintenance/department/science/xenobiology)
"abe" = (
/turf/closed/wall,
/area/security/prison)
@@ -754,6 +838,24 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/security/prison)
+"acd" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/obj/machinery/door/airlock/research{
+ glass = 1;
+ name = "Slime Euthanization Chamber";
+ opacity = 0;
+ req_access_txt = "55"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"ace" = (
/obj/machinery/vending/sustenance{
desc = "A vending machine normally reserved for work camps.";
@@ -2007,6 +2109,17 @@
},
/turf/open/floor/plating,
/area/crew_quarters/fitness/recreation)
+"aeD" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/chair,
+/obj/item/cigbutt,
+/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+ dir = 1
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"aeE" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -2733,6 +2846,15 @@
dir = 1
},
/area/security/prison)
+"afQ" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 4
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"afR" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -3700,6 +3822,12 @@
icon_state = "platingdmg1"
},
/area/maintenance/fore)
+"ahT" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+ dir = 10
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"ahU" = (
/obj/effect/decal/cleanable/cobweb/cobweb2,
/obj/structure/table,
@@ -4296,6 +4424,18 @@
/obj/item/restraints/handcuffs/cable/pink,
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"ajk" = (
+/obj/machinery/door/airlock/research{
+ glass = 1;
+ name = "Slime Euthanization Chamber";
+ opacity = 0;
+ req_access_txt = "55"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"ajl" = (
/obj/item/soap/deluxe,
/obj/item/storage/secure/safe{
@@ -4384,6 +4524,15 @@
dir = 4
},
/area/security/warden)
+"aju" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
+ dir = 1;
+ name = "euthanization chamber freezer";
+ on = 1;
+ target_temperature = 80
+ },
+/turf/open/floor/plating,
+/area/science/xenobiology)
"ajv" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -5314,6 +5463,11 @@
"alq" = (
/turf/closed/wall,
/area/maintenance/starboard)
+"alr" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/atmospherics/pipe/simple/cyan/visible,
+/turf/open/floor/plating,
+/area/science/xenobiology)
"als" = (
/obj/machinery/light{
dir = 8
@@ -6120,6 +6274,17 @@
icon_state = "platingdmg2"
},
/area/maintenance/port)
+"amV" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/research{
+ glass = 1;
+ name = "Slime Euthanization Chamber";
+ opacity = 0;
+ req_access_txt = "55"
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"amW" = (
/obj/structure/table/reinforced,
/obj/item/folder,
@@ -6365,6 +6530,9 @@
/obj/item/paper,
/turf/open/floor/plasteel,
/area/security/main)
+"anz" = (
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"anA" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment,
@@ -6801,6 +6969,15 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/security/warden)
+"aov" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1;
+ external_pressure_bound = 140;
+ name = "server vent";
+ pressure_checks = 0
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"aow" = (
/obj/machinery/door/firedoor,
/obj/structure/cable/yellow{
@@ -7485,6 +7662,10 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"apP" = (
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"apQ" = (
/obj/structure/reagent_dispensers/peppertank{
pixel_x = 32
@@ -7537,6 +7718,14 @@
/obj/item/device/assembly/flash/handheld,
/turf/open/floor/plasteel,
/area/security/main)
+"apX" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
+ dir = 1;
+ external_pressure_bound = 120;
+ name = "server vent"
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"apY" = (
/obj/structure/table,
/obj/item/folder/red,
@@ -7580,6 +7769,11 @@
/obj/item/clothing/head/soft/red,
/turf/open/floor/plasteel/vault,
/area/crew_quarters/fitness/recreation)
+"aqe" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/light/small,
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"aqf" = (
/obj/structure/closet/lasertag/blue,
/turf/open/floor/plasteel/vault,
@@ -8038,6 +8232,15 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"arh" = (
+/obj/machinery/camera{
+ c_tag = "Xenobiology Lab - Kill Chamber";
+ dir = 1;
+ network = list("ss13","rd","xeno");
+ start_active = 1
+ },
+/turf/open/floor/circuit/killroom,
+/area/science/xenobiology)
"ari" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -8230,6 +8433,10 @@
dir = 4
},
/area/crew_quarters/dorms)
+"arF" = (
+/obj/structure/disposalpipe/segment,
+/turf/closed/wall/r_wall,
+/area/science/xenobiology)
"arG" = (
/obj/structure/closet,
/obj/item/storage/box/lights/mixed,
@@ -9296,6 +9503,13 @@
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
+"atC" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/structure/disposaloutlet,
+/turf/open/floor/plating/airless,
+/area/science/xenobiology)
"atD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -35100,12 +35314,6 @@
dir = 5
},
/area/hallway/primary/port)
-"bvT" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/department/science/xenobiology)
"bvU" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -40973,9 +41181,6 @@
},
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
-"bIv" = (
-/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
"bIw" = (
/obj/machinery/light,
/obj/machinery/camera{
@@ -71572,10 +71777,6 @@
/obj/effect/landmark/xmastree,
/turf/open/floor/wood,
/area/crew_quarters/bar)
-"cTT" = (
-/obj/structure/disposalpipe/segment,
-/turf/closed/wall/r_wall,
-/area/maintenance/department/science/xenobiology)
"cUH" = (
/obj/structure/table/optable,
/turf/open/floor/plasteel/white,
@@ -72188,27 +72389,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
-"daP" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/maintenance/department/science/xenobiology)
-"daQ" = (
-/obj/structure/disposalpipe/segment{
- dir = 10
- },
-/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
-"daS" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/maintenance/department/science/xenobiology)
"daW" = (
/obj/machinery/button/door{
id = "engpa";
@@ -72340,13 +72520,6 @@
},
/turf/open/floor/engine,
/area/science/xenobiology)
-"dbv" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/light/small,
-/turf/open/floor/plating{
- icon_state = "platingdmg2"
- },
-/area/maintenance/department/science/xenobiology)
"dbE" = (
/obj/machinery/plantgenes,
/obj/effect/turf_decal/stripes/line{
@@ -72752,22 +72925,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"dcm" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/structure/table/glass,
-/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"dcn" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -72784,18 +72941,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"dco" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"dcp" = (
/obj/structure/cable/yellow{
icon_state = "1-8"
@@ -72853,15 +72998,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"dcv" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"dcw" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -72869,13 +73005,6 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"dcx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"dcy" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel/white,
@@ -72947,16 +73076,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"dcJ" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/structure/reagent_dispensers/watertank/high,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"dcK" = (
/obj/machinery/disposal/bin,
/obj/structure/sign/warning/deathsposal{
@@ -73374,41 +73493,11 @@
},
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
-"ddx" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/chair,
-/obj/item/cigbutt,
-/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
"ddy" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/maintenance/department/science/xenobiology)
-"ddz" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/closed/wall/r_wall,
-/area/maintenance/department/science/xenobiology)
-"ddA" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research{
- glass = 1;
- name = "Slime Euthanization Chamber";
- opacity = 0;
- req_access_txt = "55"
- },
-/turf/closed/wall/r_wall,
-/area/maintenance/department/science/xenobiology)
-"ddC" = (
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
-/obj/structure/disposaloutlet,
-/turf/open/floor/plating/airless,
-/area/maintenance/department/science/xenobiology)
"ddE" = (
/obj/effect/landmark/start/cook,
/obj/machinery/holopad,
@@ -74827,33 +74916,6 @@
"dlV" = (
/turf/closed/wall/r_wall,
/area/maintenance/department/science/xenobiology)
-"dmq" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/door/airlock/research{
- glass = 1;
- name = "Slime Euthanization Chamber";
- opacity = 0;
- req_access_txt = "55"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
-"dmr" = (
-/obj/machinery/door/airlock/research{
- glass = 1;
- name = "Slime Euthanization Chamber";
- opacity = 0;
- req_access_txt = "55"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/maintenance/department/science/xenobiology)
"dmD" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
@@ -76455,10 +76517,6 @@
},
/turf/open/floor/plating/airless,
/area/engine/engineering)
-"jot" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/maintenance/department/science/xenobiology)
"jwW" = (
/turf/closed/wall/mineral/plastitanium,
/area/crew_quarters/fitness/recreation)
@@ -110258,8 +110316,8 @@ cRi
cRi
cRi
cRi
-daP
-cTA
+aaX
+aju
dlV
aaa
aaa
@@ -110515,11 +110573,11 @@ cSn
daF
daJ
cRi
-bvT
-dlV
-dlV
-dlV
-dlV
+abd
+cRi
+cRi
+cRi
+cRi
aaa
aai
aaa
@@ -110772,11 +110830,11 @@ cSn
cSn
cSn
cRi
-dmq
-dlV
-ddj
-ddj
-dlV
+acd
+cRi
+anz
+anz
+cRi
aaf
aag
aaa
@@ -111003,8 +111061,8 @@ aaa
aaf
cRe
cRS
-dcm
-dcv
+aab
+aae
cRC
dcG
cSe
@@ -111029,11 +111087,11 @@ daB
daG
cSn
cRi
-ddx
-ddz
-ddj
-ddj
-jot
+aeD
+alr
+aov
+anz
+cRe
aaa
aaa
aaa
@@ -111286,12 +111344,12 @@ cSn
cSn
daL
cRi
-daQ
-ddA
-daS
-dbv
-cTT
-ddC
+afQ
+amV
+apP
+aqe
+arF
+atC
aaf
aaa
aaa
@@ -111517,8 +111575,8 @@ aaa
aaf
cRe
cRS
-dco
-dcx
+aad
+aaU
dcA
dcI
cRR
@@ -111543,11 +111601,11 @@ cSn
daH
daK
cRi
-bIv
-ddz
-ddj
-ddj
-jot
+ahT
+alr
+apX
+anz
+cRe
aaa
aaf
aaa
@@ -111777,7 +111835,7 @@ dcb
cZa
dDI
dcB
-dcJ
+aaW
cRa
cSm
cSw
@@ -111800,11 +111858,11 @@ cSn
cSn
daN
cRi
-dmr
-dlV
-ddj
-ddj
-dlV
+ajk
+cRi
+anz
+arh
+cRi
aaa
aag
aaa
@@ -112058,10 +112116,10 @@ daI
daM
cRi
cTA
-dlV
-dlV
-dlV
-dlV
+cRi
+cRi
+cRi
+cRi
aaf
aag
aaa
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 6bf52ab60a..dd9607987c 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -12686,7 +12686,6 @@
/area/storage/primary)
"aGk" = (
/obj/machinery/vending/boozeomat{
- products = list(/obj/item/reagent_containers/food/drinks/bottle/rum = 1, /obj/item/reagent_containers/food/drinks/bottle/wine = 1, /obj/item/reagent_containers/food/drinks/ale = 1, /obj/item/reagent_containers/food/drinks/drinkingglass = 6, /obj/item/reagent_containers/food/drinks/ice = 1, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4);
req_access_txt = "20"
},
/turf/open/floor/plasteel/vault{
@@ -27811,6 +27810,9 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"brQ" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 8
+ },
/obj/machinery/camera{
c_tag = "Xenobiology Port";
dir = 8;
@@ -28602,11 +28604,11 @@
/turf/open/floor/plating,
/area/science/xenobiology)
"btD" = (
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/science/xenobiology)
"btE" = (
/obj/effect/decal/remains/xeno,
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/science/xenobiology)
"btF" = (
/obj/structure/chair{
@@ -29227,7 +29229,12 @@
/obj/machinery/light/small{
dir = 4
},
-/turf/open/floor/plating,
+/obj/machinery/camera{
+ c_tag = "Xenobiology Kill Room";
+ dir = 8;
+ network = list("ss13","rd")
+ },
+/turf/open/floor/plating/airless,
/area/science/xenobiology)
"bva" = (
/turf/closed/wall,
@@ -31294,22 +31301,16 @@
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzi" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/item/extinguisher{
+ pixel_x = 4;
+ pixel_y = 3
},
-/obj/structure/table/glass,
/obj/item/extinguisher,
-/obj/item/extinguisher{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/extinguisher{
- pixel_x = 5;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
+/obj/structure/table/glass,
+/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzj" = (
+/obj/structure/reagent_dispensers/watertank,
/obj/machinery/requests_console{
department = "Science";
departmentType = 2;
@@ -31317,7 +31318,6 @@
pixel_x = 32;
receive_ore_updates = 1
},
-/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzk" = (
@@ -33793,8 +33793,7 @@
dir = 1
},
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ pixel_y = 28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/landmark/blobstart,
@@ -35454,8 +35453,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ pixel_y = 28
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 1
@@ -36332,8 +36330,7 @@
/area/medical/medbay/central)
"bKw" = (
/obj/machinery/vending/wallmed{
- pixel_y = 28;
- products = list(/obj/item/reagent_containers/syringe = 3, /obj/item/reagent_containers/pill/patch/styptic = 1, /obj/item/reagent_containers/pill/patch/silver_sulf = 1, /obj/item/reagent_containers/spray/medical/sterilizer = 1)
+ pixel_y = 28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -49831,7 +49828,6 @@
/area/maintenance/department/engine)
"cBk" = (
/obj/machinery/vending/boozeomat{
- products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, /obj/item/reagent_containers/food/drinks/bottle/absinthe = 1, /obj/item/reagent_containers/food/drinks/bottle/limejuice = 1, /obj/item/reagent_containers/food/drinks/bottle/cream = 1, /obj/item/reagent_containers/food/drinks/soda_cans/tonic = 1, /obj/item/reagent_containers/food/drinks/drinkingglass = 10, /obj/item/reagent_containers/food/drinks/ice = 3, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6, /obj/item/reagent_containers/food/drinks/flask = 1);
req_access_txt = "0"
},
/turf/closed/wall,
@@ -50178,6 +50174,12 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"gFV" = (
+/obj/machinery/computer/camera_advanced/xenobio{
+ dir = 8
+ },
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"izp" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/preopen{
@@ -93281,7 +93283,7 @@ bkE
aht
bnd
boh
-bpn
+gFV
bqx
brQ
btr
diff --git a/cfg/admin.txt b/cfg/admin.txt
index fcc587124a..e69de29bb2 100644
--- a/cfg/admin.txt
+++ b/cfg/admin.txt
@@ -1 +0,0 @@
-poojawa role=admin
diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index e8b744ce5b..b5bbcd341e 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -34,6 +34,7 @@
#define R_SOUNDS 0x800
#define R_SPAWN 0x1000
#define R_AUTOLOGIN 0x2000
+#define R_DBRANKS 0x4000
#define R_DEFAULT R_AUTOLOGIN
diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm
index f68657c3e9..b7cc207735 100644
--- a/code/__DEFINES/lighting.dm
+++ b/code/__DEFINES/lighting.dm
@@ -52,7 +52,7 @@
#define LIGHT_RANGE_FIRE 3 //How many tiles standard fires glow.
#define LIGHTING_PLANE_ALPHA_VISIBLE 255
-#define LIGHTING_PLANE_ALPHA_NV_TRAIT 250
+#define LIGHTING_PLANE_ALPHA_NV_TRAIT 245
#define LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE 192
#define LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE 128 //For lighting alpha, small amounts lead to big changes. even at 128 its hard to figure out what is dark and what is light, at 64 you almost can't even tell.
#define LIGHTING_PLANE_ALPHA_INVISIBLE 0
diff --git a/code/__DEFINES/qdel.dm b/code/__DEFINES/qdel.dm
index 8749218847..d9db6e89a2 100644
--- a/code/__DEFINES/qdel.dm
+++ b/code/__DEFINES/qdel.dm
@@ -22,3 +22,4 @@
#define QDELING(X) (X.gc_destroyed)
#define QDELETED(X) (!X || QDELING(X))
#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
+
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 770d3053c6..232da0d2ca 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -1,7 +1,7 @@
//Update this whenever the db schema changes
//make sure you add an update to the schema_version stable in the db changelog
#define DB_MAJOR_VERSION 4
-#define DB_MINOR_VERSION 0
+#define DB_MINOR_VERSION 1
//Timing subsystem
//Don't run if there is an identical unique timer active
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index b0bc653b01..b0e76bbcf3 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -500,3 +500,28 @@
objective_parts += "Objective #[count]: [objective.explanation_text] Fail."
count++
return objective_parts.Join("
")
+
+/datum/controller/subsystem/ticker/proc/save_admin_data()
+ if(CONFIG_GET(flag/admin_legacy_system)) //we're already using legacy system so there's nothing to save
+ return
+ else if(load_admins()) //returns true if there was a database failure and the backup was loaded from
+ return
+ var/datum/DBQuery/query_admin_rank_update = SSdbcore.NewQuery("UPDATE [format_table_name("player")] p INNER JOIN [format_table_name("admin")] a ON p.ckey = a.ckey SET p.lastadminrank = a.rank")
+ query_admin_rank_update.Execute()
+ //json format backup file generation stored per server
+ var/json_file = file("data/admins_backup.json")
+ var/list/file_data = list("ranks" = list(), "admins" = list())
+ for(var/datum/admin_rank/R in GLOB.admin_ranks)
+ file_data["ranks"]["[R.name]"] = list()
+ file_data["ranks"]["[R.name]"]["include rights"] = R.include_rights
+ file_data["ranks"]["[R.name]"]["exclude rights"] = R.exclude_rights
+ file_data["ranks"]["[R.name]"]["can edit rights"] = R.can_edit_rights
+ for(var/i in GLOB.admin_datums+GLOB.deadmins)
+ var/datum/admins/A = GLOB.admin_datums[i]
+ if(!A)
+ A = GLOB.deadmins[i]
+ if (!A)
+ continue
+ file_data["admins"]["[i]"] = A.rank.name
+ fdel(json_file)
+ WRITE_FILE(json_file, json_encode(file_data))
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 9778596d77..c06484f556 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -182,38 +182,40 @@
return ICON_OVERLAY
//Converts a rights bitfield into a string
-/proc/rights2text(rights, seperator="", list/adds, list/subs)
+/proc/rights2text(rights, seperator="", prefix = "+")
+ seperator += prefix
if(rights & R_BUILDMODE)
- . += "[seperator]+BUILDMODE"
+ . += "[seperator]BUILDMODE"
if(rights & R_ADMIN)
- . += "[seperator]+ADMIN"
+ . += "[seperator]ADMIN"
if(rights & R_BAN)
- . += "[seperator]+BAN"
+ . += "[seperator]BAN"
if(rights & R_FUN)
- . += "[seperator]+FUN"
+ . += "[seperator]FUN"
if(rights & R_SERVER)
- . += "[seperator]+SERVER"
+ . += "[seperator]SERVER"
if(rights & R_DEBUG)
- . += "[seperator]+DEBUG"
+ . += "[seperator]DEBUG"
if(rights & R_POSSESS)
- . += "[seperator]+POSSESS"
+ . += "[seperator]POSSESS"
if(rights & R_PERMISSIONS)
- . += "[seperator]+PERMISSIONS"
+ . += "[seperator]PERMISSIONS"
if(rights & R_STEALTH)
- . += "[seperator]+STEALTH"
+ . += "[seperator]STEALTH"
if(rights & R_POLL)
- . += "[seperator]+POLL"
+ . += "[seperator]POLL"
if(rights & R_VAREDIT)
- . += "[seperator]+VAREDIT"
+ . += "[seperator]VAREDIT"
if(rights & R_SOUNDS)
- . += "[seperator]+SOUND"
+ . += "[seperator]SOUND"
if(rights & R_SPAWN)
- . += "[seperator]+SPAWN"
-
- for(var/verbpath in adds)
- . += "[seperator]+[verbpath]"
- for(var/verbpath in subs)
- . += "[seperator]-[verbpath]"
+ . += "[seperator]SPAWN"
+ if(rights & R_AUTOLOGIN)
+ . += "[seperator]AUTOLOGIN"
+ if(rights & R_DBRANKS)
+ . += "[seperator]DBRANKS"
+ if(!.)
+ . = "NONE"
return .
/proc/ui_style2icon(ui_style)
diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index 807ec5c5fe..7a5c95d690 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -22,5 +22,6 @@ GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details
GLOBAL_LIST_INIT(bitfields, list(
"obj_flags" = list("EMAGGED" = EMAGGED, "IN_USE" = IN_USE, "CAN_BE_HIT" = CAN_BE_HIT, "BEING_SHOCKED" = BEING_SHOCKED, "DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION, "ON_BLUEPRINTS" = ON_BLUEPRINTS, "UNIQUE_RENAME" = UNIQUE_RENAME),
"datum_flags" = list("DF_USE_TAG" = DF_USE_TAG, "DF_VAR_EDITED" = DF_VAR_EDITED),
- "item_flags" = list("BEING_REMOVED" = BEING_REMOVED, "IN_INVENTORY" = IN_INVENTORY, "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, "NEEDS_PERMIT" = NEEDS_PERMIT)
+ "item_flags" = list("BEING_REMOVED" = BEING_REMOVED, "IN_INVENTORY" = IN_INVENTORY, "FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE, "NEEDS_PERMIT" = NEEDS_PERMIT),
+ "admin_flags" = list("BUILDMODE" = R_BUILDMODE, "ADMIN" = R_ADMIN, "BAN" = R_BAN, "FUN" = R_FUN, "SERVER" = R_SERVER, "DEBUG" = R_DEBUG, "POSSESS" = R_POSSESS, "PERMISSIONS" = R_PERMISSIONS, "STEALTH" = R_STEALTH, "POLL" = R_POLL, "VAREDIT" = R_VAREDIT, "SOUNDS" = R_SOUNDS, "SPAWN" = R_SPAWN, "AUTOLOGIN" = R_AUTOLOGIN, "DBRANKS" = R_DBRANKS)
))
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 1a7e6849d0..91e1330316 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -394,4 +394,4 @@
min_val = 0
/datum/config_entry/string/default_view
- config_entry_value = "15x15"
\ No newline at end of file
+ config_entry_value = "15x15"
diff --git a/code/controllers/subsystem/processing/traits.dm b/code/controllers/subsystem/processing/traits.dm
index 9d536c8131..17eae4bda2 100644
--- a/code/controllers/subsystem/processing/traits.dm
+++ b/code/controllers/subsystem/processing/traits.dm
@@ -9,7 +9,7 @@ PROCESSING_SUBSYSTEM_DEF(traits)
wait = 10
runlevels = RUNLEVEL_GAME
- var/list/traits = list() //Assoc. list of all roundstart trait datums; "name" = /path/
+ var/list/traits = list() //Assoc. list of all roundstart trait datum types; "name" = /path/
var/list/trait_points = list() //Assoc. list of trait names and their "point cost"; positive numbers are good traits, and negative ones are bad
var/list/trait_objects = list() //A list of all trait objects in the game, since some may process
@@ -24,11 +24,10 @@ PROCESSING_SUBSYSTEM_DEF(traits)
traits[initial(T.name)] = T
trait_points[initial(T.name)] = initial(T.value)
-/datum/controller/subsystem/processing/traits/proc/AssignTraits(mob/living/user, client/cli)
- if(!isnewplayer(user))
- GenerateTraits(cli)
+/datum/controller/subsystem/processing/traits/proc/AssignTraits(mob/living/user, client/cli, spawn_effects)
+ GenerateTraits(cli)
for(var/V in cli.prefs.character_traits)
- user.add_trait_datum(V)
+ user.add_trait_datum(V, spawn_effects)
/datum/controller/subsystem/processing/traits/proc/GenerateTraits(client/user)
if(user.prefs.character_traits.len)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 851dd2e750..62e20c9854 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -387,6 +387,8 @@ SUBSYSTEM_DEF(ticker)
captainless=0
if(player.mind.assigned_role != player.mind.special_role)
SSjob.EquipRank(N, player.mind.assigned_role, 0)
+ if(CONFIG_GET(flag/roundstart_traits))
+ SStraits.AssignTraits(player, N.client, TRUE)
CHECK_TICK
if(captainless)
for(var/mob/dead/new_player/N in GLOB.player_list)
diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm
index 2c46621f16..45e2b667cf 100644
--- a/code/controllers/subsystem/timer.dm
+++ b/code/controllers/subsystem/timer.dm
@@ -458,7 +458,7 @@ SUBSYSTEM_DEF(timer)
if (wait >= 1 && callback && callback.object && callback.object != GLOBAL_PROC && QDELETED(callback.object))
stack_trace("addtimer called with a callback assigned to a qdeleted object")
- wait = max(wait, world.tick_lag)
+ wait = max(wait, 0)
if(wait >= INFINITY)
CRASH("Attempted to create timer with INFINITY delay")
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 9561515840..f1423bcf6e 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -223,25 +223,27 @@
/datum/browser/modal/listpicker
var/valueslist = list()
-/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox")
+/datum/browser/modal/listpicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/values,inputtype="checkbox", width, height, slidecolor)
if (!User)
return
var/output = {"