diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index fc3f2852fc..00dc7b1d10 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -7,15 +7,5 @@
#deathride58
/modular_citadel/ @deathride58
-#LetterJay
-/modular_citadel/code/modules/client/loadout/__donator.dm @LetterJay
-
-#Poojawa
-
-/modular_citadel/code/modules/vore @Poojawa
-/code/game/objects/items/devices/dogborg_sleeper.dm @Poojawa
-/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @Poojawa
-/tgui/ @Poojawa
-/modular_citadel/code/modules/clothing/spacesuits/flightsuit.dm @Poojawa
-/modular_citadel/code/game/objects/ids.dm @Poojawa
-/sound/vore @Poojawa
\ No newline at end of file
+#LetterJay
+/modular_citadel/code/modules/client/loadout/__donator.dm @LetterJay
diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt
index a232d0028b..d3339df1fb 100644
--- a/SQL/database_changelog.txt
+++ b/SQL/database_changelog.txt
@@ -1,25 +1,15 @@
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.
-<<<<<<< HEAD
-The latest database version is 4.1; The query to update the schema revision table is:
-
-INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 1);
-or
-INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 1);
-=======
The latest database version is 4.4; The query to update the schema revision table is:
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 4);
or
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 4);
->>>>>>> 37854a5... Splits up round table initialize, start, end and shutdown (#37665)
In any query remember to add a prefix to the table names if you use one.
----------------------------------------------------
-<<<<<<< HEAD
-=======
Version 4.4, 9 May 2018, by Jordie0608
Modified table `round`, renaming column `start_datetime` to `initialize_datetime` and `end_datetime` to `shutdown_datetime` and adding columns to replace both under the same name in preparation for changes to TGS server initialization.
@@ -60,7 +50,6 @@ ALTER TABLE `admin_log`
----------------------------------------------------
->>>>>>> 37854a5... Splits up round table initialize, start, end and shutdown (#37665)
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.
@@ -92,7 +81,6 @@ ALTER TABLE `admin_ranks`
DROP PRIMARY KEY,
ADD PRIMARY KEY (`rank`);
-
----------------------------------------------------
Version 4.0, 12 November 2017, by Jordie0608
diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql
index dc9a576377..0a2076f508 100644
--- a/SQL/tgstation_schema.sql
+++ b/SQL/tgstation_schema.sql
@@ -33,9 +33,11 @@ DROP TABLE IF EXISTS `admin_log`;
CREATE TABLE `admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
+ `round_id` int(11) unsigned NOT NULL,
`adminckey` varchar(32) 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,
+ `target` varchar(32) NOT NULL,
`log` varchar(1000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql
index f34a084fbf..a81b302afe 100644
--- a/SQL/tgstation_schema_prefixed.sql
+++ b/SQL/tgstation_schema_prefixed.sql
@@ -33,9 +33,11 @@ DROP TABLE IF EXISTS `SS13_admin_log`;
CREATE TABLE `SS13_admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datetime` datetime NOT NULL,
+ `round_id` int(11) unsigned NOT NULL,
`adminckey` varchar(32) 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,
+ `target` varchar(32) NOT NULL,
`log` varchar(1000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 13ee4fa135..ba9b8b5c36 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -20,11 +20,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -44,11 +41,9 @@
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/main)
"ag" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/turf/open/floor/plasteel/red/side{
dir = 8
@@ -100,9 +95,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/machinery/chem_dispenser,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/chem_dispenser/fullupgrade,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/chemistry)
"cA" = (
@@ -187,21 +182,16 @@
/area/ruin/unpowered/syndicate_lava_base/cargo)
"dA" = (
/obj/structure/closet/l3closet,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 8;
name = "Chemistry APC";
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/structure/cable/yellow{
icon_state = "0-2"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/side{
@@ -209,11 +199,8 @@
},
/area/ruin/unpowered/syndicate_lava_base/chemistry)
"dB" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/chemistry)
@@ -287,10 +274,8 @@
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/cargo)
"dL" = (
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/obj/structure/closet/crate,
/obj/item/extinguisher{
@@ -390,11 +375,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white/side{
dir = 8
},
@@ -437,11 +418,9 @@
pixel_x = -3
},
/obj/item/reagent_containers/dropper,
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 8;
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/side{
@@ -529,12 +508,10 @@
/obj/structure/cable/yellow{
icon_state = "0-2"
},
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 1;
name = "Cargo Bay APC";
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = 24
},
/obj/structure/closet/emcloset/anchored,
/obj/effect/decal/cleanable/dirt,
@@ -689,11 +666,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white/side{
dir = 8
},
@@ -779,11 +752,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -796,11 +766,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/vault{
@@ -814,11 +781,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -832,11 +796,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/mining/glass{
@@ -854,11 +815,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/cargo)
@@ -870,11 +828,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/cargo)
@@ -955,28 +910,20 @@
dir = 1;
pixel_y = -24
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 8
},
/area/ruin/unpowered/syndicate_lava_base/testlab)
"eN" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 1;
- pixel_y = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = -24
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -987,11 +934,8 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -1004,11 +948,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -1037,11 +978,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white/side{
dir = 10
},
@@ -1063,8 +1000,8 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/chem_dispenser,
/obj/effect/decal/cleanable/dirt,
+/obj/machinery/chem_dispenser/fullupgrade,
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/chemistry)
"eV" = (
@@ -1078,11 +1015,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/vault{
dir = 5
},
@@ -1118,11 +1051,8 @@
/obj/item/storage/box/donkpockets{
pixel_x = 2
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/cargo)
@@ -1155,20 +1085,14 @@
/area/ruin/unpowered/syndicate_lava_base/cargo)
"fc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/cargo)
"fd" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/cargo)
@@ -1182,11 +1106,8 @@
/turf/open/floor/mineral/plastitanium,
/area/ruin/unpowered/syndicate_lava_base/cargo)
"ff" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/side{
@@ -1195,22 +1116,16 @@
/area/ruin/unpowered/syndicate_lava_base/virology)
"fg" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
},
/turf/open/floor/plasteel/white/side{
dir = 6
},
/area/ruin/unpowered/syndicate_lava_base/virology)
"fh" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/white/side{
dir = 10
@@ -1223,12 +1138,10 @@
pixel_y = 2
},
/obj/item/storage/box/syringes,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 1;
name = "Virology APC";
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = 24
},
/obj/structure/cable/yellow{
icon_state = "0-2"
@@ -1257,12 +1170,10 @@
},
/area/ruin/unpowered/syndicate_lava_base/virology)
"fk" = (
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Experimentation Lab APC";
- pixel_y = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = -24
},
/obj/structure/cable/yellow{
icon_state = "0-4"
@@ -1274,11 +1185,7 @@
/area/ruin/unpowered/syndicate_lava_base/testlab)
"fl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/extinguisher_cabinet{
pixel_x = 25
},
@@ -1299,11 +1206,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/syndicate_lava_base/chemistry)
"fn" = (
@@ -1349,11 +1252,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/vault{
dir = 5
@@ -1364,40 +1263,12 @@
dir = 8
},
/obj/structure/closet/crate,
-/obj/item/stock_parts/capacitor/quadratic,
-/obj/item/stock_parts/capacitor/quadratic,
-/obj/item/stock_parts/cell/bluespace{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/stock_parts/cell/bluespace{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/stock_parts/manipulator/femto{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/stock_parts/manipulator/femto{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/stock_parts/matter_bin/bluespace{
- pixel_x = -6;
- pixel_y = 6
- },
-/obj/item/stock_parts/matter_bin/bluespace{
- pixel_x = -6;
- pixel_y = 6
- },
-/obj/item/stock_parts/micro_laser/quadultra,
-/obj/item/stock_parts/micro_laser/quadultra,
-/obj/item/stock_parts/scanning_module/triphasic{
- pixel_x = -4
- },
-/obj/item/stock_parts/scanning_module/triphasic{
- pixel_x = -4
- },
+/obj/item/storage/box/stockparts/deluxe,
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/stack/sheet/glass/fifty,
+/obj/item/circuitboard/machine/processor,
+/obj/item/circuitboard/machine/gibber,
+/obj/item/circuitboard/machine/deep_fryer,
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/cargo)
"ft" = (
@@ -1428,11 +1299,9 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/structure/table,
/obj/item/clothing/suit/hazardvest,
@@ -1476,11 +1345,7 @@
req_access_txt = "150"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/syndicate_lava_base/virology)
"fz" = (
@@ -1489,11 +1354,7 @@
req_access_txt = "150"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/syndicate_lava_base/virology)
"fA" = (
@@ -1536,10 +1397,8 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -1553,11 +1412,7 @@
"fG" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/machinery/door/airlock/hatch{
name = "Experimentation Lab";
req_access_txt = "150"
@@ -1581,11 +1436,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white/side{
dir = 1
},
@@ -1601,11 +1452,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/machinery/door/airlock/mining/glass{
name = "Warehouse";
req_access_txt = "150"
@@ -1704,11 +1551,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white,
@@ -1717,11 +1561,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/syndicate_lava_base/virology)
@@ -1729,21 +1570,15 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/syndicate_lava_base/virology)
"gs" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 2
},
/obj/machinery/light/small,
/obj/effect/decal/cleanable/dirt,
@@ -1753,11 +1588,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/white/side{
dir = 9
@@ -1767,11 +1599,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "1-4"
@@ -1784,11 +1613,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable/yellow{
@@ -1800,11 +1626,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -1820,11 +1643,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -1838,11 +1658,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -1867,11 +1684,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -1885,11 +1699,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -1903,11 +1714,7 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -1926,11 +1733,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -1941,11 +1745,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -1954,11 +1755,8 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 2
},
/obj/structure/cable/yellow{
icon_state = "1-8"
@@ -1972,11 +1770,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -1988,11 +1783,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -2006,11 +1798,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/brown/corner{
dir = 4
@@ -2023,11 +1812,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
},
/turf/open/floor/plasteel/brown{
dir = 1
@@ -2087,30 +1873,21 @@
req_access_txt = "150"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white,
/area/ruin/unpowered/syndicate_lava_base/virology)
"gU" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/structure/sink{
dir = 8;
pixel_x = -12;
pixel_y = 2
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/side{
@@ -2179,11 +1956,8 @@
/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -2198,11 +1972,7 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"hc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -2289,11 +2059,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/white/side{
dir = 1
},
@@ -2369,18 +2135,12 @@
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/main)
"hx" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -2435,11 +2195,8 @@
/area/ruin/unpowered/syndicate_lava_base/virology)
"hF" = (
/obj/machinery/light/small,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/side,
@@ -2491,11 +2248,7 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -2507,10 +2260,8 @@
/obj/structure/table/wood,
/obj/item/ammo_box/magazine/m10mm,
/obj/item/ammo_box/magazine/sniper_rounds,
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -2518,11 +2269,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"hO" = (
@@ -2532,20 +2279,14 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"hQ" = (
/obj/structure/table/wood,
/obj/item/ammo_box/magazine/m10mm,
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -2620,22 +2361,16 @@
icon_state = "1-2"
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 8
},
/turf/open/floor/plasteel/red/side{
dir = 8
},
/area/ruin/unpowered/syndicate_lava_base/main)
"ia" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -2650,11 +2385,7 @@
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"ic" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"id" = (
@@ -2718,11 +2449,7 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"ij" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -2740,11 +2467,7 @@
name = "Cabin 2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"im" = (
@@ -2761,11 +2484,7 @@
name = "Cabin 4"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"ip" = (
@@ -2844,11 +2563,7 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"ix" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -2868,21 +2583,15 @@
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"iA" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral/side{
dir = 1
},
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"iB" = (
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/decal/cleanable/dirt,
@@ -2901,22 +2610,14 @@
dir = 2;
pixel_y = 24
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel/neutral/corner{
dir = 4
},
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"iE" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/neutral/side{
dir = 1
},
@@ -2968,11 +2669,9 @@
/turf/open/floor/circuit/red,
/area/ruin/unpowered/syndicate_lava_base/main)
"iL" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 8;
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/turf/open/floor/circuit/red,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -3004,11 +2703,8 @@
icon_state = "1-4"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -3016,11 +2712,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3035,11 +2728,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3050,11 +2740,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3065,11 +2752,8 @@
"iT" = (
/obj/machinery/light/small,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 2
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3081,11 +2765,8 @@
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"iU" = (
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "2-8"
@@ -3099,18 +2780,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Dormitories APC";
- pixel_y = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = -24
},
/obj/structure/cable/yellow{
icon_state = "0-8"
@@ -3121,11 +2797,7 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral/side,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -3133,11 +2805,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral/corner{
@@ -3217,22 +2886,14 @@
name = "Cabin 1"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"jg" = (
/obj/machinery/door/airlock/maintenance,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -3244,23 +2905,17 @@
name = "Cabin 3"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"ji" = (
/obj/structure/cable/yellow{
icon_state = "0-2"
},
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 8;
name = "Primary Hallway APC";
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/turf/open/floor/plasteel/red/side{
dir = 8
@@ -3292,10 +2947,8 @@
icon_state = "sleeper_s";
dir = 4
},
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -3303,20 +2956,12 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
"jp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -3328,10 +2973,8 @@
dir = 8;
icon_state = "sleeper_s"
},
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -3373,11 +3016,7 @@
/area/ruin/unpowered/syndicate_lava_base/engineering)
"jw" = (
/obj/effect/turf_decal/bot,
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/toolcloset{
anchored = 1
@@ -3414,11 +3053,8 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -3426,11 +3062,8 @@
/obj/machinery/light/small{
dir = 8
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/grimy,
/area/ruin/unpowered/syndicate_lava_base/dormitories)
@@ -3453,11 +3086,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/main)
@@ -3468,11 +3098,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/yellow/side{
dir = 4
@@ -3487,11 +3114,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/machinery/door/airlock/engineering{
name = "Engineering";
@@ -3509,11 +3133,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -3524,11 +3145,9 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 8;
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/obj/structure/cable/yellow{
icon_state = "2-8"
@@ -3536,29 +3155,20 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"jJ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 6
},
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"jK" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3{
+ dir = 8
},
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -3608,11 +3218,7 @@
/area/ruin/unpowered/syndicate_lava_base/bar)
"jQ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -3631,11 +3237,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/main)
"jT" = (
@@ -3678,11 +3280,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -3720,11 +3318,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
},
/obj/structure/cable/yellow{
icon_state = "2-4"
@@ -3734,11 +3329,8 @@
/area/ruin/unpowered/syndicate_lava_base/main)
"kd" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 2
},
/obj/structure/cable/yellow{
icon_state = "1-4"
@@ -3753,11 +3345,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3772,11 +3361,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3787,11 +3373,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3804,11 +3387,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -3822,20 +3402,14 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 2
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/main)
"kj" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 8
},
/obj/structure/chair{
dir = 8
@@ -3849,11 +3423,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/machinery/door/airlock/engineering{
name = "Engineering";
req_access_txt = "150"
@@ -3861,11 +3431,7 @@
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"kl" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/turf/closed/wall/mineral/plastitanium/nodiagonal,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"km" = (
@@ -3884,11 +3450,8 @@
},
/area/ruin/unpowered/syndicate_lava_base/bar)
"ko" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/vault{
@@ -3896,20 +3459,15 @@
},
/area/ruin/unpowered/syndicate_lava_base/bar)
"kp" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
},
/turf/open/floor/plasteel/dark,
/area/ruin/unpowered/syndicate_lava_base/bar)
"kq" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 8;
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/obj/machinery/vending/coffee{
extended_inventory = 1
@@ -3924,11 +3482,7 @@
req_access_txt = "150"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -4005,11 +3559,8 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/visible,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 8;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible/layer3{
+ dir = 8
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -4017,12 +3568,10 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 1;
name = "Engineering APC";
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = 24
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -4030,11 +3579,8 @@
/obj/structure/cable/yellow{
icon_state = "0-8"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 9
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -4118,11 +3664,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/vault{
dir = 5
@@ -4150,11 +3692,7 @@
/area/ruin/unpowered/syndicate_lava_base/bar)
"kO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -4220,11 +3758,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/visible{
dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"kY" = (
@@ -4323,11 +3857,7 @@
name = "Bar"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/wood,
/area/ruin/unpowered/syndicate_lava_base/bar)
"lk" = (
@@ -4352,11 +3882,7 @@
/area/ruin/unpowered/syndicate_lava_base/bar)
"ll" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -4421,11 +3947,7 @@
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"ls" = (
@@ -4495,11 +4017,7 @@
/area/ruin/unpowered/syndicate_lava_base/bar)
"lB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/wood,
/area/ruin/unpowered/syndicate_lava_base/bar)
"lC" = (
@@ -4537,11 +4055,7 @@
/obj/item/vending_refill/coffee,
/obj/item/vending_refill/cola,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -4580,11 +4094,9 @@
},
/area/ruin/unpowered/syndicate_lava_base/medbay)
"lL" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/machinery/light/small{
dir = 8
@@ -4608,20 +4120,14 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"lN" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer3{
+ dir = 9
},
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -4669,11 +4175,9 @@
/turf/open/floor/plating,
/area/ruin/unpowered/syndicate_lava_base/arrivals)
"lU" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/structure/chair/stool,
/turf/open/floor/plasteel/vault{
@@ -4704,11 +4208,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -4719,11 +4220,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -4734,11 +4232,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/machinery/door/airlock{
name = "Bar Storage";
@@ -4753,11 +4248,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -4778,11 +4270,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
},
/obj/structure/cable/yellow{
icon_state = "1-8"
@@ -4801,11 +4290,7 @@
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"me" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"mf" = (
@@ -4813,11 +4298,9 @@
dir = 4;
pixel_x = 11
},
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 8;
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/medbay)
@@ -4932,12 +4415,10 @@
/obj/structure/table/wood,
/obj/machinery/light/small,
/obj/structure/cable/yellow,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Bar APC";
- pixel_y = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = -24
},
/turf/open/floor/wood,
/area/ruin/unpowered/syndicate_lava_base/bar)
@@ -4960,11 +4441,7 @@
"mz" = (
/obj/machinery/door/airlock/maintenance,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -4991,11 +4468,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"mC" = (
@@ -5141,11 +4614,7 @@
/area/ruin/unpowered/syndicate_lava_base/arrivals)
"mY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/obj/structure/cable/yellow{
icon_state = "1-2"
},
@@ -5163,11 +4632,7 @@
/area/ruin/unpowered/syndicate_lava_base/medbay)
"na" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
- },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,
/turf/open/floor/plasteel/floorgrime,
/area/ruin/unpowered/syndicate_lava_base/medbay)
"nb" = (
@@ -5266,22 +4731,16 @@
},
/area/ruin/unpowered/syndicate_lava_base/telecomms)
"nk" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/ruin/unpowered/syndicate_lava_base/telecomms)
"nl" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -5292,11 +4751,8 @@
dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 10
},
/obj/structure/noticeboard{
dir = 8;
@@ -5342,11 +4798,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 6
},
/obj/structure/cable/yellow{
icon_state = "2-4"
@@ -5360,22 +4813,17 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 1;
name = "Arrival Hallway APC";
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = 24
},
/obj/structure/cable/yellow{
icon_state = "0-4"
@@ -5388,11 +4836,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5405,11 +4850,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5420,11 +4862,8 @@
/area/ruin/unpowered/syndicate_lava_base/arrivals)
"nw" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 2;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 2
},
/obj/structure/cable/yellow{
icon_state = "1-4"
@@ -5441,11 +4880,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5459,11 +4895,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5476,11 +4909,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5546,11 +4976,9 @@
/turf/open/floor/plating/airless,
/area/ruin/unpowered/syndicate_lava_base/engineering)
"nH" = (
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/obj/machinery/light/small{
dir = 8
@@ -5575,11 +5003,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 5
},
/obj/structure/cable/yellow{
icon_state = "2-4"
@@ -5596,11 +5021,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5614,11 +5036,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5630,11 +5049,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5646,11 +5062,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5665,11 +5078,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5684,11 +5094,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5699,11 +5106,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5716,11 +5120,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/machinery/firealarm{
dir = 2;
@@ -5737,11 +5138,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{
+ dir = 1
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5754,19 +5152,14 @@
/obj/machinery/light/small{
dir = 1
},
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -5780,11 +5173,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{
+ dir = 9
},
/obj/structure/cable/yellow{
icon_state = "1-8"
@@ -5823,12 +5213,10 @@
pixel_y = -29
},
/obj/structure/cable/yellow,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 4;
name = "Medbay APC";
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/white/side{
@@ -5908,12 +5296,10 @@
dir = 8
},
/obj/structure/cable/yellow,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 2;
name = "Telecommunications APC";
- pixel_y = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = -24
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -5951,11 +5337,8 @@
/turf/open/floor/plasteel/red/side,
/area/ruin/unpowered/syndicate_lava_base/arrivals)
"op" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1;
- piping_layer = 3;
- pixel_x = 5;
- pixel_y = 5
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{
+ dir = 1
},
/turf/open/floor/plasteel/red/side,
/area/ruin/unpowered/syndicate_lava_base/arrivals)
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
index 209ba76efa..5f76cdb32c 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm
@@ -6,39 +6,10 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien20"
- },
+/turf/closed/wall/mineral/abductor,
/area/lavaland/surface/outdoors)
"d" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien21"
- },
-/area/ruin/unpowered)
-"e" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien22"
- },
-/area/ruin/unpowered)
-"f" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien23"
- },
-/area/ruin/unpowered)
-"g" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien24"
- },
-/area/lavaland/surface/outdoors)
-"h" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien16"
- },
-/area/lavaland/surface/outdoors)
-"i" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien17"
- },
+/turf/closed/wall/mineral/abductor,
/area/ruin/unpowered)
"j" = (
/obj/machinery/abductor/experiment{
@@ -61,16 +32,6 @@
initial_gas_mix = "o2=16;n2=23;TEMP=300"
},
/area/ruin/unpowered)
-"m" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien18"
- },
-/area/ruin/unpowered)
-"n" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien19"
- },
-/area/lavaland/surface/outdoors)
"o" = (
/obj/item/hemostat/alien,
/turf/open/floor/plating/abductor{
@@ -89,11 +50,6 @@
initial_gas_mix = "o2=16;n2=23;TEMP=300"
},
/area/ruin/unpowered)
-"r" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien14"
- },
-/area/ruin/unpowered)
"s" = (
/obj/structure/table/optable/abductor,
/obj/item/cautery/alien,
@@ -108,11 +64,6 @@
initial_gas_mix = "o2=16;n2=23;TEMP=300"
},
/area/ruin/unpowered)
-"u" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien12"
- },
-/area/ruin/unpowered)
"v" = (
/obj/item/scalpel/alien,
/obj/item/surgical_drapes,
@@ -127,11 +78,6 @@
initial_gas_mix = "o2=16;n2=23;TEMP=300"
},
/area/ruin/unpowered)
-"x" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien10"
- },
-/area/ruin/unpowered)
"y" = (
/obj/machinery/abductor/gland_dispenser,
/turf/open/floor/plating/abductor{
@@ -152,36 +98,6 @@
initial_gas_mix = "o2=16;n2=23;TEMP=300"
},
/area/ruin/unpowered)
-"B" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien8"
- },
-/area/ruin/unpowered)
-"C" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien9"
- },
-/area/lavaland/surface/outdoors)
-"D" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien2"
- },
-/area/ruin/unpowered)
-"E" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien3"
- },
-/area/ruin/unpowered)
-"F" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien4"
- },
-/area/ruin/unpowered)
-"G" = (
-/turf/closed/indestructible/abductor{
- icon_state = "alien5"
- },
-/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
@@ -211,7 +127,7 @@ a
a
a
a
-h
+c
a
a
a
@@ -223,7 +139,7 @@ a
a
a
c
-i
+d
a
a
a
@@ -240,54 +156,54 @@ k
k
a
y
-D
+d
a
"}
(6,1,1) = {"
a
a
-e
+d
k
o
s
v
z
-E
+d
a
"}
(7,1,1) = {"
a
a
-f
+d
l
p
k
w
A
-F
+d
a
"}
(8,1,1) = {"
a
a
-g
-m
+c
+d
q
t
q
-B
-G
+d
+c
a
"}
(9,1,1) = {"
a
a
b
-n
-r
-u
-x
-C
+c
+d
+d
+d
+c
b
a
"}
diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
index b172e24f29..6229854c09 100644
--- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
@@ -12,10 +12,8 @@
/obj/machinery/computer/message_monitor{
dir = 2
},
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -210,11 +208,9 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 4;
- pixel_x = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = -24
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/listeningstation)
@@ -517,10 +513,8 @@
},
/area/ruin/space/has_grav/listeningstation)
"aU" = (
-/obj/machinery/airalarm{
- pixel_y = 24;
- req_access = null;
- req_access_txt = "150"
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -640,11 +634,9 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 8;
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -811,12 +803,10 @@
icon_state = "0-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/power/apc{
+/obj/machinery/power/apc/syndicate{
dir = 4;
name = "Syndicate Listening Post APC";
- pixel_x = 24;
- req_access = null;
- req_access_txt = "150"
+ pixel_x = 24
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
@@ -948,11 +938,9 @@
},
/obj/machinery/iv_drip,
/obj/machinery/light/small,
-/obj/machinery/airalarm{
+/obj/machinery/airalarm/syndicate{
dir = 1;
- pixel_y = -24;
- req_access = null;
- req_access_txt = "150"
+ pixel_y = -24
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
diff --git a/_maps/cit_map_files/generic/CentCom.dmm b/_maps/cit_map_files/generic/CentCom.dmm
index 1b5d94d8c1..bb43763955 100644
--- a/_maps/cit_map_files/generic/CentCom.dmm
+++ b/_maps/cit_map_files/generic/CentCom.dmm
@@ -2526,6 +2526,10 @@
/obj/machinery/capture_the_flag/red,
/turf/open/floor/circuit/green/anim,
/area/ctf)
+"hH" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/wood,
+/area/centcom/holding)
"hI" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -3324,6 +3328,10 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/centcom/supply)
+"jO" = (
+/obj/machinery/vending/cigarette,
+/turf/open/floor/wood,
+/area/centcom/holding)
"jP" = (
/obj/machinery/conveyor_switch/oneway{
dir = 8;
@@ -4178,7 +4186,6 @@
/area/syndicate_mothership)
"mb" = (
/obj/structure/table/reinforced,
-/obj/machinery/computer/stockexchange,
/turf/open/floor/plasteel/vault{
dir = 8
},
@@ -5254,7 +5261,6 @@
/area/centcom/ferry)
"oM" = (
/obj/structure/table/reinforced,
-/obj/machinery/computer/stockexchange,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
@@ -5320,6 +5326,19 @@
dir = 8
},
/area/tdome/tdomeobserve)
+"oU" = (
+/obj/structure/closet/secure_closet/bar{
+ req_access_txt = "25"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"oV" = (
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/wood,
+/area/centcom/holding)
"oW" = (
/obj/structure/flora/bush,
/obj/effect/light_emitter{
@@ -5564,6 +5583,70 @@
dir = 8
},
/area/centcom/control)
+"px" = (
+/obj/machinery/chem_dispenser/drinks/beer,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"py" = (
+/obj/machinery/chem_dispenser/drinks,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pz" = (
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pA" = (
+/obj/machinery/vending/cola/random,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pB" = (
+/obj/structure/rack,
+/obj/item/toy/sword,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/coin/gold{
+ pixel_x = 8;
+ pixel_y = -3
+ },
+/obj/item/camera,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pC" = (
+/obj/structure/rack,
+/obj/item/toy/gun,
+/obj/item/coin/gold{
+ pixel_w = -9;
+ pixel_y = 6
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pD" = (
+/obj/machinery/computer/arcade/battle,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pE" = (
+/obj/machinery/computer/arcade/orion_trail,
+/turf/open/floor/wood,
+/area/centcom/holding)
"pF" = (
/obj/machinery/door/airlock/centcom{
name = "Auxillary Dock";
@@ -5688,6 +5771,25 @@
dir = 5
},
/area/centcom/ferry)
+"pS" = (
+/obj/machinery/computer/slot_machine,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pT" = (
+/obj/machinery/vending/snack/random,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pU" = (
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pV" = (
+/obj/item/clothing/head/that,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pW" = (
+/turf/open/floor/carpet/black,
+/area/centcom/holding)
"pX" = (
/obj/item/storage/crayons,
/obj/structure/table,
@@ -5953,6 +6055,30 @@
"qE" = (
/turf/closed/indestructible/riveted/uranium,
/area/wizard_station)
+"qF" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding)
+"qG" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"qH" = (
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"qI" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
"qJ" = (
/obj/machinery/computer/shuttle/syndicate/recall,
/turf/open/floor/plasteel/bar{
@@ -6078,6 +6204,16 @@
/obj/machinery/computer/shuttle,
/turf/open/floor/engine/cult,
/area/wizard_station)
+"rb" = (
+/obj/item/lighter,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"rc" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/cola,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
"rd" = (
/obj/structure/flora/grass/brown,
/obj/effect/light_emitter{
@@ -6504,6 +6640,48 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
+"rY" = (
+/obj/item/dice/d20,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"rZ" = (
+/obj/structure/rack,
+/obj/item/clothing/head/that,
+/obj/item/clothing/under/suit_jacket,
+/obj/item/clothing/accessory/waistcoat,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sa" = (
+/obj/structure/rack,
+/obj/item/storage/crayons,
+/obj/item/gun/ballistic/automatic/toy/pistol,
+/obj/item/ammo_box/foambox,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sb" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sc" = (
+/obj/structure/rack,
+/obj/item/storage/crayons,
+/obj/item/gun/ballistic/shotgun/toy/crossbow,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sd" = (
+/obj/structure/rack,
+/obj/item/clothing/shoes/laceup,
+/obj/item/clothing/under/suit_jacket/female{
+ desc = "A black trouser suit for women. Very formal.";
+ name = "black suit";
+ pixel_x = 3;
+ pixel_y = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"se" = (
/obj/machinery/light{
dir = 8
@@ -6905,6 +7083,34 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
+"sY" = (
+/mob/living/simple_animal/bot/medbot,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sZ" = (
+/obj/machinery/sleeper{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"ta" = (
+/obj/machinery/light,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tb" = (
+/obj/machinery/vending/clothing,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tc" = (
+/obj/structure/closet/wardrobe/mixed,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"td" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/costume,
+/obj/effect/spawner/lootdrop/costume,
+/turf/open/floor/wood,
+/area/centcom/holding)
"te" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/pizzaslice/mushroom,
@@ -6945,6 +7151,40 @@
},
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
+"tj" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/costume,
+/obj/effect/spawner/lootdrop/costume,
+/obj/machinery/light,
+/obj/machinery/button/door{
+ id = "Ninjaholdingsuicide";
+ name = "SUICIDE CHAMBER LOCK";
+ normaldoorcontrol = 1;
+ pixel_x = 4;
+ pixel_y = -24;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tk" = (
+/obj/machinery/door/airlock/wood/glass{
+ name = "Private Rooms"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tl" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ id_tag = "Ninjaholdingsuicide";
+ locked = 1;
+ name = "SUICIDE CHAMBER"
+ },
+/turf/open/floor/wood{
+ icon_state = "wood-broken5"
+ },
+/area/centcom/holding)
+"tm" = (
+/turf/open/floor/carpet,
+/area/centcom/holding)
"tn" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -7245,6 +7485,10 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/evac)
+"tW" = (
+/obj/structure/table/wood/fancy/black,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"tX" = (
/obj/machinery/door/airlock{
icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
@@ -7252,6 +7496,40 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
+"tY" = (
+/obj/structure/chair/comfy/black{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"tZ" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"ua" = (
+/obj/structure/plasticflaps,
+/turf/open/floor/wood{
+ icon_state = "wood-broken4"
+ },
+/area/centcom/holding)
+"ub" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom1";
+ name = "Room 1"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"uc" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
"ud" = (
/obj/machinery/door/poddoor/shutters{
id = "nukeop_ready";
@@ -7265,6 +7543,25 @@
},
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
+"uf" = (
+/turf/open/lava,
+/area/centcom/holding)
+"ug" = (
+/obj/machinery/button/door{
+ id = "Proom1";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"uh" = (
+/turf/open/chasm/lavaland,
+/area/centcom/holding)
"ui" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -7466,12 +7763,37 @@
/obj/structure/chair/wood/wings,
/turf/open/floor/carpet,
/area/wizard_station)
+"uG" = (
+/obj/structure/chair/sofa/left,
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"uH" = (
+/obj/structure/chair/sofa/corner{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"uI" = (
+/obj/structure/chair/sofa,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"uJ" = (
/obj/machinery/door/airlock/external{
req_access_txt = "150"
},
/turf/open/floor/plating,
/area/syndicate_mothership/control)
+"uK" = (
+/obj/machinery/button/door{
+ id = "Proom2";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
"uL" = (
/obj/machinery/button/door{
id = "nukeop_ready";
@@ -7490,6 +7812,10 @@
},
/turf/open/floor/mineral/plastitanium,
/area/syndicate_mothership/control)
+"uN" = (
+/obj/structure/table/wood/poker,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"uO" = (
/obj/machinery/door/airlock/centcom{
name = "Shuttle Control Office";
@@ -7695,6 +8021,45 @@
},
/turf/open/floor/carpet,
/area/wizard_station)
+"vo" = (
+/obj/structure/chair/sofa{
+ icon_state = "sofamiddle";
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vp" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"vq" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom2";
+ name = "Room 2"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"vr" = (
+/obj/structure/chair/sofa/corner{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vs" = (
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vt" = (
+/obj/machinery/vending/games,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"vu" = (
/obj/item/storage/box/drinkingglasses,
/obj/item/reagent_containers/food/drinks/bottle/rum,
@@ -7717,6 +8082,19 @@
/obj/item/toy/nuke,
/turf/open/floor/wood,
/area/syndicate_mothership/control)
+"vy" = (
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vz" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom3";
+ name = "Room 3"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"vA" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/directions/engineering{
@@ -7984,6 +8362,68 @@
},
/turf/open/floor/carpet,
/area/wizard_station)
+"we" = (
+/obj/machinery/button/door{
+ id = "Proom3";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"wf" = (
+/obj/machinery/button/door{
+ id = "Proom4";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"wg" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom4";
+ name = "Room 4"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wh" = (
+/obj/structure/table/wood,
+/obj/item/soap/nanotrasen,
+/obj/item/reagent_containers/spray/cleaner,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wi" = (
+/obj/structure/table/wood,
+/obj/structure/bedsheetbin,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wj" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom5";
+ name = "Room 5"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wk" = (
+/obj/machinery/button/door{
+ id = "Proom5";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"wl" = (
/obj/machinery/light,
/turf/open/floor/wood,
@@ -10765,77 +11205,6 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
-"EZ" = (
-/obj/structure/table,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fa" = (
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fb" = (
-/obj/structure/closet/secure_closet/bar{
- req_access_txt = "25"
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fc" = (
-/obj/structure/reagent_dispensers/beerkeg,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fd" = (
-/obj/structure/table,
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fe" = (
-/obj/structure/rack,
-/obj/item/camera,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Ff" = (
-/obj/structure/rack,
-/obj/item/toy/sword,
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Fg" = (
-/obj/structure/rack,
-/obj/item/toy/gun,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Fh" = (
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Fi" = (
/turf/open/floor/plating/beach/sand,
/area/centcom/holding)
@@ -10952,19 +11321,6 @@
dir = 5
},
/area/tdome/tdomeobserve)
-"FA" = (
-/obj/structure/table,
-/obj/item/clothing/head/that,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FB" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"FC" = (
/obj/item/camera,
/turf/open/floor/plating/beach/sand,
@@ -11071,41 +11427,6 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
-"FU" = (
-/obj/structure/table,
-/obj/item/ammo_box/foambox,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FV" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/shaker,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FW" = (
-/obj/structure/table,
-/obj/item/lighter,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FX" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FY" = (
-/obj/structure/table,
-/obj/item/dice/d20,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
"FZ" = (
/obj/structure/chair/stool{
pixel_y = 8
@@ -11226,13 +11547,6 @@
},
/turf/open/lava,
/area/wizard_station)
-"Gs" = (
-/obj/structure/rack,
-/obj/item/clothing/head/that,
-/obj/item/clothing/under/suit_jacket,
-/obj/item/clothing/accessory/waistcoat,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Gt" = (
/obj/item/toy/beach_ball,
/turf/open/floor/plating/beach/sand,
@@ -11280,18 +11594,6 @@
},
/turf/open/lava/airless,
/area/wizard_station)
-"GA" = (
-/obj/structure/rack,
-/obj/item/storage/crayons,
-/obj/item/gun/ballistic/automatic/toy/pistol,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"GB" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"GC" = (
/obj/structure/table,
/obj/structure/bedsheetbin,
@@ -11524,12 +11826,6 @@
/obj/structure/shuttle/engine/propulsion,
/turf/open/space,
/area/wizard_station)
-"GY" = (
-/obj/structure/rack,
-/obj/item/storage/crayons,
-/obj/item/gun/ballistic/shotgun/toy/crossbow,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"GZ" = (
/turf/open/floor/plating/beach/coastline_b,
/area/centcom/holding)
@@ -11582,33 +11878,6 @@
dir = 4
},
/area/tdome/tdomeobserve)
-"Hi" = (
-/obj/structure/rack,
-/obj/item/clothing/shoes/laceup,
-/obj/item/clothing/under/suit_jacket/female{
- desc = "A black trouser suit for women. Very formal.";
- name = "black suit";
- pixel_x = 3;
- pixel_y = 1
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Hj" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Hk" = (
-/obj/structure/table,
-/obj/item/gun/ballistic/automatic/toy/pistol,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Hl" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/light,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Hm" = (
/turf/open/floor/plating/beach/water,
/area/centcom/holding)
@@ -39485,25 +39754,25 @@ aa
aa
aa
ED
-EZ
-EZ
-FU
-Gs
-GA
-GY
-Hi
+hH
+pU
+qG
+rZ
+sa
+sc
+sd
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
ED
ED
ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -39742,25 +40011,25 @@ aa
aa
aa
ED
-Fa
-Fa
-Fa
-Fh
-Fh
-Fh
-Fh
+jO
+pU
+pU
+pW
+pW
+pW
+pU
Hy
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uH
+vo
+vr
+ED
+uH
+vo
+vr
+ED
aa
aa
aa
@@ -39999,25 +40268,25 @@ aa
aa
aa
ED
-Fb
-Fa
-FV
-FB
-Fh
-Fh
-Fh
+oU
+pU
+qH
+qF
+pW
+pW
+pU
Hz
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uI
+uN
+vy
+ED
+uI
+uN
+vy
+ED
aa
aa
aa
@@ -40256,25 +40525,25 @@ aa
aa
aa
ED
-Fc
-Fa
-EZ
-FB
-Fh
-Fh
-Fh
+oV
+pU
+qI
+qF
+pW
+pW
+sY
Hz
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uG
+uN
+vs
+ED
+uG
+uN
+vs
+ED
aa
aa
aa
@@ -40513,25 +40782,25 @@ aa
aa
aa
ED
-Fc
-Fa
-FW
-FB
-Fh
-Fh
-Fh
+px
+pU
+rb
+qF
+pW
+pW
+sZ
Hy
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+tm
+tm
+tm
+ED
+tm
+tm
+tm
+ED
aa
aa
aa
@@ -40770,25 +41039,25 @@ aa
aa
aa
ED
-Fa
-Fa
-FX
-FB
-Fh
-Fh
-Hj
+py
+pU
+rc
+qF
+pW
+pW
+ta
ED
ED
ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uK
+tm
+vt
+ED
+wf
+tm
+vt
+ED
aa
aa
aa
@@ -41027,26 +41296,26 @@ aa
aa
aa
ED
-Fd
-FA
-FY
-FB
-Fh
-Fh
-Fh
+pz
+pV
+rY
+qF
+pW
+pW
+pU
+ED
+ED
+ED
+ED
+ED
+vq
+ED
+ED
+ED
+wg
+ED
+ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -41284,13 +41553,25 @@ aa
aa
aa
ED
-Fe
-Fh
-Fh
-Fh
-Fh
-Fh
-Fh
+pA
+pW
+pW
+pW
+pW
+pW
+pU
+tk
+pU
+tZ
+pU
+pU
+pU
+pU
+pU
+pU
+pU
+tZ
+wh
ED
aa
aa
@@ -41301,18 +41582,6 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
KH
KU
Lb
@@ -41541,13 +41810,25 @@ aa
aa
aa
ED
-Ff
-Fh
-Fh
-Fh
-Fh
-Fh
-FB
+pB
+pW
+pW
+pW
+pW
+pW
+pU
+tk
+pU
+pU
+pU
+pU
+vp
+pU
+pU
+pU
+pU
+pU
+wi
ED
aa
aa
@@ -41557,18 +41838,6 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
KH
KH
KS
@@ -41798,26 +42067,26 @@ aa
aa
aa
ED
-Fg
-Fh
-Fh
-Fh
-Fh
-FB
-Hk
+pC
+pW
+pW
+pW
+pW
+pW
+tb
+ED
+ED
+ub
+ED
+ED
+ED
+vz
+ED
+ED
+ED
+wj
+ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42055,26 +42324,26 @@ aa
aa
aa
ED
-Fh
-FB
-Fh
-Fh
-Fh
-Fh
-FB
+pD
+qF
+pW
+pW
+pW
+pW
+tc
+ED
+tY
+tm
+ug
+ED
+tY
+tm
+we
+ED
+tY
+tm
+wk
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42312,26 +42581,26 @@ aa
aa
aa
ED
-Fi
-Fi
-Fi
-Fi
-GB
-GB
-Hl
+pE
+qF
+pW
+pW
+pW
+pW
+td
+ED
+tW
+uc
+tm
+ED
+tW
+uc
+tm
+ED
+tW
+uc
+tm
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42569,26 +42838,26 @@ aa
aa
aa
ED
-Fj
-Fi
-Fi
-Fi
-Fi
-GZ
-Hm
+pS
+qF
+pW
+pW
+pW
+pW
+td
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42826,6 +43095,777 @@ aa
aa
aa
ED
+pS
+qF
+pW
+pW
+pW
+pW
+tj
+ED
+ED
+ED
+ED
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(115,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ED
+pT
+pU
+pU
+pU
+sb
+sb
+sb
+tl
+ua
+uf
+uh
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(116,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ED
+Fj
+Fi
+Fi
+Fi
+Fi
+GZ
+Hm
+ED
+ED
+ED
+ED
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(117,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ED
Fi
Fi
FZ
@@ -42892,7 +43932,7 @@ aa
aa
aa
"}
-(115,1,1) = {"
+(118,1,1) = {"
aa
aa
aa
@@ -43149,7 +44189,7 @@ aa
aa
aa
"}
-(116,1,1) = {"
+(119,1,1) = {"
aa
aa
aa
@@ -43406,7 +44446,7 @@ aa
aa
aa
"}
-(117,1,1) = {"
+(120,1,1) = {"
aa
aa
aa
@@ -43663,777 +44703,6 @@ aa
aa
aa
"}
-(118,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ED
-ED
-ED
-ED
-ED
-ED
-ED
-ED
-ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(119,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(120,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
(121,1,1) = {"
aa
aa
@@ -44624,15 +44893,15 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
aa
aa
aa
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 650439de96..d945d49116 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -11754,22 +11754,8 @@
/turf/open/floor/circuit,
/area/ai_monitored/nuke_storage)
"aEN" = (
-/obj/structure/closet/crate{
- name = "Gold Crate"
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_x = -1;
- pixel_y = 5
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_y = 2
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_x = 1;
- pixel_y = -2
- },
-/obj/item/storage/belt/champion,
/obj/effect/turf_decal/bot_white/right,
+/obj/structure/closet/crate/goldcrate,
/turf/open/floor/plasteel/vault{
dir = 1
},
@@ -11781,30 +11767,8 @@
/turf/open/floor/circuit,
/area/ai_monitored/nuke_storage)
"aEP" = (
-/obj/item/coin/silver{
- pixel_x = 7;
- pixel_y = 12
- },
-/obj/item/coin/silver{
- pixel_x = 12;
- pixel_y = 7
- },
-/obj/item/coin/silver{
- pixel_x = 4;
- pixel_y = 8
- },
-/obj/item/coin/silver{
- pixel_x = -6;
- pixel_y = 5
- },
-/obj/item/coin/silver{
- pixel_x = 5;
- pixel_y = -8
- },
-/obj/structure/closet/crate{
- name = "Silver Crate"
- },
/obj/effect/turf_decal/bot_white/left,
+/obj/structure/closet/crate/silvercrate,
/turf/open/floor/plasteel/vault{
dir = 4
},
@@ -33128,14 +33092,7 @@
/area/storage/tech)
"bGt" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/borgupload{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/circuitboard/computer/aiupload{
- pixel_x = 2;
- pixel_y = -2
- },
+/obj/effect/spawner/lootdrop/techstorage/AI,
/turf/open/floor/plasteel,
/area/storage/tech)
"bGu" = (
@@ -33152,45 +33109,20 @@
/area/storage/tech)
"bGw" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/pandemic{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/rdconsole,
-/obj/item/circuitboard/machine/rdserver{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/machine/destructive_analyzer,
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/item/circuitboard/computer/aifixer,
-/obj/item/circuitboard/computer/teleporter,
-/obj/item/circuitboard/machine/circuit_imprinter,
-/obj/item/circuitboard/machine/mechfab,
+/obj/effect/spawner/lootdrop/techstorage/rnd,
/turf/open/floor/plating,
/area/storage/tech)
"bGx" = (
/obj/structure/rack,
-/obj/item/circuitboard/machine/telecomms/processor,
-/obj/item/circuitboard/machine/telecomms/receiver,
-/obj/item/circuitboard/machine/telecomms/server,
-/obj/item/circuitboard/machine/telecomms/bus,
-/obj/item/circuitboard/machine/telecomms/broadcaster,
-/obj/item/circuitboard/computer/message_monitor{
- pixel_y = -5
- },
+/obj/effect/spawner/lootdrop/techstorage/tcomms,
/turf/open/floor/plating,
/area/storage/tech)
"bGy" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/mining,
-/obj/item/circuitboard/machine/autolathe{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/computer/arcade/battle,
+/obj/effect/spawner/lootdrop/techstorage/service,
/turf/open/floor/plating,
/area/storage/tech)
"bGz" = (
@@ -33668,21 +33600,10 @@
/area/crew_quarters/theatre)
"bHG" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/crew{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/circuitboard/computer/card{
- pixel_x = 2;
- pixel_y = -2
- },
-/obj/item/circuitboard/computer/communications{
- pixel_x = 5;
- pixel_y = -5
- },
/obj/machinery/light/small{
dir = 8
},
+/obj/effect/spawner/lootdrop/techstorage/command,
/turf/open/floor/plasteel,
/area/storage/tech)
"bHH" = (
@@ -34387,14 +34308,7 @@
/area/storage/tech)
"bJh" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/robotics{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/mecha_control{
- pixel_x = 1;
- pixel_y = -1
- },
+/obj/effect/spawner/lootdrop/techstorage/RnD_secure,
/turf/open/floor/plasteel,
/area/storage/tech)
"bJi" = (
@@ -34410,43 +34324,17 @@
/area/storage/tech)
"bJk" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/cloning,
-/obj/item/circuitboard/computer/med_data{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/machine/clonescanner,
-/obj/item/circuitboard/machine/clonepod,
-/obj/item/circuitboard/computer/scan_consolenew,
-/obj/item/circuitboard/machine/smoke_machine,
+/obj/effect/spawner/lootdrop/techstorage/medical,
/turf/open/floor/plating,
/area/storage/tech)
"bJl" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/powermonitor{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/stationalert{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/circuitboard/computer/atmos_alert{
- pixel_x = 3;
- pixel_y = -3
- },
+/obj/effect/spawner/lootdrop/techstorage/engineering,
/turf/open/floor/plating,
/area/storage/tech)
"bJm" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/secure_data{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/security{
- pixel_x = 1;
- pixel_y = -1
- },
+/obj/effect/spawner/lootdrop/techstorage/security,
/turf/open/floor/plating,
/area/storage/tech)
"bJn" = (
@@ -45458,28 +45346,10 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"ckG" = (
-/obj/structure/closet/crate{
- name = "solar pack crate"
- },
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/circuitboard/computer/solar_control,
-/obj/item/electronics/tracker,
-/obj/item/paper/guides/jobs/engi/solars,
/obj/effect/turf_decal/bot{
dir = 1
},
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel,
/area/engine/engineering)
"ckH" = (
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 9c869596c9..02529a8c6b 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -2953,8 +2953,8 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"alK" = (
-/obj/structure/closet/secure_closet/freezer/kitchen,
/obj/effect/turf_decal/bot,
+/obj/structure/closet/secure_closet/freezer/kitchen/maintenance,
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
"alL" = (
@@ -5799,12 +5799,6 @@
dir = 4
},
/area/maintenance/disposal)
-"asj" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/turf/open/floor/plasteel/airless/solarpanel,
-/area/solar/port/fore)
"ask" = (
/obj/structure/lattice/catwalk,
/turf/open/space,
@@ -32288,23 +32282,10 @@
},
/area/security/nuke_storage)
"bvQ" = (
-/obj/structure/closet/crate{
- name = "Silver Crate"
- },
/obj/machinery/light/small{
dir = 1
},
-/obj/item/coin/silver{
- pixel_x = -6
- },
-/obj/item/coin/silver{
- pixel_x = 6
- },
-/obj/item/coin/silver{
- pixel_x = 6
- },
-/obj/item/coin/silver,
-/obj/item/coin/silver,
+/obj/structure/closet/crate/silvercrate,
/turf/open/floor/plasteel/vault{
dir = 8
},
@@ -32718,30 +32699,17 @@
/area/hallway/primary/port)
"bwJ" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/robotics{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/mecha_control,
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/effect/spawner/lootdrop/techstorage/command,
/turf/open/floor/plasteel,
/area/storage/tech)
"bwK" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/communications{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/card,
-/obj/item/circuitboard/computer/crew{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/structure/cable/white{
icon_state = "2-8"
},
@@ -32752,25 +32720,18 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line,
+/obj/effect/spawner/lootdrop/techstorage/AI,
/turf/open/floor/plasteel,
/area/storage/tech)
"bwL" = (
/obj/structure/rack,
-/obj/item/circuitboard/aicore{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/aiupload,
-/obj/item/circuitboard/computer/borgupload{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/effect/turf_decal/stripes/line{
dir = 6
},
+/obj/effect/spawner/lootdrop/techstorage/RnD_secure,
/turf/open/floor/plasteel,
/area/storage/tech)
"bwM" = (
@@ -35297,17 +35258,12 @@
},
/area/security/nuke_storage)
"bBU" = (
-/obj/structure/closet/crate{
- name = "Gold Crate"
- },
-/obj/item/storage/belt/champion,
/obj/machinery/airalarm{
dir = 1;
pixel_y = -22
},
/obj/machinery/light/small,
-/obj/item/stack/sheet/mineral/gold,
-/obj/item/stack/sheet/mineral/gold,
+/obj/structure/closet/crate/goldcrate,
/turf/open/floor/plasteel/vault{
dir = 8
},
@@ -37169,32 +37125,14 @@
/area/storage/tech)
"bET" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/scan_consolenew{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/med_data,
-/obj/item/circuitboard/computer/pandemic{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/effect/turf_decal/bot,
-/obj/item/circuitboard/machine/smoke_machine,
+/obj/effect/spawner/lootdrop/techstorage/service,
/turf/open/floor/plasteel,
/area/storage/tech)
"bEU" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/aifixer{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/rdconsole,
-/obj/item/circuitboard/machine/rdserver{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/effect/turf_decal/bot,
-/obj/item/circuitboard/machine/autolathe,
+/obj/effect/spawner/lootdrop/techstorage/medical,
/turf/open/floor/plasteel,
/area/storage/tech)
"bEV" = (
@@ -38079,30 +38017,14 @@
/area/storage/tech)
"bGD" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/cloning{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/machine/clonescanner,
-/obj/item/circuitboard/machine/clonepod{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/effect/turf_decal/bot,
+/obj/effect/spawner/lootdrop/techstorage/security,
/turf/open/floor/plasteel,
/area/storage/tech)
"bGE" = (
/obj/structure/rack,
-/obj/item/circuitboard/machine/destructive_analyzer{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/machine/mechfab,
-/obj/item/circuitboard/machine/circuit_imprinter{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/effect/turf_decal/bot,
+/obj/effect/spawner/lootdrop/techstorage/rnd,
/turf/open/floor/plasteel,
/area/storage/tech)
"bGF" = (
@@ -38971,7 +38893,6 @@
dir = 4
},
/obj/effect/turf_decal/bot,
-/obj/item/circuitboard/machine/autolathe,
/turf/open/floor/plasteel,
/area/storage/tech)
"bIu" = (
@@ -39924,31 +39845,16 @@
/area/storage/tech)
"bKp" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/security{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/prisoner,
-/obj/item/circuitboard/computer/secure_data{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/bot,
+/obj/item/electronics/apc,
+/obj/item/electronics/airalarm,
/turf/open/floor/plasteel,
/area/storage/tech)
"bKq" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/atmos_alert{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/powermonitor,
-/obj/item/circuitboard/computer/stationalert{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/effect/turf_decal/bot,
+/obj/effect/spawner/lootdrop/techstorage/engineering,
/turf/open/floor/plasteel,
/area/storage/tech)
"bKr" = (
@@ -40845,30 +40751,14 @@
pixel_y = 3
},
/obj/item/circuitboard/machine/teleporter_station,
-/obj/item/circuitboard/computer/teleporter{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/storage/tech)
"bMi" = (
/obj/structure/rack,
-/obj/item/circuitboard/machine/telecomms/server{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/machine/telecomms/relay,
-/obj/item/circuitboard/machine/telecomms/receiver,
-/obj/item/circuitboard/machine/telecomms/processor,
-/obj/item/circuitboard/machine/telecomms/hub,
-/obj/item/circuitboard/machine/telecomms/bus,
-/obj/item/circuitboard/machine/telecomms/broadcaster{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/effect/turf_decal/bot,
+/obj/effect/spawner/lootdrop/techstorage/tcomms,
/turf/open/floor/plasteel,
/area/storage/tech)
"bMj" = (
@@ -45017,6 +44907,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"bUw" = (
@@ -46188,13 +46081,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/neutral,
/area/hallway/primary/port)
-"bWH" = (
-/obj/machinery/door/firedoor,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/hallway/primary/port)
"bWI" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/neutral,
@@ -47415,6 +47301,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/port)
"bYS" = (
@@ -56553,6 +56442,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 2
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"crY" = (
@@ -56560,6 +56452,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 2
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"crZ" = (
@@ -77373,6 +77268,12 @@
/obj/machinery/light{
dir = 1
},
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
/turf/open/floor/plasteel/whitepurple/side{
dir = 1
},
@@ -78220,6 +78121,9 @@
dir = 10
},
/obj/structure/chair/comfy,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
/turf/open/floor/plasteel/whitepurple/side{
dir = 8
},
@@ -78230,6 +78134,9 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/vending/snack/random,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
/turf/open/floor/plasteel/whitepurple/side{
dir = 4
},
@@ -80499,6 +80406,9 @@
dir = 9
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
/turf/open/floor/plasteel/whitepurple/side{
dir = 8
},
@@ -80524,6 +80434,7 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
+/obj/effect/turf_decal/stripes/corner,
/turf/open/floor/plasteel/whitepurple/side{
dir = 4
},
@@ -88708,6 +88619,12 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
/turf/open/floor/plasteel/neutral/side,
/area/science/mixing)
"dHg" = (
@@ -89263,6 +89180,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
/turf/open/floor/plasteel/neutral/side{
dir = 4
},
@@ -89288,6 +89211,10 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
/turf/open/floor/plasteel/neutral/side{
dir = 8;
heat_capacity = 1e+006
@@ -90061,6 +89988,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
/turf/open/floor/plasteel/neutral/side{
dir = 1
},
@@ -100658,6 +100589,10 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/light,
/obj/structure/reagent_dispensers/water_cooler,
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
/turf/open/floor/plasteel/whitepurple/side,
/area/science/misc_lab)
"uYS" = (
@@ -119104,7 +119039,7 @@ aoG
apI
aqJ
aaa
-asj
+aoG
apI
aqJ
aaa
@@ -132520,7 +132455,7 @@ bOp
bQq
bDu
bUv
-bWH
+bWC
bYR
caG
caG
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 303d28895d..e6ef58c9af 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -7234,14 +7234,7 @@
/area/maintenance/port/fore)
"apx" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/secure_data{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/security{
- pixel_x = 1;
- pixel_y = -1
- },
+/obj/effect/spawner/lootdrop/techstorage/service,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"apy" = (
@@ -12528,25 +12521,11 @@
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aAP" = (
-/obj/structure/closet/crate{
- name = "Gold Crate"
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_x = -1;
- pixel_y = 5
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_y = 2
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_x = 1;
- pixel_y = -2
- },
-/obj/item/storage/belt/champion,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
/obj/effect/turf_decal/bot_white/right,
+/obj/structure/closet/crate/goldcrate,
/turf/open/floor/plasteel/vault{
dir = 1
},
@@ -12580,30 +12559,8 @@
},
/area/security/nuke_storage)
"aAT" = (
-/obj/item/coin/silver{
- pixel_x = 7;
- pixel_y = 12
- },
-/obj/item/coin/silver{
- pixel_x = 12;
- pixel_y = 7
- },
-/obj/item/coin/silver{
- pixel_x = 4;
- pixel_y = 8
- },
-/obj/item/coin/silver{
- pixel_x = -6;
- pixel_y = 5
- },
-/obj/item/coin/silver{
- pixel_x = 5;
- pixel_y = -8
- },
-/obj/structure/closet/crate{
- name = "Silver Crate"
- },
/obj/effect/turf_decal/bot_white/left,
+/obj/structure/closet/crate/silvercrate,
/turf/open/floor/plasteel/vault{
dir = 1
},
@@ -15507,28 +15464,10 @@
},
/area/engine/engineering)
"aGT" = (
-/obj/structure/closet/crate{
- name = "solar pack crate"
- },
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/circuitboard/computer/solar_control,
-/obj/item/electronics/tracker,
-/obj/item/paper/guides/jobs/engi/solars,
/obj/effect/turf_decal/bot{
dir = 1
},
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel{
dir = 1
},
@@ -23157,45 +23096,20 @@
/area/storage/tech)
"aYj" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/pandemic{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/rdconsole,
-/obj/item/circuitboard/machine/rdserver{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/machine/destructive_analyzer,
-/obj/item/circuitboard/computer/aifixer,
-/obj/item/circuitboard/computer/teleporter,
-/obj/item/circuitboard/machine/circuit_imprinter,
-/obj/item/circuitboard/machine/mechfab,
+/obj/effect/spawner/lootdrop/techstorage/engineering,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"aYk" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/mining,
-/obj/item/circuitboard/machine/autolathe{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/computer/arcade/battle,
/obj/machinery/ai_status_display{
pixel_y = 31
},
+/obj/effect/spawner/lootdrop/techstorage/medical,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"aYl" = (
/obj/structure/rack,
-/obj/item/circuitboard/machine/telecomms/processor,
-/obj/item/circuitboard/machine/telecomms/receiver,
-/obj/item/circuitboard/machine/telecomms/server,
-/obj/item/circuitboard/machine/telecomms/bus,
-/obj/item/circuitboard/machine/telecomms/broadcaster,
-/obj/item/circuitboard/computer/message_monitor{
- pixel_y = -5
- },
+/obj/effect/spawner/lootdrop/techstorage/rnd,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"aYm" = (
@@ -24761,14 +24675,7 @@
/area/maintenance/starboard/fore)
"bbk" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/borgupload{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/circuitboard/computer/aiupload{
- pixel_x = 2;
- pixel_y = -2
- },
+/obj/effect/spawner/lootdrop/techstorage/AI,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"bbl" = (
@@ -24799,15 +24706,7 @@
/area/storage/tech)
"bbn" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/cloning,
-/obj/item/circuitboard/computer/med_data{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/machine/clonescanner,
-/obj/item/circuitboard/machine/clonepod,
-/obj/item/circuitboard/computer/scan_consolenew,
-/obj/item/circuitboard/machine/smoke_machine,
+/obj/effect/spawner/lootdrop/techstorage/security,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"bbo" = (
@@ -24815,19 +24714,8 @@
/area/maintenance/solars/port/fore)
"bbp" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/powermonitor{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/stationalert{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/circuitboard/computer/atmos_alert{
- pixel_x = 3;
- pixel_y = -3
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/effect/spawner/lootdrop/techstorage/tcomms,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"bbq" = (
@@ -25325,18 +25213,7 @@
/area/storage/tech)
"bcv" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/crew{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/circuitboard/computer/card{
- pixel_x = 2;
- pixel_y = -2
- },
-/obj/item/circuitboard/computer/communications{
- pixel_x = 5;
- pixel_y = -5
- },
+/obj/effect/spawner/lootdrop/techstorage/RnD_secure,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"bcw" = (
@@ -26032,14 +25909,7 @@
/area/maintenance/starboard/fore)
"bdX" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/robotics{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/mecha_control{
- pixel_x = 1;
- pixel_y = -1
- },
+/obj/effect/spawner/lootdrop/techstorage/command,
/turf/open/floor/plasteel/dark,
/area/storage/tech)
"bdY" = (
@@ -58226,15 +58096,6 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/science/storage)
-"ctk" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"ctl" = (
/obj/machinery/camera{
active_power_usage = 0;
@@ -112953,7 +112814,7 @@ cJa
cpG
kVo
dDu
-ctk
+kVo
cuc
cuZ
dyp
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index 735beb6d4c..1390460fd2 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -31225,9 +31225,6 @@
},
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
-"dWc" = (
-/turf/closed/mineral/random/labormineral,
-/area/space)
"dYC" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -33239,28 +33236,10 @@
},
/area/maintenance/starboard)
"sFp" = (
-/obj/structure/closet/crate{
- name = "solar pack crate"
- },
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/circuitboard/computer/solar_control,
-/obj/item/electronics/tracker,
-/obj/item/paper/guides/jobs/engi/solars,
/obj/effect/turf_decal/bot{
dir = 1
},
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel/vault/side{
dir = 5
},
@@ -79414,7 +79393,7 @@ bfP
bjc
bfP
bfP
-dWc
+aad
aaa
aaa
aaa
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index 0cff240758..ac4d2a12dc 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -6985,21 +6985,7 @@
/turf/closed/wall/r_wall,
/area/bridge)
"asV" = (
-/obj/structure/closet/crate{
- name = "Gold Crate"
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_x = -1;
- pixel_y = 5
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_y = 2
- },
-/obj/item/stack/sheet/mineral/gold{
- pixel_x = 1;
- pixel_y = -2
- },
-/obj/item/storage/belt/champion,
+/obj/structure/closet/crate/goldcrate,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
@@ -7036,29 +7022,7 @@
},
/area/ai_monitored/nuke_storage)
"asZ" = (
-/obj/item/coin/silver{
- pixel_x = 7;
- pixel_y = 12
- },
-/obj/item/coin/silver{
- pixel_x = 12;
- pixel_y = 7
- },
-/obj/item/coin/silver{
- pixel_x = 4;
- pixel_y = 8
- },
-/obj/item/coin/silver{
- pixel_x = -6;
- pixel_y = 5
- },
-/obj/item/coin/silver{
- pixel_x = 5;
- pixel_y = -8
- },
-/obj/structure/closet/crate{
- name = "Silver Crate"
- },
+/obj/structure/closet/crate/silvercrate,
/turf/open/floor/plasteel/vault{
dir = 4
},
@@ -38600,34 +38564,14 @@
/area/storage/tech)
"bQv" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/pandemic{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/item/circuitboard/computer/rdconsole,
-/obj/item/circuitboard/machine/rdserver{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/machine/destructive_analyzer,
-/obj/item/circuitboard/computer/aifixer,
-/obj/item/circuitboard/computer/teleporter,
-/obj/item/circuitboard/machine/circuit_imprinter,
-/obj/item/circuitboard/machine/mechfab,
/obj/structure/sign/poster/official/random{
pixel_y = 32
},
-/obj/item/circuitboard/machine/smoke_machine,
+/obj/effect/spawner/lootdrop/techstorage/engineering,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bQw" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/mining,
-/obj/item/circuitboard/machine/autolathe{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/computer/arcade/battle,
/obj/machinery/light{
dir = 1;
light_color = "#cee5d2"
@@ -38637,18 +38581,12 @@
dir = 2
},
/obj/item/circuitboard/computer/monastery_shuttle,
+/obj/effect/spawner/lootdrop/techstorage/service,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bQx" = (
/obj/structure/rack,
-/obj/item/circuitboard/machine/telecomms/processor,
-/obj/item/circuitboard/machine/telecomms/receiver,
-/obj/item/circuitboard/machine/telecomms/server,
-/obj/item/circuitboard/machine/telecomms/bus,
-/obj/item/circuitboard/machine/telecomms/broadcaster,
-/obj/item/circuitboard/computer/message_monitor{
- pixel_y = -5
- },
+/obj/effect/spawner/lootdrop/techstorage/rnd,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bQy" = (
@@ -39226,42 +39164,17 @@
/area/storage/tech)
"bRO" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/cloning,
-/obj/item/circuitboard/computer/med_data{
- pixel_x = 3;
- pixel_y = -3
- },
-/obj/item/circuitboard/machine/clonescanner,
-/obj/item/circuitboard/machine/clonepod,
-/obj/item/circuitboard/computer/scan_consolenew,
+/obj/effect/spawner/lootdrop/techstorage/medical,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bRP" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/secure_data{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/security{
- pixel_x = 1;
- pixel_y = -1
- },
+/obj/effect/spawner/lootdrop/techstorage/tcomms,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bRQ" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/powermonitor{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/stationalert{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/item/circuitboard/computer/atmos_alert{
- pixel_x = 3;
- pixel_y = -3
- },
+/obj/effect/spawner/lootdrop/techstorage/security,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bRR" = (
@@ -39952,25 +39865,6 @@
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bTB" = (
-/obj/structure/closet/crate{
- name = "solar pack crate"
- },
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/solar_assembly,
-/obj/item/circuitboard/computer/solar_control,
-/obj/item/electronics/tracker,
-/obj/item/paper/guides/jobs/engi/solars,
/obj/machinery/power/apc{
dir = 2;
name = "Tech Storage APC";
@@ -39978,6 +39872,7 @@
pixel_y = -24
},
/obj/structure/cable,
+/obj/structure/closet/crate/solarpanel_small,
/turf/open/floor/plasteel/darkgreen,
/area/storage/tech)
"bTC" = (
@@ -41189,46 +41084,21 @@
/area/crew_quarters/heads/chief)
"bWs" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/robotics{
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/circuitboard/computer/mecha_control{
- pixel_x = 1;
- pixel_y = -1
- },
+/obj/effect/spawner/lootdrop/techstorage/AI,
/turf/open/floor/plasteel/darkred,
/area/storage/tech)
"bWt" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/crew{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/circuitboard/computer/card{
- pixel_x = 2;
- pixel_y = -2
- },
-/obj/item/circuitboard/computer/communications{
- pixel_x = 5;
- pixel_y = -5
- },
/obj/machinery/camera{
c_tag = "Secure Tech Storage";
dir = 1
},
+/obj/effect/spawner/lootdrop/techstorage/RnD_secure,
/turf/open/floor/plasteel/darkred,
/area/storage/tech)
"bWu" = (
/obj/structure/rack,
-/obj/item/circuitboard/computer/borgupload{
- pixel_x = -1;
- pixel_y = 1
- },
-/obj/item/circuitboard/computer/aiupload{
- pixel_x = 2;
- pixel_y = -2
- },
+/obj/effect/spawner/lootdrop/techstorage/command,
/turf/open/floor/plasteel/darkred,
/area/storage/tech)
"bWv" = (
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 5ca6b8b965..d432fe7d8c 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -2028,14 +2028,6 @@
},
/turf/open/floor/plasteel,
/area/tdome/arena_source)
-"fR" = (
-/obj/machinery/camera{
- pixel_x = 10;
- network = list("thunder");
- c_tag = "Arena"
- },
-/turf/open/floor/circuit/green,
-/area/tdome/arena_source)
"fS" = (
/turf/open/floor/plasteel/red/corner{
dir = 8
@@ -2526,6 +2518,10 @@
/obj/machinery/capture_the_flag/red,
/turf/open/floor/circuit/green/anim,
/area/ctf)
+"hH" = (
+/obj/machinery/vending/coffee,
+/turf/open/floor/wood,
+/area/centcom/holding)
"hI" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -3324,6 +3320,10 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/centcom/supply)
+"jO" = (
+/obj/machinery/vending/cigarette,
+/turf/open/floor/wood,
+/area/centcom/holding)
"jP" = (
/obj/machinery/conveyor_switch/oneway{
dir = 8;
@@ -5318,6 +5318,20 @@
dir = 8
},
/area/tdome/tdomeobserve)
+"oU" = (
+/obj/structure/closet/secure_closet/bar{
+ locked = 0;
+ req_access_txt = "25"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"oV" = (
+/obj/structure/reagent_dispensers/beerkeg,
+/turf/open/floor/wood,
+/area/centcom/holding)
"oW" = (
/obj/structure/flora/bush,
/obj/effect/light_emitter{
@@ -5562,6 +5576,70 @@
dir = 8
},
/area/centcom/control)
+"px" = (
+/obj/machinery/chem_dispenser/drinks/beer,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"py" = (
+/obj/machinery/chem_dispenser/drinks,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pz" = (
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/box/donkpockets{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pA" = (
+/obj/machinery/vending/cola/random,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pB" = (
+/obj/structure/rack,
+/obj/item/toy/sword,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/coin/gold{
+ pixel_x = 8;
+ pixel_y = -3
+ },
+/obj/item/camera,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pC" = (
+/obj/structure/rack,
+/obj/item/toy/gun,
+/obj/item/coin/gold{
+ pixel_w = -9;
+ pixel_y = 6
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pD" = (
+/obj/machinery/computer/arcade/battle,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pE" = (
+/obj/machinery/computer/arcade/orion_trail,
+/turf/open/floor/wood,
+/area/centcom/holding)
"pF" = (
/obj/machinery/door/airlock/centcom{
name = "Auxillary Dock";
@@ -5686,6 +5764,25 @@
dir = 5
},
/area/centcom/ferry)
+"pS" = (
+/obj/machinery/computer/slot_machine,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pT" = (
+/obj/machinery/vending/snack/random,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pU" = (
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pV" = (
+/obj/item/clothing/head/that,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"pW" = (
+/turf/open/floor/carpet/black,
+/area/centcom/holding)
"pX" = (
/obj/item/storage/crayons,
/obj/structure/table,
@@ -5951,6 +6048,30 @@
"qE" = (
/turf/closed/indestructible/riveted/uranium,
/area/wizard_station)
+"qF" = (
+/obj/structure/chair/stool{
+ pixel_y = 8
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding)
+"qG" = (
+/obj/structure/table/wood,
+/obj/item/storage/box/drinkingglasses,
+/obj/item/storage/box/drinkingglasses{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"qH" = (
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"qI" = (
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
"qJ" = (
/obj/machinery/computer/shuttle/syndicate/recall,
/turf/open/floor/plasteel/bar{
@@ -6076,6 +6197,16 @@
/obj/machinery/computer/shuttle,
/turf/open/floor/engine/cult,
/area/wizard_station)
+"rb" = (
+/obj/item/lighter,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"rc" = (
+/obj/item/reagent_containers/food/drinks/soda_cans/cola,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
"rd" = (
/obj/structure/flora/grass/brown,
/obj/effect/light_emitter{
@@ -6502,6 +6633,48 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
+"rY" = (
+/obj/item/dice/d20,
+/obj/structure/table/wood,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"rZ" = (
+/obj/structure/rack,
+/obj/item/clothing/head/that,
+/obj/item/clothing/under/suit_jacket,
+/obj/item/clothing/accessory/waistcoat,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sa" = (
+/obj/structure/rack,
+/obj/item/storage/crayons,
+/obj/item/gun/ballistic/automatic/toy/pistol,
+/obj/item/ammo_box/foambox,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sb" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sc" = (
+/obj/structure/rack,
+/obj/item/storage/crayons,
+/obj/item/gun/ballistic/shotgun/toy/crossbow,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sd" = (
+/obj/structure/rack,
+/obj/item/clothing/shoes/laceup,
+/obj/item/clothing/under/suit_jacket/female{
+ desc = "A black trouser suit for women. Very formal.";
+ name = "black suit";
+ pixel_x = 3;
+ pixel_y = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"se" = (
/obj/machinery/light{
dir = 8
@@ -6903,6 +7076,34 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
+"sY" = (
+/mob/living/simple_animal/bot/medbot,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"sZ" = (
+/obj/machinery/sleeper{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"ta" = (
+/obj/machinery/light,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tb" = (
+/obj/machinery/vending/clothing,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tc" = (
+/obj/structure/closet/wardrobe/mixed,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"td" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/costume,
+/obj/effect/spawner/lootdrop/costume,
+/turf/open/floor/wood,
+/area/centcom/holding)
"te" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/pizzaslice/mushroom,
@@ -6943,6 +7144,40 @@
},
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
+"tj" = (
+/obj/structure/rack,
+/obj/effect/spawner/lootdrop/costume,
+/obj/effect/spawner/lootdrop/costume,
+/obj/machinery/light,
+/obj/machinery/button/door{
+ id = "Ninjaholdingsuicide";
+ name = "SUICIDE CHAMBER LOCK";
+ normaldoorcontrol = 1;
+ pixel_x = 4;
+ pixel_y = -24;
+ specialfunctions = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tk" = (
+/obj/machinery/door/airlock/wood/glass{
+ name = "Private Rooms"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"tl" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ id_tag = "Ninjaholdingsuicide";
+ locked = 1;
+ name = "SUICIDE CHAMBER"
+ },
+/turf/open/floor/wood{
+ icon_state = "wood-broken5"
+ },
+/area/centcom/holding)
+"tm" = (
+/turf/open/floor/carpet,
+/area/centcom/holding)
"tn" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -7243,6 +7478,10 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/centcom/evac)
+"tW" = (
+/obj/structure/table/wood/fancy/black,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"tX" = (
/obj/machinery/door/airlock{
icon = 'icons/obj/doors/airlocks/station/uranium.dmi';
@@ -7250,6 +7489,40 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
+"tY" = (
+/obj/structure/chair/comfy/black{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"tZ" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"ua" = (
+/obj/structure/plasticflaps,
+/turf/open/floor/wood{
+ icon_state = "wood-broken4"
+ },
+/area/centcom/holding)
+"ub" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom1";
+ name = "Room 1"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"uc" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/chair/comfy/black{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
"ud" = (
/obj/machinery/door/poddoor/shutters{
id = "nukeop_ready";
@@ -7263,6 +7536,25 @@
},
/turf/open/floor/plating/airless,
/area/syndicate_mothership/control)
+"uf" = (
+/turf/open/lava,
+/area/centcom/holding)
+"ug" = (
+/obj/machinery/button/door{
+ id = "Proom1";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"uh" = (
+/turf/open/chasm/lavaland,
+/area/centcom/holding)
"ui" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -7464,12 +7756,37 @@
/obj/structure/chair/wood/wings,
/turf/open/floor/carpet,
/area/wizard_station)
+"uG" = (
+/obj/structure/chair/sofa/left,
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"uH" = (
+/obj/structure/chair/sofa/corner{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"uI" = (
+/obj/structure/chair/sofa,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"uJ" = (
/obj/machinery/door/airlock/external{
req_access_txt = "150"
},
/turf/open/floor/plating,
/area/syndicate_mothership/control)
+"uK" = (
+/obj/machinery/button/door{
+ id = "Proom2";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
"uL" = (
/obj/machinery/button/door{
id = "nukeop_ready";
@@ -7488,6 +7805,10 @@
},
/turf/open/floor/mineral/plastitanium,
/area/syndicate_mothership/control)
+"uN" = (
+/obj/structure/table/wood/poker,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"uO" = (
/obj/machinery/door/airlock/centcom{
name = "Shuttle Control Office";
@@ -7693,6 +8014,45 @@
},
/turf/open/floor/carpet,
/area/wizard_station)
+"vo" = (
+/obj/structure/chair/sofa{
+ icon_state = "sofamiddle";
+ dir = 4
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vp" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"vq" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom2";
+ name = "Room 2"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"vr" = (
+/obj/structure/chair/sofa/corner{
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vs" = (
+/obj/structure/chair/sofa/left{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vt" = (
+/obj/machinery/vending/games,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"vu" = (
/obj/item/storage/box/drinkingglasses,
/obj/item/reagent_containers/food/drinks/bottle/rum,
@@ -7715,6 +8075,19 @@
/obj/item/toy/nuke,
/turf/open/floor/wood,
/area/syndicate_mothership/control)
+"vy" = (
+/obj/structure/chair/sofa{
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"vz" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom3";
+ name = "Room 3"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
"vA" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/directions/engineering{
@@ -7982,6 +8355,68 @@
},
/turf/open/floor/carpet,
/area/wizard_station)
+"we" = (
+/obj/machinery/button/door{
+ id = "Proom3";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"wf" = (
+/obj/machinery/button/door{
+ id = "Proom4";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = 24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding)
+"wg" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom4";
+ name = "Room 4"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wh" = (
+/obj/structure/table/wood,
+/obj/item/soap/nanotrasen,
+/obj/item/reagent_containers/spray/cleaner,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wi" = (
+/obj/structure/table/wood,
+/obj/structure/bedsheetbin,
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wj" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "Proom5";
+ name = "Room 5"
+ },
+/turf/open/floor/wood,
+/area/centcom/holding)
+"wk" = (
+/obj/machinery/button/door{
+ id = "Proom5";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 4;
+ specialfunctions = 4
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/random,
+/turf/open/floor/carpet,
+/area/centcom/holding)
"wl" = (
/obj/machinery/light,
/turf/open/floor/wood,
@@ -10763,77 +11198,6 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
-"EZ" = (
-/obj/structure/table,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fa" = (
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fb" = (
-/obj/structure/closet/secure_closet/bar{
- req_access_txt = "25"
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fc" = (
-/obj/structure/reagent_dispensers/beerkeg,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fd" = (
-/obj/structure/table,
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/storage/box/donkpockets{
- pixel_x = 3;
- pixel_y = 3
- },
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"Fe" = (
-/obj/structure/rack,
-/obj/item/camera,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Ff" = (
-/obj/structure/rack,
-/obj/item/toy/sword,
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Fg" = (
-/obj/structure/rack,
-/obj/item/toy/gun,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Fh" = (
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Fi" = (
/turf/open/floor/plating/beach/sand,
/area/centcom/holding)
@@ -10950,19 +11314,6 @@
dir = 5
},
/area/tdome/tdomeobserve)
-"FA" = (
-/obj/structure/table,
-/obj/item/clothing/head/that,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FB" = (
-/obj/structure/chair/stool{
- pixel_y = 8
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"FC" = (
/obj/item/camera,
/turf/open/floor/plating/beach/sand,
@@ -11069,41 +11420,6 @@
},
/turf/open/floor/engine/cult,
/area/wizard_station)
-"FU" = (
-/obj/structure/table,
-/obj/item/ammo_box/foambox,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FV" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/shaker,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FW" = (
-/obj/structure/table,
-/obj/item/lighter,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FX" = (
-/obj/structure/table,
-/obj/item/reagent_containers/food/drinks/soda_cans/cola,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
-"FY" = (
-/obj/structure/table,
-/obj/item/dice/d20,
-/turf/open/floor/plasteel/freezer{
- dir = 2
- },
-/area/centcom/holding)
"FZ" = (
/obj/structure/chair/stool{
pixel_y = 8
@@ -11224,13 +11540,6 @@
},
/turf/open/lava,
/area/wizard_station)
-"Gs" = (
-/obj/structure/rack,
-/obj/item/clothing/head/that,
-/obj/item/clothing/under/suit_jacket,
-/obj/item/clothing/accessory/waistcoat,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Gt" = (
/obj/item/toy/beach_ball,
/turf/open/floor/plating/beach/sand,
@@ -11278,18 +11587,6 @@
},
/turf/open/lava/airless,
/area/wizard_station)
-"GA" = (
-/obj/structure/rack,
-/obj/item/storage/crayons,
-/obj/item/gun/ballistic/automatic/toy/pistol,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"GB" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"GC" = (
/obj/structure/table,
/obj/structure/bedsheetbin,
@@ -11522,12 +11819,6 @@
/obj/structure/shuttle/engine/propulsion,
/turf/open/space,
/area/wizard_station)
-"GY" = (
-/obj/structure/rack,
-/obj/item/storage/crayons,
-/obj/item/gun/ballistic/shotgun/toy/crossbow,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"GZ" = (
/turf/open/floor/plating/beach/coastline_b,
/area/centcom/holding)
@@ -11580,33 +11871,6 @@
dir = 4
},
/area/tdome/tdomeobserve)
-"Hi" = (
-/obj/structure/rack,
-/obj/item/clothing/shoes/laceup,
-/obj/item/clothing/under/suit_jacket/female{
- desc = "A black trouser suit for women. Very formal.";
- name = "black suit";
- pixel_x = 3;
- pixel_y = 1
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Hj" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Hk" = (
-/obj/structure/table,
-/obj/item/gun/ballistic/automatic/toy/pistol,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
-"Hl" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/light,
-/turf/open/floor/plasteel/cafeteria,
-/area/centcom/holding)
"Hm" = (
/turf/open/floor/plating/beach/water,
/area/centcom/holding)
@@ -12327,10 +12591,11 @@
/area/tdome/tdomeadmin)
"Jg" = (
/obj/machinery/camera{
+ c_tag = "Red Team";
+ network = list("thunder");
pixel_x = 11;
pixel_y = -9;
- network = list("thunder");
- c_tag = "Red Team"
+ resistance_flags = 64
},
/obj/effect/landmark/thunderdome/two,
/turf/open/floor/plasteel/neutral,
@@ -12359,10 +12624,11 @@
/area/tdome/arena)
"Jl" = (
/obj/machinery/camera{
+ c_tag = "Green Team";
+ network = list("thunder");
pixel_x = 12;
pixel_y = -10;
- network = list("thunder");
- c_tag = "Green Team"
+ resistance_flags = 64
},
/obj/effect/landmark/thunderdome/one,
/turf/open/floor/plasteel/neutral,
@@ -12399,9 +12665,10 @@
/area/tdome/tdomeadmin)
"Jq" = (
/obj/machinery/camera{
- pixel_x = 10;
+ c_tag = "Arena";
network = list("thunder");
- c_tag = "Arena"
+ pixel_x = 10;
+ resistance_flags = 64
},
/turf/open/floor/circuit/green,
/area/tdome/arena)
@@ -39483,25 +39750,25 @@ aa
aa
aa
ED
-EZ
-EZ
-FU
-Gs
-GA
-GY
-Hi
+hH
+pU
+qG
+rZ
+sa
+sc
+sd
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
ED
ED
ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -39740,25 +40007,25 @@ aa
aa
aa
ED
-Fa
-Fa
-Fa
-Fh
-Fh
-Fh
-Fh
+jO
+pU
+pU
+pW
+pW
+pW
+pU
Hy
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uH
+vo
+vr
+ED
+uH
+vo
+vr
+ED
aa
aa
aa
@@ -39997,25 +40264,25 @@ aa
aa
aa
ED
-Fb
-Fa
-FV
-FB
-Fh
-Fh
-Fh
+oU
+pU
+qH
+qF
+pW
+pW
+pU
Hz
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uI
+uN
+vy
+ED
+uI
+uN
+vy
+ED
aa
aa
aa
@@ -40254,25 +40521,25 @@ aa
aa
aa
ED
-Fc
-Fa
-EZ
-FB
-Fh
-Fh
-Fh
+oV
+pU
+qI
+qF
+pW
+pW
+sY
Hz
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uG
+uN
+vs
+ED
+uG
+uN
+vs
+ED
aa
aa
aa
@@ -40511,25 +40778,25 @@ aa
aa
aa
ED
-Fc
-Fa
-FW
-FB
-Fh
-Fh
-Fh
+px
+pU
+rb
+qF
+pW
+pW
+sZ
Hy
HH
HH
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+tm
+tm
+tm
+ED
+tm
+tm
+tm
+ED
aa
aa
aa
@@ -40768,25 +41035,25 @@ aa
aa
aa
ED
-Fa
-Fa
-FX
-FB
-Fh
-Fh
-Hj
+py
+pU
+rc
+qF
+pW
+pW
+ta
ED
ED
ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+uK
+tm
+vt
+ED
+wf
+tm
+vt
+ED
aa
aa
aa
@@ -41025,26 +41292,26 @@ aa
aa
aa
ED
-Fd
-FA
-FY
-FB
-Fh
-Fh
-Fh
+pz
+pV
+rY
+qF
+pW
+pW
+pU
+ED
+ED
+ED
+ED
+ED
+vq
+ED
+ED
+ED
+wg
+ED
+ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -41282,13 +41549,25 @@ aa
aa
aa
ED
-Fe
-Fh
-Fh
-Fh
-Fh
-Fh
-Fh
+pA
+pW
+pW
+pW
+pW
+pW
+pU
+tk
+pU
+tZ
+pU
+pU
+pU
+pU
+pU
+pU
+pU
+tZ
+wh
ED
aa
aa
@@ -41299,18 +41578,6 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
KH
KU
Lb
@@ -41539,13 +41806,25 @@ aa
aa
aa
ED
-Ff
-Fh
-Fh
-Fh
-Fh
-Fh
-FB
+pB
+pW
+pW
+pW
+pW
+pW
+pU
+tk
+pU
+pU
+pU
+pU
+vp
+pU
+pU
+pU
+pU
+pU
+wi
ED
aa
aa
@@ -41555,18 +41834,6 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
KH
KH
KS
@@ -41796,26 +42063,26 @@ aa
aa
aa
ED
-Fg
-Fh
-Fh
-Fh
-Fh
-FB
-Hk
+pC
+pW
+pW
+pW
+pW
+pW
+tb
+ED
+ED
+ub
+ED
+ED
+ED
+vz
+ED
+ED
+ED
+wj
+ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42053,26 +42320,26 @@ aa
aa
aa
ED
-Fh
-FB
-Fh
-Fh
-Fh
-Fh
-FB
+pD
+qF
+pW
+pW
+pW
+pW
+tc
+ED
+tY
+tm
+ug
+ED
+tY
+tm
+we
+ED
+tY
+tm
+wk
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42310,26 +42577,26 @@ aa
aa
aa
ED
-Fi
-Fi
-Fi
-Fi
-GB
-GB
-Hl
+pE
+qF
+pW
+pW
+pW
+pW
+td
+ED
+tW
+uc
+tm
+ED
+tW
+uc
+tm
+ED
+tW
+uc
+tm
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42567,26 +42834,26 @@ aa
aa
aa
ED
-Fj
-Fi
-Fi
-Fi
-Fi
-GZ
-Hm
+pS
+qF
+pW
+pW
+pW
+pW
+td
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
aa
aa
aa
@@ -42824,6 +43091,777 @@ aa
aa
aa
ED
+pS
+qF
+pW
+pW
+pW
+pW
+tj
+ED
+ED
+ED
+ED
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(115,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ED
+pT
+pU
+pU
+pU
+sb
+sb
+sb
+tl
+ua
+uf
+uh
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(116,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ED
+Fj
+Fi
+Fi
+Fi
+Fi
+GZ
+Hm
+ED
+ED
+ED
+ED
+ED
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(117,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ED
Fi
Fi
FZ
@@ -42890,7 +43928,7 @@ aa
aa
aa
"}
-(115,1,1) = {"
+(118,1,1) = {"
aa
aa
aa
@@ -43147,7 +44185,7 @@ aa
aa
aa
"}
-(116,1,1) = {"
+(119,1,1) = {"
aa
aa
aa
@@ -43404,7 +44442,7 @@ aa
aa
aa
"}
-(117,1,1) = {"
+(120,1,1) = {"
aa
aa
aa
@@ -43661,777 +44699,6 @@ aa
aa
aa
"}
-(118,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ED
-ED
-ED
-ED
-ED
-ED
-ED
-ED
-ED
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(119,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(120,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
(121,1,1) = {"
aa
aa
@@ -44622,15 +44889,15 @@ aa
aa
aa
aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
+ED
aa
aa
aa
@@ -74797,7 +75064,7 @@ fz
fH
fH
fP
-fR
+fO
fH
fH
fz
diff --git a/_maps/shuttles/ruin_syndicate_dropship.dmm b/_maps/shuttles/ruin_syndicate_dropship.dmm
new file mode 100644
index 0000000000..d635953737
--- /dev/null
+++ b/_maps/shuttles/ruin_syndicate_dropship.dmm
@@ -0,0 +1,656 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"al" = (
+/obj/machinery/airalarm/syndicate{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"bo" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"bB" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "caravansyndicate3_bolt_starboard";
+ name = "External Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = -6;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"bN" = (
+/obj/machinery/power/smes{
+ charge = 5e+006
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/shuttle/caravan/syndicate3)
+"cB" = (
+/turf/open/floor/plasteel/vault{
+ dir = 5
+ },
+/area/shuttle/caravan/syndicate3)
+"dZ" = (
+/obj/structure/shuttle/engine/propulsion/burst{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/caravan/syndicate3)
+"gl" = (
+/obj/machinery/door/airlock/hatch{
+ id_tag = "caravansyndicate3_bolt_port";
+ name = "External Airlock";
+ normalspeed = 0;
+ req_access_txt = "150"
+ },
+/obj/docking_port/mobile{
+ dir = 2;
+ dwidth = 6;
+ height = 7;
+ id = "caravansyndicate3";
+ name = "Syndicate Drop Ship";
+ port_direction = 8;
+ preferred_direction = 4;
+ timid = 1;
+ width = 15
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/turf/open/floor/plating,
+/area/shuttle/caravan/syndicate3)
+"ha" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/cable,
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/item/wrench,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/shuttle/caravan/syndicate3)
+"hF" = (
+/obj/structure/chair,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
+/obj/machinery/power/apc/syndicate{
+ dir = 8;
+ name = "Syndicate Drop Ship APC";
+ pixel_x = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/caravan/syndicate3)
+"ka" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/caravan/syndicate3)
+"mJ" = (
+/obj/structure/shuttle/engine/propulsion/burst/left{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/caravan/syndicate3)
+"ns" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "caravansyndicate3_bridge";
+ name = "Bridge Blast Door Control";
+ pixel_x = -16;
+ pixel_y = 5;
+ req_access_txt = "150"
+ },
+/obj/machinery/button/door{
+ id = "caravansyndicate3_bolt_bridge";
+ name = "Bridge Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -16;
+ pixel_y = -5;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/darkred/side{
+ dir = 6
+ },
+/area/shuttle/caravan/syndicate3)
+"qE" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/syndicate{
+ anchored = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"rz" = (
+/obj/machinery/computer/shuttle/caravan/syndicate3{
+ dir = 8
+ },
+/turf/open/floor/plasteel/darkred/side{
+ dir = 8
+ },
+/area/shuttle/caravan/syndicate3)
+"rU" = (
+/obj/structure/grille,
+/obj/structure/window/plastitanium,
+/obj/machinery/door/poddoor{
+ id = "caravansyndicate3_bridge"
+ },
+/turf/open/floor/plating,
+/area/shuttle/caravan/syndicate3)
+"rV" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/caravan/syndicate3)
+"sb" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/camera_advanced/shuttle_docker/caravan/syndicate3{
+ dir = 8
+ },
+/turf/open/floor/plasteel/darkred/side{
+ dir = 10
+ },
+/area/shuttle/caravan/syndicate3)
+"sn" = (
+/obj/structure/chair,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/caravan/syndicate3)
+"ss" = (
+/turf/open/floor/plasteel/darkred/side{
+ dir = 1
+ },
+/area/shuttle/caravan/syndicate3)
+"uy" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plasteel/darkred/side{
+ dir = 10
+ },
+/area/shuttle/caravan/syndicate3)
+"vw" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/firstaid/regular,
+/obj/item/assembly/flash/handheld,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/darkred/side{
+ dir = 5
+ },
+/area/shuttle/caravan/syndicate3)
+"vQ" = (
+/obj/structure/shuttle/engine/propulsion/burst/right{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/caravan/syndicate3)
+"wH" = (
+/obj/structure/shuttle/engine/heater{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/caravan/syndicate3)
+"xC" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/button/door{
+ id = "caravansyndicate3_bolt_port";
+ name = "External Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -24;
+ pixel_y = 6;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"BQ" = (
+/turf/open/floor/plasteel/darkred/side,
+/area/shuttle/caravan/syndicate3)
+"Cm" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -26
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/caravan/syndicate3)
+"Dt" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/syndicate/personal{
+ anchored = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"Dx" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/vault{
+ dir = 5
+ },
+/area/shuttle/caravan/syndicate3)
+"EO" = (
+/obj/structure/chair,
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/caravan/syndicate3)
+"Fa" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/syndicate{
+ anchored = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"Gx" = (
+/obj/machinery/airalarm/syndicate{
+ dir = 4;
+ pixel_x = -24
+ },
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"HJ" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/sign/warning/vacuum{
+ pixel_y = -32
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/syndicate{
+ anchored = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"HM" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/mob/living/simple_animal/hostile/syndicate{
+ environment_smash = 0;
+ name = "Syndicate Salvage Pilot"
+ },
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"Ij" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/obj/machinery/turretid{
+ ailock = 1;
+ control_area = null;
+ desc = "A specially designed set of turret controls. Looks to be covered in protective casing to prevent AI interfacing.";
+ icon_state = "control_kill";
+ lethal = 1;
+ name = "Shuttle turret control";
+ pixel_y = 34;
+ req_access = null;
+ req_access_txt = "150"
+ },
+/turf/open/floor/plasteel/darkred/corner{
+ dir = 4
+ },
+/area/shuttle/caravan/syndicate3)
+"IR" = (
+/obj/effect/mapping_helpers/airlock/locked,
+/obj/machinery/door/airlock/hatch{
+ id_tag = "caravansyndicate3_bolt_bridge";
+ name = "Bridge";
+ req_access_txt = "150"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plasteel/vault{
+ dir = 5
+ },
+/area/shuttle/caravan/syndicate3)
+"Jv" = (
+/turf/template_noop,
+/area/template_noop)
+"KS" = (
+/obj/machinery/door/airlock/hatch{
+ id_tag = "caravansyndicate3_bolt_starboard";
+ name = "External Airlock";
+ normalspeed = 0;
+ req_access_txt = "150"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/shuttle/caravan/syndicate3)
+"Lq" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/closet/syndicate{
+ anchored = 1
+ },
+/obj/structure/sign/warning/vacuum{
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"NH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/closet/syndicate/personal{
+ anchored = 1
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"Pt" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/closet/crate,
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/item/stack/sheet/metal/twenty,
+/obj/item/stack/sheet/glass{
+ amount = 10
+ },
+/obj/item/stack/sheet/mineral/plastitanium{
+ amount = 20
+ },
+/obj/item/storage/box/lights/bulbs,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 20
+ },
+/turf/open/floor/plating,
+/area/shuttle/caravan/syndicate3)
+"PL" = (
+/obj/machinery/porta_turret/syndicate/energy{
+ dir = 2;
+ icon_state = "standard_lethal";
+ mode = 1
+ },
+/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/area/shuttle/caravan/syndicate3)
+"Rj" = (
+/obj/machinery/porta_turret/syndicate/energy{
+ dir = 1;
+ icon_state = "standard_lethal";
+ mode = 1
+ },
+/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/area/shuttle/caravan/syndicate3)
+"Sl" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/toolbox/emergency,
+/obj/item/wrench,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/darkred/side{
+ dir = 9
+ },
+/area/shuttle/caravan/syndicate3)
+"Tn" = (
+/turf/closed/wall/mineral/plastitanium/nodiagonal,
+/area/shuttle/caravan/syndicate3)
+"UD" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/darkred/side,
+/area/shuttle/caravan/syndicate3)
+"US" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/darkred/side{
+ dir = 1
+ },
+/area/shuttle/caravan/syndicate3)
+"Vf" = (
+/obj/machinery/door/airlock/hatch{
+ name = "Ready Room";
+ req_access_txt = "150"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
+ },
+/turf/open/floor/plasteel/vault{
+ dir = 5
+ },
+/area/shuttle/caravan/syndicate3)
+"Wr" = (
+/obj/structure/chair/office/dark{
+ dir = 4
+ },
+/turf/open/floor/plasteel/darkred/corner,
+/area/shuttle/caravan/syndicate3)
+"YU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/closet/syndicate{
+ anchored = 1
+ },
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"ZB" = (
+/turf/closed/wall/mineral/plastitanium,
+/area/shuttle/caravan/syndicate3)
+"ZJ" = (
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+"ZK" = (
+/obj/machinery/computer/crew{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/darkred/side{
+ dir = 9
+ },
+/area/shuttle/caravan/syndicate3)
+"ZZ" = (
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/caravan/syndicate3)
+
+(1,1,1) = {"
+Jv
+mJ
+dZ
+dZ
+dZ
+vQ
+Jv
+"}
+(2,1,1) = {"
+ZB
+wH
+wH
+wH
+wH
+wH
+ZB
+"}
+(3,1,1) = {"
+Tn
+Tn
+bN
+Pt
+ha
+Tn
+Tn
+"}
+(4,1,1) = {"
+Tn
+hF
+US
+ZJ
+BQ
+ka
+Tn
+"}
+(5,1,1) = {"
+Tn
+EO
+ss
+cB
+BQ
+Cm
+Tn
+"}
+(6,1,1) = {"
+Tn
+sn
+ss
+cB
+UD
+rV
+Tn
+"}
+(7,1,1) = {"
+Tn
+NH
+Fa
+cB
+qE
+Dt
+Tn
+"}
+(8,1,1) = {"
+Rj
+Tn
+Tn
+Vf
+Tn
+Tn
+PL
+"}
+(9,1,1) = {"
+gl
+xC
+al
+cB
+bo
+bB
+KS
+"}
+(10,1,1) = {"
+Tn
+Lq
+YU
+Dx
+qE
+HJ
+Tn
+"}
+(11,1,1) = {"
+Tn
+Tn
+Tn
+IR
+Tn
+Tn
+Tn
+"}
+(12,1,1) = {"
+Tn
+uy
+Gx
+cB
+ZZ
+Sl
+Tn
+"}
+(13,1,1) = {"
+rU
+ns
+Ij
+HM
+Wr
+vw
+rU
+"}
+(14,1,1) = {"
+rU
+rU
+sb
+rz
+ZK
+rU
+rU
+"}
+(15,1,1) = {"
+Jv
+rU
+rU
+rU
+rU
+rU
+Jv
+"}
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index a1a1a25724..a05aaf3265 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -56,6 +56,8 @@
#define FIRE_SPREAD_RADIOSITY_SCALE 0.85
#define FIRE_GROWTH_RATE 40000 //For small fires
#define PLASMA_MINIMUM_BURN_TEMPERATURE (100+T0C)
+#define PLASMA_UPPER_TEMPERATURE (1370+T0C)
+#define PLASMA_OXYGEN_FULLBURN 10
//GASES
#define MIN_TOXIC_GAS_DAMAGE 1
diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm
index a5aa63e6a1..1cf27a8c68 100644
--- a/code/__DEFINES/components.dm
+++ b/code/__DEFINES/components.dm
@@ -86,6 +86,10 @@
#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force)
#define COMSIG_MOVABLE_THROW "movable_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin)
#define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" //from base of atom/movable/onTransitZ(): (old_z, new_z)
+
+// /mob/living/carbon signals
+#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
+
// /obj signals
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index f871ac6a44..5e0669880c 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -11,54 +11,22 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define DF_VAR_EDITED (1<<1)
//FLAGS BITMASK
-#define STOPSPRESSUREDMAGE_1 (1<<0) //This flag is used on the flags_1 variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere
-//To successfully stop you taking all pressure damage you must have both a suit and head item with this flag.
#define NODROP_1 (1<<1) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted.
#define NOBLUDGEON_1 (1<<2) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
-#define MASKINTERNALS_1 (1<<3) // mask allows internals
-#define HEAR_1 (1<<4) // This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not.
-#define CHECK_RICOCHET_1 (1<<5) // Projectiels will check ricochet on things impacted that have this.
-#define CONDUCT_1 (1<<6) // conducts electricity (metal etc.)
-#define ABSTRACT_1 (1<<7) // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way
+#define HEAR_1 (1<<3) // This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not.
+#define CHECK_RICOCHET_1 (1<<4) // Projectiels will check ricochet on things impacted that have this.
+#define CONDUCT_1 (1<<5) // conducts electricity (metal etc.)
+#define ABSTRACT_1 (1<<6) // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way
#define NODECONSTRUCT_1 (1<<7) // For machines and structures that should not break into parts, eg, holodeck stuff
#define OVERLAY_QUEUED_1 (1<<8) // atom queued to SSoverlay
#define ON_BORDER_1 (1<<9) // item has priority to check when entering or leaving
+#define DROPDEL_1 (1<<10) // When dropped, it calls qdel on itself
+#define PREVENT_CLICK_UNDER_1 (1<<11) //Prevent clicking things below it on the same turf eg. doors/ fulltile windows
+#define NO_EMP_WIRES_1 (1<<12)
+#define HOLOGRAM_1 (1<<13)
+#define TESLA_IGNORE_1 (1<<14) // TESLA_IGNORE grants immunity from being targeted by tesla-style electricity
-#define NOSLIP_1 (1<<10) //prevents from slipping on wet floors, in space etc
-
-// BLOCK_GAS_SMOKE_EFFECT_1 only used in masks at the moment.
-#define BLOCK_GAS_SMOKE_EFFECT_1 (1<<12) // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY!
-#define THICKMATERIAL_1 (1<<13) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
-#define DROPDEL_1 (1<<14) // When dropped, it calls qdel on itself
-#define PREVENT_CLICK_UNDER_1 (1<<15) //Prevent clicking things below it on the same turf eg. doors/ fulltile windows
-
-/* Secondary atom flags, for the flags_2 var, denoted with a _2 */
-
-#define SLOWS_WHILE_IN_HAND_2 (1<<0)
-#define NO_EMP_WIRES_2 (1<<1)
-#define HOLOGRAM_2 (1<<2)
-#define FROZEN_2 (1<<3)
-#define BANG_PROTECT_2 (1<<6)
-
-// An item worn in the ear slot with HEALS_EARS will heal your ears each
-// Life() tick, even if normally your ears would be too damaged to heal.
-#define HEALS_EARS_2 (1<<7)
-
-// A mob with OMNITONGUE has no restriction in the ability to speak
-// languages that they know. So even if they wouldn't normally be able to
-// through mob or tongue restrictions, this flag allows them to ignore
-// those restrictions.
-#define OMNITONGUE_2 (1<<8)
-
-// TESLA_IGNORE grants immunity from being targeted by tesla-style electricity
-#define TESLA_IGNORE_2 (1<<9)
-
-// Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
-#define NO_MAT_REDEMPTION_2 (1<<10)
-
-// LAVA_PROTECT used on the flags_2 variable for both SUIT and HEAD items, and stops lava damage. Must be present in both to stop lava damage.
-#define LAVA_PROTECT_2 (1<<11)
//turf-only flags
#define NOJAUNT_1 (1<<0)
@@ -67,7 +35,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
#define NO_DEATHRATTLE_1 (1<<4) // Do not notify deadchat about any deaths that occur on this turf.
#define NO_RUINS_1 (1<<5) //Blocks ruins spawning on the turf
#define NO_LAVA_GEN_1 (1<<6) //Blocks lava rivers being generated on the turf
-//#define CHECK_RICOCHET_1 32 //Same thing as atom flag.
/*
These defines are used specifically with the atom/pass_flags bitmask
diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm
index beea132890..7ad5041344 100644
--- a/code/__DEFINES/inventory.dm
+++ b/code/__DEFINES/inventory.dm
@@ -14,76 +14,76 @@
#define STORAGE_VIEW_DEPTH 2
//ITEM INVENTORY SLOT BITMASKS
-#define SLOT_OCLOTHING (1<<0)
-#define SLOT_ICLOTHING (1<<1)
-#define SLOT_GLOVES (1<<2)
-#define SLOT_EYES (1<<3)
-#define SLOT_EARS (1<<4)
-#define SLOT_MASK (1<<5)
-#define SLOT_HEAD (1<<6)
-#define SLOT_FEET (1<<7)
-#define SLOT_ID (1<<8)
-#define SLOT_BELT (1<<9)
-#define SLOT_BACK (1<<10)
-#define SLOT_POCKET (1<<11) // this is to allow items with a w_class of WEIGHT_CLASS_NORMAL or WEIGHT_CLASS_BULKY to fit in pockets.
-#define SLOT_DENYPOCKET (1<<12) // this is to deny items with a w_class of WEIGHT_CLASS_SMALL or WEIGHT_CLASS_TINY to fit in pockets.
-#define SLOT_NECK (1<<13)
+#define ITEM_SLOT_OCLOTHING (1<<0)
+#define ITEM_SLOT_ICLOTHING (1<<1)
+#define ITEM_SLOT_GLOVES (1<<2)
+#define ITEM_SLOT_EYES (1<<3)
+#define ITEM_SLOT_EARS (1<<4)
+#define ITEM_SLOT_MASK (1<<5)
+#define ITEM_SLOT_HEAD (1<<6)
+#define ITEM_SLOT_FEET (1<<7)
+#define ITEM_SLOT_ID (1<<8)
+#define ITEM_SLOT_BELT (1<<9)
+#define ITEM_SLOT_BACK (1<<10)
+#define ITEM_SLOT_POCKET (1<<11) // this is to allow items with a w_class of WEIGHT_CLASS_NORMAL or WEIGHT_CLASS_BULKY to fit in pockets.
+#define ITEM_SLOT_DENYPOCKET (1<<12) // this is to deny items with a w_class of WEIGHT_CLASS_SMALL or WEIGHT_CLASS_TINY to fit in pockets.
+#define ITEM_SLOT_NECK (1<<13)
//SLOTS
-#define slot_back 1
-#define slot_wear_mask 2
-#define slot_handcuffed 3
-#define slot_hands 4 //wherever you provide a slot for hands you provide slot_hands
- //slot_hands as a slot will pick ANY available hand
-#define slot_belt 5
-#define slot_wear_id 6
-#define slot_ears 7
-#define slot_glasses 8
-#define slot_gloves 9
-#define slot_neck 10
-#define slot_head 11
-#define slot_shoes 12
-#define slot_wear_suit 13
-#define slot_w_uniform 14
-#define slot_l_store 15
-#define slot_r_store 16
-#define slot_s_store 17
-#define slot_in_backpack 18
-#define slot_legcuffed 19
-#define slot_generic_dextrous_storage 20
+#define SLOT_BACK 1
+#define SLOT_WEAR_MASK 2
+#define SLOT_HANDCUFFED 3
+#define SLOT_HANDS 4 //wherever you provide a slot for hands you provide SLOT_HANDS
+ //SLOT_HANDS as a slot will pick ANY available hand
+#define SLOT_BELT 5
+#define SLOT_WEAR_ID 6
+#define SLOT_EARS 7
+#define SLOT_GLASSES 8
+#define SLOT_GLOVES 9
+#define SLOT_NECK 10
+#define SLOT_HEAD 11
+#define SLOT_SHOES 12
+#define SLOT_WEAR_SUIT 13
+#define SLOT_W_UNIFORM 14
+#define SLOT_L_STORE 15
+#define SLOT_R_STORE 16
+#define SLOT_S_STORE 17
+#define SLOT_IN_BACKPACK 18
+#define SLOT_LEGCUFFED 19
+#define SLOT_GENERC_DEXTROUS_STORAGE 20
-#define slots_amt 20 // Keep this up to date!
+#define SLOTS_AMT 20 // Keep this up to date!
//I hate that this has to exist
/proc/slotdefine2slotbit(slotdefine) //Keep this up to date with the value of SLOT BITMASKS and SLOTS (the two define sections above)
. = 0
switch(slotdefine)
- if(slot_back)
- . = SLOT_BACK
- if(slot_wear_mask)
- . = SLOT_MASK
- if(slot_neck)
- . = SLOT_NECK
- if(slot_belt)
- . = SLOT_BELT
- if(slot_wear_id)
- . = SLOT_ID
- if(slot_ears)
- . = SLOT_EARS
- if(slot_glasses)
- . = SLOT_EYES
- if(slot_gloves)
- . = SLOT_GLOVES
- if(slot_head)
- . = SLOT_HEAD
- if(slot_shoes)
- . = SLOT_FEET
- if(slot_wear_suit)
- . = SLOT_OCLOTHING
- if(slot_w_uniform)
- . = SLOT_ICLOTHING
- if(slot_l_store, slot_r_store)
- . = SLOT_POCKET
+ if(SLOT_BACK)
+ . = ITEM_SLOT_BACK
+ if(SLOT_WEAR_MASK)
+ . = ITEM_SLOT_MASK
+ if(SLOT_NECK)
+ . = ITEM_SLOT_NECK
+ if(SLOT_BELT)
+ . = ITEM_SLOT_BELT
+ if(SLOT_WEAR_ID)
+ . = ITEM_SLOT_ID
+ if(SLOT_EARS)
+ . = ITEM_SLOT_EARS
+ if(SLOT_GLASSES)
+ . = ITEM_SLOT_EYES
+ if(SLOT_GLOVES)
+ . = ITEM_SLOT_GLOVES
+ if(SLOT_HEAD)
+ . = ITEM_SLOT_HEAD
+ if(SLOT_SHOES)
+ . = ITEM_SLOT_FEET
+ if(SLOT_WEAR_SUIT)
+ . = ITEM_SLOT_OCLOTHING
+ if(SLOT_W_UNIFORM)
+ . = ITEM_SLOT_ICLOTHING
+ if(SLOT_L_STORE, SLOT_R_STORE)
+ . = ITEM_SLOT_POCKET
//Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses.
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index d0f8460053..391d55fe59 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -378,7 +378,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
#define BEAT_SLOW 2
#define BEAT_NONE 0
-//http://www.byond.com/docs/ref/info.html#/atom/var/mouse_opacity
+//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity
#define MOUSE_OPACITY_TRANSPARENT 0
#define MOUSE_OPACITY_ICON 1
#define MOUSE_OPACITY_OPAQUE 2
diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm
index bfbf6f866a..f8287cf34e 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -9,6 +9,7 @@
#define ON_BLUEPRINTS (1<<5) //Are we visible on the station blueprints at roundstart?
#define UNIQUE_RENAME (1<<6) // can you customize the description/name of the thing?
#define USES_TGUI (1<<7) //put on things that use tgui on ui_interact instead of custom/old UI.
+#define FROZEN (1<<8)
// If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support
@@ -18,3 +19,14 @@
#define IN_INVENTORY (1<<1) //is this item equipped into an inventory slot or hand of a mob? used for tooltips
#define FORCE_STRING_OVERRIDE (1<<2) // used for tooltips
#define NEEDS_PERMIT (1<<3) //Used by security bots to determine if this item is safe for public use.
+#define SLOWS_WHILE_IN_HAND (1<<4)
+#define NO_MAT_REDEMPTION (1<<5) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials.
+
+// Flags for the clothing_flags var on /obj/item/clothing
+
+#define LAVAPROTECT (1<<0)
+#define STOPSPRESSUREDAMAGE (1<<1) //SUIT and HEAD items which stop pressure damage. To stop you taking all pressure damage you must have both a suit and head item with this flag.
+#define BLOCK_GAS_SMOKE_EFFECT (1<<2) // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY!
+#define MASKINTERNALS (1<<3) // mask allows internals
+#define NOSLIP (1<<4) //prevents from slipping on wet floors, in space etc
+#define THICKMATERIAL (1<<5) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body.
diff --git a/code/__DEFINES/server_tools.dm b/code/__DEFINES/server_tools.dm
deleted file mode 100644
index a1764880c3..0000000000
--- a/code/__DEFINES/server_tools.dm
+++ /dev/null
@@ -1,128 +0,0 @@
-// /tg/station 13 server tools API
-#define SERVICE_API_VERSION_STRING "3.2.0.2"
-
-//CONFIGURATION
-//use this define if you want to do configuration outside of this file
-#ifndef SERVER_TOOLS_EXTERNAL_CONFIGURATION
-//Comment this out once you've filled in the below
-#error /tg/station server tools interface unconfigured
-
-//Required interfaces (fill in with your codebase equivalent):
-
-//create a global variable named `Name` and set it to `Value`
-//These globals must not be modifiable from anywhere outside of the server tools
-#define SERVER_TOOLS_DEFINE_AND_SET_GLOBAL(Name, Value)
-//Read the value in the global variable `Name`
-#define SERVER_TOOLS_READ_GLOBAL(Name)
-//Set the value in the global variable `Name` to `Value`
-#define SERVER_TOOLS_WRITE_GLOBAL(Name, Value)
-//display an announcement `message` from the server to all players
-#define SERVER_TOOLS_WORLD_ANNOUNCE(message)
-//Write a string `message` to a server log
-#define SERVER_TOOLS_LOG(message)
-//Notify current in-game administrators of a string `event`
-#define SERVER_TOOLS_NOTIFY_ADMINS(event)
-//The current amount of connected clients
-#define SERVER_TOOLS_CLIENT_COUNT
-#endif
-
-//Required hooks:
-
-//Put this somewhere in /world/New() that is always run
-#define SERVER_TOOLS_ON_NEW ServiceInit()
-//Put this somewhere in /world/Topic(T, Addr, Master, Keys) that is always run before T is modified
-#define SERVER_TOOLS_ON_TOPIC var/service_topic_return = ServiceCommand(params2list(T)); if(service_topic_return) return service_topic_return
-//Put at the beginning of world/Reboot(reason)
-#define SERVER_TOOLS_ON_REBOOT ServiceReboot()
-
-//Optional callable functions:
-
-//Returns the string version of the API
-#define SERVER_TOOLS_API_VERSION ServiceAPIVersion()
-//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise
-//No function below this succeed if this is FALSE
-#define SERVER_TOOLS_PRESENT RunningService()
-//Gets the current version of the service running the server
-#define SERVER_TOOLS_VERSION ServiceVersion()
-//Forces a hard reboot of BYOND by ending the process
-//unlike del(world) clients will try to reconnect
-//If the service has not requested a shutdown, the world will reboot shortly after
-#define SERVER_TOOLS_REBOOT_BYOND world.ServiceEndProcess()
-/*
- Gets the list of any testmerged github pull requests
-
- "[PR Number]" => list(
- "title" -> PR title
- "commit" -> Full hash of commit merged
- "author" -> Github username of the author of the PR
- )
-*/
-#define SERVER_TOOLS_PR_LIST GetTestMerges()
-//Sends a message to connected game chats
-#define SERVER_TOOLS_CHAT_BROADCAST(message) world.ChatBroadcast(message)
-//Sends a message to connected admin chats
-#define SERVER_TOOLS_RELAY_BROADCAST(message) world.AdminBroadcast(message)
-
-//IMPLEMENTATION
-
-#define REBOOT_MODE_NORMAL 0
-#define REBOOT_MODE_HARD 1
-#define REBOOT_MODE_SHUTDOWN 2
-
-#define SERVICE_WORLD_PARAM "server_service"
-#define SERVICE_VERSION_PARAM "server_service_version"
-#define SERVICE_INSTANCE_PARAM "server_instance"
-#define SERVICE_PR_TEST_JSON "prtestjob.json"
-#define SERVICE_INTERFACE_DLL "TGDreamDaemonBridge.dll"
-#define SERVICE_INTERFACE_FUNCTION "DDEntryPoint"
-
-#define SERVICE_CMD_HARD_REBOOT "hard_reboot"
-#define SERVICE_CMD_GRACEFUL_SHUTDOWN "graceful_shutdown"
-#define SERVICE_CMD_WORLD_ANNOUNCE "world_announce"
-#define SERVICE_CMD_LIST_CUSTOM "list_custom_commands"
-#define SERVICE_CMD_API_COMPATIBLE "api_compat"
-#define SERVICE_CMD_PLAYER_COUNT "client_count"
-
-#define SERVICE_CMD_PARAM_KEY "serviceCommsKey"
-#define SERVICE_CMD_PARAM_COMMAND "command"
-#define SERVICE_CMD_PARAM_SENDER "sender"
-#define SERVICE_CMD_PARAM_CUSTOM "custom"
-
-#define SERVICE_JSON_PARAM_HELPTEXT "help_text"
-#define SERVICE_JSON_PARAM_ADMINONLY "admin_only"
-#define SERVICE_JSON_PARAM_REQUIREDPARAMETERS "required_parameters"
-
-#define SERVICE_REQUEST_KILL_PROCESS "killme"
-#define SERVICE_REQUEST_IRC_BROADCAST "irc"
-#define SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE "send2irc"
-#define SERVICE_REQUEST_WORLD_REBOOT "worldreboot"
-#define SERVICE_REQUEST_API_VERSION "api_ver"
-
-#define SERVICE_RETURN_SUCCESS "SUCCESS"
-
-/*
-The MIT License
-
-Copyright (c) 2017 Jordan Brown
-
-Permission is hereby granted, free of charge,
-to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to
-deal in the Software without restriction, including
-without limitation the rights to use, copy, modify,
-merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom
-the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
-ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 2fb681d1a3..f1e0e0d92f 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -82,6 +82,7 @@
// Subsystem fire priority, from lowest to highest priority
// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child)
+#define FIRE_PRIORITY_PING 10
#define FIRE_PRIORITY_IDLE_NPC 10
#define FIRE_PRIORITY_SERVER_MAINT 10
#define FIRE_PRIORITY_RESEARCH 10
diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm
new file mode 100644
index 0000000000..00cbae7629
--- /dev/null
+++ b/code/__DEFINES/tgs.config.dm
@@ -0,0 +1,19 @@
+#define TGS_EXTERNAL_CONFIGURATION
+#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name)
+#define TGS_READ_GLOBAL(Name) GLOB.##Name
+#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value
+#define TGS_WORLD_ANNOUNCE(message) to_chat(world, "[html_encode(##message)] ")
+#define TGS_INFO_LOG(message) log_world("TGS: Info: [##message]")
+#define TGS_ERROR_LOG(message) log_world("TGS: Error: [##message]")
+#define TGS_NOTIFY_ADMINS(event) message_admins(##event)
+#define TGS_CLIENT_COUNT GLOB.clients.len
+#define TGS_PROTECT_DATUM(Path)\
+##Path/can_vv_get(var_name){\
+ return FALSE;\
+}\
+##Path/vv_edit_var(var_name, var_value){\
+ return FALSE;\
+}\
+##Path/CanProcCall(procname){\
+ return FALSE;\
+}
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
new file mode 100644
index 0000000000..651be685c5
--- /dev/null
+++ b/code/__DEFINES/tgs.dm
@@ -0,0 +1,202 @@
+//tgstation-server DMAPI
+
+//All functions and datums outside this document are subject to change with any version and should not be relied on
+
+//CONFIGURATION
+
+//create this define if you want to do configuration outside of this file
+#ifndef TGS_EXTERNAL_CONFIGURATION
+
+//Comment this out once you've filled in the below
+#error TGS API unconfigured
+
+//Required interfaces (fill in with your codebase equivalent):
+
+//create a global variable named `Name` and set it to `Value`
+//These globals must not be modifiable from anywhere outside of the server tools
+#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value)
+
+//Read the value in the global variable `Name`
+#define TGS_READ_GLOBAL(Name)
+
+//Set the value in the global variable `Name` to `Value`
+#define TGS_WRITE_GLOBAL(Name, Value)
+
+//Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game priveledge escalation
+#define TGS_PROTECT_DATUM(Path)
+
+//display an announcement `message` from the server to all players
+#define TGS_WORLD_ANNOUNCE(message)
+
+//Notify current in-game administrators of a string `event`
+#define TGS_NOTIFY_ADMINS(event)
+
+//Write an info `message` to a server log
+#define TGS_INFO_LOG(message)
+
+//Write an error `message` to a server log
+#define TGS_ERROR_LOG(message)
+
+//Get the number of connected /clients
+#define TGS_CLIENT_COUNT
+
+#endif
+
+//EVENT CODES
+
+//TODO
+
+//REQUIRED HOOKS
+
+//Call this somewhere in /world/New() that is always run
+//event_handler: optional user defined event handler. The default behaviour is to broadcast the event in english to all connected admin channels
+/world/proc/TgsNew(datum/tgs_event_handler/event_handler)
+ return
+
+//Call this when your initializations are complete and your game is ready to play before any player interactions happen
+//This may use world.sleep_offline to make this happen so ensure no changes are made to it while this call is running
+/world/proc/TgsInitializationComplete()
+ return
+
+//Put this somewhere in /world/Topic(T, Addr, Master, Keys) that is always run before T is modified
+#define TGS_TOPIC var/tgs_topic_return = TgsTopic(T); if(tgs_topic_return) return tgs_topic_return
+
+//Call this at the beginning of world/Reboot(reason)
+/world/proc/TgsReboot()
+ return
+
+//DATUM DEFINITIONS
+//unless otherwise specified all datums defined here should be considered read-only, warranty void if written
+
+//represents git revision information about the current world build
+/datum/tgs_revision_information
+ var/commit //full sha of compiled commit
+ var/origin_commit //full sha of last known remote commit. This may be null if the TGS repository is not currently tracking a remote branch
+
+//represents a merge of a GitHub pull request
+/datum/tgs_revision_information/test_merge
+ var/number //pull request number
+ var/title //pull request title
+ var/body //pull request body
+ var/author //pull request github author
+ var/url //link to pull request html
+ var/pull_request_commit //commit of the pull request when it was merged
+ var/time_merged //timestamp of when the merge commit for the pull request was created
+ var/comment //optional comment left by the one who initiated the test merge
+
+//represents a connected chat channel
+/datum/tgs_chat_channel
+ var/id //internal channel representation
+ var/friendly_name //user friendly channel name
+ var/server_name //server name the channel resides on
+ var/provider_name //chat provider for the channel
+ var/is_admin_channel //if the server operator has marked this channel for game admins only
+ var/is_private_channel //if this is a private chat channel
+
+//represents a chat user
+/datum/tgs_chat_user
+ var/id //Internal user representation
+ var/friendly_name //The user's public name
+ var/mention //The text to use to ping this user in a message
+ var/datum/tgs_chat_channel/channel //The /datum/tgs_chat_channel this user was from
+
+//user definable callback for handling events
+/datum/tgs_event_handler/proc/HandleEvent(event_code)
+ return
+
+//user definable chat command
+/datum/tgs_chat_command
+ var/name = "" //the string to trigger this command on a chat bot. e.g. TGS3_BOT: do_this_command
+ var/help_text = "" //help text for this command
+ var/admin_only = FALSE //set to TRUE if this command should only be usable by registered chat admins
+
+//override to implement command
+//sender: The tgs_chat_user who send to command
+//params: The trimmed string following the command name
+//The return value will be stringified and sent to the appropriate chat
+/datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params)
+ CRASH("[type] has no implementation for Run()")
+
+//FUNCTIONS
+
+//Returns the respective string version of the API
+/world/proc/TgsMaximumAPIVersion()
+ return
+
+/world/proc/TgsMinimumAPIVersion()
+ return
+
+//Gets the current version of the server tools running the server
+/world/proc/TgsVersion()
+ return
+
+//Returns TRUE if the world was launched under the server tools and the API matches, FALSE otherwise
+//No function below this succeeds if it returns FALSE
+/world/proc/TgsAvailable()
+ return
+
+/world/proc/TgsInstanceName()
+ return
+
+//Get the current `/datum/tgs_revision_information`
+/world/proc/TgsRevision()
+ return
+
+//Gets a list of active `/datum/tgs_revision_information/test_merge`s
+/world/proc/TgsTestMerges()
+ return
+
+//Forces a hard reboot of BYOND by ending the process
+//unlike del(world) clients will try to reconnect
+//If the service has not requested a shutdown, the next server will take over
+/world/proc/TgsEndProcess()
+ return
+
+//Gets a list of connected tgs_chat_channel
+/world/proc/TgsChatChannelInfo()
+ return
+
+//Sends a message to connected game chats
+//message: The message to send
+//channels: optional channels to limit the broadcast to
+/world/proc/TgsChatBroadcast(message, list/channels)
+ return
+
+//Send a message to non-admin connected chats
+//message: The message to send
+//admin_only: If TRUE, message will instead be sent to only admin connected chats
+/world/proc/TgsTargetedChatBroadcast(message, admin_only)
+ return
+
+//Send a private message to a specific user
+//message: The message to send
+//user: The /datum/tgs_chat_user to send to
+/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user)
+ return
+
+/*
+The MIT License
+
+Copyright (c) 2017 Jordan Brown
+
+Permission is hereby granted, free of charge,
+to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to
+deal in the Software without restriction, including
+without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom
+the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 94606273be..384e65bdcb 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -68,6 +68,7 @@
#define MAGIC_TRAIT "magic"
#define TRAUMA_TRAIT "trauma"
#define SPECIES_TRAIT "species"
+#define ORGAN_TRAIT "organ"
#define ROUNDSTART_TRAIT "roundstart" //cannot be removed without admin intervention
// unique trait sources, still defines
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 6585aebd36..48e2baac6e 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -128,6 +128,9 @@
/proc/log_qdel(text)
WRITE_LOG(GLOB.world_qdel_log, "QDEL: [text]")
+/proc/log_query_debug(text)
+ WRITE_LOG(GLOB.query_debug_log, "SQL: [text]")
+
/* Log to both DD and the logfile. */
/proc/log_world(text)
WRITE_LOG(GLOB.world_runtime_log, text)
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index 7caa28642e..9a8a249159 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -1072,19 +1072,19 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0
// Used to make the frozen item visuals for Freon.
if(resistance_flags & FREEZE_PROOF)
return
- if(!(flags_2 & FROZEN_2))
+ if(!(obj_flags & FROZEN))
name = "frozen [name]"
add_atom_colour(GLOB.freon_color_matrix, TEMPORARY_COLOUR_PRIORITY)
alpha -= 25
- flags_2 |= FROZEN_2
+ obj_flags |= FROZEN
//Assumes already frozed
/obj/proc/make_unfrozen()
- if(flags_2 & FROZEN_2)
+ if(obj_flags & FROZEN)
name = replacetext(name, "frozen ", "")
remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, GLOB.freon_color_matrix)
alpha += 25
- flags_2 &= ~FROZEN_2
+ obj_flags &= ~FROZEN
//Converts an icon to base64. Operates by putting the icon in the iconCache savefile,
diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm
index 3446a750ee..d1add9cb4c 100644
--- a/code/__HELPERS/pronouns.dm
+++ b/code/__HELPERS/pronouns.dm
@@ -36,6 +36,9 @@
/datum/proc/p_s(temp_gender) //is this a descriptive proc name, or what?
. = "s"
+/datum/proc/p_es(temp_gender)
+ . = "es"
+
//like clients, which do have gender.
/client/p_they(capitalized, temp_gender)
if(!temp_gender)
@@ -107,6 +110,12 @@
if(temp_gender != PLURAL && temp_gender != NEUTER)
. = "s"
+/client/p_es(temp_gender)
+ if(!temp_gender)
+ temp_gender = gender
+ if(temp_gender != PLURAL && temp_gender != NEUTER)
+ . = "es"
+
//mobs(and atoms but atoms don't really matter write your own proc overrides) also have gender!
/mob/p_they(capitalized, temp_gender)
if(!temp_gender)
@@ -184,59 +193,72 @@
if(temp_gender != PLURAL)
. = "s"
+/mob/p_es(temp_gender)
+ if(!temp_gender)
+ temp_gender = gender
+ if(temp_gender != PLURAL)
+ . = "es"
+
//humans need special handling, because they can have their gender hidden
/mob/living/carbon/human/p_they(capitalized, temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_their(capitalized, temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_them(capitalized, temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_have(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_are(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_were(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_do(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/p_s(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((slot_w_uniform in obscured) && skipface)
+ if((SLOT_W_UNIFORM in obscured) && skipface)
+ temp_gender = PLURAL
+ return ..()
+
+/mob/living/carbon/human/p_es(temp_gender)
+ var/list/obscured = check_obscured_slots()
+ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
+ if((SLOT_W_UNIFORM in obscured) && skipface)
temp_gender = PLURAL
return ..()
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index b9db24e447..13fcc94b4b 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -290,19 +290,26 @@
parts += "[GLOB.TAB]Nobody died this shift! "
return parts.Join(" ")
-/datum/controller/subsystem/ticker/proc/show_roundend_report(client/C,common_report, popcount)
- var/list/report_parts = list()
-
- report_parts += personal_report(C, popcount)
- report_parts += common_report
+/client/proc/roundend_report_file()
+ return "data/roundend_reports/[ckey].html"
+/datum/controller/subsystem/ticker/proc/show_roundend_report(client/C, previous = FALSE)
var/datum/browser/roundend_report = new(C, "roundend")
roundend_report.width = 800
roundend_report.height = 600
- roundend_report.set_content(report_parts.Join())
+ var/content
+ var/filename = C.roundend_report_file()
+ if(!previous)
+ var/list/report_parts = list(personal_report(C), GLOB.common_report)
+ content = report_parts.Join()
+ C.verbs -= /client/proc/show_previous_roundend_report
+ fdel(filename)
+ text2file(content, filename)
+ else
+ content = file2text(filename)
+ roundend_report.set_content(content)
roundend_report.stylesheets = list()
- roundend_report.add_stylesheet("roundend",'html/browser/roundend.css')
-
+ roundend_report.add_stylesheet("roundend", 'html/browser/roundend.css')
roundend_report.open(0)
/datum/controller/subsystem/ticker/proc/personal_report(client/C, popcount)
@@ -327,8 +334,6 @@
else
parts += "
"
parts += " "
- if(!GLOB.survivor_report)
- GLOB.survivor_report = survivor_report(popcount)
parts += GLOB.survivor_report
parts += "
"
@@ -336,8 +341,9 @@
/datum/controller/subsystem/ticker/proc/display_report(popcount)
GLOB.common_report = build_roundend_report()
+ GLOB.survivor_report = survivor_report(popcount)
for(var/client/C in GLOB.clients)
- show_roundend_report(C,GLOB.common_report, popcount)
+ show_roundend_report(C, FALSE)
give_show_report_button(C)
CHECK_TICK
@@ -458,7 +464,7 @@
/datum/action/report/Trigger()
if(owner && GLOB.common_report && SSticker.current_state == GAME_STATE_FINISHED)
- SSticker.show_roundend_report(owner.client,GLOB.common_report)
+ SSticker.show_roundend_report(owner.client, FALSE)
/datum/action/report/IsAvailable()
return 1
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index a840d6144a..2db7b8bc78 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -698,7 +698,7 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
var/macro = lowertext(copytext(string, next_backslash + 1, next_space))
var/rest = next_backslash > leng ? "" : copytext(string, next_space + 1)
- //See http://www.byond.com/docs/ref/info.html#/DM/text/macros
+ //See https://secure.byond.com/docs/ref/info.html#/DM/text/macros
switch(macro)
//prefixes/agnostic
if("the")
@@ -766,4 +766,3 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
return "twelfth"
else
return "[number]\th"
-
\ No newline at end of file
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 79f6a2c007..1f788cf445 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -400,25 +400,25 @@
/proc/slot2body_zone(slot)
switch(slot)
- if(slot_back, slot_wear_suit, slot_w_uniform, slot_belt, slot_wear_id)
+ if(SLOT_BACK, SLOT_WEAR_SUIT, SLOT_W_UNIFORM, SLOT_BELT, SLOT_WEAR_ID)
return BODY_ZONE_CHEST
- if(slot_gloves, slot_hands, slot_handcuffed)
+ if(SLOT_GLOVES, SLOT_HANDS, SLOT_HANDCUFFED)
return pick(BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND)
- if(slot_head, slot_neck, slot_neck, slot_ears)
+ if(SLOT_HEAD, SLOT_NECK, SLOT_NECK, SLOT_EARS)
return BODY_ZONE_HEAD
- if(slot_wear_mask)
+ if(SLOT_WEAR_MASK)
return BODY_ZONE_PRECISE_MOUTH
- if(slot_glasses)
+ if(SLOT_GLASSES)
return BODY_ZONE_PRECISE_EYES
- if(slot_shoes)
+ if(SLOT_SHOES)
return pick(BODY_ZONE_PRECISE_R_FOOT, BODY_ZONE_PRECISE_L_FOOT)
- if(slot_legcuffed)
+ if(SLOT_LEGCUFFED)
return pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
//adapted from http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 8e2c03238d..67bbe24e38 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -30,7 +30,7 @@
#define MIN_COMPILER_VERSION 512
#if DM_VERSION < MIN_COMPILER_VERSION
//Don't forget to update this part
-#error Your version of BYOND is too out-of-date to compile this project. Go to byond.com/download and update.
+#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update.
#error You need version 512 or higher
#endif
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 168863708c..bd95c8550f 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -30,7 +30,8 @@ GLOBAL_LIST_INIT(bitfields, list(
"DANGEROUS_POSSESSION" = DANGEROUS_POSSESSION,
"ON_BLUEPRINTS" = ON_BLUEPRINTS,
"UNIQUE_RENAME" = UNIQUE_RENAME,
- "USES_TGUI" = USES_TGUI
+ "USES_TGUI" = USES_TGUI,
+ "FROZEN" = FROZEN,
),
"datum_flags" = list(
"DF_USE_TAG" = DF_USE_TAG,
@@ -40,7 +41,9 @@ GLOBAL_LIST_INIT(bitfields, list(
"BEING_REMOVED" = BEING_REMOVED,
"IN_INVENTORY" = IN_INVENTORY,
"FORCE_STRING_OVERRIDE" = FORCE_STRING_OVERRIDE,
- "NEEDS_PERMIT" = NEEDS_PERMIT
+ "NEEDS_PERMIT" = NEEDS_PERMIT,
+ "SLOWS_WHILE_IN_HAND" = SLOWS_WHILE_IN_HAND,
+ "NO_MAT_REDEMPTION" = NO_MAT_REDEMPTION,
),
"admin_flags" = list(
"BUILDMODE" = R_BUILDMODE,
@@ -106,28 +109,24 @@ GLOBAL_LIST_INIT(bitfields, list(
"REAGENT_NOREACT" = REAGENT_NOREACT
),
"flags_1" = list(
- "STOPSPRESSUREDMAGE_1 / NOJAUNT_1 (turfs)" = STOPSPRESSUREDMAGE_1,
+ "NOJAUNT_1" = NOJAUNT_1,
"NODROP_1 / UNUSED_TRANSIT_TURF_1 (turfs)" = NODROP_1,
"NOBLUDGEON_1 / CAN_BE_DIRTY_1 (turfs)" = NOBLUDGEON_1,
- "MASKINTERNALS_1" = MASKINTERNALS_1,
"HEAR_1 / NO_DEATHRATTLE_1 (turfs)" = HEAR_1,
"CHECK_RICOCHET_1 / NO_RUINS_1 (turfs)" = CHECK_RICOCHET_1,
"CONDUCT_1 / NO_LAVA_GEN_1" = CONDUCT_1,
"ABSTRACT_1" = ABSTRACT_1,
"NODECONSTRUCT_1" = NODECONSTRUCT_1,
"OVERLAY_QUEUED_1" = OVERLAY_QUEUED_1,
- "NOSLIP_1" = NOSLIP_1
+ "HOLOGRAM_1" = HOLOGRAM_1,
+ "TESLA_IGNORE_1" = TESLA_IGNORE_1
),
- "flags_2" = list(
- "SLOWS_WHILE_IN_HAND_2" = SLOWS_WHILE_IN_HAND_2,
- "NO_EMP_WIRES_2" = NO_EMP_WIRES_2,
- "HOLOGRAM_2" = HOLOGRAM_2,
- "FRONZE_2" = FROZEN_2,
- "BANG_PROTECT_2" = BANG_PROTECT_2,
- "HEALS_EARS_2" = HEALS_EARS_2,
- "OMNITONGUE_2" = OMNITONGUE_2,
- "TESLA_IGNORE_2" = TESLA_IGNORE_2,
- "NO_MAT_REDEMPTION_2" = NO_MAT_REDEMPTION_2,
- "LAVA_PROTECT_2" = LAVA_PROTECT_2
- )
+ "clothing_flags" = list(
+ "LAVAPROTECT" = LAVAPROTECT,
+ "STOPSPRESSUREDAMAGE" = STOPSPRESSUREDAMAGE,
+ "BLOCK_GAS_SMOKE_EFFECT" = BLOCK_GAS_SMOKE_EFFECT,
+ "MASKINTERNALS" = MASKINTERNALS,
+ "NOSLIP" = NOSLIP,
+ "THICKMATERIAL" = THICKMATERIAL,
+ )
))
diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm
index f580eab3d5..7c5715e1bb 100644
--- a/code/_globalvars/configuration.dm
+++ b/code/_globalvars/configuration.dm
@@ -1,6 +1,6 @@
GLOBAL_REAL(config, /datum/controller/configuration)
-GLOBAL_DATUM_INIT(revdata, /datum/getrev, new)
+GLOBAL_DATUM(revdata, /datum/getrev)
GLOBAL_VAR(host)
GLOBAL_VAR(station_name)
diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm
index f1e2b03790..f4e73f2994 100644
--- a/code/_globalvars/lists/typecache.dm
+++ b/code/_globalvars/lists/typecache.dm
@@ -10,3 +10,5 @@ GLOBAL_LIST_INIT(typecache_living, typecacheof(/mob/living))
GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery, /obj/structure)))
GLOBAL_LIST_INIT(typecache_shuttle_area, typecacheof(/area/shuttle))
+
+GLOBAL_LIST_INIT(typecache_clothing, typecacheof(/obj/item/clothing))
diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm
index ff397785d8..545ffbcbef 100644
--- a/code/_globalvars/logging.dm
+++ b/code/_globalvars/logging.dm
@@ -20,6 +20,8 @@ GLOBAL_VAR(world_pda_log)
GLOBAL_PROTECT(world_pda_log)
GLOBAL_VAR(world_manifest_log)
GLOBAL_PROTECT(world_manifest_log)
+GLOBAL_VAR(query_debug_log)
+GLOBAL_PROTECT(query_debug_log)
GLOBAL_LIST_EMPTY(bombers)
GLOBAL_PROTECT(bombers)
diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm
index b6708b266d..8e39d96bf6 100644
--- a/code/_onclick/hud/drones.dm
+++ b/code/_onclick/hud/drones.dm
@@ -8,7 +8,7 @@
inv_box.icon_state = "suit_storage"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_drone_storage
- inv_box.slot_id = slot_generic_dextrous_storage
+ inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -17,7 +17,7 @@
inv_box.icon_state = "mask"
// inv_box.icon_full = "template"
inv_box.screen_loc = ui_drone_head
- inv_box.slot_id = slot_head
+ inv_box.slot_id = SLOT_HEAD
static_inventory += inv_box
for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm
index dc57c2b25c..628efbffe5 100644
--- a/code/_onclick/hud/guardian.dm
+++ b/code/_onclick/hud/guardian.dm
@@ -45,7 +45,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
inv_box.screen_loc = ui_id
- inv_box.slot_id = slot_generic_dextrous_storage
+ inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE
static_inventory += inv_box
using = new /obj/screen/guardian/Communicate()
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index e5de695789..e4318059d6 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -33,7 +33,7 @@
var/list/obj/screen/hotkeybuttons = list() //the buttons that can be used via hotkeys
var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...)
var/list/screenoverlays = list() //the screen objects used as whole screen overlays (flash, damageoverlay, etc...)
- var/list/inv_slots[slots_amt] // /obj/screen/inventory objects, ordered by their slot ID.
+ var/list/inv_slots[SLOTS_AMT] // /obj/screen/inventory objects, ordered by their slot ID.
var/list/hand_slots // /obj/screen/inventory/hand objects, assoc list of "[held_index]" = object
var/list/obj/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object
@@ -196,7 +196,9 @@
screenmob.client.screen -= infodisplay
for(var/thing in plane_masters)
- screenmob.client.screen += plane_masters[thing]
+ var/obj/screen/plane_master/PM = plane_masters[thing]
+ PM.backdrop(screenmob)
+ screenmob.client.screen += PM
hud_version = display_hud_version
persistent_inventory_update(screenmob)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 501c5fb601..2ac0f14f95 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -139,7 +139,7 @@
inv_box = new /obj/screen/inventory()
inv_box.name = "i_clothing"
inv_box.icon = ui_style
- inv_box.slot_id = slot_w_uniform
+ inv_box.slot_id = SLOT_W_UNIFORM
inv_box.icon_state = "uniform"
inv_box.screen_loc = ui_iclothing
toggleable_inventory += inv_box
@@ -147,7 +147,7 @@
inv_box = new /obj/screen/inventory()
inv_box.name = "o_clothing"
inv_box.icon = ui_style
- inv_box.slot_id = slot_wear_suit
+ inv_box.slot_id = SLOT_WEAR_SUIT
inv_box.icon_state = "suit"
inv_box.screen_loc = ui_oclothing
toggleable_inventory += inv_box
@@ -171,7 +171,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "id"
inv_box.screen_loc = ui_id
- inv_box.slot_id = slot_wear_id
+ inv_box.slot_id = SLOT_WEAR_ID
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -179,7 +179,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "mask"
inv_box.screen_loc = ui_mask
- inv_box.slot_id = slot_wear_mask
+ inv_box.slot_id = SLOT_WEAR_MASK
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -187,7 +187,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "neck"
inv_box.screen_loc = ui_neck
- inv_box.slot_id = slot_neck
+ inv_box.slot_id = SLOT_NECK
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -195,7 +195,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "back"
inv_box.screen_loc = ui_back
- inv_box.slot_id = slot_back
+ inv_box.slot_id = SLOT_BACK
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -203,7 +203,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
inv_box.screen_loc = ui_storage1
- inv_box.slot_id = slot_l_store
+ inv_box.slot_id = SLOT_L_STORE
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -211,7 +211,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "pocket"
inv_box.screen_loc = ui_storage2
- inv_box.slot_id = slot_r_store
+ inv_box.slot_id = SLOT_R_STORE
static_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -219,7 +219,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "suit_storage"
inv_box.screen_loc = ui_sstore1
- inv_box.slot_id = slot_s_store
+ inv_box.slot_id = SLOT_S_STORE
static_inventory += inv_box
using = new /obj/screen/resist()
@@ -254,7 +254,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "gloves"
inv_box.screen_loc = ui_gloves
- inv_box.slot_id = slot_gloves
+ inv_box.slot_id = SLOT_GLOVES
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -262,7 +262,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "glasses"
inv_box.screen_loc = ui_glasses
- inv_box.slot_id = slot_glasses
+ inv_box.slot_id = SLOT_GLASSES
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -270,7 +270,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "ears"
inv_box.screen_loc = ui_ears
- inv_box.slot_id = slot_ears
+ inv_box.slot_id = SLOT_EARS
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -278,7 +278,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "head"
inv_box.screen_loc = ui_head
- inv_box.slot_id = slot_head
+ inv_box.slot_id = SLOT_HEAD
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -286,7 +286,7 @@
inv_box.icon = ui_style
inv_box.icon_state = "shoes"
inv_box.screen_loc = ui_shoes
- inv_box.slot_id = slot_shoes
+ inv_box.slot_id = SLOT_SHOES
toggleable_inventory += inv_box
inv_box = new /obj/screen/inventory()
@@ -295,7 +295,7 @@
inv_box.icon_state = "belt"
// inv_box.icon_full = "template_small"
inv_box.screen_loc = ui_belt
- inv_box.slot_id = slot_belt
+ inv_box.slot_id = SLOT_BELT
static_inventory += inv_box
throw_icon = new /obj/screen/throw_catch()
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index 06dbf15cd7..c469c1ef20 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -1,155 +1,155 @@
-/datum/hud/monkey/New(mob/living/carbon/monkey/owner, ui_style = 'icons/mob/screen_midnight.dmi')
- ..()
- var/obj/screen/using
- var/obj/screen/inventory/inv_box
-
- action_intent = new /obj/screen/act_intent()
- action_intent.icon = ui_style
- action_intent.icon_state = mymob.a_intent
- action_intent.screen_loc = ui_acti
- static_inventory += action_intent
-
- using = new /obj/screen/mov_intent()
- using.icon = ui_style
- using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
- using.screen_loc = ui_movi
- static_inventory += using
-
- using = new/obj/screen/language_menu
- using.icon = ui_style
- static_inventory += using
-
- using = new /obj/screen/drop()
- using.icon = ui_style
- using.screen_loc = ui_drop_throw
- static_inventory += using
-
- build_hand_slots(ui_style)
-
- using = new /obj/screen/swap_hand()
- using.icon = ui_style
- using.icon_state = "swap_1_m" //extra wide!
- using.screen_loc = ui_swaphand_position(owner,1)
- static_inventory += using
-
- using = new /obj/screen/swap_hand()
- using.icon = ui_style
- using.icon_state = "swap_2"
- using.screen_loc = ui_swaphand_position(owner,2)
- static_inventory += using
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "mask"
- inv_box.icon = ui_style
- inv_box.icon_state = "mask"
-// inv_box.icon_full = "template"
- inv_box.screen_loc = ui_monkey_mask
- inv_box.slot_id = slot_wear_mask
- static_inventory += inv_box
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "neck"
- inv_box.icon = ui_style
- inv_box.icon_state = "neck"
-// inv_box.icon_full = "template"
- inv_box.screen_loc = ui_monkey_neck
- inv_box.slot_id = slot_neck
- static_inventory += inv_box
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "head"
- inv_box.icon = ui_style
- inv_box.icon_state = "head"
-// inv_box.icon_full = "template"
- inv_box.screen_loc = ui_monkey_head
- inv_box.slot_id = slot_head
- static_inventory += inv_box
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "back"
- inv_box.icon = ui_style
- inv_box.icon_state = "back"
- inv_box.screen_loc = ui_monkey_back
- inv_box.slot_id = slot_back
- static_inventory += inv_box
-
- throw_icon = new /obj/screen/throw_catch()
- throw_icon.icon = ui_style
- throw_icon.screen_loc = ui_drop_throw
- hotkeybuttons += throw_icon
-
- internals = new /obj/screen/internals()
- infodisplay += internals
-
- healths = new /obj/screen/healths()
- infodisplay += healths
-
- pull_icon = new /obj/screen/pull()
- pull_icon.icon = ui_style
- pull_icon.update_icon(mymob)
- pull_icon.screen_loc = ui_pull_resist
- static_inventory += pull_icon
-
- lingchemdisplay = new /obj/screen/ling/chems()
- infodisplay += lingchemdisplay
-
- lingstingdisplay = new /obj/screen/ling/sting()
- infodisplay += lingstingdisplay
-
-
- zone_select = new /obj/screen/zone_sel()
- zone_select.icon = ui_style
- zone_select.update_icon(mymob)
- static_inventory += zone_select
-
- mymob.client.screen = list()
-
- using = new /obj/screen/resist()
- using.icon = ui_style
- using.screen_loc = ui_pull_resist
- hotkeybuttons += using
-
- for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
- if(inv.slot_id)
- inv.hud = src
- inv_slots[inv.slot_id] = inv
- inv.update_icon()
-
-/datum/hud/monkey/persistent_inventory_update()
- if(!mymob)
- return
- var/mob/living/carbon/monkey/M = mymob
-
- if(hud_shown)
- if(M.back)
- M.back.screen_loc = ui_monkey_back
- M.client.screen += M.back
- if(M.wear_mask)
- M.wear_mask.screen_loc = ui_monkey_mask
- M.client.screen += M.wear_mask
- if(M.wear_neck)
- M.wear_neck.screen_loc = ui_monkey_neck
- M.client.screen += M.wear_neck
- if(M.head)
- M.head.screen_loc = ui_monkey_head
- M.client.screen += M.head
- else
- if(M.back)
- M.back.screen_loc = null
- if(M.wear_mask)
- M.wear_mask.screen_loc = null
- if(M.head)
- M.head.screen_loc = null
-
- if(hud_version != HUD_STYLE_NOHUD)
- for(var/obj/item/I in M.held_items)
- I.screen_loc = ui_hand_position(M.get_held_index_of_item(I))
- M.client.screen += I
- else
- for(var/obj/item/I in M.held_items)
- I.screen_loc = null
- M.client.screen -= I
-
-/mob/living/carbon/monkey/create_mob_hud()
- if(client && !hud_used)
- hud_used = new /datum/hud/monkey(src, ui_style2icon(client.prefs.UI_style))
+/datum/hud/monkey/New(mob/living/carbon/monkey/owner, ui_style = 'icons/mob/screen_midnight.dmi')
+ ..()
+ var/obj/screen/using
+ var/obj/screen/inventory/inv_box
+
+ action_intent = new /obj/screen/act_intent()
+ action_intent.icon = ui_style
+ action_intent.icon_state = mymob.a_intent
+ action_intent.screen_loc = ui_acti
+ static_inventory += action_intent
+
+ using = new /obj/screen/mov_intent()
+ using.icon = ui_style
+ using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
+ using.screen_loc = ui_movi
+ static_inventory += using
+
+ using = new/obj/screen/language_menu
+ using.icon = ui_style
+ static_inventory += using
+
+ using = new /obj/screen/drop()
+ using.icon = ui_style
+ using.screen_loc = ui_drop_throw
+ static_inventory += using
+
+ build_hand_slots(ui_style)
+
+ using = new /obj/screen/swap_hand()
+ using.icon = ui_style
+ using.icon_state = "swap_1_m" //extra wide!
+ using.screen_loc = ui_swaphand_position(owner,1)
+ static_inventory += using
+
+ using = new /obj/screen/swap_hand()
+ using.icon = ui_style
+ using.icon_state = "swap_2"
+ using.screen_loc = ui_swaphand_position(owner,2)
+ static_inventory += using
+
+ inv_box = new /obj/screen/inventory()
+ inv_box.name = "mask"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "mask"
+// inv_box.icon_full = "template"
+ inv_box.screen_loc = ui_monkey_mask
+ inv_box.slot_id = SLOT_WEAR_MASK
+ static_inventory += inv_box
+
+ inv_box = new /obj/screen/inventory()
+ inv_box.name = "neck"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "neck"
+// inv_box.icon_full = "template"
+ inv_box.screen_loc = ui_monkey_neck
+ inv_box.slot_id = SLOT_NECK
+ static_inventory += inv_box
+
+ inv_box = new /obj/screen/inventory()
+ inv_box.name = "head"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "head"
+// inv_box.icon_full = "template"
+ inv_box.screen_loc = ui_monkey_head
+ inv_box.slot_id = SLOT_HEAD
+ static_inventory += inv_box
+
+ inv_box = new /obj/screen/inventory()
+ inv_box.name = "back"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "back"
+ inv_box.screen_loc = ui_monkey_back
+ inv_box.slot_id = SLOT_BACK
+ static_inventory += inv_box
+
+ throw_icon = new /obj/screen/throw_catch()
+ throw_icon.icon = ui_style
+ throw_icon.screen_loc = ui_drop_throw
+ hotkeybuttons += throw_icon
+
+ internals = new /obj/screen/internals()
+ infodisplay += internals
+
+ healths = new /obj/screen/healths()
+ infodisplay += healths
+
+ pull_icon = new /obj/screen/pull()
+ pull_icon.icon = ui_style
+ pull_icon.update_icon(mymob)
+ pull_icon.screen_loc = ui_pull_resist
+ static_inventory += pull_icon
+
+ lingchemdisplay = new /obj/screen/ling/chems()
+ infodisplay += lingchemdisplay
+
+ lingstingdisplay = new /obj/screen/ling/sting()
+ infodisplay += lingstingdisplay
+
+
+ zone_select = new /obj/screen/zone_sel()
+ zone_select.icon = ui_style
+ zone_select.update_icon(mymob)
+ static_inventory += zone_select
+
+ mymob.client.screen = list()
+
+ using = new /obj/screen/resist()
+ using.icon = ui_style
+ using.screen_loc = ui_pull_resist
+ hotkeybuttons += using
+
+ for(var/obj/screen/inventory/inv in (static_inventory + toggleable_inventory))
+ if(inv.slot_id)
+ inv.hud = src
+ inv_slots[inv.slot_id] = inv
+ inv.update_icon()
+
+/datum/hud/monkey/persistent_inventory_update()
+ if(!mymob)
+ return
+ var/mob/living/carbon/monkey/M = mymob
+
+ if(hud_shown)
+ if(M.back)
+ M.back.screen_loc = ui_monkey_back
+ M.client.screen += M.back
+ if(M.wear_mask)
+ M.wear_mask.screen_loc = ui_monkey_mask
+ M.client.screen += M.wear_mask
+ if(M.wear_neck)
+ M.wear_neck.screen_loc = ui_monkey_neck
+ M.client.screen += M.wear_neck
+ if(M.head)
+ M.head.screen_loc = ui_monkey_head
+ M.client.screen += M.head
+ else
+ if(M.back)
+ M.back.screen_loc = null
+ if(M.wear_mask)
+ M.wear_mask.screen_loc = null
+ if(M.head)
+ M.head.screen_loc = null
+
+ if(hud_version != HUD_STYLE_NOHUD)
+ for(var/obj/item/I in M.held_items)
+ I.screen_loc = ui_hand_position(M.get_held_index_of_item(I))
+ M.client.screen += I
+ else
+ for(var/obj/item/I in M.held_items)
+ I.screen_loc = null
+ M.client.screen -= I
+
+/mob/living/carbon/monkey/create_mob_hud()
+ if(client && !hud_used)
+ hud_used = new /datum/hud/monkey(src, ui_style2icon(client.prefs.UI_style))
diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm
index bc3df4de83..8592383a4f 100755
--- a/code/_onclick/hud/parallax.dm
+++ b/code/_onclick/hud/parallax.dm
@@ -167,6 +167,8 @@
/datum/hud/proc/update_parallax()
var/client/C = mymob.client
var/turf/posobj = get_turf(C.eye)
+ if(!posobj)
+ return
var/area/areaobj = posobj.loc
// Update the movement direction of the parallax if necessary (for shuttles)
diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm
index 6b9a02c009..d4559ed66d 100644
--- a/code/_onclick/hud/plane_master.dm
+++ b/code/_onclick/hud/plane_master.dm
@@ -12,7 +12,7 @@
/obj/screen/plane_master/proc/Hide(override)
alpha = override || hide_alpha
-//Why do plane masters need a backdrop sometimes? Read http://www.byond.com/forum/?post=2141928
+//Why do plane masters need a backdrop sometimes? Read https://secure.byond.com/forum/?post=2141928
//Trust me, you need one. Period. If you don't think you do, you're doing something extremely wrong.
/obj/screen/plane_master/proc/backdrop(mob/mymob)
@@ -29,6 +29,7 @@
blend_mode = BLEND_OVERLAY
/obj/screen/plane_master/game_world/backdrop(mob/mymob)
+ filters = list()
if(istype(mymob) && mymob.client && mymob.client.prefs && mymob.client.prefs.ambientocclusion)
filters += AMBIENT_OCCLUSION
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 0b895cb600..02ece81b41 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -264,7 +264,7 @@
var/obj/item/clothing/mask/M = C.wear_mask
if(M.mask_adjusted) // if mask on face but pushed down
M.adjustmask(C) // adjust it back
- if( !(M.flags_1 & MASKINTERNALS_1) )
+ if( !(M.clothing_flags & MASKINTERNALS) )
to_chat(C, "You are not wearing an internals mask! ")
return
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index eb5f623035..a060cbb834 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -99,7 +99,7 @@
//stops TK grabs being equipped anywhere but into hands
/obj/item/tk_grab/equipped(mob/user, slot)
- if(slot == slot_hands)
+ if(slot == SLOT_HANDS)
return
qdel(src)
return
diff --git a/code/controllers/configuration/entries/dbconfig.dm b/code/controllers/configuration/entries/dbconfig.dm
index c9dbdb4f54..1eb1186a8b 100644
--- a/code/controllers/configuration/entries/dbconfig.dm
+++ b/code/controllers/configuration/entries/dbconfig.dm
@@ -4,7 +4,7 @@
/datum/config_entry/string/address
config_entry_value = "localhost"
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
-
+
/datum/config_entry/number/port
config_entry_value = 3306
min_val = 0
@@ -24,3 +24,8 @@
/datum/config_entry/string/feedback_tableprefix
protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
+
+/datum/config_entry/number/query_debug_log_timeout
+ config_entry_value = 70
+ min_val = 1
+ protection = CONFIG_ENTRY_LOCKED | CONFIG_ENTRY_HIDDEN
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index 2b1e9bcda9..0cc0c622d7 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -199,11 +199,14 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
// Sort subsystems by display setting for easy access.
sortTim(subsystems, /proc/cmp_subsystem_display)
// Set world options.
- if(sleep_offline_after_initializations)
- world.sleep_offline = TRUE
world.fps = CONFIG_GET(number/fps)
var/initialized_tod = REALTIMEOFDAY
+
+ world.TgsInitializationComplete()
+ if(sleep_offline_after_initializations)
+ world.sleep_offline = TRUE
sleep(1)
+
if(sleep_offline_after_initializations && CONFIG_GET(flag/resume_after_initializations))
world.sleep_offline = FALSE
initializations_finished_with_no_players_logged_in = initialized_tod < REALTIMEOFDAY - 10
diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm
index ce4e6ee271..a46a283254 100644
--- a/code/controllers/subsystem/air.dm
+++ b/code/controllers/subsystem/air.dm
@@ -29,7 +29,8 @@ SUBSYSTEM_DEF(air)
var/list/obj/machinery/atmos_machinery = list()
var/list/pipe_init_dirs_cache = list()
-
+ //atmos singletons
+ var/list/gas_reactions = list()
//Special functions lists
var/list/turf/active_super_conductivity = list()
diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm
index b026f8ad6f..0e1f1fb8fd 100644
--- a/code/controllers/subsystem/dbcore.dm
+++ b/code/controllers/subsystem/dbcore.dm
@@ -243,10 +243,24 @@ Delayed insert mode was removed in mysql 7 and only works with MyISAM type table
to_chat(usr, "A SQL error occurred during this operation, check the server logs. ")
/datum/DBQuery/proc/Execute(sql_query = sql, cursor_handler = default_cursor, log_error = TRUE)
+ var/start_time
+ var/timeout = CONFIG_GET(number/query_debug_log_timeout)
+ if(timeout)
+ start_time = REALTIMEOFDAY
Close()
. = _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null)
if(!. && log_error)
log_sql("[ErrorMsg()] | Query used: [sql]")
+ if(timeout)
+ if((REALTIMEOFDAY - start_time) > timeout)
+ log_query_debug("Query execution started at [start_time]")
+ log_query_debug("Query execution ended at [REALTIMEOFDAY]")
+ log_query_debug("Possible slow query timeout detected.")
+ log_query_debug("Query used: [sql]")
+ slow_query_check()
+
+/datum/DBQuery/proc/slow_query_check()
+ message_admins("HEY! A database query may have timed out. Did the server just hang? \[YES\] |\[NO\] ")
/datum/DBQuery/proc/NextRow()
return _dm_db_next_row(_db_query,item,conversions)
diff --git a/code/controllers/subsystem/ping.dm b/code/controllers/subsystem/ping.dm
new file mode 100644
index 0000000000..2cf88bc7ad
--- /dev/null
+++ b/code/controllers/subsystem/ping.dm
@@ -0,0 +1,32 @@
+SUBSYSTEM_DEF(ping)
+ name = "Ping"
+ priority = FIRE_PRIORITY_PING
+ wait = 3 SECONDS
+ flags = SS_NO_INIT
+
+ var/list/currentrun = list()
+
+/datum/controller/subsystem/ping/stat_entry()
+ ..("P:[GLOB.clients.len]")
+
+
+/datum/controller/subsystem/ping/fire(resumed = 0)
+ if (!resumed)
+ src.currentrun = GLOB.clients.Copy()
+
+ //cache for sanic speed (lists are references anyways)
+ var/list/currentrun = src.currentrun
+
+ while (currentrun.len)
+ var/client/C = currentrun[currentrun.len]
+ currentrun.len--
+
+ if (!C || !C.chatOutput || !C.chatOutput.loaded)
+ if (MC_TICK_CHECK)
+ return
+ continue
+
+ // softPang isn't handled anywhere but it'll always reset the opts.lastPang.
+ C.chatOutput.ehjax_send(data = C.is_afk(29) ? "softPang" : "pang")
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm
index dd68443bd7..dd45f9146f 100644
--- a/code/controllers/subsystem/server_maint.dm
+++ b/code/controllers/subsystem/server_maint.dm
@@ -55,8 +55,8 @@ SUBSYSTEM_DEF(server_maint)
co.ehjax_send(data = "roundrestart")
if(server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
C << link("byond://[server]")
- if(SERVER_TOOLS_PRESENT)
- SSblackbox.record_feedback("text", "server_tools", 1, SERVER_TOOLS_VERSION)
- SSblackbox.record_feedback("text", "server_tools_api", 1, SERVER_TOOLS_API_VERSION)
+ var/tgsversion = world.TgsVersion()
+ if(tgsversion)
+ SSblackbox.record_feedback("text", "server_tools", 1, tgsversion)
#undef PING_BUFFER_TIME
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index b44f335ffc..053befa8ac 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -158,7 +158,7 @@ SUBSYSTEM_DEF(ticker)
window_flash(C, ignorepref = TRUE) //let them know lobby has opened up.
to_chat(world, "Welcome to [station_name()]! ")
if(CONFIG_GET(flag/irc_announce_new_game))
- SERVER_TOOLS_CHAT_BROADCAST("New round starting on [SSmapping.config.map_name]!")
+ world.TgsTargetedChatBroadcast("New round starting on [SSmapping.config.map_name]!", FALSE)
current_state = GAME_STATE_PREGAME
//Everyone who wants to be an observer is now spawned
create_observers()
diff --git a/code/datums/action.dm b/code/datums/action.dm
index f7b1d6b258..f9575a56ef 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -480,7 +480,7 @@
H.attack_self(owner)
return
var/obj/item/I = target
- if(owner.can_equip(I, slot_hands))
+ if(owner.can_equip(I, SLOT_HANDS))
owner.temporarilyRemoveItemFromInventory(I)
owner.put_in_hands(I)
I.attack_self(owner)
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index 821770e9c5..a8adbfbce8 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -160,7 +160,7 @@
to_chat(owner, "You feel really lonely... ")
else
to_chat(owner, "You're going mad with loneliness! ")
- owner.hallucination += 20
+ owner.hallucination += 30
if(5)
if(!high_stress)
diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm
index 49cb97774c..88360194b3 100644
--- a/code/datums/components/chasm.dm
+++ b/code/datums/components/chasm.dm
@@ -64,18 +64,22 @@
if(is_type_in_typecache(AM, forbidden_types) || AM.throwing || AM.floating)
return FALSE
//Flies right over the chasm
- if(isliving(AM))
+ if(ismob(AM))
var/mob/M = AM
+ if(M.buckled) //middle statement to prevent infinite loops just in case!
+ var/mob/buckled_to = M.buckled
+ if((!ismob(M.buckled) || (buckled_to.buckled != M)) && !droppable(M.buckled))
+ return FALSE
if(M.is_flying())
return FALSE
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- if(istype(H.belt, /obj/item/wormhole_jaunter))
- var/obj/item/wormhole_jaunter/J = H.belt
- //To freak out any bystanders
- H.visible_message("[H] falls into [parent]! ")
- J.chasm_react(H)
- return FALSE
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ if(istype(H.belt, /obj/item/wormhole_jaunter))
+ var/obj/item/wormhole_jaunter/J = H.belt
+ //To freak out any bystanders
+ H.visible_message("[H] falls into [parent]! ")
+ J.chasm_react(H)
+ return FALSE
return TRUE
/datum/component/chasm/proc/drop(atom/movable/AM)
diff --git a/code/datums/components/earhealing.dm b/code/datums/components/earhealing.dm
new file mode 100644
index 0000000000..79303ff701
--- /dev/null
+++ b/code/datums/components/earhealing.dm
@@ -0,0 +1,30 @@
+// An item worn in the ear slot with this component will heal your ears each
+// Life() tick, even if normally your ears would be too damaged to heal.
+
+/datum/component/earhealing
+ var/mob/living/carbon/wearer
+
+/datum/component/earhealing/Initialize()
+ if(!isitem(parent))
+ return COMPONENT_INCOMPATIBLE
+ RegisterSignal(list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/equippedChanged)
+
+/datum/component/earhealing/proc/equippedChanged(mob/living/carbon/user, slot)
+ if (slot == SLOT_EARS && istype(user))
+ if (!wearer)
+ START_PROCESSING(SSobj, src)
+ wearer = user
+ else
+ if (wearer)
+ STOP_PROCESSING(SSobj, src)
+ wearer = null
+
+/datum/component/earhealing/process()
+ if (!wearer)
+ STOP_PROCESSING(SSobj, src)
+ return
+ if(!wearer.has_trait(TRAIT_DEAF))
+ var/obj/item/organ/ears/ears = wearer.getorganslot(ORGAN_SLOT_EARS)
+ if (ears)
+ ears.deaf = max(ears.deaf - 1, (ears.ear_damage < UNHEALING_EAR_DAMAGE ? 0 : 1)) // Do not clear deafness while above the unhealing ear damage threshold
+ ears.ear_damage = max(ears.ear_damage - 0.1, 0)
diff --git a/code/datums/components/earprotection.dm b/code/datums/components/earprotection.dm
new file mode 100644
index 0000000000..f00b372218
--- /dev/null
+++ b/code/datums/components/earprotection.dm
@@ -0,0 +1,11 @@
+/datum/component/wearertargeting/earprotection
+ signals = list(COMSIG_CARBON_SOUNDBANG)
+ mobtype = /mob/living/carbon
+
+/datum/component/wearertargeting/earprotection/Initialize(_valid_slots)
+ . = ..()
+ valid_slots = _valid_slots
+ callback = CALLBACK(src, .proc/reducebang)
+
+/datum/component/wearertargeting/earprotection/proc/reducebang(list/reflist)
+ reflist[1]--
diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm
index 56301cdc8b..94dc92c0b9 100644
--- a/code/datums/components/material_container.dm
+++ b/code/datums/components/material_container.dm
@@ -58,7 +58,7 @@
return
if(user.a_intent != INTENT_HELP)
return
- if((I.flags_2 & (HOLOGRAM_2 | NO_MAT_REDEMPTION_2)) || (tc && !is_type_in_typecache(I, tc)))
+ if((I.flags_1 & HOLOGRAM_1) || (I.item_flags & NO_MAT_REDEMPTION) || (tc && !is_type_in_typecache(I, tc)))
to_chat(user, "[parent] won't accept [I]! ")
return
. = COMPONENT_NO_AFTERATTACK
diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm
index 3701be2ae9..4a720b6550 100644
--- a/code/datums/components/riding.dm
+++ b/code/datums/components/riding.dm
@@ -208,7 +208,7 @@
var/atom/movable/AM = parent
AM.unbuckle_mob(user)
user.Knockdown(60)
- user.visible_message("[AM] pushes [user] off of them! ")
+ user.visible_message("[AM] pushes [user] off of [AM.p_them()]! ")
/datum/component/riding/cyborg
diff --git a/code/datums/components/signal_redirect.dm b/code/datums/components/signal_redirect.dm
index 8828c03c2d..769555fc80 100644
--- a/code/datums/components/signal_redirect.dm
+++ b/code/datums/components/signal_redirect.dm
@@ -4,6 +4,7 @@
/datum/component/redirect/Initialize(list/signals, datum/callback/_callback, flags=NONE)
//It's not our job to verify the right signals are registered here, just do it.
if(!LAZYLEN(signals) || !istype(_callback))
+ warning("signals are [list2params(signals)], callback is [_callback]]")
return COMPONENT_INCOMPATIBLE
if(flags & REDIRECT_TRANSFER_WITH_TURF && isturf(parent))
RegisterSignal(COMSIG_TURF_CHANGE, .proc/turf_change)
diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm
index 084056fb10..e6d43ed65a 100644
--- a/code/datums/components/storage/storage.dm
+++ b/code/datums/components/storage/storage.dm
@@ -87,7 +87,8 @@
RegisterSignal(COMSIG_ATOM_ATTACK_PAW, .proc/on_attack_hand)
RegisterSignal(COMSIG_ATOM_EMP_ACT, .proc/emp_act)
RegisterSignal(COMSIG_ATOM_ATTACK_GHOST, .proc/show_to_ghost)
- RegisterSignal(COMSIG_ATOM_EXITED, .proc/_removal_reset)
+ RegisterSignal(COMSIG_ATOM_ENTERED, .proc/refresh_mob_views)
+ RegisterSignal(COMSIG_ATOM_EXITED, .proc/_remove_and_refresh)
RegisterSignal(COMSIG_ITEM_PRE_ATTACK, .proc/preattack_intercept)
RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/attack_self)
@@ -402,6 +403,10 @@
return FALSE
return master._removal_reset(thing)
+/datum/component/storage/proc/_remove_and_refresh(atom/movable/thing)
+ _removal_reset(thing)
+ refresh_mob_views()
+
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the new_location target, if that is null it's being deleted
/datum/component/storage/proc/remove_from_storage(atom/movable/AM, atom/new_location)
if(!istype(AM))
diff --git a/code/datums/components/wearertargeting.dm b/code/datums/components/wearertargeting.dm
new file mode 100644
index 0000000000..adf8acceb9
--- /dev/null
+++ b/code/datums/components/wearertargeting.dm
@@ -0,0 +1,26 @@
+// A dummy parent type used for easily making components that target an item's wearer rather than the item itself.
+
+/datum/component/wearertargeting
+ var/datum/component/mobhook
+ var/list/valid_slots = list()
+ var/list/signals = list()
+ var/datum/callback/callback = CALLBACK(GLOBAL_PROC, .proc/pass)
+ var/mobtype = /mob/living
+
+/datum/component/wearertargeting/Initialize()
+ if(!isitem(parent))
+ return COMPONENT_INCOMPATIBLE
+ RegisterSignal(list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), .proc/checkMobHook)
+
+/datum/component/wearertargeting/Destroy()
+ QDEL_NULL(mobhook)
+ return ..()
+
+/datum/component/wearertargeting/proc/checkMobHook(mob/user, slot)
+ if ((slot in valid_slots) && istype(user, mobtype))
+ if (mobhook && mobhook.parent != user)
+ QDEL_NULL(mobhook)
+ if (!mobhook)
+ mobhook = user.AddComponent(/datum/component/redirect, signals, callback)
+ else
+ QDEL_NULL(mobhook)
diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm
index afba151b9f..0baddd87eb 100644
--- a/code/datums/components/wet_floor.dm
+++ b/code/datums/components/wet_floor.dm
@@ -117,7 +117,7 @@
decrease = max(0, decrease)
if((is_wet() & TURF_WET_ICE) && t > T0C) //Ice melts into water!
for(var/obj/O in T.contents)
- if(O.flags_2 & FROZEN_2)
+ if(O.obj_flags & FROZEN)
O.make_unfrozen()
add_wet(TURF_WET_WATER, max_time_left())
dry(TURF_WET_ICE)
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index c6c0f2353a..59953a4ce1 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -1,3 +1,6 @@
+/datum/proc/CanProcCall(procname)
+ return TRUE
+
/datum/proc/can_vv_get(var_name)
return TRUE
diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm
index 74d4b90493..ba570eca06 100644
--- a/code/datums/diseases/_MobProcs.dm
+++ b/code/datums/diseases/_MobProcs.dm
@@ -79,8 +79,8 @@
if(isobj(H.wear_suit))
Cl = H.wear_suit
passed = prob((Cl.permeability_coefficient*100) - 1)
- if(passed && isobj(slot_w_uniform))
- Cl = slot_w_uniform
+ if(passed && isobj(SLOT_W_UNIFORM))
+ Cl = SLOT_W_UNIFORM
passed = prob((Cl.permeability_coefficient*100) - 1)
if(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)
if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS)
diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm
index 14d7f105ab..53e79f0cc1 100644
--- a/code/datums/diseases/advance/symptoms/vomit.dm
+++ b/code/datums/diseases/advance/symptoms/vomit.dm
@@ -55,7 +55,7 @@ Bonus
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance) && !suppress_warning)
- to_chat(M, "[pick("You feel nauseous.", "You feel like you're going to throw up!")] ")
+ to_chat(M, "[pick("You feel nauseated.", "You feel like you're going to throw up!")] ")
else
vomit(M)
diff --git a/code/datums/diseases/heart_failure.dm b/code/datums/diseases/heart_failure.dm
index a9adf39812..3fbf6ef177 100644
--- a/code/datums/diseases/heart_failure.dm
+++ b/code/datums/diseases/heart_failure.dm
@@ -34,7 +34,7 @@
to_chat(H, "You feel dizzy. ")
H.confused += 6
if(prob(3))
- to_chat(H, "You feel [pick("full", "nauseous", "sweaty", "weak", "tired", "short on breath", "uneasy")]. ")
+ to_chat(H, "You feel [pick("full", "nauseated", "sweaty", "weak", "tired", "short on breath", "uneasy")]. ")
if(3 to 4)
if(!sound)
H.playsound_local(H, 'sound/health/slowbeat.ogg',40,0, channel = CHANNEL_HEARTBEAT)
diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm
index cfc848000b..919eaa6e12 100644
--- a/code/datums/diseases/wizarditis.dm
+++ b/code/datums/diseases/wizarditis.dm
@@ -61,19 +61,19 @@ STI KALY - blind
if(!istype(H.head, /obj/item/clothing/head/wizard))
if(!H.dropItemToGround(H.head))
qdel(H.head)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), SLOT_HEAD)
return
if(prob(chance))
if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe))
if(!H.dropItemToGround(H.wear_suit))
qdel(H.wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), SLOT_WEAR_SUIT)
return
if(prob(chance))
if(!istype(H.shoes, /obj/item/clothing/shoes/sandal/magic))
if(!H.dropItemToGround(H.shoes))
qdel(H.shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), SLOT_SHOES)
return
else
var/mob/living/carbon/H = affected_mob
diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm
index a9fa7e4e10..b459b31fcb 100644
--- a/code/datums/helper_datums/getrev.dm
+++ b/code/datums/helper_datums/getrev.dm
@@ -5,7 +5,7 @@
var/date
/datum/getrev/New()
- testmerge = SERVER_TOOLS_PR_LIST
+ testmerge = world.TgsTestMerges()
log_world("Running /tg/ revision:")
var/list/logs = world.file2list(".git/logs/HEAD")
if(logs)
@@ -21,7 +21,8 @@
log_world(commit)
for(var/line in testmerge)
if(line)
- var/tmcommit = testmerge[line]["commit"]
+ var/datum/tgs_revision_information/test_merge/tm = line
+ var/tmcommit = tm.commit
log_world("Test merge active of PR #[line] commit [tmcommit]")
SSblackbox.record_feedback("nested tally", "testmerged_prs", 1, list("[line]", "[tmcommit]"))
if(originmastercommit)
@@ -34,11 +35,12 @@
return ""
. = header ? "The following pull requests are currently test merged: " : ""
for(var/line in testmerge)
- var/cm = testmerge[line]["commit"]
- var/details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["author"]) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 11)))
+ var/datum/tgs_revision_information/test_merge/tm = line
+ var/cm = tm.pull_request_commit
+ var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 11)))
if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder))
continue
- . += "#[line][details] "
+ . += "#[tm.number][details] "
/client/verb/showrevinfo()
set category = "OOC"
@@ -58,9 +60,8 @@
else
to_chat(src, "Master revision unknown")
to_chat(src, "Revision: [GLOB.revdata.commit]")
- if(SERVER_TOOLS_PRESENT)
- to_chat(src, "Server tools version: [SERVER_TOOLS_VERSION]")
- to_chat(src, "Server tools API version: [SERVER_TOOLS_API_VERSION]")
+ if(world.TgsAvailable())
+ to_chat(src, "Server tools version: [world.TgsVersion()]")
to_chat(src, "Current Informational Settings: ")
to_chat(src, "Protect Authority Roles From Traitor: [CONFIG_GET(flag/protect_roles_from_antagonist)]")
to_chat(src, "Protect Assistant Role From Traitor: [CONFIG_GET(flag/protect_assistant_from_antagonist)]")
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 5f97db0827..68b021bc7d 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -53,7 +53,7 @@
/obj/item/clothing/gloves/boxing/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == slot_gloves)
+ if(slot == SLOT_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H,1)
return
@@ -62,6 +62,6 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(slot_gloves) == src)
+ if(H.get_item_by_slot(SLOT_GLOVES) == src)
style.remove(H)
return
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index 8a480cc2d7..c48cf4d9dd 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -73,7 +73,7 @@
D.apply_damage(10, BRUTE)
add_logs(A, D, "cqc kicked")
if(D.IsKnockdown() && !D.stat)
- D.visible_message("[A] kicks [D]'s head, knocking them out! ", \
+ D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out! ", \
"[A] kicks your head, knocking you out! ")
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
D.SetSleeping(300)
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index 82497adf45..21a82c7b7e 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -170,7 +170,7 @@
/obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == slot_gloves)
+ if(slot == SLOT_GLOVES)
var/mob/living/carbon/human/H = user
style.teach(H,1)
@@ -178,7 +178,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(slot_gloves) == src)
+ if(H.get_item_by_slot(SLOT_GLOVES) == src)
style.remove(H)
/obj/item/clothing/gloves/krav_maga/sec//more obviously named, given to sec
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index 845a7507bd..cda88187cd 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -161,7 +161,7 @@
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate."
force = 10
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force_unwielded = 10
force_wielded = 24
throwforce = 20
@@ -219,7 +219,7 @@
if(H.staminaloss && !H.IsSleeping())
var/total_health = (H.health - H.staminaloss)
if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat)
- H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold! ", \
+ H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold! ", \
"[user] knocks you unconscious! ")
H.SetSleeping(600)
H.adjustBrainLoss(15, 150)
diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm
index 8ac7e76cdb..62a03af933 100644
--- a/code/datums/martial/wrestling.dm
+++ b/code/datums/martial/wrestling.dm
@@ -448,7 +448,7 @@
/obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot)
if(!ishuman(user))
return
- if(slot == slot_belt)
+ if(slot == SLOT_BELT)
var/mob/living/carbon/human/H = user
style.teach(H,1)
return
@@ -457,6 +457,6 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(slot_belt) == src)
+ if(H.get_item_by_slot(SLOT_BELT) == src)
style.remove(H)
return
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index e5e13f597f..90feeacb79 100755
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -39,31 +39,31 @@
//Start with uniform,suit,backpack for additional slots
if(uniform)
- H.equip_to_slot_or_del(new uniform(H),slot_w_uniform)
+ H.equip_to_slot_or_del(new uniform(H),SLOT_W_UNIFORM)
if(suit)
- H.equip_to_slot_or_del(new suit(H),slot_wear_suit)
+ H.equip_to_slot_or_del(new suit(H),SLOT_WEAR_SUIT)
if(back)
- H.equip_to_slot_or_del(new back(H),slot_back)
+ H.equip_to_slot_or_del(new back(H),SLOT_BACK)
if(belt)
- H.equip_to_slot_or_del(new belt(H),slot_belt)
+ H.equip_to_slot_or_del(new belt(H),SLOT_BELT)
if(gloves)
- H.equip_to_slot_or_del(new gloves(H),slot_gloves)
+ H.equip_to_slot_or_del(new gloves(H),SLOT_GLOVES)
if(shoes)
- H.equip_to_slot_or_del(new shoes(H),slot_shoes)
+ H.equip_to_slot_or_del(new shoes(H),SLOT_SHOES)
if(head)
- H.equip_to_slot_or_del(new head(H),slot_head)
+ H.equip_to_slot_or_del(new head(H),SLOT_HEAD)
if(mask)
- H.equip_to_slot_or_del(new mask(H),slot_wear_mask)
+ H.equip_to_slot_or_del(new mask(H),SLOT_WEAR_MASK)
if(neck)
- H.equip_to_slot_or_del(new neck(H),slot_neck)
+ H.equip_to_slot_or_del(new neck(H),SLOT_NECK)
if(ears)
- H.equip_to_slot_or_del(new ears(H),slot_ears)
+ H.equip_to_slot_or_del(new ears(H),SLOT_EARS)
if(glasses)
- H.equip_to_slot_or_del(new glasses(H),slot_glasses)
+ H.equip_to_slot_or_del(new glasses(H),SLOT_GLASSES)
if(id)
- H.equip_to_slot_or_del(new id(H),slot_wear_id)
+ H.equip_to_slot_or_del(new id(H),SLOT_WEAR_ID)
if(suit_store)
- H.equip_to_slot_or_del(new suit_store(H),slot_s_store)
+ H.equip_to_slot_or_del(new suit_store(H),SLOT_S_STORE)
if(accessory)
var/obj/item/clothing/under/U = H.w_uniform
@@ -79,16 +79,16 @@
if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon.
if(l_pocket)
- H.equip_to_slot_or_del(new l_pocket(H),slot_l_store)
+ H.equip_to_slot_or_del(new l_pocket(H),SLOT_L_STORE)
if(r_pocket)
- H.equip_to_slot_or_del(new r_pocket(H),slot_r_store)
+ H.equip_to_slot_or_del(new r_pocket(H),SLOT_R_STORE)
if(backpack_contents)
for(var/path in backpack_contents)
var/number = backpack_contents[path]
if(!isnum(number))//Default to 1
number = 1
for(var/i in 1 to number)
- H.equip_to_slot_or_del(new path(H),slot_in_backpack)
+ H.equip_to_slot_or_del(new path(H),SLOT_IN_BACKPACK)
if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm
index 5f0d1be1f2..b39da84575 100644
--- a/code/datums/traits/_quirk.dm
+++ b/code/datums/traits/_quirk.dm
@@ -120,7 +120,7 @@ Use this as a guideline
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H))
H.put_in_hands(glasses)
- H.equip_to_slot(glasses, slot_glasses)
+ H.equip_to_slot(glasses, SLOT_GLASSES)
H.regenerate_icons()
//This whole proc is called automatically
@@ -130,3 +130,5 @@ Use this as a guideline
//If you don't need any special effects like spawning glasses, then you don't need an add()
*/
+
+
diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm
index c944688645..7752cc31c3 100644
--- a/code/datums/traits/negative.dm
+++ b/code/datums/traits/negative.dm
@@ -58,9 +58,9 @@
/obj/item/dice/d20)
heirloom = new heirloom_type(get_turf(quirk_holder))
var/list/slots = list(
- "in your backpack" = slot_in_backpack,
- "in your left pocket" = slot_l_store,
- "in your right pocket" = slot_r_store
+ "in your backpack" = SLOT_IN_BACKPACK,
+ "in your left pocket" = SLOT_L_STORE,
+ "in your right pocket" = SLOT_R_STORE
)
var/where = H.equip_in_one_of_slots(heirloom, slots)
if(!where)
@@ -121,7 +121,7 @@
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H))
H.put_in_hands(glasses)
- H.equip_to_slot(glasses, slot_glasses)
+ H.equip_to_slot(glasses, SLOT_GLASSES)
H.regenerate_icons() //this is to remove the inhand icon, which persists even if it's not in their hands
@@ -230,16 +230,9 @@
return
if(prob(2)) //we'll all be mad soon enough
madness()
-
-/datum/quirk/insanity/proc/madness(mad_fools)
- set waitfor = FALSE
- if(!mad_fools)
- mad_fools = prob(20)
- if(mad_fools)
- var/hallucination_type = pick(subtypesof(/datum/hallucination/rds))
- new hallucination_type (quirk_holder, FALSE)
- else
- quirk_holder.hallucination += rand(10, 50)
+
+/datum/quirk/insanity/proc/madness()
+ quirk_holder.hallucination += rand(10, 25)
/datum/quirk/insanity/post_add() //I don't /think/ we'll need this but for newbies who think "roleplay as insane" = "license to kill" it's probably a good thing to have
if(!quirk_holder.mind || quirk_holder.mind.special_role)
diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm
index ec00351b52..9cbccb8fe9 100644
--- a/code/datums/world_topic.dm
+++ b/code/datums/world_topic.dm
@@ -120,8 +120,12 @@
require_comms_key = TRUE
/datum/world_topic/namecheck/Run(list/input)
- var/datum/server_tools_command/namecheck/NC = new
- return NC.Run(input["sender"], input["namecheck"])
+ //Oh this is a hack, someone refactor the functionality out of the chat command PLS
+ var/datum/tgs_chat_command/namecheck/NC = new
+ var/datum/tgs_chat_user/user = new
+ user.friendly_name = input["sender"]
+ user.mention = user.friendly_name
+ return NC.Run(user, input["namecheck"])
/datum/world_topic/adminwho
keyword = "adminwho"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 6b4e882235..c308aec45f 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -4,7 +4,6 @@
var/level = 2
var/flags_1 = NONE
- var/flags_2 = NONE
var/interaction_flags_atom = NONE
var/container_type = NONE
var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff.
@@ -223,7 +222,7 @@
/atom/proc/emp_act(severity)
SendSignal(COMSIG_ATOM_EMP_ACT, severity)
- if(istype(wires) && !(flags_2 & NO_EMP_WIRES_2))
+ if(istype(wires) && !(flags_1 & NO_EMP_WIRES_1))
wires.emp_pulse()
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index a77bf196c2..93d77209e0 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -1,6 +1,6 @@
GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"))
GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store"))
-GLOBAL_LIST_INIT(slot2slot, list("head" = slot_head, "wear_mask" = slot_wear_mask, "neck" = slot_neck, "back" = slot_back, "wear_suit" = slot_wear_suit, "w_uniform" = slot_w_uniform, "shoes" = slot_shoes, "belt" = slot_belt, "gloves" = slot_gloves, "glasses" = slot_glasses, "ears" = slot_ears, "wear_id" = slot_wear_id, "s_store" = slot_s_store))
+GLOBAL_LIST_INIT(slot2slot, list("head" = SLOT_HEAD, "wear_mask" = SLOT_WEAR_MASK, "neck" = SLOT_NECK, "back" = SLOT_BACK, "wear_suit" = SLOT_WEAR_SUIT, "w_uniform" = SLOT_W_UNIFORM, "shoes" = SLOT_SHOES, "belt" = SLOT_BELT, "gloves" = SLOT_GLOVES, "glasses" = SLOT_GLASSES, "ears" = SLOT_EARS, "wear_id" = SLOT_WEAR_ID, "s_store" = SLOT_S_STORE))
GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling))
GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our this objective to all lings
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index 03de28e0ff..355dd869b1 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -198,7 +198,7 @@ Credit where due:
L.equipOutfit(/datum/outfit/servant_of_ratvar)
var/obj/item/clockwork/slab/S = new
var/slot = "At your feet"
- var/list/slots = list("In your left pocket" = slot_l_store, "In your right pocket" = slot_r_store, "In your backpack" = slot_in_backpack, "On your belt" = slot_belt)
+ var/list/slots = list("In your left pocket" = SLOT_L_STORE, "In your right pocket" = SLOT_R_STORE, "In your backpack" = SLOT_IN_BACKPACK, "On your belt" = SLOT_BELT)
if(ishuman(L))
var/mob/living/carbon/human/H = L
slot = H.equip_in_one_of_slots(S, slots)
@@ -211,7 +211,7 @@ Credit where due:
to_chat(L, "There is a paper in your backpack! It'll tell you if anything's changed, as well as what to expect. ")
to_chat(L, "[slot] is a clockwork slab , a multipurpose tool used to construct machines and invoke ancient words of power. If this is your first time \
as a servant, you can find a concise tutorial in the Recollection category of its interface. ")
- to_chat(L, "If you want more information, you can find a wiki link here! https://tgstation13.org/wiki/Clockwork_Cult")
+ to_chat(L, "If you want more information, you can read the wiki page to learn more. ")
return TRUE
return FALSE
diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm
index 86db2e94f9..c7212a671c 100644
--- a/code/game/gamemodes/clown_ops/bananium_bomb.dm
+++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm
@@ -43,17 +43,17 @@
if(!H.w_uniform || H.dropItemToGround(H.w_uniform))
C = new /obj/item/clothing/under/rank/clown(H)
C.flags_1 |= NODROP_1 //mwahaha
- H.equip_to_slot_or_del(C, slot_w_uniform)
+ H.equip_to_slot_or_del(C, SLOT_W_UNIFORM)
if(!H.shoes || H.dropItemToGround(H.shoes))
C = new /obj/item/clothing/shoes/clown_shoes(H)
C.flags_1 |= NODROP_1
- H.equip_to_slot_or_del(C, slot_shoes)
+ H.equip_to_slot_or_del(C, SLOT_SHOES)
if(!H.wear_mask || H.dropItemToGround(H.wear_mask))
C = new /obj/item/clothing/mask/gas/clown_hat(H)
C.flags_1 |= NODROP_1
- H.equip_to_slot_or_del(C, slot_wear_mask)
+ H.equip_to_slot_or_del(C, SLOT_WEAR_MASK)
H.dna.add_mutation(CLOWNMUT)
H.gain_trauma(/datum/brain_trauma/mild/phobia, TRAUMA_RESILIENCE_LOBOTOMY, "clowns") //MWA HA HA
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index 6488a98d7d..067bb8c84c 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -15,7 +15,7 @@
/obj/item/clothing/shoes/clown_shoes/combat
name = "combat clown shoes"
desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeek at 100% capacity."
- flags_1 = NOSLIP_1
+ clothing_flags = NOSLIP
slowdown = SHOES_SLOWDOWN
armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
strip_delay = 70
@@ -107,7 +107,7 @@
/obj/item/melee/transforming/energy/sword/bananium/suicide_act(mob/user)
if(!active)
transform_weapon(user, TRUE)
- user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku, but the blade slips off of them harmlessly! ")
+ user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku, but the blade slips off of [user.p_them()] harmlessly! ")
GET_COMPONENT(slipper, /datum/component/slippery)
slipper.Slip(user)
return SHAME
@@ -209,7 +209,7 @@
if(!istype(M.wear_mask, /obj/item/clothing/mask/gas/clown_hat) && !istype(M.wear_mask, /obj/item/clothing/mask/gas/mime) )
if(!M.wear_mask || M.dropItemToGround(M.wear_mask))
var/obj/item/clothing/mask/fakemoustache/sticky/the_stash = new /obj/item/clothing/mask/fakemoustache/sticky()
- M.equip_to_slot_or_del(the_stash, slot_wear_mask, TRUE, TRUE, TRUE, TRUE)
+ M.equip_to_slot_or_del(the_stash, SLOT_WEAR_MASK, TRUE, TRUE, TRUE, TRUE)
/obj/item/clothing/mask/fakemoustache/sticky
var/unstick_time = 600
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index b6ea8c5234..3b7dca1a81 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -155,7 +155,7 @@
if(tc)
var/obj/item/radio/uplink/U = new uplink_type(H, H.key, tc)
- H.equip_to_slot_or_del(U, slot_in_backpack)
+ H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK)
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H)
W.implant(H)
@@ -171,7 +171,7 @@
mask = /obj/item/clothing/mask/gas/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/syndi
r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
- internals_slot = slot_r_store
+ internals_slot = SLOT_R_STORE
belt = /obj/item/storage/belt/military
r_hand = /obj/item/gun/ballistic/automatic/shotgun/bulldog
backpack_contents = list(/obj/item/storage/box/syndie=1,\
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 04753e3d50..7559e21e21 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(objectives)
if(receiver && receiver.current)
if(ishuman(receiver.current))
var/mob/living/carbon/human/H = receiver.current
- var/list/slots = list("backpack" = slot_in_backpack)
+ var/list/slots = list("backpack" = SLOT_IN_BACKPACK)
for(var/eq_path in special_equipment)
var/obj/O = new eq_path
H.equip_in_one_of_slots(O, slots)
@@ -712,6 +712,8 @@ GLOBAL_LIST_EMPTY(possible_items_special)
var/min_lings = 3 //Minimum amount of lings for this team objective to be possible
var/escape_objective_compatible = FALSE
+/datum/objective/changeling_team_objective/proc/prepare()
+ return FALSE
//Impersonate department
//Picks as many people as it can from a department (Security,Engineer,Medical,Science)
@@ -724,6 +726,19 @@ GLOBAL_LIST_EMPTY(possible_items_special)
var/department_string = ""
+/datum/objective/changeling_team_objective/impersonate_department/prepare()
+ var/result = FALSE
+ if(command_staff_only)
+ result = get_heads()
+ else
+ result = get_department_staff()
+ if(result)
+ update_explanation_text()
+ return TRUE
+ else
+ return FALSE
+
+
/datum/objective/changeling_team_objective/impersonate_department/proc/get_department_staff()
department_minds = list()
department_real_names = list()
@@ -756,9 +771,8 @@ GLOBAL_LIST_EMPTY(possible_items_special)
if(!department_minds.len)
log_game("[type] has failed to find department staff, and has removed itself. the round will continue normally")
- owner.objectives -= src
- qdel(src)
- return
+ return FALSE
+ return TRUE
/datum/objective/changeling_team_objective/impersonate_department/proc/get_heads()
@@ -785,19 +799,8 @@ GLOBAL_LIST_EMPTY(possible_items_special)
if(!department_minds.len)
log_game("[type] has failed to find department heads, and has removed itself. the round will continue normally")
- owner.objectives -= src
- qdel(src)
- return
-
-
-/datum/objective/changeling_team_objective/impersonate_department/New(var/text)
- ..()
- if(command_staff_only)
- get_heads()
- else
- get_department_staff()
-
- update_explanation_text()
+ return FALSE
+ return TRUE
/datum/objective/changeling_team_objective/impersonate_department/update_explanation_text()
@@ -862,9 +865,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return TRUE
return FALSE
-
-
-
//A subtype of impersonate_department
//This subtype always picks as many command staff as it can (HoS,HoP,Cap,CE,CMO,RD)
//and tasks the lings with killing and replacing them
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 64fda883b9..d42c546990 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -41,7 +41,7 @@
name = "a hand teleporter."
targetitem = /obj/item/hand_tele
difficulty = 5
- excludefromjob = list("Captain")
+ excludefromjob = list("Captain", "Research Director")
/datum/objective_item/steal/jetpack
name = "the Captain's jetpack."
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index ac211efe58..17bfe5e02c 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -399,7 +399,7 @@
QDEL_IN(mob_occupant, 40)
/obj/machinery/clonepod/relaymove(mob/user)
- container_resist()
+ container_resist(user)
/obj/machinery/clonepod/container_resist(mob/living/user)
if(user.stat == CONSCIOUS)
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index b58fb7ee34..46898bb2d7 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -507,9 +507,9 @@
if(ORION_TRAIL_ILLNESS)
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
if(severity == 1)
- to_chat(M, "You suddenly feel slightly nauseous. " )
+ to_chat(M, "You suddenly feel slightly nauseated. " )
if(severity == 2)
- to_chat(usr, "You suddenly feel extremely nauseous and hunch over until it passes. ")
+ to_chat(usr, "You suddenly feel extremely nauseated and hunch over until it passes. ")
M.Stun(60)
if(severity >= 3) //you didn't pray hard enough
to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit. ")
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 9f50afdfee..14d02e9752 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -45,7 +45,7 @@
/obj/machinery/computer/communications/process()
if(..())
- if(state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE)
+ if(state != STATE_STATUSDISPLAY && state != STATE_CALLSHUTTLE && state != STATE_PURCHASE && state != STATE_VIEWMESSAGE)
updateDialog()
/obj/machinery/computer/communications/Topic(href, href_list)
diff --git a/code/game/machinery/computer/gulag_teleporter.dm b/code/game/machinery/computer/gulag_teleporter.dm
index 002e682bfa..4e80883a31 100644
--- a/code/game/machinery/computer/gulag_teleporter.dm
+++ b/code/game/machinery/computer/gulag_teleporter.dm
@@ -140,14 +140,22 @@
return locate(/obj/structure/gulag_beacon)
/obj/machinery/computer/gulag_teleporter_computer/proc/teleport(mob/user)
- log_game("[user]([user.ckey] teleported [prisoner]([prisoner.ckey]) to the Labor Camp ([beacon.x], [beacon.y], [beacon.z]) for [id.goal] points.")
+ if(!id) //incase the ID was removed after the transfer timer was set.
+ say("Warning: Unable to transfer prisoner without a valid Prisoner ID inserted!")
+ return
+ var/id_goal_not_set
+ if(!id.goal)
+ id_goal_not_set = TRUE
+ id.goal = default_goal
+ say("[id]'s ID card goal defaulting to [id.goal] points.")
+ log_game("[user]([user.ckey] teleported [prisoner]([prisoner.ckey]) to the Labor Camp ([beacon.x], [beacon.y], [beacon.z]) for [id_goal_not_set ? "default goal of ":""][id.goal] points.")
teleporter.handle_prisoner(id, temporary_record)
- playsound(loc, 'sound/weapons/emitter.ogg', 50, 1)
+ playsound(src, 'sound/weapons/emitter.ogg', 50, 1)
prisoner.forceMove(get_turf(beacon))
prisoner.Knockdown(40) // small travel dizziness
to_chat(prisoner, "The teleportation makes you a little dizzy. ")
- new /obj/effect/particle_effect/sparks(prisoner.loc)
- playsound(src.loc, "sparks", 50, 1)
+ new /obj/effect/particle_effect/sparks(get_turf(prisoner))
+ playsound(src, "sparks", 50, 1)
if(teleporter.locked)
teleporter.locked = FALSE
teleporter.toggle_open()
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 7aab26dc63..59bf9f86fd 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -4,7 +4,7 @@
icon_state = "box_0"
density = TRUE
max_integrity = 250
- var/obj/item/circuitboard/circuit = null
+ var/obj/item/circuitboard/machine/circuit = null
var/state = 1
/obj/structure/frame/examine(user)
@@ -165,6 +165,13 @@
icon_state = "box_1"
return
+ if(istype(P, /obj/item/wrench) && !circuit.needs_anchored)
+ to_chat(user, "You start [anchored ? "un" : ""]securing [name]... ")
+ if(P.use_tool(src, user, 40, volume=75))
+ to_chat(user, "You [anchored ? "un" : ""]secure [name]. ")
+ anchored = !anchored
+ return
+
if(istype(P, /obj/item/screwdriver))
var/component_check = 1
for(var/R in req_components)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 880f0fe8c8..db0a9a5866 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -323,12 +323,12 @@
return
else
return
- else if(user.hallucinating() && ishuman(user) && prob(4) && !operating)
+ else if(user.hallucinating() && ishuman(user) && prob(1) && !operating)
var/mob/living/carbon/human/H = user
if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
if(G.siemens_coefficient)//not insulated
- hallucinate_shock(H)
+ new /datum/hallucination/shock(H)
return
if (cyclelinkedairlock)
if (!shuttledocked && !emergency && !cyclelinkedairlock.shuttledocked && !cyclelinkedairlock.emergency && allowed(user))
@@ -338,34 +338,6 @@
addtimer(CALLBACK(cyclelinkedairlock, .proc/close), 2)
..()
-/obj/machinery/door/airlock/proc/hallucinate_shock(mob/living/user)
- var/image/shock_image = image(user, user, dir = user.dir)
- var/image/electrocution_skeleton_anim = image('icons/mob/human.dmi', user, icon_state = "electrocuted_base", layer=ABOVE_MOB_LAYER)
- shock_image.color = rgb(0,0,0)
- shock_image.override = TRUE
- electrocution_skeleton_anim.appearance_flags |= RESET_COLOR|KEEP_APART
-
- to_chat(user, "You feel a powerful shock course through your body! ")
- if(user.client)
- user.client.images |= shock_image
- user.client.images |= electrocution_skeleton_anim
- addtimer(CALLBACK(src, .proc/reset_hallucinate_shock_animation, user, shock_image, electrocution_skeleton_anim), 40)
- user.playsound_local(get_turf(src), "sparks", 100, 1)
- user.staminaloss += 50
- user.Stun(40)
- user.jitteriness += 1000
- user.do_jitter_animation(user.jitteriness)
- addtimer(CALLBACK(src, .proc/hallucinate_shock_drop, user), 20)
-
-/obj/machinery/door/airlock/proc/reset_hallucinate_shock_animation(mob/living/user, shock_image, electrocution_skeleton_anim)
- if(user.client)
- user.client.images.Remove(shock_image)
- user.client.images.Remove(electrocution_skeleton_anim)
-
-/obj/machinery/door/airlock/proc/hallucinate_shock_drop(mob/living/user)
- user.jitteriness = max(user.jitteriness - 990, 10) //Still jittery, but vastly less
- user.Knockdown(60)
-
/obj/machinery/door/airlock/proc/isElectrified()
if(src.secondsElectrified != NOT_ELECTRIFIED)
return TRUE
@@ -1098,10 +1070,8 @@
else
playsound(src.loc, 'sound/machines/airlockforced.ogg', 30, 1)
- if(autoclose && normalspeed)
- addtimer(CALLBACK(src, .proc/autoclose), 150)
- else if(autoclose && !normalspeed)
- addtimer(CALLBACK(src, .proc/autoclose), 15)
+ if(autoclose)
+ autoclose_in(normalspeed ? 150 : 15)
if(!density)
return TRUE
@@ -1134,7 +1104,7 @@
if(safe)
for(var/atom/movable/M in get_turf(src))
if(M.density && M != src) //something is blocking the door
- addtimer(CALLBACK(src, .proc/autoclose), 60)
+ autoclose_in(60)
return
if(forced < 2)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 4685097de1..ed92d9f385 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -274,7 +274,7 @@
for(var/atom/movable/M in get_turf(src))
if(M.density && M != src) //something is blocking the door
if(autoclose)
- addtimer(CALLBACK(src, .proc/autoclose), 60)
+ autoclose_in(60)
return
operating = TRUE
@@ -303,7 +303,7 @@
/obj/machinery/door/proc/crush()
for(var/mob/living/L in get_turf(src))
- L.visible_message("[src] closes on [L], crushing them! ", "[src] closes on you and crushes you! ")
+ L.visible_message("[src] closes on [L], crushing [L.p_them()]! ", "[src] closes on you and crushes you! ")
if(isalien(L)) //For xenos
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 1.5) //Xenos go into crit after aproximately the same amount of crushes as humans.
L.emote("roar")
@@ -326,6 +326,9 @@
if(!QDELETED(src) && !density && !operating && !locked && !welded && autoclose)
close()
+/obj/machinery/door/proc/autoclose_in(wait)
+ addtimer(CALLBACK(src, .proc/autoclose), wait, TIMER_UNIQUE | TIMER_NO_HASH_WAIT | TIMER_OVERRIDE)
+
/obj/machinery/door/proc/requiresID()
return 1
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 3f26e7d80d..4a2df11151 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -144,9 +144,7 @@
else
close()
-/obj/machinery/door/firedoor/interact(mob/user)
- if(!issilicon(user))
- return TRUE
+/obj/machinery/door/firedoor/attack_ai(mob/user)
add_fingerprint(user)
if(welded || operating || stat & NOPOWER)
return TRUE
@@ -156,6 +154,9 @@
close()
return TRUE
+/obj/machinery/door/firedoor/attack_robot(mob/user)
+ return attack_ai(user)
+
/obj/machinery/door/firedoor/attack_alien(mob/user)
add_fingerprint(user)
if(welded)
diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm
index 93a6cfca62..95bf10bc6c 100644
--- a/code/game/machinery/launch_pad.dm
+++ b/code/game/machinery/launch_pad.dm
@@ -242,7 +242,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "blpad-remote"
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
var/sending = TRUE
var/obj/machinery/launchpad/briefcase/pad
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 0964c1d913..9c155219e3 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -38,7 +38,7 @@ Buildable meters
/obj/item/pipe/ComponentInitialize()
//Flipping handled manually due to custom handling for trinary pipes
- AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE ,null,null, CALLBACK(src, .proc/fixdir))
+ AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE)
/obj/item/pipe/Initialize(mapload, _pipe_type, _dir, obj/machinery/atmospherics/make_from)
if(make_from)
@@ -98,7 +98,6 @@ Buildable meters
/obj/item/pipe/proc/do_a_flip()
setDir(turn(dir, -180))
- fixdir()
/obj/item/pipe/trinary/flippable/do_a_flip()
setDir(turn(dir, flipped ? 45 : -45))
@@ -109,23 +108,24 @@ Buildable meters
..()
setDir(old_dir) //pipes changing direction when moved is just annoying and buggy
-//Helper to clean up dir
-/obj/item/pipe/proc/fixdir()
- return
+// Convert dir of fitting into dir of built component
+/obj/item/pipe/proc/fixed_dir()
+ return dir
-/obj/item/pipe/binary/fixdir()
+/obj/item/pipe/binary/fixed_dir()
+ . = dir
if(dir == SOUTH)
- setDir(NORTH)
+ . = NORTH
else if(dir == WEST)
- setDir(EAST)
+ . = EAST
-/obj/item/pipe/trinary/flippable/fixdir()
+/obj/item/pipe/trinary/flippable/fixed_dir()
+ . = dir
if(dir in GLOB.diagonals)
- setDir(turn(dir, 45))
+ . = turn(dir, 45)
/obj/item/pipe/attack_self(mob/user)
setDir(turn(dir,-90))
- fixdir()
/obj/item/pipe/wrench_act(mob/living/user, obj/item/wrench/W)
if(!isturf(loc))
@@ -133,8 +133,6 @@ Buildable meters
add_fingerprint(user)
- fixdir()
-
var/obj/machinery/atmospherics/fakeA = pipe_type
var/flags = initial(fakeA.pipe_flags)
for(var/obj/machinery/atmospherics/M in loc)
@@ -143,7 +141,7 @@ Buildable meters
return TRUE
if((M.piping_layer != piping_layer) && !((M.pipe_flags | flags) & PIPING_ALL_LAYER)) //don't continue if either pipe goes across all layers
continue
- if(M.GetInitDirections() & SSair.get_init_dirs(pipe_type, dir)) // matches at least one direction on either type of pipe
+ if(M.GetInitDirections() & SSair.get_init_dirs(pipe_type, fixed_dir())) // matches at least one direction on either type of pipe
to_chat(user, "There is already a pipe at that location! ")
return TRUE
// no conflicts found
@@ -162,7 +160,7 @@ Buildable meters
qdel(src)
/obj/item/pipe/proc/build_pipe(obj/machinery/atmospherics/A)
- A.setDir(dir)
+ A.setDir(fixed_dir())
A.SetInitDirections()
if(pipename)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index b0a2112f2b..e17c543154 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -202,7 +202,7 @@
if(occupant || helmet || suit || storage)
return
if(target == user)
- user.visible_message("[user] slips into [src] and closes the door behind them! ", "You slip into [src]'s cramped space and shut its door. ")
+ user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]! ", "You slip into [src]'s cramped space and shut its door. ")
else
target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door! ")
close_machine(target)
@@ -300,7 +300,7 @@
/obj/machinery/suit_storage_unit/proc/resist_open(mob/user)
if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here.
- visible_message("You see [user] bursts out of [src]! ", \
+ visible_message("You see [user] burst out of [src]! ", \
"You escape the cramped confines of [src]! ")
open_machine()
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 7d7d010b2c..be5b404edc 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -5,7 +5,7 @@
name = "ominous beacon"
desc = "This looks suspicious..."
icon = 'icons/obj/singularity.dmi'
- icon_state = "beacon"
+ icon_state = "beacon0"
anchored = FALSE
density = TRUE
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 90c598cccc..3ede481c60 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -70,7 +70,7 @@
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/patient_insertion_check(mob/living/carbon/target)
if(target.buckled)
- occupant_message("[target] will not fit into the sleeper because [target.p_they()] [target.p_are()] buckled to [target.buckled]! ")
+ occupant_message("[target] will not fit into the sleeper because [target.p_theyre()] buckled to [target.buckled]! ")
return
if(target.has_buckled_mobs())
occupant_message("[target] will not fit into the sleeper because of the creatures attached to it! ")
diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm
index 96adece298..3a047b20a1 100644
--- a/code/game/mecha/equipment/tools/work_tools.dm
+++ b/code/game/mecha/equipment/tools/work_tools.dm
@@ -194,7 +194,7 @@
equip_cooldown = 10
energy_drain = 250
range = MELEE|RANGED
- flags_2 = NO_MAT_REDEMPTION_2
+ item_flags = NO_MAT_REDEMPTION
var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock.
/obj/item/mecha_parts/mecha_equipment/rcd/Initialize()
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 0794b818da..43ee2991e0 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -1,7 +1,7 @@
/obj/effect/decal/cleanable
gender = PLURAL
layer = ABOVE_NORMAL_TURF_LAYER
- var/list/random_icon_states = list()
+ var/list/random_icon_states = null
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
var/mergeable_decal = TRUE //when two of these are on a same tile or do we need to merge them into just one?
diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm
index 14b50f987a..ef074f4cec 100644
--- a/code/game/objects/effects/forcefields.dm
+++ b/code/game/objects/effects/forcefields.dm
@@ -27,7 +27,7 @@
///////////Mimewalls///////////
/obj/effect/forcefield/mime
- icon_state = "empty"
+ icon_state = "nothing"
name = "invisible wall"
desc = "You have a bad feeling about this."
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 8dab6e4246..42d0f097d9 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -78,7 +78,7 @@
pixel_x = -32
icon_state = "[base_icon_state][rand(1,3)]"
else //if on the floor, glowshroom on-floor sprite
- icon_state = "[base_icon_state]f"
+ icon_state = base_icon_state
addtimer(CALLBACK(src, .proc/Spread), delay)
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index 2de7770b72..b1bb3e6b4d 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -1,46 +1,67 @@
+#define CELSIUS_TO_KELVIN(T_K) ((T_K) + T0C)
+
+#define OPTIMAL_TEMP_K_PLA_BURN_SCALE(PRESSURE_P,PRESSURE_O,TEMP_O) (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT]) / (((PRESSURE_P) * GLOB.meta_gas_info[/datum/gas/plasma][META_GAS_SPECIFIC_HEAT] + (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT]) / PLASMA_UPPER_TEMPERATURE - (PRESSURE_O) * GLOB.meta_gas_info[/datum/gas/oxygen][META_GAS_SPECIFIC_HEAT] / CELSIUS_TO_KELVIN(TEMP_O)))
+#define OPTIMAL_TEMP_K_PLA_BURN_RATIO(PRESSURE_P,PRESSURE_O,TEMP_O) (CELSIUS_TO_KELVIN(TEMP_O) * PLASMA_OXYGEN_FULLBURN * (PRESSURE_P) / (PRESSURE_O))
+
/obj/effect/spawner/newbomb
name = "bomb"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x"
- var/btemp1 = 1500
- var/btemp2 = 1000 // tank temperatures
+ var/temp_p = 1500
+ var/temp_o = 1000 // tank temperatures
+ var/pressure_p = 10 * ONE_ATMOSPHERE
+ var/pressure_o = 10 * ONE_ATMOSPHERE //tank pressures
var/assembly_type
/obj/effect/spawner/newbomb/Initialize()
. = ..()
var/obj/item/transfer_valve/V = new(src.loc)
- var/obj/item/tank/internals/plasma/full/PT = new(V)
+ var/obj/item/tank/internals/plasma/PT = new(V)
var/obj/item/tank/internals/oxygen/OT = new(V)
- PT.air_contents.temperature = btemp1 + T0C
- OT.air_contents.temperature = btemp2 + T0C
+ PT.air_contents.assert_gas(/datum/gas/plasma)
+ PT.air_contents.gases[/datum/gas/plasma][MOLES] = pressure_p*PT.volume/(R_IDEAL_GAS_EQUATION*CELSIUS_TO_KELVIN(temp_p))
+ PT.air_contents.temperature = CELSIUS_TO_KELVIN(temp_p)
+
+ OT.air_contents.assert_gas(/datum/gas/oxygen)
+ OT.air_contents.gases[/datum/gas/oxygen][MOLES] = pressure_o*OT.volume/(R_IDEAL_GAS_EQUATION*CELSIUS_TO_KELVIN(temp_o))
+ OT.air_contents.temperature = CELSIUS_TO_KELVIN(temp_o)
V.tank_one = PT
V.tank_two = OT
PT.master = V
OT.master = V
-
+
if(assembly_type)
var/obj/item/assembly/A = new assembly_type(V)
V.attached_device = A
A.holder = V
- A.toggle_secure()
V.update_icon()
-
+
return INITIALIZE_HINT_QDEL
+/obj/effect/spawner/newbomb/timer/syndicate/Initialize()
+ temp_p = (OPTIMAL_TEMP_K_PLA_BURN_SCALE(pressure_p, pressure_o, temp_o)/2 + OPTIMAL_TEMP_K_PLA_BURN_RATIO(pressure_p, pressure_o, temp_o)/2) - T0C
+ . = ..()
+
/obj/effect/spawner/newbomb/timer
assembly_type = /obj/item/assembly/timer
/obj/effect/spawner/newbomb/timer/syndicate
- btemp1 = 150
- btemp2 = 20
+ pressure_o = TANK_LEAK_PRESSURE - 1
+ temp_o = 20
+
+ pressure_p = TANK_LEAK_PRESSURE - 1
/obj/effect/spawner/newbomb/proximity
assembly_type = /obj/item/assembly/prox_sensor
/obj/effect/spawner/newbomb/radio
assembly_type = /obj/item/assembly/signaler
-
+
+#undef CELSIUS_TO_KELVIN
+
+#undef OPTIMAL_TEMP_K_PLA_BURN_SCALE
+#undef OPTIMAL_TEMP_K_PLA_BURN_RATIO
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 0bf7edbd7b..bd4237a9db 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -5,7 +5,7 @@
var/lootcount = 1 //how many items will be spawned
var/lootdoubles = TRUE //if the same item can be spawned twice
var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect)
- var/fan_out_items = FALSE //Whether the items should be distributed to offsets 0,3,-3,6,-6,9,-9.. This overrides pixel_x/y on the spawner itself
+ var/fan_out_items = FALSE //Whether the items should be distributed to offsets 0,1,-1,2,-2,3,-3.. This overrides pixel_x/y on the spawner itself
/obj/effect/spawner/lootdrop/Initialize(mapload)
..()
@@ -26,7 +26,7 @@
spawned_loot.pixel_y = pixel_y
else
if (loot_spawned)
- spawned_loot.pixel_x = spawned_loot.pixel_y = ((!(loot_spawned%2)*loot_spawned/2)*-3)+((loot_spawned%2)*(loot_spawned+1)/2*3)
+ spawned_loot.pixel_x = spawned_loot.pixel_y = ((!(loot_spawned%2)*loot_spawned/2)*-1)+((loot_spawned%2)*(loot_spawned+1)/2*1)
loot_spawned++
return INITIALIZE_HINT_QDEL
@@ -206,3 +206,115 @@
/obj/item/aiModule/core/full/thermurderdynamic,
/obj/item/aiModule/core/full/damaged
)
+
+// Tech storage circuit board spawners
+// For these, make sure that lootcount equals the number of list items
+
+/obj/effect/spawner/lootdrop/techstorage
+ name = "generic circuit board spawner"
+ lootdoubles = FALSE
+ fan_out_items = TRUE
+
+/obj/effect/spawner/lootdrop/techstorage/service
+ name = "service circuit board spawner"
+ lootcount = 10
+ loot = list(
+ /obj/item/circuitboard/computer/arcade/battle,
+ /obj/item/circuitboard/computer/arcade/orion_trail,
+ /obj/item/circuitboard/machine/autolathe,
+ /obj/item/circuitboard/computer/mining,
+ /obj/item/circuitboard/machine/ore_redemption,
+ /obj/item/circuitboard/machine/mining_equipment_vendor,
+ /obj/item/circuitboard/machine/microwave,
+ /obj/item/circuitboard/machine/chem_dispenser/drinks,
+ /obj/item/circuitboard/machine/chem_dispenser/drinks/beer,
+ /obj/item/circuitboard/computer/slot_machine
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/rnd
+ name = "RnD circuit board spawner"
+ lootcount = 8
+ loot = list(
+ /obj/item/circuitboard/computer/aifixer,
+ /obj/item/circuitboard/machine/rdserver,
+ /obj/item/circuitboard/computer/pandemic,
+ /obj/item/circuitboard/machine/mechfab,
+ /obj/item/circuitboard/machine/circuit_imprinter/department,
+ /obj/item/circuitboard/computer/teleporter,
+ /obj/item/circuitboard/machine/destructive_analyzer,
+ /obj/item/circuitboard/computer/rdconsole
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/security
+ name = "security circuit board spawner"
+ lootcount = 3
+ loot = list(
+ /obj/item/circuitboard/computer/secure_data,
+ /obj/item/circuitboard/computer/security,
+ /obj/item/circuitboard/computer/prisoner
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/engineering
+ name = "engineering circuit board spawner"
+ lootcount = 3
+ loot = list(
+ /obj/item/circuitboard/computer/atmos_alert,
+ /obj/item/circuitboard/computer/stationalert,
+ /obj/item/circuitboard/computer/powermonitor
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/tcomms
+ name = "tcomms circuit board spawner"
+ lootcount = 9
+ loot = list(
+ /obj/item/circuitboard/computer/message_monitor,
+ /obj/item/circuitboard/machine/telecomms/broadcaster,
+ /obj/item/circuitboard/machine/telecomms/bus,
+ /obj/item/circuitboard/machine/telecomms/server,
+ /obj/item/circuitboard/machine/telecomms/receiver,
+ /obj/item/circuitboard/machine/telecomms/processor,
+ /obj/item/circuitboard/machine/announcement_system,
+ /obj/item/circuitboard/computer/comm_server,
+ /obj/item/circuitboard/computer/comm_monitor
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/medical
+ name = "medical circuit board spawner"
+ lootcount = 8
+ loot = list(
+ /obj/item/circuitboard/computer/cloning,
+ /obj/item/circuitboard/machine/clonepod,
+ /obj/item/circuitboard/machine/chem_dispenser,
+ /obj/item/circuitboard/computer/scan_consolenew,
+ /obj/item/circuitboard/computer/med_data,
+ /obj/item/circuitboard/machine/smoke_machine,
+ /obj/item/circuitboard/machine/chem_master,
+ /obj/item/circuitboard/machine/clonescanner
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/AI
+ name = "secure AI circuit board spawner"
+ lootcount = 3
+ loot = list(
+ /obj/item/circuitboard/computer/aiupload,
+ /obj/item/circuitboard/computer/borgupload,
+ /obj/item/circuitboard/aicore
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/command
+ name = "secure command circuit board spawner"
+ lootcount = 3
+ loot = list(
+ /obj/item/circuitboard/computer/crew,
+ /obj/item/circuitboard/computer/communications,
+ /obj/item/circuitboard/computer/card
+ )
+
+/obj/effect/spawner/lootdrop/techstorage/RnD_secure
+ name = "secure RnD circuit board spawner"
+ lootcount = 3
+ loot = list(
+ /obj/item/circuitboard/computer/mecha_control,
+ /obj/item/circuitboard/computer/apc_control,
+ /obj/item/circuitboard/computer/robotics
+ )
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e5335049ec..042ff6d8f0 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -381,7 +381,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
//sometimes we only want to grant the item's action if it's equipped in a specific slot.
/obj/item/proc/item_action_slot_check(slot, mob/user)
- if(slot == slot_in_backpack || slot == slot_legcuffed) //these aren't true slots, so avoid granting actions there
+ if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there
return FALSE
return TRUE
@@ -463,7 +463,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
"[user] stabs you in the eye with [src]! ")
else
user.visible_message( \
- "[user] has stabbed themself in the eyes with [src]! ", \
+ "[user] has stabbed [user.p_them()]self in the eyes with [src]! ", \
"You stab yourself in the eyes with [src]! " \
)
if(is_human_victim)
@@ -545,29 +545,29 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
return
var/mob/owner = loc
var/flags = slot_flags
- if(flags & SLOT_OCLOTHING)
+ if(flags & ITEM_SLOT_OCLOTHING)
owner.update_inv_wear_suit()
- if(flags & SLOT_ICLOTHING)
+ if(flags & ITEM_SLOT_ICLOTHING)
owner.update_inv_w_uniform()
- if(flags & SLOT_GLOVES)
+ if(flags & ITEM_SLOT_GLOVES)
owner.update_inv_gloves()
- if(flags & SLOT_EYES)
+ if(flags & ITEM_SLOT_EYES)
owner.update_inv_glasses()
- if(flags & SLOT_EARS)
+ if(flags & ITEM_SLOT_EARS)
owner.update_inv_ears()
- if(flags & SLOT_MASK)
+ if(flags & ITEM_SLOT_MASK)
owner.update_inv_wear_mask()
- if(flags & SLOT_HEAD)
+ if(flags & ITEM_SLOT_HEAD)
owner.update_inv_head()
- if(flags & SLOT_FEET)
+ if(flags & ITEM_SLOT_FEET)
owner.update_inv_shoes()
- if(flags & SLOT_ID)
+ if(flags & ITEM_SLOT_ID)
owner.update_inv_wear_id()
- if(flags & SLOT_BELT)
+ if(flags & ITEM_SLOT_BELT)
owner.update_inv_belt()
- if(flags & SLOT_BACK)
+ if(flags & ITEM_SLOT_BACK)
owner.update_inv_back()
- if(flags & SLOT_NECK)
+ if(flags & ITEM_SLOT_NECK)
owner.update_inv_neck()
/obj/item/proc/is_hot()
@@ -592,7 +592,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(ismob(location))
var/mob/M = location
var/success = FALSE
- if(src == M.get_item_by_slot(slot_wear_mask))
+ if(src == M.get_item_by_slot(SLOT_WEAR_MASK))
success = TRUE
if(success)
location = get_turf(M)
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 7c54acbca9..5aeefc2fcd 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -129,7 +129,7 @@ RLD
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
max_matter = 160
- flags_2 = NO_MAT_REDEMPTION_2
+ item_flags = NO_MAT_REDEMPTION
has_ammobar = TRUE
var/mode = 1
var/ranged = FALSE
diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm
index 2c977e9d09..b96541e2e4 100644
--- a/code/game/objects/items/RPD.dm
+++ b/code/game/objects/items/RPD.dm
@@ -98,12 +98,14 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(dirtype == PIPE_BENDABLE)
dirs += list("[NORTHWEST]" = "West to North", "[NORTHEAST]" = "North to East",
"[SOUTHWEST]" = "South to West", "[SOUTHEAST]" = "East to South")
- if(PIPE_TRINARY, PIPE_TRIN_M)
+ if(PIPE_TRINARY)
dirs = list("[NORTH]" = "West South East", "[EAST]" = "North West South",
"[SOUTH]" = "East North West", "[WEST]" = "South East North")
- if(dirtype == PIPE_TRIN_M)
- dirs += list("[SOUTHEAST]" = "West South East", "[NORTHEAST]" = "North West South",
- "[NORTHWEST]" = "East North West", "[SOUTHWEST]" = "South East North")
+ if(PIPE_TRIN_M)
+ dirs = list("[NORTH]" = "North East South", "[EAST]" = "East South West",
+ "[SOUTH]" = "South West North", "[WEST]" = "West North East",
+ "[SOUTHEAST]" = "West South East", "[NORTHEAST]" = "South East North",
+ "[NORTHWEST]" = "East North West", "[SOUTHWEST]" = "North West South")
if(PIPE_UNARY)
dirs = list("[NORTH]" = "North", "[EAST]" = "East", "[SOUTH]" = "South", "[WEST]" = "West")
if(PIPE_ONEDIR)
diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm
index 365c96233a..be9cb0b89a 100644
--- a/code/game/objects/items/airlock_painter.dm
+++ b/code/game/objects/items/airlock_painter.dm
@@ -10,7 +10,7 @@
materials = list(MAT_METAL=50, MAT_GLASS=50)
flags_1 = CONDUCT_1 | NOBLUDGEON_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
usesound = 'sound/effects/spray2.ogg'
var/obj/item/toner/ink = null
@@ -72,7 +72,7 @@
// TODO maybe add some colorful vomit?
- user.visible_message("[user] vomits out their [L]! ")
+ user.visible_message("[user] vomits out [user.p_their()] [L]! ")
playsound(user.loc, 'sound/effects/splat.ogg', 50, 1)
L.forceMove(T)
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 72481f335d..4e2b0baf75 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -30,7 +30,7 @@
user.forceMove(R)
playsound(src, 'sound/items/zip.ogg', 15, 1, -3)
return (OXYLOSS)
- ..()
+ ..()
// Bluespace bodybag
@@ -41,7 +41,7 @@
icon_state = "bluebodybag_folded"
unfoldedbag_path = /obj/structure/closet/body_bag/bluespace
w_class = WEIGHT_CLASS_SMALL
- flags_2 = NO_MAT_REDEMPTION_2
+ item_flags = NO_MAT_REDEMPTION
/obj/item/bodybag/bluespace/examine(mob/user)
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 08e6204c63..4c96bf3b84 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -60,7 +60,7 @@
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
flags_1 = NOBLUDGEON_1
- flags_2 = NO_MAT_REDEMPTION_2
+ item_flags = NO_MAT_REDEMPTION
var/prox_check = TRUE //If the emag requires you to be in range
/obj/item/card/emag/bluespace
@@ -97,7 +97,7 @@
item_state = "card-id"
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
- slot_flags = SLOT_ID
+ slot_flags = ITEM_SLOT_ID
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
var/mining_points = 0 //For redeeming at mining equipment vendors
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index 107e4eb5db..d861b515f8 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -9,7 +9,7 @@
lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
slowdown = 1
actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun)
var/obj/item/gun/energy/chrono_gun/PA = null
@@ -38,7 +38,7 @@
user.put_in_hands(PA)
/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user)
- if(slot == slot_back)
+ if(slot == SLOT_BACK)
return 1
/obj/item/gun/energy/chrono_gun
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 230177cc61..02db0a4914 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -86,7 +86,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
..()
/obj/item/proc/help_light_cig(mob/living/M)
- var/mask_item = M.get_item_by_slot(slot_wear_mask)
+ var/mask_item = M.get_item_by_slot(SLOT_WEAR_MASK)
if(istype(mask_item, /obj/item/clothing/mask/cigarette))
return mask_item
@@ -129,7 +129,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
reagents.add_reagent_list(list_reagents)
if(starts_lit)
light()
- AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(slot_wear_mask))//90% to knock off when wearing a mask
+ AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(SLOT_WEAR_MASK))//90% to knock off when wearing a mask
/obj/item/clothing/mask/cigarette/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -250,7 +250,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(M == user)
cig.attackby(src, user)
else
- cig.light("[user] holds the [name] out for [M], and lights the [cig.name]. ")
+ cig.light("[user] holds the [name] out for [M], and lights [M.p_their()] [cig.name]. ")
else
return ..()
@@ -489,7 +489,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = "zippo"
w_class = WEIGHT_CLASS_TINY
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
var/lit = 0
var/fancy = TRUE
heat = 1500
@@ -514,7 +514,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/lighter/ignition_effect(atom/A, mob/user)
if(is_hot())
- . = "With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool. "
+ . = "With a single flick of [user.p_their()] wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool. "
/obj/item/lighter/proc/set_lit(new_lit)
lit = new_lit
@@ -555,7 +555,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
var/hitzone = user.held_index_to_dir(user.active_hand_index) == "r" ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND
user.apply_damage(5, BURN, hitzone)
- user.visible_message("After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn their finger in the process. ", "You burn yourself while lighting the lighter! ")
+ user.visible_message("After a few attempts, [user] manages to light [src] - however, [user.p_they()] burn [user.p_their()] finger in the process. ", "You burn yourself while lighting the lighter! ")
user.SendSignal(COMSIG_ADD_MOOD_EVENT, "burnt_thumb", /datum/mood_event/burnt_thumb)
else
@@ -579,9 +579,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
cig.attackby(src, user)
else
if(fancy)
- cig.light("[user] whips the [name] out and holds it for [M]. [user.p_their(TRUE)] arm is as steady as the unflickering flame they light \the [cig] with. ")
+ cig.light("[user] whips the [name] out and holds it for [M]. [user.p_their(TRUE)] arm is as steady as the unflickering flame [user.p_they()] light[user.p_s()] \the [cig] with. ")
else
- cig.light("[user] holds the [name] out for [M], and lights the [cig.name]. ")
+ cig.light("[user] holds the [name] out for [M], and lights [M.p_their()] [cig.name]. ")
else
..()
@@ -749,7 +749,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
return
/obj/item/clothing/mask/vape/equipped(mob/user, slot)
- if(slot == slot_wear_mask)
+ if(slot == SLOT_WEAR_MASK)
if(!screw)
to_chat(user, "You start puffing on the vape. ")
reagents.set_reacting(TRUE)
@@ -759,7 +759,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/vape/dropped(mob/user)
var/mob/living/carbon/C = user
- if(C.get_item_by_slot(slot_wear_mask) == src)
+ if(C.get_item_by_slot(SLOT_WEAR_MASK) == src)
reagents.set_reacting(FALSE)
STOP_PROCESSING(SSobj, src)
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index 8d90e1bc56..8053c00daf 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -154,6 +154,10 @@
name = "Labor Camp teleporter console (Computer Board)"
build_path = /obj/machinery/computer/gulag_teleporter_computer
+/obj/item/circuitboard/computer/rdconsole/production
+ name = "R&D Console Production Only (Computer Board)"
+ build_path = /obj/machinery/computer/rdconsole/production
+
/obj/item/circuitboard/computer/rdconsole
name = "R&D Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm
index c263a7652c..c4aa6f52cc 100644
--- a/code/game/objects/items/circuitboards/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm
@@ -841,6 +841,13 @@
/obj/item/stack/sheet/glass = 1,
/obj/item/vending_refill/donksoft = 3)
+/obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor
+ name = "Syndicate Donksoft Toy Vendor (Machine Board)"
+ build_path = /obj/machinery/vending/toyliberationstation
+ req_components = list(
+ /obj/item/stack/sheet/glass = 1,
+ /obj/item/vending_refill/donksoft = 3)
+
/obj/item/circuitboard/machine/dish_drive
name = "Dish Drive (Machine Board)"
build_path = /obj/machinery/dish_drive
@@ -866,3 +873,17 @@
return
transmit = !transmit
to_chat(user, "You [transmit ? "enable" : "disable"] the board's automatic disposal transmission. ")
+
+/obj/item/circuitboard/machine/stacking_unit_console
+ name = "Stacking Machine Console (Machine Board)"
+ build_path = /obj/machinery/mineral/stacking_unit_console
+ req_components = list(
+ /obj/item/stack/sheet/glass = 2,
+ /obj/item/stack/cable_coil = 5)
+
+/obj/item/circuitboard/machine/stacking_machine
+ name = "Stacking Machine (Machine Board)"
+ build_path = /obj/machinery/mineral/stacking_machine
+ req_components = list(
+ /obj/item/stock_parts/manipulator = 2,
+ /obj/item/stock_parts/matter_bin = 2)
diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm
index fa5748c1d9..cd70ce6732 100644
--- a/code/game/objects/items/clown_items.dm
+++ b/code/game/objects/items/clown_items.dm
@@ -52,7 +52,7 @@
/obj/item/soap/suicide_act(mob/user)
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
- user.visible_message("[user] lifts [src] to their mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now! ")
+ user.visible_message("[user] lifts [src] to [user.p_their()] mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now! ")
new /obj/effect/particle_effect/foam(loc)
return (TOXLOSS)
diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm
index 8475e7d00e..6bcf2d620f 100644
--- a/code/game/objects/items/cosmetics.dm
+++ b/code/game/objects/items/cosmetics.dm
@@ -53,13 +53,13 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.is_mouth_covered())
- to_chat(user, "Remove [ H == user ? "your" : "their" ] mask! ")
+ to_chat(user, "Remove [ H == user ? "your" : "[H.p_their()]" ] mask! ")
return
if(H.lip_style) //if they already have lipstick on
to_chat(user, "You need to wipe off the old lipstick first! ")
return
if(H == user)
- user.visible_message("[user] does their lips with \the [src]. ", \
+ user.visible_message("[user] does [user.p_their()] lips with \the [src]. ", \
"You take a moment to apply \the [src]. Perfect! ")
H.lip_style = "lipstick"
H.lip_color = colour
@@ -142,10 +142,10 @@
return
if(H == user) //shaving yourself
- user.visible_message("[user] starts to shave their facial hair with [src].", \
+ user.visible_message("[user] starts to shave [user.p_their()] facial hair with [src].", \
"You take a moment to shave your facial hair with [src]... ")
if(do_after(user, 50, target = H))
- user.visible_message("[user] shaves his facial hair clean with [src].", \
+ user.visible_message("[user] shaves [user.p_their()] facial hair clean with [src].", \
"You finish shaving with [src]. Fast and clean! ")
shave(H, location)
else
@@ -170,10 +170,10 @@
return
if(H == user) //shaving yourself
- user.visible_message("[user] starts to shave their head with [src].", \
+ user.visible_message("[user] starts to shave [user.p_their()] head with [src].", \
"You start to shave your head with [src]... ")
if(do_after(user, 5, target = H))
- user.visible_message("[user] shaves his head with [src].", \
+ user.visible_message("[user] shaves [user.p_their()] head with [src].", \
"You finish shaving with [src]. ")
shave(H, location)
else
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 08357215d8..f38c880b06 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -9,7 +9,7 @@
item_state = "defibunit"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force = 5
throwforce = 6
w_class = WEIGHT_CLASS_BULKY
@@ -46,11 +46,11 @@
update_charge()
/obj/item/defibrillator/proc/update_power()
- if(cell)
- if(cell.charge < paddles.revivecost)
+ if(!QDELETED(cell))
+ if(QDELETED(paddles) || cell.charge < paddles.revivecost)
powered = FALSE
else
- powered = 1
+ powered = TRUE
else
powered = FALSE
@@ -67,7 +67,7 @@
/obj/item/defibrillator/proc/update_charge()
if(powered) //so it doesn't show charge if it's unpowered
- if(cell)
+ if(!QDELETED(cell))
var/ratio = cell.charge / cell.maxcharge
ratio = CEILING(ratio*4, 1) * 25
add_overlay("[initial(icon_state)]-charge[ratio]")
@@ -83,14 +83,14 @@
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/defibrillator/attack_hand(mob/user)
if(loc == user)
- if(slot_flags == SLOT_BACK)
- if(user.get_item_by_slot(slot_back) == src)
+ if(slot_flags == ITEM_SLOT_BACK)
+ if(user.get_item_by_slot(SLOT_BACK) == src)
ui_action_click()
else
to_chat(user, "Put the defibrillator on your back first! ")
- else if(slot_flags == SLOT_BELT)
- if(user.get_item_by_slot(slot_belt) == src)
+ else if(slot_flags == ITEM_SLOT_BELT)
+ if(user.get_item_by_slot(SLOT_BELT) == src)
ui_action_click()
else
to_chat(user, "Strap the defibrillator's belt on first! ")
@@ -185,7 +185,7 @@
/obj/item/defibrillator/equipped(mob/user, slot)
..()
- if((slot_flags == SLOT_BACK && slot != slot_back) || (slot_flags == SLOT_BELT && slot != slot_belt))
+ if((slot_flags == ITEM_SLOT_BACK && slot != SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != SLOT_BELT))
remove_paddles(user)
update_icon()
@@ -238,7 +238,7 @@
icon_state = "defibcompact"
item_state = "defibcompact"
w_class = WEIGHT_CLASS_NORMAL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user)
if(slot == user.getBeltSlot())
@@ -275,8 +275,8 @@
name = "defibrillator paddles"
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "defibpaddles"
- item_state = "defibpaddles"
+ icon_state = "defibpaddles0"
+ item_state = "defibpaddles0"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
@@ -442,7 +442,7 @@
if(isliving(H.pulledby)) //CLEAR!
var/mob/living/M = H.pulledby
if(M.electrocute_act(30, src))
- M.visible_message("[M] is electrocuted by their contact with [H]! ")
+ M.visible_message("[M] is electrocuted by [M.p_their()] contact with [H]! ")
M.emote("scream")
/obj/item/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user)
@@ -505,7 +505,7 @@
shock_touching(45, H)
if(H.can_heartattack() && !H.undergoing_cardiac_arrest())
if(!H.stat)
- H.visible_message("[H] thrashes wildly, clutching at their chest! ",
+ H.visible_message("[H] thrashes wildly, clutching at [H.p_their()] chest! ",
"You feel a horrible agony in your chest! ")
H.set_heartattack(TRUE)
H.apply_damage(50, BURN, BODY_ZONE_CHEST)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 08ae20c792..093ee1c4b7 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -21,7 +21,7 @@ GLOBAL_LIST_EMPTY(PDAs)
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = NOBLUDGEON_1
w_class = WEIGHT_CLASS_TINY
- slot_flags = SLOT_ID | SLOT_BELT
+ slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -743,7 +743,7 @@ GLOBAL_LIST_EMPTY(PDAs)
var/mob/M = loc
M.put_in_hands(inserted_item)
else
- inserted_item.forceMove(get_turf(src))
+ inserted_item.forceMove(drop_location())
to_chat(usr, "You remove \the [inserted_item] from \the [src]. ")
inserted_item = null
update_icon()
diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm
index c1cc5d69a3..089286efda 100644
--- a/code/game/objects/items/devices/PDA/PDA_types.dm
+++ b/code/game/objects/items/devices/PDA/PDA_types.dm
@@ -21,7 +21,7 @@
// Special AI/pAI PDAs that cannot explode.
/obj/item/pda/ai
- icon_state = "NONE"
+ icon = null
ttone = "data"
fon = FALSE
detonatable = FALSE
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 8947009974..c1de90f3f0 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -7,13 +7,13 @@
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
flags_1 = NOBLUDGEON_1
var/flush = FALSE
var/mob/living/silicon/ai/AI
/obj/item/aicard/suicide_act(mob/living/user)
- user.visible_message("[user] is trying to upload themselves into [src]! That's not going to work out well! ")
+ user.visible_message("[user] is trying to upload [user.p_them()]self into [src]! That's not going to work out well! ")
return BRUTELOSS
/obj/item/aicard/afterattack(atom/target, mob/user, proximity)
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 181ae9eb41..d5d025619c 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "shield0"
flags_1 = CONDUCT_1 | NOBLUDGEON_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 8ba7a55d93..3386b975e3 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=50, MAT_GLASS=20)
actions_types = list(/datum/action/item_action/toggle_light)
var/on = FALSE
@@ -348,7 +348,7 @@
icon_state = "slime"
item_state = "slime"
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
materials = list()
brightness_on = 6 //luminosity when on
diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm
index f9c8084ea5..bb0914eeec 100644
--- a/code/game/objects/items/devices/forcefieldprojector.dm
+++ b/code/game/objects/items/devices/forcefieldprojector.dm
@@ -3,7 +3,7 @@
desc = "An experimental device that can create several forcefields at a distance."
icon = 'icons/obj/device.dmi'
icon_state = "signmaker_engi"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
flags_1 = NOBLUDGEON_1
item_state = "electronic"
diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm
index fab8900fe1..1b4bb55f99 100644
--- a/code/game/objects/items/devices/geiger_counter.dm
+++ b/code/game/objects/items/devices/geiger_counter.dm
@@ -17,7 +17,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
var/grace = RAD_GRACE_PERIOD
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index f07a95ef20..0030eabcdd 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
icon = 'icons/obj/telescience.dmi'
icon_state = "gps-c"
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
obj_flags = UNIQUE_RENAME
var/gpstag = "COM0"
var/emped = FALSE
diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm
index 7274531420..427437866d 100644
--- a/code/game/objects/items/devices/instruments.dm
+++ b/code/game/objects/items/devices/instruments.dm
@@ -198,7 +198,7 @@
icon_state = "harmonica"
item_state = "harmonica"
instrumentId = "harmonica"
- slot_flags = SLOT_MASK
+ slot_flags = ITEM_SLOT_MASK
force = 5
w_class = WEIGHT_CLASS_SMALL
actions_types = list(/datum/action/item_action/instrument)
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 116b5982ee..32a266dbfb 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -6,7 +6,7 @@
item_state = "pen"
var/pointer_icon_state
flags_1 = CONDUCT_1 | NOBLUDGEON_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=500, MAT_GLASS=500)
w_class = WEIGHT_CLASS_SMALL
var/turf/pointer_loc
@@ -100,9 +100,9 @@
//chance to actually hit the eyes depends on internal component
if(prob(effectchance * diode.rating) && C.flash_act(severity))
- outmsg = "You blind [C] by shining [src] in their eyes. "
+ outmsg = "You blind [C] by shining [src] in [C.p_their()] eyes. "
else
- outmsg = "You fail to blind [C] by shining [src] at their eyes! "
+ outmsg = "You fail to blind [C] by shining [src] at [C.p_their()] eyes! "
//robots
else if(iscyborg(target))
@@ -113,9 +113,9 @@
S.flash_act(affect_silicon = 1)
S.Knockdown(rand(100,200))
to_chat(S, "Your sensors were overloaded by a laser! ")
- outmsg = "You overload [S] by shining [src] at their sensors. "
+ outmsg = "You overload [S] by shining [src] at [S.p_their()] sensors. "
else
- outmsg = "You fail to overload [S] by shining [src] at their sensors! "
+ outmsg = "You fail to overload [S] by shining [src] at [S.p_their()] sensors! "
//cameras
else if(istype(target, /obj/machinery/camera))
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 3fde35383f..750e2a9a9b 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -50,7 +50,7 @@
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 8
var/max_uses = 20
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 25f3070d9e..f6d3192bce 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -6,7 +6,7 @@
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
var/mob/living/silicon/pai/pai
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 7e2c5234fb..1734fa5bfb 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -7,7 +7,7 @@
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
w_class = WEIGHT_CLASS_HUGE
materials = list(MAT_METAL=10000, MAT_GLASS=2500)
var/on = TRUE
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index d16ac424b6..ea9c6fb99e 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -7,7 +7,7 @@
subspace_transmission = TRUE
canhear_range = 0 // can't hear headsets from very far away
- slot_flags = SLOT_EARS
+ slot_flags = ITEM_SLOT_EARS
var/obj/item/encryptionkey/keyslot2 = null
dog_fashion = null
@@ -50,7 +50,10 @@
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. \nTo access the syndicate channel, use ; before speaking."
icon_state = "syndie_headset"
item_state = "syndie_headset"
- flags_2 = BANG_PROTECT_2 | NO_EMP_WIRES_2
+
+/obj/item/radio/headset/syndicate/alt/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/syndicate/alt/leader
name = "team leader headset"
@@ -78,7 +81,10 @@
desc = "This is used by your elite security force. Protects ears from flashbangs.\nTo access the security channel, use :s."
icon_state = "sec_headset_alt"
item_state = "sec_headset_alt"
- flags_2 = BANG_PROTECT_2 | NO_EMP_WIRES_2
+
+/obj/item/radio/headset/headset_sec/alt/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/headset_eng
name = "engineering radio headset"
@@ -130,7 +136,10 @@
desc = "The headset of the boss. Protects ears from flashbangs.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
- flags_2 = BANG_PROTECT_2 | NO_EMP_WIRES_2
+
+/obj/item/radio/headset/heads/captain/alt/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/heads/rd
name = "\proper the research director's headset"
@@ -149,7 +158,10 @@
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs.\nTo access the security channel, use :s. For command, use :c."
icon_state = "com_headset_alt"
item_state = "com_headset_alt"
- flags_2 = BANG_PROTECT_2 | NO_EMP_WIRES_2
+
+/obj/item/radio/headset/heads/hos/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/heads/ce
name = "\proper the chief engineer's headset"
@@ -207,7 +219,10 @@
icon_state = "cent_headset_alt"
item_state = "cent_headset_alt"
keyslot = null
- flags_2 = BANG_PROTECT_2 | NO_EMP_WIRES_2
+
+/obj/item/radio/headset/headset_cent/alt/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
/obj/item/radio/headset/ai
name = "\proper Integrated Subspace Transceiver "
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 9b5ce58867..1a81b3d16b 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -6,9 +6,8 @@
desc = "A basic handheld radio that communicates with local telecommunication networks."
dog_fashion = /datum/dog_fashion/back
- flags_1 = CONDUCT_1 | HEAR_1
- flags_2 = NO_EMP_WIRES_2
- slot_flags = SLOT_BELT
+ flags_1 = CONDUCT_1 | HEAR_1 | NO_EMP_WIRES_1
+ slot_flags = ITEM_SLOT_BELT
throw_speed = 3
throw_range = 7
w_class = WEIGHT_CLASS_SMALL
@@ -44,7 +43,7 @@
//FREQ_BROADCASTING = 2
/obj/item/radio/suicide_act(mob/living/user)
- user.visible_message("[user] starts bouncing [src] off their head! It looks like [user.p_theyre()] trying to commit suicide! ")
+ user.visible_message("[user] starts bouncing [src] off [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide! ")
return BRUTELOSS
/obj/item/radio/proc/set_frequency(new_frequency)
@@ -365,7 +364,6 @@
name = "cyborg radio"
subspace_switchable = TRUE
dog_fashion = null
- flags_2 = NO_EMP_WIRES_2
/obj/item/radio/borg/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm
index 7631937de0..4dc8d04267 100644
--- a/code/game/objects/items/devices/reverse_bear_trap.dm
+++ b/code/game/objects/items/devices/reverse_bear_trap.dm
@@ -3,7 +3,7 @@
desc = "A horrifying set of shut metal jaws, rigged to a kitchen timer and secured by padlock to a head-mounted clamp. To apply, hit someone with it."
icon = 'icons/obj/device.dmi'
icon_state = "reverse_bear_trap"
- slot_flags = SLOT_HEAD
+ slot_flags = ITEM_SLOT_HEAD
flags_1 = CONDUCT_1
resistance_flags = FIRE_PROOF | UNACIDABLE
w_class = WEIGHT_CLASS_NORMAL
@@ -48,7 +48,7 @@
/obj/item/reverse_bear_trap/attack_hand(mob/user)
if(iscarbon(user))
var/mob/living/carbon/C = user
- if(C.get_item_by_slot(slot_head) == src)
+ if(C.get_item_by_slot(SLOT_HEAD) == src)
if(flags_1 & NODROP_1 && !struggling)
struggling = TRUE
var/fear_string
@@ -82,31 +82,31 @@
..()
/obj/item/reverse_bear_trap/attack(mob/living/target, mob/living/user)
- if(target.get_item_by_slot(slot_head))
- to_chat(user, "Remove their headgear first! ")
+ if(target.get_item_by_slot(SLOT_HEAD))
+ to_chat(user, "Remove [target.p_their()] headgear first! ")
return
target.visible_message("[user] starts forcing [src] onto [target]'s head! ", \
"[target] starts forcing [src] onto your head! ", "You hear clanking. ")
to_chat(user, "You start forcing [src] onto [target]'s head... ")
- if(!do_after(user, 30, target = target) || target.get_item_by_slot(slot_head))
+ if(!do_after(user, 30, target = target) || target.get_item_by_slot(SLOT_HEAD))
return
target.visible_message("[user] forces and locks [src] onto [target]'s head! ", \
"[target] locks [src] onto your head! ", "You hear a click, and then a timer ticking down. ")
to_chat(user, "You force [src] onto [target]'s head and click the padlock shut. ")
user.dropItemToGround(src)
- target.equip_to_slot_if_possible(src, slot_head)
+ target.equip_to_slot_if_possible(src, SLOT_HEAD)
arm()
notify_ghosts("[user] put a reverse bear trap on [target]!", source = src, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/beep.ogg')
/obj/item/reverse_bear_trap/proc/snap()
reset()
var/mob/living/carbon/human/H = loc
- if(!istype(H) || H.get_item_by_slot(slot_head) != src)
+ if(!istype(H) || H.get_item_by_slot(SLOT_HEAD) != src)
visible_message("[src]'s jaws snap open with an ear-piercing crack! ")
playsound(src, 'sound/effects/snap.ogg', 75, TRUE)
else
var/mob/living/carbon/human/jill = loc
- jill.visible_message("[src] goes off in [jill]'s mouth, ripping their head apart! ", "[src] goes off! ")
+ jill.visible_message("[src] goes off in [jill]'s mouth, ripping [jill.p_their()] head apart! ", "[src] goes off! ")
jill.emote("scream")
playsound(src, 'sound/effects/snap.ogg', 75, TRUE, frequency = 0.5)
playsound(src, 'sound/effects/splat.ogg', 50, TRUE, frequency = 0.5)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index f174e833ae..332b73c688 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -12,7 +12,7 @@ GAS ANALYZER
icon = 'icons/obj/device.dmi'
icon_state = "t-ray0"
var/on = FALSE
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
@@ -67,7 +67,7 @@ GAS ANALYZER
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags_1 = CONDUCT_1 | NOBLUDGEON_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 3
w_class = WEIGHT_CLASS_TINY
throw_speed = 3
@@ -347,7 +347,7 @@ GAS ANALYZER
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
flags_1 = CONDUCT_1 | NOBLUDGEON_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
throw_speed = 3
throw_range = 7
diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm
index 8aa2ec7d4e..79d26776a9 100644
--- a/code/game/objects/items/devices/sensor_device.dm
+++ b/code/game/objects/items/devices/sensor_device.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "scanner"
w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/sensor_device/attack_self(mob/user)
GLOB.crewmonitor.show(user,src) //Proc already exists, just had to call it
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 182565da22..50cdbe9c48 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
w_class = WEIGHT_CLASS_SMALL
flags_1 = HEAR_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
materials = list(MAT_METAL=60, MAT_GLASS=30)
force = 2
throwforce = 0
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 9dd6ae5622..c3720f7ac4 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -177,7 +177,7 @@ effective or pretty fucking useless.
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
var/mob/living/carbon/human/user = null
@@ -188,7 +188,7 @@ effective or pretty fucking useless.
actions_types = list(/datum/action/item_action/toggle)
/obj/item/shadowcloak/ui_action_click(mob/user)
- if(user.get_item_by_slot(slot_belt) == src)
+ if(user.get_item_by_slot(SLOT_BELT) == src)
if(!on)
Activate(usr)
else
@@ -196,7 +196,7 @@ effective or pretty fucking useless.
return
/obj/item/shadowcloak/item_action_slot_check(slot, mob/user)
- if(slot == slot_belt)
+ if(slot == SLOT_BELT)
return 1
/obj/item/shadowcloak/proc/Activate(mob/living/carbon/human/user)
@@ -218,11 +218,11 @@ effective or pretty fucking useless.
/obj/item/shadowcloak/dropped(mob/user)
..()
- if(user && user.get_item_by_slot(slot_belt) != src)
+ if(user && user.get_item_by_slot(SLOT_BELT) != src)
Deactivate()
/obj/item/shadowcloak/process()
- if(user.get_item_by_slot(slot_belt) != src)
+ if(user.get_item_by_slot(SLOT_BELT) != src)
Deactivate()
return
var/turf/T = get_turf(src)
diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm
index cf11ac7640..3f97321710 100644
--- a/code/game/objects/items/granters.dm
+++ b/code/game/objects/items/granters.dm
@@ -208,12 +208,13 @@
if(stored_swap == user)
to_chat(user,"You stare at the book some more, but there doesn't seem to be anything else to learn... ")
return
-
var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new
- swapper.cast(user, stored_swap, TRUE)
+ if(swapper.cast(list(stored_swap), user, TRUE, TRUE))
+ to_chat(user,"You're suddenly somewhere else... and someone else?! ")
+ to_chat(stored_swap,"Suddenly you're staring at [src] again... where are you, who are you?! ")
+ else
+ user.visible_message("[src] fizzles slightly as it stops glowing! ") //if the mind_transfer failed to transfer mobs, likely due to the target being catatonic.
- to_chat(stored_swap,"You're suddenly somewhere else... and someone else?! ")
- to_chat(user,"Suddenly you're staring at [src] again... where are you, who are you?! ")
stored_swap = null
/obj/item/book/granter/spell/forcewall
@@ -257,7 +258,7 @@
magichead.voicechange = TRUE //NEEEEIIGHH
if(!user.dropItemToGround(user.wear_mask))
qdel(user.wear_mask)
- user.equip_to_slot_if_possible(magichead, slot_wear_mask, TRUE, TRUE)
+ user.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, TRUE, TRUE)
qdel(src)
else
to_chat(user,"I say thee neigh ") //It still lives here
diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm
index 9d3df9cf7a..8bc1665a3f 100644
--- a/code/game/objects/items/grenades/chem_grenade.dm
+++ b/code/game/objects/items/grenades/chem_grenade.dm
@@ -163,8 +163,10 @@
for(var/obj/item/reagent_containers/glass/G in beakers)
reactants += G.reagents
- if(!chem_splash(get_turf(src), affected_area, reactants, ignition_temp, threatscale) && !no_splash)
- playsound(loc, 'sound/items/screwdriver2.ogg', 50, 1)
+ var/turf/detonation_turf = get_turf(src)
+
+ if(!chem_splash(detonation_turf, affected_area, reactants, ignition_temp, threatscale) && !no_splash)
+ playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
if(beakers.len)
for(var/obj/O in beakers)
O.forceMove(drop_location())
@@ -172,17 +174,15 @@
stage_change(EMPTY)
return
+ var/areas_name = get_area_name(src, TRUE)
+
if(nadeassembly)
var/mob/M = get_mob_by_ckey(assemblyattacher)
var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast)
- var/turf/T = get_turf(src)
- var/area/A = get_area(T)
- message_admins("grenade primed by an assembly, attached by [ADMIN_LOOKUPFLW(M)] and last touched by [ADMIN_LOOKUPFLW(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] [ADMIN_JMP(T)].")
- log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] [COORD(T)]")
+ message_admins("grenade primed by an assembly, attached by [ADMIN_LOOKUPFLW(M)] and last touched by [ADMIN_LOOKUPFLW(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [areas_name] [ADMIN_JMP(detonation_turf)].")
+ log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [areas_name] [COORD(detonation_turf)]")
- var/turf/DT = get_turf(src)
- var/area/DA = get_area(DT)
- log_game("A grenade detonated at [DA.name] [COORD(DT)]")
+ log_game("A grenade detonated at [areas_name] [COORD(detonation_turf)]")
update_mob()
diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm
index 5b96b74f41..d450764702 100644
--- a/code/game/objects/items/grenades/ghettobomb.dm
+++ b/code/game/objects/items/grenades/ghettobomb.dm
@@ -12,7 +12,7 @@
throw_speed = 3
throw_range = 7
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
active = 0
det_time = 50
display_timer = 0
diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm
index 929c649e4d..6a08777e61 100644
--- a/code/game/objects/items/grenades/grenade.dm
+++ b/code/game/objects/items/grenades/grenade.dm
@@ -10,7 +10,7 @@
throw_speed = 3
throw_range = 7
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
resistance_flags = FLAMMABLE
max_integrity = 40
var/active = 0
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 967d1ce372..a7d06be284 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -5,8 +5,7 @@
item_state = "plastic-explosive"
lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi'
- flags_1 = NOBLUDGEON_1
- flags_2 = NO_EMP_WIRES_2
+ flags_1 = NOBLUDGEON_1 | NO_EMP_WIRES_1
det_time = 10
display_timer = 0
w_class = WEIGHT_CLASS_SMALL
@@ -107,10 +106,10 @@
if(!user.temporarilyRemoveItemFromInventory(src))
return
target = AM
-
+
message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1)
log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse")
-
+
moveToNullspace() //Yep
if(istype(AM, /obj/item)) //your crappy throwing star can't fly so good with a giant brick of c4 on it.
diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm
index f5a27cf5c8..d822ede78c 100644
--- a/code/game/objects/items/grenades/smokebomb.dm
+++ b/code/game/objects/items/grenades/smokebomb.dm
@@ -1,31 +1,31 @@
-/obj/item/grenade/smokebomb
- name = "smoke grenade"
- desc = "The word 'Dank' is scribbled on it in crayon."
- icon = 'icons/obj/grenade.dmi'
- icon_state = "smokewhite"
- det_time = 20
- item_state = "flashbang"
- slot_flags = SLOT_BELT
- var/datum/effect_system/smoke_spread/bad/smoke
-
-/obj/item/grenade/smokebomb/New()
- ..()
- src.smoke = new /datum/effect_system/smoke_spread/bad
- src.smoke.attach(src)
-
-/obj/item/grenade/smokebomb/Destroy()
- qdel(smoke)
- return ..()
-
-/obj/item/grenade/smokebomb/prime()
- update_mob()
- playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
- smoke.set_up(4, src)
- smoke.start()
-
-
- for(var/obj/structure/blob/B in view(8,src))
- var/damage = round(30/(get_dist(B,src)+1))
- B.take_damage(damage, BURN, "melee", 0)
- sleep(80)
- qdel(src)
+/obj/item/grenade/smokebomb
+ name = "smoke grenade"
+ desc = "The word 'Dank' is scribbled on it in crayon."
+ icon = 'icons/obj/grenade.dmi'
+ icon_state = "smokewhite"
+ det_time = 20
+ item_state = "flashbang"
+ slot_flags = ITEM_SLOT_BELT
+ var/datum/effect_system/smoke_spread/bad/smoke
+
+/obj/item/grenade/smokebomb/New()
+ ..()
+ src.smoke = new /datum/effect_system/smoke_spread/bad
+ src.smoke.attach(src)
+
+/obj/item/grenade/smokebomb/Destroy()
+ qdel(smoke)
+ return ..()
+
+/obj/item/grenade/smokebomb/prime()
+ update_mob()
+ playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
+ smoke.set_up(4, src)
+ smoke.start()
+
+
+ for(var/obj/structure/blob/B in view(8,src))
+ var/damage = round(30/(get_dist(B,src)+1))
+ B.take_damage(damage, BURN, "melee", 0)
+ sleep(80)
+ qdel(src)
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 09abc25cc1..735bcaeb27 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -29,7 +29,7 @@
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 13ca2b35d6..b43051b772 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -75,7 +75,7 @@
desc = "It has a mysterious, protective aura."
w_class = WEIGHT_CLASS_HUGE
force = 5
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
block_chance = 50
var/shield_icon = "shield-red"
@@ -98,7 +98,7 @@
name = "holy claymore"
desc = "A weapon fit for a crusade!"
w_class = WEIGHT_CLASS_HUGE
- slot_flags = SLOT_BACK|SLOT_BELT
+ slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT
block_chance = 30
sharpness = IS_SHARP
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -118,7 +118,7 @@
inhand_y_dimension = 64
name = "dark blade"
desc = "Spread the glory of the dark gods!"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
hitsound = 'sound/hallucinations/growl1.ogg'
/obj/item/nullrod/claymore/chainsaw_sword
@@ -126,7 +126,7 @@
item_state = "chainswordon"
name = "sacred chainsaw sword"
desc = "Suffer not a heretic to live."
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
@@ -135,21 +135,21 @@
item_state = "swordon"
name = "force weapon"
desc = "The blade glows with the power of faith. Or possibly a battery."
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/katana
name = "hanzo steel"
desc = "Capable of cutting clean through a holy claymore."
icon_state = "katana"
item_state = "katana"
- slot_flags = SLOT_BELT | SLOT_BACK
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
/obj/item/nullrod/claymore/multiverse
name = "extradimensional blade"
desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly."
icon_state = "multiverse"
item_state = "multiverse"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user)
force = rand(1, 30)
@@ -161,7 +161,7 @@
icon_state = "swordblue"
item_state = "swordblue"
desc = "If you strike me down, I shall become more robust than you can possibly imagine."
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/saber/red
name = "dark energy sword"
@@ -182,7 +182,7 @@
item_state = "sord"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 4.13
throwforce = 1
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -197,7 +197,7 @@
desc = "Ask not for whom the bell tolls..."
w_class = WEIGHT_CLASS_BULKY
armour_penetration = 35
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
sharpness = IS_SHARP
attack_verb = list("chopped", "sliced", "cut", "reaped")
@@ -279,7 +279,7 @@
item_state = "chainswordon"
name = "possessed chainsaw sword"
desc = "Suffer not a heretic to live."
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 30
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
@@ -292,7 +292,7 @@
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
name = "relic war hammer"
desc = "This war hammer cost the chaplain forty thousand space dollars."
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("smashed", "bashed", "hammered", "crunched")
@@ -330,7 +330,7 @@
force = 16
throwforce = 15
w_class = 4
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
attack_verb = list("attacked", "smashed", "crushed", "splattered", "cracked")
hitsound = 'sound/weapons/blade1.ogg'
@@ -350,7 +350,7 @@
item_state = "chain"
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
attack_verb = list("whipped", "lashed")
hitsound = 'sound/weapons/chainhit.ogg'
@@ -359,7 +359,7 @@
desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God."
icon_state = "fedora"
item_state = "fedora"
- slot_flags = SLOT_HEAD
+ slot_flags = ITEM_SLOT_HEAD
icon = 'icons/obj/clothing/hats.dmi'
force = 0
throw_speed = 4
@@ -414,7 +414,7 @@
w_class = WEIGHT_CLASS_BULKY
force = 15
block_chance = 40
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
sharpness = IS_BLUNT
hitsound = "swing_hit"
attack_verb = list("smashed", "slammed", "whacked", "thwacked")
@@ -436,7 +436,7 @@
slot_flags = null
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- flags_2 = SLOWS_WHILE_IN_HAND_2
+ item_flags = SLOWS_WHILE_IN_HAND
/obj/item/nullrod/tribal_knife/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index 59ec24e22c..935d2a007e 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -54,7 +54,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.wear_mask)
- in_mouth = ", barely missing their nose"
+ in_mouth = ", barely missing [C.p_their()] nose"
. = "[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process. "
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
add_fingerprint(user)
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index 0016bf981f..5ceaa9c514 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -3,7 +3,7 @@
/obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user)
if(target.check_block())
- target.visible_message("[target.name] blocks [src] and twists [user]'s arm behind their back! ",
+ target.visible_message("[target.name] blocks [src] and twists [user]'s arm behind [user.p_their()] back! ",
"You block the attack! ")
user.Stun(40)
return TRUE
@@ -17,7 +17,7 @@
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 10
throwforce = 7
w_class = WEIGHT_CLASS_NORMAL
@@ -96,7 +96,7 @@
item_state = "classic_baton"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 12 //9 hit crit
w_class = WEIGHT_CLASS_NORMAL
var/cooldown = 0
@@ -159,7 +159,7 @@
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
item_state = null
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
item_flags = NONE
force = 0
@@ -169,7 +169,7 @@
var/mob/living/carbon/human/H = user
var/obj/item/organ/brain/B = H.getorgan(/obj/item/organ/brain)
- user.visible_message("[user] stuffs [src] up [user.p_their()] nose and presses the 'extend' button! It looks like [user.p_theyre()] trying to clear their mind. ")
+ user.visible_message("[user] stuffs [src] up [user.p_their()] nose and presses the 'extend' button! It looks like [user.p_theyre()] trying to clear [user.p_their()] mind. ")
if(!on)
src.attack_self(user)
else
@@ -196,7 +196,7 @@
to_chat(user, "You collapse the baton. ")
icon_state = "telebaton_0"
item_state = null //no sprite for concealment even when in hand
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
force = 0 //not so robust now
attack_verb = list("hit", "poked")
@@ -308,7 +308,7 @@
item_state = "chain"
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 15
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
@@ -326,7 +326,7 @@
desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits."
icon_state = "roastingstick_0"
item_state = "null"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
item_flags = NONE
force = 0
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm
index f671e63109..a73be6e12e 100644
--- a/code/game/objects/items/pet_carrier.dm
+++ b/code/game/objects/items/pet_carrier.dm
@@ -164,7 +164,7 @@
return
user.visible_message("[user] starts loading [target] into [src]. ", \
"You start loading [target] into [src]... ", null, null, target)
- to_chat(target, "[user] starts loading you into their [name]! ")
+ to_chat(target, "[user] starts loading you into [user.p_their()] [name]! ")
if(!do_mob(user, target, 30))
return
if(target in occupants)
@@ -174,7 +174,7 @@
return
user.visible_message("[user] loads [target] into [src]! ", \
"You load [target] into [src]. ", null, null, target)
- to_chat(target, "[user] loads you into their [name]! ")
+ to_chat(target, "[user] loads you into [user.p_their()] [name]! ")
add_occupant(target)
/obj/item/pet_carrier/proc/add_occupant(mob/living/occupant)
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index 514b2a5b55..d6262c10a5 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "pinpointer"
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
@@ -30,7 +30,7 @@
/obj/item/pinpointer/attack_self(mob/living/user)
active = !active
- user.visible_message("[user] [active ? "" : "de"]activates their pinpointer. ", "You [active ? "" : "de"]activate your pinpointer. ")
+ user.visible_message("[user] [active ? "" : "de"]activates [user.p_their()] pinpointer. ", "You [active ? "" : "de"]activate your pinpointer. ")
playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
if(active)
START_PROCESSING(SSfastprocess, src)
@@ -94,7 +94,7 @@
/obj/item/pinpointer/crew/attack_self(mob/living/user)
if(active)
active = FALSE
- user.visible_message("[user] deactivates their pinpointer. ", "You deactivate your pinpointer. ")
+ user.visible_message("[user] deactivates [user.p_their()] pinpointer. ", "You deactivate your pinpointer. ")
playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
target = null //Restarting the pinpointer forces a target reset
STOP_PROCESSING(SSfastprocess, src)
@@ -130,7 +130,7 @@
target = names[A]
active = TRUE
- user.visible_message("[user] activates their pinpointer. ", "You activate your pinpointer. ")
+ user.visible_message("[user] activates [user.p_their()] pinpointer. ", "You activate your pinpointer. ")
playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
START_PROCESSING(SSfastprocess, src)
update_icon()
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index 10f3cbf810..54fa046019 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -149,7 +149,7 @@
return
if(user.has_trait(TRAIT_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user))
var/mob/living/carbon/C = user
- C.visible_message("[C] loses their grip on [src], causing it to go off! ", "[src] slips out of your hands and goes off! ")
+ C.visible_message("[C] loses [C.p_their()] grip on [src], causing it to go off! ", "[src] slips out of your hands and goes off! ")
C.dropItemToGround(src, TRUE)
if(prob(10))
target = get_turf(user)
diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm
index 210a6d6a33..5346d6e9cc 100644
--- a/code/game/objects/items/powerfist.dm
+++ b/code/game/objects/items/powerfist.dm
@@ -79,7 +79,7 @@
playsound(loc, 'sound/effects/refill.ogg', 50, 1)
return
target.apply_damage(force * fisto_setting, BRUTE)
- target.visible_message("[user]'s powerfist lets out a loud hiss as they punch [target.name]! ", \
+ target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]! ", \
"You cry out in pain as [user]'s punch flings you backwards! ")
new /obj/effect/temp_visual/kinetic_blast(target.loc)
playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1)
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index 0f926b4ee3..696168d69d 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -290,7 +290,7 @@
/obj/item/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
if(staffcooldown + staffwait > world.time)
return
- user.visible_message("[user] chants deeply and waves their staff!")
+ user.visible_message("[user] chants deeply and waves [user.p_their()] staff!")
if(do_after(user, 20,1,src))
target.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo
staffcooldown = world.time
@@ -325,7 +325,7 @@
icon_state = "crusader"
w_class = WEIGHT_CLASS_NORMAL
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //does this even do anything on boots?
- flags_1 = NOSLIP_1
+ clothing_flags = NOSLIP
cold_protection = FEET
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index 5d70cbd8e7..7cde37f43a 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -114,7 +114,7 @@
if(M.health >= 0)
if(ishuman(M)||ismonkey(M))
M.electrocute_act(5, "[user]", safety = 1)
- user.visible_message("[user] electrocutes [M] with their touch! ", \
+ user.visible_message("[user] electrocutes [M] with [user.p_their()] touch! ", \
"You electrocute [M] with your touch! ")
M.update_canmove()
else
@@ -132,7 +132,7 @@
if(ccooldown < world.time)
if(M.health >= 0)
if(ishuman(M))
- user.visible_message("[user] crushes [M] in their grip! ", \
+ user.visible_message("[user] crushes [M] in [user.p_their()] grip! ", \
"You crush [M] in your grip! ")
else
user.visible_message("[user] crushes [M]! ", \
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 367a10d21f..d6bb54bddf 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -10,7 +10,7 @@
icon_state = "riot"
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force = 10
throwforce = 5
throw_speed = 2
@@ -143,7 +143,7 @@
throwforce = 5
throw_speed = 2
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
to_chat(user, "You extend \the [src]. ")
else
force = 3
diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm
index 5d96213934..11248aad50 100644
--- a/code/game/objects/items/singularityhammer.dm
+++ b/code/game/objects/items/singularityhammer.dm
@@ -5,7 +5,7 @@
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force = 5
force_unwielded = 5
force_wielded = 20
@@ -76,7 +76,7 @@
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force = 5
force_unwielded = 5
force_wielded = 25
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index b3af8b9b33..4b38b5b7ac 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -137,7 +137,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
return ..()
/obj/item/stack/sheet/metal/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] begins whacking themselves over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
+ user.visible_message("[user] begins whacking [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
return BRUTELOSS
/*
@@ -352,6 +352,11 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
if(!iscultist(user))
to_chat(user, "Only one with forbidden knowledge could hope to work this metal... ")
return
+ var/turf/T = get_turf(user) //we may have moved. adjust as needed...
+ var/area/A = get_area(user)
+ if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !A.blob_allowed))
+ to_chat(user, "The veil is not weak enough here. ")
+ return FALSE
return ..()
/obj/item/stack/sheet/runed_metal/Initialize(mapload, new_amount, merge = TRUE)
diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm
index 16d449e4ac..fe056d34d8 100644
--- a/code/game/objects/items/stacks/wrap.dm
+++ b/code/game/objects/items/stacks/wrap.dm
@@ -37,7 +37,7 @@
resistance_flags = FLAMMABLE
/obj/item/stack/packageWrap/suicide_act(mob/living/user)
- user.visible_message("[user] begins wrapping themselves in \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
+ user.visible_message("[user] begins wrapping [user.p_them()]self in \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
if(use(3))
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(user.loc))
P.icon_state = "deliverypackage5"
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index e62b918f19..9dbb4ad0f9 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -17,7 +17,7 @@
lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK //ERROOOOO
+ slot_flags = ITEM_SLOT_BACK //ERROOOOO
resistance_flags = NONE
max_integrity = 300
@@ -44,7 +44,7 @@
icon_state = "holdingpack"
item_state = "holdingpack"
resistance_flags = FIRE_PROOF
- flags_2 = NO_MAT_REDEMPTION_2
+ item_flags = NO_MAT_REDEMPTION
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
@@ -83,7 +83,7 @@
STR.max_combined_w_class = 60
/obj/item/storage/backpack/santabag/suicide_act(mob/user)
- user.visible_message("[user] places [src] over their head and pulls it tight! It looks like they aren't in the Christmas spirit... ")
+ user.visible_message("[user] places [src] over [user.p_their()] head and pulls it tight! It looks like [user.p_they()] [user.p_are()]n't in the Christmas spirit... ")
return (OXYLOSS)
/obj/item/storage/backpack/cultpack
@@ -511,6 +511,8 @@
new /obj/item/storage/box/syringes(src)
new /obj/item/ammo_box/foambox/riot(src)
new /obj/item/grenade/chem_grenade/bioterrorfoam(src)
+ if(prob(5))
+ new /obj/item/reagent_containers/food/snacks/pizza/pineapple(src)
/obj/item/storage/backpack/duffelbag/syndie/c4/PopulateContents()
for(var/i in 1 to 10)
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 5c6a354356..a44e61f16a 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -17,7 +17,7 @@
// Generic non-item
/obj/item/storage/bag
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/storage/bag/ComponentInitialize()
. = ..()
@@ -77,7 +77,7 @@
name = "trash bag of holding"
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
icon_state = "bluetrashbag"
- flags_2 = NO_MAT_REDEMPTION_2
+ item_flags = NO_MAT_REDEMPTION
/obj/item/storage/bag/trash/bluespace/ComponentInitialize()
. = ..()
@@ -94,7 +94,7 @@
desc = "This little bugger can be used to store and transport ores."
icon = 'icons/obj/mining.dmi'
icon_state = "satchel"
- slot_flags = SLOT_BELT | SLOT_POCKET
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET
w_class = WEIGHT_CLASS_NORMAL
component_type = /datum/component/storage/concrete/stack
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
@@ -146,10 +146,10 @@
if(show_message)
playsound(user, "rustle", 50, TRUE)
if (box)
- user.visible_message("[user] offloads the ores beneath them into [box]. ", \
+ user.visible_message("[user] offloads the ores beneath [user.p_them()] into [box]. ", \
"You offload the ores beneath you into your [box]. ")
else
- user.visible_message("[user] scoops up the ores beneath them. ", \
+ user.visible_message("[user] scoops up the ores beneath [user.p_them()]. ", \
"You scoop up the ores beneath you with your [name]. ")
spam_protection = FALSE
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index d934fbe18a..f7cde410aa 100755
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -6,13 +6,13 @@
item_state = "utility"
lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
max_integrity = 300
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] begins belting themselves with \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
+ user.visible_message("[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide! ")
return BRUTELOSS
/obj/item/storage/belt/update_icon()
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index 44c41e419b..db47fd3d0b 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible",
if(B.icon_state == "honk1" || B.icon_state == "honk2")
var/mob/living/carbon/human/H = usr
H.dna.add_mutation(CLOWNMUT)
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask)
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), SLOT_WEAR_MASK)
SSreligion.bible_icon_state = B.icon_state
SSreligion.bible_item_state = B.item_state
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index f892bc50f4..e47ceee7ad 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -544,7 +544,7 @@
icon_state = "matchbox"
item_state = "zippo"
w_class = WEIGHT_CLASS_TINY
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
/obj/item/storage/box/matches/ComponentInitialize()
. = ..()
@@ -966,3 +966,45 @@ obj/item/storage/box/clown
/obj/item/storage/box/holy_grenades/PopulateContents()
for(var/i in 1 to 7)
new/obj/item/grenade/chem_grenade/holy(src)
+
+/obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible
+ name = "box of stock parts"
+ desc = "Contains a variety of basic stock parts."
+
+/obj/item/storage/box/stockparts/basic/PopulateContents()
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stock_parts/scanning_module(src)
+ new /obj/item/stock_parts/scanning_module(src)
+ new /obj/item/stock_parts/scanning_module(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/micro_laser(src)
+ new /obj/item/stock_parts/micro_laser(src)
+ new /obj/item/stock_parts/micro_laser(src)
+ new /obj/item/stock_parts/matter_bin(src)
+ new /obj/item/stock_parts/matter_bin(src)
+ new /obj/item/stock_parts/matter_bin(src)
+
+/obj/item/storage/box/stockparts/deluxe
+ name = "box of deluxe stock parts"
+ desc = "Contains a variety of deluxe stock parts."
+
+/obj/item/storage/box/stockparts/deluxe/PopulateContents()
+ new /obj/item/stock_parts/capacitor/quadratic(src)
+ new /obj/item/stock_parts/capacitor/quadratic(src)
+ new /obj/item/stock_parts/capacitor/quadratic(src)
+ new /obj/item/stock_parts/scanning_module/triphasic(src)
+ new /obj/item/stock_parts/scanning_module/triphasic(src)
+ new /obj/item/stock_parts/scanning_module/triphasic(src)
+ new /obj/item/stock_parts/manipulator/femto(src)
+ new /obj/item/stock_parts/manipulator/femto(src)
+ new /obj/item/stock_parts/manipulator/femto(src)
+ new /obj/item/stock_parts/micro_laser/quadultra(src)
+ new /obj/item/stock_parts/micro_laser/quadultra(src)
+ new /obj/item/stock_parts/micro_laser/quadultra(src)
+ new /obj/item/stock_parts/matter_bin/bluespace(src)
+ new /obj/item/stock_parts/matter_bin/bluespace(src)
+ new /obj/item/stock_parts/matter_bin/bluespace(src)
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index c0389b6bfc..f86188984f 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -109,7 +109,7 @@
icon_type = "candle"
item_state = "candlebox5"
throwforce = 2
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
spawn_type = /obj/item/candle
fancy_open = TRUE
@@ -132,7 +132,7 @@
item_state = "cigpacket"
w_class = WEIGHT_CLASS_TINY
throwforce = 0
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
icon_type = "cigarette"
spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette
@@ -189,7 +189,7 @@
if(M == user && contents.len > 0 && !user.wear_mask)
var/obj/item/clothing/mask/cigarette/W = cig
SendSignal(COMSIG_TRY_STORAGE_TAKE, W, M)
- M.equip_to_slot_if_possible(W, slot_wear_mask)
+ M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK)
contents -= W
to_chat(user, "You take a [icon_type] out of the pack. ")
else
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index c78a20a0ef..689319e672 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -168,7 +168,7 @@
new /obj/item/weldingtool/experimental/brass(src)
/obj/item/storage/toolbox/brass/prefilled/servant
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
fabricator_type = null
/obj/item/storage/toolbox/brass/prefilled/ratvar
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index 05d6338235..60675d031f 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -280,7 +280,7 @@
new /obj/item/radio/headset/chameleon(src)
new /obj/item/stamp/chameleon(src)
new /obj/item/pda/chameleon(src)
- new /obj/item/gun/energy/laser/chameleon(src)
+ //new /obj/item/gun/energy/laser/chameleon(src) //crashes the server right now. please fix it!
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 6acf72518f..4b14388336 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -4,7 +4,7 @@
icon_state = "wallet"
w_class = WEIGHT_CLASS_SMALL
resistance_flags = FLAMMABLE
- slot_flags = SLOT_ID
+ slot_flags = ITEM_SLOT_ID
var/obj/item/card/id/front_id = null
var/list/combined_access
@@ -38,16 +38,20 @@
/obj/item/storage/wallet/Exited(atom/movable/AM)
. = ..()
- refreshID()
+ // The loc has not actually changed yet when this proc is called, so call
+ // refreshID and have it ignore the outgoing atom.
+ refreshID(AM)
-/obj/item/storage/wallet/proc/refreshID()
- if(!(front_id in src))
+/obj/item/storage/wallet/proc/refreshID(atom/movable/removed)
+ LAZYCLEARLIST(combined_access)
+ if(!(front_id in src) || front_id == removed)
front_id = null
for(var/obj/item/card/id/I in contents)
- LAZYINITLIST(combined_access)
- LAZYCLEARLIST(combined_access)
+ if(I == removed)
+ continue
if(!front_id)
front_id = I
+ LAZYINITLIST(combined_access)
combined_access |= I.access
update_icon()
diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index 1bd31e978e..76cf5283e1 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -5,7 +5,7 @@
item_state = "baton"
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 10
throwforce = 7
w_class = WEIGHT_CLASS_NORMAL
@@ -109,7 +109,7 @@
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
- user.visible_message("[user] accidentally hits themself with [src]! ", \
+ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]! ", \
"You accidentally hit yourself with [src]! ")
user.Knockdown(stunforce*3)
deductcharge(hitcost)
@@ -195,7 +195,7 @@
stunforce = 100
hitcost = 2000
throw_hit_chance = 10
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
var/obj/item/assembly/igniter/sparkler = 0
/obj/item/melee/baton/cattleprod/Initialize()
diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm
index 4a687b458d..f4eb763847 100644
--- a/code/game/objects/items/tanks/tank_types.dm
+++ b/code/game/objects/items/tanks/tank_types.dm
@@ -137,7 +137,7 @@
/obj/item/tank/internals/plasmaman/belt
icon_state = "plasmaman_tank_belt"
item_state = "plasmaman_tank_belt"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 5
volume = 6
w_class = WEIGHT_CLASS_SMALL //thanks i forgot this
@@ -157,7 +157,7 @@
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon_state = "emergency"
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
force = 4
distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm
index f841822f21..91058528e6 100644
--- a/code/game/objects/items/tanks/tanks.dm
+++ b/code/game/objects/items/tanks/tanks.dm
@@ -4,7 +4,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tanks_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tanks_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
hitsound = 'sound/weapons/smash.ogg'
pressure_resistance = ONE_ATMOSPHERE * 5
force = 5
@@ -38,7 +38,7 @@
return
if(H.wear_mask.mask_adjusted)
H.wear_mask.adjustmask(H)
- if(!(H.wear_mask.flags_1 & MASKINTERNALS_1))
+ if(!(H.wear_mask.clothing_flags & MASKINTERNALS))
to_chat(H, "[H.wear_mask] can't use [src]! ")
return
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 2a5e92d375..b8eb2dcc00 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -6,7 +6,7 @@
icon_state = "waterbackpack"
item_state = "waterbackpack"
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
slowdown = 1
actions_types = list(/datum/action/item_action/toggle_mister)
max_integrity = 200
@@ -59,7 +59,7 @@
/obj/item/watertank/equipped(mob/user, slot)
..()
- if(slot != slot_back)
+ if(slot != SLOT_BACK)
remove_noz()
/obj/item/watertank/proc/remove_noz()
@@ -343,7 +343,7 @@
icon_state = "waterbackpackatmos"
item_state = "waterbackpackatmos"
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
slowdown = 1
actions_types = list(/datum/action/item_action/activate_injector)
@@ -360,14 +360,14 @@
toggle_injection()
/obj/item/reagent_containers/chemtank/item_action_slot_check(slot, mob/user)
- if(slot == slot_back)
+ if(slot == SLOT_BACK)
return 1
/obj/item/reagent_containers/chemtank/proc/toggle_injection()
var/mob/living/carbon/human/user = usr
if(!istype(user))
return
- if (user.get_item_by_slot(slot_back) != src)
+ if (user.get_item_by_slot(SLOT_BACK) != src)
to_chat(user, "The chemtank needs to be on your back before you can activate it! ")
return
if(on)
diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm
index 6c9f6f176c..85355f1c0f 100644
--- a/code/game/objects/items/teleprod.dm
+++ b/code/game/objects/items/teleprod.dm
@@ -9,7 +9,7 @@
/obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
..()
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
- user.visible_message("[user] accidentally hits themself with [src]! ", \
+ user.visible_message("[user] accidentally hits [user.p_them()]self with [src]! ", \
"You accidentally hit yourself with [src]! ")
if(do_teleport(user, get_turf(user), 50))//honk honk
user.Knockdown(stunforce*3)
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index ed6233a0b6..0684da08b2 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -7,7 +7,7 @@
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
usesound = 'sound/items/crowbar.ogg'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 5
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 56537e703a..a29c103fda 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -7,7 +7,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 5
w_class = WEIGHT_CLASS_TINY
throwforce = 5
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index dc496187bc..229aa70ee0 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -1,372 +1,372 @@
-#define WELDER_FUEL_BURN_INTERVAL 13
-/obj/item/weldingtool
- name = "welding tool"
- desc = "A standard edition welder provided by Nanotrasen."
- icon = 'icons/obj/tools.dmi'
- icon_state = "welder"
- item_state = "welder"
- lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
- flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
- force = 3
- throwforce = 5
- hitsound = "swing_hit"
- usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg')
- var/acti_sound = 'sound/items/welderactivate.ogg'
- var/deac_sound = 'sound/items/welderdeactivate.ogg'
- throw_speed = 3
- throw_range = 5
- w_class = WEIGHT_CLASS_SMALL
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
- resistance_flags = FIRE_PROOF
-
- materials = list(MAT_METAL=70, MAT_GLASS=30)
- var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
- var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
- var/max_fuel = 20 //The max amount of fuel the welder can hold
- var/change_icons = 1
- var/can_off_process = 0
- var/light_intensity = 2 //how powerful the emitted light is when used.
- var/progress_flash_divisor = 10
- var/burned_fuel_for = 0 //when fuel was last removed
- heat = 3800
- tool_behaviour = TOOL_WELDER
- toolspeed = 1
-
-/obj/item/weldingtool/Initialize()
- . = ..()
- create_reagents(max_fuel)
- reagents.add_reagent("welding_fuel", max_fuel)
- update_icon()
-
-
-/obj/item/weldingtool/proc/update_torch()
- if(welding)
- add_overlay("[initial(icon_state)]-on")
- item_state = "[initial(item_state)]1"
- else
- item_state = "[initial(item_state)]"
-
-
-/obj/item/weldingtool/update_icon()
- cut_overlays()
- if(change_icons)
- var/ratio = get_fuel() / max_fuel
- ratio = CEILING(ratio*4, 1) * 25
- add_overlay("[initial(icon_state)][ratio]")
- update_torch()
- return
-
-
-/obj/item/weldingtool/process()
- switch(welding)
- if(0)
- force = 3
- damtype = "brute"
- update_icon()
- if(!can_off_process)
- STOP_PROCESSING(SSobj, src)
- return
- //Welders left on now use up fuel, but lets not have them run out quite that fast
- if(1)
- force = 15
- damtype = "fire"
- ++burned_fuel_for
- if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL)
- use(1)
- update_icon()
-
- //This is to start fires. process() is only called if the welder is on.
- open_flame()
-
-
-/obj/item/weldingtool/suicide_act(mob/user)
- user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide! ")
- return (FIRELOSS)
-
-
-/obj/item/weldingtool/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/screwdriver))
- flamethrower_screwdriver(I, user)
- else if(istype(I, /obj/item/stack/rods))
- flamethrower_rods(I, user)
- else
- . = ..()
- update_icon()
-
-/obj/item/weldingtool/proc/explode()
- var/turf/T = get_turf(loc)
- var/plasmaAmount = reagents.get_reagent_amount("plasma")
- dyn_explosion(T, plasmaAmount/5)//20 plasma in a standard welder has a 4 power explosion. no breaches, but enough to kill/dismember holder
- qdel(src)
-
-/obj/item/weldingtool/attack(mob/living/carbon/human/H, mob/user)
- if(!istype(H))
- return ..()
-
- var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
-
- if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM)
- if(src.use_tool(H, user, 0, volume=50, amount=1))
- if(user == H)
- user.visible_message("[user] starts to fix some of the dents on [H]'s [affecting.name]. ",
- "You start fixing some of the dents on [H]'s [affecting.name]. ")
- if(!do_mob(user, H, 50))
- return
- item_heal_robotic(H, user, 15, 0)
- else
- return ..()
-
-
-/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity)
- if(!proximity)
- return
- if(!status && O.is_refillable())
- reagents.trans_to(O, reagents.total_volume)
- to_chat(user, "You empty [src]'s fuel tank into [O]. ")
- update_icon()
- if(isOn())
- use(1)
- var/turf/location = get_turf(user)
- location.hotspot_expose(700, 50, 1)
- if(get_fuel() <= 0)
- set_light(0)
-
- if(isliving(O))
- var/mob/living/L = O
- if(L.IgniteMob())
- message_admins("[key_name_admin(user)] set [key_name_admin(L)] on fire")
- log_game("[key_name(user)] set [key_name(L)] on fire")
-
-
-/obj/item/weldingtool/attack_self(mob/user)
- if(src.reagents.has_reagent("plasma"))
- message_admins("[key_name_admin(user)] activated a rigged welder.")
- explode()
- switched_on(user)
- if(welding)
- set_light(light_intensity)
-
- update_icon()
-
-
-// Returns the amount of fuel in the welder
-/obj/item/weldingtool/proc/get_fuel()
- return reagents.get_reagent_amount("welding_fuel")
-
-
-// Uses fuel from the welding tool.
-/obj/item/weldingtool/use(used = 0)
- if(!isOn() || !check_fuel())
- return FALSE
-
- if(used)
- burned_fuel_for = 0
- if(get_fuel() >= used)
- reagents.remove_reagent("welding_fuel", used)
- check_fuel()
- return TRUE
- else
- return FALSE
-
-
-//Turns off the welder if there is no more fuel (does this really need to be its own proc?)
-/obj/item/weldingtool/proc/check_fuel(mob/user)
- if(get_fuel() <= 0 && welding)
- switched_on(user)
- update_icon()
- //mob icon update
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_hands(0)
-
- return 0
- return 1
-
-//Switches the welder on
-/obj/item/weldingtool/proc/switched_on(mob/user)
- if(!status)
- to_chat(user, "[src] can't be turned on while unsecured! ")
- return
- welding = !welding
- if(welding)
- if(get_fuel() >= 1)
- to_chat(user, "You switch [src] on. ")
- playsound(loc, acti_sound, 50, 1)
- force = 15
- damtype = "fire"
- hitsound = 'sound/items/welder.ogg'
- update_icon()
- START_PROCESSING(SSobj, src)
- else
- to_chat(user, "You need more fuel! ")
- switched_off(user)
- else
- to_chat(user, "You switch [src] off. ")
- playsound(loc, deac_sound, 50, 1)
- switched_off(user)
-
-//Switches the welder off
-/obj/item/weldingtool/proc/switched_off(mob/user)
- welding = 0
- set_light(0)
-
- force = 3
- damtype = "brute"
- hitsound = "swing_hit"
- update_icon()
-
-
-/obj/item/weldingtool/examine(mob/user)
- ..()
- to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].")
-
-/obj/item/weldingtool/is_hot()
- return welding * heat
-
-//Returns whether or not the welding tool is currently on.
-/obj/item/weldingtool/proc/isOn()
- return welding
-
-// When welding is about to start, run a normal tool_use_check, then flash a mob if it succeeds.
-/obj/item/weldingtool/tool_start_check(mob/living/user, amount=0)
- . = tool_use_check(user, amount)
- if(. && user)
- user.flash_act(light_intensity)
-
-// Flash the user during welding progress
-/obj/item/weldingtool/tool_check_callback(mob/living/user, amount, datum/callback/extra_checks)
- . = ..()
- if(. && user)
- if (progress_flash_divisor == 0)
- user.flash_act(min(light_intensity,1))
- progress_flash_divisor = initial(progress_flash_divisor)
- else
- progress_flash_divisor--
-
-// If welding tool ran out of fuel during a construction task, construction fails.
-/obj/item/weldingtool/tool_use_check(mob/living/user, amount)
- if(!isOn() || !check_fuel())
- to_chat(user, "[src] has to be on to complete this task! ")
- return FALSE
-
- if(get_fuel() >= amount)
- return TRUE
- else
- to_chat(user, "You need more welding fuel to complete this task! ")
- return FALSE
-
-
-/obj/item/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
- if(welding)
- to_chat(user, "Turn it off first! ")
- return
- status = !status
- if(status)
- to_chat(user, "You resecure [src] and close the fuel tank. ")
- container_type = NONE
- else
- to_chat(user, "[src] can now be attached, modified, and refuelled. ")
- container_type = OPENCONTAINER
- add_fingerprint(user)
-
-/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
- if(!status)
- var/obj/item/stack/rods/R = I
- if (R.use(1))
- var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc)
- if(!remove_item_from_storage(F))
- user.transferItemToLoc(src, F, TRUE)
- F.weldtool = src
- add_fingerprint(user)
- to_chat(user, "You add a rod to a welder, starting to build a flamethrower. ")
- user.put_in_hands(F)
- else
- to_chat(user, "You need one rod to start building a flamethrower! ")
-
-/obj/item/weldingtool/ignition_effect(atom/A, mob/user)
- if(use_tool(A, user, 0, amount=1))
- return "[user] casually lights [A] with [src], what a badass. "
- else
- return ""
-
-/obj/item/weldingtool/largetank
- name = "industrial welding tool"
- desc = "A slightly larger welder with a larger tank."
- icon_state = "indwelder"
- max_fuel = 40
- materials = list(MAT_GLASS=60)
-
-/obj/item/weldingtool/largetank/cyborg
- name = "integrated welding tool"
- desc = "An advanced welder designed to be used in robotic systems."
- toolspeed = 0.5
-
-/obj/item/weldingtool/largetank/flamethrower_screwdriver()
- return
-
-
-/obj/item/weldingtool/mini
- name = "emergency welding tool"
- desc = "A miniature welder used during emergencies."
- icon_state = "miniwelder"
- max_fuel = 10
- w_class = WEIGHT_CLASS_TINY
- materials = list(MAT_METAL=30, MAT_GLASS=10)
- change_icons = 0
-
-/obj/item/weldingtool/mini/flamethrower_screwdriver()
- return
-
-/obj/item/weldingtool/abductor
- name = "alien welding tool"
- desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
- icon = 'icons/obj/abductor.dmi'
- icon_state = "welder"
- toolspeed = 0.1
- light_intensity = 0
- change_icons = 0
-
-/obj/item/weldingtool/abductor/process()
- if(get_fuel() <= max_fuel)
- reagents.add_reagent("welding_fuel", 1)
- ..()
-
-/obj/item/weldingtool/hugetank
- name = "upgraded industrial welding tool"
- desc = "An upgraded welder based of the industrial welder."
- icon_state = "upindwelder"
- item_state = "upindwelder"
- max_fuel = 80
- materials = list(MAT_METAL=70, MAT_GLASS=120)
-
-/obj/item/weldingtool/experimental
- name = "experimental welding tool"
- desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
- icon_state = "exwelder"
- item_state = "exwelder"
- max_fuel = 40
- materials = list(MAT_METAL=70, MAT_GLASS=120)
- var/last_gen = 0
- change_icons = 0
- can_off_process = 1
- light_intensity = 1
- toolspeed = 0.5
- var/nextrefueltick = 0
-
-/obj/item/weldingtool/experimental/brass
- name = "brass welding tool"
- desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon_state = "brasswelder"
- item_state = "brasswelder"
-
-
-/obj/item/weldingtool/experimental/process()
- ..()
- if(get_fuel() < max_fuel && nextrefueltick < world.time)
- nextrefueltick = world.time + 10
- reagents.add_reagent("welding_fuel", 1)
-
-#undef WELDER_FUEL_BURN_INTERVAL
+#define WELDER_FUEL_BURN_INTERVAL 13
+/obj/item/weldingtool
+ name = "welding tool"
+ desc = "A standard edition welder provided by Nanotrasen."
+ icon = 'icons/obj/tools.dmi'
+ icon_state = "welder"
+ item_state = "welder"
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ flags_1 = CONDUCT_1
+ slot_flags = ITEM_SLOT_BELT
+ force = 3
+ throwforce = 5
+ hitsound = "swing_hit"
+ usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg')
+ var/acti_sound = 'sound/items/welderactivate.ogg'
+ var/deac_sound = 'sound/items/welderdeactivate.ogg'
+ throw_speed = 3
+ throw_range = 5
+ w_class = WEIGHT_CLASS_SMALL
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
+ resistance_flags = FIRE_PROOF
+
+ materials = list(MAT_METAL=70, MAT_GLASS=30)
+ var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
+ var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
+ var/max_fuel = 20 //The max amount of fuel the welder can hold
+ var/change_icons = 1
+ var/can_off_process = 0
+ var/light_intensity = 2 //how powerful the emitted light is when used.
+ var/progress_flash_divisor = 10
+ var/burned_fuel_for = 0 //when fuel was last removed
+ heat = 3800
+ tool_behaviour = TOOL_WELDER
+ toolspeed = 1
+
+/obj/item/weldingtool/Initialize()
+ . = ..()
+ create_reagents(max_fuel)
+ reagents.add_reagent("welding_fuel", max_fuel)
+ update_icon()
+
+
+/obj/item/weldingtool/proc/update_torch()
+ if(welding)
+ add_overlay("[initial(icon_state)]-on")
+ item_state = "[initial(item_state)]1"
+ else
+ item_state = "[initial(item_state)]"
+
+
+/obj/item/weldingtool/update_icon()
+ cut_overlays()
+ if(change_icons)
+ var/ratio = get_fuel() / max_fuel
+ ratio = CEILING(ratio*4, 1) * 25
+ add_overlay("[initial(icon_state)][ratio]")
+ update_torch()
+ return
+
+
+/obj/item/weldingtool/process()
+ switch(welding)
+ if(0)
+ force = 3
+ damtype = "brute"
+ update_icon()
+ if(!can_off_process)
+ STOP_PROCESSING(SSobj, src)
+ return
+ //Welders left on now use up fuel, but lets not have them run out quite that fast
+ if(1)
+ force = 15
+ damtype = "fire"
+ ++burned_fuel_for
+ if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL)
+ use(1)
+ update_icon()
+
+ //This is to start fires. process() is only called if the welder is on.
+ open_flame()
+
+
+/obj/item/weldingtool/suicide_act(mob/user)
+ user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide! ")
+ return (FIRELOSS)
+
+
+/obj/item/weldingtool/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/screwdriver))
+ flamethrower_screwdriver(I, user)
+ else if(istype(I, /obj/item/stack/rods))
+ flamethrower_rods(I, user)
+ else
+ . = ..()
+ update_icon()
+
+/obj/item/weldingtool/proc/explode()
+ var/turf/T = get_turf(loc)
+ var/plasmaAmount = reagents.get_reagent_amount("plasma")
+ dyn_explosion(T, plasmaAmount/5)//20 plasma in a standard welder has a 4 power explosion. no breaches, but enough to kill/dismember holder
+ qdel(src)
+
+/obj/item/weldingtool/attack(mob/living/carbon/human/H, mob/user)
+ if(!istype(H))
+ return ..()
+
+ var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
+
+ if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM)
+ if(src.use_tool(H, user, 0, volume=50, amount=1))
+ if(user == H)
+ user.visible_message("[user] starts to fix some of the dents on [H]'s [affecting.name]. ",
+ "You start fixing some of the dents on [H]'s [affecting.name]. ")
+ if(!do_mob(user, H, 50))
+ return
+ item_heal_robotic(H, user, 15, 0)
+ else
+ return ..()
+
+
+/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity)
+ if(!proximity)
+ return
+ if(!status && O.is_refillable())
+ reagents.trans_to(O, reagents.total_volume)
+ to_chat(user, "You empty [src]'s fuel tank into [O]. ")
+ update_icon()
+ if(isOn())
+ use(1)
+ var/turf/location = get_turf(user)
+ location.hotspot_expose(700, 50, 1)
+ if(get_fuel() <= 0)
+ set_light(0)
+
+ if(isliving(O))
+ var/mob/living/L = O
+ if(L.IgniteMob())
+ message_admins("[key_name_admin(user)] set [key_name_admin(L)] on fire")
+ log_game("[key_name(user)] set [key_name(L)] on fire")
+
+
+/obj/item/weldingtool/attack_self(mob/user)
+ if(src.reagents.has_reagent("plasma"))
+ message_admins("[key_name_admin(user)] activated a rigged welder.")
+ explode()
+ switched_on(user)
+ if(welding)
+ set_light(light_intensity)
+
+ update_icon()
+
+
+// Returns the amount of fuel in the welder
+/obj/item/weldingtool/proc/get_fuel()
+ return reagents.get_reagent_amount("welding_fuel")
+
+
+// Uses fuel from the welding tool.
+/obj/item/weldingtool/use(used = 0)
+ if(!isOn() || !check_fuel())
+ return FALSE
+
+ if(used)
+ burned_fuel_for = 0
+ if(get_fuel() >= used)
+ reagents.remove_reagent("welding_fuel", used)
+ check_fuel()
+ return TRUE
+ else
+ return FALSE
+
+
+//Turns off the welder if there is no more fuel (does this really need to be its own proc?)
+/obj/item/weldingtool/proc/check_fuel(mob/user)
+ if(get_fuel() <= 0 && welding)
+ switched_on(user)
+ update_icon()
+ //mob icon update
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_hands(0)
+
+ return 0
+ return 1
+
+//Switches the welder on
+/obj/item/weldingtool/proc/switched_on(mob/user)
+ if(!status)
+ to_chat(user, "[src] can't be turned on while unsecured! ")
+ return
+ welding = !welding
+ if(welding)
+ if(get_fuel() >= 1)
+ to_chat(user, "You switch [src] on. ")
+ playsound(loc, acti_sound, 50, 1)
+ force = 15
+ damtype = "fire"
+ hitsound = 'sound/items/welder.ogg'
+ update_icon()
+ START_PROCESSING(SSobj, src)
+ else
+ to_chat(user, "You need more fuel! ")
+ switched_off(user)
+ else
+ to_chat(user, "You switch [src] off. ")
+ playsound(loc, deac_sound, 50, 1)
+ switched_off(user)
+
+//Switches the welder off
+/obj/item/weldingtool/proc/switched_off(mob/user)
+ welding = 0
+ set_light(0)
+
+ force = 3
+ damtype = "brute"
+ hitsound = "swing_hit"
+ update_icon()
+
+
+/obj/item/weldingtool/examine(mob/user)
+ ..()
+ to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].")
+
+/obj/item/weldingtool/is_hot()
+ return welding * heat
+
+//Returns whether or not the welding tool is currently on.
+/obj/item/weldingtool/proc/isOn()
+ return welding
+
+// When welding is about to start, run a normal tool_use_check, then flash a mob if it succeeds.
+/obj/item/weldingtool/tool_start_check(mob/living/user, amount=0)
+ . = tool_use_check(user, amount)
+ if(. && user)
+ user.flash_act(light_intensity)
+
+// Flash the user during welding progress
+/obj/item/weldingtool/tool_check_callback(mob/living/user, amount, datum/callback/extra_checks)
+ . = ..()
+ if(. && user)
+ if (progress_flash_divisor == 0)
+ user.flash_act(min(light_intensity,1))
+ progress_flash_divisor = initial(progress_flash_divisor)
+ else
+ progress_flash_divisor--
+
+// If welding tool ran out of fuel during a construction task, construction fails.
+/obj/item/weldingtool/tool_use_check(mob/living/user, amount)
+ if(!isOn() || !check_fuel())
+ to_chat(user, "[src] has to be on to complete this task! ")
+ return FALSE
+
+ if(get_fuel() >= amount)
+ return TRUE
+ else
+ to_chat(user, "You need more welding fuel to complete this task! ")
+ return FALSE
+
+
+/obj/item/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
+ if(welding)
+ to_chat(user, "Turn it off first! ")
+ return
+ status = !status
+ if(status)
+ to_chat(user, "You resecure [src] and close the fuel tank. ")
+ container_type = NONE
+ else
+ to_chat(user, "[src] can now be attached, modified, and refuelled. ")
+ container_type = OPENCONTAINER
+ add_fingerprint(user)
+
+/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user)
+ if(!status)
+ var/obj/item/stack/rods/R = I
+ if (R.use(1))
+ var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc)
+ if(!remove_item_from_storage(F))
+ user.transferItemToLoc(src, F, TRUE)
+ F.weldtool = src
+ add_fingerprint(user)
+ to_chat(user, "You add a rod to a welder, starting to build a flamethrower. ")
+ user.put_in_hands(F)
+ else
+ to_chat(user, "You need one rod to start building a flamethrower! ")
+
+/obj/item/weldingtool/ignition_effect(atom/A, mob/user)
+ if(use_tool(A, user, 0, amount=1))
+ return "[user] casually lights [A] with [src], what a badass. "
+ else
+ return ""
+
+/obj/item/weldingtool/largetank
+ name = "industrial welding tool"
+ desc = "A slightly larger welder with a larger tank."
+ icon_state = "indwelder"
+ max_fuel = 40
+ materials = list(MAT_GLASS=60)
+
+/obj/item/weldingtool/largetank/cyborg
+ name = "integrated welding tool"
+ desc = "An advanced welder designed to be used in robotic systems."
+ toolspeed = 0.5
+
+/obj/item/weldingtool/largetank/flamethrower_screwdriver()
+ return
+
+
+/obj/item/weldingtool/mini
+ name = "emergency welding tool"
+ desc = "A miniature welder used during emergencies."
+ icon_state = "miniwelder"
+ max_fuel = 10
+ w_class = WEIGHT_CLASS_TINY
+ materials = list(MAT_METAL=30, MAT_GLASS=10)
+ change_icons = 0
+
+/obj/item/weldingtool/mini/flamethrower_screwdriver()
+ return
+
+/obj/item/weldingtool/abductor
+ name = "alien welding tool"
+ desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "welder"
+ toolspeed = 0.1
+ light_intensity = 0
+ change_icons = 0
+
+/obj/item/weldingtool/abductor/process()
+ if(get_fuel() <= max_fuel)
+ reagents.add_reagent("welding_fuel", 1)
+ ..()
+
+/obj/item/weldingtool/hugetank
+ name = "upgraded industrial welding tool"
+ desc = "An upgraded welder based of the industrial welder."
+ icon_state = "upindwelder"
+ item_state = "upindwelder"
+ max_fuel = 80
+ materials = list(MAT_METAL=70, MAT_GLASS=120)
+
+/obj/item/weldingtool/experimental
+ name = "experimental welding tool"
+ desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes."
+ icon_state = "exwelder"
+ item_state = "exwelder"
+ max_fuel = 40
+ materials = list(MAT_METAL=70, MAT_GLASS=120)
+ var/last_gen = 0
+ change_icons = 0
+ can_off_process = 1
+ light_intensity = 1
+ toolspeed = 0.5
+ var/nextrefueltick = 0
+
+/obj/item/weldingtool/experimental/brass
+ name = "brass welding tool"
+ desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon_state = "brasswelder"
+ item_state = "brasswelder"
+
+
+/obj/item/weldingtool/experimental/process()
+ ..()
+ if(get_fuel() < max_fuel && nextrefueltick < world.time)
+ nextrefueltick = world.time + 10
+ reagents.add_reagent("welding_fuel", 1)
+
+#undef WELDER_FUEL_BURN_INTERVAL
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index f189c26bb2..33c7be5dfd 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -7,7 +7,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 6
throw_speed = 3
throw_range = 7
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 6e399c0909..9a9a3684c3 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -6,7 +6,7 @@
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 5
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 52e98e4a9e..ef82c074a6 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -143,7 +143,7 @@
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=10, MAT_GLASS=10)
attack_verb = list("struck", "pistol whipped", "hit", "bashed")
@@ -341,7 +341,7 @@
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT | SLOT_BACK
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
@@ -714,7 +714,7 @@
to_chat(user, "The hand of cards is stuck to your hand, you can't add it to the deck! ")
return
cards += CH.currenthand
- user.visible_message("[user] puts their hand of cards in the deck.", "You put the hand of cards in the deck. ")
+ user.visible_message("[user] puts [user.p_their()] hand of cards in the deck.", "You put the hand of cards in the deck. ")
qdel(CH)
else
to_chat(user, "You can't mix cards from other decks! ")
@@ -840,7 +840,7 @@
name = "card"
desc = "a card"
icon = 'icons/obj/toy.dmi'
- icon_state = "singlecard_nanotrasen_down"
+ icon_state = "singlecard_down_nanotrasen"
w_class = WEIGHT_CLASS_TINY
var/cardname = null
var/flipped = 0
@@ -1064,7 +1064,7 @@
desc = "A stylish steampunk watch made out of thousands of tiny cogwheels."
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "dread_ipad"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
var/cooldown = 0
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index fdbea343e3..6526eaf561 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -41,7 +41,7 @@
else //something wrong
name = "[initial(name)]"
update_icon()
- if(user.get_item_by_slot(slot_back) == src)
+ if(user.get_item_by_slot(SLOT_BACK) == src)
user.update_inv_back()
else
user.update_inv_hands()
@@ -191,7 +191,7 @@
return
qdel(O)
return
- if(slot == slot_hands)
+ if(slot == SLOT_HANDS)
wield(user)
else
unwield(user)
@@ -224,7 +224,7 @@
force = 5
throwforce = 15
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force_unwielded = 5
force_wielded = 24
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
@@ -236,7 +236,7 @@
/obj/item/twohanded/fireaxe/Initialize()
. = ..()
- AddComponent(/datum/component/butchering, 100, 80, hitsound) //axes are not known for being precision butchering tools
+ AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools
/obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
icon_state = "fireaxe[wielded]"
@@ -418,7 +418,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
if(C.wear_mask)
- in_mouth = ", barely missing their nose"
+ in_mouth = ", barely missing [user.p_their()] nose"
. = "[user] swings [user.p_their()] [name][in_mouth]. [user.p_they(TRUE)] light[user.p_s()] [user.p_their()] [A.name] in the process. "
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
add_fingerprint(user)
@@ -458,7 +458,7 @@
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
force = 10
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force_unwielded = 10
force_wielded = 18
throwforce = 20
@@ -744,7 +744,7 @@
sharpness = IS_SHARP
attack_verb = list("cut", "sliced", "diced")
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/twohanded/vibro_weapon/Initialize()
@@ -791,7 +791,7 @@
desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology."
force = 11
w_class = WEIGHT_CLASS_BULKY
- slot_flags = SLOT_BACK
+ slot_flags = ITEM_SLOT_BACK
force_unwielded = 11
force_wielded = 20 //I have no idea how to balance
throwforce = 22
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index f3be1828ea..fd6fca0a3f 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -3,7 +3,7 @@
name = "banhammer"
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "toyhammer"
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
throwforce = 0
force = 1
w_class = WEIGHT_CLASS_TINY
@@ -34,7 +34,7 @@
item_state = "sord"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 2
throwforce = 1
w_class = WEIGHT_CLASS_NORMAL
@@ -55,7 +55,7 @@
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
hitsound = 'sound/weapons/bladeslice.ogg'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT | SLOT_BACK
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
force = 40
throwforce = 10
w_class = WEIGHT_CLASS_NORMAL
@@ -206,7 +206,7 @@
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
flags_1 = CONDUCT_1
- slot_flags = SLOT_BELT | SLOT_BACK
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
force = 40
throwforce = 10
w_class = WEIGHT_CLASS_HUGE
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 75cef4e92c..65ed2281f0 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -72,7 +72,7 @@
/obj/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
..()
- if(flags_2 & FROZEN_2)
+ if(obj_flags & FROZEN)
visible_message("[src] shatters into a million pieces! ")
qdel(src)
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index b758b33355..ecfd0ba0c7 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -53,7 +53,7 @@
name = "resin"
desc = "Looks like some kind of thick resin."
icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi'
- icon_state = "resin"
+ icon_state = "smooth"
density = TRUE
opacity = 1
anchored = TRUE
@@ -77,7 +77,7 @@
name = "resin wall"
desc = "Thick resin solidified into a wall."
icon = 'icons/obj/smooth_structures/alien/resin_wall.dmi'
- icon_state = "wall0" //same as resin, but consistency ho!
+ icon_state = "smooth" //same as resin, but consistency ho!
resintype = "wall"
canSmoothWith = list(/obj/structure/alien/resin/wall, /obj/structure/alien/resin/membrane)
@@ -88,7 +88,7 @@
name = "resin membrane"
desc = "Resin just thin enough to let light pass through."
icon = 'icons/obj/smooth_structures/alien/resin_membrane.dmi'
- icon_state = "membrane0"
+ icon_state = "smooth"
opacity = 0
max_integrity = 160
resintype = "membrane"
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index cc447a19ad..85e498e9e4 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -10,7 +10,7 @@ LINEN BINS
icon = 'icons/obj/bedsheets.dmi'
icon_state = "sheetwhite"
item_state = "bedsheet"
- slot_flags = SLOT_NECK
+ slot_flags = ITEM_SLOT_NECK
layer = MOB_LAYER
throwforce = 0
throw_speed = 1
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 95deb52eb4..2302a6b4d0 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -310,7 +310,7 @@
message_cooldown = world.time + 50
to_chat(user, "[src]'s door won't budge! ")
return
- container_resist()
+ container_resist(user)
/obj/structure/closet/attack_hand(mob/user)
. = ..()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 5de453beb0..6e5c425b2b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -24,5 +24,4 @@
new /obj/item/assembly/flash/handheld(src)
new /obj/item/laser_pointer(src)
new /obj/item/door_remote/research_director(src)
- new /obj/item/storage/box/firingpins(src)
new /obj/item/circuitboard/machine/techfab/department/science(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm
index ef786dda03..2fcf670101 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/supplypod.dm
@@ -65,6 +65,7 @@
//------------------------------------FALLING SUPPLY POD-------------------------------------//
/obj/effect/temp_visual/DPfall
icon = 'icons/obj/2x2.dmi'
+ icon_state = "supplypod_falling"
pixel_x = -16
pixel_y = -5
pixel_z = 200
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 2889a10e1d..63d700d3ce 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -148,3 +148,32 @@
name = "science crate"
desc = "A science crate."
icon_state = "scicrate"
+
+/obj/structure/closet/crate/solarpanel_small
+ name = "budget solar panel crate"
+ icon_state = "engi_e_crate"
+
+/obj/structure/closet/crate/solarpanel_small/PopulateContents()
+ ..()
+ for(var/i in 1 to 13)
+ new /obj/item/solar_assembly(src)
+ new /obj/item/circuitboard/computer/solar_control(src)
+ new /obj/item/paper/guides/jobs/engi/solars(src)
+ new /obj/item/electronics/tracker(src)
+
+/obj/structure/closet/crate/goldcrate
+ name = "gold crate"
+
+/obj/structure/closet/crate/goldcrate/PopulateContents()
+ ..()
+ for(var/i in 1 to 3)
+ new /obj/item/stack/sheet/mineral/gold(src, 1, FALSE)
+ new /obj/item/storage/belt/champion(src)
+
+/obj/structure/closet/crate/silvercrate
+ name = "silver crate"
+
+/obj/structure/closet/crate/silvercrate/PopulateContents()
+ ..()
+ for(var/i in 1 to 5)
+ new /obj/item/coin/silver(src)
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index 7fbc9ee078..fe89b450c4 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -358,7 +358,7 @@
/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell)
. = ..()
owner = owner_mind
- flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for their short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell. "
+ flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell. "
var/area/A = get_area(src)
if(!mapload && A)
notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index 2e9672bb99..beb7a927ca 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -1,6 +1,6 @@
#define GUILLOTINE_BLADE_MAX_SHARP 10 // This is maxiumum sharpness and will decapitate without failure
#define GUILLOTINE_DECAP_MIN_SHARP 7 // Minimum amount of sharpness for decapitation. Any less and it will just do severe brute damage
-#define GUILLOTINE_ANIMATION_LENGTH 9 // How many deciseconds the animation is
+#define GUILLOTINE_ANIMATION_LENGTH 9 // How many deciseconds the animation is
#define GUILLOTINE_BLADE_RAISED 1
#define GUILLOTINE_BLADE_MOVING 2
#define GUILLOTINE_BLADE_DROPPED 3
@@ -158,7 +158,7 @@
add_fingerprint(user)
if (blade_status == GUILLOTINE_BLADE_SHARPENING)
return
-
+
if (blade_status == GUILLOTINE_BLADE_RAISED)
if (blade_sharpness < GUILLOTINE_BLADE_MAX_SHARP)
blade_status = GUILLOTINE_BLADE_SHARPENING
@@ -187,7 +187,7 @@
return FALSE
if (!istype(M, /mob/living/carbon/human))
- to_chat(usr, "It doesn't look like they can fit into this properly! ")
+ to_chat(usr, "It doesn't look like [M.p_they()] can fit into this properly! ")
return FALSE // Can't decapitate non-humans
if (blade_status != GUILLOTINE_BLADE_RAISED)
diff --git a/code/game/objects/structures/life_candle.dm b/code/game/objects/structures/life_candle.dm
index dca838ca96..e1480b32b3 100644
--- a/code/game/objects/structures/life_candle.dm
+++ b/code/game/objects/structures/life_candle.dm
@@ -34,7 +34,7 @@
user.visible_message("[user] reaches out and pinches the flame of [src]. ", "You sever the connection between yourself and [src]. ")
linked_minds -= user.mind
else
- user.visible_message("[user] touches [src]. It seems to respond to their presence! ", "You create a connection between you and [src]. ")
+ user.visible_message("[user] touches [src]. It seems to respond to [user.p_their()] presence! ", "You create a connection between you and [src]. ")
linked_minds |= user.mind
update_icon()
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 749717b358..929e6e1520 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -473,7 +473,7 @@
var/washing_face = 0
if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_EYES))
washing_face = 1
- user.visible_message("[user] starts washing their [washing_face ? "face" : "hands"]... ", \
+ user.visible_message("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]... ", \
"You start washing your [washing_face ? "face" : "hands"]... ")
busy = TRUE
@@ -483,7 +483,7 @@
busy = FALSE
- user.visible_message("[user] washes their [washing_face ? "face" : "hands"] using [src]. ", \
+ user.visible_message("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src]. ", \
"You wash your [washing_face ? "face" : "hands"] using [src]. ")
if(washing_face)
if(ishuman(user))
@@ -520,7 +520,7 @@
user.Knockdown(stunforce)
user.stuttering = stunforce/20
B.deductcharge(B.hitcost)
- user.visible_message("[user] shocks themself while attempting to wash the active [B.name]! ", \
+ user.visible_message("[user] shocks [user.p_them()]self while attempting to wash the active [B.name]! ", \
"You unwisely attempt to wash [B] while it's still on. ")
playsound(src, "sparks", 50, 1)
return
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index 2fc582229d..538fcdc8de 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -160,7 +160,7 @@
for(var/obj/I in contents)
if(I.resistance_flags & FREEZE_PROOF)
return
- if(!(I.flags_2 & FROZEN_2)) //let it go
+ if(!(I.obj_flags & FROZEN))
I.make_frozen_visual()
for(var/mob/living/L in contents)
if(L.bodytemperature <= 50)
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
index 78fe2b1bde..a51989d230 100644
--- a/code/game/turfs/simulated/floor/reinf_floor.dm
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -117,9 +117,8 @@
/turf/open/floor/engine/cult
name = "engraved floor"
- desc = "The air hangs heavy over this sinister flooring."
+ desc = "The air smells strangely over this sinister flooring."
icon_state = "plating"
- CanAtmosPass = ATMOS_PASS_NO
floor_tile = null
var/obj/effect/clockwork/overlay/floor/bloodcult/realappearance
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index 316391f8de..b6f862cab5 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -128,10 +128,10 @@
continue
if(iscarbon(L))
var/mob/living/carbon/C = L
- var/obj/item/clothing/S = C.get_item_by_slot(slot_wear_suit)
- var/obj/item/clothing/H = C.get_item_by_slot(slot_head)
+ var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
+ var/obj/item/clothing/H = C.get_item_by_slot(SLOT_HEAD)
- if(S && H && S.flags_2 & LAVA_PROTECT_2 && H.flags_2 & LAVA_PROTECT_2)
+ if(S && H && S.clothing_flags & LAVAPROTECT && H.clothing_flags & LAVAPROTECT)
return
L.adjustFireLoss(20)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index c6d2f66900..6d62172f8e 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -188,7 +188,7 @@
//melting
if(isobj(AM) && air && air.temperature > T0C)
var/obj/O = AM
- if(O.flags_2 & FROZEN_2)
+ if(O.obj_flags & FROZEN)
O.make_unfrozen()
/turf/proc/is_plasteel_floor()
@@ -343,7 +343,7 @@
for(var/V in contents)
var/atom/A = V
- if(A.level >= affecting_level)
+ if(!QDELETED(A) && A.level >= affecting_level)
if(ismovableatom(A))
var/atom/movable/AM = A
if(!AM.ex_check(explosion_id))
diff --git a/code/game/world.dm b/code/game/world.dm
index cc4246a7c8..d121f7e411 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -17,6 +17,10 @@ GLOBAL_PROTECT(security_mode)
make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once)
+ TgsNew()
+
+ GLOB.revdata = new
+
config.Load()
//SetupLogs depends on the RoundID, so lets check
@@ -25,8 +29,6 @@ GLOBAL_PROTECT(security_mode)
SSdbcore.SetRoundID()
SetupLogs()
- SERVER_TOOLS_ON_NEW
-
load_admins()
LoadVerbs(/datum/verbs/menu)
if(CONFIG_GET(flag/usewhitelist))
@@ -93,6 +95,7 @@ GLOBAL_PROTECT(security_mode)
GLOB.sql_error_log = "[GLOB.log_directory]/sql.log"
GLOB.world_qdel_log = "[GLOB.log_directory]/qdel.log"
GLOB.world_runtime_log = "[GLOB.log_directory]/runtime.log"
+ GLOB.query_debug_log = "[GLOB.log_directory]/query_debug.log"
#ifdef UNIT_TESTS
GLOB.test_log = file("[GLOB.log_directory]/tests.log")
@@ -129,7 +132,7 @@ GLOBAL_PROTECT(security_mode)
warning("/tg/station 13 uses many file operations, a few shell()s, and some external call()s. Trusted mode is recommended. You can download our source code for your own browsing and compilation at https://github.com/tgstation/tgstation")
/world/Topic(T, addr, master, key)
- SERVER_TOOLS_ON_TOPIC //redirect to server tools if necessary
+ TGS_TOPIC //redirect to server tools if necessary
var/static/list/topic_handlers = TopicHandlers()
@@ -185,7 +188,7 @@ GLOBAL_PROTECT(security_mode)
qdel(src) //shut it down
/world/Reboot(reason = 0, fast_track = FALSE)
- SERVER_TOOLS_ON_REBOOT
+ TgsReboot()
if (reason || fast_track) //special reboot, do none of the normal stuff
if (usr)
log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools")
@@ -199,7 +202,7 @@ GLOBAL_PROTECT(security_mode)
FinishTestRun()
return
- if(SERVER_TOOLS_PRESENT)
+ if(TgsAvailable())
var/do_hard_reboot
// check the hard reboot counter
var/ruhr = CONFIG_GET(number/rounds_until_hard_restart)
@@ -218,7 +221,7 @@ GLOBAL_PROTECT(security_mode)
if(do_hard_reboot)
log_world("World hard rebooted at [time_stamp()]")
shutdown_logging() // See comment below.
- SERVER_TOOLS_REBOOT_BYOND
+ TgsEndProcess()
log_world("World rebooted at [time_stamp()]")
shutdown_logging() // Past this point, no logging procs can be used, at risk of data loss.
diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm
index 49c7aeffb6..097076fc74 100644
--- a/code/modules/admin/IsBanned.dm
+++ b/code/modules/admin/IsBanned.dm
@@ -39,7 +39,7 @@
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
if (CONFIG_GET(flag/panic_bunker) && SSdbcore.Connect())
log_access("Failed Login: [key] - Guests not allowed during panic bunker")
- return list("reason"="guest", "desc"="\nReason: You must first join the Discord to verify your account before joining this server. Please ping an admin once you've joined and read the rules. https://discord.gg/E6SQuhz")
+ return list("reason"="guest", "desc"="\nReason: You must first sign into your BYOND account or join the Discord to verify your account before joining this server. Please ping an admin once you've joined and read the rules. https://discord.gg/E6SQuhz")
//Population Cap Checking
var/extreme_popcap = CONFIG_GET(number/extreme_popcap)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 577cca303b..d63b36e6e7 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -434,7 +434,7 @@
return
var/list/options = list("Regular Restart", "Hard Restart (No Delay/Feeback Reason)", "Hardest Restart (No actions, just reboot)")
- if(SERVER_TOOLS_PRESENT)
+ if(world.TgsAvailable())
options += "Server Restart (Kill and restart DD)";
var/rebootconfirm
@@ -459,7 +459,7 @@
world.Reboot(fast_track = TRUE)
if("Server Restart (Kill and restart DD)")
to_chat(world, "Server restart - [init_by]")
- SERVER_TOOLS_REBOOT_BYOND
+ world.TgsEndProcess()
/datum/admins/proc/end_round()
set category = "Server"
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index dee4787753..7873a97f7c 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -242,7 +242,6 @@ GLOBAL_PROTECT(protected_ranks)
var/skip
if(rank_names[admin_rank] == null)
message_admins("[admin_ckey] loaded with invalid admin rank [admin_rank].")
- log_sql("[admin_ckey] loaded with invalid admin rank [admin_rank].")
skip = 1
if(GLOB.admin_datums[admin_ckey] || GLOB.deadmins[admin_ckey])
skip = 1
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index b309c5bea6..77f48d18f4 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -93,6 +93,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/forceEvent,
/client/proc/admin_change_sec_level,
/client/proc/toggle_nuke,
+ /client/proc/run_weather,
/client/proc/mass_zombie_infection,
/client/proc/mass_zombie_cure,
/client/proc/polymorph_all,
diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm
index 02402956d9..dbeb6fce7f 100644
--- a/code/modules/admin/chat_commands.dm
+++ b/code/modules/admin/chat_commands.dm
@@ -1,12 +1,12 @@
#define IRC_STATUS_THROTTLE 5
-/datum/server_tools_command/ircstatus
+/datum/tgs_chat_command/ircstatus
name = "status"
help_text = "Gets the admincount, playercount, gamemode, and true game mode of the server"
admin_only = TRUE
- var/static/last_irc_status = 0
+ var/last_irc_status = 0
-/datum/server_tools_command/ircstatus/Run(sender, params)
+/datum/tgs_chat_command/ircstatus/Run(datum/tgs_chat_user/sender, params)
var/rtod = REALTIMEOFDAY
if(rtod - last_irc_status < IRC_STATUS_THROTTLE)
return
@@ -17,12 +17,12 @@
status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode ? SSticker.mode.name : "Not started"]."
return status
-/datum/server_tools_command/irccheck
+/datum/tgs_chat_command/irccheck
name = "check"
help_text = "Gets the playercount, gamemode, and address of the server"
- var/static/last_irc_check = 0
+ var/last_irc_check = 0
-/datum/server_tools_command/irccheck/Run(sender, params)
+/datum/tgs_chat_command/irccheck/Run(datum/tgs_chat_user/sender, params)
var/rtod = REALTIMEOFDAY
if(rtod - last_irc_check < IRC_STATUS_THROTTLE)
return
@@ -30,14 +30,15 @@
var/server = CONFIG_GET(string/server)
return "[GLOB.round_id ? "Round #[GLOB.round_id]: " : ""][GLOB.clients.len] players on [SSmapping.config.map_name]; Round [SSticker.HasRoundStarted() ? (SSticker.IsRoundInProgress() ? "Active" : "Finishing") : "Starting"] -- [server ? server : "[world.internet_address]:[world.port]"]" //CIT CHANGE - obfuscates the current gamemode from players
-/datum/server_tools_command/ahelp
+/datum/tgs_chat_command/ahelp
name = "ahelp"
help_text = " |list>>"
- required_parameters = 2
admin_only = TRUE
-/datum/server_tools_command/ahelp/Run(sender, params)
+/datum/tgs_chat_command/ahelp/Run(datum/tgs_chat_user/sender, params)
var/list/all_params = splittext(params, " ")
+ if(all_params.len < 2)
+ return "Insufficient parameters"
var/target = all_params[1]
all_params.Cut(1, 2)
var/id = text2num(target)
@@ -47,52 +48,54 @@
target = AH.initiator_ckey
else
return "Ticket #[id] not found!"
- var/res = IrcPm(target, all_params.Join(" "), sender)
+ var/res = IrcPm(target, all_params.Join(" "), sender.friendly_name)
if(res != "Message Successful")
return res
-/datum/server_tools_command/namecheck
+/datum/tgs_chat_command/namecheck
name = "namecheck"
help_text = "Returns info on the specified target"
- required_parameters = 1
admin_only = TRUE
-/datum/server_tools_command/namecheck/Run(sender, params)
- log_admin("Chat Name Check: [sender] on [params]")
- message_admins("Name checking [params] from [sender]")
+/datum/tgs_chat_command/namecheck/Run(datum/tgs_chat_user/sender, params)
+ params = trim(params)
+ if(!params)
+ return "Insufficient parameters"
+ log_admin("Chat Name Check: [sender.friendly_name] on [params]")
+ message_admins("Name checking [params] from [sender.friendly_name]")
return keywords_lookup(params, 1)
-/datum/server_tools_command/adminwho
+/datum/tgs_chat_command/adminwho
name = "adminwho"
help_text = "Lists administrators currently on the server"
admin_only = TRUE
-/datum/server_tools_command/adminwho/Run(sender, params)
+/datum/tgs_chat_command/adminwho/Run(datum/tgs_chat_user/sender, params)
return ircadminwho()
GLOBAL_LIST(round_end_notifiees)
-/datum/server_tools_command/notify
+/datum/tgs_chat_command/notify
name = "notify"
help_text = "Pings the invoker when the round ends"
admin_only = TRUE
-/datum/server_tools_command/notify/Run(sender, params)
+/datum/tgs_chat_command/notify/Run(datum/tgs_chat_user/sender, params)
if(!SSticker.IsRoundInProgress() && SSticker.HasRoundStarted())
- return "[sender], the round has already ended!"
+ return "[sender.mention], the round has already ended!"
LAZYINITLIST(GLOB.round_end_notifiees)
GLOB.round_end_notifiees[sender] = TRUE
- return "I will notify [sender] when the round ends."
+ return "I will notify [sender.mention] when the round ends."
-/datum/server_tools_command/sdql
+/datum/tgs_chat_command/sdql
name = "sdql"
help_text = "Runs an SDQL query"
admin_only = TRUE
-/datum/server_tools_command/sdql/Run(sender, params)
+/datum/tgs_chat_command/sdql/Run(datum/tgs_chat_user/sender, params)
if(GLOB.AdminProcCaller)
return "Unable to run query, another admin proc call is in progress. Try again later."
- GLOB.AdminProcCaller = "CHAT_[sender]" //_ won't show up in ckeys so it'll never match with a real admin
+ GLOB.AdminProcCaller = "CHAT_[sender.friendly_name]" //_ won't show up in ckeys so it'll never match with a real admin
var/list/results = world.SDQL2_query(params, GLOB.AdminProcCaller, GLOB.AdminProcCaller)
GLOB.AdminProcCaller = null
if(!results)
@@ -100,13 +103,13 @@ GLOBAL_LIST(round_end_notifiees)
var/list/text_res = results.Copy(1, 3)
var/list/refs = results.len > 3 ? results.Copy(4) : null
. = "[text_res.Join("\n")][refs ? "\nRefs: [refs.Join(" ")]" : ""]"
-
-/datum/server_tools_command/reload_admins
+
+/datum/tgs_chat_command/reload_admins
name = "reload_admins"
help_text = "Forces the server to reload admins."
admin_only = TRUE
-/datum/server_tools_command/reload_admins/Run(sender, params)
+/datum/tgs_chat_command/reload_admins/Run(datum/tgs_chat_user/sender, params)
load_admins()
- log_admin("[sender] reloaded admins via chat command.")
+ log_admin("[sender.friendly_name] reloaded admins via chat command.")
return "Admins reloaded."
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index b577a84a1d..73b8fa61f0 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -22,6 +22,17 @@
H.facial_hair_color = H.hair_color
H.eye_color = random_eye_color()
H.dna.blood_type = random_blood_type()
+
+ // Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant.
+ H.dna.features["mcolor"] = random_short_color()
+ H.dna.features["tail_lizard"] = pick(GLOB.tails_list_lizard)
+ H.dna.features["snout"] = pick(GLOB.snouts_list)
+ H.dna.features["horns"] = pick(GLOB.horns_list)
+ H.dna.features["frills"] = pick(GLOB.frills_list)
+ H.dna.features["spines"] = pick(GLOB.spines_list)
+ H.dna.features["body_markings"] = pick(GLOB.body_markings_list)
+ H.dna.features["moth_wings"] = pick(GLOB.moth_wings_list)
+
H.update_body()
H.update_hair()
H.update_body_parts()
\ No newline at end of file
diff --git a/code/modules/admin/create_poll.dm b/code/modules/admin/create_poll.dm
index b1cda46ece..90fd6c66c9 100644
--- a/code/modules/admin/create_poll.dm
+++ b/code/modules/admin/create_poll.dm
@@ -73,7 +73,7 @@
if(!option)
return
option = sanitizeSQL(option)
- var/default_percentage_calc
+ var/default_percentage_calc = 0
if(polltype != POLLTYPE_IRV)
switch(alert("Should this option be included by default when poll result percentages are generated?",,"Yes","No","Cancel"))
if("Yes")
diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm
index f7bb770079..1d0bdddf03 100644
--- a/code/modules/admin/permissionedit.dm
+++ b/code/modules/admin/permissionedit.dm
@@ -6,56 +6,106 @@
return
usr.client.holder.edit_admin_permissions()
-/datum/admins/proc/edit_admin_permissions()
+/datum/admins/proc/edit_admin_permissions(action, target, operation, page)
if(!check_rights(R_PERMISSIONS))
return
-
- var/list/output = list({"
-
-
-Permissions Panel
-
-
-
-
-
-Search:
-
-"}
-
- usr << browse(jointext(output, ""),"window=editrights;size=1000x650")
+ var/list/output = list("\[Permissions\] ")
+ if(action)
+ output += " | \[Log\] | \[Management\] "
+ else
+ output += "\[Log\] \[Management\] "
+ if(action == 1)
+ var/list/searchlist = list(" WHERE ")
+ if(target)
+ searchlist += "ckey = '[sanitizeSQL(target)]'"
+ if(operation)
+ if(target)
+ searchlist += " AND "
+ searchlist += "operation = '[sanitizeSQL(operation)]'"
+ var/search
+ if(searchlist.len > 1)
+ search = searchlist.Join("")
+ var/logcount = 0
+ var/logssperpage = 20
+ var/pagecount = 0
+ page = text2num(page)
+ var/datum/DBQuery/query_count_admin_logs = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("admin_log")][search]")
+ if(!query_count_admin_logs.warn_execute())
+ return
+ if(query_count_admin_logs.NextRow())
+ logcount = text2num(query_count_admin_logs.item[1])
+ if(logcount > logssperpage)
+ output += "Page: "
+ while(logcount > 0)
+ output += "|[pagecount == page ? "\[[pagecount]\] " : "\[[pagecount]\]"] "
+ logcount -= logssperpage
+ pagecount++
+ output += "|"
+ var/limit = " LIMIT [logssperpage * page], [logssperpage]"
+ var/datum/DBQuery/query_search_admin_logs = SSdbcore.NewQuery("SELECT datetime, round_id, adminckey, operation, target, log FROM [format_table_name("admin_log")][search] ORDER BY datetime DESC[limit]")
+ if(!query_search_admin_logs.warn_execute())
+ return
+ while(query_search_admin_logs.NextRow())
+ var/datetime = query_search_admin_logs.item[1]
+ var/round_id = query_search_admin_logs.item[2]
+ var/admin_ckey = query_search_admin_logs.item[3]
+ operation = query_search_admin_logs.item[4]
+ target = query_search_admin_logs.item[5]
+ var/log = query_search_admin_logs.item[6]
+ output += "[datetime] | Round ID [round_id] | Admin [admin_ckey] | Operation [operation] on [target] [log]
"
+ if(action == 2)
+ output += "Admin ckeys with invalid ranks "
+ var/datum/DBQuery/query_check_admin_errors = SSdbcore.NewQuery("SELECT ckey, [format_table_name("admin")].rank FROM [format_table_name("admin")] LEFT JOIN [format_table_name("admin_ranks")] ON [format_table_name("admin_ranks")].rank = [format_table_name("admin")].rank WHERE [format_table_name("admin_ranks")].rank IS NULL")
+ if(!query_check_admin_errors.warn_execute())
+ return
+ while(query_check_admin_errors.NextRow())
+ var/admin_ckey = query_check_admin_errors.item[1]
+ var/admin_rank = query_check_admin_errors.item[2]
+ output += "[admin_ckey] has non-existant rank [admin_rank] | \[Change Rank\] | \[Remove\] "
+ output += " "
+ output += "Unused ranks "
+ var/datum/DBQuery/query_check_unused_rank = SSdbcore.NewQuery("SELECT [format_table_name("admin_ranks")].rank FROM [format_table_name("admin_ranks")] LEFT JOIN [format_table_name("admin")] ON [format_table_name("admin")].rank = [format_table_name("admin_ranks")].rank WHERE [format_table_name("admin")].rank IS NULL")
+ if(!query_check_unused_rank.warn_execute())
+ return
+ while(query_check_unused_rank.NextRow())
+ var/admin_rank = query_check_unused_rank.item[1]
+ output += "Rank [admin_rank] is not held by any admin | \[Remove\] "
+ output += " "
+ else if(!action)
+ output += {"
+ Permissions Panel
+
+
+
+ Search:
"
+ usr << browse("[jointext(output, "")]","window=editrights;size=1000x650")
/datum/admins/proc/edit_rights_topic(list/href_list)
if(!check_rights(R_PERMISSIONS))
@@ -142,10 +192,17 @@
return FALSE
if(use_db)
. = sanitizeSQL(.)
+ //if an admin exists without a datum they won't be caught by the above
+ var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin_ranks")] WHERE ckey = '[.]'")
+ if(!query_admin_in_db.warn_execute())
+ return FALSE
+ if(query_admin_in_db.NextRow())
+ to_chat(usr, "[.] already listed in admin database. Check the Management tab if they don't appear in the list of admins. ")
+ return FALSE
var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')")
if(!query_add_admin.warn_execute())
return FALSE
- var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, adminckey, adminip, operation, log) VALUES ('[SQLtime()]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add admin', 'New admin added: [.]')")
+ var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add admin', '[.]', 'New admin added: [.]')")
if(!query_add_admin_log.warn_execute())
return FALSE
@@ -153,12 +210,13 @@
if(alert("Are you sure you want to remove [admin_ckey]?","Confirm Removal","Do it","Cancel") == "Do it")
GLOB.admin_datums -= admin_ckey
GLOB.deadmins -= admin_ckey
- D.disassociate()
+ if(D)
+ D.disassociate()
if(use_db)
var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin")] WHERE ckey = '[admin_ckey]'")
if(!query_add_rank.warn_execute())
return
- var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, adminckey, adminip, operation, log) VALUES ('[SQLtime()]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove admin', 'Admin removed: [admin_ckey]')")
+ var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove admin', '[admin_ckey]', 'Admin removed: [admin_ckey]')")
if(!query_add_rank_log.warn_execute())
return
message_admins("[key_name_admin(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]")
@@ -216,13 +274,13 @@
var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_ranks")] (rank, flags, exclude_flags, can_edit_flags) VALUES ('[new_rank]', '0', '0', '0')")
if(!query_add_rank.warn_execute())
return
- var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, adminckey, adminip, operation, log) VALUES ('[SQLtime()]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add rank', 'New rank added: [admin_ckey]')")
+ var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add rank', '[new_rank]', 'New rank added: [new_rank]')")
if(!query_add_rank_log.warn_execute())
return
var/datum/DBQuery/query_change_rank = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET rank = '[new_rank]' WHERE ckey = '[admin_ckey]'")
if(!query_change_rank.warn_execute())
return
- var/datum/DBQuery/query_change_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, adminckey, adminip, operation, log) VALUES ('[SQLtime()]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change admin rank', 'Rank of [admin_ckey] changed from [old_rank] to [new_rank]')")
+ var/datum/DBQuery/query_change_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change admin rank', '[admin_ckey]', 'Rank of [admin_ckey] changed from [old_rank] to [new_rank]')")
if(!query_change_rank_log.warn_execute())
return
if(D) //they were previously an admin
@@ -259,7 +317,7 @@
var/datum/DBQuery/query_change_rank_flags = SSdbcore.NewQuery("UPDATE [format_table_name("admin_ranks")] SET flags = '[new_flags]', exclude_flags = '[new_exclude_flags]', can_edit_flags = '[new_can_edit_flags]' WHERE rank = '[D.rank.name]'")
if(!query_change_rank_flags.warn_execute())
return
- var/datum/DBQuery/query_change_rank_flags_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, adminckey, adminip, operation, log) VALUES ('[SQLtime()]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change rank flags', 'Permissions of [admin_ckey] changed from[rights2text(old_flags," ")][rights2text(old_exclude_flags," ", "-")][rights2text(old_can_edit_flags," ", "*")] to[rights2text(new_flags," ")][rights2text(new_exclude_flags," ", "-")][rights2text(new_can_edit_flags," ", "*")]')")
+ var/datum/DBQuery/query_change_rank_flags_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change rank flags', '[D.rank.name]', 'Permissions of [D.rank.name] changed from[rights2text(old_flags," ")][rights2text(old_exclude_flags," ", "-")][rights2text(old_can_edit_flags," ", "*")] to[rights2text(new_flags," ")][rights2text(new_exclude_flags," ", "-")][rights2text(new_can_edit_flags," ", "*")]')")
if(!query_change_rank_flags_log.warn_execute())
return
for(var/datum/admin_rank/R in GLOB.admin_ranks)
@@ -294,6 +352,36 @@
message_admins("[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]")
log_admin("[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]")
+/datum/admins/proc/remove_rank(admin_rank)
+ if(!admin_rank)
+ return
+ for(var/datum/admin_rank/R in GLOB.admin_ranks)
+ if(R.name == admin_rank && (!(R.rights & usr.client.holder.rank.can_edit_rights) == R.rights))
+ to_chat(usr, "You don't have edit rights to all the rights this rank has, rank deletion not permitted. ")
+ return
+ if(!CONFIG_GET(flag/admin_legacy_system) && CONFIG_GET(flag/protect_legacy_ranks) && (admin_rank in GLOB.protected_ranks))
+ to_chat(usr, "Deletion of protected ranks is not permitted, it must be removed from admin_ranks.txt. ")
+ return
+ if(CONFIG_GET(flag/load_legacy_ranks_only))
+ to_chat(usr, "Rank deletion not permitted while database rank loading is disabled. ")
+ return
+ admin_rank = sanitizeSQL(admin_rank)
+ var/datum/DBQuery/query_admins_with_rank = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE rank = '[admin_rank]'")
+ if(!query_admins_with_rank.warn_execute())
+ return
+ if(query_admins_with_rank.NextRow())
+ to_chat(usr, "Error: Rank deletion attempted while rank still used; Tell a coder, this shouldn't happen. ")
+ return
+ if(alert("Are you sure you want to remove [admin_rank]?","Confirm Removal","Do it","Cancel") == "Do it")
+ var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin_ranks")] WHERE rank = '[admin_rank]'")
+ if(!query_add_rank.warn_execute())
+ return
+ var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove rank', '[admin_rank]', 'Rank removed: [admin_rank]')")
+ if(!query_add_rank_log.warn_execute())
+ return
+ message_admins("[key_name_admin(usr)] removed rank [admin_rank] permanently")
+ log_admin("[key_name(usr)] removed rank [admin_rank] permanently")
+
/datum/admins/proc/sync_lastadminrank(admin_ckey, datum/admins/D)
var/sqlrank = sanitizeSQL(D.rank.name)
admin_ckey = sanitizeSQL(admin_ckey)
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index a8e92db53a..5138089a6c 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -430,7 +430,7 @@
var/obj/item/clothing/under/schoolgirl/I = new seifuku
var/olduniform = H.w_uniform
H.temporarilyRemoveItemFromInventory(H.w_uniform, TRUE, FALSE)
- H.equip_to_slot_or_del(I, slot_w_uniform)
+ H.equip_to_slot_or_del(I, SLOT_W_UNIFORM)
qdel(olduniform)
if(droptype == "Yes")
I.flags_1 |= NODROP_1
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 95dae05c09..bff420320c 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -273,6 +273,21 @@
return
create_message("note", banckey, null, banreason, null, null, 0, 0)
+ else if(href_list["editrightsbrowser"])
+ edit_admin_permissions(0)
+
+ else if(href_list["editrightsbrowserlog"])
+ edit_admin_permissions(1, href_list["editrightstarget"], href_list["editrightsoperation"], href_list["editrightspage"])
+
+ if(href_list["editrightsbrowsermanage"])
+ if(href_list["editrightschange"])
+ change_admin_rank(href_list["editrightschange"], TRUE)
+ else if(href_list["editrightsremove"])
+ remove_admin(href_list["editrightsremove"], TRUE)
+ else if(href_list["editrightsremoverank"])
+ remove_rank(href_list["editrightsremoverank"])
+ edit_admin_permissions(2)
+
else if(href_list["editrights"])
edit_rights_topic(href_list)
@@ -1493,8 +1508,8 @@
if(ishuman(L))
var/mob/living/carbon/human/observer = L
- observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(observer), slot_w_uniform)
- observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), slot_shoes)
+ observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket(observer), SLOT_W_UNIFORM)
+ observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), SLOT_SHOES)
L.Unconscious(100)
sleep(5)
L.forceMove(pick(GLOB.tdomeobserve))
@@ -2448,6 +2463,19 @@
usr.client.cmd_admin_mod_antag_rep(C, href_list["modantagrep"])
show_player_panel(M)
+ else if(href_list["slowquery"])
+ if(!check_rights(R_ADMIN))
+ return
+ var/answer = href_list["slowquery"]
+ if(answer == "yes")
+ log_query_debug("[usr.key] | Reported a server hang")
+ if(alert(usr, "Had you just press any admin buttons?", "Query server hang report", "Yes", "No") == "Yes")
+ var/response = input(usr,"What were you just doing?","Query server hang report") as null|text
+ if(response)
+ log_query_debug("[usr.key] | [response]")
+ else if(answer == "no")
+ log_query_debug("[usr.key] | Reported no server hang")
+
/datum/admins/proc/HandleCMode()
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 2a6b4448d2..f385cdc1bd 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -594,7 +594,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/proc/send2irc(msg,msg2)
msg = replacetext(replacetext(msg, "\proper", ""), "\improper", "")
msg2 = replacetext(replacetext(msg2, "\proper", ""), "\improper", "")
- SERVER_TOOLS_RELAY_BROADCAST("[msg] | [msg2]")
+ world.TgsTargetedChatBroadcast("[msg] | [msg2]", TRUE)
/proc/send2otherserver(source,msg,type = "Ahelp")
var/comms_key = CONFIG_GET(string/comms_key)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 7d4d5fa05e..2fd212b4dc 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -110,10 +110,14 @@ GLOBAL_PROTECT(LastAdminCalledProc)
GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention)
GLOBAL_PROTECT(AdminProcCallSpamPrevention)
-/proc/WrapAdminProcCall(target, procname, list/arguments)
+/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
if(target && procname == "Del")
to_chat(usr, "Calling Del() is not allowed")
return
+
+ if(target != GLOBAL_PROC && !target.CanProcCall(procname))
+ to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!")
+ return
var/current_caller = GLOB.AdminProcCaller
var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller
if(!ckey)
@@ -137,7 +141,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
GLOB.AdminProcCaller = null
//adv proc call this, ya nerds
-/world/proc/WrapAdminProcCall(target, procname, list/arguments)
+/world/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
if(target == GLOBAL_PROC)
return call(procname)(arglist(arguments))
else if(target != world)
@@ -476,7 +480,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
id.forceMove(W)
W.update_icon()
else
- H.equip_to_slot(id,slot_wear_id)
+ H.equip_to_slot(id,SLOT_WEAR_ID)
else
alert("Invalid mob")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 83d4f64748..be0b9d04bb 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1043,6 +1043,30 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
for(var/obj/machinery/shuttle_manipulator/M in GLOB.machines)
M.ui_interact(usr)
+/client/proc/run_weather()
+ set category = "Fun"
+ set name = "Run Weather"
+ set desc = "Triggers a weather on the z-level you choose."
+
+ if(!holder)
+ return
+
+ var/weather_type = input("Choose a weather", "Weather") as null|anything in subtypesof(/datum/weather)
+ if(!weather_type)
+ return
+
+ var/z_level = input("Z-Level to target? Leave blank to target current Z-Level.", "Z-Level") as num|null
+ if(!isnum(z_level))
+ if(!src.mob)
+ return
+ z_level = src.mob.z
+
+ SSweather.run_weather(weather_type, z_level)
+
+ message_admins("[key_name_admin(usr)] started weather of type [weather_type] on the z-level [z_level].")
+ log_admin("[key_name(usr)] started weather of type [weather_type] on the z-level [z_level].")
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Run Weather")
+
/client/proc/mass_zombie_infection()
set category = "Fun"
set name = "Mass Zombie Infection"
diff --git a/code/modules/antagonists/abductor/abductee/abductee_objectives.dm b/code/modules/antagonists/abductor/abductee/abductee_objectives.dm
index 94a1512bcb..f188319644 100644
--- a/code/modules/antagonists/abductor/abductee/abductee_objectives.dm
+++ b/code/modules/antagonists/abductor/abductee/abductee_objectives.dm
@@ -45,7 +45,7 @@
/datum/objective/abductee/calling/New()
var/mob/dead/D = pick(GLOB.dead_mob_list)
if(D)
- explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm."
+ explanation_text = "You know that [D] has perished. Hold a seance to call [D.p_them()] from the spirit realm."
/datum/objective/abductee/forbiddennumber
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index d14c749992..28cc4d9698 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -53,7 +53,7 @@
A.UpdateButtonIcon()
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user)
- if(slot == slot_wear_suit) //we only give the mob the ability to activate the vest if he's actually wearing it.
+ if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it.
return 1
/obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry)
@@ -207,7 +207,7 @@
/obj/item/abductor/gizmo/proc/scan(atom/target, mob/living/user)
if(ishuman(target))
console.AddSnapshot(target)
- to_chat(user, "You scan [target] and add them to the database. ")
+ to_chat(user, "You scan [target] and add [target.p_them()] to the database. ")
/obj/item/abductor/gizmo/proc/mark(atom/target, mob/living/user)
if(marked == target)
@@ -338,7 +338,7 @@
if(QDELETED(G))
return
- if(istype(C.get_item_by_slot(slot_head), /obj/item/clothing/head/foilhat))
+ if(istype(C.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
to_chat(user, "Your target seems to have some sort of protective headgear on, blocking the message from being sent! ")
return
@@ -425,7 +425,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
item_state = "wonderprod"
lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
force = 7
w_class = WEIGHT_CLASS_NORMAL
actions_types = list(/datum/action/item_action/toggle_mode)
@@ -515,9 +515,9 @@ Congratulations! You are now trained for invasive xenobiology research!"}
/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
if(L.incapacitated(TRUE, TRUE))
- if(istype(L.get_item_by_slot(slot_head), /obj/item/clothing/head/foilhat))
+ if(istype(L.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
to_chat(user, "The specimen's protective headgear is interfering with the sleep inducement! ")
- L.visible_message("[user] tried to induced sleep in [L] with [src], but their headgear protected them! ", \
+ L.visible_message("[user] tried to induced sleep in [L] with [src], but [L.p_their()] headgear protected [L.p_them()]! ", \
"You feel a strange wave of heavy drowsiness wash over you, but your headgear deflects most of it! ")
L.drowsyness += 2
return
@@ -527,9 +527,9 @@ Congratulations! You are now trained for invasive xenobiology research!"}
L.Sleeping(1200)
add_logs(user, L, "put to sleep")
else
- if(istype(L.get_item_by_slot(slot_head), /obj/item/clothing/head/foilhat))
+ if(istype(L.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
to_chat(user, "The specimen's protective headgear is completely blocking our sleep inducement methods! ")
- L.visible_message("[user] tried to induce sleep in [L] with [src], but their headgear completely protected them! ", \
+ L.visible_message("[user] tried to induce sleep in [L] with [src], but [L.p_their()] headgear completely protected [L.p_them()]! ", \
"Any sense of drowsiness is quickly diminished as your headgear deflects the effects! ")
return
L.drowsyness += 1
@@ -620,12 +620,15 @@ Congratulations! You are now trained for invasive xenobiology research!"}
icon_state = "abductor_headset"
item_state = "abductor_headset"
keyslot2 = new /obj/item/encryptionkey/heads/captain
- flags_2 = BANG_PROTECT_2
/obj/item/radio/headset/abductor/Initialize(mapload)
. = ..()
make_syndie()
+/obj/item/radio/headset/abductor/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
+
/obj/item/radio/headset/abductor/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
return // Stops humans from disassembling abductor headsets.
diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm
index c551509cc7..1e53f778d6 100644
--- a/code/modules/antagonists/abductor/equipment/gland.dm
+++ b/code/modules/antagonists/abductor/equipment/gland.dm
@@ -122,7 +122,7 @@
owner.grant_language(/datum/language/slime)
/obj/item/organ/heart/gland/slime/activate()
- to_chat(owner, "You feel nauseous! ")
+ to_chat(owner, "You feel nauseated! ")
owner.vomit(20)
var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey")
@@ -153,7 +153,7 @@
H.confused += 15
H.adjustBrainLoss(10, 160)
if(3)
- H.hallucination += 80
+ H.hallucination += 60
/obj/item/organ/heart/gland/pop
cooldown_low = 900
@@ -272,10 +272,10 @@
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
..()
- owner.add_trait(TRAIT_SHOCKIMMUNE, "abductor_gland")
+ owner.add_trait(TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
/obj/item/organ/heart/gland/electric/Remove(mob/living/carbon/M, special = 0)
- owner.remove_trait(TRAIT_SHOCKIMMUNE, "abductor_gland")
+ owner.remove_trait(TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
..()
/obj/item/organ/heart/gland/electric/activate()
diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm
index 08776318c8..e629a0b47d 100644
--- a/code/modules/antagonists/abductor/machinery/console.dm
+++ b/code/modules/antagonists/abductor/machinery/console.dm
@@ -167,7 +167,7 @@
c.console = src
/obj/machinery/abductor/console/proc/AddSnapshot(mob/living/carbon/human/target)
- if(istype(target.get_item_by_slot(slot_head), /obj/item/clothing/head/foilhat))
+ if(istype(target.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
say("Subject wearing specialized protective headgear, unable to get a proper scan!")
return
var/datum/icon_snapshot/entry = new
diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm
index 9b30be5e69..8527ab533c 100644
--- a/code/modules/antagonists/brother/brother.dm
+++ b/code/modules/antagonists/brother/brother.dm
@@ -48,7 +48,7 @@
else if(i != brothers.len)
brother_text += ", "
to_chat(owner.current, "You are the [owner.special_role] of [brother_text]. ")
- to_chat(owner.current, "The Syndicate only accepts those that have proven themself. Prove yourself and prove your [team.member_name]s by completing your objectives together!")
+ to_chat(owner.current, "The Syndicate only accepts those that have proven themselves. Prove yourself and prove your [team.member_name]s by completing your objectives together!")
owner.announce_objectives()
give_meeting_area()
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 8c6d7f52bd..a42ae6ef4f 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -353,7 +353,10 @@
if(GLOB.changeling_team_objective_type)
var/datum/objective/changeling_team_objective/team_objective = new GLOB.changeling_team_objective_type
team_objective.owner = owner
- objectives += team_objective
+ if(team_objective.prepare())//Setting up succeeded
+ objectives += team_objective
+ else
+ qdel(team_objective)
return
/datum/antagonist/changeling/proc/forge_objectives()
diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm
index 92c8a3c069..6ae73336d4 100644
--- a/code/modules/antagonists/changeling/changeling_power.dm
+++ b/code/modules/antagonists/changeling/changeling_power.dm
@@ -72,10 +72,10 @@
//used in /mob/Stat()
/obj/effect/proc_holder/changeling/proc/can_be_used_by(mob/user)
- if(!user || QDELETED(user))
- return 0
+ if(QDELETED(user))
+ return FALSE
if(!ishuman(user) && !ismonkey(user))
- return 0
+ return FALSE
if(req_human && !ishuman(user))
- return 0
- return 1
+ return FALSE
+ return TRUE
diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm
index 047056cac4..199bc6636b 100644
--- a/code/modules/antagonists/changeling/powers/absorb.dm
+++ b/code/modules/antagonists/changeling/powers/absorb.dm
@@ -79,8 +79,8 @@
recent_speech[spoken_memory] = say_log[spoken_memory]
if(recent_speech.len)
- changeling.antag_memory += "Some of [target]'s speech patterns, we should study these to better impersonate them! "
- to_chat(user, "Some of [target]'s speech patterns, we should study these to better impersonate them! ")
+ changeling.antag_memory += "Some of [target]'s speech patterns, we should study these to better impersonate [target.p_them()]! "
+ to_chat(user, "Some of [target]'s speech patterns, we should study these to better impersonate [target.p_them()]! ")
for(var/spoken_memory in recent_speech)
changeling.antag_memory += "\"[recent_speech[spoken_memory]]\" "
to_chat(user, "\"[recent_speech[spoken_memory]]\" ")
diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm
index dbb0e3a88a..1e8eaed383 100644
--- a/code/modules/antagonists/changeling/powers/biodegrade.dm
+++ b/code/modules/antagonists/changeling/powers/biodegrade.dm
@@ -13,7 +13,7 @@
return 0
if(user.handcuffed)
- var/obj/O = user.get_item_by_slot(slot_handcuffed)
+ var/obj/O = user.get_item_by_slot(SLOT_HANDCUFFED)
if(!istype(O))
return 0
user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]! ", \
@@ -23,7 +23,7 @@
used = TRUE
if(user.wear_suit && user.wear_suit.breakouttime && !used)
- var/obj/item/clothing/suit/S = user.get_item_by_slot(slot_wear_suit)
+ var/obj/item/clothing/suit/S = user.get_item_by_slot(SLOT_WEAR_SUIT)
if(!istype(S))
return 0
user.visible_message("[user] vomits a glob of acid across the front of [user.p_their()] [S]! ", \
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index fc98d3182d..dbc8446fca 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -32,7 +32,7 @@
user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL_1 will delete the item
if(!silent)
playsound(user, 'sound/effects/blobattack.ogg', 30, 1)
- user.visible_message("With a sickening crunch, [user] reforms their [weapon_name_simple] into an arm! ", "We assimilate the [weapon_name_simple] back into our body. ", "With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm! ", "We assimilate the [weapon_name_simple] back into our body. ", "[H] casts off their [suit_name_simple]! ", "We cast off our [suit_name_simple]. ", "You hear the organic matter ripping and tearing! ")
+ H.visible_message("[H] casts off [H.p_their()] [suit_name_simple]! ", "We cast off our [suit_name_simple]. ", "You hear the organic matter ripping and tearing! ")
H.temporarilyRemoveItemFromInventory(H.head, TRUE) //The qdel on dropped() takes care of it
H.temporarilyRemoveItemFromInventory(H.wear_suit, TRUE)
H.update_inv_wear_suit()
@@ -119,8 +119,8 @@
user.dropItemToGround(user.head)
user.dropItemToGround(user.wear_suit)
- user.equip_to_slot_if_possible(new suit_type(user), slot_wear_suit, 1, 1, 1)
- user.equip_to_slot_if_possible(new helmet_type(user), slot_head, 1, 1, 1)
+ user.equip_to_slot_if_possible(new suit_type(user), SLOT_WEAR_SUIT, 1, 1, 1)
+ user.equip_to_slot_if_possible(new helmet_type(user), SLOT_HEAD, 1, 1, 1)
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.chem_recharge_slowdown += recharge_slowdown
@@ -189,13 +189,13 @@
return
if(A.hasPower())
- user.visible_message("[user] jams [src] into the airlock and starts prying it open! ", "We start forcing the airlock open. ", \
+ user.visible_message("[user] jams [src] into the airlock and starts prying it open! ", "We start forcing [src] open. ", \
"You hear a metal screeching sound. ")
playsound(A, 'sound/machines/airlock_alien_prying.ogg', 100, 1)
if(!do_after(user, 100, target = A))
return
//user.say("Heeeeeeeeeerrre's Johnny!")
- user.visible_message("[user] forces the airlock to open with their [src]! ", "We force the airlock to open. ", \
+ user.visible_message("[user] forces the airlock to open with [user.p_their()] [src]! ", "We force [src] to open. ", \
"You hear a metal screeching sound. ")
A.open(2)
@@ -415,7 +415,7 @@
if(remaining_uses < 1)
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
- H.visible_message("With a sickening crunch, [H] reforms his shield into an arm! ", "We assimilate our shield into our body ", "With a sickening crunch, [H] reforms [H.p_their()] shield into an arm! ", "We assimilate our shield into our body ", "[loc.name]\'s flesh rapidly inflates, forming a bloated mass around their body! ", "We inflate our flesh, creating a spaceproof suit! ", "You hear organic matter ripping and tearing! ")
+ loc.visible_message("[loc.name]\'s flesh rapidly inflates, forming a bloated mass around [loc.p_their()] body! ", "We inflate our flesh, creating a spaceproof suit! ", "You hear organic matter ripping and tearing! ")
START_PROCESSING(SSobj, src)
/obj/item/clothing/suit/space/changeling/process()
@@ -464,7 +465,8 @@
name = "flesh mass"
icon_state = "lingspacehelmet"
desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front."
- flags_1 = STOPSPRESSUREDMAGE_1 | NODROP_1 | DROPDEL_1 //Again, no THICKMATERIAL_1.
+ flags_1 = NODROP_1 | DROPDEL_1
+ clothing_flags = STOPSPRESSUREDAMAGE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
diff --git a/code/modules/antagonists/changeling/powers/revive.dm b/code/modules/antagonists/changeling/powers/revive.dm
index 4fb28b4904..d9c1ca7221 100644
--- a/code/modules/antagonists/changeling/powers/revive.dm
+++ b/code/modules/antagonists/changeling/powers/revive.dm
@@ -29,8 +29,12 @@
return TRUE
/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/living/user)
+ . = ..()
+ if(!.)
+ return
+
if(user.has_trait(CHANGELING_DRAIN) || ((user.stat != DEAD) && !(user.has_trait(TRAIT_FAKEDEATH))))
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
changeling.purchasedpowers -= src
- return 0
- . = ..()
+ return FALSE
+
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 10b86ac1ad..1d0a4cf143 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -138,7 +138,7 @@
var/obj/item/held = target.get_active_held_item()
if(held && !target.dropItemToGround(held))
- to_chat(user, "[held] is stuck to their hand, you cannot grow a false armblade over it! ")
+ to_chat(user, "[held] is stuck to [target.p_their()] hand, you cannot grow a false armblade over it! ")
return
if(ismonkey(target))
@@ -155,7 +155,7 @@
/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade)
playsound(target, 'sound/effects/blobattack.ogg', 30, 1)
target.visible_message("With a sickening crunch, \
- [target] reforms their [blade.name] into an arm! ",
+ [target] reforms [target.p_their()] [blade.name] into an arm! ",
"[blade] reforms back to normal. ",
"[L]'s [I.name] [resist_string], protecting them from [src]'s effects! ", \
+ L.visible_message("[L]'s [I.name] [resist_string], protecting [L.p_them()] from [src]'s effects! ", \
"Your [I.name] [resist_string], protecting you! ")
return
sigil_effects(L)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
index 570f6527f8..b32345fa69 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm
@@ -284,7 +284,7 @@
return FALSE
else if(fabricator_heal(user, fabricator) && user)
user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy. ", \
- "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_they(TRUE)] [p_are()]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health. ")
+ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health. ")
//Same with clockwork mobs.
/mob/living/simple_animal/hostile/clockwork/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent)
@@ -293,7 +293,7 @@
return FALSE
else if(fabricator_heal(user, fabricator) && user)
user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy. ", \
- "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_they(TRUE)] [p_are()]"] now at [health]/[maxHealth] health. ")
+ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [health]/[maxHealth] health. ")
//Cogscarabs get special interaction because they're drones and have innate self-heals/revives.
/mob/living/simple_animal/drone/cogscarab/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent)
diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
index fedcfa0e97..d39656c8d8 100644
--- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
+++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm
@@ -35,13 +35,13 @@
if(iscarbon(target) && target.Adjacent(ranged_ability_user))
var/mob/living/carbon/L = target
if(is_servant_of_ratvar(L))
- to_chat(ranged_ability_user, "\"They're a servant.\" ")
+ to_chat(ranged_ability_user, "\"[L.p_theyre(TRUE)] a servant.\" ")
return TRUE
else if(L.stat)
to_chat(ranged_ability_user, "\"There is use in shackling the dead, but for examples.\" ")
return TRUE
else if (istype(L.handcuffed,/obj/item/restraints/handcuffs/clockwork))
- to_chat(ranged_ability_user, "\"They are already helpless, no?\" ")
+ to_chat(ranged_ability_user, "\"[L.p_theyre(TRUE)] already helpless, no?\" ")
return TRUE
playsound(loc, 'sound/weapons/handcuffs.ogg', 30, TRUE)
@@ -92,7 +92,7 @@
to_chat(ranged_ability_user, "\"[L] does not yet serve Ratvar.\" ")
return TRUE
if(L.stat == DEAD)
- to_chat(ranged_ability_user, "\"[L.p_they(TRUE)] [L.p_are()] dead. [text2ratvar("Oh, child. To have your life cut short...")]\" ")
+ to_chat(ranged_ability_user, "\"[L.p_theyre(TRUE)] dead. [text2ratvar("Oh, child. To have your life cut short...")]\" ")
return TRUE
var/brutedamage = L.getBruteLoss()
@@ -220,10 +220,10 @@
to_chat(ranged_ability_user, "\"[L] does not yet serve Ratvar.\" ")
return TRUE
if(L.stat == DEAD)
- to_chat(ranged_ability_user, "\"[L.p_they(TRUE)] [L.p_are()] dead. [text2ratvar("Oh, child. To have your life cut short...")]\" ")
+ to_chat(ranged_ability_user, "\"[L.p_theyre(TRUE)] dead. [text2ratvar("Oh, child. To have your life cut short...")]\" ")
return TRUE
if(islist(L.stun_absorption) && L.stun_absorption["vanguard"] && L.stun_absorption["vanguard"]["end_time"] > world.time)
- to_chat(ranged_ability_user, "\"[L.p_they(TRUE)] [L.p_are()] already shielded by a Vanguard.\" ")
+ to_chat(ranged_ability_user, "\"[L.p_theyre(TRUE)] already shielded by a Vanguard.\" ")
return TRUE
successful = TRUE
diff --git a/code/modules/antagonists/clockcult/clock_items/clock_components.dm b/code/modules/antagonists/clockcult/clock_items/clock_components.dm
index ebb688a0ab..e8f4fd5503 100644
--- a/code/modules/antagonists/clockcult/clock_items/clock_components.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clock_components.dm
@@ -16,7 +16,7 @@
/obj/item/clockwork/component/attack_self(mob/living/user)
if(is_servant_of_ratvar(user))
- user.visible_message("[user] crushes [src] in their hand! ", \
+ user.visible_message("[user] crushes [src] in [user.p_their()] hand! ", \
"You crush [src], capturing its escaping energy for use as power. ")
playsound(user, 'sound/effects/pop_expl.ogg', 50, TRUE)
adjust_clockwork_power(POWER_WALL_TOTAL)
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
index 77bfbf4f3b..32bf870886 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm
@@ -21,26 +21,26 @@
/obj/item/clothing/head/helmet/clockwork/ratvar_act()
if(GLOB.ratvar_awakens)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
- flags_1 |= STOPSPRESSUREDMAGE_1
+ clothing_flags |= STOPSPRESSUREDAMAGE
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
else if(GLOB.ratvar_approaches)
armor = list("melee" = 70, "bullet" = 80, "laser" = -15, "energy" = 25, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- flags_1 |= STOPSPRESSUREDMAGE_1
+ clothing_flags |= STOPSPRESSUREDAMAGE
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
else
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- flags_1 &= ~STOPSPRESSUREDMAGE_1
+ clothing_flags &= ~STOPSPRESSUREDAMAGE
max_heat_protection_temperature = initial(max_heat_protection_temperature)
min_cold_protection_temperature = initial(min_cold_protection_temperature)
/obj/item/clothing/head/helmet/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == slot_head && !is_servant_of_ratvar(user))
+ if(slot == SLOT_HEAD && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\" ")
- user.visible_message("As [user] puts [src] on, it flickers off their head! ", "The helmet flickers off your head, leaving only nausea! ")
+ user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] head! ", "The helmet flickers off your head, leaving only nausea! ")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(20)
@@ -82,17 +82,17 @@
/obj/item/clothing/suit/armor/clockwork/ratvar_act()
if(GLOB.ratvar_awakens)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
- flags_1 |= STOPSPRESSUREDMAGE_1
+ clothing_flags |= STOPSPRESSUREDAMAGE
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
else if(GLOB.ratvar_approaches)
armor = list("melee" = 70, "bullet" = 80, "laser" = -15, "energy" = 25, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- flags_1 |= STOPSPRESSUREDMAGE_1
+ clothing_flags |= STOPSPRESSUREDAMAGE
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
else
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- flags_1 &= ~STOPSPRESSUREDMAGE_1
+ clothing_flags &= ~STOPSPRESSUREDAMAGE
max_heat_protection_temperature = initial(max_heat_protection_temperature)
min_cold_protection_temperature = initial(min_cold_protection_temperature)
@@ -103,10 +103,10 @@
/obj/item/clothing/suit/armor/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == slot_wear_suit && !is_servant_of_ratvar(user))
+ if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\" ")
- user.visible_message("As [user] puts [src] on, it flickers off their body! ", "The curiass flickers off your body, leaving only nausea! ")
+ user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body! ", "The curiass flickers off your body, leaving only nausea! ")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit(20)
@@ -148,12 +148,12 @@
/obj/item/clothing/gloves/clockwork/ratvar_act()
if(GLOB.ratvar_awakens)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
- flags_1 |= STOPSPRESSUREDMAGE_1
+ clothing_flags |= STOPSPRESSUREDAMAGE
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
else
armor = list("melee" = 80, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- flags_1 &= ~STOPSPRESSUREDMAGE_1
+ clothing_flags &= ~STOPSPRESSUREDAMAGE
max_heat_protection_temperature = initial(max_heat_protection_temperature)
min_cold_protection_temperature = initial(min_cold_protection_temperature)
@@ -164,10 +164,10 @@
/obj/item/clothing/gloves/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == slot_gloves && !is_servant_of_ratvar(user))
+ if(slot == SLOT_GLOVES && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\" ")
- user.visible_message("As [user] puts [src] on, it flickers off their arms! ", "The gauntlets flicker off your arms, leaving only nausea! ")
+ user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] arms! ", "The gauntlets flicker off your arms, leaving only nausea! ")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit()
@@ -203,9 +203,9 @@
/obj/item/clothing/shoes/clockwork/ratvar_act()
if(GLOB.ratvar_awakens)
- flags_1 |= NOSLIP_1
+ clothing_flags |= NOSLIP
else
- flags_1 &= ~NOSLIP_1
+ clothing_flags &= ~NOSLIP
/obj/item/clothing/shoes/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
if(equipper && !is_servant_of_ratvar(equipper))
@@ -214,10 +214,10 @@
/obj/item/clothing/shoes/clockwork/equipped(mob/living/user, slot)
..()
- if(slot == slot_shoes && !is_servant_of_ratvar(user))
+ if(slot == SLOT_SHOES && !is_servant_of_ratvar(user))
if(!iscultist(user))
to_chat(user, "\"Now now, this is for my servants, not you.\" ")
- user.visible_message("As [user] puts [src] on, it flickers off their feet! ", "The treads flicker off your feet, leaving only nausea! ")
+ user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] feet! ", "The treads flicker off your feet, leaving only nausea! ")
if(iscarbon(user))
var/mob/living/carbon/C = user
C.vomit()
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
index 5f5bc1b58a..c464656150 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
@@ -9,7 +9,7 @@
righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi'
var/inhand_overlay //If applicable, this overlay will be applied to the slab's inhand
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
var/busy //If the slab is currently being used by something
diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
index ca5fe74f2e..3f3bb58598 100644
--- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
+++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm
@@ -115,4 +115,4 @@
S.no_cost = TRUE
if(seasonal_hat && seasonal_hat != "none")
var/obj/item/hat = new seasonal_hat(construct)
- construct.equip_to_slot_or_del(hat, slot_head)
+ construct.equip_to_slot_or_del(hat, SLOT_HEAD)
diff --git a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
index a16a52d7aa..f54d88fc49 100644
--- a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
+++ b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm
@@ -28,13 +28,13 @@
return ..()
/obj/item/clothing/glasses/judicial_visor/item_action_slot_check(slot, mob/user)
- if(slot != slot_glasses)
+ if(slot != SLOT_GLASSES)
return 0
return ..()
/obj/item/clothing/glasses/judicial_visor/equipped(mob/living/user, slot)
..()
- if(slot != slot_glasses)
+ if(slot != SLOT_GLASSES)
update_status(FALSE)
if(blaster.ranged_ability_user)
blaster.remove_ranged_ability()
@@ -55,13 +55,13 @@
addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later
/obj/item/clothing/glasses/judicial_visor/proc/check_on_mob(mob/user)
- if(user && src != user.get_item_by_slot(slot_glasses)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from
+ if(user && src != user.get_item_by_slot(SLOT_GLASSES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from
update_status(FALSE)
if(blaster.ranged_ability_user)
blaster.remove_ranged_ability()
/obj/item/clothing/glasses/judicial_visor/attack_self(mob/user)
- if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(slot_glasses))
+ if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(SLOT_GLASSES))
blaster.toggle(user)
/obj/item/clothing/glasses/judicial_visor/proc/update_status(change_to)
@@ -89,7 +89,7 @@
if(!src)
return 0
recharging = FALSE
- if(user && src == user.get_item_by_slot(slot_glasses))
+ if(user && src == user.get_item_by_slot(SLOT_GLASSES))
to_chat(user, "Your [name] hums. It is ready. ")
else
active = FALSE
@@ -115,7 +115,7 @@
/obj/effect/proc_holder/judicial_visor/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return
- if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(slot_glasses))
+ if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(SLOT_GLASSES))
remove_ranged_ability()
return
@@ -151,6 +151,7 @@
desc = "You get the feeling that you shouldn't be standing here."
clockwork_desc = "A sigil that will soon erupt and smite any unenlightened nearby."
icon = 'icons/effects/96x96.dmi'
+ icon_state = ""
pixel_x = -32
pixel_y = -32
layer = BELOW_MOB_LAYER
diff --git a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
index 55eb0f568a..d47bf4f316 100644
--- a/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
+++ b/code/modules/antagonists/clockcult/clock_items/soul_vessel.dm
@@ -72,12 +72,12 @@
if(H.head)
var/obj/item/I = H.head
if(I.flags_inv & HIDEHAIR) //they're wearing a hat that covers their skull
- to_chat(user, "[H]'s head is covered, remove [H.head] first! ")
+ to_chat(user, "[H]'s head is covered, remove [H.p_their()] [H.head] first! ")
return
if(H.wear_mask)
var/obj/item/I = H.wear_mask
if(I.flags_inv & HIDEHAIR) //they're wearing a mask that covers their skull
- to_chat(user, "[H]'s head is covered, remove [H.wear_mask] first! ")
+ to_chat(user, "[H]'s head is covered, remove [H.p_their()] [H.wear_mask] first! ")
return
var/obj/item/bodypart/head/HE = H.get_bodypart(BODY_ZONE_HEAD)
if(!HE) //literally headless
diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
index c1bf94842d..dab12dc304 100644
--- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
+++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm
@@ -74,7 +74,7 @@
/obj/item/clothing/glasses/wraith_spectacles/equipped(mob/living/user, slot)
..()
- if(slot != slot_glasses || up)
+ if(slot != SLOT_GLASSES || up)
return
if(user.has_trait(TRAIT_BLIND))
to_chat(user, "\"You're blind, idiot. Stop embarrassing yourself.\" " )
diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
index 4be5f7d4e6..42ca9e07e2 100644
--- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
+++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm
@@ -89,7 +89,7 @@
if(!shield_health)
return
var/energy_projectile = istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)
- visible_message("[src] deflects [P] with their shield! ", \
+ visible_message("[src] deflects [P] with [p_their()] shield! ", \
"You block [P] with your shield! Blocks left: [shield_health - 1] ")
if(energy_projectile)
playsound(src, 'sound/weapons/effects/searwall.ogg', 50, TRUE)
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
index 9a78c64942..4e1a5b42cb 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm
@@ -160,18 +160,18 @@
/datum/action/innate/clockwork_armaments/Activate()
var/do_message = 0
- var/obj/item/I = owner.get_item_by_slot(slot_wear_suit)
+ var/obj/item/I = owner.get_item_by_slot(SLOT_WEAR_SUIT)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), slot_wear_suit)
- I = owner.get_item_by_slot(slot_head)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), SLOT_WEAR_SUIT)
+ I = owner.get_item_by_slot(SLOT_HEAD)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), slot_head)
- I = owner.get_item_by_slot(slot_gloves)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), SLOT_HEAD)
+ I = owner.get_item_by_slot(SLOT_GLOVES)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), slot_gloves)
- I = owner.get_item_by_slot(slot_shoes)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), SLOT_GLOVES)
+ I = owner.get_item_by_slot(SLOT_SHOES)
if(remove_item_if_better(I, owner))
- do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), slot_shoes)
+ do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), SLOT_SHOES)
if(do_message)
owner.visible_message("Strange armor appears on [owner]! ", "A bright shimmer runs down your body, equipping you with Ratvarian armor. ")
playsound(owner, 'sound/magic/clockwork/fellowship_armory.ogg', 15 * do_message, TRUE) //get sound loudness based on how much we equipped
diff --git a/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm b/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm
index 8739cb368b..05f3ca5917 100644
--- a/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/eminence_spire.dm
@@ -78,7 +78,7 @@
return
if("Nominate Yourself")
eminence_nominee = nominee
- hierophant_message("[nominee] nominates themselves as the Eminence! You may object by interacting with the eminence spire. The vote will otherwise pass in 30 seconds. ")
+ hierophant_message("[nominee] nominates [nominee.p_them()]self as the Eminence! You may object by interacting with the eminence spire. The vote will otherwise pass in 30 seconds. ")
if("Nominate Ghosts")
eminence_nominee = "ghosts"
hierophant_message("[nominee] proposes selecting an Eminence from ghosts! You may object by interacting with the eminence spire. The vote will otherwise pass in 30 seconds. ")
@@ -115,7 +115,7 @@
eminence_nominee = null
return
playsound(eminence_nominee, 'sound/machines/clockcult/ark_damage.ogg', 50, FALSE)
- eminence_nominee.visible_message("A blast of white-hot light flows into [eminence_nominee], vaporizing them in an instant! ", \
+ eminence_nominee.visible_message("A blast of white-hot light flows into [eminence_nominee], vaporizing [eminence_nominee.p_them()] in an instant! ", \
"allthelightintheuniverseflowing.into.YOU ")
for(var/obj/item/I in eminence_nominee)
eminence_nominee.dropItemToGround(I)
diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
index 93a3e14045..6312228447 100644
--- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
@@ -23,7 +23,7 @@
var/mob/living/L = buckled_mobs[1]
if(iscarbon(L))
L.Knockdown(100)
- L.visible_message("[L] is maimed as the skewer shatters while still in their body! ")
+ L.visible_message("[L] is maimed as the skewer shatters while still in [L.p_their()] body! ")
L.adjustBruteLoss(15)
unbuckle_mob(L)
return ..()
diff --git a/code/modules/antagonists/clockcult/clockcult.dm b/code/modules/antagonists/clockcult/clockcult.dm
index f921b6b527..bbb83fc9a5 100644
--- a/code/modules/antagonists/clockcult/clockcult.dm
+++ b/code/modules/antagonists/clockcult/clockcult.dm
@@ -159,7 +159,7 @@
SSticker.mode.servants_of_ratvar -= owner
SSticker.mode.update_servant_icons_removed(owner)
if(!silent)
- owner.current.visible_message("[owner] seems to have remembered their true allegiance! ", null, null, null, owner.current)
+ owner.current.visible_message("[owner] seems to have remembered [owner.p_their()] true allegiance! ", null, null, null, owner.current)
to_chat(owner, "A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant. ")
owner.current.log_message("Has renounced the cult of Ratvar! ", INDIVIDUAL_ATTACK_LOG)
owner.special_role = null
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index bb2ce1db2a..3df3d63ebd 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -260,7 +260,7 @@
if(!ishuman(target) || iscultist(target))
return
var/mob/living/carbon/human/H = target
- H.hallucination = max(H.hallucination, 240)
+ H.hallucination = max(H.hallucination, 120)
SEND_SOUND(ranged_ability_user, sound('sound/effects/ghost.ogg',0,1,50))
var/image/C = image('icons/effects/cult_effects.dmi',H,"bloodsparkles", ABOVE_MOB_LAYER)
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, FALSE)
@@ -410,7 +410,7 @@
if(iscultist(target))
return
if(iscultist(user))
- user.visible_message("[user] holds up their hand, which explodes in a flash of red light! ", \
+ user.visible_message("[user] holds up [user.p_their()] hand, which explodes in a flash of red light! ", \
"You stun [L] with the spell! ")
var/obj/item/nullrod/N = locate() in L
if(N)
@@ -605,11 +605,11 @@
uses--
var/mob/living/carbon/C = target
C.visible_message("Otherworldly armor suddenly appears on [C]! ")
- C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,slot_w_uniform)
- C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head)
- C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit)
- C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes)
- C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), slot_back)
+ C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,SLOT_W_UNIFORM)
+ C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), SLOT_HEAD)
+ C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), SLOT_WEAR_SUIT)
+ C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), SLOT_SHOES)
+ C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), SLOT_BACK)
if(C == user)
qdel(src) //Clears the hands
C.put_in_hands(new /obj/item/melee/cultblade(user))
@@ -642,7 +642,7 @@
else
H.blood_volume = BLOOD_VOLUME_SAFE
uses -= round(restore_blood/2)
- to_chat(user,"Your blood rites have restored [H == user ? "your" : "their"] blood to safe levels! ")
+ to_chat(user,"Your blood rites have restored [H == user ? "your" : "[H.p_their()]"] blood to safe levels! ")
var/overall_damage = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss()
if(overall_damage == 0)
to_chat(user,"That cultist doesn't require healing! ")
@@ -655,9 +655,9 @@
if(ratio>1)
ratio = 1
uses -= round(overall_damage)
- H.visible_message("[H] is fully healed by [H==user ? "their":"[H]'s"]'s blood magic! ")
+ H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[H]'s"]'s blood magic! ")
else
- H.visible_message("[H] is partially healed by [H==user ? "their":"[H]'s"] blood magic. ")
+ H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[H]'s"] blood magic. ")
uses = 0
ratio *= -1
H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
@@ -670,10 +670,10 @@
user.Beam(H,icon_state="sendbeam",time=15)
else
if(H.stat == DEAD)
- to_chat(user,"Their blood has stopped flowing, you'll have to find another way to extract it. ")
+ to_chat(user,"[H.p_their(TRUE)] blood has stopped flowing, you'll have to find another way to extract it. ")
return
if(H.cultslurring)
- to_chat(user,"Their blood has been tainted by an even stronger form of blood magic, it's no use to us like this! ")
+ to_chat(user,"[H.p_their(TRUE)] blood has been tainted by an even stronger form of blood magic, it's no use to us like this! ")
return
if(H.blood_volume > BLOOD_VOLUME_SAFE)
H.blood_volume -= 100
@@ -684,7 +684,7 @@
to_chat(user,"Your blood rite gains 50 charges from draining [H]'s blood. ")
new /obj/effect/temp_visual/cult/sparks(get_turf(H))
else
- to_chat(user,"They're missing too much blood - you cannot drain them further! ")
+ to_chat(user,"[H.p_theyre(TRUE)] missing too much blood - you cannot drain [H.p_them()] further! ")
return
if(isconstruct(target))
var/mob/living/simple_animal/M = target
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index b7f0b002ec..0c7fb025c7 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -81,9 +81,9 @@
/datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob)
var/list/slots = list(
- "backpack" = slot_in_backpack,
- "left pocket" = slot_l_store,
- "right pocket" = slot_r_store
+ "backpack" = SLOT_IN_BACKPACK,
+ "left pocket" = SLOT_L_STORE,
+ "right pocket" = SLOT_R_STORE
)
var/T = new item_path(mob)
@@ -128,7 +128,7 @@
SSticker.mode.cult -= owner
SSticker.mode.update_cult_icons_removed(owner)
if(!silent)
- owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith! ", null, null, null, owner.current)
+ owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just reverted to [owner.p_their()] old faith! ", null, null, null, owner.current)
to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant. ")
owner.current.log_message("Has renounced the cult of Nar'Sie! ", INDIVIDUAL_ATTACK_LOG)
if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client)
@@ -266,7 +266,7 @@
/datum/objective/sacrifice/update_explanation_text()
if(target)
- explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it."
+ explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with [target.p_them()] on it and three acolytes around it."
else
explanation_text = "The veil has already been weakened here, proceed to the final objective."
diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm
index e929efab2a..b51ff99041 100644
--- a/code/modules/antagonists/cult/cult_comms.dm
+++ b/code/modules/antagonists/cult/cult_comms.dm
@@ -94,7 +94,7 @@
B.current.update_action_buttons_icon()
if(!B.current.incapacitated())
SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg')
- to_chat(B.current, "Acolyte [Nominee] has asserted that they are worthy of leading the cult. A vote will be called shortly. ")
+ to_chat(B.current, "Acolyte [Nominee] has asserted that [Nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly. ")
sleep(100)
var/list/asked_cultists = list()
for(var/datum/mind/B in team.members)
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 35399dc8e0..5f56e1b91b 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -71,8 +71,6 @@
if(!iscultist(user))
if(!is_servant_of_ratvar(user))
to_chat(user, "\"I wouldn't advise that.\" ")
- to_chat(user, "An overwhelming sense of nausea overpowers you! ")
- user.Dizzy(120)
else
to_chat(user, "\"One of Ratvar's toys is trying to play with things [user.p_they()] shouldn't. Cute.\" ")
to_chat(user, "A horrible force yanks at your arm! ")
@@ -101,7 +99,7 @@
inhand_x_dimension = 64
inhand_y_dimension = 64
actions_types = list()
- flags_2 = SLOWS_WHILE_IN_HAND_2
+ item_flags = SLOWS_WHILE_IN_HAND
var/datum/action/innate/dash/cult/jaunt
var/datum/action/innate/cult/spin2win/linked_action
var/spinning = FALSE
@@ -136,10 +134,7 @@
if(!iscultist(user))
if(!is_servant_of_ratvar(user))
to_chat(user, "\"I wouldn't advise that.\" ")
- to_chat(user, "An overwhelming sense of nausea overpowers you! ")
- user.Dizzy(80)
- user.dropItemToGround(src, TRUE)
- user.Knockdown(30)
+ force = 5
return
else
to_chat(user, "\"One of Ratvar's toys is trying to play with things [user.p_they()] shouldn't. Cute.\" ")
@@ -149,6 +144,7 @@
user.dropItemToGround(src, TRUE)
user.Knockdown(50)
return
+ force = initial(force)
jaunt.Grant(user, src)
linked_action.Grant(user, src)
user.update_icons()
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index ed7213f6e4..a9d59cb5cd 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -50,7 +50,7 @@
M.visible_message("[M] repairs \the [src] . ", \
"You repair [src] , leaving [p_they()] at [round(obj_integrity * 100 / max_integrity)]% stability. ")
else
- to_chat(M, "You cannot repair [src], as [p_they()] [p_are()] undamaged! ")
+ to_chat(M, "You cannot repair [src], as [p_theyre()] undamaged! ")
else
..()
@@ -129,7 +129,7 @@
if(cooldowntime > world.time)
to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]. ")
return
- var/choice
+ var/choice
if(user.mind.has_antag_datum(/datum/antagonist/cult/master))
choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Bastard Sword")
else
diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm
index dd129708a8..3f1bc1b04a 100644
--- a/code/modules/antagonists/cult/ritual.dm
+++ b/code/modules/antagonists/cult/ritual.dm
@@ -111,7 +111,7 @@ This file contains the cult dagger and rune list code
for(var/B in spiral_range_turfs(1, user, 1))
var/obj/structure/emergency_shield/sanguine/N = new(B)
shields += N
- user.visible_message("[user] [user.blood_volume ? "cuts open their arm and begins writing in their own blood":"begins sketching out a strange design"]! ", \
+ user.visible_message("[user] [user.blood_volume ? "cuts open [user.p_their()] arm and begins writing in [user.p_their()] own blood":"begins sketching out a strange design"]! ", \
"You [user.blood_volume ? "slice open your arm and ":""]begin drawing a sigil of the Geometer. ")
if(user.blood_volume)
user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
@@ -126,7 +126,7 @@ This file contains the cult dagger and rune list code
return
if(!check_rune_turf(Turf, user))
return
- user.visible_message("[user] creates a strange circle[user.blood_volume ? " in their own blood":""]. ", \
+ user.visible_message("[user] creates a strange circle[user.blood_volume ? " in [user.p_their()] own blood":""]. ", \
"You finish drawing the arcane markings of the Geometer. ")
for(var/V in shields)
var/obj/structure/emergency_shield/S = V
@@ -144,7 +144,8 @@ This file contains the cult dagger and rune list code
if(locate(/obj/effect/rune) in T)
to_chat(user, "There is already a rune here. ")
return FALSE
- if(!is_station_level(T.z) && !is_mining_level(T.z))
+ var/area/A = get_area(T)
+ if((!is_station_level(T.z) && !is_mining_level(T.z)) || (A && !A.blob_allowed))
to_chat(user, "The veil is not weak enough here. ")
return FALSE
return TRUE
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 71e02fdf4c..a1241d5998 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -1061,7 +1061,7 @@ structure_check() searches for nearby cultist structures required for the invoca
/proc/hudFix(mob/living/carbon/human/target)
if(!target || !target.client)
return
- var/obj/O = target.get_item_by_slot(slot_glasses)
+ var/obj/O = target.get_item_by_slot(SLOT_GLASSES)
if(istype(O, /obj/item/clothing/glasses/hud/security))
var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
AH.add_hud_to(target)
diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm
index 55a33820f0..3852eb6de1 100644
--- a/code/modules/antagonists/devil/devil.dm
+++ b/code/modules/antagonists/devil/devil.dm
@@ -456,10 +456,10 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master",
return -1
currentMob.change_mob_type( /mob/living/carbon/human, targetturf, null, 1)
var/mob/living/carbon/human/H = owner.current
- H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/black(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), slot_hands)
- H.equip_to_slot_or_del(new /obj/item/pen(H), slot_l_store)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/black(H), SLOT_W_UNIFORM)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), SLOT_HANDS)
+ H.equip_to_slot_or_del(new /obj/item/pen(H), SLOT_L_STORE)
if(SOULVALUE >= BLOOD_THRESHOLD)
H.set_species(/datum/species/lizard, 1)
H.underwear = "Nude"
diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm
index db85b8d139..72b945600b 100644
--- a/code/modules/antagonists/devil/true_devil/_true_devil.dm
+++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm
@@ -90,7 +90,7 @@
/mob/living/carbon/true_devil/resist_buckle()
if(buckled)
buckled.user_unbuckle_mob(src,src)
- visible_message("[src] easily breaks out of their handcuffs! ", \
+ visible_message("[src] easily breaks out of [p_their()] handcuffs! ", \
"With just a thought your handcuffs fall off. ")
/mob/living/carbon/true_devil/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE)
diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm
index 84faf34387..c55f177b7a 100644
--- a/code/modules/antagonists/highlander/highlander.dm
+++ b/code/modules/antagonists/highlander/highlander.dm
@@ -46,11 +46,11 @@
qdel(I)
for(var/obj/item/I in H.held_items)
qdel(I)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), slot_ears)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), slot_l_store)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt/highlander(H), SLOT_W_UNIFORM)
+ H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE)
for(var/obj/item/pinpointer/nuke/P in H)
P.attack_self(H)
var/obj/item/card/id/W = new(H)
@@ -61,7 +61,7 @@
W.registered_name = H.real_name
W.flags_1 |= NODROP_1
W.update_label(H.real_name)
- H.equip_to_slot_or_del(W, slot_wear_id)
+ H.equip_to_slot_or_del(W, SLOT_WEAR_ID)
sword = new(H)
if(!GLOB.highlander)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
index acf90fb256..3da349ef90 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm
@@ -32,7 +32,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec)
to_chat(user, "On second thought, the element of surprise isn't so bad after all.")
return
- var/war_declaration = "[user.real_name] has declared his intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop them."
+ var/war_declaration = "[user.real_name] has declared [user.p_their()] intent to utterly destroy [station_name()] with a nuclear device, and dares the crew to try and stop [user.p_them()]."
declaring_war = TRUE
var/custom_threat = alert(user, "Do you want to customize your declaration?", "Customize?", "Yes", "No")
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 34d30603d6..03150c0254 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -90,7 +90,7 @@
to_chat(src, "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable. ")
to_chat(src, "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities. ")
to_chat(src, "You do not remember anything of your past lives, nor will you remember anything about this one after your death. ")
- to_chat(src, "Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant to learn more. ")
+ to_chat(src, "Be sure to read the wiki page to learn more. ")
if(!generated_objectives_and_spells)
generated_objectives_and_spells = TRUE
mind.assigned_role = ROLE_REVENANT
diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm
index 95ea189dde..0736af1dc0 100644
--- a/code/modules/antagonists/revenant/revenant_abilities.dm
+++ b/code/modules/antagonists/revenant/revenant_abilities.dm
@@ -43,7 +43,7 @@
to_chat(src, "Ah, the perfect soul. [target] will yield massive amounts of essence to you. ")
if(do_after(src, rand(15, 25), 0, target)) //how about now
if(!target.stat)
- to_chat(src, "[target.p_they(TRUE)] [target.p_are()] now powerful enough to fight off your draining. ")
+ to_chat(src, "[target.p_theyre(TRUE)] now powerful enough to fight off your draining. ")
to_chat(target, "You feel something tugging across your body before subsiding. ")
draining = 0
essence_drained = 0
@@ -76,13 +76,13 @@
drained_mobs.Add(target)
target.death(0)
else
- to_chat(src, "[target ? "[target] has":"They have"] been drawn out of your grasp. The link has been broken. ")
+ to_chat(src, "[target ? "[target] has":"[target.p_theyve(TRUE)]"] been drawn out of your grasp. The link has been broken. ")
if(target) //Wait, target is WHERE NOW?
target.visible_message("[target] slumps onto the ground. ", \
"Violets lights, dancing in your vision, receding-- ")
qdel(B)
else
- to_chat(src, "You are not close enough to siphon [target ? "[target]'s":"their"] soul. The link has been broken. ")
+ to_chat(src, "You are not close enough to siphon [target ? "[target]'s":"[target.p_their()]"] soul. The link has been broken. ")
draining = FALSE
essence_drained = 0
diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm
index 1f77866d76..19c3a43020 100644
--- a/code/modules/antagonists/revolution/revolution.dm
+++ b/code/modules/antagonists/revolution/revolution.dm
@@ -201,12 +201,13 @@
/datum/antagonist/rev/farewell()
if(ishuman(owner.current))
- owner.current.visible_message("[owner.current] looks like they just remembered their real allegiance! ", null, null, null, owner.current)
+ owner.current.visible_message("[owner.current] looks like [owner.p_theyve()] just remembered [owner.p_their()] real allegiance! ", null, null, null, owner.current)
to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you... ")
else if(issilicon(owner.current))
owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it. ", null, null, null, owner.current)
to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you. ")
+//blunt trauma deconversions call this through species.dm spec_attacked_by()
/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter)
log_attack("[owner.current] (Key: [key_name(owner.current)]) has been deconverted from the revolution by [deconverter] (Key: [key_name(deconverter)])!")
if(borged)
@@ -234,9 +235,9 @@
if(give_flash)
var/obj/item/assembly/flash/T = new(H)
var/list/slots = list (
- "backpack" = slot_in_backpack,
- "left pocket" = slot_l_store,
- "right pocket" = slot_r_store
+ "backpack" = SLOT_IN_BACKPACK,
+ "left pocket" = SLOT_L_STORE,
+ "right pocket" = SLOT_R_STORE
)
var/where = H.equip_in_one_of_slots(T, slots)
if (!where)
@@ -357,7 +358,7 @@
for(var/datum/antagonist/A in heads | get_team_antags())
parts += A.antag_listing_entry()
-
+
parts += ""
parts += antag_listing_footer()
common_part = parts.Join()
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index 9457e3a8c8..61d890a743 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -66,7 +66,7 @@
name = "pile of viscera"
desc = "A repulsive pile of guts and gore."
gender = NEUTER
- random_icon_states = list("innards")
+ icon_state = "innards"
/mob/living/simple_animal/slaughter/phasein()
. = ..()
@@ -87,7 +87,7 @@
/obj/item/organ/heart/demon/attack(mob/M, mob/living/carbon/user, obj/target)
if(M != user)
return ..()
- user.visible_message("[user] raises [src] to their mouth and tears into it with their teeth! ", \
+ user.visible_message("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth! ", \
"An unnatural hunger consumes you. You raise [src] your mouth and devour it! ")
playsound(user, 'sound/magic/demon_consume.ogg', 50, 1)
for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list)
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index e09b92a083..f3ea4ef2ea 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -296,9 +296,9 @@
folder = new/obj/item/folder/syndicate/blue(mob.loc)
var/list/slots = list (
- "backpack" = slot_in_backpack,
- "left pocket" = slot_l_store,
- "right pocket" = slot_r_store
+ "backpack" = SLOT_IN_BACKPACK,
+ "left pocket" = SLOT_L_STORE,
+ "right pocket" = SLOT_R_STORE
)
var/where = "At your feet"
diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm
index 5d26c656b6..7e1effbaff 100644
--- a/code/modules/antagonists/valentines/valentine.dm
+++ b/code/modules/antagonists/valentines/valentine.dm
@@ -19,7 +19,7 @@
. = ..()
/datum/antagonist/valentine/greet()
- to_chat(owner, "You're on a date with [date.name]! Protect them at all costs. This takes priority over all other loyalties. ")
+ to_chat(owner, "You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties. ")
//Squashed up a bit
/datum/antagonist/valentine/roundend_report()
@@ -31,6 +31,6 @@
break
if(objectives_complete)
- return "[owner.name] protected their date "
+ return "[owner.name] protected [owner.p_their()] date "
else
return "[owner.name] date failed! "
\ No newline at end of file
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index e0db2e5905..1427f5ab68 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -177,7 +177,7 @@
M.revive(full_heal = 1, admin_revive = 1)
spooky_scaries |= M
to_chat(M, "You have been revived by [user.real_name]! ")
- to_chat(M, "[user.p_they(TRUE)] [user.p_are()] your master now, assist them even if it costs you your new life! ")
+ to_chat(M, "[user.p_theyre(TRUE)] your master now, assist [user.p_them()] even if it costs you your new life! ")
equip_roman_skeleton(M)
@@ -204,12 +204,12 @@
H.dropItemToGround(I)
var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire)
- H.equip_to_slot_or_del(new hat(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes)
+ H.equip_to_slot_or_del(new hat(H), SLOT_HEAD)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), SLOT_W_UNIFORM)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES)
H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE)
H.put_in_hands(new /obj/item/claymore(H), TRUE)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), SLOT_BACK)
/obj/item/voodoo
@@ -318,7 +318,7 @@
to_chat(victim, "You feel a dark presence from [A.name] ")
/obj/item/voodoo/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] links the voodoo doll to themself and sits on it, infinitely crushing themself! It looks like [user.p_theyre()] trying to commit suicide! ")
+ user.visible_message("[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide! ")
user.gib()
return(BRUTELOSS)
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index c0a328b3ae..e26c1e6d39 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -8,7 +8,7 @@
layer = HIGH_OBJ_LAYER
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power."
w_class = WEIGHT_CLASS_TINY
- slot_flags = SLOT_BELT
+ slot_flags = ITEM_SLOT_BELT
var/usability = 0
var/old_shard = FALSE
@@ -33,7 +33,6 @@
..()
if(!iscultist(user) && !iswizard(user) && !usability)
to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly. ")
- user.Dizzy(120)
/obj/item/soulstone/examine(mob/user)
..()
@@ -89,7 +88,7 @@
icon_state = "soulstone"
name = initial(name)
if(iswizard(user) || usability)
- to_chat(A, "You have been released from your prison, but you are still bound to [user.real_name]'s will. Help them succeed in their goals at all costs. ")
+ to_chat(A, "You have been released from your prison, but you are still bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs. ")
else if(iscultist(user))
to_chat(A, "You have been released from your prison, but you are still bound to the cult's will. Help them succeed in their goals at all costs. ")
was_used()
@@ -223,9 +222,9 @@
if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode)
SSticker.mode.add_cultist(newstruct.mind, 0)
if(iscultist(stoner) || cultoverride)
- to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow their orders and help them complete their goals at all costs. ")
+ to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs. ")
else if(stoner)
- to_chat(newstruct, "You are still bound to serve your creator, [stoner], follow their orders and help them complete their goals at all costs. ")
+ to_chat(newstruct, "You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs. ")
newstruct.clear_alert("bloodsense")
BS = newstruct.throw_alert("bloodsense", /obj/screen/alert/bloodsense)
if(BS)
@@ -253,11 +252,11 @@
name = "soulstone: Shade of [T.real_name]"
icon_state = "soulstone2"
if(U && (iswizard(U) || usability))
- to_chat(S, "Your soul has been captured! You are now bound to [U.real_name]'s will. Help them succeed in their goals at all costs.")
+ to_chat(S, "Your soul has been captured! You are now bound to [U.real_name]'s will. Help [U.p_them()] succeed in [U.p_their()] goals at all costs.")
else if(U && iscultist(U))
to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.")
if(vic && U)
- to_chat(U, "Capture successful! : [T.real_name]'s soul has been ripped from their body and stored within the soul stone.")
+ to_chat(U, "Capture successful! : [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.")
/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/U)
diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm
index a042b3d08c..3f94c65437 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook.dm
@@ -1,716 +1,716 @@
-/datum/spellbook_entry
- var/name = "Entry Name"
-
- var/spell_type = null
- var/desc = ""
- var/category = "Offensive"
- var/cost = 2
- var/refundable = 1
- var/surplus = -1 // -1 for infinite, not used by anything atm
- var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell
- var/buy_word = "Learn"
- var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook
- var/list/no_coexistance_typecache //Used so you can't have specific spells together
-
-/datum/spellbook_entry/New()
- ..()
- no_coexistance_typecache = typecacheof(no_coexistance_typecache)
-
-/datum/spellbook_entry/proc/IsAvailible() // For config prefs / gamemode restrictions - these are round applied
- return 1
-
-/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book) // Specific circumstances
- if(book.uses= aspell.level_max)
- to_chat(user, "This spell cannot be improved further. ")
- return 0
- else
- aspell.name = initial(aspell.name)
- aspell.spell_level++
- aspell.charge_max = round(initial(aspell.charge_max) - aspell.spell_level * (initial(aspell.charge_max) - aspell.cooldown_min)/ aspell.level_max)
- if(aspell.charge_max < aspell.charge_counter)
- aspell.charge_counter = aspell.charge_max
- switch(aspell.spell_level)
- if(1)
- to_chat(user, "You have improved [aspell.name] into Efficient [aspell.name]. ")
- aspell.name = "Efficient [aspell.name]"
- if(2)
- to_chat(user, "You have further improved [aspell.name] into Quickened [aspell.name]. ")
- aspell.name = "Quickened [aspell.name]"
- if(3)
- to_chat(user, "You have further improved [aspell.name] into Free [aspell.name]. ")
- aspell.name = "Free [aspell.name]"
- if(4)
- to_chat(user, "You have further improved [aspell.name] into Instant [aspell.name]. ")
- aspell.name = "Instant [aspell.name]"
- if(aspell.spell_level >= aspell.level_max)
- to_chat(user, "This spell cannot be strengthened any further. ")
- SSblackbox.record_feedback("nested tally", "wizard_spell_improved", 1, list("[name]", "[aspell.spell_level]"))
- return 1
- //No same spell found - just learn it
- SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
- user.mind.AddSpell(S)
- to_chat(user, "You have learned [S.name]. ")
- return 1
-
-/datum/spellbook_entry/proc/CanRefund(mob/living/carbon/human/user,obj/item/spellbook/book)
- if(!refundable)
- return 0
- if(!S)
- S = new spell_type()
- for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list)
- if(initial(S.name) == initial(aspell.name))
- return 1
- return 0
-
-/datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/spellbook/book) //return point value or -1 for failure
- var/area/wizard_station/A = locate() in GLOB.sortedAreas
- if(!(user in A.contents))
- to_chat(user, "You can only refund spells at the wizard lair ")
- return -1
- if(!S)
- S = new spell_type()
- var/spell_levels = 0
- for(var/obj/effect/proc_holder/spell/aspell in user.mind.spell_list)
- if(initial(S.name) == initial(aspell.name))
- spell_levels = aspell.spell_level
- user.mind.spell_list.Remove(aspell)
- qdel(S)
- return cost * (spell_levels+1)
- return -1
-/datum/spellbook_entry/proc/GetInfo()
- if(!S)
- S = new spell_type()
- var/dat =""
- dat += "[initial(S.name)] "
- if(S.charge_type == "recharge")
- dat += " Cooldown:[S.charge_max/10]"
- dat += " Cost:[cost] "
- dat += "[S.desc][desc] "
- dat += "[S.clothes_req?"Needs wizard garb":"Can be cast without wizard garb"] "
- return dat
-
-/datum/spellbook_entry/fireball
- name = "Fireball"
- spell_type = /obj/effect/proc_holder/spell/aimed/fireball
-
-/datum/spellbook_entry/spell_cards
- name = "Spell Cards"
- spell_type = /obj/effect/proc_holder/spell/aimed/spell_cards
-
-/datum/spellbook_entry/rod_form
- name = "Rod Form"
- spell_type = /obj/effect/proc_holder/spell/targeted/rod_form
-
-/datum/spellbook_entry/magicm
- name = "Magic Missile"
- spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile
- category = "Defensive"
-
-/datum/spellbook_entry/disintegrate
- name = "Disintegrate"
- spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate
-
-/datum/spellbook_entry/disabletech
- name = "Disable Tech"
- spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
- category = "Defensive"
- cost = 1
-
-/datum/spellbook_entry/repulse
- name = "Repulse"
- spell_type = /obj/effect/proc_holder/spell/aoe_turf/repulse
- category = "Defensive"
-
-/datum/spellbook_entry/lightningPacket
- name = "Lightning bolt! Lightning bolt!"
- spell_type = /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket
- category = "Defensive"
-
-/datum/spellbook_entry/timestop
- name = "Time Stop"
- spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
- category = "Defensive"
-
-/datum/spellbook_entry/smoke
- name = "Smoke"
- spell_type = /obj/effect/proc_holder/spell/targeted/smoke
- category = "Defensive"
- cost = 1
-
-/datum/spellbook_entry/blind
- name = "Blind"
- spell_type = /obj/effect/proc_holder/spell/targeted/trigger/blind
- cost = 1
-
-/datum/spellbook_entry/mindswap
- name = "Mindswap"
- spell_type = /obj/effect/proc_holder/spell/targeted/mind_transfer
- category = "Mobility"
-
-/datum/spellbook_entry/forcewall
- name = "Force Wall"
- spell_type = /obj/effect/proc_holder/spell/targeted/forcewall
- category = "Defensive"
- cost = 1
-
-/datum/spellbook_entry/blink
- name = "Blink"
- spell_type = /obj/effect/proc_holder/spell/targeted/turf_teleport/blink
- category = "Mobility"
-
-/datum/spellbook_entry/teleport
- name = "Teleport"
- spell_type = /obj/effect/proc_holder/spell/targeted/area_teleport/teleport
- category = "Mobility"
-
-/datum/spellbook_entry/mutate
- name = "Mutate"
- spell_type = /obj/effect/proc_holder/spell/targeted/genetic/mutate
-
-/datum/spellbook_entry/jaunt
- name = "Ethereal Jaunt"
- spell_type = /obj/effect/proc_holder/spell/targeted/ethereal_jaunt
- category = "Mobility"
-
-/datum/spellbook_entry/knock
- name = "Knock"
- spell_type = /obj/effect/proc_holder/spell/aoe_turf/knock
- category = "Mobility"
- cost = 1
-
-/datum/spellbook_entry/fleshtostone
- name = "Flesh to Stone"
- spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone
-
-/datum/spellbook_entry/summonitem
- name = "Summon Item"
- spell_type = /obj/effect/proc_holder/spell/targeted/summonitem
- category = "Assistance"
- cost = 1
-
-/datum/spellbook_entry/lichdom
- name = "Bind Soul"
- spell_type = /obj/effect/proc_holder/spell/targeted/lichdom
- category = "Defensive"
-
-/datum/spellbook_entry/teslablast
- name = "Tesla Blast"
- spell_type = /obj/effect/proc_holder/spell/targeted/tesla
-
-/datum/spellbook_entry/lightningbolt
- name = "Lightning Bolt"
- spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt
- cost = 3
-
-/datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) //return 1 on success
- . = ..()
- user.flags_2 |= TESLA_IGNORE_2
-
-/datum/spellbook_entry/infinite_guns
- name = "Lesser Summon Guns"
- spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun
- cost = 3
- no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage
-
-/datum/spellbook_entry/arcane_barrage
- name = "Arcane Barrage"
- spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage
- cost = 3
- no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun
-
-/datum/spellbook_entry/barnyard
- name = "Barnyard Curse"
- spell_type = /obj/effect/proc_holder/spell/targeted/barnyardcurse
-
-/datum/spellbook_entry/charge
- name = "Charge"
- spell_type = /obj/effect/proc_holder/spell/targeted/charge
- category = "Assistance"
- cost = 1
-
-/datum/spellbook_entry/shapeshift
- name = "Wild Shapeshift"
- spell_type = /obj/effect/proc_holder/spell/targeted/shapeshift
- category = "Assistance"
- cost = 1
-
-/datum/spellbook_entry/spacetime_dist
- name = "Spacetime Distortion"
- spell_type = /obj/effect/proc_holder/spell/spacetime_dist
- category = "Defensive"
- cost = 1
-
-/datum/spellbook_entry/the_traps
- name = "The Traps!"
- spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps
- category = "Defensive"
- cost = 1
-
-
-/datum/spellbook_entry/item
- name = "Buy Item"
- refundable = 0
- buy_word = "Summon"
- var/item_path= null
-
-
-/datum/spellbook_entry/item/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- new item_path(get_turf(user))
- SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
- return 1
-
-/datum/spellbook_entry/item/GetInfo()
- var/dat =""
- dat += "[name] "
- dat += " Cost:[cost] "
- dat += "[desc] "
- if(surplus>=0)
- dat += "[surplus] left. "
- return dat
-
-/datum/spellbook_entry/item/staffchange
- name = "Staff of Change"
- desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
- item_path = /obj/item/gun/magic/staff/change
-
-/datum/spellbook_entry/item/staffanimation
- name = "Staff of Animation"
- desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines."
- item_path = /obj/item/gun/magic/staff/animate
- category = "Assistance"
-
-/datum/spellbook_entry/item/staffchaos
- name = "Staff of Chaos"
- desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended."
- item_path = /obj/item/gun/magic/staff/chaos
-
-/datum/spellbook_entry/item/spellblade
- name = "Spellblade"
- desc = "A sword capable of firing blasts of energy which rip targets limb from limb."
- item_path = /obj/item/gun/magic/staff/spellblade
-
-/datum/spellbook_entry/item/staffdoor
- name = "Staff of Door Creation"
- desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass."
- item_path = /obj/item/gun/magic/staff/door
- cost = 1
- category = "Mobility"
-
-/datum/spellbook_entry/item/staffhealing
- name = "Staff of Healing"
- desc = "An altruistic staff that can heal the lame and raise the dead."
- item_path = /obj/item/gun/magic/staff/healing
- cost = 1
- category = "Defensive"
-
-/datum/spellbook_entry/item/scryingorb
- name = "Scrying Orb"
- desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision."
- item_path = /obj/item/scrying
- category = "Defensive"
-
-/datum/spellbook_entry/item/soulstones
- name = "Six Soul Stone Shards and the spell Artificer"
- desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot."
- item_path = /obj/item/storage/belt/soulstone/full
- category = "Assistance"
-
-/datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- . =..()
- if(.)
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null))
- return .
-
-/datum/spellbook_entry/item/necrostone
- name = "A Necromantic Stone"
- desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command."
- item_path = /obj/item/necromantic_stone
- category = "Assistance"
-
-/datum/spellbook_entry/item/wands
- name = "Wand Assortment"
- desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt."
- item_path = /obj/item/storage/belt/wands/full
- category = "Defensive"
-
-/datum/spellbook_entry/item/armor
- name = "Mastercrafted Armor Set"
- desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space."
- item_path = /obj/item/clothing/suit/space/hardsuit/wizard
- category = "Defensive"
-
-/datum/spellbook_entry/item/armor/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- . = ..()
- if(.)
- new /obj/item/clothing/shoes/sandal/magic(get_turf(user)) //In case they've lost them.
- new /obj/item/clothing/gloves/color/purple(get_turf(user))//To complete the outfit
-
-/datum/spellbook_entry/item/contract
- name = "Contract of Apprenticeship"
- desc = "A magical contract binding an apprentice wizard to your service, using it will summon them to your side."
- item_path = /obj/item/antag_spawner/contract
- category = "Assistance"
-
-/datum/spellbook_entry/item/guardian
- name = "Guardian Deck"
- desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \
- It would be wise to avoid buying these with anything capable of causing you to swap bodies with others."
- item_path = /obj/item/guardiancreator/choose/wizard
- category = "Assistance"
-
-/datum/spellbook_entry/item/guardian/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- . = ..()
- if(.)
- new /obj/item/paper/guides/antag/guardian/wizard(get_turf(user))
-
-/datum/spellbook_entry/item/bloodbottle
- name = "Bottle of Blood"
- desc = "A bottle of magically infused blood, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned by blood magic are indiscriminate in their killing, and you yourself may become a victim."
- item_path = /obj/item/antag_spawner/slaughter_demon
- limit = 3
- category = "Assistance"
-
-/datum/spellbook_entry/item/hugbottle
- name = "Bottle of Tickles"
- desc = "A bottle of magically infused fun, the smell of which will \
- attract adorable extradimensional beings when broken. These beings \
- are similar to slaughter demons, but they do not permamently kill \
- their victims, instead putting them in an extradimensional hugspace, \
- to be released on the demon's death. Chaotic, but not ultimately \
- damaging. The crew's reaction to the other hand could be very \
- destructive."
- item_path = /obj/item/antag_spawner/slaughter_demon/laughter
- cost = 1 //non-destructive; it's just a jape, sibling!
- limit = 3
- category = "Assistance"
-
-/datum/spellbook_entry/item/mjolnir
- name = "Mjolnir"
- desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power."
- item_path = /obj/item/twohanded/mjollnir
-
-/datum/spellbook_entry/item/singularity_hammer
- name = "Singularity Hammer"
- desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact."
- item_path = /obj/item/twohanded/singularityhammer
-
-/datum/spellbook_entry/item/battlemage
- name = "Battlemage Armour"
- desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted."
- item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard
- limit = 1
- category = "Defensive"
-
-/datum/spellbook_entry/item/battlemage_charge
- name = "Battlemage Armour Charges"
- desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour."
- item_path = /obj/item/wizard_armour_charge
- category = "Defensive"
- cost = 1
-
-/datum/spellbook_entry/item/warpwhistle
- name = "Warp Whistle"
- desc = "A strange whistle that will transport you to a distant safe place on the station. There is a window of vulnerability at the beginning of every use."
- item_path = /obj/item/warpwhistle
- category = "Mobility"
- cost = 1
-
-/datum/spellbook_entry/summon
- name = "Summon Stuff"
- category = "Rituals"
- refundable = 0
- buy_word = "Cast"
- var/active = 0
-
-/datum/spellbook_entry/summon/CanBuy(mob/living/carbon/human/user,obj/item/spellbook/book)
- return ..() && !active
-
-/datum/spellbook_entry/summon/GetInfo()
- var/dat =""
- dat += "[name] "
- if(cost>0)
- dat += " Cost:[cost] "
- else
- dat += " No Cost "
- dat += "[desc] "
- if(active)
- dat += "Already cast! "
- return dat
-
-/datum/spellbook_entry/summon/ghosts
- name = "Summon Ghosts"
- desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you."
- cost = 0
-
-/datum/spellbook_entry/summon/ghosts/IsAvailible()
- if(!SSticker.mode)
- return FALSE
- else
- return TRUE
-
-/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book)
- SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
- new /datum/round_event/wizard/ghost()
- active = TRUE
- to_chat(user, "You have cast summon ghosts! ")
- playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1)
- return TRUE
-
-/datum/spellbook_entry/summon/guns
- name = "Summon Guns"
- desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!"
-
-/datum/spellbook_entry/summon/guns/IsAvailible()
- if(!SSticker.mode) // In case spellbook is placed on map
- return 0
- return !CONFIG_GET(flag/no_summon_guns)
-
-/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
- rightandwrong(SUMMON_GUNS, user, 25)
- active = 1
- playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
- to_chat(user, "You have cast summon guns! ")
- return 1
-
-/datum/spellbook_entry/summon/magic
- name = "Summon Magic"
- desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time."
-
-/datum/spellbook_entry/summon/magic/IsAvailible()
- if(!SSticker.mode) // In case spellbook is placed on map
- return 0
- return !CONFIG_GET(flag/no_summon_magic)
-
-/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
- rightandwrong(SUMMON_MAGIC, user, 25)
- active = 1
- playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
- to_chat(user, "You have cast summon magic! ")
- return 1
-
-/datum/spellbook_entry/summon/events
- name = "Summon Events"
- desc = "Give Murphy's law a little push and replace all events with special wizard ones that will confound and confuse everyone. Multiple castings increase the rate of these events."
- var/times = 0
-
-/datum/spellbook_entry/summon/events/IsAvailible()
- if(!SSticker.mode) // In case spellbook is placed on map
- return 0
- return !CONFIG_GET(flag/no_summon_events)
-
-/datum/spellbook_entry/summon/events/Buy(mob/living/carbon/human/user,obj/item/spellbook/book)
- SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, name)
- summonevents()
- times++
- playsound(get_turf(user), 'sound/magic/castsummon.ogg', 50, 1)
- to_chat(user, "You have cast summon events. ")
- return 1
-
-/datum/spellbook_entry/summon/events/GetInfo()
- . = ..()
- if(times>0)
- . += "You cast it [times] times. "
- return .
-
-/obj/item/spellbook
- name = "spell book"
- desc = "An unearthly tome that glows with power."
- icon = 'icons/obj/library.dmi'
- icon_state ="book"
- throw_speed = 2
- throw_range = 5
- w_class = WEIGHT_CLASS_TINY
- var/uses = 10
- var/temp = null
- var/tab = null
- var/mob/living/carbon/human/owner
- var/list/datum/spellbook_entry/entries = list()
- var/list/categories = list()
-
-/obj/item/spellbook/examine(mob/user)
- ..()
- if(owner)
- to_chat(user, "There is a small signature on the front cover: \"[owner]\".")
- else
- to_chat(user, "It appears to have no author.")
-
-/obj/item/spellbook/Initialize()
- . = ..()
- prepare_spells()
-
-/obj/item/spellbook/proc/prepare_spells()
- var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon
- for(var/T in entry_types)
- var/datum/spellbook_entry/E = new T
- if(E.IsAvailible())
- entries |= E
- categories |= E.category
- else
- qdel(E)
- tab = categories[1]
-
-/obj/item/spellbook/attackby(obj/item/O, mob/user, params)
- if(istype(O, /obj/item/antag_spawner/contract))
- var/obj/item/antag_spawner/contract/contract = O
- if(contract.used)
- to_chat(user, "The contract has been used, you can't get your points back now! ")
- else
- to_chat(user, "You feed the contract back into the spellbook, refunding your points. ")
- uses++
- for(var/datum/spellbook_entry/item/contract/CT in entries)
- if(!isnull(CT.limit))
- CT.limit++
- qdel(O)
- else if(istype(O, /obj/item/antag_spawner/slaughter_demon))
- to_chat(user, "On second thought, maybe summoning a demon is a bad idea. You refund your points. ")
- uses++
- for(var/datum/spellbook_entry/item/bloodbottle/BB in entries)
- if(!isnull(BB.limit))
- BB.limit++
- qdel(O)
-
-/obj/item/spellbook/proc/GetCategoryHeader(category)
- var/dat = ""
- switch(category)
- if("Offensive")
- dat += "Spells and items geared towards debilitating and destroying. "
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
- dat += "For spells: the number after the spell name is the cooldown time. "
- dat += "You can reduce this number by spending more points on the spell. "
- if("Defensive")
- dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack. "
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
- dat += "For spells: the number after the spell name is the cooldown time. "
- dat += "You can reduce this number by spending more points on the spell. "
- if("Mobility")
- dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one. "
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
- dat += "For spells: the number after the spell name is the cooldown time. "
- dat += "You can reduce this number by spending more points on the spell. "
- if("Assistance")
- dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties. "
- dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased. "
- dat += "For spells: the number after the spell name is the cooldown time. "
- dat += "You can reduce this number by spending more points on the spell. "
- if("Challenges")
- dat += "The Wizard Federation typically has hard limits on the potency and number of spells brought to the station based on risk. "
- dat += "Arming the station against you will increases the risk, but will grant you one more charge for your spellbook. "
- if("Rituals")
- dat += "These powerful spells change the very fabric of reality. Not always in your favour. "
- return dat
-
-/obj/item/spellbook/proc/wrap(content)
- var/dat = ""
- dat +="Spellbook "
- dat += {"
-
-
-
- "}
- dat += {"[content]